Garry's Mod Admin Commands: ULX and Server Console List
Install ULX and ULib, then run all 82 ULX admin commands plus the built-in Garry's Mod server console commands, sv_ and sbox_ convars, and group permissions.
Garry's Mod ships with almost no admin system, so real moderation comes from ULX — the community-standard admin mod built on the ULib library. This guide covers the built-in server console commands and convars you still need, then the complete ULX command set, its group and permission model, and where it is all configured.
ULX is an addon, not a feature
Nothing in the
ulxcommand set exists on a stock server. ULX requires ULib underneath, and both must be installed before any!chat command orulxconsole command does anything.
1. What Vanilla Garry's Mod Gives You
The base game has two admin tiers — admin and superadmin — and one file that assigns them:
"Users"
{
"superadmin"
{
"garry" "STEAM_0:1:7099"
}
"admin"
{
}
} That is the whole native system. Membership sets Player:IsAdmin(), which gates physgun pickup on other players' props and the admin cleanup command. There are no built-in kick, ban, freeze, teleport or jail commands for in-game admins — everything else happens at the server console or through an admin mod.
settings/users.txtis not the ULX admin listThese are two separate systems. Adding yourself here grants no ULX command — ULX keeps its own user list in the server's SQLite database (the
ulib_userstable), which it imports once fromgarrysmod/data/ulib/users.txtand then owns. Editing the wrong file is the most common cause of "I'm admin but nothing works".
2. Built-in Server Console Commands
From the Source engine, working with or without ULX. Run them at the server console or over RCON.
| Command | What it does |
|---|---|
status |
Display map and connection status — names, userids, SteamIDs, ping, IPs |
users |
Show user info for players on the server |
kick <name> |
Kick a player by slot, userid or name |
kickid <SteamID> "<reason>" |
Kick by SteamID or userid with a reason |
banid <minutes> <SteamID> |
Add a user ID to the ban list — 0 minutes is permanent |
addip <ip> |
Add an IP address to the ban list |
removeid <SteamID> |
Remove a user ID from the ban list |
removeip <ip> |
Remove an IP address from the ban list |
listid |
List banned users |
listip |
List IP addresses on the ban list |
writeid |
Write permanently-banned user IDs to banned_user.cfg |
writeip |
Save the IP ban list to banned_ip.cfg |
changelevel <map> |
Change server to the specified map |
maxplayers <n> |
Change the maximum number of players allowed |
hostname "<name>" |
Set the server name |
say "<message>" |
Display a server message in chat |
rcon <command> |
Issue an RCON command |
log <0/1> |
Enable the standard log file |
gmod_admin_cleanup |
Clean up every player's props and entities on the map |
gmod_cleanup |
Clean up only your own spawned props and entities |
exit / quit |
Exit the engine (stop the server) |
Garry's Mod also registers kickid2 and banid2 as Lua aliases. Facepunch's own source comments them "do not use" — they exist for legacy scripts.
banidtakes minutes first, and bans vanish on restart withoutwriteidThe order is
banid <minutes> <SteamID>, not the reverse — Garry's Mod's own admin helper calls it that way. Engine bans are in-memory only: runwriteidafterwards or the ban is gone at the next restart.ulx banhas neither problem.
3. Server ConVars Worth Setting
| ConVar | Default | What it does |
|---|---|---|
rcon_password |
0 |
Remote console password |
sv_password |
0 |
Server password for entry |
sv_cheats |
0 |
Allow cheats on the server if set to 1 |
sv_alltalk |
0 |
Players can hear all other players, no team restrictions |
sv_lan |
0 |
LAN server — no heartbeat, no authentication |
sv_allowdownload |
1 |
Allow clients to download files |
sv_allowupload |
1 |
Allow clients to upload customization files |
sv_downloadurl |
0 |
Allows downloading of files via a webserver (FastDL) |
sv_region |
-1 |
The region of the world to report this server in |
sv_timeout |
65 |
Seconds without a client message before the client is dropped |
sv_allowcslua |
1 |
Allow clients to run lua_openscript_cl and lua_run_cl — set 0 on public servers, or any client can execute Lua on you |
sv_kickerrornum |
0 |
Disconnect clients exceeding this many client-side errors — 0 disables |
physgun_limited |
0 |
When enabled the physgun can only pick up props and ragdolls |
Sandbox behaviour toggles and per-player limits, with the shipped defaults from Facepunch's sandbox.txt:
| ConVar | Default | ConVar | Default |
|---|---|---|---|
sbox_noclip |
1 |
sbox_godmode |
0 |
sbox_playershurtplayers |
1 |
sbox_weapons |
1 |
sbox_maxprops |
200 |
sbox_maxsents |
100 |
sbox_maxragdolls |
10 |
sbox_maxeffects |
200 |
sbox_maxvehicles |
4 |
sbox_maxnpcs |
10 |
sbox_maxconstraints |
2000 |
sbox_maxropeconstraints |
1000 |
The remaining per-entity caps follow the same sbox_max<thing> pattern — wheels and thrusters 50, balloons 100, emitters 20, lamps 3, lights 5.
4. Installing ULX and ULib
ULX requires ULib. Install both, ULib first.
Workshop: add both IDs to your server's Workshop collection and load it with +host_workshop_collection <id> — ULib is 557962238, ULX is 557962280. See Setting up Steam Workshop and FastDL for Garry's Mod.
Manual: download the release ZIPs from ulyssesmod.net and extract each into its own folder, giving you garrysmod/addons/ulib/ and garrysmod/addons/ulx/.
A map change is not enough
Team Ulysses' install notes are blunt: "You absolutely, positively have to do a full server restart after installing the files. A simple map change will not cut it!" Stop the server and start it again.
Current releases are ULib 2.71 and ULX 3.81. Check yours with ulx version.
5. Granting the First Admin
Nobody has ULX access on a fresh dedicated server. The server console has full access by default, so grant the first superadmin from there:
ulx adduserid STEAM_0:1:7099 superadmin Promote everyone else in-game with ulx adduser <player> <group>. adduser needs the player connected; adduserid works offline and also accepts an IPv4 address.
adduseridneeds the STEAM_0 format, not SteamID64ULib validates against
^STEAM_%d:%d:%d+$. Paste a 17-digit SteamID64 and it is silently treated as a Garry's Mod UniqueID — no error, no access. Convert toSTEAM_0:X:YYYYYYYfirst.
Run it from the panel, not in-game
The Console tab on your Garry's Mod game server is the server console, so it already holds full ULX access. Paste the
ulx adduseridline there and it takes effect immediately, no restart.
Promoting someone from the in-game menu
Once one superadmin exists, nobody has to touch the console again to hand out access. Type !menu in chat and open the Groups tab.
- Choose the group from the dropdown at the top —
admin,superadmin, or any group you have created. - The panel below lists Users in group:. Click Add....
- Connected players come first, each shown as
Name | current group. Below a separator are users ULX already knows but who are offline, and below that Add by SteamID... for everyone else. - Click a name. It applies immediately — no restart, no map change, and if the player is connected their group changes under them there and then.
Nothing separate is happening here. Picking a name runs ulx adduserid <steamid> <group> for you, so the menu and the console write to the same ULX user list — still nothing to do with garrysmod/settings/users.txt. Change... moves whoever is selected into another group, and Remove User inside that same menu drops them back to user.
The Groups tab is superadmin-only
ULX puts the tab behind an access string,
xgui_managegroups, granted tosuperadminby default. Anadminopening!menuwill not see it at all. That is also why the very first superadmin has to come from the console — until one exists there is nobody in-game with the access to grant it.
Add by SteamID... is validated exactly as ulx adduserid is: paste anything that is not STEAM_0:X:YYYYYYY and you get an "Invalid SteamID!" box rather than the silent failure the console gives you. To read a connected player's STEAM_0 ID, run status in the console.
6. Where to Type Commands, and How to Target Players
| Where | Form | Example |
|---|---|---|
| Server console / RCON | ulx <command> |
ulx ban "Bob" 60 Spamming |
| Client console | ulx <command> |
ulx slap Bob 10 |
| In-game chat | !<command> |
!slap Bob 10 |
| Admin chat | @<message> |
@minge on the roof |
| Chat box broadcast | @@<message> |
@@Restart in 5 minutes |
| Centre-screen broadcast | @@@<message> |
@@@Restart in 5 minutes |
ULX registers ! say commands only — /kick does nothing. If / commands work on your server they come from a gamemode like DarkRP; see Garry's Mod Gamemodes. !menu opens XGUI, the bundled admin menu, which shows only what you have access to.
Every command taking a player accepts partial names, a comma-separated list, or these keywords: * all players, ^ yourself, @ the player you are looking at, #<group> that group exactly, %<group> that group counting inheritance, $<id> a particular ID, @<team> a team. Prefix any of them with ! to negate.
ulx slay * ; slay everyone
ulx freeze @ ; freeze whoever you are looking at
ulx kick %user Minging ; kick the user group and anything inheriting it
ulx bring !^ ; bring everyone except yourself 7. ULX Moderation Commands
| Command | Chat | Level | What it does |
|---|---|---|---|
ulx kick <player> [reason] |
!kick |
admin | Kicks target |
ulx ban <player> [minutes] [reason] |
!ban |
admin | Bans target — 0 minutes is permanent |
ulx banid <steamid> [minutes] [reason] |
!banid |
superadmin | Bans a SteamID, online or not |
ulx unban <steamid> |
!unban |
admin | Unbans a SteamID |
ulx who [steamid] |
— | user | Information about currently online users |
ulx spectate <player> |
!spectate |
admin | Spectate target |
ulx map <map> [gamemode] |
!map |
admin | Changes map and gamemode |
ulx version |
!version |
user | Version information |
ulx motd |
!motd |
user | Show the message of the day |
[minutes] accepts a time string as well as a number, so ulx ban Bob 2w Cheating works. Since ULib 2.7 bans live in the ulib_bans table of Garry's Mod's sv.db SQLite database — data/ulib/bans.txt is read once for migration, then ignored.
8. ULX Player State and Punishment
| Command | Chat | Level | What it does |
|---|---|---|---|
ulx slap <players> [damage] |
!slap |
admin | Slaps target(s) with given damage |
ulx whip <players> [times] [damage] |
!whip |
admin | Slaps target(s) x times with given damage each |
ulx slay <players> |
!slay |
admin | Slays target(s) |
ulx sslay <players> |
!sslay |
admin | Silently slays target(s) |
ulx freeze / ulx unfreeze <players> |
!freeze / !unfreeze |
admin | Freezes and unfreezes target(s) |
ulx jail / ulx unjail <players> [seconds] |
!jail / !unjail |
admin | Jails target(s) — 0 seconds is forever |
ulx jailtp <player> [seconds] |
!jailtp |
admin | Teleports, then jails target |
ulx ragdoll / ulx unragdoll <players> |
!ragdoll / !unragdoll |
admin | Ragdolls target(s) |
ulx ignite / ulx unignite <players> [seconds] |
!ignite / !unignite |
admin | Ignites target(s), 1–300 seconds |
ulx unigniteall |
!unigniteall |
admin | Extinguishes all players and all entities |
ulx blind / ulx unblind <players> [0-255] |
!blind / !unblind |
admin | Blinds target(s) |
ulx cloak / ulx uncloak [players] [0-255] |
!cloak / !uncloak |
admin | Cloaks target(s) |
ulx god / ulx ungod [players] |
!god / !ungod |
admin | Grants and removes god mode |
ulx hp <players> <hp> |
!hp |
admin | Sets HP for target(s) |
ulx armor <players> <0-255> |
!armor |
admin | Sets armor for target(s) |
ulx strip <players> |
!strip |
admin | Strips weapons from target(s) |
ulx noclip [players] |
!noclip |
admin | Toggles noclip on target(s) |
ulx maul <players> |
!maul |
superadmin | Mauls target(s) |
ulx playsound <sound> |
— | admin | Plays a sound, path relative to the sound directory |
9. ULX Teleport Commands
| Command | Chat | Level | What it does |
|---|---|---|---|
ulx bring <players> |
!bring |
admin | Brings target(s) to you |
ulx goto <player> |
!goto |
admin | Teleports you to target |
ulx send <player> <player> |
!send |
admin | Sends the first player to the second |
ulx teleport [player] |
!tp, !teleport |
admin | Teleports target to where they are looking |
ulx return [player] |
!return |
admin | Returns target to their position before a teleport |
10. ULX Chat Commands
| Command | Chat | Level | What it does |
|---|---|---|---|
ulx psay <player> <message> |
!p |
user | Private message to target |
ulx asay <message> |
@ |
user | Message to currently connected admins |
ulx tsay <message> |
@@ |
admin | Message to everyone in the chat box |
ulx csay <message> |
@@@ |
admin | Message in the middle of everyone's screen |
ulx thetime |
!thetime |
user | Shows the server time |
ulx gag / ulx ungag <players> |
!gag / !ungag |
admin | Gags target(s), disabling their microphone |
ulx mute / ulx unmute <players> |
!mute / !unmute |
admin | Mutes target(s) so they cannot use text chat |
ulx gimp / ulx ungimp <players> |
!gimp / !ungimp |
admin | Replaces target's chat with lines from gimps.txt |
gag is voice, mute is text. A player being a nuisance in both needs both.
11. ULX Voting Commands
| Command | Chat | Level | What it does |
|---|---|---|---|
ulx vote <title> <option> <option>… |
!vote |
admin | Starts a public vote, 2–10 options |
ulx votekick <player> [reason] |
!votekick |
admin | Public kick vote against target |
ulx voteban <player> [minutes] [reason] |
!voteban |
admin | Public ban vote, defaults to 1440 minutes |
ulx votemap [map] |
!votemap |
user | Vote for a map; no arguments lists available maps |
ulx votemap2 <map> [map…] |
!votemap2 |
admin | Public map vote between 1–10 named maps |
ulx veto |
!veto |
admin | Vetoes a successful votemap |
ulx stopvote |
!stopvote |
superadmin | Stops a vote in progress |
Thresholds are convars: ulx votekickSuccessratio defaults to 0.6 with ulx votekickMinvotes 2; ulx votebanSuccessratio to 0.7 with ulx votebanMinvotes 3.
12. ULX Server and RCON Commands
All superadmin by default, and all capable of ending your server.
| Command | Chat | What it does |
|---|---|---|
ulx rcon <command> |
!rcon |
Executes a command on the server console |
ulx luarun <code> |
— | Executes Lua in the server console — use = for output |
ulx exec <file> |
— | Executes a file from the server's cfg directory |
ulx cexec <players> <command> |
!cexec |
Runs a command on the console of target(s) |
ulx ent <classname> [flag:value] |
— | Spawns an entity with optional key-values |
ulx debuginfo |
— | Dumps debug information |
ulx resettodefaults |
— | Resets all ULX and ULib configuration |
ulx luarunis root access to your serverIt runs arbitrary Lua in the server realm — it can read your files, wipe your database and open a backdoor. Never grant it to a group you would not hand the RCON password to. The same applies to
ulx rconandulx cexec.
ulx debuginfo and ulx resettodefaults ship with no default group access at all — ULib's rule is "no specific instruction, assume they don't have access". Until granted explicitly they run only from the server console or listen-server host.
13. Groups and Permissions
ULib's access system (UCL) ships with four groups. Inheritance flows upward, so a superadmin has everything an admin has.
| Group | Inherits from | Can target |
|---|---|---|
user |
— | default group for everyone |
operator |
user |
!%admin — anyone not admin or above |
admin |
operator |
!%superadmin — anyone not superadmin |
superadmin |
admin |
everyone |
operator exists but has no permissions by default — it is a blank slate for a trusted-moderator tier.
| Command | What it does |
|---|---|
ulx adduser <player> <group> |
Add a connected user to a group |
ulx adduserid <id> <group> |
Add a user by SteamID, IP or UniqueID |
ulx removeuser <player> / ulx removeuserid <id> |
Permanently remove a user's access |
ulx userallow <player> <command> [access tag] |
Add one command to one user's access |
ulx userallowid <id> <command> [access tag] |
Same, by ID |
ulx userdeny <player> <command> / ulx userdenyid <id> <command> |
Remove a command from a user's access |
ulx addgroup <group> [inherits from] |
Create a group, optionally inheriting another |
ulx renamegroup <current> <new> |
Rename a group |
ulx removegroup <group> |
Remove a group — use with caution |
ulx groupallow <group> <command> [access tag] |
Add a command to a group's access |
ulx groupdeny <group> <command> |
Remove a command from a group's access |
ulx setgroupcantarget <group> [target string] |
Set what a group is allowed to target |
ulx usermanagementhelp |
Prints ULX's own user management help |
ulx help |
Lists every command you have access to |
ulx menu |
Opens XGUI, the graphical admin menu |
ulx addgroup moderator user
ulx groupallow moderator "ulx kick"
ulx groupallow moderator "ulx slay"
ulx groupallow moderator "ulx freeze"
ulx setgroupcantarget moderator !%admin
ulx adduserid STEAM_0:0:12345678 moderator Groups live in data/ulib/groups.txt. Users do not — ULX stores them in the SQLite ulib_users table, and data/ulib/users.txt is only the legacy file it imports from. ULX writes both automatically — edit them only with the server stopped, and expect ULib to rewrite a malformed file (keeping a backup). To audit a rank, log in as an account in it and run ulx help.
14. Configuration and Logging
ULX writes its configuration into garrysmod/data/ulx/ on first run. The main file is config.txt, and every setting in it is also a live convar you can set with ulx <setting> <value>.
| Setting | Default | What it does |
|---|---|---|
ulx logFile |
1 |
Log to file — with this off nothing reaches disk |
ulx logDir |
ulx_logs |
Log directory under garrysmod/data |
ulx logEcho |
1 |
0 off, 1 anonymous ("Someone slapped Bob"), 2 full names |
ulx logEvents |
1 |
Log connects, disconnects and deaths |
ulx logChat |
1 |
Log player chat |
ulx logSpawns |
1 |
Log prop and entity spawns |
ulx logJoinLeaveEcho |
1 |
Echo joins and leaves to in-game admins |
ulx welcomemessage |
— | Shown on join; supports %host% and %curmap% |
ulx chattime |
0 |
Anti-spam — players can only chat every x seconds |
ulx showMotd |
2 |
0 off, 1 file, 2 XGUI generator, 3 URL |
ulx rslotsMode |
0 |
Reserved admin slots — four modes, documented in config.txt |
Logs land in data/ulx_logs/MM-DD-YY.txt. data/ulx/ also holds banreasons.txt, adverts.txt, gimps.txt, votemaps.txt, downloads.txt, motd.txt and sbox_limits.txt. Per-map and per-gamemode overrides work too — create data/ulx/maps/<mapname>/config.txt or data/ulx/gamemodes/<gamemodename>/config.txt. Settings add to each other, except gimps.txt and votemaps.txt where only the most specific file applies.
15. Sourcebans++ for Multi-Server Communities
Sourcebans++ shares bans across every server pointed at the same MySQL database, adding a web portal, appeals and a public ban list. It needs that database (see How to create a Database via your panel), a web server for the PHP portal, and the addon on each GMod server. It is overkill for one server — run ULX alone until you have two or more that need shared enforcement.
16. Common Problems
!menudoes nothing. ULib is missing, or you only changed maps after installing. Both addons must be ingarrysmod/addons/and the server needs a full restart.ulx adduseridsaid nothing and the user has no access. You used a SteamID64. ULib only validatesSTEAM_0:X:YYYYYYY.- Commands work for you but not your staff. You are the listen-server host or at the server console, both of which bypass access checks. Test with a real account in the target group.
- A command shows in
ulx helpbut is refused. An explicit deny on the user overrides every group allow. Clear it withulx userdeny <player> <command>and the optional boolean, which removes the entry rather than denying it. - Bans reappear after a restart. You used the engine's
banidand never ranwriteid. Useulx banorulx banidinstead.
17. FAQ
How do I make myself admin in Garry's Mod?
From the server console — or your host's console tab — run ulx adduserid STEAM_0:X:YYYYYYY superadmin. The server console always has full ULX access, so this works before anyone is an admin. It is separate from garrysmod/settings/users.txt, which controls only the vanilla IsAdmin() flag.
What is the difference between ULX and ULib?
ULib is a developer library providing user access lists, command parsing and utility functions. It has no admin commands of its own and you never interact with it directly. ULX is the admin mod built on top of it, and will not load without ULib installed.
Are ULX commands typed with ! or /?
! in chat, or ulx <command> in console. ULX also registers @ for admin chat, @@ for a chat-box broadcast and @@@ for centre-screen. It never registers / — those come from gamemodes like DarkRP.
How do I create a custom admin rank?
ulx addgroup <name> <group to inherit>, then grant commands one at a time with ulx groupallow <group> "<command>". Limit who they can act on with ulx setgroupcantarget <group> !%admin. All of it is also doable through the Groups tab of !menu.
Where are ULX bans stored?
In the ulib_bans table of Garry's Mod's sv.db SQLite database, since ULib 2.7. The old data/ulib/bans.txt is only read once for migration, so editing it has no effect. Engine bans from banid are separate again, landing in banned_user.cfg after you run writeid.
How do I stop players spawning hundreds of props?
Lower the sandbox limits — sbox_maxprops defaults to 200 per player, sbox_maxsents to 100, sbox_maxragdolls to 10. Set them in server.cfg or via the Settings tab of !menu. Turning on ulx logSpawns also tells you who is doing it.
Why can my moderators kick each other?
No targeting restriction is set. Run ulx setgroupcantarget <group> !%<group> so members of a tier cannot act on their own tier. The default admin group already carries !%superadmin for this reason.
18. What to Read Next
- Getting started with your Garry's Mod server
- Setting up Steam Workshop and FastDL for Garry's Mod - how to deliver ULX and ULib to your server
- Garry's Mod Gamemodes - the DarkRP and TTT servers you will be administering
Made with 💜 by GameServerKings

Need a Garry's Mod server?
Deploy an instantly-provisioned Garry's Mod server on high-clock hardware — DDoS protected, no contracts, cancel anytime.
From $4.90 /month