# Data Stores

PermissionsEx can store its data in a variety of formats. By default, PEX uses the `file` backend to store permissions in the `permissions.json` file in the plugin data folder, but several others are available

## Moving between data stores

The currently active data store is set with the `default-backend` option in the plugin's configuration file. The default backend may be chosen from any data store configured in the `backends` map in the configuration. While only two data stores are listed by default, any number may be configured -- PermissionsEx only loads the one specified in `default-backend` and whichever data stores may be requested for imports.

The command `\pex import [id]` will import a data store with the id `id`, or if no parameters are provided give a list of available data stores to import from.

When importing from another data store, any subject that is present in the data store being imported from will **completely overwrite** the subject with the same identifier in the destination (i.e. currently active) data store.

## Data Store Types

### JSON File `file`

The default backend, writing to a file in the PermissionsEx data folder

#### Options

| Option                | Purpose                                                                                     | Default Value      |
| --------------------- | ------------------------------------------------------------------------------------------- | ------------------ |
| `file`                | The file to use                                                                             | `permissions.json` |
| `auto-reload`         | Automatically reload permissions when a change is made to the file                          | `true`             |
| `alphabetize-entries` | Whether to sort entries alphabetically (when true), or maintain existing order (when false) | `false`            |

### `sql`

Stores permissions data in an SQL database.

Currently supported databases are H2 and MariaDB/MySQL. PEX uses server-provided database connectors, so different platforms may have more limited support.

| Option | Purpose                                                                                                                                          | Default Value       |
| ------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------- |
| `url`  | The URL of the database to connect to, in the format `jdbc:<type>:[/[[<user>:<password>@]<host>/]<database>`, where brackets indicate parameters | `h2:permissions.db` |

## Migration (read-only) data stores

These data stores are written to migrate from other permissions plugins. Generally these do not have to be configured manually -- they will be detected and made available for import when running `\pex import`

* LuckPerms (supports combined file format only for the moment, and does not support TOML)
* UltraPermissions (not yet implemented)
* Ops file
* GroupManager


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://permissionsex.stellardrift.ca/components-in-detail/data-stores.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
