VGKAMI
Advertise Get listed

Game Guides

How to Install Mods on a Garry’s Mod Server

October 26, 2026 14 min read

To install mods (called addons in Garry’s Mod), first install or update the dedicated server with SteamCMD. Then either attach a Steam Workshop collection with +host_workshop_collection COLLECTION_ID, list Workshop IDs in garrysmod/cfg/srcds_workshop_ids.txt on Garry’s Mod 2026.09.22 or newer, or place a manually downloaded addon folder directly in garrysmod/addons/. Restart the server, verify that the addon mounted, and separately configure how clients receive models, materials, sounds, and maps.

Server installation and client delivery are different jobs. A server can load an addon successfully while players still see purple-and-black textures or ERROR models because their game has not received the addon’s client files.

What is the best way to install Garry’s Mod server mods?

Use a Workshop collection for most Workshop-based servers. It gives the dedicated server a single list to check at startup and lets Workshop manage updates. Use the individual-ID file when you want an explicit list without maintaining a collection, and use a manual addon folder for private code, legacy packages, or content that is not published on Workshop.

Method Server discovery Updates Client-content handling Best fit
Workshop collection +host_workshop_collection ID in the startup command Workshop checks the collection at startup by default Use resource.AddWorkshop for client assets when needed Most Workshop-based servers
Individual Workshop ID file garrysmod/cfg/srcds_workshop_ids.txt on version 2026.09.22 or newer Workshop-managed, with an explicit ID list Use the same client-download choices as a collection Operators who do not want to maintain a collection
Manual addon folder Folder placed in garrysmod/addons/ Operator downloads, replaces, and verifies files Use FastDL or publish the client content to Workshop Private code, legacy, or non-Workshop addons

All three approaches can coexist on a server, but keep a written record of every source so you can identify which package supplied a file when two addons conflict. Do not use two copies of the same addon simply because one is in a collection and another is in addons/; choose one authoritative copy and remove the duplicate before troubleshooting.

What do I need before installing addons?

Have the dedicated-server directory, its operating-system startup script, and administrative access ready. You need the server’s garrysmod/ directory so you can reach addons/ and cfg/, and you need permission to stop and restart SRCDS. Make a note of your current map, player limit, gamemode, and startup parameters before changing them.

For Workshop installation, identify the collection URL or each item’s numeric Workshop ID. For manual installation, obtain the archive and inspect it before uploading. Decide in advance how clients will receive non-Lua assets; installing an addon on the server alone does not solve that part.

How do I install or update the dedicated server with SteamCMD?

SteamCMD is the supported command-line installer for the Garry’s Mod dedicated server. The application ID is 4020; run app_update 4020 for a normal install or update, and append validate when you want SteamCMD to verify the downloaded files.

Linux installation and launch

  1. Download and extract SteamCMD from Valve for your Linux distribution, then start the steamcmd client.
  2. Log in as an anonymous user when the server files are available anonymously.
  3. Set an installation directory and run:
login anonymous
force_install_dir ./gmod-server
app_update 4020
quit

Run app_update 4020 validate instead when repairing a damaged or incomplete installation. From the server directory, a typical launch command is:

./srcds_run -game garrysmod +maxplayers 32 +map gm_construct

Replace the player count and map with the values appropriate for your server. Add the Workshop parameter described below to this same command; do not create a second server process just to load addons.

Windows installation and launch

  1. Extract SteamCMD, open a Command Prompt in its directory, and install the server with the same app_update 4020 command.
  2. Change to the directory containing srcds.exe.
  3. Launch the server with the Windows executable, for example:
srcds.exe -game garrysmod +maxplayers 32 +map gm_construct

Keep your startup command in a batch file or service definition. That makes Workshop parameters, map selection, player slots, and update settings reproducible after a reboot. A managed Garry’s Mod host can perform the same SteamCMD and restart work for you, but verify the provider’s addon, Workshop, and download configuration before moving a live server.

How do I add a Workshop collection to the server?

