Project Zomboid
| Platform | Support | Notes |
|---|---|---|
| Linux | ✅ Native | Full support with Java |
| Windows | ✅ Native | Full support |
Project Zomboid
Project Zomboid is a sandbox zombie survival game with cooperative multiplayer. This guide covers complete server setup, configuration, mod support, and administration on Linux.
- RAM: 4GB minimum, 6GB+ recommended
- vCPU: 2+ cores (scales with player count and mods)
- Disk Space: 10GB+ (game ~2GB, saves and mods vary)
- Network: Stable connection, ~4-8 Mbps for 16 players
RAM usage scales significantly with player count and active mods. Start with 6GB for 8-16 players, add 1-2GB per 8 additional players.
Prerequisites
- Linux server (Ubuntu 20.04+ recommended)
- SSH access
- Steam account (free)
- Linux command-line experience
Step 1: Install System Dependencies
sudo apt update
sudo apt upgrade -y
sudo apt install -y lib32gcc-s1 lib32stdc++6 curl wget unzip default-jre-headless
Java Runtime Environment is optional but helpful for some admin tools.
Step 2: Create Game User
sudo useradd -m -s /bin/bash pzserver
sudo passwd pzserver
Switch to the new user:
su - pzserver
Step 3: Install SteamCMD
mkdir -p ~/steamcmd
cd ~/steamcmd
wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
tar -xzf steamcmd_linux.tar.gz
./steamcmd.sh +quit
Step 4: Install Project Zomboid Server
Use SteamCMD to download the server (AppID 380870):
cd ~/steamcmd
./steamcmd.sh +force_install_dir ~/pz-server +login anonymous \
+app_update 380870 validate +quit
Installation takes 10-20 minutes depending on disk speed.
Verify:
ls -la ~/pz-server/
You should see ProjectZomboid64.sh and supporting files.
Step 5: Generate Initial Configuration
Run the server once to generate config directories:
cd ~/pz-server
./ProjectZomboid64.sh
Wait 30-60 seconds, then press Ctrl+C to stop. This creates:
- ~/.cache/ProjectZomboid/ (config directory)
- Server properties and world folders
Step 6: Configure Server Properties
Locate and edit the server configuration:
cd ~/.cache/ProjectZomboid/Zomboid/Server
ls -la
Create servertest.ini
This is the main server configuration file:
cat > ~/.cache/ProjectZomboid/Zomboid/Server/servertest.ini << 'EOF'
[TCPIP]
host=0.0.0.0
port=16261
[Server]
PauseEmpty=true
PauseEmptyOnStart=true
Public=true
PublicName=My Project Zomboid Server
PublicDescription=Survival server
Password=
MaxPlayers=16
Mods=
WorkshopItems=
DoLuaChecksum=true
LogFile=../Logs/console.log
SaveWorldEveryMinutes=60
AutorebootTime=0
GoogleAnalytics=false
PingFrequency=10.0
ItemRemovalTime=8
NpcRemovalTime=72
PlayerSafehouse=true
AdminSafehouse=false
ConstructionPreventionRadius=0
SafeHouse2=true
FactionDamageSelf=true
FactionDamageOtherGang=true
FactionDamageNPC=true
Difficulty=4
ZombieAttractionMultiplier=1.0
PlayerBonusXpMultiplier=1.0
ZombieSkill=1
ZombieMemory=2
ZombieLore=0
ZombiePopulation=0.8
ZombieMaxCount=500
ZombieSpawnerType=0
ZombieRespawn=0
ZombieRespawnHours=72
AllowNonAdminPVP=true
AllowNonAdminMiscItem=true
AllowNonAdminDeleteObject=true
AllowNonAdminWaterShut=true
AllowNonAdminElecShut=true
AllowNonAdminFillWater=true
AllowNonAdminActivateSafehouse=true
AllowNonAdminMechanics=true
AntiCheatProtectionType=1
AnticheatKickFPS=false
BanKnownCheatsAccount=false
BanKnownCheatsCD=false
UserOnlyListenServer=false
EnableMapModsequivalence=true
RestrictRollingCodewords=true
SafetyGlobeUpperLimit=0
MaxItemOnGround=500
ChatStreams=general default faction safehouse admin
ChatStreamFilter=false
DiscordEnable=false
DiscordToken=
DiscordChannelId=
DiscordChannelName=
WorldVersion=2
DeleteUnusedStorage=true
LogItemSpawn=false
LogAnimalSpawn=false
LogVehicleSpawn=false
LogChunkSpawn=false
LogFps=false
LogMemory=false
LogObjectStatisticsFile=false
LogNetworkTraffic=false
LogInput=false
LogGPU=false
LogPreloadedItems=false
LogLagometer=false
RconPort=27015
RconPassword=
RconFilePath=
RconBindIp=0.0.0.0
RconThreads=4
RconSleepMS=10
BlockJoinUntilLoaded=false
SetupPassword=
SpawnMode=0
SpawnPoint=0,0
SafetySeason=0
SafetyYear=1
GenerateMultipleSpawns=true
StartMonth=7
StartDay=9
StartYear=1
StartHour=8
KnownCauseOfDeathFmodBlacklist=
NoFire=false
NoClaimMicromanagement=true
NoBaseDefense=false
NoSafehousesAllowed=false
AllowExtraSenses=true
AllowTradeUI=true
AllowRadio=true
AllowHelicopters=true
AllowSearchMode=true
AllowLootBags=true
AllowVehicles=true
AllowSign=true
AllowFire=true
AllowBoarding=true
AllowLongModNames=false
AllowFactionPVP=true
AllowFactionVehicle=true
AllowMultipleSpawns=true
AllowMovingStash=true
AllowWaterShutOff=true
AllowElecShutOff=true
AllowFillWater=true
AllowActivateSafehouse=true
AllowMechanics=true
AllowResetLua=true
AllowDebugMode=false
AllowInjuryEmote=false
AllowPlayerSafeHouse=true
AllowMapModifications=true
AllowDestructionBySneaking=true
AllowDestructionByOtherPlayers=true
AllowDestructionByFaction=true
AllowPlaceMultipleItemsPerInventorySlot=true
AllowPoliceStationLoot=true
AllowRadioStations=true
AllowRadioChannels=true
AllowSearchModeTag=true
Faction=true
NoFire=false
NoPvp=false
NoClaimMicromanagement=true
NoBaseDefense=false
NoSafehousesAllowed=false
NoWorldAge=false
NoFog=false
NoAnimals=false
OnlyKnownRecipes=false
OnlyKnownSeeds=false
OnlyKnownCompost=false
StartWithSomeMP=true
OneManSlateOfGod=false
SleepAllowed=true
SleepNeeded=true
AllowPlayerVoice=true
AllowTableTalk=true
AllowGlobalModFallback=true
AllowCopVoice=true
AllowRestrainedAttack=true
AllowFactionAttackNonMembers=false
AllowFactionAttackMembers=false
AdminEnableDebugMode=false
AdminTeleport=true
AdminGodMode=true
AdminInvisible=true
AllowAdminPVP=true
AllowAdminWaterShut=true
AllowAdminElecShut=true
AllowAdminFillWater=true
AllowAdminActivateSafehouse=true
AllowAdminMechanics=true
AllowAdminDebugMode=true
AllowAdminResetLua=true
AllowAdminInjuryEmote=false
RestrictDroppingItems=false
RestrictUsingVehicles=false
RestrictRepairing=false
RestrictGatheringSeeds=false
RestrictComposting=false
RestrictFishing=false
RestrictAxes=false
RestrictShovels=false
RestrictChopTrees=false
RestrictDigGraves=false
RestrictRemovingFloor=false
RestrictRemovingWalls=false
RestrictRemovingDoors=false
RestrictRemovingFences=false
RestrictRemovingBars=false
RestrictRemovingWallsOrFloors=false
RestrictStartFires=false
RestrictLightingFires=false
RestrictPuttingOutFires=false
RestrictFirewoodChoppy=false
RestrictPBags=false
RestrictTrapping=false
RestrictMechanics=false
RestrictUsingItems=false
RestrictLootPiles=false
PVPServer=false
VoiceEnable=true
VoiceBufferSize=2000
VoiceMaxDistance=100
VoiceMaxDistanceMult=0.1
VoiceMaxDistanceChat=10
VoiceChatDistance=10
CustomSpawns=false
ErosionDays=0
StartingItems=Base.Axe;Base.WoodenPlank;Base.ModernClothes
AlwaysShowDamagePlayer=false
AlwaysShowDamageNPC=false
AlwaysShowDamageObject=false
AlwaysShowDamageVehicle=false
AuthorizedReadWriteChars=;.,_-+='?!()[]{}*&%^$
[Map]
Map=Muldraugh, KY
[Discord]
DiscordEnable=false
DiscordToken=
DiscordChannelId=
DiscordChannelName=
EOF
Key Configuration Options
- PublicName: Server name visible in browser
- Public: Set to true for public listing, false for private
- Password: Leave empty for public, set password for private
- MaxPlayers: Number of player slots (8-32 typical)
- Mods: Comma-separated mod names (format: ModName;ModName2)
- Map: Starting map location
- Difficulty: 1-4 (higher = harder)
- PVPServer: Enable/disable PvP
- Password: Server password (blank = open)
- RconPort: Remote console port (27015 recommended)
- RconPassword: Admin password for RCON
Step 7: Create Systemd Service
Exit to root and create service:
exit # Exit pzserver user
sudo tee /etc/systemd/system/pzserver.service > /dev/null << 'EOF'
[Unit]
Description=Project Zomboid Dedicated Server
After=network.target
Wants=network-online.target
[Service]
Type=simple
User=pzserver
WorkingDirectory=/home/pzserver/pz-server
ExecStart=/home/pzserver/pz-server/ProjectZomboid64.sh -server
Restart=on-failure
RestartSec=10
StandardOutput=journal
StandardError=journal
Environment="HOME=/home/pzserver"
# Resource limits
MemoryLimit=8G
CPUQuota=300%
[Install]
WantedBy=multi-user.target
EOF
Enable and start:
sudo systemctl daemon-reload
sudo systemctl enable pzserver
sudo systemctl start pzserver
Check status:
sudo systemctl status pzserver
sudo journalctl -u pzserver -f # Follow logs
Step 8: Open Firewall Ports
Project Zomboid uses two UDP ports:
sudo ufw allow 16261/udp comment "Project Zomboid Game"
sudo ufw allow 16262/udp comment "Project Zomboid Secondary"
sudo ufw allow 27015/tcp comment "Project Zomboid RCON"
Or with iptables:
sudo iptables -A INPUT -p udp --dport 16261 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 16262 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 27015 -j ACCEPT
Step 9: Add and Configure Mods
Steam Workshop Integration
Enable Workshop mods by adding to servertest.ini:
WorkshopItems=123456789;987654321
Replace with actual Workshop item IDs. Find IDs on steamcommunity.com.
Manual Mod Installation
Download mods (.zip files) and place in mods directory:
mkdir -p ~/.cache/ProjectZomboid/Zomboid/mods
cd ~/.cache/ProjectZomboid/Zomboid/mods
unzip /path/to/mod.zip
Verify structure (should have mod.info file):
ls -la ~/.cache/ProjectZomboid/Zomboid/mods/YourModName/
Add Mod to Server Config
Edit servertest.ini:
Mods=YourModName;AnotherMod;WorkshopMod
Popular Mods
Server and client mods must match exactly. Ensure all connected players have identical mods installed. Test mods on a test server before production deployment.
Disable mods by removing them from the Mods= line and restarting.
- ORGM (Over-Engineered Roleplay Game Mode) - Advanced RP features
- Faction Tools - Improved faction management
- Better Sorting - Inventory improvements
- Map Extensions - Additional map areas
- Expanded Helicopters - More helicopter types
Step 10: Server Administration
Admin Password Setup
Edit servertest.ini:
SetupPassword=your_setup_password
RconPassword=your_rcon_password
Create Admin Account (In-Game)
Admin Commands
Use in-game console (press `):
/help # List all commands
/ban [player_name] # Ban player
/unban [player_name] # Unban player
/kick [player_name] [reason] # Kick player
/mute [player_name] # Mute player chat
/teleportto [player_name] # Teleport to player
/teleport [x] [y] [z] # Teleport to coordinates
/serverinfo # Show server info
/setadmin [player_name] # Make player admin
/removeadmin [player_name] # Remove admin from player
/adduser [username] # Add whitelisted user
/removeuser [username] # Remove from whitelist
/save # Force save world
/startrain # Start rain
/stoprain # Stop rain
/settime [hour] # Set server time
/zone [x] [y] [z] # Safe zone management
/factions create [name] # Create faction
/factions invite [player] # Invite player to faction
Remote Console (RCON)
Use RCON client or telnet:
telnet tuodominio.com 27015
# Enter RconPassword when prompted
- Join the server as a new player
- Open console: ` key
- Type: /setadmin [username]
- Player becomes admin with full permissions
Step 11: Backup Server Data
Create Backup Script
cat > ~/backup-pz.sh << 'EOF'
#!/bin/bash
BACKUP_DIR=/home/pzserver/backups
WORLD_DIR=/home/pzserver/.cache/ProjectZomboid/Zomboid
mkdir -p $BACKUP_DIR
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
# Stop server gracefully
echo "Saving server state..."
sleep 5
# Backup world
tar -czf $BACKUP_DIR/pz-world-$TIMESTAMP.tar.gz $WORLD_DIR/Saves/
# Keep last 14 backups
find $BACKUP_DIR -name "pz-world-*.tar.gz" -mtime +14 -delete
echo "Backup completed: pz-world-$TIMESTAMP.tar.gz"
EOF
chmod +x ~/backup-pz.sh
Schedule Automated Backups
sudo crontab -e
# Add: 0 3 * * * /home/pzserver/backup-pz.sh
Daily 3 AM backup.
Step 12: Monitor and Manage Server
Check Server Status
sudo systemctl status pzserver
ps aux | grep ProjectZomboid
View Logs
sudo journalctl -u pzserver -f
cat ~/.cache/ProjectZomboid/Zomboid/Server/console.log | tail -100
Monitor Resource Usage
watch -n 2 'ps aux | grep ProjectZomboid64'
free -h
Update Server
sudo systemctl stop pzserver
cd ~/steamcmd
./steamcmd.sh +force_install_dir ~/pz-server +login anonymous \
+app_update 380870 validate +quit
sudo systemctl start pzserver
Always backup world saves before updating. Test updates on a test server if possible. Player count may drop temporarily during major updates.
Step 13: Performance Tuning
RAM Scaling
Monitor with:
htop -p $(pgrep ProjectZomboid64)
Reduce Server Load
- 4 players: 4GB minimum
- 8 players: 6GB recommended
- 16+ players: 8GB+ recommended
- Add 1GB per 4 active mods
- Limit MaxPlayers based on available RAM
- Disable unused mods
- Increase SaveWorldEveryMinutes to reduce disk I/O (300 seconds recommended)
- Monitor CustomSpawns load
Troubleshooting
Server won't start
cd ~/pz-server
./ProjectZomboid64.sh -server
Check for errors in output. Common issues:
High memory usage
Players can't connect
Verify firewall:
sudo netstat -tuln | grep 1626
Ensure Public=true in config and ports are open.
Mod conflicts
Start with core mods only, add mods one at a time, and test between each addition. Check mod compatibility with server version.
- Config file syntax error (check .ini for special characters)
- Port already in use
- Missing mods listed in config
- Reduce MaxPlayers
- Disable problematic mods one by one
- Increase swap space temporarily
- Monitor with top or htop
Windows Server Setup
Step 1: Download Server on Windows
steamcmd +force_install_dir "C:\PZ-Server" +login anonymous +app_update 380870 validate +quit
Step 2: Generate Initial Config
Run the server once to create config files:
cd C:\PZ-Server
ProjectZomboid64.exe -server
Wait 30 seconds, then close. Config files appear in %APPDATA%\Zomboid\Zomboid\Server\.
Step 3: Edit servertest.ini
Edit %APPDATA%\Zomboid\Zomboid\Server\servertest.ini (same settings as Linux guide in Step 6).
Step 4: Create Startup Batch
Create C:\PZ-Server\start-server.bat:
@echo off
cd /d C:\PZ-Server
ProjectZomboid64.exe -server
pause
Step 5: Run as Service (Optional)
# Install NSSM
nssm install PZServer "C:\PZ-Server\ProjectZomboid64.exe" "-server"
nssm start PZServer
Tips & Tweaks
JVM Memory Allocation
Increase heap memory for better performance:
# Linux: Set JVM_OPTS before running
export JVM_OPTS="-Xmx8G -Xms6G"
./ProjectZomboid64.sh -server
# Windows: Create ProjectZomboid64.bat wrapper
@echo off
set JVM_OPTS=-Xmx8G -Xms6G
ProjectZomboid64.exe -server
Guidelines:
Admin Commands Reference
| Command | Purpose |
|---|---|
/ban [username] | Permanent ban |
/unban [username] | Unban |
/kick [username] [reason] | Remove player |
/mute [username] | Mute chat |
/setadmin [username] | Grant admin privileges |
/removeadmin [username] | Revoke admin privileges |
/teleportto [username] | Teleport to player |
/teleport [x] [y] [z] | Teleport to coordinates |
/serverinfo | Show server configuration |
/save | Force save world |
/startrain / /stoprain | Control weather |
/settime [hour] | Set server time |
Mod Load Order and Compatibility
Mods load in order specified in servertest.ini:
Mods=ModName1;ModName2;ModName3;
Best Practices:
Sandbox Settings for Difficulty Tuning
Adjust zombie behavior and progression in servertest.ini:
| Setting | Impact | Recommended |
|---|---|---|
Difficulty | 1-4 (higher = harder) | 2-3 for balanced gameplay |
ZombiePopulation | 0.5-1.0 | 0.8 for moderate challenge |
ZombieSkill | 0-3 | 2 for medium AI difficulty |
ZombieMemory | 0-3 (higher = smarter) | 2 for realistic behavior |
ZombieRespawnHours | 0-168 | 72 for 3-day respawn cycle |
AllowNonAdminPVP | true/false | false for PvE, true for PvP |
- 4 players: -Xmx4G -Xms2G
- 8 players: -Xmx6G -Xms4G
- 16+ players: -Xmx8G -Xms6G
- Core mods first (dependencies like ORGM)
- Gameplay mods next
- Content/decoration mods last
- Test each mod addition individually
- Keep client mods identical to server
Next Steps
- Set up automated Discord notifications for player joins/quits
- Configure backup rotation with offsite storage
- Install additional server management tools
- Plan regular server restarts (weekly recommended)
- Monitor player base growth and adjust hardware accordingly
- Create community rules document and post on Discord
Related articles
CS2
How to install and configure a Counter-Strike 2 dedicated server on Linux VPS with SteamCMD
Palworld
Create a dedicated Palworld server on Linux with SteamCMD. Configuration, ports and automatic startup.
Rust
Install and manage a Rust server (Facepunch) on Linux with SteamCMD. Includes automatic updates, Oxide plugins and optimizations.
