[{"data":1,"prerenderedAt":31},["ShallowReactive",2],{"doc-en-install-mods-project-zomboid-server":3},{"path":4,"slug":5,"title":6,"description":7,"category":8,"subcategory":9,"icon":10,"date":11,"author":12,"order":13,"image":14,"tags":15,"keywords":20,"docGroup":28,"docGroupIcon":28,"link_fr":29,"bodyHtml":30},"\u002Fdocs\u002Fen\u002Fgaming\u002Fproject-zomboid\u002Finstall-mods-project-zomboid-server","install-mods-project-zomboid-server","How to Install Mods on Your Project Zomboid Server","Install Steam Workshop mods on your Winheberg Project Zomboid server, covering Workshop IDs, Mod IDs, load order and custom maps.","jeux","project-zomboid","tabler:file-text","2026-06-03","Winheberg",44,"\u002Fstatics\u002Fimages\u002Fdocs\u002Fen\u002Fgaming\u002Fproject-zomboid\u002Finstall-mods-project-zomboid-server.webp",[9,16,17,18,19],"mods","steam-workshop","server","gaming",[21,22,23,24,25,26,27],"project zomboid mods","project zomboid server","steam workshop","workshop id","mod id","servertest.ini","custom map","","\u002Fdocs\u002Fproject-zomboid\u002Finstaller-mods-serveur-project-zomboid","\u003Ch2>Context\u003C\u002Fh2>\n\u003Cp>Steam Workshop mods are the best way to keep a Project Zomboid world fresh, whether you want new vehicles, new survival mechanics or entire towns to explore. On your \u003Ca href=\"https:\u002F\u002Fwinheberg.com\u002Fen\u002Fgaming\u002Fproject-zomboid\">Winheberg Project Zomboid server\u003C\u002Fa>, the server downloads the mods itself on startup, so you never have to upload them by hand.\u003C\u002Fp>\n\u003Cp>Everything happens in the server&#39;s \u003Ccode>.ini\u003C\u002Fcode> configuration file, where each mod must be declared twice with two different identifiers. This guide shows you where to find those identifiers, how to fill them in and how to add a custom map.\u003C\u002Fp>\n\u003Ch2>Prerequisites\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>An active Project Zomboid server at Winheberg\u003C\u002Fli>\n\u003Cli>Access to the gaming panel \u003Ccode>https:\u002F\u002Fpanel.winheberg.com\u002F\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>The list of mods you want, found on the Project Zomboid Steam Workshop\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cdiv class=\"markdown-alert markdown-alert-warning\">\u003Cspan class=\"alert-icon\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\u003Cpath d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"\u002F>\u003Cline x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"\u002F>\u003Cline x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"\u002F>\u003C\u002Fsvg>\u003C\u002Fspan>\u003Cdiv class=\"markdown-alert-body\">\u003Cp>Before changing an ongoing game, download a copy of your save. A removed or incompatible mod can make some items or areas unusable.\u003C\u002Fp>\n\u003C\u002Fdiv>\u003C\u002Fdiv>\n\u003Ch2>1. Understand the two identifiers of a mod\u003C\u002Fh2>\n\u003Cp>Project Zomboid uses two identifiers for every Workshop mod, and both are required.\u003C\u002Fp>\n\u003Cdiv class=\"md-table md-table--info md-table--striped\">\u003Cdiv class=\"md-table__caption\">Mod identifiers\u003C\u002Fdiv>\u003Cdiv class=\"md-table__scroll\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Identifier\u003C\u002Fth>\n\u003Cth>Role\u003C\u002Fth>\n\u003Cth>Format\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Cstrong>Workshop ID\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>Tells the server what to download from Steam\u003C\u002Ftd>\n\u003Ctd>A string of digits, for example \u003Ccode>2875848298\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Mod ID\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>Tells the game which mod to load in the world\u003C\u002Ftd>\n\u003Ctd>A name without spaces, set by the mod author\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003C\u002Fdiv>\u003C\u002Fdiv>\n\u003Cdiv class=\"markdown-alert markdown-alert-important\">\u003Cspan class=\"alert-icon\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\u003Cpath d=\"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10z\"\u002F>\u003Cpath d=\"M12 8v4\"\u002F>\u003Cpath d=\"M12 16h.01\"\u002F>\u003C\u002Fsvg>\u003C\u002Fspan>\u003Cdiv class=\"markdown-alert-body\">\u003Cp>A single Workshop page can hold several Mod IDs, for example a full and a lite version. Only enable the one you want, two variants of the same mod usually conflict.\u003C\u002Fp>\n\u003C\u002Fdiv>\u003C\u002Fdiv>\n\u003Ch2>2. Get the identifiers\u003C\u002Fh2>\n\u003Cp>Open the mod&#39;s page on the Steam Workshop. The \u003Cstrong>Workshop ID\u003C\u002Fstrong> is the number after \u003Ccode>?id=\u003C\u002Fcode> in the page address.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">https:\u002F\u002Fsteamcommunity.com\u002Fsharedfiles\u002Ffiledetails\u002F?id=2875848298\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>The \u003Cstrong>Mod ID\u003C\u002Fstrong> is given by the author in the description, usually at the very bottom of the page, often next to the Workshop ID.\u003C\u002Fp>\n\u003Cimg src=\"\u002Fstatics\u002Fimages\u002Fdocs\u002Fen\u002Fgaming\u002Fproject-zomboid\u002Finstall-mods-project-zomboid-server-1793568879817-c037566dec3c4650bff8d2f9.webp\" alt=\"Workshop ID and Mod ID at the bottom of a Project Zomboid Steam Workshop page\" width=\"420\" \u002F>\n\n\u003Cp>Also note any required mods, listed in the \u003Cstrong>Required items\u003C\u002Fstrong> box of the page, as they must be installed too.\u003C\u002Fp>\n\u003Cdiv class=\"markdown-alert markdown-alert-tip\">\u003Cspan class=\"alert-icon\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath d=\"M12 16v-4\"\u002F>\u003Cpath d=\"M12 8h.01\"\u002F>\u003C\u002Fsvg>\u003C\u002Fspan>\u003Cdiv class=\"markdown-alert-body\">\u003Cp>Keep a list with the Workshop ID and Mod ID of each mod. You will use it every time you add or remove a mod, and it makes troubleshooting much easier.\u003C\u002Fp>\n\u003C\u002Fdiv>\u003C\u002Fdiv>\n\u003Ch2>3. Open the configuration file\u003C\u002Fh2>\n\u003Col>\n\u003Cli>Log in to the gaming panel and select your server.\u003C\u002Fli>\n\u003Cli>Stop the server with the \u003Cstrong>Stop\u003C\u002Fstrong> button, so it does not overwrite your changes when it shuts down later.\u003C\u002Fli>\n\u003Cli>Open the \u003Cstrong>Files\u003C\u002Fstrong> tab and go to the \u003Ccode>.cache\u002FServer\u002F\u003C\u002Fcode> folder.\u003C\u002Fli>\n\u003Cli>Click the \u003Ccode>.ini\u003C\u002Fcode> file named after your server, \u003Ccode>Pterodactyl.ini\u003C\u002Fcode> by default.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cimg src=\"\u002Fstatics\u002Fimages\u002Fdocs\u002Fen\u002Fgaming\u002Fproject-zomboid\u002Finstall-mods-project-zomboid-server-1793569026815-154aaef00d9c140f298844e0.webp\" alt=\"Pterodactyl.ini file in the .cache\u002FServer folder of the Files tab\" width=\"790\" \u002F>\n\n\u003Cp>This file name matches the \u003Cstrong>SERVER NAME\u003C\u002Fstrong> variable in the \u003Cstrong>Startup\u003C\u002Fstrong> tab. If you change that variable, the server creates a new blank \u003Ccode>.ini\u003C\u002Fcode> file and a new world.\u003C\u002Fp>\n\u003Cimg src=\"\u002Fstatics\u002Fimages\u002Fdocs\u002Fen\u002Fgaming\u002Fproject-zomboid\u002Finstall-mods-project-zomboid-server-1793568955280-9c6a9f61cde5849ca32bc096.webp\" alt=\"SERVER NAME variable in the Startup tab of the gaming panel\" width=\"790\" \u002F>\n\n\u003Cdiv class=\"markdown-alert markdown-alert-note\">\u003Cspan class=\"alert-icon\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cline x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"\u002F>\u003Cline x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"\u002F>\u003C\u002Fsvg>\u003C\u002Fspan>\u003Cdiv class=\"markdown-alert-body\">\u003Cp>For more comfortable editing, you can also use an SFTP client, as explained in our guide \u003Ca href=\"https:\u002F\u002Fwinheberg.com\u002Fen\u002Fdocs\u002Fpanel-gaming\u002Fsftp-gaming-server\">How to Connect to Your Gaming Server via SFTP\u003C\u002Fa>.\u003C\u002Fp>\n\u003C\u002Fdiv>\u003C\u002Fdiv>\n\u003Ch2>4. Declare the mods\u003C\u002Fh2>\n\u003Cp>Find the \u003Ccode>Mods=\u003C\u002Fcode> line, near the top of the file, and add the Mod IDs separated by semicolons with no spaces.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-ini\">Mods=RequiredMod;MainMod;OtherMod\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cimg src=\"\u002Fstatics\u002Fimages\u002Fdocs\u002Fen\u002Fgaming\u002Fproject-zomboid\u002Finstall-mods-project-zomboid-server-1793569103170-baf1be323f9ca745915b11a2.webp\" alt=\"Mods and Map lines in Pterodactyl.ini and the Save Content button\" width=\"790\" \u002F>\n\n\u003Cp>Then scroll down to the \u003Ccode>WorkshopItems=\u003C\u002Fcode> line, further in the file, and add the matching Workshop IDs with the same syntax.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-ini\">WorkshopItems=1111111111;2222222222;3333333333\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cimg src=\"\u002Fstatics\u002Fimages\u002Fdocs\u002Fen\u002Fgaming\u002Fproject-zomboid\u002Finstall-mods-project-zomboid-server-1793568955650-f290d90f7ca80794b84ed370.webp\" alt=\"WorkshopItems line in the Pterodactyl.ini file\" width=\"790\" \u002F>\n\n\u003Cp>A mod listed in \u003Ccode>WorkshopItems=\u003C\u002Fcode> but missing from \u003Ccode>Mods=\u003C\u002Fcode> is downloaded but never loaded, and a Mod ID without its Workshop ID will never be found by the server.\u003C\u002Fp>\n\u003Cdiv class=\"markdown-alert markdown-alert-warning\">\u003Cspan class=\"alert-icon\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\u003Cpath d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"\u002F>\u003Cline x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"\u002F>\u003Cline x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"\u002F>\u003C\u002Fsvg>\u003C\u002Fspan>\u003Cdiv class=\"markdown-alert-body\">\u003Cp>Order matters in the \u003Ccode>Mods=\u003C\u002Fcode> line. A mod required by another one (a shared library, for example) must come before the mods that depend on it.\u003C\u002Fp>\n\u003C\u002Fdiv>\u003C\u002Fdiv>\n\u003Cdiv class=\"markdown-alert markdown-alert-note\">\u003Cspan class=\"alert-icon\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cline x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"\u002F>\u003Cline x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"\u002F>\u003C\u002Fsvg>\u003C\u002Fspan>\u003Cdiv class=\"markdown-alert-body\">\u003Cp>Some early Build 42 multiplayer versions expected a backslash before each Mod ID (\u003Ccode>Mods=\\ModA;\\ModB\u003C\u002Fcode>). On version 42.21 installed by our panel, the plain syntax above works.\u003C\u002Fp>\n\u003C\u002Fdiv>\u003C\u002Fdiv>\n\u003Ch2>5. Add a custom map\u003C\u002Fh2>\n\u003Cp>Map mods need one more step. Right below \u003Ccode>Mods=\u003C\u002Fcode>, find the \u003Ccode>Map=\u003C\u002Fcode> line and add the map folder name, given by its author, at the start of the list. \u003Ccode>Muldraugh, KY\u003C\u002Fcode>, the base map, must always stay last.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-ini\">Map=MapName;Muldraugh, KY\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>The map must of course also be declared in \u003Ccode>WorkshopItems=\u003C\u002Fcode> and \u003Ccode>Mods=\u003C\u002Fcode>, like any other mod.\u003C\u002Fp>\n\u003Cdiv class=\"markdown-alert markdown-alert-caution\">\u003Cspan class=\"alert-icon\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cline x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"\u002F>\u003Cline x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"\u002F>\u003C\u002Fsvg>\u003C\u002Fspan>\u003Cdiv class=\"markdown-alert-body\">\u003Cp>On an ongoing game, areas players have already explored are saved and are not regenerated. A map added in those places may not appear or may look inconsistent. For a large map, starting a new world remains the most reliable option.\u003C\u002Fp>\n\u003C\u002Fdiv>\u003C\u002Fdiv>\n\u003Ch2>6. Save and restart\u003C\u002Fh2>\n\u003Cp>Click \u003Cstrong>Save Content\u003C\u002Fstrong> to save the file, then start the server with the \u003Cstrong>Start\u003C\u002Fstrong> button. Watch the \u003Cstrong>Console\u003C\u002Fstrong> tab during startup, the server shows the download progress of each mod there.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">Workshop: item state CheckItemState -&gt; DownloadPending ID=2875848298\nWorkshop: download 1136\u002F2411360 ID=2875848298\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>The first startup takes longer than usual, depending on the number and size of the mods. The server is ready when the console shows \u003Ccode>*** SERVER STARTED ****\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>When players connect, their game automatically downloads the mods required by the server from the Workshop.\u003C\u002Fp>\n\u003Cdiv class=\"markdown-alert markdown-alert-tip\">\u003Cspan class=\"alert-icon\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath d=\"M12 16v-4\"\u002F>\u003Cpath d=\"M12 8h.01\"\u002F>\u003C\u002Fsvg>\u003C\u002Fspan>\u003Cdiv class=\"markdown-alert-body\">\u003Cp>When an author updates a mod, restart the server so it fetches the new version. Until you do, players who already have the new version may be refused on connection because of a version mismatch.\u003C\u002Fp>\n\u003C\u002Fdiv>\u003C\u002Fdiv>\n\u003Ch2>Troubleshooting\u003C\u002Fh2>\n\u003Ch3>❌ The server stops on startup after adding a mod\u003C\u002Fh3>\n\u003Cp>A mod that is not up to date for your game version can block world loading. The console then shows this message, followed by \u003Ccode>Server Terminated.\u003C\u002Fcode>\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">zombie.world.WorldDictionaryException: World loading could not proceed, there are script load errors.\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cimg src=\"\u002Fstatics\u002Fimages\u002Fdocs\u002Fen\u002Fgaming\u002Fproject-zomboid\u002Finstall-mods-project-zomboid-server-1793569176206-5165e31bcecf68d0ee8c1b09.webp\" alt=\"WorldDictionaryException error in the console after adding an incompatible mod\" width=\"676\" \u002F>\n\n\u003Cul>\n\u003Cli>Scroll up in the console, the real error is printed earlier, often with the mod name in brackets, for example \u003Ccode>Lua((MOD:Mod name))\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>Remove that mod from \u003Ccode>Mods=\u003C\u002Fcode> and \u003Ccode>WorkshopItems=\u003C\u002Fcode>, then restart to confirm it is the cause.\u003C\u002Fli>\n\u003Cli>Check on its Workshop page that it supports Build 42 and read the recent comments.\u003C\u002Fli>\n\u003Cli>Make sure every required mod is installed and placed earlier in \u003Ccode>Mods=\u003C\u002Fcode>.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>❌ The mod is downloaded but does not show up in game\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>Check that its Mod ID is in the \u003Ccode>Mods=\u003C\u002Fcode> line, with exactly the same case.\u003C\u002Fli>\n\u003Cli>Make sure you copied the Mod ID and not the title shown on the Workshop page.\u003C\u002Fli>\n\u003Cli>Confirm you edited the \u003Ccode>.ini\u003C\u002Fcode> file matching the \u003Cstrong>SERVER NAME\u003C\u002Fstrong> variable.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>❌ Players cannot connect after a mod update\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>Restart the server so it downloads the latest version of the mod.\u003C\u002Fli>\n\u003Cli>Ask the affected players to restart their game to force a sync with the Workshop.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>Best practices\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>Add mods in small batches and restart between each batch, an issue is then much easier to pinpoint.\u003C\u002Fli>\n\u003Cli>Back up your world before every mod change.\u003C\u002Fli>\n\u003Cli>Avoid removing a mod mid-game, the items and buildings it added may disappear or cause errors.\u003C\u002Fli>\n\u003Cli>Read the recent comments on the Workshop page, they often flag incompatibilities and mods broken by a game update.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>Need help?\u003C\u002Fh2>\n\u003Cp>If a mod still refuses to load after these checks, our team can help. Open a ticket from your client area \u003Ccode>https:\u002F\u002Fbilling.winheberg.com\u003C\u002Fcode> with the \u003Cstrong>Technical\u003C\u002Fstrong> department, select your server in the \u003Cstrong>Related Product\u003C\u002Fstrong> field and attach your mod list.\u003C\u002Fp>\n\u003Cp>Enjoy surviving Knox County with your new mods 🎮\u003C\u002Fp>\n",1794353874953]