Project Zomboid servertest.ini Settings Explained (Build 42)
servertest.ini decides how your Project Zomboid server runs: who can find it, who can join, what anti-cheat does and which mods load. Here is what to set first, how changes take effect, and a searchable reference for every line in the file.
servertest.ini handles server, network and admin behaviour. servertest_SandboxVars.lua controls the actual world rules.
Names, listing, chat, PvP and many rule toggles can reload live. Ports, Mods, WorkshopItems and Map get a full restart.
Privacy, player cap, save cadence, PvP stance, backups and RCON are the lines that shape how the server behaves from day one.
Losing ResetID, ServerPlayerID, Seed or your mod and map lines causes far more trouble than a cosmetic setting ever will.
Where servertest.ini lives, and what the four server files do
On Windows, the default config folder is C:\Users\<you>\Zomboid\Server. On Linux, it is ~/Zomboid/Server. If you start the dedicated server without extra launch flags, it uses the default server name servertest, which means it will read and write files named servertest.ini, servertest_SandboxVars.lua, servertest_spawnpoints.lua and servertest_spawnregions.lua.
The important bit is that servertest is not special beyond being the default. Start the server with -servername NAME and the whole config set changes with it: a different .ini, a different SandboxVars file, a different save folder and a different account database. That is why a server can look as if its settings vanished when in fact it simply booted a different named profile. If you still need install and launch basics, the dedicated server setup guide covers the dedicated app, launch flags and folder layout.
servertest.ini: server identity, browser listing, ports, passwords, player cap, access rules, anti-cheat, backups, RCON, mods, Workshop IDs and map load order.servertest_SandboxVars.lua: world rules such as zombie population, loot, farming, vehicles and progression. Those are covered separately in the sandbox settings guide.servertest_spawnpoints.lua: exact spawn coordinates.servertest_spawnregions.lua: which regions or professions feed the spawn menu.
Your live world save is separate again, under Zomboid/Saves/Multiplayer/servertest. Accounts and whitelist data are in Zomboid/db/servertest.db. Character records live in players.db inside the save folder. For troubleshooting, the main server log is server-console.txt.
.ini syntax is simple: one setting per line, written as key=value. Toggles use true or false. Some lines take lists, often separated by semicolons, such as WorkshopItems=. Map= uses semicolons as well, but there the order matters, and the comma in the default Muldraugh, KY is part of the map’s name, not a separator. The format of Mods= has changed during Build 42, so let the game or your panel write that line once and copy its format when you add more.
servertest_spawnregions.lua
- World save: Zomboid/
Saves/ Multiplayer/ servertest - Accounts and whitelist: Zomboid/
db/ servertest.db - Server log: server-console.txt
How changes take effect: live reload, command change, or full restart
Most servertest.ini values can be changed on a running server, then applied with reloadoptions. That is useful for rule toggles and text fields because the server re-reads its options without replacing the save. To change a single option from the console or admin chat, use changeoption and check the result with showoptions.
reloadoptions showoptions /changeoption PublicName "Fresh World EU" /changeoption PauseEmpty "true" /showoptions
Use the server console without a leading slash, or in-game admin chat with one. If you need the exact syntax for other admin tools, the full admin command list has the syntax for every other command.
Some changes deserve a full stop and start instead, because they affect how clients connect or what they must download:
DefaultPort,UDPPortandRCONPort: the server opens its ports when it starts.Mods,WorkshopItemsandMap: the server has to mount the right content, Steam has to fetch it if needed, and clients need to reconnect against the same list.- Anything in
SandboxVars.lua: sandbox changes need a restart.
For hand edits, the safe habit is simple: stop the server, edit, start it again. A running server or a panel can write its own copy of the file and quietly undo a good edit.
changeoption OptionName “value”
The first ten lines worth setting on any new server
These are the settings that define privacy, safety, persistence and admin control before anyone builds anything valuable. The defaults work, but they already make choices for you: anyone can register, PvP is on and the world only saves when players leave an area. Settle these before players build on one set of rules and find them changed later.
Public=false PublicName=My PZ Server Open=true Password= MaxPlayers=32 PauseEmpty=true SaveWorldEveryMinutes=0 PVP=true SafetySystem=true RCONPassword=
| Setting | Default | Private friends server | Public community server | Why set it now |
|---|---|---|---|---|
PublicName | My PZ Server | Set a recognisable group name | Set your community name | This is the identity players see in browsers and admin tools. Clear naming prevents people joining the wrong world or saving the wrong favourite. |
Public | false | false | true | Listing controls discovery. Once it is on, strangers can find you, so sort access out first. |
Open | true | false | true | Open=false makes access admin-managed instead of self-registration. That is the cleanest way to keep a friends-only world closed. |
Password | blank | Set one | Usually leave blank once the server is truly public | This is a join password, separate from accounts and whitelist rules. It keeps out anyone who doesn’t know it. |
MaxPlayers | 32 | 32 or lower | Start at 32 | The official notes warn that more than 32 can cause poor map streaming and desync. Admins don’t count towards the cap. |
PauseEmpty | true | true | false if you want an always-moving world | This decides whether time and simulation stop when nobody is online. It changes how far crops, fuel and the clock move between sessions. |
SaveWorldEveryMinutes | 0 | 0 | 60 | At 0 the map only saves when players leave a loaded area, so a crash can lose progress in busy spots. A timed save limits how much you can lose. |
PVP / SafetySystem | true / true | PVP=false, SafetySystem=true | PVP=true, SafetySystem=true | These lines define the default risk model. If you do not want accidental friend-on-friend damage, decide that before the first firefight. |
BackupsPeriod / BackupsCount | 0 / 5 | 60 / 5 | 60 / 10 | Minutes between automatic backup zips (0 is off) and how many to keep. They sit on the same disk as the world, so they protect against mistakes, not a lost server. |
RCONPassword | blank | Leave blank unless you actively use RCON | Set a strong password | RCON is remote console access. Anyone with the password and port has admin console access. |
If you close the server with Open=false, remember the access workflow changes as well: admins must create accounts, and on current Build 42 servers that also means adding the player’s SteamID. The admin and whitelist guide covers that process cleanly.
Every servertest.ini setting, by group
The reference tables below list every key, its default and what it does, grouped by job so you can scan server identity, networking, access, safehouses, anti-cheat, logging and the rest without hunting through one long alphabetic dump.
Access and joining (19)
| Setting | Default | Range | What it does |
|---|---|---|---|
Open | true | true / false | Clients may join without already having an account in the whitelist. If set to false, administrators must manually create username/password combos. |
Password | empty | – | Clients must know this password to join the server. (Ignored when hosting a server via the Host button) |
Public | false | true / false | Shows the server on the in-game browser. (Note: Steam-enabled servers are always visible in the Steam server browser) |
PublicName | My PZ Server | – | Name of the server displayed in the in-game browser and, if applicable, the Steam browser |
PublicDescription | empty | – | Description displayed in the in-game public server browser. Typing will create a new line in your description |
MaxPlayers | 32 | 1 to 100 | Maximum number of players that can be on the server at one time. This excludes admins. Default: 32 |
MaxAccountsPerUser | 0 | 0 to 2147483647 | Limits the number of different accounts a single Steam user may create on this server. Ignored when using the Hosts button. |
DropOffWhiteListAfterDeath | false | true / false | Remove player accounts from the whitelist after death. This prevents players creating a new character after death on Open=false servers |
PingLimit | 0 | 0 to 2147483647 | Ping limit, in milliseconds, before a player is kicked from the server. (Set to 0 to disable) |
DenyLoginOnOverloadedServer | true | true / false | Refuses new logins while the server is overloaded. |
LoginQueueEnabled | false | true / false | Holds joining players in a login queue. |
LoginQueueConnectTimeout | 60 | 20 to 1200 | Seconds a queued player has to connect once their turn comes. |
AllowNonAsciiUsername | false | true / false | Allow use of non-ASCII (cyrillic etc) characters in usernames |
AllowCoop | true | true / false | Allow co-op/splitscreen players |
ServerWelcomeMessage | Welcome to Project Zomboid Multi… | – | First message players see in chat after logging in. Supports colour tags such as <RGB:1,0,0> and <LINE> for a new line. |
SpawnPoint | 0,0,0 | – | Force every new player to spawn at these set x,y,z world coordinates. (Ignored when 0,0,0) |
SpawnItems | empty | – | Item types new players spawn with. Separate multiple item types with commas. Example: Base.Axe,Base.Bag_BigHikingBag |
PlayerRespawnWithSelf | false | true / false | Players can respawn in-game at the coordinates where they died |
PlayerRespawnWithOther | false | true / false | Players can respawn in-game at a split screen / Remote Play player's location |
Network, ports and remote console (10)
| Setting | Default | Range | What it does |
|---|---|---|---|
DefaultPort | 16261 | 0 to 65535 | Default starting port for player data. If UDP, this is this one of two ports used. |
UDPPort | 16262 | 0 to 65535 | Second UDP port the server uses (direct connection port). Needs to be open on your router and firewall. |
UPnP | true | true / false | Attempt to configure a UPnP-enabled internet gateway to automatically setup port forwarding rules. The server will fall back to default ports if this fails |
server_browser_announced_ip | empty | – | Set the IP from which the server is broadcast. This is for network configurations with multiple IP addresses, such as server farms |
RCONPort | 27015 | 0 to 65535 | The port for the RCON (Remote Console) |
RCONPassword | empty | – | RCON password (Pick a strong password) |
SteamVAC | true | true / false | Enable the Steam VAC system |
SteamScoreboard | false | true / false | Show Steam usernames and avatars in the Players list. |
MaxPacketsPerSecond | 300 | 100 to 1000 | Sets the limit for processing network packets from each client on the server. |
MultiplayerStatisticsPeriod | 1 | 0 to 10 | Sets the multiplayer update period in seconds. Statistics is disabled if value is 0. |
Mods, world identity and saving (12)
| Setting | Default | Range | What it does |
|---|---|---|---|
Mods | empty | – | Mod IDs to enable (the id= line in each mod.info), separated by semicolons. |
WorkshopItems | empty | – | List Workshop Mod IDs for the server to download. Each must be separated by a semicolon. Example: WorkshopItems=514427485;513111049 |
Map | Muldraugh, KY | – | Map folder names to load, top to bottom, separated by semicolons. Muldraugh, KY goes last. |
DoLuaChecksum | true | true / false | Kicks players whose game files don’t match the server’s. Known to give false positives on Linux servers, where it is often set to false. |
ResetID | random number | 0 to 2147483647 | Marks a soft reset. If it no longer matches what a player has, they must make a new character. Back it up with the file. |
ServerPlayerID | empty | – | Identifies characters as belonging to this server. If it changes, players must make new characters. Back it up with the file. |
Seed | random text | – | The worldgen seed used to generate the world. If you want to change this, put a new value in and delete map_worldgen.bin in your save directory. |
PauseEmpty | true | true / false | Game time stops when there are no players online |
SaveWorldEveryMinutes | 0 | 0 to 2147483647 | Loaded parts of the map are saved after this set number of real-world minutes have passed. (The map is usually saved only after clients leave a loaded area) |
FastForwardMultiplier | 40.0 | 1.00 to 100.00 | Governs how fast time passes while players sleep. Value multiplies the speed of the time that passes during sleeping. |
SleepAllowed | false | true / false | Players are allowed to sleep when their survivor becomes tired, but they do not NEED to sleep |
SleepNeeded | false | true / false | Players get tired and need to sleep. (Ignored if SleepAllowed=false) |
Built-in backups (4)
| Setting | Default | Range | What it does |
|---|---|---|---|
BackupsCount | 5 | 1 to 300 | How many backups of each type are kept before the oldest is replaced. |
BackupsOnStart | true | true / false | Makes a backup each time the server starts. |
BackupsOnVersionChange | true | true / false | Makes a backup when the game version changes. |
BackupsPeriod | 0 | 0 to 1500 | Minutes between automatic backups while the server runs. 0 turns periodic backups off. |
PvP and the safety system (12)
| Setting | Default | Range | What it does |
|---|---|---|---|
PVP | true | true / false | Players can hurt and kill other players |
SafetySystem | true | true / false | Players can enter and leave PVP on an individual basis. A player can only hurt another player when at least one of them is in PVP mode – as shown by the unobscured skull and crossbones on the left of the screen. When SafetySystem=false, players are free to hurt each other at any time if PVP is enabled. |
ShowSafety | true | true / false | Display a skull icon over the head of players who have entered PVP mode |
SafetyToggleTimer | 2 | 0 to 1000 | The time it takes for a player to enter and leave PVP mode |
SafetyCooldownTimer | 3 | 0 to 1000 | The delay before a player can enter or leave PVP mode again, having recently done so |
PVPMeleeDamageModifier | 30.0 | 0.00 to 500.00 | Damage multiplier for PVP melee attacks. |
PVPFirearmDamageModifier | 50.0 | 0.00 to 500.00 | Damage multiplier for PVP ranged attacks. |
PVPMeleeWhileHitReaction | false | true / false | If true, player can hit again when struck by another player. |
PVPLogToolChat | true | true / false | PVP is logged to admin chat |
PVPLogToolFile | true | true / false | PVP is logged by the server |
PlayerBumpPlayer | false | true / false | Governs whether players bump (and knock over) other players when running through them. |
KnockedDownAllowed | false | true / false | WIP: Activating this setting may cause visual desynchronization of player positions. |
Safehouses, factions and war (20)
| Setting | Default | Range | What it does |
|---|---|---|---|
PlayerSafehouse | false | true / false | Both admins and players can claim safehouses |
AdminSafehouse | false | true / false | Only admins can claim safehouses |
SafehouseAllowTrepass | true | true / false | Allow non-members to enter a safehouse without being invited |
SafehouseAllowFire | true | true / false | Allow fire to damage safehouses |
SafehouseAllowLoot | true | true / false | Allow non-members to take items from safehouses |
SafehouseAllowRespawn | false | true / false | Players will respawn in a safehouse that they were a member of before they died |
SafehouseDaySurvivedToClaim | 0 | 0 to 2147483647 | Players must have survived this number of in-game days before they are allowed to claim a safehouse |
SafeHouseRemovalTime | 144 | 0 to 2147483647 | Players are automatically removed from a safehouse they have not visited for this many real-world hours |
SafehouseAllowNonResidential | false | true / false | Governs whether players can claim non-residential buildings. |
SafehousePreventsLootRespawn | true | true / false | Items will not respawn in buildings that players have claimed as a safehouse |
DisableSafehouseWhenOwnerConnected | false | true / false | Safehouse acts like a normal house if an owner of the safehouse is connected (so secure when the owner is offline) |
AllowDestructionBySledgehammer | true | true / false | Allow players to destroy world objects with sledgehammers |
SledgehammerOnlyInSafehouse | false | true / false | Allow players to destroy world objects only in their safehouse (require AllowDestructionBySledgehammer to true). |
War | false | true / false | Turns on safehouse wars, controlled by the three War settings. |
WarStartDelay | 600 | 60 to 2147483647 | Time in seconds before the war starts. |
WarDuration | 3600 | 60 to 2147483647 | War duration in seconds. |
WarSafehouseHitPoints | 3 | 0 to 2147483647 | Safehouse hit points limit. |
Faction | true | true / false | Players can create factions when true |
FactionDaySurvivedToCreate | 0 | 0 to 2147483647 | Players must survive this number of in-game days before being allowed to create a faction |
FactionPlayersRequiredForTag | 1 | 1 to 2147483647 | Number of players required as faction members before the faction owner can create a group tag |
Chat, voice, radio and Discord (26)
| Setting | Default | Range | What it does |
|---|---|---|---|
GlobalChat | true | true / false | Toggles global chat on or off. |
ChatStreams | s,r,a,w,y,sh,f,all | – | Chat channels players can use: s say, r radio, a admin, w whisper, y yell, sh safehouse, f faction, all everyone. Remove one to disable it. |
ChatMessageCharacterLimit | 200 | 64 to 1024 | Maximum length of a single chat message. |
ChatMessageSlowModeTime | 3 | 1 to 30 | Slow-mode delay for chat, in seconds between messages. |
AnnounceDeath | false | true / false | If checked, every time a player dies a global message will be displayed in the chat |
AnnounceAnimalDeath | false | true / false | If checked, every time an animal dies a global message will be displayed in the chat |
VoiceEnable | true | true / false | VOIP is enabled when checked |
VoiceMinDistance | 10.0 | 0.00 to 100000.00 | The minimum tile distance over which VOIP sounds can be heard. |
VoiceMaxDistance | 100.0 | 0.00 to 100000.00 | The maximum tile distance over which VOIP sounds can be heard. |
Voice3D | true | true / false | Toggle directional audio for VOIP |
DiscordEnable | false | true / false | Enables global text chat integration with a Discord channel |
DiscordToken | empty | – | Discord bot access token |
DiscordChatChannel | empty | – | The Discord chat channel name |
DiscordLogChannel | empty | – | The Discord logs channel name |
DiscordCommandChannel | empty | – | The Discord commands channel name |
WebhookAddress | empty | – | The Slack incoming webhook URL |
BadWordListFile | empty | – | Path to the file with the list of words to be prohibited. Each word must be on a separate line |
GoodWordListFile | empty | – | Path to the file with the list of words that should be allowed, even if they contain bad word. Each word should be on a separate line. |
BadWordPolicy | 3 | – | What to do with the sender of a bad word in the chat: 1 – ban, 2 – kick, 3 – record the violation in the database, 4 – mute |
BadWordReplacement | [HIDDEN] | – | The symbol or piece of text that will replace the bad word |
DisableRadioStaff | false | true / false | Disables radio transmissions from players with an access level |
DisableRadioAdmin | true | true / false | Disables radio transmissions from players with 'admin' access level |
DisableRadioGM | true | true / false | Disables radio transmissions from players with 'gm' access level |
DisableRadioOverseer | false | true / false | Disables radio transmissions from players with 'overseer' access level |
DisableRadioModerator | false | true / false | Disables radio transmissions from players with 'moderator' access level |
DisableRadioInvisible | true | true / false | Disables radio transmissions from invisible players |
Names, map and player list (8)
| Setting | Default | Range | What it does |
|---|---|---|---|
DisplayUserName | true | true / false | Display usernames above player's heads in-game. |
ShowFirstAndLastName | false | true / false | Display first & last name above player's heads. |
MouseOverToSeeDisplayName | true | true / false | If true, players will have to mouse over someone to see their display name. |
HidePlayersBehindYou | true | true / false | If true, automatically hide the player you can't see (like zombies). |
MapRemotePlayerVisibility | 1 | 1 to 4 | Controls display of remote players on the in-game map. 1=Hidden 2=Friends 3=Friends and nearby players 4=Everyone |
ShowCoordinates | false | true / false | Shows player character coordinates in the lower right corner. |
DisableScoreboard | false | true / false | Disables scoreboard. |
HideAdminsInPlayerList | false | true / false | Hides admins in the player list. |
World objects, vehicles and clutter (9)
| Setting | Default | Range | What it does |
|---|---|---|---|
NoFire | false | true / false | All forms of fire are disabled – except for campfires |
CarEngineAttractionModifier | 0.5 | 0.00 to 10.00 | Modify the range of zombie attraction to cars. (Lower values can help with lag.) |
ItemNumbersLimitPerContainer | 0 | 0 to 9000 | Maximum number of items in one container, counting every small item such as each nail. 0 means no limit. |
BloodSplatLifespanDays | 0 | 0 to 365 | Number of days before old blood splats are removed. Removal happens when map chunks are loaded. Zero means they will never disappear |
RemovePlayerCorpsesOnCorpseRemoval | false | true / false | If enabled, when HoursForCorpseRemoval triggers, it will also remove player's corpses from the ground. |
TrashDeleteAll | false | true / false | If true, player can use the "delete all" button on bins. |
DisableVehicleTowing | false | true / false | Disables vehicle towing |
DisableTrailerTowing | false | true / false | Disables trailer towing |
DisableBurntTowing | false | true / false | Disables burnt vehicle towing |
Logs and anti-cheat (13)
| Setting | Default | Range | What it does |
|---|---|---|---|
ClientCommandFilter | -vehicle.*;+vehicle.damageWindow… | – | Semicolon-separated list of commands that will not be written to the cmd.txt server log. For example: -vehicle. Inputting * means do NOT write any vehicle command. Inputting: +vehicle.installPart means DO write that command |
ClientActionLogs | ISEnterVehicle;ISExitVehicle;IST… | – | Semicolon-separated list of actions that will be written to the ClientActionLogs.txt server log. |
PerkLogs | true | true / false | Track changes in player perk levels in PerkLog.txt server log |
AntiCheatSafety | 2 (Kick) | 1 Ban, 2 Kick, 3 Log, 4 Disable | Response mode for safety-system anti-cheat checks. |
AntiCheatSpeed | 2 (Kick) | 1 Ban, 2 Kick, 3 Log, 4 Disable | Response mode for character-speed anti-cheat checks. |
AntiCheatNoClip | 4 (Disable) | 1 Ban, 2 Kick, 3 Log, 4 Disable | Response mode for character no-clipping anti-cheat checks. |
AntiCheatHit | 2 (Kick) | 1 Ban, 2 Kick, 3 Log, 4 Disable | Response mode for character-hit anti-cheat checks. |
AntiCheatPacketException | 4 (Disable) | 1 Ban, 2 Kick, 3 Log, 4 Disable | Response mode for packet-exception anti-cheat checks. |
AntiCheatPermission | 2 (Kick) | 1 Ban, 2 Kick, 3 Log, 4 Disable | Response mode for player-permission anti-cheat checks. |
AntiCheatXP | 2 (Kick) | 1 Ban, 2 Kick, 3 Log, 4 Disable | Response mode for player-XP anti-cheat checks. |
AntiCheatSafeHouse | 2 (Kick) | 1 Ban, 2 Kick, 3 Log, 4 Disable | Response mode for safehouse anti-cheat checks. |
AntiCheatPlayer | 2 (Kick) | 1 Ban, 2 Kick, 3 Log, 4 Disable | Response mode for player anti-cheat checks. |
AntiCheatChecksum | 2 (Kick) | 1 Ban, 2 Kick, 3 Log, 4 Disable | Response mode for checksum anti-cheat checks. |
Other lines in the file (11)
| Setting | Default | Range | What it does |
|---|---|---|---|
UsernameDisguises | false | true / false | Leave at the default unless a mod or guide for that feature tells you to change it. |
HideDisguisedUserName | false | true / false | Leave at the default unless a mod or guide for that feature tells you to change it. |
SwitchZombiesOwnershipEachUpdate | false | true / false | Leave at the default unless a mod or guide for that feature tells you to change it. |
SafetyDisconnectDelay | 60 | 0 to 60 | Leave at the default unless a mod or guide for that feature tells you to change it. |
SafehouseDisableDisguises | true | true / false | Leave at the default unless a mod or guide for that feature tells you to change it. |
MaxSafezoneSize | 20000 | 0 to 2147483647 | Leave at the default unless a mod or guide for that feature tells you to change it. |
SneakModeHideFromOtherPlayers | true | true / false | Leave at the default unless a mod or guide for that feature tells you to change it. |
UltraSpeedDoesnotAffectToAnimals | false | true / false | Leave at the default unless a mod or guide for that feature tells you to change it. |
SpeedLimit | 70.0 | 10.00 to 150.00 | Leave at the default unless a mod or guide for that feature tells you to change it. |
BanKickGlobalSound | true | true / false | Leave at the default unless a mod or guide for that feature tells you to change it. |
UsePhysicsHitReaction | false | true / false | Leave at the default unless a mod or guide for that feature tells you to change it. |
Settings that change performance or network load
Not every lag complaint is a hardware problem. A handful of lines change how much the server has to simulate, store or send, and they are worth checking before you buy more RAM.
MaxPlayers: more players means more loaded areas, more zombie simulation, more inventory updates and more map streaming. That compounded load is why the official notes warn about going above 32.SaveWorldEveryMinutes: periodic saves reduce rollback after a crash, but they also create regular disk work. If freezes line up with the save timer, lengthen the interval.MaxPacketsPerSecond: this caps how many packets per client the server will process. Raising it can admit more network chatter and CPU work; lowering it can reject abusive or noisy traffic, but too low can punish legitimate busy clients.CarEngineAttractionModifier(default 0.5): how far car noise pulls zombies. The game’s own notes say lower values can help with lag, because fewer zombies are dragged into active pathfinding around drivers.ItemNumbersLimitPerContainer(default 0, no limit): caps items per container, counting every nail separately. It stops giant hoarder crates, but a limit of 50 really does mean 50 nails, so set it generously.BloodSplatLifespanDays(default 0, never): removes old blood splats when chunks load, which keeps long-running worlds tidier.
If these settings are already sensible and the save still stutters as the world grows, check the Java heap as well. Heap that is too small causes constant garbage collection and worsening stutter; heap set too close to the machine limit risks the process being killed with no clean save because Java also uses memory outside the heap. For broader diagnosis, including when to tune the config and when the machine simply needs more headroom, use the Project Zomboid server lag guide.
A tidy servertest.ini helps, but it can’t fix a machine that is out of CPU, memory or disk. If your player count, world age and mod list are all growing, compare hosts and plans before the next season.
Safehouse, faction and PvP settings work as one rules system
Treat these lines as a single policy, not separate toggles. PVP decides whether player damage exists at all. If PVP=false, the safety settings are largely irrelevant because nobody can hurt anyone anyway. If PVP=true and SafetySystem=true, each player can toggle safety status; at least one of the two players has to be in PvP mode for damage to happen. That is why this system feels forgiving for mixed groups but still allows consensual fights.
ShowSafety exposes that state in-world so players can read intent. SafetyToggleTimer (default 2) is how long it takes to switch PvP mode on or off, which stops instant flips mid-fight, and SafetyCooldownTimer (default 3) is the wait before a player can switch again.
Safehouses then decide where those PvP rules should be softened or hardened. PlayerSafehouse and AdminSafehouse decide who can claim. SafehouseDaySurvivedToClaim gates how quickly players lock down property. SafehouseAllowTrepass, SafehouseAllowLoot and SafehouseAllowFire determine whether a safehouse is simply a home marker or an actual protection layer. DisableSafehouseWhenOwnerConnected makes a safehouse behave like a normal house while an owner is online, so it is only secure while they are away. That suits raid-focused communities and feels odd on casual co-op worlds.
Factions add the social layer on top. Faction=true allows formal groups; the day-survived and tag requirements slow down instant clan branding on a fresh wipe. War lets safehouses be attacked during a declared war: WarStartDelay (600 seconds) is the warning time, WarDuration (3,600 seconds) is how long it lasts and WarSafehouseHitPoints (3) is the safehouse hit point limit. It makes conflict scheduled rather than random vandalism.
| Settings | Both players in safe mode | At least one in PvP mode |
|---|---|---|
| PVP=false | No | No |
| PVP=true, SafetySystem=true | No | Yes |
| PVP=true, SafetySystem=false | Yes | Yes |
Anti-cheat response modes: what the numbers mean, and how strict to start
All AntiCheat* lines use the same response scale: 1 Ban, 2 Kick, 3 Log and 4 Disable. Most checks default to 2, a sensible middle ground: the cheater is removed at once, but a false positive costs an innocent player a reconnect rather than a ban. AntiCheatNoClip and AntiCheatPacketException ship at 4, switched off.
For a new public community, start conservative. Kick or log first, watch the pattern in the server logs, and only move a check to ban once you know what normal play triggers on your server. Permanent bans are admin work: appeals, mistaken matches and trust damage all cost more than a short kick.
Keep DoLuaChecksum=true in mind here too. It is not one of the numbered anti-cheat lines, but it does kick clients whose Lua files do not match the server. That protects against tampered files, yet it is also a known source of false positives on some Linux setups, so if players start failing with file-mismatch errors after a clean update, rule that out before assuming cheating.
The lines you must never lose
Some settings are replaceable. These are not. Back up your .ini together with the save and the database, and keep a copy outside the live machine. The backup and restore guide goes through the process, but the short version is simple: if these lines change unexpectedly, players feel it immediately.
ResetIDandServerPlayerID: if the numbers no longer match what a player’s client expects, that player has to create a new character. The game’s own notes advise backing them up somewhere safe.Seed: this is the world generation seed. Changing it does nothing to an existing world; to generate with a new seed you also need to removemap_worldgen.binfrom the save after backing it up.Mods,WorkshopItemsandMap: these define the content set and map load order. They decide what the server loads, what clients must download and, with map mods, which cells win when two maps overlap.
On map load order, later entries overwrite earlier ones where they intersect, and the default Muldraugh, KY belongs at the end. On a live save, adding or removing mods is the point where discipline matters most: back up first, restart fully, and do not remove a mod casually if its items or tiles already exist in the world. Removed content can leave broken objects behind in the save. For the messy bits of Build 42 mod formatting and map order, the Workshop and map mods guide covers it in detail.
Symptom, likely cause, first fix
When something feels wrong, start with the setting that explains the behaviour before touching half the file. This table covers the failures that come up most often after a rules change, migration or fresh Build 42 setup.
| Symptom | Likely cause | First fix |
|---|---|---|
| Server does not show in the in-game browser | Public=false | Set Public=true, give it a PublicName, reload or restart, and remember Steam-enabled servers still appear in the Steam browser even when not public in-game. |
| Strangers can create accounts and join | Open=true | Set Open=false, add the players you want manually, and add a join Password if you want a second layer. |
| World time keeps moving when nobody is online | PauseEmpty=false | Set PauseEmpty=true if you want crops, fuel and the clock to stop between sessions. |
| Players are kicked after a mod update with file mismatch errors | DoLuaChecksum=true is rejecting clients, or the mod list differs between server and client | Make sure Mods and WorkshopItems match, restart fully, and if the server is on Linux and the errors look false, try DoLuaChecksum=false as a diagnostic step. |
| Changed mods or map, but clients still load the old state | The server reloaded options instead of restarting after Mods, WorkshopItems or Map edits | Stop the server and start it cleanly so Steam downloads and client content checks happen from scratch. |
| Players suddenly have to create new characters | ResetID or ServerPlayerID changed | Restore the backed-up values from the previous .ini before letting more people join. |
| Whitelist server still rejects a valid player | The account exists, but the SteamID was not added (needed since 42.13.2) | Add the username and SteamID, then have the player reconnect with the same account details. |
| New seed appears to do nothing | Seed was changed without removing map_worldgen.bin | Back up the save, delete map_worldgen.bin, then start the server again. |
| Edits looked correct, then vanished after restart | The wrong -servername was used, or another tool wrote over the file on shutdown | Stop the server, confirm the active server name, edit that file set, then start the server again. |
Project Zomboid server FAQ
Where is servertest.ini on a dedicated server?
By default it lives in the user’s Zomboid server config folder: C:\Users\<you>\Zomboid\Server on Windows and ~/Zomboid/Server on Linux. If you start the server with -servername NAME, the file name changes to NAME.ini. Make sure you edit the file that matches the server name actually used at launch.
Do I need to restart after changing servertest.ini?
Not always. Many options can be applied live with reloadoptions or changed directly with /changeoption, then checked with showoptions. Use a full restart for port changes and for Mods, WorkshopItems or Map changes, because clients and Steam need to pick up the same content set.
What is the difference between servertest.ini and SandboxVars.lua?
servertest.ini covers server operation: listing, access, ports, admin, anti-cheat, backups, mod loading and similar non-world rules. SandboxVars.lua controls the world itself, such as zombie population, loot and many survival rules. In practice, if a setting changes how the world plays, it is usually Sandbox; if it changes how the server runs, it is usually the .ini.
How do I make my server private?
Set Public=false so it is not listed in the in-game browser, set Open=false so players cannot self-register, and add a join Password if you want a simple shared gate as well. Then create the allowed accounts manually and add their SteamIDs before they join. That gives you browser privacy, account control and a password gate together instead of relying on only one layer.
Why did my settings reset after a restart?
The usual cause is that the file was edited while the server, a panel or the Host screen later wrote its own copy over it, or the server started with a different -servername and loaded another file set. Stop the server, confirm the active server name, edit the correct files, then start it again. If it keeps happening on a rented server, make the change in the panel’s own settings page instead of the file.
More Project Zomboid server guides
The rest of our Project Zomboid server guides, plus the host comparison.
Defaults are from the Build 42 stable server files (42.20 onwards). Swap servertest for your own -servername if you use one.