Guide · Project Zomboid

Project Zomboid mods not loading in multiplayer

The server boots, the mods are not there, or a friend gets kicked for a mismatch. Five causes, measured on a real Build 42 server, and the fix for each.

27 September 2026

You wrote both lines into the ini, restarted, the console says *** SERVER STARTED **** — and the game is vanilla. Or it works for you and a friend gets thrown out on join. Same problem, five different causes, and the annoying part is that Zomboid tells you almost nothing about which one you hit.

We broke a Build 42 server on purpose, four ways, and did it again a month later to be sure, to see what each mistake looks like in the log. This is what we found, in the order you should check:

  1. Commas instead of semicolons
  2. The mod id is not what you think
  3. A Build 41 mod on a Build 42 server
  4. A workshop id that does not exist
  5. It works for you, not for a friend

Not sure where the mods even go? Start here.

Where the mods are set, and the two ids

Your server's settings are one file:

%USERPROFILE%\Zomboid\Server\<servername>.ini

Two lines in it are the whole modpack:

WorkshopItems=3750253491;2875848298
Mods=\VB_CommonSense;\AnotherMod

WorkshopItems= is what Steam downloads when the server starts. Mods= is what the game actually activates, and the order of that line is the load order.

Those are two different kinds of id, and mixing them up is the first thing to rule out. The workshop item id is the number in the item's URL (?id=3750253491). The mod id is a name the author chose, and the truth about it lives inside the downloaded item:

<server>\steamapps\workshop\content\108600\<item-id>\mods\<Name>\common\mod.info

The id= line in that file is the mod id. Most authors also paste a Mod ID: line into the workshop description. That is a hint, not the truth — authors update the mod and forget the description.

One item can hold several mods, each with its own id. On Build 42 you will see mod references written with a backslash in front (Mods=\VB_CommonSense) — that is the game's own spelling, and it loads with or without it. We tried both, on the same server, in the same line.

Cause 1: commas instead of semicolons

Every guide says "semicolons, not commas", nobody says what a comma actually does. We measured it:

  • A comma in Mods= turns the whole line into one mod id. The log shows exactly one line, required mod "VB_CommonSense,tsarslib" not found, and the server boots happily with no mods at all.
  • A comma in WorkshopItems= leaves no trace whatsoever. Not one Workshop: line in the entire log. Nothing is downloaded and nothing says so.

Fix: semicolons, no spaces around them, no trailing junk.

Cause 2: the mod id is not what you think

A mistyped mod id produces the same one line as the comma: required mod "<what you wrote>" not found. Open the item's mod.info (path above) and copy the id= value. Check the case, too. Don't trust the workshop description if the two disagree.

Cause 3: a Build 41 mod on a Build 42 server

This is the one that wastes evenings, because it looks like it worked. The item downloads fine — the log even says installed to <path> — and then the server says required mod "<id>" not found, the exact same line as a typo, and boots without it.

In the log the two cases are identical. On disk they are not:

  • A Build 42 mod has mods\<Name>\common\ and/or a version folder such as 42\ or 42.0\ — we have seen all three shapes.
  • A Build 41-only mod has mods\<Name>\media\ directly, nothing else.

The Build 41 / Build 42 tags on the workshop page are what the author claimed, in both directions. We have seen an item tagged for both, its Build 42 successor tagged for 42 only, and a library tagged for 41 only — and the tags were right in those three cases, but they are a claim, not a test.

Fix: find the mod's Build 42 version (often a separate workshop item), or drop it. The legacy41 beta branch runs Build 41 if the whole group would rather go back — with the warning that Build 41 and Build 42 saves are not compatible with each other.

Cause 4: a workshop id that does not exist

The loud one, and the one that hides all the others. A wrong item id — a typo, a deleted item, a private one — gives you:

Workshop: onItemNotDownloaded itemID=999999999999 result=9
… DownloadPending -> Fail

and the server kills its own boot, exit code 1, before it ever gets to loading mods. result=9 is Steam's "file not found". So if the server dies before SERVER STARTED, check the workshop stage first; mod errors never get a chance to show up behind it.

Cause 5: it works for you, not for a friend

The server does the downloading; joining players are asked by the game to fetch the server's items before they get in. Two things go wrong with that regularly:

  • The friend's list is not the server's list. They subscribed to the mods themselves weeks ago and still have an older copy, or they said no to the download prompt. Unsubscribe, let the prompt download, join again.
  • Load order. Mods= is the order things load in. A library has to come before the mods that need it. If the server boots with a mod "not found" that is definitely there, look at what it requires and move that in front.

How to read the log without going mad

The console output is also written to %USERPROFILE%\Zomboid\server-console.txt, so you can read it after the fact. Do not look for ERROR. A perfectly healthy modded boot spews ERROR lines — missing optional folders like media/AnimSets, world-gen noise. The lines that mean something:

Stage The line that says it worked
Download … -> Ready ID=<item-id> per item
Activation > loading <mod-id> per mod
Up *** SERVER STARTED ****

A mod without its own loading <id> line did not load, even if nothing complained. Absence is the failure.

The checklist

  1. Semicolons in both lines.
  2. Mod ids from mod.info, not from memory.
  3. Every mod has a common\ or 42.x\ folder (Build 42) — or you are on legacy41.
  4. No result=9 in the log.
  5. Libraries before the mods that need them.
  6. Friends: unsubscribe locally, take the server's download prompt.

Or let the app do it

Everything above is the part Game Hangout takes off your hands. The mod list sits on the server card in the app and is shared with everyone in the session — nobody copies ids, nobody opens an ini, and a comma cannot get in. Before the server goes live, the app starts a throwaway copy of it with your list and puts the result on the card in plain words: which mods loaded, which item does not exist, which one is a Build 41 mod on a Build 42 server. You press one button and read one sentence instead of a log.

Then somebody hosts, friends join from the app with the same list, no port forwarding, and the world follows whoever starts next. Windows only, and the host downloads the 6.7 GB of server files once.

More on Project Zomboid

Get your evenings back

Every release is signed, and the app keeps itself up to date from then on.

Download for Windows

Release notes