Create a public or unlisted collection on the Garry’s Mod Workshop, copy its numeric ID from the collection URL, and add +host_workshop_collection COLLECTION_ID to the SRCDS startup command. The dedicated server checks the collection when it starts, downloads the listed addons, and mounts them.

  1. Open the Garry’s Mod Workshop and create a collection.
  2. Add each required addon, map, or other Workshop item to the collection.
  3. Set the collection to Public or Unlisted. A private collection cannot be accessed by the dedicated server.
  4. Copy the numeric collection ID from the address bar.
  5. Append the parameter to your existing launch command. For example:
./srcds_run -game garrysmod +maxplayers 32 +map gm_construct +host_workshop_collection COLLECTION_ID

Use the equivalent srcds.exe command on Windows. On startup, watch the console for Workshop download and mount messages. If the collection contains a Workshop map, the server can mark that map for client download automatically; the same applies to a current gamemode that is Workshop-enabled.

Workshop collections may include nested collections. Treat the top-level collection as the source of truth and remove obsolete nested items there rather than downloading duplicate copies manually. Keep the collection’s visibility at public or unlisted; changing it to private later can make an otherwise correct startup parameter appear broken.

How do I install Workshop addons by ID without a collection?

Garry’s Mod 2026.09.22 and newer supports an explicit Workshop-ID list. Create garrysmod/cfg/srcds_workshop_ids.txt yourself and enter the IDs in the documented key-value format:

"my_workshop_addons"
{
    "1" { "wsid" "123277559" }
    "2" { "wsid" "111412589" }
}
  1. Confirm the server is running Garry’s Mod version 2026.09.22 or later.
  2. Open the server’s garrysmod/cfg/ directory.
  3. Create a plain-text file named exactly srcds_workshop_ids.txt.
  4. Paste the structure above and replace each numeric value with a Workshop item ID.
  5. Save the file and restart SRCDS.

This method is useful when deployment scripts generate the ID list or when you want code review and version control over addon membership. It does not remove the need to deliver client-side files; mounting an item on the server and downloading its assets to players remain separate operations. On older server versions, use a collection or manual folder instead of expecting the ID file to work.

How do I install a non-Workshop addon manually?

Extract the archive so the actual addon directory sits immediately under garrysmod/addons/. The addon directory itself should contain folders such as lua, maps, materials, models, particles, resource, scripts, or sound.

  1. Stop the server before copying or replacing files.
  2. Extract the archive on your computer or server.
  3. Inspect the first directory level. Correct: garrysmod/addons/my_addon/lua/.... Incorrect: garrysmod/addons/my_addon-master/my_addon/lua/....
  4. Move the real addon folder into garrysmod/addons/.
  5. Rename the folder with lowercase letters, numbers, underscores, or dashes. Avoid spaces and unusual punctuation.
  6. Start the server again and inspect the console for load errors.

GitHub-style archives often add a branch name such as -master around the real folder. That outer directory is the common cause of an addon appearing absent. Open the archive until you can see the expected lua, materials, models, or other top-level directories, then copy that directory rather than the packaging wrapper.

A USB flash drive can transfer an archive to the server machine, but it is optional and has no role in Workshop installation. The important checks are the folder depth and the presence of the addon’s expected subdirectories.

How do I confirm that the server loaded an addon?

Always restart after adding or changing a manual addon. For Workshop sources, restart after changing the collection or ID file and watch the startup console for download and mount messages.

  • Check that the server reaches its normal map or gamemode instead of stopping during startup.
  • Look for Workshop download and mount output when using a collection or ID file.
  • Test a command, entity, weapon, map, or gamemode feature supplied by the addon.
  • Have a client join and check both server behavior and visible assets.
  • If a change breaks startup, stop the server, restore the previous addon folder or collection membership, and start it again.

Workshop content is checked for updates at startup by default. If you deliberately set host_workshop_autoupdate 0, the server will not automatically seek newer Workshop content; re-enable updates when the server must track current maps or addons. Record the old collection state or manual folder so a rollback does not depend on memory.

How do I make addon files available to players?

Mounting an addon on SRCDS does not install its client files. Use a client-delivery method for models, materials, sounds, particles, maps, and other assets that the player’s game must read.

Workshop downloads with resource.AddWorkshop

