---
title: "Garry's Mod Admin Commands: ULX and Server Console List"
description: "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."
url: "https://www.gameserverkings.com/knowledge-base/garrys-mod/admin-mods/"
category: "Garry's Mod"
category_url: "https://www.gameserverkings.com/knowledge-base/garrys-mod/"
published: "2026-07-02T02:08:10.370Z"
updated: "2026-08-10T07:52:54.392Z"
source_format: "markdown"
site: "GameServerKings"
---

# Garry's Mod Admin Commands: ULX and Server Console List

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.

> [!NOTE] ULX is an addon, not a feature
> Nothing in the `ulx` command set exists on a stock server. ULX requires ULib underneath, and both must be installed before any `!` chat command or `ulx` console 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:

``` title="garrysmod/settings/users.txt — vanilla admin"
"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.

> [!WARNING] `settings/users.txt` is not the ULX admin list
> These 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_users` table), which it imports once from `garrysmod/data/ulib/users.txt` and 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.

> [!WARNING] `banid` takes minutes first, and bans vanish on restart without `writeid`
> The 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: run `writeid` afterwards or the ban is gone at the next restart. `ulx ban` has 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](/knowledge-base/garrys-mod/workshop-and-fastdl/).

**Manual:** download the release ZIPs from `ulyssesmod.net` and extract each into its own folder, giving you `garrysmod/addons/ulib/` and `garrysmod/addons/ulx/`.

> [!IMPORTANT] 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:

``` title="Server console — granting the first superadmin"
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.

> [!WARNING] `adduserid` needs the STEAM_0 format, not SteamID64
> ULib 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 to `STEAM_0:X:YYYYYYY` first.

> [!TIP] Run it from the panel, not in-game
> The Console tab on your [Garry's Mod game server](/games/gmod/) *is* the server console, so it already holds full ULX access. Paste the `ulx adduserid` line 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.

1. Choose the group from the dropdown at the top — `admin`, `superadmin`, or any group you have created.
2. The panel below lists **Users in group:**. Click **Add...**.
3. 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.
4. 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`.

> [!NOTE] The Groups tab is superadmin-only
> ULX puts the tab behind an access string, `xgui_managegroups`, granted to `superadmin` by default. An `admin` opening `!menu` will 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](/knowledge-base/garrys-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.

``` title="Targeting examples"
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 |

> [!CAUTION] `ulx luarun` is root access to your server
> It 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 rcon` and `ulx 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 |

``` title="Building a moderator tier"
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](/knowledge-base/general/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

- **`!menu` does nothing.** ULib is missing, or you only changed maps after installing. Both addons must be in `garrysmod/addons/` and the server needs a full restart.
- **`ulx adduserid` said nothing and the user has no access.** You used a SteamID64. ULib only validates `STEAM_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 help` but is refused.** An explicit deny on the user overrides every group allow. Clear it with `ulx 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 `banid` and never ran `writeid`. Use `ulx ban` or `ulx banid` instead.

## 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](/knowledge-base/garrys-mod/getting-started-with-your-server/)
- [Setting up Steam Workshop and FastDL for Garry's Mod](/knowledge-base/garrys-mod/workshop-and-fastdl/) - how to deliver ULX and ULib to your server
- [Garry's Mod Gamemodes](/knowledge-base/garrys-mod/gamemodes/) - the DarkRP and TTT servers you will be administering

---

Made with 💜 by GameServerKings
