GARRY’S MOD · SERVER GUIDE · NOVEMBER 2026

How to Set Up a Garry’s Mod Dedicated Server

Install the server with SteamCMD, create its Steam token, start it with the right gamemode and map, then put your name, passwords and limits in server.cfg and make yourself admin. Each step below explains what the setting does, so you know where to look when something goes wrong.

Get the token first

A GSLT is effectively mandatory for listing. Without it, your server takes a severe ranking penalty in the browser, and a bad token can stop the server starting at all.

Startup line is not the same as server.cfg

The command line runs first. That is why map, gamemode, ports, tickrate and the Steam token belong there, while hostname, passwords and Sandbox limits fit cleanly in server.cfg.

Know the few files that matter

Beginners mostly touch server.cfg, settings/users.txt, mount.cfg, and the folders for maps, gamemodes and addons. Everything else can wait.

Protect performance early

On small community servers, per-player sbox_* limits are one of the simplest ways to stop one person turning everyone else’s session into a laggy prop pile.

What a Garry’s Mod dedicated server actually is

A Garry’s Mod dedicated server is srcds, the Source dedicated server program, running the Garry’s Mod game data. It is separate from the normal client. That matters because the server has its own install, its own startup line, its own config files and its own update path. You do not launch your own copy of Garry’s Mod and hope people can join it; you run a dedicated server process designed to host a map continuously.

Before you install anything, make three decisions:

  1. Gamemode: Sandbox is the easiest starting point, but Garry’s Mod can also boot into shipped terrortown for Trouble in Terrorist Town, or a Workshop gamemode later. Your startup line needs the gamemode folder name, not a friendly title.
  2. Player slots: this affects plan choice, CPU pressure, bandwidth use and how aggressive you need to be with prop and entity limits. More people means more physics, more Lua activity and more network traffic for the server to process.
  3. Rent or self-host: renting is simpler because the panel usually fills in the install path, ports and service wrapper for you. Self-hosting gives control, but you need to think about updates, restarts, storage paths and the machine’s single-threaded server performance. If you are still deciding, see our Garry’s Mod server hosting comparison. If you want to run it on your own hardware, start with our self-hosting guide and our game server hardware requirements guide.

For a friends-and-small-community server, the best first goal is not a heavily customised stack. It is a reliable first boot into a known map with a working token, clear admin access and basic limits that keep the main server thread from being buried by avoidable physics spam.

From a blank server to a playable one: the order that avoids false starts
Get the server ready
Install App 4020 with SteamCMD
Create a GSLT for App 4000
Start it with the right basics
Startup line: +gamemode, +map, token
server.cfg: name, passwords, limits
Take control and invite people
Add yourself to settings/users.txt
Join, then add Workshop content
Keep the first boot simple: a shipped gamemode such as sandbox and a stock map such as gm_construct.
Install, token, startup line, config, admin, then content. Each step depends on the one before it.

The core files and folders a beginner actually touches

Most of Garry’s Mod server administration boils down to a handful of places in the install. If you know what each one controls, you stop guessing where a setting belongs.

Path What it controls Why it matters first
garrysmod/cfg/server.cfg Server name, passwords, location, loading page, clientside Lua policy, Sandbox limits and similar convars This is your main server behaviour file once the process has already started.
garrysmod/settings/users.txt Built-in superadmin and admin assignments by SteamID This is the quickest way to give yourself recognised admin rights without installing an addon first.
garrysmod/gamemodes/ Gamemode folders such as sandbox and terrortown +gamemode expects a folder name from here or from an addon’s own gamemodes/ folder.
garrysmod/maps/ Map files +map expects the map file name without .bsp.
garrysmod/addons/ Legacy addons and mounted Workshop content This is where most custom content becomes visible to the server.
garrysmod/cfg/mount.cfg Mounted content paths such as Counter-Strike: Source or Team Fortress 2 content Useful when players are missing textures because the server needs those assets mounted.
garrysmod/cfg/srcds_workshop_ids.txt A list of Workshop item IDs for the server to download and mount New since 2026.09.22; this is an alternative or extra to a collection ID.
garrysmod/console.txt Saved console log output when you launch with -condebug Very useful when the server closes too quickly or a panel hides the live console.

