Minecraft Op Permission Levels: 0 to 4 Explained
Minecraft op permission levels 0-4 explained: what each level unlocks, how op-permission-level and ops.json set it, and how to op moderators safely.
A Minecraft operator is not simply "an admin or not". Java Edition grades operators on a numeric permission level from 0 to 4, and that number decides which commands a player can run. This guide covers what each level unlocks, how op-permission-level in server.properties differs from the level field in ops.json, how /op and /deop interact with both, and why handing everyone level 4 is the most common way server owners lose a world.
For what the commands themselves do, see Minecraft Server Commands. This page is about who is allowed to run them.
The Five Levels at a Glance
| Level | Name | What it adds |
|---|---|---|
| 0 | Operator | Operator status with no extra commands |
| 1 | Moderator | Bypass spawn protection |
| 2 | Gamemaster | Most gameplay commands, command blocks, creative operator items |
| 3 | Admin | Player moderation — bans, kicks, /op, /whitelist |
| 4 | Owner | Everything, including /stop and the save commands |
Levels are incremental: level n allows everything any lower level allows. And in Java Edition the level only means anything if the player is an operator in the first place — a non-op is treated as level 0 no matter what any file says.
There are five levels, not four
Most guides say "four op levels" because 1 to 4 are the ones you would deliberately assign. Level 0 is real, is the value every non-op has, and can be set explicitly.
What Each Level Unlocks
Level 0 — Operator
Flagged as an operator, but with no commands beyond those every player already has. What they do gain:
- The TPS graph in the debug screen
- Command block output in chat, if that game rule is enabled
- Command output from other operators and from the server console, when
broadcast-console-to-ops=true(it istrueby default)
Useful for a trusted watcher who should see what staff are doing without being able to do any of it.
Level 1 — Moderator
Adds exactly one thing: the ability to bypass spawn protection. No Java Edition command requires level 1 — not one. If a player only needs to build inside the protected spawn radius, this is the correct level, and it is far safer than the level 2 most people reach for.
Level 2 — Gamemaster
This is where commands start. Level 2 unlocks the bulk of the command set — around sixty commands, everything from /gamemode to /execute — plus several client-side operator abilities:
- Placing and using command blocks
- The Operator Utilities tab in the creative inventory, when the "Operator Items Tab" option is on
- Copying NBT with F3 + I, the F3 + F4 game mode switcher and the F3 + N spectator toggle
- Changing or locking difficulty from the Options screen
- Using target selectors (
@a,@e, …) in commands such as/telland in raw JSON text
The commands cover essentially all world and gameplay manipulation — /gamemode, /give, /tp, /effect, /gamerule, /time, /weather, /summon, /kill, /fill, /setblock, /clone, /worldborder, /scoreboard, /execute, /function, /datapack and the rest of that family.
Level 2 is not a safe "builder" level
/gamemode creativeand/giveare both level 2, so anyone at this level can hand themselves any item in the game. Level 2 is a creative permission, not a moderation one.
Level 3 — Admin
Level 3 adds thirteen commands, and they are all about controlling other players:
/ban, /ban-ip, /banlist, /pardon, /pardon-ip, /kick, /op, /deop, /whitelist, /setidletimeout, /transfer, /tick, /debug
This is the level for real moderators. Note that /op and /deop live here, so a level 3 operator can promote anybody — including themselves — to whatever op-permission-level is currently set to.
Level 4 — Owner
Level 4 adds the eight commands that affect the server process rather than the world:
/stop, /save-all, /save-off, /save-on, /jfr, /perf, plus the singleplayer-only /publish and /unpublish
Six commands need no operator status at all and are available to everyone at level 0: /help, /list, /me, /msg (aliases /tell and /w), /teammsg (/tm) and /trigger. Two more are conditional — /seed is level 0 in singleplayer but level 2 on a server, and /random is level 0 unless you use its sequence argument, which needs level 2.
op-permission-level in server.properties
op-permission-level=4 op-permission-level accepts 0–4 and defaults to 4. It is the level stamped onto a player at the moment you run /op — a default for newly created operators, not a server-wide ceiling. Changing it later does nothing to anyone who is already an operator; they keep whatever level was written for them.
Lower it to 3 before opping your moderators and they get everything except the ability to stop the server or disable saves.
function-permission-level
function-permission-level=2 A separate setting for a separate executor. function-permission-level accepts 1–4, defaults to 2, and sets the level that datapack functions run at — it has nothing to do with players. A function calling /give or /tp works at the default; one that needs /ban or /kick silently fails until this is raised to 3. Raise it only where genuinely needed, because every function on that server then runs at the higher level.
ops.json — the file that actually decides
Every operator lives in ops.json in the server root. /op writes to it, /deop removes from it, and it survives restarts.
[
{
"uuid": "069a79f4-44e9-4726-a5be-fca90e38aaf5",
"name": "Notch",
"level": 4,
"bypassesPlayerLimit": false
}
] | Field | Meaning |
|---|---|
uuid |
The player's UUID, in hyphenated hexadecimal form |
name |
The player's username — informational; the UUID is what is matched |
level |
This operator's permission level. Set from op-permission-level when written by /op |
bypassesPlayerLimit |
If true, this player can join even when the server is at max-players |
Operators are keyed on UUID, so a player who changes their Minecraft username keeps their op status — except on offline-mode servers, where the UUID is derived from the username and a rename breaks the entry.
level is per player: edit one entry to 2 and only that operator drops to level 2. This is how you build a real staff hierarchy without any plugin.
bypassesPlayerLimitdoes not free up a slotA player with
bypassesPlayerLimit: trueis exempt from the join restriction, but they still count towardmax-playersonce they are on. Set it on a whole staff team on a 20-slot server and a "full" server can end up holding more than 20 players.
Editing ops.json by hand
Hand edits work, but the affected player has to rejoin for the change to apply to them in-game. Because a running server holds the operator list in memory and rewrites the file whenever
/opor/deopis used, the safest sequence is: stop the server, editops.json, start it again.
Listing your operators
There is no vanilla command that prints operator status or permission levels. /list shows only the names of currently-connected players and /list uuids adds their UUIDs — neither reveals who is an op. ops.json is the list: open it in your panel's File Manager to see every operator and their level at once.
How /op and /deop Interact With the Level
op <player>from the server console always works — the console runs at level 4 — and writes the entry at whateverop-permission-levelcurrently is./opand/deopin chat both require level 3, so an operator can only promote or demote others if they are already admin-tier themselves. A level 3 operator can de-op anyone, including you./deopremoves the entry fromops.jsonentirely rather than setting the level to 0. Re-opping that player later gives them the currentop-permission-level, not their old level.
To give one person a level that differs from the default: /op them, edit their level in ops.json, then have them rejoin.
Why Giving Everyone Level 4 Is a Bad Idea
op-permission-level=4 is the default, so a plain /op Steve hands out full control unless you change the setting first. That is worth taking literally. A level 4 operator can:
/stopthe server, in the middle of anything/save-offand then leave it off, so hours of play never reach disk/deopyou, locking the owner out of their own server/gamemode creativeand/givethemselves any item, ending any survival economy/fillacross huge regions — griefing with a bigger radius
None of this requires malice — a moderator experimenting with /save-off, or one mistyped /fill, does the same damage as an attacker.
The practical setup for a small server:
op-permission-level=3
spawn-protection=16
white-list=true
enforce-whitelist=true Set op-permission-level=3, op your moderators, then op yourself and edit your entry in ops.json to "level": 4. Your staff can ban, kick and whitelist; only you can stop the server.
For anything more granular than five levels — "can use /tp but not /give", per-world rules, or ranks with prefixes — vanilla has no answer, and a permissions plugin such as LuckPerms is the right tool. See How to Set Up LuckPerms Permissions for Minecraft.
Related Settings Worth Knowing
| Setting | Default | Why it matters here |
|---|---|---|
spawn-protection |
16 |
The radius level 1+ operators bypass. Set to 0 to disable. If the server has no ops at all, spawn protection disables itself automatically |
broadcast-console-to-ops |
true |
Sends console command output to every online operator, including level 0 ones |
max-players |
20 |
The limit bypassesPlayerLimit exempts a player from joining past |
Bedrock uses
permissions.json, notops.jsonBedrock has permission levels too — it just never lets you name one by number.
permissions.jsonpairs a player's XUID with one of three named roles (visitor,member,operator), and the game resolves the role to a level from context: on a dedicated server,operatoris level 1 andmemberis level 0. There is noop-permission-levelequivalent and no per-playerlevelfield, so a Bedrock server has exactly one admin tier — the graded ladder on this page is Java-only, and/stopsits at level 4, reachable only from the server console.default-player-permission-levelinserver.propertiespicks the role new players get,memberby default. Full walkthrough in Minecraft Bedrock allowlist and permissions.
Common Issues
- "You do not have permission to use this command" — the player is either not in
ops.jsonat all, or theirlevelis below what that command needs. Check their entry in the file rather than assumingop-permission-levelapplies to them. - Changing
op-permission-leveldid nothing, and a moderator can still/stop— the setting only applies to operators created after the change, and that moderator was opped while it was still4. Lower the setting and edit their existinglevelfield inops.json. - Spawn protection is not working — there are no operators on the server, which disables it automatically. Op at least one player.
- A datapack function's command is ignored — the command needs a level above
function-permission-level. Raise that setting rather than opping anyone. - Op status vanished after a rename — only happens in offline mode, where UUIDs are generated from usernames. Online-mode servers are unaffected.
What to Read Next
- Minecraft Server Commands — what every command actually does, and where to type it
- Getting started with your Minecraft server — first boot, EULA, and opping yourself
- How to Set Up LuckPerms Permissions for Minecraft — the permissions layer that replaces op levels
- How to install plugins for Minecraft Java Edition — getting LuckPerms and the rest of the stack onto the server
- Managing your Minecraft server — backups, so a level 4 mistake stays recoverable
Made with 💜 by GameServerKings

Need a Minecraft server?
Deploy an instantly-provisioned Minecraft server on high-clock hardware — DDoS protected, no contracts, cancel anytime.
From $4.80 /month