Prepay & save up to 40% · 3 months −20% · 6 months −30% · 12 months −40% Client Area
Guide

How to Set Up a Project Zomboid Server

Project Zomboid··10 min read

Project Zomboid is the deep isometric zombie-survival sim where every choice can end your run. A dedicated server with Steam Workshop mods and full sandbox tuning keeps your apocalypse persistent for the whole group. This step-by-step guide shows you how to set up a Project Zomboid server in minutes — no manual install, no command line.

What you need

  • A Project Zomboid plan with around 4–8 GB of RAM — Project Zomboid is a Medium-class game.
  • Support for Steam Workshop mods and sandbox vars, included on every GGameHost Project Zomboid plan.
  • Your friends or community to play with (up to 32–64 slots).

Step 1 — Choose your plan

Pick a plan sized for your Project Zomboid community. We recommend about 4–8 GB of RAM; start smaller and upgrade in one click as you add players or mods. Project Zomboid plans start at $10.99/mo.

Step 2 — Deploy your server

Check out and your Project Zomboid server provisions automatically in under 60 seconds, with console access right away — no manual install, no command line.

Step 3 — Connect & invite players

Once your Project Zomboid server is online, share its address (IP and port) with your friends so they can join. Start, stop and restart it anytime from the control panel.

Step 4 — Install mods & configure

Your Project Zomboid server supports Steam Workshop, Mods, Sandbox vars, Backups, FTP/SFTP. Install Steam Workshop mods and sandbox vars straight from the one-click installer, or upload your own from the control panel — then tweak settings in the visual config editor.

Step 5 — Keep it running smoothly

Enable scheduled automatic backups, set restart timers, and monitor CPU, RAM and player counts from the dashboard. Always-on DDoS protection and 24/7 support keep your Project Zomboid server stable.

Server softwareSteam Workshop mods and sandbox vars
Recommended RAM4–8 GB
Player slotsup to 32–64 slots
Performance classMedium

Project Zomboid server FAQ

How much RAM does a Project Zomboid server need?
We recommend 4–8 GB for Project Zomboid. Start smaller and upgrade in one click as your player count or mod list grows.
How many players can a Project Zomboid server hold?
Typical Project Zomboid servers run up to 32–64 slots. Slots scale with your plan, so you can raise them at any time.
Can I install mods on a Project Zomboid server?
Yes — Project Zomboid supports Steam Workshop mods and sandbox vars. Install them from the one-click installer or upload your own over FTP/SFTP.

Ready to start? Deploy your Project Zomboid server in under 60 seconds — 7-day money-back guarantee.

Related guides

Share:Twitter / XFacebookRedditWhatsApp

Ready to play?

Deploy your server in under 60 seconds — 7-day money-back guarantee.

Browse games
Reference

Ports, config and common failures

Installing the server files with SteamCMD

The server files come from Steam app 380870, documented for Windows and Linux hosts. SteamCMD pulls them under an anonymous login, so no account credentials are typed on the host.

force_install_dir C:\PZServer
login anonymous
app_update 380870 validate
quit

Wait for Success! App '380870' fully installed before quitting.

On Debian or Ubuntu, the wiki adds the i386 architecture, installs the steamcmd package, runs the server as a non-root user and scripts the update so that one command covers every later patch:

sudo adduser pzuser
sudo mkdir /opt/pzserver
sudo chown pzuser:pzuser /opt/pzserver
sudo -u pzuser -i

cat >$HOME/update_zomboid.txt <<'EOL'
@ShutdownOnFailedCommand 1
@NoPromptForPassword 1
force_install_dir /opt/pzserver/
login anonymous
app_update 380870 validate
quit
EOL

export PATH=$PATH:/usr/games
steamcmd +runscript $HOME/update_zomboid.txt

To install Build 41 instead, change the update line to app_update 380870 -beta legacy41 validate.

