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

# Configuration

> Reference for server Configuration Variables (ConVars) and config files.

# Configuration Overview

The tracker system is configured via `platform/r5rdev_config.json`. Use the [Control Panel Config tab](https://r5r.dev/cp/?tab=config) to generate/download the JSON and push updates.

* Convars can also be optionally configured through `platform/cfg/game.cfg`

# First time install

In order to activate tracker, you will need to download your config json file and place it into `/platform/` folder of your R5Reloaded install.
Once this done, if `tracker_ws_enable` is enabled, you can manage this config directly from the web panel. Any values within the 'settings' and 'restricted'
categories will take effect immediately **without** needing to restart the entire server **OR reload the map**, when reloaded from the web panel, or alternatively
in the servers console on the host machine with `tracker_reload_config`

<Warning>
  Tracker-related settings previously placed in `playlists_r5_patch.txt` have been deprecated. Migrate any remaining values into the Config tab
</Warning>

## Game Config (game.cfg)

Add these ConVars to your `platform/cfg/game.cfg` file to configure the WebSocket interface and tracker behavior.

### WebSocket Settings

<Info>
  A limited set of convars that may be desirable to change will be overidden by the setting in r5rdev\_config.json.
</Info>

| ConVar                            | Default             | Description                                                                                                             |
| :-------------------------------- | :------------------ | :---------------------------------------------------------------------------------------------------------------------- |
| `tracker_ws_enable`               | `1`                 | Enable WebSocket remote command interface (0 = disabled, 1 = enabled).                                                  |
| `tracker_ws_port`                 | `9705`              | WebSocket server port.                                                                                                  |
| `tracker_ws_debug`                | `0`                 | Enable WebSocket debug logging.                                                                                         |
| `tracker_ws_use_ssl`              | `1`                 | Use SSL for WebSocket connection.                                                                                       |
| `tracker_ws_lax_ssl`              | `0`                 | Lax SSL certificate validation (0 = strict, 1 = lax). See [Getting Started](/hosting/getting-started#ssl-certificates). |
| `tracker_ws_buffer_size`          | `261120`            | WebSocket buffer size in bytes (Startup only).                                                                          |
| `tracker_ws_max_retries`          | `3`                 | Maximum number of connection retries.                                                                                   |
| `tracker_ws_retry_time`           | `5.0`               | Time in seconds between retries.                                                                                        |
| `tracker_ws_time_out`             | `125`               | Connection timeout in seconds.                                                                                          |
| `tracker_ws_keep_alive`           | `60`                | Keep-alive interval in seconds.                                                                                         |
| `tracker_ws_throttle_rate`        | `0.10`              | Message processing throttle rate (seconds).                                                                             |
| `tracker_ws_hostname`             | `r5r.dev`           | WebSocket server hostname.                                                                                              |
| `tracker_ws_tls_version`          | `3`                 | TLS Version (0: 1.0, 1: 1.1, 2: 1.2, 3: 1.3).                                                                           |
| `tracker_ws_relay_chat`           | `0`                 | Relays chat messages to qualified clients via web panel.                                                                |
| `tracker_ws_reconnect_on_change`  | `1`                 | Reconnect to remote socket when qualified convars change.                                                               |
| `tracker_ws_reconnect_on_newgame` | `0`                 | Reconnect the socket for each new game.                                                                                 |
| `tracker_ws_ca_bundle_file`       | `Sectigobundle.pem` | Certificate bundle file name.                                                                                           |

## Playlist Patch (Deprecated)

<Warning>
  Tracker-related entries in `playlists_r5_patch.txt` have been removed. Configure these settings in the [Control Panel Config tab](https://r5r.dev/cp/?tab=config) and apply/download `r5rdev_config.json` instead.
</Warning>

If you keep settings in the playlists file for other purposes, note that tracker settings in it are ignored.

## Config JSON (r5rdev\_config.json)

The `platform/r5rdev_config.json` file is the primary configuration file for the tracker plugin. It contains your API credentials, webhook settings, and server options.

<Note>
  You can edit this file manually or configure it visually and download it from the [Host Control Panel Config Tab](https://r5r.dev/cp/?tab=config). This page also allows you to "Update Config" remotely if your server is connected via WebSockets.
</Note>

### Root Settings

| Key          | Type   | Description                                                                                                                               |
| :----------- | :----- | :---------------------------------------------------------------------------------------------------------------------------------------- |
| `apikey`     | String | **Required**. Your Host API Key from the Control Panel. Without this, data will be rejected and rate limits will be lower.                |
| `identifier` | String | Unique ID for this server instance (e.g., `main_server`, `server2`). Used for WebSocket communication.                                    |
| `logfolder`  | String | Folder name within `platform/` to store logs (e.g., `tracker_logs`). Blocked paths: `scripts`, `resource`, `maps`, `logs`, `cfg`, `mods`. |

### Webhooks

Configure Discord webhooks for server events.

```json theme={null}
"webhooks": {
    "PLAYERS_WEBHOOK": "https://discord.com/api/webhooks/...",
    "MATCHES_WEBHOOK": "https://discord.com/api/webhooks/..."
}
```

| Key               | Description                              |
| :---------------- | :--------------------------------------- |
| `PLAYERS_WEBHOOK` | URL for player join/leave notifications. |
| `MATCHES_WEBHOOK` | URL for Match Recap notifications.       |

### Server Settings

Control low-level server behavior and logging.

<Info>
  The Control Panel config (`r5rdev_config.json`) can set and override a limited set of these ConVars for convenience. ConVars marked with `*` are applied from `r5rdev_config.json` when present.
</Info>

```json theme={null}
"server": {
    "MAX_LOGFILE_DIR_SIZE": 50,
    "AUTO_DELETE_STATLOGS": false,
    "USE_WEB_SOCKETS": true
    ...
}
```

| Key                      | Type  | Description                                                                                                             |
| :----------------------- | :---- | :---------------------------------------------------------------------------------------------------------------------- |
| `MAX_LOGFILE_DIR_SIZE`   | Int   | Max size of the log directory in MB (Recommended: 20-50).                                                               |
| `AUTO_DELETE_STATLOGS`   | Bool  | Automatically delete logs at the end of a round.                                                                        |
| `DELETE_ALL_LOGS`        | Bool  | Delete **ALL** logs after a match round.                                                                                |
| `CVAR_MAX_BUFFER`        | Int   | Log event accumulator size (Default: 50000). Keep high to prevent disk I/O lag.                                         |
| `USE_WEB_SOCKETS`\*      | Bool  | Enable WebSocket features (Control Panel commands, live data). Uses SSL.                                                |
| `LAX_SSL`\*              | Bool  | Allow self-signed/invalid certs. If `false` (recommended), `Sectigobundle.pem` must be in `platform/`.                  |
| `RELAY_CHAT_MESSAGES`\*  | Bool  | Relay in-game chat to the Control Panel; if disabled, Watch Chat will not show messages.                                |
| `RECONNECT_ON_NEWGAME`\* | Bool  | Reconnect the socket on every map load. Requires `USE_WEB_SOCKETS`.                                                     |
| `TRACKER_ENABLED`        | Bool  | Runs the tracker in scripts; disable if you only want Control Panel server management.                                  |
| `TRACKER_ENCRYPTION`     | Bool  | Encrypt outbound tracker data; disable for a small performance gain.                                                    |
| `TRACKER_SHIPSTATS`      | Bool  | Post matches to the tracker system (enabled for normal tracker usage).                                                  |
| `USE_GLOBAL_STATS`       | Bool  | Allow inbound/outbound live stat data (start/end of match or when needed for stat queries).                             |
| `TRACKER_MAX_WAIT`       | Float | Max seconds to wait for batch stat loading (Default: 7.0). Lower values may miss some players still connecting/loading. |
| `EA_VERIFY_SERVER`       | Bool  | Allow EA account verification for servers registered as EA identification servers.                                      |

### Game Settings

Gameplay and administration settings.

```json theme={null}
"settings": {
    "ADMINS": "100123456789,100987654321",
    "ENABLE_CHATBOT": true
    ...
}
```

| Key                      | Type   | Description                                                                                                                                                  |
| :----------------------- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ADMINS`                 | String | Comma-separated list of Admin UIDs (or `Name-UID` format).                                                                                                   |
| `ENABLE_CHATBOT`         | Bool   | Enables the in-game chatbot.                                                                                                                                 |
| `CHATBOT_PREFIX`         | String | Prefix for chatbot messages (e.g., `[SERVER]`).                                                                                                              |
| `INTERVAL_MESSAGES`      | String | Pipe-separated list of time-based messages. Supports events like `start`, `end`, `join`, or seconds. Example: `start=Match Started!\|300=5 minutes passed!`. |
| `LOOP_MESSAGES`          | String | Pipe-separated list of messages to cycle through.                                                                                                            |
| `LOOP_MESSAGES_INTERVAL` | Int    | Interval in seconds (multiple of 10) to cycle `LOOP_MESSAGES`.                                                                                               |
| `OPT_IN_GLOBAL_MUTE`     | Bool   | Apply global mutes to players who have opted in network-wide.                                                                                                |

### Interval Messages

Use `INTERVAL_MESSAGES` to send timed and event-based chat notices. The value is a pipe-separated list of `key=value` pairs.
If you need to use `|` or `=` in a value, escape them with `\`.  Example: `join=Welcome #player! Your ELO \= #stat_score`

* Keys: `start`, numeric seconds (e.g., `300`), `end`, and `join`.
* For join messages, placeholders resolve per player when the message is sent: `#player`, `#uid`, `#ping`, `#stat_<statKey>` (uses tracker stats), `#setting_<settingKey>` (uses the player's current tracker setting value).
* Example:

```text theme={null}
start=The match has started!|300=Remember to take breaks!|600=Stay hydrated!|end=The match is over!|join=Welcome to the server #player. Your current elo is #stat_score
```

### Loop Messages

Use `LOOP_MESSAGES` with `LOOP_MESSAGES_INTERVAL` to rotate chat announcements on a fixed cadence.

* Provide a pipe-separated list of messages (e.g., `Welcome to the server!\|Stats by r5r.dev!`).
* Set `LOOP_MESSAGES_INTERVAL` to a multiple of 10 (seconds) for how often to send the next entry.

### Auto Rotation

Configure `auto_rotate_list` in `playlists_r5_patch.txt` to cycle map/playlist/gamemode combinations. This works with or without the tracker and has inline documentation in the playlists file.

* Format: comma-separated entries of `map playlist gamemode minplayers maxplayers` (gamemode optional but recommended; minplayers optional, defaults to `NO_MIN`; maxplayers optional, defaults to no cap).
* Partials are supported for map/playlist/gamemode matches. Each combination should be unique; invalid combos assert at startup with details.
* If a map is due but player count is below `minplayers`, that entry is skipped. Likewise, if count is over `maxplayers`, it will also be skipped.
* Leave blank to disable auto rotation.
* Example: `auto_rotate_list "comp 1v1 fs_dm, holiday winter winter 8, desert scenarios fs_dm, aque instagib fs_dm"`

### Restricted / Private Server Settings

These keys live under `private` in `r5rdev_config.json` and gate who can join when restricted mode is enabled.

| Key                            | Type   | Description                                                                                         |
| :----------------------------- | :----- | :-------------------------------------------------------------------------------------------------- |
| `RESTRICTED_SERVER`            | Bool   | Enables restricted/private server mode.                                                             |
| `RESTRICTED_WHITELIST_ONLY`    | Bool   | Only allow whitelisted players; kicks others.                                                       |
| `RESTRICTED_PLAYER_WHITELIST`  | String | Comma-separated whitelist of player IDs.                                                            |
| `RESTRICTED_JOIN_MESSAGE`      | String | Message shown to players who meet restricted server requirements.                                   |
| `RESTRICTED_WHITELIST_MESSAGE` | String | Message shown to whitelisted players on join.                                                       |
| `RESTRICTED_ADMIN_MESSAGE`     | String | Message shown to admins on join.                                                                    |
| `RESTRICTED_GAMESPLAYED`       | Int    | Minimum games played required to join (requires `USE_GLOBAL_STATS`).                                |
| `RESTRICTED_PLAYTIME`          | Int    | Minimum playtime (seconds) required to join (requires `USE_GLOBAL_STATS`).                          |
| `RESTRICTED_RANK`              | Int    | Minimum leaderboard rank (elo) required to join (requires `USE_GLOBAL_STATS`).                      |
| `RESTRICTED_KILLS`             | Int    | Minimum kills required to join (requires `USE_GLOBAL_STATS`).                                       |
| `RESTRICTED_KD`                | Float  | Minimum KD ratio required to join (requires `USE_GLOBAL_STATS`).                                    |
| `RESTRICTED_KICK_LOG`          | Bool   | Log/print when a player is kicked with the reason (verbose; useful for debugging restricted kicks). |
