> ## Documentation Index
> Fetch the complete documentation index at: https://docs.meridian.surf/llms.txt
> Use this file to discover all available pages before exploring further.

# Storage

The place where all your bot's variables are visualized. Available in List and Database type, the data is shown however you prefer.

# Creating a variable

To create a new variable, hit the <Badge color="blue">New variable</Badge> button. A menu will show to customize your new variable however you'd like.

<img src="https://mintcdn.com/meridian-b49c11fd/RY2zCjLWrnLtm3_F/images/zen_pKcEiKTZSu.png?fit=max&auto=format&n=RY2zCjLWrnLtm3_F&q=85&s=cb397aaa2849211294a04b5635bfe844" alt="Zen P Kc Ei KTZ Su" width="1315" height="320" data-path="images/zen_pKcEiKTZSu.png" />

## Variable types

* **Text:** a basic text variable. This can hold all values, including numbers. For example, `abc123!` is accepted input.
* **Number:** a basic number variable. It can hold numbers only. For example, `0.65` is a perfectly acceptable input.
* **List:** a list variable. This can hold a series of values inside the same variable. For example, a List variable can store `apples, bananas, cherries` all in one variable, and you'll be able to pick which one you'd like to be shown based on a number you provide (e.g. `{VAR_fruits.1}` will return `apples` using the example above).
* **Group:** this variable allows holding variables with their own values inside it. With the example provided below, we can call the variable `{VAR_fruits.apple}`. This will return `yummy`, as that's the value tied to the key.
  * Key: `apple` with value `yummy`
  * Key: `banana` with value `meh`
  * Key: `cherry` with value `super yummy`

## Variable scopes

Scopes are handy for separating values between servers, especially when you're running systems like Leveling, where you'd like to separate a user's level, so their level isn't in sync between two or more servers.

* Use the **Server** scope if you'd like to separate a variable's value between servers.
  <Warning>
    Using the **Server** scope will disable any variable usage outside of the server completely. Direct messages sent to users from a certain server and variable will **NOT** work and instead return an empty value.
  </Warning>
* Use the **Global** scope if you'd like a variable to carry over across servers and direct messages. This is handy for stuff like bot configuration or when your bot is used to connect between multiple servers.

## Variable keying

Similar to scopes, variable keying is used to separate data.

* Use **Shared** if it doesn't matter what this variable is used for.
* Use **Per user** if you'd like to separate the values for each user. This is particularly handy in systems like Economy where you'd like to separate bank balances of users so not everyone has the same amount of money.
* Use **Per channel** if you'd like to separate values between channels. This is particularly handy for Ticket systems, where you'd like to store some information on a specific ticket only.
* Use **Per role** if you'd like to separate values between roles. This can be used in systems like Custom roles, where you can store the owner's ID inside a role-specific variable.

## Default value

A default value is assigned to all variables if there is no value yet. For example, you can set the default value to `no` in a text command that determines a user's Premium status on your bot to make sure the user does NOT have Premium when they first use your bot. You can later overwrite this value by setting it to `yes` or something of your choice.

# List all variables

This is the default way of your bot's variables being shown. Clicking the three <Icon icon="ellipsis-vertical" color="#ffffff" /> dots allows you to copy a variable's Paste code (e.g. `{VAR_economy}`), and clicking Delete variable will delete the variable and all its values. Don't worry - you'll be asked for confirmation before you accidentally delete an important variable.

<img src="https://mintcdn.com/meridian-b49c11fd/RY2zCjLWrnLtm3_F/images/zen_leDmHI9Ibx.png?fit=max&auto=format&n=RY2zCjLWrnLtm3_F&q=85&s=e6a8cd1b318c2892bc1d138b16d69281" alt="Zen Le Dm Hi9ibx" width="1311" height="432" data-path="images/zen_leDmHI9Ibx.png" />

# Database view

You can also show the variables as a database, with all information shown to you clearly. It includes all information, from variable Type to its Default value. Using the <Icon icon="pen" color="#ffffff" /> Pen icon, you can edit all properties of the variable. Clicking the three <Icon icon="ellipsis-vertical" color="#ffffff" /> dots allows you to copy a variable's Paste code (e.g. `{VAR_economy}`), and clicking Delete variable will delete the variable and all its values. Don't worry - you'll still be asked for confirmation before you accidentally delete an important variable.

<img src="https://mintcdn.com/meridian-b49c11fd/RY2zCjLWrnLtm3_F/images/zen_G2OfDguXDI.png?fit=max&auto=format&n=RY2zCjLWrnLtm3_F&q=85&s=bb4a9a4527115b551ce349bbf91887c0" alt="Zen G2of Dgu XDI" title="Zen G2of Dgu XDI" width="1312" height="344" data-path="images/zen_G2OfDguXDI.png" />

# Environment variables

Environment variables (or Env variables for short) allow you to store variables with an extra layer of encryption. For example, if you'd like to store an API key without it being able to be sent by the bot, you can use Env variables. It still outputs information in stuff like API requests, but will not work in messages to make sure your API key isn't accidentally leaked.

You can optionally set an Env variable to be Private. This will hide the value after saving and will not show it again. This is useful when you have collaborators on the bot and you don't want them to know a secret key to a system of yours.