The shipped cfg folder also includes game.cfg and network.cfg, but a new server can ignore those until there is a specific reason to touch them. Another file beginners often go looking for is mapcycle.txt; it is empty because Garry’s Mod does not use it.

The files a new Garry’s Mod server owner actually edits
garrysmod/cfg/
server.cfg for name, passwords and limits, mount.cfg for other games’ content, and the new srcds_workshop_ids.txt.
Ships with an empty server.cfg
garrysmod/settings/users.txt
The built-in superadmin and admin lists, matched by SteamID when a player first spawns.
Quickest way to make yourself admin
gamemodes/, maps/, addons/
Folder names here are what +gamemode and +map expect: sandbox, terrortown, gm_construct.
Wrong name, failed start
Launch with -condebug and the console output is also saved to garrysmod/console.txt.
Three places cover almost every first-week change: the cfg folder, users.txt, and the content folders.

If you remember only one rule here, make it this: folders decide what names are valid. A wrong folder name for a gamemode, or a wrong map file name, is enough to stop a launch even when every other setting is correct.

Install the server with SteamCMD on Windows or Linux

The dedicated server is distributed separately through SteamCMD as App ID 4020. That is the server download ID, not the token ID. You log in anonymously and pull the files into a dedicated folder.

Windows install

steamcmd.exe +login anonymous +force_install_dir c:\my_garrysmod_server\ +app_update 4020 validate +quit

If updates fail, the wiki notes that +force_install_dir can sometimes cause update problems. The practical fix is to try again without it, reinstall into another folder, or set the force-install directory before login.

Linux install and first boot

steamcmd +login anonymous +force_install_dir ../gmodds +app_update 4020 validate +quit
cd ~/gmodds/ && ./srcds_run -game garrysmod +maxplayers 32 +map gm_construct

On Linux, run the server under its own user account. The wiki recommends a user named steam with home /home/steam. On a 64-bit Linux machine, if SteamCMD reports linux32/steamcmd: No such file or directory, the usual cause is missing 32-bit libraries rather than a bad path.

srcds_run is the wrapper script that restarts the server after a crash. It does not restart the server after a reboot, and it cannot help if you simply close the terminal. If you want the server to come back after system restarts, that is a separate service-management job on your machine or your host panel.

To update later, run app_update 4020 again. Adding validate checks files as part of the update. Stop the server first: the Linux guidance is explicit that updates fail if the server is still running, because SteamCMD cannot replace files that the process has open.

You may also see branch options. Garry’s Mod supports -beta dev, -beta prerelease and -beta x86-64. Branch choice changes the binary you are running and can affect addon compatibility, so leave it on the normal public branch unless you have a clear reason not to. If you do switch, revert with -beta public; simply removing -beta is not enough because SteamCMD keeps updating to the last activated beta branch. macOS dedicated servers are no longer shipped.

Get a GSLT before you care about browser listing

Since the May 2020 update, Garry’s Mod servers should have a Steam Game Server Login Token. In practical terms, treat it as mandatory. A server without one suffers a severe server-list ranking penalty, so it can look as if the server is missing when it is really just buried.

This is where the two app IDs matter:

  • 4020 is the Garry’s Mod Dedicated Server download in SteamCMD.
  • 4000 is the Garry’s Mod base game app ID used when you create the GSLT.

Each server needs its own unique token. Put that token on the startup line with +sv_setsteamaccount and restart. Doing that ties the running server to a static SteamID, which helps players find it again even if the IP changes. If the token is invalid or expired, the server will not start. If you change your Steam password, all GSLTs are invalidated and must be regenerated.

If clients are being disconnected and you see Connection to Steam servers lost. (Steam error code 6), the first thing to check is token reuse. The usual cause is the same GSLT being used on two or more servers at the same time.

For testing, use +hide_server 1 so the server stays out of the public list while you sort the basics. That is much cleaner than launching publicly with a half-finished config and then trying to guess why strangers are joining the wrong build.

