Project Zomboid server tools
Project Zomboid Server Config Generator
Build both files a Project Zomboid dedicated server needs: the SandboxVars.lua that controls zombies, loot and the world, and the .ini that controls slots, PvP, ports, mods and safehouses. Pick a playstyle, adjust anything, then copy or download.
Build 42 writes schema VERSION 6, uses the float loot multipliers, the MultiplierConfig XP table and the Basement settings.
Both file names come from this. You will save them as servertest.ini and servertest_SandboxVars.lua. It has to match the -servername your server starts with, which is servertest by default.
Playstyle presets
The game's own playstyles, value for value from the vanilla files. Load one, then change whatever you like.
Gameplay: SandboxVars.lua
Overall population band. Apocalypse and Outbreak use Normal, Extinction High, Rising Low.
Urban Focused packs zombies into towns, Uniform spreads them evenly.
Build 42 respawn band. The playstyles use 4 (Apocalypse and Outbreak), 3 (Rising) and 2 (Extinction).
Lets zombies drift into emptied parts of the map over time.
The real population dial. Apocalypse 0.65, Rising 0.15, Extinction 1.2.
Population on day one, before it ramps towards the peak.
Population at the peak day. 1.5 is half again as many zombies.
In-game day the population peaks.
Hours before zombies may respawn in a cell. Apocalypse and Outbreak ship this at 0, which disables respawning completely.
A chunk must go unseen this long before zombies respawn in it.
Fraction of a cell's target population that comes back each cycle.
Hours before zombies migrate within a cell. 0 disables it.
How far a zombie walks towards the last noise it heard. Extinction doubles it to 200.
Size of the idle groups zombies form. 0 stops them grouping up.
Server: .ini
Name shown in the in-game server browser. This is not the file name, that comes from the Server name field at the top.
Short blurb in the browser listing.
Advertise the server in the in-game public list.
Off locks the server to accounts that already exist.
Leave blank for none. A password plus a public listing means people can find you but not walk in.
Shown in chat on join. Use <LINE> for a line break.
Checks
SandboxVars = {
VERSION = 6,
Zombies = 4,
Distribution = 1,
ZombieRespawn = 4,
ZombieMigrate = true,
DayLength = 4,
StartMonth = 7,
StartDay = 9,
StartTime = 2,
TimeSinceApo = 1,
NightDarkness = 3,
NightLength = 3,
WaterShut = 2,
ElecShut = 2,
WaterShutModifier = 14,
ElecShutModifier = 14,
Alarm = 4,
LockedHouses = 6,
Temperature = 3,
Rain = 3,
ErosionSpeed = 4,
FireSpread = true,
GeneratorSpawning = 4,
GeneratorFuelConsumption = 0.1,
AllowExteriorGenerator = true,
SurvivorHouseChance = 3,
VehicleStoryChance = 3,
ZoneStoryChance = 3,
AnnotatedMapChance = 4,
HoursForCorpseRemoval = 216.0,
BloodSplatLifespanDays = 0,
AnimalSoundAttractZombies = true,
AnimalMetaPredator = false,
AnimalMatingSeason = true,
FoodLootNew = 0.8,
CannedFoodLootNew = 0.6,
LiteratureLootNew = 0.6,
SkillBookLoot = 0.6,
RecipeResourceLoot = 0.6,
MedicalLootNew = 0.6,
SurvivalGearsLootNew = 0.6,
WeaponLootNew = 0.6,
RangedWeaponLootNew = 1.2,
AmmoLootNew = 0.6,
MechanicsLootNew = 0.6,
OtherLootNew = 0.8,
ClothingLootNew = 0.6,
ContainerLootNew = 0.6,
KeyLootNew = 0.4,
MediaLootNew = 0.6,
CookwareLootNew = 0.6,
MaterialLootNew = 0.6,
FarmingLootNew = 0.6,
ToolLootNew = 0.6,
RollsMultiplier = 1.0,
ZombiePopLootEffect = 0,
HoursForLootRespawn = 0,
MaxItemsForLootRespawn = 5,
ConstructionPreventsLootRespawn = true,
SeenHoursPreventLootRespawn = 0,
MaximumLooted = 25,
DaysUntilMaximumLooted = 90,
WorldItemRemovalList = "Base.Hat, Base.Glasses, Base.Maggots, Base.Slug, Base.Slug2, Base.Snail, Base.Worm, Base.Dung_Mouse, Base.Dung_Rat",
HoursForWorldItemRemoval = 24.0,
DaysForRottenFoodRemoval = -1,
StatsDecrease = 3,
EndRegen = 3,
Nutrition = true,
StarterKit = false,
CharacterFreePoints = 0,
ConstructionBonusPoints = 3,
InjurySeverity = 2,
BoneFracture = true,
ClothingDegradation = 3,
RearVulnerability = 3,
MultiHitZombies = false,
AttackBlockMovements = true,
AllClothesUnlocked = false,
MuscleStrainFactor = 0.7,
DiscomfortFactor = 0.8,
EasyClimbing = false,
FoodRotSpeed = 3,
FridgeFactor = 3,
Farming = 3,
FarmingSpeedNew = 1.0,
FarmingAmountNew = 1.0,
PlantResilience = 3,
PlantAbundance = 3,
NatureAbundance = 3,
CompostTime = 2,
MinutesPerPage = 2.0,
LightBulbLifespan = 2.0,
EnableVehicles = true,
VehicleEasyUse = false,
ZombieAttractionMultiplier = 1.0,
CarSpawnRate = 3,
InitialGas = 2,
ChanceHasGas = 2,
FuelStationGasMin = 0.0,
FuelStationGasMax = 0.8,
FuelStationGasInfinite = false,
FuelStationGasEmptyChance = 20,
LockedCar = 4,
CarGasConsumption = 1.0,
CarGeneralCondition = 3,
CarDamageOnImpact = 3,
DamageToPlayerFromHitByACar = 1,
CarAlarm = 3,
TrafficJam = true,
PlayerDamageFromCrash = true,
Basement = {
SpawnFrequency = 4,
},
Map = {
AllowMiniMap = false,
AllowWorldMap = true,
MapAllKnown = false,
MapNeedsLight = true,
},
ZombieLore = {
Speed = 4,
SprinterPercentage = 0,
Strength = 2,
Toughness = 4,
Transmission = 1,
Mortality = 5,
Reanimate = 3,
Cognition = 3,
DoorOpeningPercentage = 0,
CrawlUnderVehicle = 5,
Memory = 2,
Sight = 5,
Hearing = 5,
ThumpNoChasing = false,
ThumpOnConstruction = true,
ActiveOnly = 1,
TriggerHouseAlarm = true,
ZombiesDragDown = true,
ZombiesCrawlersDragDown = false,
ZombiesFenceLunge = true,
DisableFakeDead = 1,
},
ZombieConfig = {
PopulationMultiplier = 0.65,
PopulationStartMultiplier = 1.0,
PopulationPeakMultiplier = 1.5,
PopulationPeakDay = 28,
RespawnHours = 0.0,
RespawnUnseenHours = 0.0,
RespawnMultiplier = 0.0,
RedistributeHours = 12.0,
FollowSoundDistance = 100,
RallyGroupSize = 20,
},
MultiplierConfig = {
Global = 1.0,
GlobalToggle = true,
},
}
Stop the server, upload both files to Zomboid/Server (on Windows that is C:\Users\your-username\Zomboid\Server), then start it again. A running server rewrites these files on shutdown and would overwrite your changes.
Only the settings this tool manages are written. Anything else keeps the server's own default, so these files are safe to drop in as they are.
How the two files fit together
A Project Zomboid dedicated server reads two files named after your server. The .ini is the server itself: how many slots, whether PvP is on, which ports it binds, which mods it loads, how safehouses work. The SandboxVars.lua is the world: how many zombies, how fast they are, how rare loot is, how long a day lasts, when the power and water cut out.
Changing the .ini is safe at any time. Changing SandboxVars.lua after the world has generated is not always: population, loot rates and infection settings apply straight away, but the start date, months since the apocalypse and anything that shaped the map at generation are already baked into the save. Decide those before your players start building.
Build 42 reworked the file. Loot rarity became a set of float multipliers, XpMultiplier became the MultiplierConfig table, several keys moved out of the .ini into SandboxVars, and the schema version went from 5 to 6. Pick the matching build at the top of the page, because a Build 41 file dropped onto a Build 42 server silently loses those settings.