Skip to content
Run a Server

How to Add Workshop Addons to a Garry's Mod Server

Add Workshop addons to a Garry's Mod server with host_workshop_collection and resource.AddWorkshop, compare Workshop and FastDL, and keep join downloads small.

Updated 5 min read

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_collection downloads addons onto the server and mounts them.
  • resource.AddWorkshop tells 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=123456789

Here 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 123456789

A 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_GSLT

The 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 0

With 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.lua

Add 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:

MethodSpeedWhat you need
WorkshopAs fast as the player's connection, up to about 2 GB per addon fileThe content on the Workshop and resource.AddWorkshop
FastDLAs fast as the player's connection, one file at a timeA web server, sv_downloadurl and resource.AddFile
ServerDLSlow, about 64 KB/s, one file at a timesv_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.AddWorkshop does 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.Add function.

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

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

More in Run a Server

All Run a Server