> For the complete documentation index, see [llms.txt](https://docs.marioded.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.marioded.com/configure-and-customize/configuration.md).

# Configuration

Find the right file, understand each setting, and know when a restart is needed.

Start with the file for the plugin you are configuring. Reverse generates the full template on first startup.

| Plugin   | Main settings                         | Text and display                          |
| -------- | ------------------------------------- | ----------------------------------------- |
| Recorder | `plugins/reverse-recorder/config.yml` | `messages.yml`                            |
| Player   | `plugins/reverse-player/config.yml`   | `messages.yml` and `layout.yml`           |
| Lobby    | `plugins/reverse-lobby/config.yml`    | `messages` and `gui` inside the same file |

{% hint style="info" %}
**Merge examples into the generated file.** The snippets below show individual sections, not complete replacement configurations. Keep the other generated sections.
{% endhint %}

Reverse generates YAML using lower-kebab-case field names. Edit the generated files for your build, retain unknown-to-you sections, and quote text containing `<...>`, `:`, `#`, or other YAML-sensitive characters.

## Shared storage section

Every role has `storage` in `config.yml`:

<details>

<summary>Show the default storage section</summary>

```yaml
storage:
  type: SPATIAL
  database:
    type: mysql
    host: 127.0.0.1
    port: 3306
    database: replay
    username: root
    password: ''
    sqlite-file: replay.db
    pool:
      maximum-pool-size: 10
      minimum-idle: 2
      connection-timeout-ms: 10000
  cache:
    max-memory-chunks: 4096
    max-memory-manifests: 256
    max-memory-replays: 32
  slime:
    loaders: [file, mysql, mongodb]
  fallback-to-spatial: true
```

</details>

| Setting                                     | Purpose                                                                                                                 |
| ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| `type`                                      | `SPATIAL` for local files, `DATABASE` for SQL-backed events and terrain.                                                |
| `database.type`                             | `mysql`, `mariadb`, `postgresql` (`postgres` is also recognized), or `sqlite`.                                          |
| `database.host`, `port`                     | SQL endpoint. Set PostgreSQL's port explicitly, normally 5432.                                                          |
| `database.database`, `username`, `password` | Schema/database and credentials. The default root account is a template, not a recommended production account.          |
| `database.sqlite-file`                      | SQLite filename, normally stored under `plugins/recordings`.                                                            |
| `database.pool.*`                           | Pool limits and acquisition timeout; SQLite resolves to a single-connection pool.                                       |
| `cache.*`                                   | Limits for data kept in memory to speed up access. These do not delete saved recordings.                                |
| `slime.loaders`                             | Ordered names of loaders already configured in SWM. This is not Reverse's SQL connection configuration.                 |
| `fallback-to-spatial`                       | Allows startup to choose local storage if SQL creation fails. It is not live replication or an ongoing failover system. |

{% hint style="warning" %}
**Using shared storage?** Prefer `fallback-to-spatial: false`. A node falling back to private local files cannot see the shared SQL catalog.
{% endhint %}

## Recorder settings

```yaml
chunk-capture-radius: 4
```

This controls the loaded-chunk capture radius around active players. Radius 4 describes a 9×9 horizontal area. It does not mean Reverse will load or generate every chunk within that square. See [recorder capture](/use-reverse/recorder.md).

## Player settings

```yaml
playback-world-name: replay
hide-real-players: true
open-access: false
```

* `playback-world-name` names the shared void playback world. Use a dedicated name, not a gameplay world you expect Reverse to reconstruct.
* `hide-real-players` controls extra cross-world player hiding. Same-world players outside a viewer's replay session are already hidden. Changing it requires restart.
* `open-access` gives every viewer the catalog's administrative access policy. This includes management operations, not just viewing. Keep it false for owner-private recordings.
* `gui` configures standalone catalog/details menus. These are initialized only when availability is disabled at startup.

## Network settings: player and lobby

```yaml
network:
  enabled: false
  backend: database
  node-id: player-1
  ping-millis: 5000
  ping-timeout-millis: 15000
  redis:
    uri: redis://localhost:6379/0
    command-timeout-millis: 5000
```

The lobby's generated node ID defaults to `lobby-1` instead. Recorder does not have this network section.

| Setting                        | Rules                                                                                                           |
| ------------------------------ | --------------------------------------------------------------------------------------------------------------- |
| `enabled`                      | Enable availability and cross-server handoff. Default false.                                                    |
| `backend`                      | Use the registered backend `database` or `redis`. Database availability requires an actual SQL storage backend. |
| `node-id`                      | A proxy server name, unique for each replay node; lobby uses its own name for return transfers.                 |
| `ping-millis`                  | Positive heartbeat interval, in milliseconds.                                                                   |
| `ping-timeout-millis`          | Must be strictly greater than twice the interval.                                                               |
| `redis.uri`                    | Shared Redis endpoint/database, optionally including credentials/TLS syntax supported by the Redis client.      |
| `redis.command-timeout-millis` | Positive command timeout.                                                                                       |

Backend and node identifiers accept 1–64 characters from `A–Z`, `a–z`, `0–9`, `_`, `.`, and `-`.

Redis coordinates nodes; it does not replace SQL or disk replay storage. See the complete [network setup](/use-reverse/network.md).

## Lobby settings

The lobby has `storage`, `network`, `open-access`, `messages`, and `gui` in one `config.yml`. Its `open-access` policy has the same administrative implications as the player's. It does not have a player playback-world or recorder capture-radius section.

## Messages, menus, and display

* [Menus](/configure-and-customize/menus.md) documents `gui.catalog` and `gui.details`, item fields, actions, visibility states, and placeholders.
* [Display](/configure-and-customize/display.md) documents `layout.yml`, HUD, sidebar, and MiniMessage.
* Player/recorder messages live in `messages.yml`; lobby messages live under `messages` in `config.yml`.

## Which changes need a restart?

| Change                                                            | Apply using               |
| ----------------------------------------------------------------- | ------------------------- |
| Player/recorder message text                                      | Role's reload command     |
| Player hotbar, HUD, scoreboard                                    | `/reverseplayer reload`   |
| Player/lobby catalog menu settings                                | Role's reload command     |
| Player/lobby open-access policy                                   | Role's reload command     |
| Recorder capture radius                                           | `/reverserecorder reload` |
| Storage backend, SQL credentials/pool, caches, Slime loaders      | Full server restart       |
| Availability backend, node ID, Redis connection, heartbeat timing | Full server restart       |
| Playback world, real-player hiding policy                         | Full server restart       |

Reload handlers update selected runtime settings. Do not assume a changed YAML value recreated an existing database pool or network backend. See [operations](/keep-things-running/operations.md).

Use the configuration generated by your installed release as the full list of available settings.

## Customize the experience

{% content-ref url="/pages/10GSIQyrKslaVLkYSrh5" %}
[Catalog menus](/configure-and-customize/menus.md)
{% endcontent-ref %}

{% content-ref url="/pages/EKseS6aOS6kFuyAf4SA5" %}
[Hotbar, HUD, and messages](/configure-and-customize/display.md)
{% endcontent-ref %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

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

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.marioded.com/configure-and-customize/configuration.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
