Game Hosting home

Project Zomboid Dedicated Server SteamCMD: Choose a Branch

Install the Project Zomboid dedicated server with SteamCMD, choose a compatible branch, and confirm the downloaded build before anyone joins.

Difficulty
NormalDifficulty Normal
Time to do
12 min
Reading
10 min
Updated
By
Game Hosting team

You will need

  • SteamCMD for Windows or Linux
  • A writable folder reserved for the dedicated server
  • The game build your group has agreed to use
  • Access to the server startup log

For a Project Zomboid dedicated server SteamCMD install, start with the server package, then choose the branch that matches your group’s client build and existing world. The dedicated package is App ID 380870; in our September 22, 2026 test, anonymous SteamCMD access installed the public branch and its server started as 42.20.4. We also confirmed that legacy41 is a separate selectable package branch. This guide shows how to check each stage before anyone joins. It does not turn an old save into a compatible one or replace the later setup work.

Identify the dedicated-server package before installing it#

For Project Zomboid groups that want to leave machine maintenance to the host, we recommend Game Hosting. The integrated panel brings settings and restarts together with three free backup slots, backed by Ryzen 9 9900X hardware, DDR5 memory and NVMe storage.

The Project Zomboid dedicated server and the game clients are separate Steam apps. Use server App ID 380870 with SteamCMD; App ID 108600 is the game clients launch. Our clean-folder test logged in anonymously, updated 380870, and received the dedicated-server files, including StartServer64.bat. That is a useful package check before you troubleshoot paths or server settings.

What you are installing ID Where it belongs
Project Zomboid client 108600 Each player’s Steam game install
Project Zomboid Dedicated Server 380870 A separate folder on the machine that runs the server

You do not need to copy the client’s install folder and rename it. SteamCMD retrieves the server package directly. Valve documents the app_update command and its optional beta-branch argument in the SteamCMD reference. The package name, files, and successful install message are also visible in the test transcript; don’t infer that a download succeeded just because SteamCMD opened.

The package choice does not decide how the world is hosted. It only installs the files. If you have decided to host on a rented machine, the next question is deployment and access control, covered by a Project Zomboid VPS plan. Check with the provider which game build it installs and whether you can select the same branch as your group before you buy.

Choose a branch that matches the group and its world#

For a new group using the current stable game, leave SteamCMD on its default public branch. During our test, that branch installed manifest build ID 24909836 and the launched server reported 42.20.4. Branches can change after updates, so the manifest ID is evidence of what SteamCMD installed on that date, not a version label to pin forever.

Use legacy41 only when the group intentionally keeps playing Build 41. The developers’ 42.21 Stable announcement labels Build 42.21 Stable; their Build 42 Stable plans point Build 41 players to the Steam legacy41 beta. We installed the dedicated package with that branch selection; its manifest recorded BetaKey=legacy41 and build ID 24928750. That verifies SteamCMD selected and downloaded the branch. We did not start the legacy package, so this guide makes no claim about the runtime version of that branch.

Group’s situation SteamCMD selection Before anyone joins
New or existing group on current Stable Default public branch; omit -beta Start the server and compare its reported build with each client
Group deliberately staying on Build 41 -beta legacy41 Confirm each client and the server use Build 41
Group preserving a different older test build Stop and verify that exact branch is still available Confirm the build on the server and every client before using the world

A current anonymous SteamCMD metadata check on September 29, 2026 lists public, unstable, and legacy41 for both client App ID 108600 and server App ID 380870; both legacy41 records describe Build 41.78.21. This verifies the branch listing, not a server launch, client join, or hosting-panel control. If your group has not settled on a build, use the Build 41 vs. Build 42 server branch checklist before choosing the SteamCMD option.

Branch selection follows the group’s existing game and save. It is not a save converter: the official transition notes state that Build 41 saves are incompatible with Build 42. If players disagree about which build to use, settle that before you install the live server; a second branch download does not make a world portable between them.

Create a dedicated install folder before running SteamCMD#

Give the server package its own writable directory, separate from SteamCMD, the client game, and any live server data. This keeps downloaded files easy to identify and avoids mixing a second branch into a folder that already contains a world you care about. In these examples, C:\pzserver is the server install folder and C:\steamcmd\steamcmd.exe is the SteamCMD program. Choose paths that exist on your machine.

On Windows, create the server folder first:

powershell
New-Item -ItemType Directory -Force C:\pzserver

On Linux, make a folder owned by the account that will run the server. Do not install or run a game server as root just to bypass a permissions problem:

bash
mkdir -p "$HOME/pzserver"

SteamCMD’s force_install_dir applies to the next app install. Set it before logging in and before app_update; the examples keep paths free of spaces so the command is easy to copy. If you choose a path with spaces, quote the path according to your shell and check the transcript to confirm SteamCMD used the directory you meant.

Install the selected package and branch#

Run SteamCMD with the dedicated app ID. To install the default public branch, leave -beta out. Anonymous login worked for App ID 380870 in our test, so a personal Steam password is not needed for this package command.

  1. Set the install folder first

    In the SteamCMD prompt, enter force_install_dir C:\pzserver on Windows. On Linux, replace $HOME with the account’s actual install path before you enter the command. Set the directory before login and app update.

  2. Log in anonymously and install the server

    Enter login anonymous, then app_update 380870 validate. Wait until SteamCMD reports that App 380870 is fully installed.

  3. Select Build 41 only when the group needs it

    For an intentional Build 41 install, use app_update 380870 -beta legacy41 validate instead. Keep this install separate from a public-branch test or live world.