Two documented pitfalls: the wiki warns against launching the server through Steam, and says to verify the integrity of the files if that happens by accident. Separately, a server installed through the Steam client can stick at "Getting server info" or fail to download mods — described as a problem specific to that tool, with a SteamCMD install as the documented fix.

Ports and firewall rules

Gameplay traffic uses two UDP ports, both set in the server INI and both accepting 0-65535:

  • 16261/udpDefaultPort, the default starting port for player data and one of the two ports used
  • 16262/udpUDPPort, listed as the Direct Connection Port

On a Linux host running UFW:

sudo ufw allow 16261/udp
sudo ufw allow 16262/udp
sudo ufw reload

Windows hosts allow the same two ports through Windows Firewall. On a home connection, both also need forwarding on the router to the host's local IP, and players need the host's external address rather than an internal 192.168.x.x or 10.x.x.x one. For LAN play, the wiki says to follow the same steps without the port forwarding section, with clients using the private IP.

UPnP=true asks a UPnP-enabled gateway to create those forwarding rules automatically; the reference notes that the server falls back to default ports if this fails.

Remote console has its own port. RCONPort defaults to 27015, and RCONPassword arrives empty, annotated "Pick a strong password". A community RCON walkthrough confirms 27015 as the default listening port and connects a standard RCON client to it; the official reference gives the number without naming a transport protocol.

A second instance on the same box needs two more free UDP ports, written into that instance's own INI; the wiki's Linux procedure uses 16274 and 16275 as its example.

First launch, admin account and memory allocation

Windows installs carry three launchers: StartServer32.bat, StartServer64.bat and StartServer64_nosteam.bat. Linux uses a shell script:

bash start-server.sh
bash start-server.sh -nosteam
bash start-server.sh -servername SERVERNAME

-servername picks the .ini file to use and creates a save folder to match.

Set memory before the first launch. The wiki warns that StartServer64.bat ships specifying 16 GB of starting memory, and that its -Xms and -Xmx values must be changed or the server fails to start with memory errors. Its 6 GB example reads:

".\jre64\bin\java.exe" -Djava.awt.headless=true -Dzomboid.steam=1 -Dzomboid.znetlog=1 -XX:+UseZGC -XX:-CreateCoredumpOnCrash -XX:-OmitStackTraceInFastThrow -Xms6g -Xmx6g -Djava.library.path=natives/;natives/win64/;. -cp %PZ_CLASSPATH% zombie.network.GameServer -statistic 0

Tech Support locates the -Xmx line in StartServer64.bat on Windows and in ProjectZomboid64.json on Linux or Mac. The unit is g or m. An -Xms the system cannot allocate stops the game from starting; an -Xmx above physical RAM ends up in virtual memory.

The first run creates an admin account and prompts for its password. -adminusername gives that default admin a different name, and -adminpassword sets the password automatically, skipping the prompt when no default admin exists. Later, grantadmin "Username" in the server console promotes a player. Inside StartServer64.bat, JVM arguments go after the -Xmx line and game arguments after the %1 %2 text. No -- separator is needed; the script already separates them.

Config files and the keys that matter

Four files hold the configuration, in %USERPROFILE%\Zomboid\server on Windows and $HOME/Zomboid/Server on Linux:

  • servertest.ini — server configuration
  • servertest_SandboxVars.lua — sandbox configuration
  • servertest_spawnpoints.lua — spawn points
  • servertest_spawnregions.lua — spawn regions

The servertest prefix follows -servername. World data lands in Zomboid/Saves/Multiplayer/<servername>; if missing, the server generates it with default game settings.

KeyDefaultWhat it does
MaxPlayers32Concurrent player cap (min 1, max 100)
OpentrueClients may join without a whitelist account; set false and admins must create username/password pairs by hand
PasswordemptyClients must know this password to join; ignored when hosting via the Host button
PublicfalseLists the server in the in-game browser; Steam-enabled servers always appear in the Steam server browser
PauseEmptytrueGame time stops when no players are online
SaveWorldEveryMinutes0Loaded parts of the map save after this many real-world minutes; 0 disables it
DoLuaChecksumtrueKicks clients whose game files don't match the server's
PingLimit0Ping in milliseconds before a player is kicked; 0 disables it

