To make a dedicated Garry’s Mod server, install the server files with SteamCMD, using Garry’s Mod App ID 4020, then start the Source Dedicated Server with a gamemode, map, player limit, and a Steam Game Server Login Token (GSLT). Windows and Linux have supported dedicated-server paths; macOS dedicated servers are no longer shipped. After the first launch, you must configure Workshop content, firewall and router access, and a repeatable update routine.
This guide shows how to host a GMod server for friends or run a public dedicated server, including the exact Windows and Linux commands, Workshop collections, the newer srcds_workshop_ids.txt method, optional mounted game content, and recovery steps for the failures that stop players connecting.
What do I need before making a Garry’s Mod server?
You need a separate dedicated-server installation rather than the Garry’s Mod files used by a player’s normal client. SteamCMD downloads and validates that installation. You also need a computer or virtual machine that can remain online, permission to open a port on its firewall and router, and a GSLT for normal Internet play.
- Supported server operating systems: Windows and Linux. Apple no longer ships a macOS dedicated-server package.
- Server software: SteamCMD and Garry’s Mod App ID 4020.
- Startup choices: an installed gamemode, an installed map, and a player-slot count.
- Internet play: a Steam Game Server Login Token. Facepunch describes this token as mandatory for the normal dedicated-server setup.
- Networking: a chosen server port, matching firewall and NAT rules, and a public address for players outside your home network.
- Optional content: separate installations of supported games when a map or addon requires their assets.
Keep the dedicated-server directory separate from any mounted Counter-Strike: Source, Team Fortress 2, or other game-content directories. Copying those files into the Garry’s Mod root can overwrite core folders and break updates.
How do I install a Garry’s Mod server on Windows?
On Windows, download and extract SteamCMD, install App ID 4020 into its own folder, and validate the files before launching the server.
1. Install SteamCMD
- Download SteamCMD from Valve’s official distribution and extract it to a folder you control.
- Run
steamcmd.exe. Wait until the prompt readsSTEAM>. - At that prompt, sign in anonymously with
login anonymous.
2. Download and validate the dedicated server
At the SteamCMD prompt, run:
force_install_dir c:my_garrysmod_server
app_update 4020 validate
quit
The unattended equivalent is:
steamcmd.exe +login anonymous +force_install_dir c:my_garrysmod_server +app_update 4020 validate +quit
app_update 4020 validate both installs missing files and checks an existing installation for damaged or incomplete files. Facepunch warns that force_install_dir can sometimes cause update problems. If an update fails, retry without that option, use another install folder, or enter force_install_dir before logging in.
3. Confirm the files
Open c:my_garrysmod_server and confirm that the Source Dedicated Server files, including srcds.exe and the garrysmod directory, are present. Do not place this folder inside your normal client installation or inside a mounted game’s directory.
How do I install a Garry’s Mod server on Linux?
Linux uses the same SteamCMD App ID, but the server is started with srcds_run. The following pattern installs into ~/gmodds and launches a 32-slot Sandbox server on gm_construct.
1. Download the server
steamcmd +login anonymous +force_install_dir ../gmodds +app_update 4020 validate +quit
Run that command from the directory where SteamCMD is installed. The relative path places the server in a sibling directory named gmodds; use a different absolute or relative path if your layout requires it.
2. Start the server
cd ~/gmodds/
./srcds_run -game garrysmod +maxplayers 32 +map gm_construct
The map name is entered without the .bsp extension. sandbox is the gamemode folder name used by the base game; you can substitute another installed gamemode.
3. Fix the common 32-bit-library error
On 64-bit Linux, an error mentioning Steam/linux32/steamcmd usually means that required 32-bit libraries are missing. Check the architecture with:
uname -m
Then install the 32-bit compatibility libraries required by your Linux distribution and run SteamCMD again. The package names differ between distributions, so use the distribution’s documented multi-architecture instructions rather than copying a package command meant for another release.
What command starts a dedicated Garry’s Mod server?
Use a launch command that sets the player limit, console mode, gamemode, map, and GSLT. On Windows, a practical starter command is:
srcds.exe +maxplayers 20 -console +gamemode sandbox +map gm_construct +sv_setsteamaccount YOUR_GSLT
On Linux, run the equivalent through srcds_run:
./srcds_run -game garrysmod +maxplayers 20 -console +gamemode sandbox +map gm_construct +sv_setsteamaccount YOUR_GSLT
Replace YOUR_GSLT with the token generated through Steam’s game-server-token service. Treat it like a password: do not publish it in screenshots, scripts that other users can read, or public documentation. If the token is exposed, revoke it and create a replacement.
What each launch option does
| Option | Purpose |
|---|---|
-game garrysmod |
Points the Linux launcher at the Garry’s Mod game directory. The Windows executable is already in the server installation, but specifying the game directory is still useful in scripts that manage several Source games. |
+maxplayers 20 |
Sets the advertised player-slot limit. Replace 20 with the capacity you intend to support. |
-console |
Runs the dedicated process in a console-oriented mode, which is useful for a server without a graphical desktop. |
+gamemode sandbox |
Selects the gamemode folder. Use the exact folder name supplied by an installed gamemode. |
+map gm_construct |
Loads the first map. Use the exact map name without .bsp. |
+sv_setsteamaccount YOUR_GSLT |
Associates the server with the required Steam Game Server Login Token for normal Internet operation. |
To change maps after startup, enter changelevel gm_flatgrass in the server console, substituting the exact map name you want. Maps and gamemodes may come from the base server or from installed addons, so check their folder and map names rather than guessing.
How do I make the server reachable over the Internet?
Leave sv_lan at 0 for Internet play, expose the same port in the host firewall and router, and test from a network that is not the server’s own LAN. A server that works only from the host computer has not passed an Internet connectivity test.
Choose and expose a port
Valve’s Source command-line reference uses 27015 as the standard listen-server port. You may choose another port with -port, but the number must match everywhere:
- the server launch command, such as
-port 27016; - the host operating system’s inbound firewall rules;
- the router’s port-forwarding or NAT rule;
- the address and port supplied to players.
Apply the protocol rules required by your network equipment for the selected Source server port, including the UDP/TCP entries your firewall presents. There is no single universal router screen, so use the terminology and procedure for your particular router and operating system.
LAN-only versus Internet play
Use +sv_lan 1 for a LAN-only server and +sv_lan 0 for an Internet server. Facepunch’s command-line documentation notes that the LAN setting must be present before startup for the described LAN behavior; put it in the launch command or an early startup configuration rather than changing it after players have joined.
Test the connection
- Wait until the server finishes loading a map without errors.
- Check that the selected port is allowed through the host firewall.
- Check that the router forwards that port to the machine running
srcds. - Ask a player on a different Internet connection to test the public address and port.
- For same-LAN testing, give players the server’s private address instead of its public address.
How do I add Workshop addons to a Garry’s Mod server?
The simplest approach is a Steam Workshop collection set to Public or Unlisted, passed to the server with +host_workshop_collection. The server checks that collection at startup, downloads its content, and mounts the addons.
Use a Workshop collection
- Create a Steam Workshop collection containing the addons, maps, and gamemodes you want.
- Set the collection visibility to Public or Unlisted. A private collection cannot be used by the dedicated server.
- Copy the numeric collection ID from Steam.
- Add the parameter to the launch command:
srcds.exe +maxplayers 20 -console +host_workshop_collection 123456789 +gamemode sandbox +map gm_construct
On Linux, prepend ./srcds_run -game garrysmod to the same + options. A Workshop map in the collection can be marked for client download, and a Workshop gamemode can advertise its Workshop ID so connecting players receive the required content.
List individual Workshop IDs
Facepunch documents garrysmod/cfg/srcds_workshop_ids.txt as an alternative way to list Workshop IDs on versions documented as 2026.09.22 or newer. Keep the version qualifier in mind: a server on an older build may not support this file-based method, so use a collection or update the server before relying on it.
Choose an update policy
Workshop updates are normally checked at startup. Setting host_workshop_autoupdate 0 disables automatic updates. That can keep a live server from changing an addon unexpectedly, but it can also leave an old map or addon that no longer matches clients. If you disable it, schedule an explicit update, validation, and restart process and record which addon set was running.
Where should I put maps, gamemodes, and repeatable settings?
Use command-line parameters for the first map and gamemode, then put settings that must survive restarts in garrysmod/cfg/server.cfg or another configuration file that the server executes.
Keep launch settings and server settings separate
- Use the launch script for the executable, Workshop collection, initial map, initial gamemode, GSLT, port, and LAN mode.
- Use
server.cfgfor repeatable server rules and administrative settings. - Keep custom launch scripts outside the downloaded core files so a SteamCMD validation does not overwrite your changes.
For temporary diagnosis, start with -noaddons to skip addon loading or -noworkshop to skip Workshop processing. These switches are useful for isolating an addon failure; they are not a replacement for fixing the offending content on a production server.
Understand the default tickrate
Valve’s Source Multiplayer Networking reference lists Garry’s Mod with a default tickrate of 66. That number describes the server simulation update rate documented for the game; it is not an uptime, latency, or guaranteed performance figure, and the supplied documentation does not establish a universal benefit from changing it.
How do I mount Counter-Strike: Source or other game content?
If a map or addon expects assets from another supported game, download that game’s content separately with SteamCMD and point Garry’s Mod to the separate directory through garrysmod/cfg/mount.cfg. Some games require a Steam account that legally owns them.
Keep mounted games outside the server root
Do not install the additional game directly into the Garry’s Mod server directory. A separate layout avoids overwriting core folders. For example, you might keep Garry’s Mod in C:/servers/gmod and Counter-Strike: Source content in C:/games/css on Windows, or use separate paths such as /srv/servers/gmod and /srv/games/css on Linux.
Point mount.cfg at those directories
A mount configuration uses game keys such as cstrike and tf with the corresponding absolute paths:
"mountcfg"
{
"cstrike" "C:/games/css"
"tf" "/srv/games/tf2"
}
Replace the example paths with the real directories on your machine. Linux paths are case-sensitive. Facepunch also documents mountdepots.txt for depot declarations and the -mountcfgfile option when you need a different mount-configuration filename.
Diagnose missing textures and models
If players see purple checkerboards, errors, or missing models, first verify that the required game content was downloaded, that the path in mount.cfg is correct, and that the server was restarted after the change. Copying assets into the Garry’s Mod root is not a safe workaround.
How do I update, change branches, and maintain the server?
Run SteamCMD maintenance during a planned restart window, validate App ID 4020, and preserve the configuration that makes the server reproducible.
Update the stable branch
steamcmd +login anonymous +force_install_dir ../gmodds +app_update 4020 validate +quit
Use the same installation directory you used for the server, then restart the dedicated process so updated binaries and game files are loaded.
Use an experimental branch
Facepunch documents the branch names dev, prerelease, and x86-64. Select one with a beta argument, for example:
app_update 4020 -beta dev validate
To return to stable, explicitly use -beta public:
app_update 4020 -beta public validate
Simply removing the beta flag does not necessarily move an installation that is already on a beta branch back to stable.
Back up what makes the server reproducible
garrysmod/cfg, includingserver.cfg, mount settings, and Workshop ID files;- Workshop collection IDs and the launch scripts that reference them;
- custom gamemode and map files;
- the current branch name and addon list before each update.
These records let you identify what changed and restore a known configuration if an update or addon breaks startup.
What should I do when the server does not work?
Troubleshoot from installation to networking in a fixed order. Change one variable at a time, keep the console output, and restore normal launch options after each isolation test.
SteamCMD cannot update App ID 4020
Retry the update without force_install_dir. If it still fails, use another installation folder, or enter force_install_dir before logging in. Run app_update 4020 validate again after correcting the path.
Linux reports a missing linux32/steamcmd
Run uname -m to confirm the host architecture, then install the 32-bit libraries required by that distribution. This error normally concerns missing compatibility libraries rather than a damaged Garry’s Mod download.
Workshop content is absent
Confirm that the collection is Public or Unlisted, that the numeric collection ID is correct, and that the server can reach Steam during startup. If you use srcds_workshop_ids.txt, verify that the server is on a version documented as 2026.09.22 or newer.
An addon prevents startup
Temporarily launch with -noaddons or -noworkshop. If the server starts, re-enable one content source at a time until the offending addon is identified, then remove or update that addon and restore the normal launch command.
Friends cannot connect
Check that sv_lan 0 is applied before startup, that the chosen port is identical in the command, firewall, and router rule, and that the test comes from outside the host’s LAN. A successful connection from the server computer alone does not prove that NAT or the public route is configured.
Players have missing textures or models
Verify the separate game-content download and the paths in mount.cfg. Check capitalization on Linux and restart after correcting the mount. Never merge the mounted game files into the Garry’s Mod server root.
Should I self-host or use managed hosting?
Self-hosting gives you direct control over the operating system, files, port, Workshop policy, and update timing. Managed hosting can reduce administration, but the provider must be checked for the features and limits your server needs; no general price, uptime, or player-capacity guarantee follows from the dedicated-server documentation.
| Decision factor | Self-hosted server | Managed server |
|---|---|---|
| Operating-system access | You choose and administer Windows or Linux. | Access depends on the provider’s plan and control panel. |
| SteamCMD updates and branches | You run validation, branch changes, and restarts. | The provider may automate them; verify whether beta branches are supported. |
| Workshop and GSLT support | You control collections, ID files, tokens, and launch arguments. | Confirm that the host allows custom startup parameters and GSLT entry. |
| Port and firewall control | You configure the host firewall and router/NAT. | The provider controls network exposure; check the assigned port and filtering rules. |
| Backups and restore | You back up configuration, maps, scripts, and addon lists. | Check what is backed up, how often, and whether you can download a copy. |
| Location and capacity | Determined by your hardware and Internet connection. | Determined by available regions and the selected plan; verify slot limits and location. |
| Cost and uptime | Uses your existing hardware and connection, with your own power and availability costs. | Requires a provider quote and service terms; verify recurring cost and uptime commitments. |
For a small friends-only server, self-hosting is usually the most transparent way to learn the files and launch process. For a public community that needs predictable availability, compare the operational controls above rather than choosing on advertised slots alone.
Frequently Asked Questions
Can one SteamCMD installation support two separate Garry’s Mod servers?
Yes. Keep each server instance in its own directory or give each instance its own configuration and launch script, including a different port. The documented Linux shell-script pattern can be extended to create and update multiple installations, but every running instance still needs its own network port and content policy.
What does Garry’s Mod’s default 66 tickrate actually describe?
It is the default simulation update rate listed for Garry’s Mod in Valve’s Source networking reference. It does not promise a particular ping, frame rate, or uptime, and a higher number should not be assumed to improve a server without testing the specific workload.
Can I run a dedicated server from macOS?
Apple’s macOS dedicated-server package is no longer shipped, so the supported shipped path is Windows or Linux. A Mac can still be used to administer a server hosted on one of those systems, but this guide’s SteamCMD installation steps do not provide a macOS server binary.
Do mounted game assets need to be installed on every player’s computer?
The server must have the required game content in a separate mounted directory, and clients still need whatever files a map or addon advertises for download. Mounting assets on the server does not grant ownership of the source game or replace the addon’s client-download requirements.