Build the startup line properly

The startup line does two jobs: it launches the server binary, and it provides the earliest settings the server needs before the first map starts. That timing is why some convars belong here rather than in server.cfg. If the server has to know something before it can initialise networking or load the first map, put it on the command line.

Example startup lines

srcds.exe -console +maxplayers 20 +gamemode sandbox +map gm_construct +sv_setsteamaccount <token> +host_workshop_collection <collection_id> -tickrate 66.6666 -port 27015 -condebug
./srcds_run -game garrysmod +maxplayers 12 +gamemode sandbox +map gm_flatgrass +sv_setsteamaccount <token> +host_workshop_collection <collection_id> -tickrate 66.6666 -port 27015 -condebug

What each part does:

  • -console: starts with a console window on Windows so you can actually see what the server is doing.
  • -game garrysmod: on Linux, points srcds at the Garry’s Mod game folder.
  • +maxplayers: sets the slot count. More slots means more entities, more networking and more physics pressure under load.
  • +gamemode: the folder name inside garrysmod/gamemodes/ or an addon’s own gamemodes/ folder. This is not a display name.
  • +map: the map file name without .bsp, from garrysmod/maps/ or an addon.
  • +sv_setsteamaccount: your GSLT. This is what ties the server to Steam for proper listing.
  • +host_workshop_collection: tells the server which public or unlisted Workshop collection to download and mount on startup.
  • -tickrate: target tickrate. Default is 66.6666; recommended range is 30-128. Lower values reduce main-thread CPU load and network update frequency, while higher values ask for more CPU time and more bandwidth consistency.
  • -port: the listening port. Source servers use 27015 by default. If you run more than one server on one machine, each needs its own port.
  • -condebug: writes console output to garrysmod/console.txt, which is useful when a crash or failed start scrolls away too fast.

Two common mistakes are worth calling out. First, +gamemode is a folder name, so TTT is terrortown, not a friendly title. Second, server-mounted Workshop content is not the same thing as player-downloaded content; mounting makes the server use the addon, but players still need the relevant files delivered by the proper content methods.

Setting Where it belongs Why it belongs there
+sv_setsteamaccount Command line The server needs the token as it starts talking to Steam. If it is wrong, startup can fail immediately.
+map Command line The first map must exist before the server can finish initialising a playable session.
+gamemode Command line The first map should load under the correct gamemode from the beginning.
+maxplayers Command line Slot count affects how the server allocates itself at launch and how the browser sees it.
-tickrate Command line Tick timing is a launch-level server behaviour, not a late config tweak.
-port Command line The server must know which port to bind before players can connect.
sv_lan Command line It must be set before the server starts; server.cfg runs too late.
hostname, sv_password, rcon_password server.cfg These are normal runtime convars and are easier to maintain in one readable file.
sv_location, sv_loadingurl, sv_allowcslua server.cfg These are policy and presentation settings rather than launch prerequisites.
sbox_* limits server.cfg You will tune them over time, so keeping them in config is simpler than editing the launch line.
What runs when: startup line, then server.cfg, then users.txt
1. Startup line
Read first, before the first map loads: +maxplayers, +gamemode, +map, +sv_setsteamaccount, -tickrate, -port, sv_lan.
An invalid token stops the server here
2. server.cfg
Runs once the server is up: hostname, sv_password, rcon_password, sv_location, sv_allowcslua, sbox_* limits.
Too late for sv_lan
3. users.txt
Checked each time a player first spawns. The SteamID must be fully authenticated by Steam before the group applies.
Join message confirms the group
If a setting is ignored, check whether it is being set too late in this order.

If you are diagnosing addon trouble, two launch flags are handy: -noworkshop and -noaddons. They temporarily disable Workshop or legacy addons so you can see whether the base server starts cleanly. Also skip -p2p; the wiki notes it has been broken for a good while.

Use a small, readable server.cfg first

garrysmod/cfg/server.cfg is where you put the settings you are likely to revisit. The repository ships an empty one, which is useful because it means you are not fighting hidden defaults in a pre-filled template. Start small and comment your choices so you remember why they exist.

