Quick Answer
A dedicated server stands on four recorded checks. Install: SteamCMD app_update 380870 validate (PZwiki, 42.20.0-marked). Network: UDP 16261 and 16262 by default — the page warns 42.21 may differ. Files: servertest.ini, SandboxVars, spawnpoints, and spawnregions .lua under Zomboid/Server; world data under Zomboid/Saves/Multiplayer. Mods: WorkshopItems= and Mods= are separate fields — both must be enabled. Order: clean default profile first, one remote join, THEN settings and mods in reversible batches. If it won't boot, read the first fatal console line before touching anything.
Table of Contents
Setup checkpoints
Run these in order and verify each one against your branch — older documentation isn't proof of a working 42.21 run. Every row names the exact command, file, or port to check.
| Checkpoint | Do exactly this | Passes when |
|---|---|---|
| Install | Run SteamCMD: app_update 380870 validate, then write down the exact server build number it reports | The build number is recorded where you can find it when a client mismatch appears later |
| Profile | Edit the profile you actually load — the defaults live in servertest.ini, the sandbox vars, and the spawn files | A change you make shows up in-game on the next restart; if it doesn't, you edited the wrong profile |
| Network | Open UDP 16261 (game) and 16262 (query) in the firewall, then test a local join and a remote join separately | A player outside your network joins, moves, and disconnects with no timeout |
| Backup | Copy the save, the settings, and the spawn files out of the live profile into a folder named with the date | A dated copy exists that the running server never writes to |
| Mods | Write the WorkshopItems and Mods IDs side by side and compare them with a client's list — mods must be enabled in both the Workshop and the Mods sections | Both halves match row for row; a client joins a modded session with no missing-file error |
The recorded values, and their version marks
Everything below comes from the PZwiki dedicated-server page, version-marked 42.20.0 — the page itself warns that current 42.21 information may differ. That warning is part of the record: re-verify each value on your install.
| What | The recorded value | The 42.21 caveat |
|---|---|---|
| Install / update command | SteamCMD: app_update 380870 validate | The app ID is stable; note the exact server build the command reports after it runs, so a client mismatch later has a baseline to compare against |
| Default UDP ports | 16261 and 16262 | Explicitly flagged as possibly different on 42.21 — check your server's own configuration output and firewall rules before port-forwarding on faith |
| Profile files | servertest.ini, servertest_SandboxVars.lua, servertest_spawnpoints.lua, servertest_spawnregions.lua under Zomboid/Server | File layout has been stable, but always confirm the active profile name — editing a dead profile is the classic 'my change did nothing' cause |
| World data | Zomboid/Saves/Multiplayer/<server> | Back this up with the profile files together: a save without its matching configuration is half a server |
| Mod fields | WorkshopItems= entries are distinct from Mods= entries | Both fields must be enabled for each mod — a Steam Support response confirms server mods need both sections |
When the server won't boot: read before you touch
The troubleshooting reference is explicit: a server stuck on initializing starts with the console output and the first error — before any change to the save or settings. The captured forum report shows what that looks like in practice.
A Build 42.20.4 Linux dedicated server was reported intermittently failing to boot with multiple mods loaded, throwing an attempted-index 'biomes' error in WorldGenOverride.lua. Note the shape of that failure: intermittent, mod-correlated, and specific — one Lua index on one file. That specificity is what the console gives you and panic doesn't. The first fatal line names the file and the failure; everything after it in the log is usually cascade.
The response sequence that report implies: reproduce it (an intermittent failure needs a trigger, so note what changed between boots), read the first error (WorldGenOverride.lua means world generation — map mods and world overrides are the suspects), and bisect the mod set rather than editing the save. The Steam community's version of the same method for 42.21 failures: disable half the mods, test, halve again. Server-side, the same logic applies with an extra field to check — WorkshopItems and Mods must both be enabled, so a half-configured mod looks identical to a broken one.
And before any of that: was there a backup? The backup reference treats the live save folder, server configuration, Workshop and Mods records, the copy date, and a separate restore check as distinct fields — a backup that hasn't been restored once is a hope, not a backup. Servers fail at the worst times precisely because nobody verified the recovery path while the server was healthy.
Reference data
These values come from a PZwiki page marked 42.20.0 and remain verification items for 42.21.
| What | Value | Why you care |
|---|---|---|
| SteamCMD app | app_update 380870 validate | Download or update the dedicated server |
| Default UDP ports | 16261 and 16262 | Separates network checks from mod checks |
| Profile files | servertest.ini and servertest_SandboxVars.lua | Identifies the active server configuration |
| Spawn files | servertest_spawnpoints.lua and servertest_spawnregions.lua | Keep spawn config with the active profile |
| World files | Zomboid/Saves/Multiplayer | Back up the matching multiplayer save |
FAQ
How do I install a Project Zomboid dedicated server?
With SteamCMD: app_update 380870 validate (PZwiki, version-marked 42.20.0). Note the exact server build the command reports — that's your baseline for client-version comparisons later. Then start the default servertest profile with no mods and confirm it stays up before touching ports, settings, or WorkshopItems.
Which ports does a Project Zomboid server need?
UDP 16261 and 16262 by default, per the PZwiki page — which is version-marked 42.20.0 and explicitly warns that current 42.21 information may differ. Check your server's own configuration output and firewall rules, and test a local join separately from a remote join so a network problem can't masquerade as a server problem.
Where are the server configuration files?
Under Zomboid/Server: servertest.ini, servertest_SandboxVars.lua, servertest_spawnpoints.lua, and servertest_spawnregions.lua, with world data under Zomboid/Saves/Multiplayer. Always confirm the active profile name before editing — editing a dead profile is the classic 'my change did nothing' cause.
My server crashes on startup with a biomes error — what is that?
It matches a captured forum report: a Build 42.20.4 Linux server intermittently failing to boot with multiple mods, throwing an attempted-index 'biomes' error in WorldGenOverride.lua. That's a world-generation failure — map mods and world overrides are the suspects. Read the first fatal console line, then bisect the mod set (disable half, test, halve again) instead of editing the save.
Why does my server mod not work even though it's installed?
WorkshopItems= and Mods= are separate fields, and a Steam Support response says server mods must be enabled in both sections. A mod present in one field but not the other is subscribed-but-inactive. Compare both fields against a client's downloaded set before deeper diagnosis.