Garry’s Mod administration is split across three authority layers: the dedicated-server console or RCON, the built-in groups in garrysmod/settings/users.txt, and the ULX administration addon. They are not interchangeable. A command documented for ULX will not exist on a vanilla server, while RCON only transports commands that the target server actually has loaded.
For a reliable setup, start the server with the correct srcds parameters, grant a trusted operator an appropriate group, configure RCON only when remote access is necessary, and use ULX with its required ULib dependency for richer moderation tools. The procedures and command examples below show where each command runs, how permissions persist, and what to check when a command is missing.
What are the different Garry’s Mod admin command systems?
The first step is identifying the authority layer you are using. The same task, such as kicking a player, can be performed from a server console, through authenticated RCON, or with a ULX command, but each route has different syntax, permissions, and failure modes.
| Layer | Where commands run | How access persists | What it provides | Main risk or limitation |
|---|---|---|---|---|
| Dedicated-server console | The srcds console on the machine hosting the server |
Operating-system and server-console access | Vanilla Source/Garry’s Mod commands and ConVars | Requires direct access to the host |
| RCON | A client console connected to the server remotely | rcon_password in server.cfg |
Remote execution of commands available on the server | Password exposure gives broad control |
users.txt groups |
Permissions checked by the game and server-side Lua | SteamID entries in garrysmod/settings/users.txt |
Basic admin and superadmin group tests |
It is not a ULX permission database |
| ULX and ULib | Server console, RCON, in-game console, and chat aliases | ULX/ULib group data | Moderation commands, targeting, permissions, and a GUI | Requires both addons and a full process restart |
Facepunch describes console commands as executable from either the server or client console, but a client console can only affect the server through a permitted route such as RCON. Always check the live server rather than assuming that a command listed for another gamemode or addon is installed.
How do I install and start a dedicated Garry’s Mod server?
Use SteamCMD to install the Garry’s Mod dedicated-server app (App ID 4020), then launch the srcds executable with a gamemode and map. The startup arguments determine the initial game state; later map changes do not replace a full server restart when an addon must initialize.
Windows startup
From the directory containing srcds.exe, the documented pattern is:
srcds.exe -console +gamemode sandbox +map gm_construct
+gamemode takes the gamemode folder name and +map takes the map name. Add your normal launch options, such as a player limit, only after confirming that the base command starts correctly.
Linux startup
On Linux, the corresponding pattern is:
./srcds_run -game garrysmod +maxplayers 32 +map gm_construct
The -game garrysmod argument selects the Garry’s Mod game directory. The example sets a 32-player limit and loads gm_construct; use a map and limit suitable for your server.
Changing the active map
Once the server is running, use:
changelevel <mapname>
This changes the current level without stopping the server process. It is useful for routine rotation and testing, but it does not substitute for a full restart after installing ULX or ULib.
Keep startup options and runtime commands conceptually separate. +gamemode, +map, and +maxplayers are launch parameters read while srcds starts. changelevel is a live console command. If a gamemode folder is misspelled at launch, changing the map later will not correct the selected gamemode; restart with the corrected argument.
How do I become an admin on a vanilla server with users.txt?
A vanilla dedicated server reads its original user-group table from garrysmod/settings/users.txt. Each SteamID is associated with a name and group, and server-side Lua can test that result with Player:IsAdmin, Player:IsSuperAdmin, or Player:IsUserGroup.
- Stop the server or use a safe configuration-edit window. Do not edit a file while another process is rewriting it.
- Open
garrysmod/settings/users.txt. Preserve the existing braces, quotation marks, and nesting. - Add the operator’s SteamID under the intended group. Use the existing
adminorsuperadminsection rather than inventing a differently spelled group. - Save the file and apply the configuration. Restart or reconnect according to how your server loads the file, then test the account in-game.
Use superadmin only for operators who need the broadest authority. Routine moderators should receive the least-privileged group that covers their tasks.
Do not confuse this file with ULX permissions. If ULX is installed, ULX and ULib maintain their own group data and command permissions. An entry that passes the built-in Player:IsAdmin test does not automatically create a ULX group with every ULX command.
The SteamID is the durable identity to place in the file; a temporary user ID shown by status can change on the next connection. If a user-group edit appears ineffective, check the exact path, verify that the SteamID is inside the intended existing block, and apply the server’s required restart or reconnect behavior before troubleshooting addons.
How do I configure and use RCON?
RCON lets you send server-console commands from a remote client. Treat the password as full server control: anyone who obtains it can attempt to run every command that the server accepts.
Configure the server
- Stop the server. This avoids editing a live configuration while it is being rewritten.
- Open
garrysmod/cfg/server.cfg. - Add an RCON password:
rcon_password "<password>" - Save the file and restart the server. The password must be loaded by the server before a remote client can authenticate.
Connect from the client console
- Open the Garry’s Mod client console.
- Set the destination server with
rcon_address <ServerIP>. - Authenticate with
rcon_password <password>. - Send a command through the RCON layer, for example
rcon statusorrcon changelevel gm_construct.
The ConVars reference distinguishes rcon_address, which identifies an unconnected remote server, from rcon_password, which stores the remote-console password. The rcon command then forwards a command after authentication.
RCON controls to review
Before exposing RCON, inspect the server’s controls for logging, failed-login limits, and penalties. The relevant settings include sv_rcon_log, sv_rcon_maxfailures, sv_rcon_minfailures, and sv_rcon_banpenalty. Keep the password out of public chat, screenshots, shared configuration repositories, and ordinary log files. If you suspect it was disclosed, replace it in server.cfg and restart.
RCON is a transport, not a separate permission system. Once authenticated, it can invoke commands exposed by the running server, including commands registered by addons. That makes it ideal for bootstrap and recovery, but excessive distribution of the credential defeats a carefully designed ULX role structure. Give remote access only to operators who genuinely need it, and review failed-login settings before publishing the server address.
Which vanilla console commands are useful for administration?
These commands are examples from the Source/Garry’s Mod console layer. Exact availability and argument behavior can vary with the loaded game, gamemode, and addons, so use the server’s own help output when syntax differs.
| Command | Purpose | Important detail |
|---|---|---|
status |
Lists connected players and their server information | Use it to identify the user ID or SteamID needed by another command. |
kickid <userid> [reason] |
Removes a connected player by user ID | The ID is the server’s current user ID, not necessarily a persistent SteamID. |
banid <minutes> <steamid> |
Adds a SteamID ban | Follow the running server’s help output for exact syntax and duration handling. |
removeid <steamid> |
Removes a SteamID from the ban list | Use the same identifier format the server reports. |
removeip <ip> |
Removes an IP address from the IP ban list | This is separate from a SteamID ban. |
changelevel <mapname> |
Loads another map | It changes the level but does not perform a full process restart. |
rcon <command> |
Sends a command through RCON | It works only after a valid RCON destination and password are set. |
Do not present Lua methods as console commands. Facepunch documents Player:Kick and Player:Ban as server-side Lua methods; they belong in Lua code, not as literal console commands typed by an operator.
For a safe workflow, run status immediately before a kick or ban, copy the current identifier, and include a reason where the command accepts one. This prevents a recycled user ID from causing an action against the wrong connection. A SteamID is appropriate for persistent ban-list operations; a user ID is appropriate for the currently connected session.
How do I install ULX and ULib?
ULX is an admin mod for Garry’s Mod and requires the latest ULib. The maintainers publish Workshop items with IDs 557962280 for ULX and 557962238 for ULib. You can install through Workshop or extract both addons manually.
- Install ULib and ULX from Workshop, or extract them so the folders named
ulibandulxsit directly insidegarrysmod/addons/. - Verify that you did not create an extra nested directory such as
addons/ulx/ulx/; the addon folders must be directly underaddons. - Perform a full server restart. A map change alone does not load ULX correctly after installation.
- After the server returns, run
ulx helpfrom the server console, RCON, or an authorized in-game console to confirm that the command set loaded.
Install ULib and ULX as a matched pair. If only one folder is present, or if an archive was extracted one directory too deep, the server may start normally while every ulx command remains unknown. Check the startup console for addon-loading errors before changing permissions.
ULX command and chat syntax
ULX’s console form is:
ulx (command) (arguments)
Its chat form begins with an exclamation mark:
!(command) (arguments)
For example, authorized users may use !kick <player> [reason], !ban <player> ..., !slay <player>, !freeze <player>, !unfreeze <player>, or !map <map>. The exact arguments, targeting syntax, and permission required should be confirmed with ulx help on the running server.
Opening the ULX interface
ulx menu opens the ULX graphical interface for an authorized user. The menu exposes only the actions permitted to that user’s ULX group; seeing the menu does not mean every command is available.
Bootstrapping the first ULX administrator
Use:
ulx adduser <name> <group>
This assigns a connected player to a ULX group. If nobody currently has an in-game administrative account, run the command from the dedicated-server console or authenticated RCON. Once the first trusted operator is assigned, later group management can be performed through the permitted ULX tools.
Use the connected player’s name exactly as the running server resolves it, or confirm the appropriate targeting pattern with ulx help. Assign a narrowly scoped group first, test a harmless command, and promote only when the operator’s duties require additional permissions. This staged approach avoids turning a temporary bootstrap account into an unnecessarily powerful superadmin.
How do I find commands and ConVars that are actually loaded?
Documentation describes possibilities; the live server tells you what is present. Run find <term> to search loaded console commands and variables, and run cvarlist to print loaded ConVars.
Commands and ConVars are separate concepts. A command performs an action, while a ConVar stores a configurable value. If a search returns nothing, check the spelling, the active gamemode, and whether the addon that supplies the item has loaded.
Use discovery after every significant stack change: a gamemode switch, an addon update, or a full restart. Searching for rcon, ulx, or a moderation keyword can quickly distinguish a permission failure from a missing registration. If the item appears in find but execution is denied, investigate the caller’s group. If it does not appear at all, investigate loading, naming, or gamemode compatibility.
Which administration method should I choose?
Choose the smallest layer that solves your operational problem.
- Use the dedicated console when you administer a local machine and need the least network exposure.
- Use RCON when you need remote console access and can protect the credential, restrict exposure, and monitor failed attempts.
- Use
users.txtfor basic built-in group checks on a vanilla server or Lua code that relies onIsAdminand related methods. - Use ULX with ULib when moderators need group-based permissions, player targeting, chat aliases, a GUI, and a larger moderation command set.
For a mixed setup, keep the roles clear: use RCON or the server console for bootstrap and recovery, and delegate routine moderation through narrowly scoped ULX groups. Do not grant superadmin merely because it is convenient.
The trade-off is portability versus depth. Vanilla console commands are available without an addon but offer fewer role and targeting features. users.txt travels with a basic server configuration but only supplies the groups that the game or Lua code checks. ULX adds a richer permission model and interface, at the cost of installing two addons, restarting after changes, and maintaining their data separately from users.txt.
What should I check when an admin command fails?
The server says “unknown command” for a ULX command
- Confirm that both
ulxandulibare directly undergarrysmod/addons/. - Verify that the folders are not nested one level too deep.
- Perform a full process restart;
changelevelis insufficient for this installation step. - Run
find ulxorulx helpafter the restart.
RCON does not respond
- Confirm that
rcon_passwordis present ingarrysmod/cfg/server.cfgand that the server was restarted after it was added or changed. - Check that
rcon_addresspoints to the correct server IP. - Authenticate with the exact password and inspect the client and server console output for failure messages.
- Review the RCON failure and penalty controls before repeatedly retrying.
A kick or ban command targets the wrong player
- Run
statusimmediately before the action. - Use the current user ID for
kickid, and the reported SteamID forbanidorremoveid. - For ULX, check the target pattern and permissions with
ulx helpinstead of assuming that a console identifier and a chat target have identical syntax.
A users.txt change has no effect
- Confirm that the file path is exactly
garrysmod/settings/users.txt. - Check that the SteamID is inside the intended existing group and that the brace structure was preserved.
- Apply the server’s required reload behavior by restarting or reconnecting, then test a built-in group check.
- If ULX is installed, verify the account in ULX’s own group system rather than relying on the built-in file.
One command works in the server console but not in chat
That usually indicates a layer or permission difference, not a broken command. A vanilla console command has no automatic ULX chat alias, while a ULX action may require the ! prefix and a group permission. Confirm whether you are using command, ulx command, or !command, then check the live help output.
How can I operate a Garry’s Mod server safely?
- Separate bootstrap credentials from day-to-day moderation. Keep RCON available to trusted operators and give routine staff only the ULX group they need.
- Use clear reasons when kicking or banning so another administrator can understand the action from the console or moderation records.
- Test commands on a non-production server or an empty map before changing a live gamemode configuration.
- After installing or updating an addon, perform a complete restart and verify the loaded command set with
find,cvarlist, orulx help. - When a command is documented for Lua, place it in server-side Lua rather than attempting to type the method name into the console.
A practical maintenance cycle is to record the current gamemode and map, make one configuration change, restart when the change affects addon initialization, and then verify the result with a harmless discovery command. Keep a tested recovery path through the local console or RCON before changing permissions. That way, a mistaken group edit or addon update does not leave the server without an operator who can repair it.
Frequently Asked Questions
Can I run ULX commands without installing ULib?
No. ULX requires ULib, and both addon folders must load successfully. Install the current ULib alongside ULX and perform a complete server restart before testing commands.
Why does a ULX chat command work for one moderator but not another?
ULX checks the caller’s group permissions. Two users can see the same chat prefix while only the group with the required permission can execute a particular action; compare their group assignments and inspect ulx help.
How can I identify the SteamID to ban?
Run status on the live server and copy the SteamID shown for the intended player. Use that persistent identifier with banid or removeid, rather than reusing a temporary user ID from an earlier connection.
Does changing the map reload every server addon?
No. changelevel replaces the active map while the server process remains running. Addon installation and other initialization changes that require process startup need a full restart.
Can users.txt make me a ULX superadmin?
No. users.txt supplies the built-in groups used by the game and server-side Lua. ULX keeps its own group data, so assign the account through ULX, using ulx adduser from the server console or RCON when necessary.
What is the difference between a console command and a ConVar?
A console command performs an action, such as changelevel. A ConVar stores a configurable value. Use find to search both and cvarlist to list loaded ConVars.
Is RCON safer than giving every moderator superadmin?
They solve different problems. RCON is remote server-console control and must be protected like a master credential; ULX groups can limit routine moderation. Keep RCON restricted to trusted operators and use the least-privileged ULX group for everyday work.
Why does the server start but ULX remain unavailable?
Check that ulib and ulx are directly inside garrysmod/addons/, not nested in another folder, and then perform a full process restart. A map change alone is not sufficient after installation.
The Bottom Line
Pick the authority layer before typing a command: use the local console or protected RCON for server control, users.txt for built-in groups, and ULX with ULib for role-based moderation. Verify the live command set with find, cvarlist, and ulx help, and restart the entire server whenever addon initialization requires it.