// garrysmod/cfg/server.cfg

hostname "My Garry's Mod Server"
sv_password ""
rcon_password "change_this"
sv_location gb
sv_loadingurl "https://example.com/loading"

sv_allowcslua 0
sv_kickerrornum 0

// Sandbox per-player limits: add a line for each one you want to
// tighten, with a value that suits your slot count and hardware:
// sbox_maxprops, sbox_maxragdolls, sbox_maxnpcs, sbox_maxvehicles,
// sbox_maxeffects, sbox_maxballoons, sbox_maxthrusters

sbox_noclip 1
sbox_godmode 0
sbox_playershurtplayers 1
sbox_weapons 0

Why these lines matter:

  • hostname is just the browser name, but keeping it clear helps your own players find the right entry quickly.
  • sv_password controls access. An empty value makes it public; a password reduces random joins while you are still building the server.
  • rcon_password protects remote console access. Treat it as admin access, because that is what it is.
  • sv_location gb sets the browser flag. Use the correct ISO code; fake location is a rules problem, not just a cosmetic one.
  • sv_loadingurl sets the page shown while joining. It must begin with http:// or https://.
  • sv_allowcslua 0 stops clients running their own clientside Lua through commands such as lua_openscript_cl and lua_run_cl. Servers often disable this because it reduces what clients can execute locally, which is a security and consistency choice rather than a performance optimisation.
  • sv_kickerrornum can kick clients after a number of clientside Lua errors. Leaving it at 0 means never kick for that. Raising it can remove badly broken clients, but it can also punish players for addon-side mistakes they did not cause.
  • sbox_* limits are per-player. This is one of the most direct ways to protect performance in Sandbox because physics-heavy spawning costs server CPU on the main thread and increases state that must be networked to everyone else. The trade-off is obvious: lower limits reduce freedom for builders, but they stop one player consuming enough entity budget to lag the whole server.

How do you tell whether your limits helped? Watch what happens under normal play. If brief freezes or steadily rising lag appear when one player mass-spawns props, ragdolls or thrusters, the current limits are too loose for your hardware and player count. If nobody ever reaches the limits and the server remains responsive during build sessions, you are in a sensible range.

sv_lan is the classic example of a setting that should not go here. The command line runs at startup; server.cfg runs later. Because sv_lan must be set before the server starts, putting it here is simply too late. When in doubt, remember the order: command-line +convar value first, then server.cfg.

When you need to discover more settings, use find <text> to search convars and cvarlist to print all of them.

Make yourself admin with users.txt

The built-in admin system lives in garrysmod/settings/users.txt. It has superadmin and admin sections. To grant yourself access, place your own SteamID in the appropriate section.

"superadmin"
{
    "yourname" "STEAM_0:1:12345678"
}

"admin"
{
}

Use your own SteamID (type status in the game console while connected to see it), not the placeholder above. The file is read when a player first spawns, by the authentication logic in Garry’s Mod. If Steam has fully authenticated the player and the ID matches, the join message says You're in the 'superadmin' group on this server.

If Steam has not fully authenticated the player yet, the group is not applied on that spawn and the server reports that the usergroup has not been set. That is the reason behind the familiar “not fully authenticated” confusion: the file is correct, but the auth state was not ready at the moment the player first spawned.

The default usergroup is user. In built-in checks, IsAdmin() is true for both admin and superadmin. The important limitation is that these groups only grant rights that gamemodes and addons actually look for. The base game does not give you a full kick or ban menu on its own, which is why most active servers eventually add an admin addon. Do that after the base server works, not before.

Gamemodes, maps and Workshop: what the names really mean

Garry’s Mod ships with the base, sandbox and terrortown gamemodes. That last folder is Trouble in Terrorist Town. If you put +gamemode terrortown on the startup line, you are asking the server to load that folder. The same rule applies to Workshop gamemodes: the name you need is the folder name listed by the addon, not its title in the Workshop page.