ResetID records whether the server has had a soft reset, and ServerPlayerID whether a character came from another server; a client that does not match them must create a new character. The reference strongly advises backing up both IDs.

servertest.ini can be saved while the server runs: reloadoptions reloads the options and sends them to clients; showoptions lists the current options and values.

Loading Steam Workshop mods

Two keys carry two different kinds of ID, and a working modded server sets both.

WorkshopItems lists the Workshop Mod IDs for the server to download, separated by semicolons. The documented example:

WorkshopItems=514427485;513111049

Mods takes the mod loading ID instead, which the reference locates in \Steam\steamapps\workshop\modID\mods\modName\info.txt. A Workshop ID is something else: the number at the end of the mod's Workshop URL. One key governs downloading, the other loading.

The documented procedure is to save all mods to a Steam Workshop collection, paste the collection URL into PZ ID Grabber, then paste the mods into Mods= and the Workshop item IDs into WorkshopItems=.

Map mods need a third key. Map defaults to Muldraugh, KY and takes the folder name found under \...\mods\modName\media\maps\. Order sets priority, and getting it wrong is a documented failure: the Muldraugh map overwrites all other modded maps, which then load cut off or not at all. The published fix puts Muldraugh last so the others take priority:

Map=Muldraugh, KY;vehicle_interior;Basements;Ashenwood;alshardware;AZSpawn   (breaks modded maps)
Map=vehicle_interior;Basements;Ashenwood;alshardware;AZSpawn;Muldraugh, KY   (correct order)

The checkModsNeedUpdate console command reports whether a mod has been updated and writes the answer to the log file.

Common errors and fixes

The "Port 16262 closed" warning — UDP 16262 is not fully open on the host's network, usually because the router is not forwarding it or the host firewall blocks it. A second cause is easy to miss: it also appears when players connect to a dedicated server with "Use Steam Relay" enabled, which must be turned off client-side. The wiki and a support thread list both causes, and note it can often be ignored on small co-op servers that otherwise run normally.

Server fails to start with memory errors — the untouched 16 GB -Xms/-Xmx pair in StartServer64.bat. Hardware does not settle this: a 2022 thread reports a host with 48 GB of RAM hitting repeated java.lang.OutOfMemoryError crashes, fixed once memory was assigned in the start script.

"Assertion Failed: Illegal termination of worker thread" — documented for machines that hosted a Build 41 server before Build 42 files were installed. steam_appid.txt must hold a single line reading 108600; back up any .ini, .lua and save settings you want, then delete the Zomboid folder so the newer server recreates it.

Character stuck in the void after joining — an existing profile used against a world previously hosted with the in-game Host function. Disconnect, change the account name in the Add Server panel, save and reconnect.

Logs sit in the Zomboid folder: server-console.txt for dedicated servers, coop-console.txt for hosted co-op, console.txt for the client. logs.zip holds the last five game launches.

Version and save compatibility before you start

Two compatibility points come straight from the 42.20 release notes: because additional map content was added, existing saves on Unstable 42.19 will not be compatible with 42.20, and a 42.19 beta can be opted into instead to continue an unstable game.

Staying on Build 41 is catered for on both sides. The announcement spells out the route for anyone running or joining a Build 41 world: in Steam, right-click the game, select Properties, then choose legacy41 under "Game Versions & Betas". On a SteamCMD install, the matching command is app_update 380870 -beta legacy41 validate.

Online multiplayer was temporarily disabled during Build 41 and reimplemented there in 41.60; in Build 42 it returned in 42.13.0. Older Build 41 multiplayer material may therefore not describe current behaviour.

One setting ties into all of this. DoLuaChecksum is on by default and rejects clients whose files differ from the server's, which is how a mixed-branch or mixed-mod population shows up from the server side.