How to Add a Workshop Collection to a Project Zomboid Server
Turn a Steam Workshop collection into Project Zomboid server mods: get every Workshop ID and Mod ID, the Build 42 Mods format, and the sub mods to leave out.
Updated Oct 3, 2026 · 6 min read
On this page
A Project Zomboid server cannot load a Steam Workshop collection by its link. You turn the collection into two lists: every item's Workshop ID goes in WorkshopItems= and every Mod ID you want on goes in Mods= in <servername>.ini, with a backslash before each on Build 42 (Mods=\ModA;\ModB). Map mods also go in Map=, before Muldraugh, KY. The free Steam Web API returns the collection's Workshop IDs in one call. The Mod IDs come from each item's page, and many items hold several.
What you are working with
| What | Where it comes from | Goes in |
|---|---|---|
| Collection ID | The number at the end of the collection's URL, ?id=... |
Nowhere on the server. Only used to look up its items |
| Workshop ID | One per item in the collection | WorkshopItems=, all of them |
| Mod ID | Listed at the bottom of each item's description, or the id= line in its mod.info |
Mods=, only the ones you want switched on |
| Map Folder | Listed on map mod pages | Map= |
The server downloads everything in WorkshopItems=, but only switches on what is in Mods=. That split is what makes collections tricky: an item can contain one Mod ID, or seven.

The gotcha: one Workshop item, several Mod IDs
Collections are lists of Workshop items, not mods. Many items ship a main mod plus optional variants inside one download. Real examples from a public Build 42 collection, read through the Steam API:
| Workshop item | Mod IDs inside it |
|---|---|
Vanilla vehicles animated (3281755175) |
VanillaVehiclesAnimated, VanillaVehiclesAnimated_SVU, VVA_cullseats, VVA_PikamyDelight, VVA_slowdoors, VVA_snapDoors, VVA_transparentWindows |
'69 Mini Mk2 (2937786633) |
69mini, 69mini_ItalianJob, 69mini_MrBean, 69mini_PitbullSpecial |
Common Sense [B42.20+] (3750253491) |
VB_CommonSense |
Copying every Mod ID turns on every optional variant, and not all of them are meant to run together. Read the item page and pick the ones you want. Watch for look alikes too: the original Common Sense item (2875848298) uses the Mod ID BB_CommonSense, while the item labelled [B42.20+] uses VB_CommonSense. Same name, different items, different IDs. Older collections often point at items that have no Build 42 version and do not load on a Build 42 server.
Before you start
- Check the collection's build. On a Build 42 server, every item needs a Build 42 version. A collection titled for B41 is a warning sign.
- Back up the server, and the save if it is an existing world. Adding mods mid world is usually fine, removing them is not.
- Keep the list sane. Big collections, with hundreds of items, mean long joins and more things that break after each Workshop update.
Step 1: Get the Workshop IDs and Mod IDs (Windows script)
Steam's GetCollectionDetails and GetPublishedFileDetails calls are public and need no API key, as documented in the Steamworks Web API reference. This PowerShell script lists every item with the Mod IDs written in its description, then prints a ready WorkshopItems= line. Change the number on the first line to your collection's ID:
$collection = '3721168589'
$api = 'https://api.steampowered.com/ISteamRemoteStorage'
$c = Invoke-RestMethod -Method Post -Uri "$api/GetCollectionDetails/v1/" -Body @{ collectioncount = 1; 'publishedfileids[0]' = $collection }
$ids = @($c.response.collectiondetails[0].children | ForEach-Object { $_.publishedfileid })
$body = @{ itemcount = $ids.Count }
for ($i = 0; $i -lt $ids.Count; $i++) { $body["publishedfileids[$i]"] = $ids[$i] }
$items = (Invoke-RestMethod -Method Post -Uri "$api/GetPublishedFileDetails/v1/" -Body $body).response.publishedfiledetails
$items | ForEach-Object {
$mods = [regex]::Matches($_.description, '(?im)^\s*Mod ?ID:\s*(.+?)\s*#39;) | ForEach-Object { $_.Groups[1].Value } | Select-Object -Unique
[pscustomobject]@{ Workshop = $_.publishedfileid; Title = $_.title; ModIDs = ($mods -join ', ') }
} | Format-Table -AutoSize -Wrap
'WorkshopItems=' + ($ids -join ';')
Items whose description has no Mod ID: line show an empty column. For those, open the item page, or subscribe and look at the id= line in its mod.info. If the collection contains other collections, run the script on those too.
Step 2: Choose the Mod IDs and put them in order
From the table, keep the main Mod ID of each item and only the variants you want. Then order them, because the server loads Mods= left to right:
- Libraries and frameworks other mods list under "Required items".
- Tile packs, then maps.
- Big content mods, like vehicle packs.
- Tweaks and patches, after the mods they change.
The collection's order is just how its author sorted it, not a load order.
Step 3: Write the ini lines
Stop the server and open Zomboid/Server/<servername>.ini (servertest.ini by default):
WorkshopItems=3281755175;3750253491;2937786633
Mods=\VB_CommonSense;\VanillaVehiclesAnimated;\69mini
Map=Muldraugh, KY
| Build | Mods= format |
|---|---|
| Build 42 | Backslash before every Mod ID: \ModA;\ModB |
| Build 41 | Plain: ModA;ModB |
If the collection has map mods, put each Map Folder at the front of Map= and leave Muldraugh, KY last. See how to add map mods to a Project Zomboid server.
Step 4: Start and check the log
Start the server and read the console as it downloads. The first start with a big list takes a while. Then join: players do not need to subscribe to the collection, the game downloads exactly what the server lists.
Common problems
- Mods download but do nothing: their Mod IDs are missing from
Mods=, or the Build 42 backslashes are missing. - Crash or errors on start: a Build 41 only item, two variants that conflict, or a required item not in the collection. Remove half the list and narrow it down.
- An item fails to download: it was removed or hidden by its author. The script's table shows no title for it. Drop it from
WorkshopItems=. - Players stuck joining after an update: a mod updated while the server ran. Restart. See the version mismatch fix.
- The author adds mods to the collection later: your server does not follow. Run the script again and add the new IDs.
Collections on GamezServers
On a Project Zomboid server from GamezServers, paste the WorkshopItems list into Workshop IDs and your chosen Mod IDs into Mod IDs in Settings, plain, separated by semicolons or commas: we add the Build 42 backslash for you. Map folders go in Map. Click Backup, then Restart, and use Check mod updates when players cannot join after a Workshop update. Big collections run best on the 12 GB plan.
FAQ
Can I just paste a Steam collection link into the server?
No. Project Zomboid servers need each item's Workshop ID and Mod ID listed in the ini or panel. A collection link is not read.
How do I get all Workshop IDs from a collection?
Use Steam's public GetCollectionDetails API, for example with the PowerShell script above. It returns every item's ID in one call, no API key needed.
Should I enable every Mod ID in a Workshop item?
No. Many items include optional variants. Enable the main mod and only the variants you want.
Do players need to subscribe to the collection?
No. When they join, the game downloads the mods the server lists, as long as they are on the same build.
Skip the setup. Your own Zomboid server.
Then $14.99/mo. Just trying it? $3.75 for 3 days