Maps work the same way. +map gm_construct means the server looks for gm_construct.bsp in garrysmod/maps/ or inside an addon’s content. To change later without restarting the whole process, use changelevel <map>. You can also change the gamemode later with the gamemode convar and then do a map change.

Workshop needs one clear distinction: mounted on the server is not the same as downloaded by clients. A collection set with host_workshop_collection tells the server to download the collection on start and mount the addons so the server can use them. That does not automatically cover every file clients may need. Maps and the gamemode in the collection are made available to clients automatically, but general content distribution is its own subject.

That is why Garry’s Mod servers usually combine server mounting with one of the content delivery methods such as WorkshopDL or FastDL, depending on what the addon contains. Lua files are not treated as “content” in that sense and need no special download setup. Rather than repeat the whole content pipeline here, use our guide to installing mods and Workshop addons on a GMod server when you are ready to add collections, resource rules and download delivery properly.

New since 2026.09.22, you can also list Workshop items directly in cfg/srcds_workshop_ids.txt as an alternative or extra to a collection:

"my_workshop_addons"
{
    "1" { "wsid" "123277559" }
    "2" { "wsid" "111412589" }
}

You create the file yourself, and it uses the KeyValues format above: a named block with one numbered entry per addon, each holding a wsid. This is useful when you want precise control without maintaining a separate collection. Keep in mind that nested collections are downloaded too when you do use a collection, so be deliberate about what you include.

If you are using a rented panel, map the fields to the real files

A host panel changes the interface, not the underlying pieces. The easiest way to stay in control is to translate panel labels back into the files and command line you now know.

  • Server name / hostname field usually writes or overrides hostname in server.cfg.
  • Password field usually maps to sv_password.
  • Map field maps to +map.
  • Gamemode field maps to +gamemode, so it wants a folder name such as sandbox or terrortown.
  • Max players / slots maps to +maxplayers.
  • Port maps to -port. Most rented servers already have an assigned port shown in the panel.
  • GSLT field maps to +sv_setsteamaccount.
  • Additional parameters is where -tickrate, -condebug or temporary flags such as -noworkshop often go.
  • File manager is where you edit garrysmod/cfg/server.cfg and garrysmod/settings/users.txt.
  • Branch or beta dropdown is the panel version of -beta dev, -beta prerelease, -beta x86-64 or -beta public.

If a panel offers a “Workshop collection ID” box, treat it as a shortcut for +host_workshop_collection. If it offers an “auto update” switch, that is usually tied to the normal SteamCMD update process and should still be done with the server stopped.

Players join either through the server browser or with connect <ip>:<port> in the console. A decent GSLT setup matters because many casual players will only ever use the browser, and a badly ranked server might as well not exist from their point of view.

Choose the route that gives you the least admin work

If you want to skip machine setup and go straight to Garry’s Mod files, use a host with clear startup fields, file access and branch control. If you want full control, make sure the machine is prepared for SteamCMD, updates and restarts before you touch addons.

Compare Garry’s Mod server hosts

Listing rules, correct location and first-line troubleshooting

Before troubleshooting visibility, make sure the server is configured in a way that can stay listed. Garry’s Mod has Server Operator Rules, and breaking them can get a server blacklisted. The basics are straightforward: do not fake server info such as player counts, set the correct sv_location, and avoid malicious behaviour such as corrupting player data, forcing settings, crashing clients, blocking players from leaving, leaking private information or asking them to install third-party software. There are also content rules covering subjects such as sexual violence, real consent prompts for NSFW content and Nazi glorification.

sv_location uses an ISO 3166-1 alpha-2 code, such as gb for Great Britain, with eu as a special case. It sets the browser flag and can be up to five characters. Use the real location. For private testing, keep the server out of the list with +hide_server 1 rather than misleading the browser.

