This module installs, configures, starts, imports, and backs up Project Zomboid dedicated servers.
NEEDS LIVE TEST. Static host loading, paths, configuration, and import contracts pass. Stable Build 41 and unstable Build 42 lifecycle behavior still need separate live validation.
WindowsGSH installs anonymous SteamCMD app 380870 and launches the vendor-provided StartServer64.bat. The default Steam branch remains stable; this module does not silently select Build 42's unstable branch.
WindowsGSH uses -cachedir=<install>/Zomboid, -servername=<profile>, and Project Zomboid's -adminpassword startup option. Set Administrator Password before the first start so the server can create its admin account without stopping at an interactive prompt. This is separate from Join Password.
The administrator password accepts letters, numbers, and - _ . @ # + =; the restricted character set prevents command-shell characters from being interpreted by the vendor batch launcher. WindowsGSH preserves unknown keys in Zomboid/Server/<profile>.ini while managing PublicName, Password, DefaultPort, UDPPort, SteamPort1, SteamPort2, UPnP, MaxPlayers, and Public. Profile names accept only letters, numbers, hyphens, and underscores.
| Purpose | Default | Protocol | Exposure |
|---|---|---|---|
| Game traffic | 16261 |
UDP | Public; eligible for firewall/UPnP guidance |
| Direct connection | 16262 |
UDP | Public; eligible for firewall/UPnP guidance |
| Steam service 1 | 8766 |
UDP | Public; eligible for firewall/UPnP guidance |
| Steam service 2 | 8767 |
UDP | Public; eligible for firewall/UPnP guidance |
The module writes all four ports into the selected profile's INI. Enable UPnP Port Forwarding allows Project Zomboid to ask a compatible router to create mappings; it defaults to disabled. UPnP does not work on every network and is not a substitute for checking firewall and router rules. Build 42 behavior should still be verified with listening-socket captures.
WindowsGSH currently reports supervised process state. A2S/RCON is not claimed. Output is redirected, but interactive command delivery and save-safe quit handling remain unproven.
Project Zomboid receives the administrator password as its documented startup argument. Do not post startup command lines or first-run logs without checking that credentials have been removed.
- Launcher:
StartServer64.bat - Managed configuration:
Zomboid/Server/<profile>.ini - Databases, saves, logs, and workshop state: below
Zomboid - Backup target: complete managed
Zomboiddirectory
- Legacy installs using
%USERPROFILE%\Zomboidneed that directory copied into the managed install before first start. - Import does not execute or trust historical batch-file arguments.
- Forced termination may be required until console shutdown is proven.
- Build 42 remains an explicitly selected unstable Steam branch and is not configured by this first version.
- The vendor
StartServer64.batcurrently controls Java heap size; this module does not rewrite the vendor batch file.
- Install and update the current stable depot and verify
StartServer64.bat. - Complete a first start with a new administrator password and confirm no interactive password prompt remains.
- Round-trip managed INI values while preserving unknown keys.
- Start, attach, restart WindowsGSH, stop, and confirm save integrity.
- Verify remote joining and capture stable/Build 42 listening sockets.
- Test UPnP enabled and disabled, including the no-compatible-gateway fallback message.
- Test direct and WindowsGSM
serverfilesimports with Copy and Adopt. - Back up and restore a disposable world, database, and modded server.
Report problems through the issue tracker with sanitized logs and version details. Never post passwords or private player data.
If you like the work I do and would like to support continued WindowsGSH and module development, you can contribute here:
Modules execute with WindowsGSH's permissions. Review ProjectZomboidModule.cs, module.json, and SECURITY.md. Current Steam identity was checked against SteamDB. The MIT-licensed historical WindowsGSM plugin was used only to confirm the managed-cache/import convention; this implementation is independent.