# Schedule 1 Server Config Reference (/docs/schedule-1/server-config)



import { Callout } from 'fumadocs-ui/components/callout';

The S1 DedicatedServerMod uses **three TOML files** (not a single JSON config). All three live next to the server install and are editable through the panel **File Manager**.

| File                     | Purpose                                                                            |
| ------------------------ | ---------------------------------------------------------------------------------- |
| `server_config.toml`     | Main server settings — storage, auth, networking, gameplay, web panel, TCP console |
| `permissions.toml`       | Operators, admins, groups, allow/deny rules, bans                                  |
| `client_mod_policy.toml` | Which client-side mods are blocked or pinned by hash                               |

<Callout type="info">
  Authoritative reference: [docs.s1servers.com](https://docs.s1servers.com/). Field names below match the current release. Cross-check upstream for the exact field list on your install.
</Callout>

***

Editing safely [#editing-safely]

1. Stop the server from the panel **Dashboard**.
2. Open **File Manager** and edit the relevant `.toml` file.
3. Save changes.
4. Start the server (or run `reloadconfig` / `reloadpermissions` from the **Console** tab for hot reloads).

Watch the **Console** output on boot for any red parse errors — TOML is strict about quoting and trailing commas.

***

server_config.toml — key blocks [#server_configtoml--key-blocks]

[storage] (required) [#storage-required]

```toml
[storage]
saveGamePath = 'C:\Users\...\AppData\LocalLow\TVGS\Schedule I\Saves\<SteamID>\SaveGame_1'
```

**The server refuses to start if `saveGamePath` is not set.** On XGamingServer, this is set automatically to a managed path inside the server install; you don't have to touch it.

[authentication] [#authentication]

```toml
[authentication]
authProvider = 'SteamGameServer'           # None | SteamGameServer | SteamWebApi
authTimeoutSeconds = 60                    # Range 1-120; recommended 60 for public servers
authAllowLoopbackBypass = true             # Lets the loopback host skip auth

steamGameServerLogOnAnonymous = true
steamGameServerToken = ''                  # Required if anonymous login is disabled
steamGameServerQueryPort = 27016           # UDP Steam query port
steamGameServerMode = 'Authentication'     # NoAuthentication | Authentication | AuthenticationAndSecure
```

Use `SteamGameServer` for any public server. `None` is for local testing only. `SteamWebApi` is not fully implemented yet.

Server port (top-level) [#server-port-top-level]

```toml
serverPort = 38465                         # UDP, gameplay traffic
```

On XGamingServer this is pre-assigned via your **Network → Allocations** tab — use whatever port the panel shows there.

[messaging] [#messaging]

```toml
[messaging]
messagingBackend = 'FishNetRpc'            # FishNetRpc | SteamNetworkingSockets
steamNetworkingSocketsVirtualPort = 0
steamNetworkingSocketsMaxPayloadBytes = 1200
steamNetworkingSocketsServerSteamId = ''
```

`FishNetRpc` is the default (lower overhead). Switch to `SteamNetworkingSockets` only if you need Steam relay routing.

[gameplay] [#gameplay]

See [Gameplay Configuration](/docs/schedule-1/gameplay-config) for the full field list. Quick summary:

```toml
[gameplay]
allowSleeping = true
ignoreGhostHostForSleep = true
pauseGameWhenEmpty = true
timeProgressionMultiplier = 1.0
freshSaveQuestBootstrapMode = 'StartFromBeginning'
```

[webPanel] [#webpanel]

See [Web Panel](/docs/schedule-1/web-panel) for the auth model.

```toml
[webPanel]
webPanelEnabled = false
webPanelBindAddress = '127.0.0.1'
webPanelPort = 4051
webPanelOpenBrowserOnStart = true
webPanelSessionMinutes = 120
webPanelExposeLogs = true
```

[tcpConsole] (RCON-style) [#tcpconsole-rcon-style]

```toml
[tcpConsole]
stdioConsoleMode = 'Auto'
tcpConsoleBindAddress = '127.0.0.1'
tcpConsolePort = 4050
```

The TCP console is the equivalent of RCON. Defaults to localhost — only expose it publicly with a password and treat the URL as a credential.

Autosave fields [#autosave-fields]

```toml
autoSaveEnabled = true
autoSaveIntervalMinutes = 5
autoSaveOnPlayerJoin = true
autoSaveOnPlayerLeave = true
```

***

permissions.toml — operators, admins, bans [#permissionstoml--operators-admins-bans]

See [Operators, Admins & RCON](/docs/schedule-1/operators-admins) for the full model. Skeleton:

```toml
[metadata]
schemaVersion = 1
migrationVersion = 1

[group.default]
priority = 0
allow = ['server.help']
deny = []

[user.76561198000000000]
groups = ['operator']
allow = []
deny = []

[ban.76561198987654321]
subjectId = '76561198987654321'
reason = 'griefing'
```

Built-in groups (highest first): `operator` → `administrator` → `moderator` → `support` → `default`.

Permission nodes use dotted names (`console.command.kick`, `player.kick`) with wildcards (`*`) supported.

***

client_mod_policy.toml — who can connect with what [#client_mod_policytoml--who-can-connect-with-what]

See [Client Mod Verification](/docs/schedule-1/client-mod-verification) for the full model. Skeleton:

```toml
[policy]
deniedClientModIds = []
deniedClientModNames = []
deniedClientModHashes = []

[approvedUnpairedClientMods.example_mod]
modId = 'example.mod'
displayName = 'Example Mod'
pinnedSha256 = []
```

***

Common field edits [#common-field-edits]

| What you want to do              | Where                                       | See guide                                                     |
| -------------------------------- | ------------------------------------------- | ------------------------------------------------------------- |
| Rename the server                | `server_config.toml` server-name field      | [Rename Your Server](/docs/schedule-1/rename-server)          |
| Set a password / restrict access | `permissions.toml` (allow/deny groups)      | [Server Password](/docs/schedule-1/server-password)           |
| Raise player cap                 | Install MultiplayerPlus mod                 | [MultiplayerPlus](/docs/schedule-1/multiplayerplus)           |
| Add an operator                  | `permissions.toml` `[user.<steamid>]` block | [Operators, Admins & RCON](/docs/schedule-1/operators-admins) |
| Tune gameplay                    | `server_config.toml [gameplay]`             | [Gameplay Config](/docs/schedule-1/gameplay-config)           |
| Enable RCON-style admin          | `server_config.toml [tcpConsole]`           | [Operators, Admins & RCON](/docs/schedule-1/operators-admins) |
| Enable web panel                 | `server_config.toml [webPanel]`             | [Web Panel](/docs/schedule-1/web-panel)                       |

***

Reload vs restart [#reload-vs-restart]

* **`reloadconfig`** in the **Console** — re-reads `server_config.toml` without restarting. Most non-storage fields take effect.
* **`reloadpermissions`** in the **Console** — re-reads `permissions.toml`. Group/user/ban changes take effect.
* **Restart** from the **Dashboard** — required for storage path changes, port changes, and many gameplay fields.

***

Related Guides [#related-guides]

* [Gameplay Config →](/docs/schedule-1/gameplay-config)
* [Operators, Admins & RCON →](/docs/schedule-1/operators-admins)
* [Web Panel →](/docs/schedule-1/web-panel)
* [Client Mod Verification →](/docs/schedule-1/client-mod-verification)
* [Commands Reference →](/docs/schedule-1/commands-reference)
* [Backup and Restore →](/docs/schedule-1/backup-restore)
