Skip to content

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.

Updated August 19, 2026
Minecraft

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 is true by 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 /tell and 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 creative and /give are 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
server.properties

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
server.properties

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
  }
]
ops.json
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.

bypassesPlayerLimit does not free up a slot

A player with bypassesPlayerLimit: true is exempt from the join restriction, but they still count toward max-players once 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 /op or /deop is used, the safest sequence is: stop the server, edit ops.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 whatever op-permission-level currently is.
  • /op and /deop in 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.
  • /deop removes the entry from ops.json entirely rather than setting the level to 0. Re-opping that player later gives them the current op-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:

  • /stop the server, in the middle of anything
  • /save-off and then leave it off, so hours of play never reach disk
  • /deop you, locking the owner out of their own server
  • /gamemode creative and /give themselves any item, ending any survival economy
  • /fill across 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
server.properties — set this before opping your staff

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.

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, not ops.json

Bedrock has permission levels too — it just never lets you name one by number. permissions.json pairs 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, operator is level 1 and member is level 0. There is no op-permission-level equivalent and no per-player level field, so a Bedrock server has exactly one admin tier — the graded ladder on this page is Java-only, and /stop sits at level 4, reachable only from the server console. default-player-permission-level in server.properties picks the role new players get, member by 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.json at all, or their level is below what that command needs. Check their entry in the file rather than assuming op-permission-level applies to them.
  • Changing op-permission-level did 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 still 4. Lower the setting and edit their existing level field in ops.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.

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