For a Windows command-line run that performs the default install in one pass:

powershell
C:\steamcmd\steamcmd.exe +force_install_dir C:\pzserver +login anonymous +app_update 380870 validate +quit

For the legacy branch, add the selected branch to that update command:

powershell
C:\steamcmd\steamcmd.exe +force_install_dir C:\pzserver +login anonymous +app_update 380870 -beta legacy41 validate +quit

On Linux, use the equivalent shell command with your install folder:

bash
./steamcmd.sh +force_install_dir "$HOME/pzserver" +login anonymous +app_update 380870 validate +quit

The default-branch command completed in our test. On the first attempt, the clean SteamCMD cache returned Failed to install app '380870' (Missing configuration). Refreshing app metadata and repeating the install worked:

text
app_info_update 1
app_update 380870 validate
Success! App '380870' fully installed.

That cache message by itself did not show that the app ID or branch was wrong. Refresh metadata once, retry, and read the final update state. If the retry fails, keep its actual error text and fix the cause before starting an incomplete install.

Read SteamCMD output and prove what landed on disk#

Treat the final Success! line as the start of verification, not the end. Check that SteamCMD installed App 380870 into the folder you chose, and look for the server launch files. The Windows package we installed included StartServer64.bat; the Steam app manifest recorded a build ID and, on the legacy install, the selected BetaKey.

Useful checks on Windows:

powershell
Get-ChildItem C:\pzserver\StartServer64.bat
Select-String -Path C:\pzserver\steamapps\appmanifest_380870.acf -Pattern '"buildid"','"BetaKey"'

For the default public test, the manifest contained buildid 24909836 and the launch script existed. For the legacy41 test, the manifest contained BetaKey legacy41 and buildid 24928750. These values identify the packages we downloaded on September 22, 2026. Steam can update the public package later, so a future build ID is not automatically a failure and these IDs are not a permanent pin.

If the selected beta key is missing from the manifest, stop and verify the command line and target folder before launching. A valid manifest from one directory does not prove that another server process uses that directory. Check the path on the actual StartServer64.bat you plan to run.

Start the server once and check its reported version#

Installed files can be current while a different server folder is still running. On Windows, start StartServer64.bat from the folder that contains the manifest you just checked. The first launch can spend several minutes generating the default configuration and preparing the map. It may also ask you to create an administrator password; choose a unique password and keep it private.

Wait for the startup log to report that the server started, then find the version line. Our public-branch test printed:

text
version=42.20.4 b0bbce05d5 demo=false

The version string is stronger evidence than the SteamCMD window’s last line: it proves which build the running process reports. Record it alongside the selected branch, then compare it with the build shown by each client. If the values differ, do not ask players to join and hope the mismatch fixes itself; confirm which folder and branch each side is using. See the developer’s Project Zomboid FAQ for current storefront and update notes, since patch timing can differ between stores.

When the first boot finishes, stop the test server through its console with quit and wait for the clean shutdown message before copying or changing files. The current Windows launch script wrote its first-run profile beneath the Windows user folder in our test. We tried passing -cachedir as a command-line argument, but this build reported it as an unknown option, so do not assume that flag moved the profile. Check the path actually named in your log before you back up or edit a configuration file.

The B05 task stops at package and build verification. Our Windows first-run walkthrough introduces launching a dedicated server and its initial configuration; use it for that limited next step, then verify current settings and networking for your own build. If a client reports “The server failed to respond,” follow this connection diagnostic path to separate startup, local, and outside-network results before editing port rules. A separate VPS deployment guide will cover provisioning and ongoing operation.

Keep package updates separate from saves and hosting decisions#

validate asks SteamCMD to check the installed app files against the selected package. It does not change a client’s branch for them, convert an old world, or prove the server can accept a remote connection. Make those checks separately, with the server stopped before replacing its files.

Before updating a live server, record its branch and runtime version, stop it cleanly, and make a recoverable copy of the server data. Update the package in the intended install folder, check the manifest again, launch the server, and read the new version line before inviting the group back. If you cannot match the world’s existing branch, stop before opening the save in a different build. The official notes say Build 41 saves do not work in Build 42; neither copying the world nor downloading both packages demonstrates a conversion.

If SteamCMD does not create the expected files, first confirm the app ID, install directory, login, selected beta branch, and final error line. For a later patch workflow, keep update timing and rollback planning in the separate update guide when it is published. If you would rather not maintain the machine, compare Project Zomboid hosting options and ask the provider which branch and exact build it will run before paying. Hosting removes machine upkeep; it does not remove the need for the group’s clients, mods, and world to agree on a compatible build.

Quest complete

Before you invite your friends, check that the intended world loaded and that each player can connect. If those checks pass, you're ready for a session; if you'd rather not keep a PC on, that's what we're here for.

Quick answers

Is the dedicated package the same as the client download?

No. The server package uses App ID 380870; the Project Zomboid game client uses App ID 108600.

Does a successful SteamCMD download prove the correct branch is running?

No. Check SteamCMD’s selected branch and install manifest, then read the version printed when the server starts.

Can validating files change my selected game version?

Validation checks the files for the package and branch you selected. It does not choose the branch for you.

Can I move my Build 41 world to Build 42 by changing branches?

Do not assume that changing branches converts a save. The developers say Build 41 saves are incompatible with Build 42.