Introduction
Steam Workshop is the canonical way to distribute GMod addons: custom maps, weapons, gamemodes, props. The server references a collection (numeric ID) and each client auto-downloads it on connection. No FTP, no FastDL for workshop assets — Steam handles everything.
Prerequisites
- A Garry's Mod server at VeryCloud
- A Steam account
- Access to Startup in Wisp
- A GSLT (Game Server Login Token) — see dedicated tutorial on the docs
Step 1: Create a Workshop collection
- https://steamcommunity.com/workshop/browse/?appid=4000
- Sign in
- Top right → Your Files → Workshop Collections → Create Collection
- Name it, set Public or Unlisted
- Add items — click Add to Collection on each addon
Step 2: Get the collection ID
URL format:
https://steamcommunity.com/sharedfiles/filedetails/?id=2987654321
^^^^^^^^^^
Your ID
Step 3: Configure the server
In Wisp → Startup:
WORKSHOP_COLLECTION_ID = 2987654321
GSLT_TOKEN = your_steam_token
Variable names depend on the Wisp image. The result must produce:
srcds.exe -game garrysmod -gamemode darkrp +map rp_downtown_v4c_v2 \
+host_workshop_collection 2987654321 \
+sv_setsteamaccount YOUR_GSLT_TOKEN
⚠️ Without a valid GSLT, workshop download is disabled on public servers. Classic trap.
Step 4: Restart and observe
Console output:
[steamworks] Downloading workshop item 2876543210...
[steamworks] Workshop item 2876543210 downloaded
[gmod] Collection 2987654321 loaded with 47 items
Step 5: Client-side distribution
When a player connects:
- Client compares local workshop list with server's
- Auto-downloads missing addons via Steam
- Joins once complete
Uses Steam CDNs — fast and reliable.
Step 6: Update the collection
You can modify the collection live. To apply:
- Server reloads on next Restart
- Clients re-check on next connection
No server cache purge needed, Steam handles it.
Step 7: Server vs client addons
Not all workshop items are needed server-side. Examples:
- Map — REQUIRED server-side (else
changelevelfails) - Custom player models — useful for validation, mostly client-side
- SWEP/SENT scripts — REQUIRED server-side
In practice, put everything in the collection — duplication costs little (Steam dedup) and guarantees coherence.
Step 8: Maps that don't load
If changelevel <map_name> crashes:
- Map not in the collection (add it)
- Wrong map name (look at the internal name on the workshop page, not the marketing title)
Step 9: Multiple collections
GMod supports only one collection at a time. Either keep one big collection (recommended) or maintain several and swap the ID in startup per event.
Troubleshooting
Players don't download anything — GSLT not set or expired; players disabled workshop downloads in GMod options.
Server downloads in a loop at boot — workshop item deleted by author; reinstall from Settings.
Workshop authenticated failed — invalid/revoked GSLT. Regenerate via https://steamcommunity.com/dev/managegameservers.
Useful commands
lua_run print(steamworks.GetSubscribed())
lua_run steamworks.RequestWorkshopDownload()
lua_run for _,v in pairs(file.Find("addons/*.gma", "MOD")) do print(v) end
Conclusion
Steam Workshop = clean, automatic distribution for GMod addons. One collection, one ID in startup, one GSLT, restart, and your players download alone. No FastDL needed for most cases (only for large non-workshop custom assets).
Going further: FastDL for non-workshop files, local mods in /addons/, audit items that crash.


















