To add Workshop addons to a Garry's Mod server, put them in a Steam Workshop collection. Start the server with +host_workshop_collection and the collection's ID. Then list the addons players must download with resource.AddWorkshop in a server Lua file.
Two Separate Jobs
Installing an addon on the server and sending it to players are two different steps.
+host_workshop_collectiondownloads addons onto the server and mounts them.resource.AddWorkshoptells players to download an addon when they join.
Lua files are different. Garry's Mod sends the Lua from your addons to every player by its own route, with no setup. You only need resource.AddWorkshop for content: models, materials, sounds and maps.
Make a Workshop Collection
Create the Collection
Open the Garry's Mod Workshop on Steam, go to Collections and create a new one. Add every addon your server runs.
Set It to Public or Unlisted
The server can't read a private collection. Set its visibility to Public or Unlisted.
Copy the ID
The ID is the number at the end of the collection's address:
https://steamcommunity.com/sharedfiles/filedetails/?id=123456789Here the ID is 123456789.
A collection can contain other collections. The server downloads every collection inside it as well.
Install the Collection on the Server
Add the ID to your start script:
+host_workshop_collection 123456789A full Windows start line looks like this:
srcds_win64.exe -console -game garrysmod +maxplayers 32 +host_workshop_collection 123456789 +gamemode sandbox +map gm_construct +sv_setsteamaccount YOUR_GSLTThe server downloads the collection when it starts and checks for addon updates on every start after that.
Stop Automatic Updates
An addon author can push an update with unwanted or even malicious changes. To stop the server updating Workshop addons at startup, set this on the command line:
+host_workshop_autoupdate 0With updates off, a map update can stop players joining, because your server still runs the old version. Turn updates back on when you're ready to take them.
Use a File Instead of a Collection
From Garry's Mod version 2026.09.22, you can list Workshop IDs in a file instead of, or as well as, a collection. Type version in the server console to check yours.
Create garrysmod/cfg/srcds_workshop_ids.txt in this format:
"my_workshop_addons"
{
"1" { "wsid" "123277559" }
"2" { "wsid" "111412589" }
}Send Content to Players
Make a server-only Lua file. The folder name autorun/server keeps it on the server:
garrysmod/lua/autorun/server/workshop.luaAdd one line for each addon that has content:
resource.AddWorkshop("104606562")
resource.AddWorkshop("150455514")Each ID is a single Workshop item, never a collection. Players download those addons before they enter the server.
You don't need lines for these two:
- The current map, if it's in your server's collection.
- The gamemode, if it's in your collection and its gamemode file has a
workshopid.
The server console says Making workshop map available for client download or Making workshop gamemode available for client download when it does this.
Workshop, FastDL or ServerDL
Garry's Mod can send content three ways. Facepunch's wiki ranks them in this order:
| Method | Speed | What you need |
|---|---|---|
| Workshop | As fast as the player's connection, up to about 2 GB per addon file | The content on the Workshop and resource.AddWorkshop |
| FastDL | As fast as the player's connection, one file at a time | A web server, sv_downloadurl and resource.AddFile |
| ServerDL | Slow, about 64 KB/s, one file at a time | sv_allowdownload 1 and resource.AddFile |
Use the Workshop if you can. When you upload your own content pack, set its type to ServerContent so it doesn't clutter the Workshop.
FastDL
FastDL sends files from your own web server over HTTP. Copy your content to the web server in the same folder layout it has on the game server, then point sv_downloadurl at it in server.cfg:
sv_downloadurl "https://example.com/gmod/"Mark each file with resource.AddFile in a server Lua file. It adds related files for you, so a .vmt brings its .vtf and a .mdl brings its .vvd, .phy and others:
resource.AddFile("materials/myaddon/sign.vmt")
resource.AddFile("models/myaddon/sign.mdl")Players ask for a .bz2 version of each file first, then the plain file. Compress your files with bzip2 to make downloads smaller.
FastDL doesn't check what's inside a file. If you change a file but keep its name, players who already have it won't download it again. Give changed files a new name.
ServerDL
ServerDL sends files through the game connection at about 64 KB/s. Facepunch calls it obsolete. Turning on sv_allowdownload also lets a modified client spam file requests and lag your server.
Keep Downloads Small
Every addon you add with resource.AddWorkshop is a full download for every new player. A long list means a long first join.
- Only add addons that have content. A Lua-only addon in
resource.AddWorkshopdoes nothing except slow the join. - Don't trust Workshop Lua generator websites. They add every addon, Lua-only ones included.
- Merge your own models and materials into one content pack.
- Remember the limit: 8192 downloadable files, shared by every
resource.Addfunction.
Players can also choose which file types they download in their own settings. Some will still join without your content, whatever you do.
A player who got a map through FastDL must download it again if you move it to the Workshop. Having the files already doesn't count as having the Workshop item.
Troubleshooting
The addon is installed on the server but not sent to players. Add its ID with resource.AddWorkshop, restart the server and rejoin.
Check the collection is Public or Unlisted, and that the ID is the collection's, not one addon's. Watch the server console at startup for Workshop errors.
The +map name is the .bsp file name, which can differ from the Workshop title. Check the addon's description for the map file name.
Remove the addon from your collection, or set +host_workshop_autoupdate 0 until the author fixes it.
On your client, run download_debug 1 and developer 1 in the console, then rejoin. Red "Error Downloading" lines name the files your web server is missing.
Next Steps
Get your server listed with a GSLT and open ports, then install DarkRP.
Want to see a big DarkRP server running? Join Justified: justified.gg
