======== Dedicated Server Settings ========
**Server hosting for TTT is still early and subject to change.** This page documents the current dedicated-server setup as of 5/14/26.
This page does **not** explain how to install or start a baseline s&box dedicated server. For general s&box dedicated server setup, see:
[[https://sbox.game/dev/doc/systems/networking-multiplayer/dedicated-servers/|s&box Dedicated Servers]]
[[https://physgun.com/help/game-hosting/sbox/how-to-make-a-sbox-server/|How to make a s&box server]]
**For the easiest server hosting**, your best option is using [[http://physgun.com/thieves|physgun]]. You can even get 30% off with code "TTT"!
{{::phys_ttt.png?400|}}
===== Basics =====
**Live package ident:**
thieves.terrortown
**Native startup map:**
Choose the startup map with the native s&box launch command. The map ident after the game ident is the boot map. TTT also uses that boot map as the empty-server reset map.
===== Launch Example =====
Typical dedicated launch shape (replace ports and map with your values):
-headless +game thieves.terrortown thieves.rooftops +hostname "Test" +port 00000 +net_query_port 00000 +net_hide_address 0
====== Configuration Files ======
TTT currently uses three operator-facing files:
^ File ^ Purpose ^
| ''server_settings.json'' | Small dedicated-server bootstrap config: lobby max players/privacy and curated map rotation. |
| ''config/convar/game.json'' | Native s&box saved ConVars. Most gameplay/rule settings live here now. |
| ''roles.json'' | Moderator/Admin/Owner role assignments written by TTT role commands. |
===== server_settings.json =====
''server_settings.json'' lives under the package's game data folder.
Example:
data/thieves/terrortown/server_settings.json
The game creates this file with active defaults the first time a dedicated server starts without one.
Current editable shape:
{
"SchemaVersion": 2,
"Lobby": {
"MaxPlayers": 24,
"Privacy": 0
},
"MapVote": {
"Maps": "thieves.rooftops;thieves.whitehouse;thieves.minecraft_t5"
}
}
==== server_settings.json Fields ====
^ Field ^ Default ^ Description ^
| ''SchemaVersion'' | 2 | Generated by the game for future migrations. Leave this alone. |
| ''Lobby.MaxPlayers'' | 24 | Maximum player count for the lobby. Keep this aligned with any external server-manager player limit. |
| ''Lobby.Privacy'' | 0 | Lobby privacy: 0 public, 1 private, 2 friends only. Public dedicated servers should use 0. |
| ''MapVote.Maps'' | Curated built-in map list | Dedicated map vote rotation. Separate map idents with semicolons, commas, or newlines. |
==== Map Vote Rotation ====
Dedicated map vote pool example:
"MapVote": {
"Maps": "thieves.rooftops;thieves.dolls;throwupproducs.islandtropical"
}
Separate map idents with semicolons, commas, or newlines.
orgident.mapident;orgident.mapident
Duplicate entries are collapsed. Maps outside the built-in curated list are ignored for dedicated map vote rotation. Make sure at least one valid map remains.
You can print the current built-in map whitelist from the server console with:
t.server.maps
====== Deprecated Or Ignored Settings ======
^ Old Setting ^ Current Status ^
| ''Server.StartupMap'' | Removed. Use the native ''+game org.game org.map'' launch argument. |
| Scalar ''Lobby'' gameplay fields such as ''MaxRounds'', ''RoundTimeMinutes'', ''KarmaEnabled'', ''ProximityVoiceRange'', etc. | Removed from ''server_settings.json''. Use the matching saved ConVar instead. |
| ''MapVote.Whitelist'' | Migrated to ''MapVote.Maps'' if ''Maps'' is missing. |
| ''MapVote.Blacklist'' | No longer the dedicated rotation model. If only ''Blacklist'' is present, defaults are backfilled into ''MapVote.Maps''. |