Symptom Likely cause First fix
Server will not start at all Invalid or expired GSLT; wrong map name; wrong gamemode folder; broken addon or Workshop item Check +sv_setsteamaccount, confirm the map and gamemode folder names, then try -noworkshop or -noaddons with -condebug and read console.txt.
Linux server fails before launch Missing 32-bit libraries on a 64-bit system If you see linux32/steamcmd: No such file or directory, solve the library issue first rather than editing paths at random.
Server is not showing in the browser No GSLT; +hide_server 1 still enabled; severe ranking penalty; wrong location expectations Add a unique GSLT, restart, disable hide_server when finished testing, and try direct connect <ip>:<port> to confirm the server itself is reachable.
Players are disconnected with Steam error code 6 The same GSLT is being used on more than one server Give each server its own token and restart them.
Players join but custom content is missing The server mounted the addon, but clients were not given the needed content delivery path Keep the server booting setup as-is, then fix content delivery separately using the proper WorkshopDL or FastDL method.
Sandbox feels fine until one player spawns lots of props Per-player sbox_* limits are too loose for your machine and slot count Lower prop, ragdoll, effect and thruster limits, restart or reload config as needed, then watch whether spikes reduce when players build heavily.
Players are kicked for clientside Lua problems sv_kickerrornum is set aggressively, or an addon is generating clientside errors Set sv_kickerrornum back to 0 while you identify the broken addon.

Use this order when diagnosing a fresh install: first ask “does the process start?”, then “can I connect directly?”, then “does it list properly?”, then “do addons and content behave?”. That keeps you from chasing browser visibility when the real problem is an invalid map or token.

Server will not start, is missing from the browser, or kicks players: check in this order
Launch with -condebug so the console output is saved to console.txt
Does the server process start and stay up?
No
Check the startup lineValid GSLT, real map name, gamemode folder name. Then try -noworkshop or -noaddons.
Yes
Can you join with connect ip:port?
No
Check the addressUse the port your host assigned, or the one set with -port on your own machine.
Yes
Does it show in the server browser?
No
Fix the token or hide_serverGive it its own GSLT and turn hide_server off once testing is done.
Yes
Players kicked or seeing errors? Error code 6 means a shared GSLT; missing content is a download setup issue.
Start, connect, list, then content. Fix the first step that fails before moving on.

Garry’s Mod server FAQ

How do I set up a Garry’s Mod dedicated server?

Install the dedicated server files with SteamCMD using App ID 4020, then create a GSLT using App ID 4000. Start the server with a valid map, gamemode and token on the command line, then place your server name, passwords and first convars in garrysmod/cfg/server.cfg. Finally, add yourself to garrysmod/settings/users.txt so you have admin rights when you join.

Do I need a GSLT for a Garry’s Mod server?

For any public or semi-public server, yes in practical terms. Garry’s Mod servers without a GSLT suffer a severe browser ranking penalty, and the dedicated server guidance treats the token as mandatory. A valid token also gives the server a static SteamID so players can still find it after IP changes.

Why is my Garry’s Mod server not showing in the server browser?

The usual reasons are no GSLT, a reused GSLT, or +hide_server 1 still being enabled after testing. Confirm the server itself works first by joining with connect <ip>:<port>; if direct join works but browser listing is poor, the token setup is the first place to look. Also make sure you are using the correct sv_location rather than expecting it under the wrong flag.

How do I make myself admin on a Garry’s Mod server?

Edit garrysmod/settings/users.txt and place your SteamID inside the superadmin or admin section. When Steam has fully authenticated you and you first spawn, the server assigns the group and shows the matching join message. If it does not apply immediately, the auth state may not have been ready on that spawn.

What is the difference between server.cfg and the startup line in Garry’s Mod?

The startup line runs first and is for settings the server needs before it can properly start, such as the token, map, gamemode, tickrate and port. server.cfg runs later and is better for normal runtime convars such as hostname, sv_password, sv_location, sv_allowcslua and Sandbox limits. That timing difference is why sv_lan cannot live in server.cfg.

More Garry’s Mod server help

Once the server is running, add Workshop addons, check the hardware you need, or compare hosts that make the startup line and files easy to reach.

Commands, file names and defaults come from the Garry’s Mod wiki and the game’s shipped files as of November 2026. Host panels label the startup fields and file manager differently, so follow your host’s current layout where it differs; the same startup line, token and config files sit underneath.

Similar Posts