Server hosting for TTT is VERY early and subject to MANY changes. We will update this page and add more under this category over time.
This page does not explain how to install or start a baseline s&box dedicated server. For general s&box dedicated server setup, see: s&box Dedicated Servers
Our game ident:
thieves.terrortown
TTT-specific config file:
server_settings.json
On a SteamCMD dedicated install, this should be under the terrortown data folder:
steamcmd/ttt/data/thieves/terrortown/server_settings.json
For TTT dedicated servers, set the server starting map in server_settings.json:
Server.StartupMap
Do not use a native server manager map field (+map) for your startup map. It will break on map change.
If your server manager requires a map value, use a blank or placeholder value there, then configure the real startup map in server_settings.json.
The file will be automatically generated the first time you launch TTT. Shortened example. The generated file will include the full curated map list.
{
"SchemaVersion": 1,
"Server": {
"StartupMap": "thieves.rooftops"
},
"Lobby": {
"MaxPlayers": 24,
"Privacy": 0,
"MinPlayerCount": 2,
"MaxRounds": 6,
"RoundTimeMinutes": 30,
"PrepareDurationSeconds": 20,
"HasteMode": true,
"MapVoteOptionCount": 8,
"AllowPlayerCosmetics": true
},
"MapVote": {
"Maps": ""
},
"AdminSteamIds": []
}
Generated by the game for future migrations (Leave this alone).
The map the dedicated server should load on startup.
Example:
"StartupMap": "thieves.rooftops"
This is also used as the server's reset map (the map we load when everyone leaves the server). Keep in mind that the currently available maps are still gated by our whitelist. You can check the current whitelisted maps with
Maximum player count for the Terror Town lobby.
"MaxPlayers": 24
Keep this aligned with any external server manager max-player setting.
Controls lobby privacy.
| Value | Meaning |
|---|---|
| 0 | Public |
| 1 | Private |
| 2 | Friends Only |
For public dedicated servers, use:
"Privacy": 0
Minimum number of players required before normal round start behavior can proceed.
"MinPlayerCount": 2
Maximum number of rounds before the normal end-of-match or map-vote flow.
"MaxRounds": 6
Base round time limit, in minutes.
"RoundTimeMinutes": 30
Preparation phase duration before a round starts, in seconds.
"PrepareDurationSeconds": 20
Controls whether haste mode timing is enabled.
"HasteMode": true
Maximum number of map choices shown during a map vote.
"MapVoteOptionCount": 8
Allowed range: 3 to 12.
Controls whether player cosmetics are allowed.
"AllowPlayerCosmetics": true
The map vote pool is configured through:
"MapVote": {
"Maps": "thieves.rooftops;thieves.dolls;throwupproducs.islandtropical"
}
Separate map idents with semicolons:
org.map;org.map;
Duplicate entries are collapsed. Maps outside the built-in curated list are ignored (for now). Make sure at least one valid map remains.
You can print the current built-in map lists from the server console with:
t.server.maps
Dedicated servers can bootstrap admins with:
"AdminSteamIds": [ 00000000000000000, 11111111111111111 ]
Use SteamID64 values.
Invalid or zero IDs are ignored.
By default, if server_settings.json is missing, the server may create a default config automatically.
If you want the server to close instead when the config is missing or invalid, launch it with:
+t.dedicated.require_server_settings 1
These are launch/convar options, not fields inside server_settings.json.
| Option | Default | Description |
|---|---|---|
| t.dedicated.require_server_settings | 0 | Require a valid server_settings.json. |
| t.dedicated.empty_reset | 1 | Reset the server back to its startup map after all real players leave. |
| t.dedicated.empty_reset.delay | 2.0 | Delay, in seconds, before empty-server reset runs. |
You can generate an example settings file from the server console:
ttt_write_server_settings_example
This writes:
server_settings.example.json
The example file is only a template. The active config file must still be named:
server_settings.json
If your settings are not applying:
server_settings.json.[server.settings] messages.Useful successful load message:
[server.settings] loaded path=server_settings.json startup_map=thieves.rooftops lobby=True vote_maps=18 admin_count=1
Useful failure message:
[server.settings] failed_to_load path=server_settings.json error=...
server_settings.json.server_settings.example.json is only a template.Lobby.MaxPlayers aligned with any external server-manager player limit.