Garry's Mod Server Admin, RCON & ULX Commands: Console Reference
Every Garry's Mod admin command an operator needs: enable Source RCON (and why "GMod RCON is broken" is folklore), the built-in kick/ban commands and what users.txt actually does, install ULX and bootstrap your first superadmin, the full ULX moderation command set with its real default groups, sandbox limit cvars, and Workshop content hosting - plus the traps: timed bans never persisting, ULib bans living in SQLite since 2022, and the dead sbox_plpldamage cvar.
A Garry's Mod dedicated server is a standard srcds install, so it speaks genuine Valve Source RCON - any Source RCON client works, same as Counter-Strike or TF2. But unlike other Source games, almost all real GMod administration happens in Lua addon land: the base game ships no admin menu at all, and the de-facto standard is ULX. This reference covers the confirmed behavior of both layers.
Enabling RCON
RCON rides the game port (default 27015, TCP) - there is no separate RCON port. Enable it by setting a password in garrysmod/cfg/server.cfg:
rcon_password "your_strong_password"
From a client console: rcon_password <password>, then prefix commands with rcon (e.g. rcon status). Dedicated RCON tools skip the prefix.
Two confirmed quirks worth knowing:
- Changing
rcon_passworddisconnects every authenticated RCON session - even setting it to the same value. Tools must re-authenticate. - "GMod's RCON is broken" is folklore. srcds ships anti-bruteforce cvars (
sv_rcon_maxfailures,sv_rcon_banpenalty,sv_rcon_minfailures,sv_rcon_minfailuretime) that auto-ban an IP after repeated failed auths - including your own admin panel's IP after a saved wrong password. What gets described as "RCON randomly stops working" is almost always this self-lockout (or a third-party panel's reconnect bug), not the protocol.
Built-in moderation (no addons)
Run status first: it prints each player's name, userid, and Steam ID - the identifiers the ban commands take.
| Command | Syntax | Notes |
|---|---|---|
kickid | kickid <userid> | Kick by userid from status - immune to name tricks. |
banid | banid <minutes> <userid or steamid> | 0 = permanent. |
banip / addip | addip <minutes> <ip> | IP ban (banip and addip are the same; Valve documents addip). |
writeid / writeip | writeid | Write permanent bans to banned_user.cfg / banned_ip.cfg. |
Ban persistence traps (standard srcds semantics, confirmed for GMod):
- Timed bans never persist.
writeidwrites only permanent (0-minute) bans; abanid 60 ...ban lives in memory and dies with the server process. - Config order matters.
server.cfgmustexec banned_user.cfg/exec banned_ip.cfgbefore anywriteid/writeipruns, or a freshwriteidoverwrites the file and silently erases your existing bans.
What settings/users.txt actually does
garrysmod/settings/users.txt assigns players to the base admin/superadmin groups, which Lua reads via Player:IsAdmin() / Player:IsUserGroup(). The base game ships nothing that acts on it - no admin menu, no scoreboard kick button. It only sets a flag for addons to check. Practical admin on GMod means installing an admin addon; that is where ULX comes in.
ULX + ULib: install and bootstrap
ULX (built on the ULib library) is the dominant GMod admin system: 70+ commands, chat shortcuts, and the XGUI menu. Install both, either way:
- Filesystem: extract to lowercase
garrysmod/addons/ulx/andgarrysmod/addons/ulib/. - Workshop: subscribe the server to ULX (
557962280) and ULib (557962238).
Then do a full server restart - a map change is not enough to load them.
Bootstrap your first superadmin from the server console (not in-game):
ulx adduser YourName superadmin
After that, commands work three ways: server/RCON console (ulx kick ...), in-game chat (!kick ...), or the GUI - chat !menu, or bind a key with bind j xgui.
ULX moderation commands
Syntax below is verified against the ULX source; "access" is the default group required (changeable per group).
| Command | Chat | Default access | Notes |
|---|---|---|---|
ulx kick <player> [reason] | !kick | admin | |
ulx ban <player> [minutes] [reason] | !ban | admin | 0 = permanent; accepts time strings like 1d, 2w. |
ulx banid <steamid> [minutes] [reason] | !banid | superadmin | Steam-ID-targeted; stricter default than ulx ban. |
ulx unban <steamid> | !unban | admin | |
ulx map <map> [gamemode] | !map | admin | Changes map and optionally gamemode. |
ulx slay <players> | !slay | admin | |
ulx freeze <players> / ulx unfreeze <players> | !freeze | admin | |
ulx jail <players> [seconds] | !jail | admin | 0 = forever. |
ulx noclip [players] | !noclip | admin | Defaults to self. |
ulx god [players] | !god | admin | |
ulx cloak [players] [amount] | !cloak | admin | Amount 0-255, default 255. |
ulx tsay <message> | @@ | admin | Message to everyone in chat. |
ulx csay <message> | @@@ | admin | Message centered on everyone's screen. |
ulx psay <player> <message> | !p | all | Private message - notably not admin-restricted. |
ulx asay <message> | @ | all | Admin-chat channel. |
Target shortcuts work in any <players> slot: * = everyone, ^ = yourself, #<group> = a group's members, ! = negation (!^ = everyone but you).
Groups and permissions
The real default hierarchy is four groups, each inheriting the one below:
user -> operator -> admin -> superadmin
(Guides listing "guest/regular/operator/admin/superadmin" describe a set that does not exist in the ULib source.) Manage them with superadmin-only commands:
| Command | Purpose |
|---|---|
ulx adduser <player> <group> | Put a player in a group. |
ulx removeuser <player> | Remove a player's group. |
ulx addgroup <group> [inherits] | New group; inherits user by default. |
ulx removegroup <group> | Delete a group. |
ulx userallow / userdeny <player> <command> | Per-player command grant/deny. |
ulx groupallow / groupdeny <group> <command> | Per-group command grant/deny. |
Where ULX bans live changed in 2022. ULib v2.70 moved bans from the flat data/ulib/bans.txt into the server's SQLite database, and v2.72 moved user/group data there too. Old guides pointing you at bans.txt describe the legacy format - on a current install, edit bans through ULX itself (ulx ban/ulx unban/XGUI), not by hunting for a text file.
One more scoping note: FAdmin, the other admin menu people ask about, is bundled inside the DarkRP gamemode - it is not part of base GMod and not a standalone addon.
Gamemodes and maps
The gamemode and map are launch parameters:
srcds -console +maxplayers 20 +gamemode sandbox +map gm_construct +sv_setsteamaccount <GSLT>
- Sandbox is the default gamemode; TTT (Trouble in Terrorist Town) is also bundled with base GMod (
garrysmod/gamemodes/terrortown/, gamemode nameterrortown). - DarkRP is not bundled - it is a separate Workshop/GitHub install, unlike TTT.
- Live map/gamemode changes are easiest via
ulx map <map> [gamemode].
Sandbox cvars
Verified against the live sandbox gamemode source:
| Cvar | Effect |
|---|---|
sbox_godmode | Global player invulnerability (default off). |
sbox_playershurtplayers | PvP damage toggle. The often-quoted sbox_plpldamage does not exist in the current source - use this one. |
sbox_noclip | Whether players may noclip at all. Serious servers set 0 and grant noclip through ULX's own permission instead. |
sbox_weapons | Whether players spawn with the sandbox weapon loadout (physgun/toolgun are separate). |
sbox_maxprops | Per-player prop cap. |
The same sbox_max* family covers other entity types (sbox_maxragdolls, sbox_maxvehicles, sbox_maxballoons, sbox_maxeffects, sbox_maxlamps, sbox_maxthrusters, sbox_maxwheels, sbox_maxnpcs, sbox_maxsents, ...). Defaults vary between GMod versions and host panels - check sbox_maxprops in your own console rather than trusting a copied number.
Workshop content
Two mechanisms that guides constantly conflate:
- Mounting addons on the server: launch params
+host_workshop_collection <collectionID> -authkey <key>. The key is a Steam Web API key fromsteamcommunity.com/dev/apikey, and the collection must be public. This downloads and mounts the collection server-side. - Making clients download content:
resource.AddWorkshop("<workshopID>")in a server Lua file (e.g.garrysmod/lua/autorun/server/workshop.lua). This only queues the addon for client download - it does not install anything server-side. Theresource.Add*family shares an 8192-file cap.
Best practice from the official Serving Content docs: prefer Workshop download (or FastDL via sv_downloadurl) over the legacy in-engine transfer, which is throttled to a crawl - and don't add Lua-only addons to the client download list; Lua transfers separately and listing it just slows joins.
Useful server cvars
| Cvar | Effect |
|---|---|
sv_password | Join password (empty = public). |
sv_downloadurl | FastDL HTTP mirror for custom content. |
sv_allowupload / sv_allowdownload | Legacy in-engine file transfer toggles. |
sv_kickerrornum | Auto-kick a player after N Lua errors. Default 0 = disabled on modern GMod (older guides claim otherwise). |
gmod_physiterations | Physics solver iterations (default 4). Raising it steadies complex contraptions at a CPU cost - leave it unless you need it. |
host_timescale | Game speed (requires sv_cheats 1). |
server.cfg is re-executed on every map load, so live cvar experiments reset at the next change unless written into the file.
Common mistakes
- Expecting users.txt to give you an admin menu. It only sets a group flag for Lua to read; install ULX.
- Installing ULX and only changing the map. It needs a full server restart to load.
writeidbeforeexec banned_user.cfgin server.cfg - wipes the existing ban file. And timed bans never persist regardless.- Editing
data/ulib/bans.txton a current install - ULib has stored bans in SQLite since v2.70 (2022); the file is legacy. - Setting
sbox_plpldamage- dead cvar; the live one issbox_playershurtplayers. - Diagnosing "broken GMod RCON" - check whether
sv_rcon_maxfailuresbanned your own IP after failed auth attempts before blaming the server. - Granting
ulx banidcasually - it defaults to superadmin (stricter thanulx ban) for a reason: it bans by raw Steam ID with no in-server target check. - Using
resource.AddWorkshopand expecting the addon to run server-side - it only makes clients download it; mount it withhost_workshop_collectiontoo.
Because Garry's Mod speaks genuine Valve Source RCON, MantaScope's web RCON connects to your server straight from the browser - send these commands, watch the live player list, and manage bans without a desktop tool - alongside population history, uptime tracking, scheduled restarts, and Discord alerts.