Upload the client content to Steam Workshop and add its Workshop ID in server-side Lua with resource.AddWorkshop("WORKSHOP_ID"). This downloads at the client’s available speed and is suitable for larger packs. Mark only addons that actually contain client assets; Lua-only addons should not be advertised as downloadable content through this function because it adds unnecessary download work.

resource.AddWorkshop("WORKSHOP_ID")

resource.AddWorkshop makes the Workshop item available to joining clients, but it does not install or mount the item on the server. The server still needs the collection, ID-file entry, or manual addon folder described earlier. If the Workshop item is only server-side Lua, leave it out of the client resource list.

FastDL over HTTP

FastDL hosts files on a separate HTTP server. Set sv_downloadurl to that location and mark files with resource.AddFile or resource.AddSingleFile. Clients first try a compressed .bz2 file and then the uncompressed path.

resource.AddFile("materials/my_addon/example.vmt")
resource.AddSingleFile("sound/my_addon/example.wav")

Keep the HTTP directory structure identical to the paths expected by the game. A missing directory, wrong capitalization, or file that was not marked for download produces the same player-facing symptoms as a missing addon. Test a representative model, material, and sound after publishing the files, not merely the server console.

ServerDL from the game server

ServerDL uses the game server itself. Enable sv_allowdownload 1 and mark files with resource.AddFile or resource.AddSingleFile. Facepunch documents a 64 kb/s transfer limit for this method and calls it obsolete; it can also expose the server to file-request abuse. Use it only when its limitations are acceptable, and prefer Workshop downloads or FastDL for substantial content.

Which client-download method should I choose?

WorkshopDL is generally the practical choice for large, reusable content packs because Steam distributes the item at the client’s available speed and the pack can be maintained as one Workshop object. FastDL gives you direct control over individual files and is useful for a manual addon, but every path must be mirrored and marked correctly. ServerDL requires the least external hosting, yet its 64 kb/s limit and abuse risk make it a poor choice for large packs.

These delivery methods do not replace server discovery. A collection or ID file mounts content on SRCDS; resource.AddWorkshop, FastDL, or ServerDL tells clients how to obtain assets. Configure both sides when an addon contains anything beyond server-only Lua.

What is the downloadable-file limit?

The resource system has a shared limit of 8,192 downloadable files across all resource.Add* calls, according to current Facepunch Garry’s Mod Wiki documentation accessed in 2026; the publication year is not stated. The limit applies to the combined resource list, not separately to each Lua file or addon.

If your server approaches the limit, stop adding thousands of individual paths. Consolidate models, materials, sounds, and maps into Workshop content packs and deliver those packs with Workshop downloads. This reduces the number of resource entries while keeping the server’s addon source manageable. Count the combined list from every addon, because one addon cannot reserve a separate allowance for itself.

Why can players join but see purple textures or ERROR models?

Those symptoms usually mean the server mounted the addon but the client lacks one or more required models, materials, sounds, or maps. Fix the delivery path rather than reinstalling the server addon.

The addon is mounted but assets were never sent

Add the relevant Workshop item with resource.AddWorkshop, or list every required file for FastDL with resource.AddFile/resource.AddSingleFile. Do not add Lua-only packages to the client download list.

FastDL files are in the wrong place

Verify that the HTTP host mirrors the game’s relative paths exactly and that sv_downloadurl points to the directory containing those paths. Check both compressed .bz2 and uncompressed files when testing a download. A path that differs only by capitalization can fail even when the file exists on the HTTP host.

A map or gamemode is missing

Confirm that the map or current gamemode is in the Workshop collection or explicit ID list, then restart and watch the console. Workshop-enabled maps and gamemodes can be marked for automatic client download, but a manually installed map still needs a separate delivery method.

What should I check when an addon appears absent?

  • Confirm the manual addon folder is directly under garrysmod/addons/, not one directory too deep.
  • Check that the folder name uses lowercase letters, numbers, underscores, or dashes.
  • Restart after copying or replacing a manual addon.
  • For a collection, verify the collection is public or unlisted, the numeric ID is correct, and the startup parameter is present.
  • For srcds_workshop_ids.txt, verify the server version is 2026.09.22 or newer, the filename is exact, and the file is under garrysmod/cfg/.
  • Read the startup console for download failures, mount errors, or a Workshop item that was removed or made inaccessible.
  • If players report long join times, remove Lua-only entries from the client download list and reserve downloads for assets they need.

