# User Data

Store and manage player data to enhance gameplay experience and retain progress.

There are two types of storage: `local_storage` and `platform_internal`. When writing to local storage, data is saved on the player's device. When writing to internal storage, data is saved on the platform's servers.

{% hint style="warning" %}
If you need to call storage methods in a sequence, make sure you wait for previous call to finish, so there is no potential data collisions.
{% endhint %}

#### Current Storage Type <a href="#current-storage-type" id="current-storage-type"></a>

Identify the default storage type to understand where data is being saved (local or server).

```lua
bridge.storage.default_type()
```

Possible values: `local_storage`, `platform_internal`.

#### Support Check <a href="#support-check" id="support-check"></a>

Verify if the specified storage type is supported on the platform to ensure compatibility.

```lua
bridge.storage.is_supported("local_storage")
bridge.storage.is_supported("platform_internal")
```

#### Availability Check <a href="#availability-check" id="availability-check"></a>

Check if the specified storage type is currently available for use to manage data storage effectively.

```lua
bridge.storage.is_available("local_storage")
bridge.storage.is_available("platform_internal")
```

#### <img src="https://1088849411-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5ukgSPDBOdbQp4FYtbz1%2Fuploads%2F9BooaofCI33U9Np5oeif%2FFrame%203%20(1).png?alt=media&#x26;token=0750b56a-a069-4759-bda9-29951f06cd30" alt="" data-size="line"> Load Data <a href="#load-data" id="load-data"></a>

Retrieve stored data based on a key or multiple keys to restore player progress or settings.

```lua
local bridge = require("bridge.bridge")

function init(self)	
	bridge.storage.get(
		{ "coins", "level" }, 
		function (_, data)
			if data.coins then
				print("Coins: ", data.coins)
			end
			if data.level then
				print("Level: ", data.level)
			end
		end, 
		function ()
			-- error
		end
	)
end
```

#### <img src="https://1088849411-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5ukgSPDBOdbQp4FYtbz1%2Fuploads%2F9BooaofCI33U9Np5oeif%2FFrame%203%20(1).png?alt=media&#x26;token=0750b56a-a069-4759-bda9-29951f06cd30" alt="" data-size="line"> Save Data <a href="#save-data" id="save-data"></a>

Save data to the specified storage with a key to retain player progress or settings.

<pre class="language-lua"><code class="lang-lua">local bridge = require("bridge.bridge")

function init(self)	
<strong>	bridge.storage.set(
</strong>		{ coins = 42, level = "dungeon" }, 
		function (_)
			-- success
		end, 
		function (_)
			-- error
		end
	)	
end
</code></pre>

#### Delete Data <a href="#delete-data" id="delete-data"></a>

Remove data from the specified storage by key to manage player data and settings effectively.

```lua
local bridge = require("bridge.bridge")

function init(self)	
	bridge.storage.delete(
		{ "coins", "level" }, 
		function ()
			-- success
		end, 
		function ()
			-- error
		end
	)
end
```

All data operations interact with the default storage type. You can specify the storage type as the second argument. Ensure the storage is supported and available before using it.

```lua
brdige.storage.get(table_keys, on_success, on_error, storage_type)
brdige.storage.set(table, on_success, on_error, storage_type)
brdige.storage.delete(table_keys, on_success, on_error, storage_type)
```