How should I maintain and update a modded server?

Choose one authoritative source for each addon and update it deliberately. Workshop collections and the ID-file workflow let Workshop perform update checks at startup; manual addons require you to download a replacement archive, inspect its folder depth, and restart the server yourself.

  1. Record the addon name, source, Workshop ID or archive version, and any required client-download entry.
  2. Update one related group at a time, beginning with a test or maintenance restart.
  3. Read the startup console before allowing players to join.
  4. Test the map, gamemode, scripted entities, and representative client assets.
  5. Keep the previous manual folder or collection state until the new version is confirmed.

When compatibility is more important than immediate updates, review whether host_workshop_autoupdate has been disabled. Leaving updates disabled can keep a known-good version in place, but it also prevents the server from receiving fixes or current versions until you update deliberately. When an update causes a failure, restore the previous folder or remove the newest collection item, restart, and test again before changing several addons at once.

What is a safe installation and rollback checklist?

  1. Write down the current startup command and server version.
  2. Back up the collection membership, ID file, or manual addon folder.
  3. Stop SRCDS before replacing manual files.
  4. Install one addon or related set at a time.
  5. Restart and read the complete Workshop or addon portion of the console.
  6. Join as a client and test both functionality and visible assets.
  7. Check the resource count when adding a large pack.
  8. Keep the previous working state until players have completed a normal session.

This process separates a server-mounting problem from a client-download problem and makes it possible to identify the exact change that introduced a conflict.

Frequently Asked Questions

Can a Workshop collection include another collection?

Yes. Workshop collections can contain nested collections, and the dedicated server checks the resulting collection structure at startup. Keep nested collections intentional so an inherited addon does not surprise you during an update.

What happens if I rename a manually installed addon folder?

The folder name is part of how you identify and maintain the package, so use only lowercase letters, numbers, underscores, and dashes. After renaming, restart SRCDS and test the addon again; a malformed or deeply nested name can make the package appear absent.

Is the 8,192-file ceiling per addon?

No. The limit is shared by every resource.Add* call on that server. A single large pack can therefore consume much of the same allowance as many small addons, which is why Workshop packs are preferable when the resource list grows.

Does resource.AddWorkshop install an addon on the server?

No. It only tells joining clients where to obtain a Workshop item. The server itself must already load that item through a collection, the versioned Workshop-ID file, or a folder under garrysmod/addons/.

Do I need a Steam Workshop collection for every server?

No. Use a collection for the usual Workshop workflow, the explicit srcds_workshop_ids.txt file on Garry’s Mod 2026.09.22 or newer, or a manual folder for private and non-Workshop packages.

Why does the server load an addon but players still see missing textures?

Server mounting and client delivery are separate. Add the asset-containing Workshop item with resource.AddWorkshop, or configure FastDL or ServerDL with the correct files and paths. Lua-only code does not supply missing models or materials.

Can I use ServerDL for a large addon pack?

You can, but Facepunch documents a 64 kb/s limit, calls ServerDL obsolete, and warns about file-request abuse. WorkshopDL or FastDL is normally better for substantial client content.

What if my server is older than 2026.09.22?

Do not rely on srcds_workshop_ids.txt. Use a public or unlisted Workshop collection with +host_workshop_collection, or install the addon manually under garrysmod/addons/.

Should Lua-only addons be added to the client download list?

No. Facepunch warns that marking Lua-only addons for download adds unnecessary work and can lengthen joins. Reserve WorkshopDL, FastDL, and ServerDL entries for content clients actually need.

The Bottom Line

Install the server with SteamCMD, mount Workshop content through a public or unlisted collection or the 2026.09.22+ ID file, and place non-Workshop packages directly in garrysmod/addons/. Then configure a separate client-download path for every model, material, sound, particle, or map. Most failures come from a nested manual folder, an inaccessible collection, a missing restart, or a server that mounted assets without sending them to players.