OP & whitelist
Two different tools, often confused. OP decides who can run admin commands on your server. Whitelist decides who can even join in the first place. This guide covers both — how to set them up, the OP levels nobody talks about, and the offline-mode gotcha that locks half the internet out by accident.
OP vs whitelist — the difference
It comes up in every support ticket, so let's settle it up front:
- OP (operator) grants permissions. An op can run admin commands like
/gamemode,/give,/ban. Being an op doesn't decide whether you can join — it just decides what you can do once you're in. - Whitelist grants access. When the whitelist is on, only players on the list can connect. Everyone else gets kicked at the login screen with "You are not white-listed on this server!"
You can mix them in any combination: whitelist-only with no ops (locked private server, no admin), whitelist + ops (private server with admins), no whitelist + ops (public server with admins), or no whitelist + no ops (anarchy).
Granting OP
The fastest way is from the console. Open the dashboard, scroll to the console, and type:
> op Steve
[Server] Made Steve a server operator
Steve is now an op. They'll keep that status across reconnects, restarts and crashes — it's persisted to ops.json at the server root.
Commands typed from the panel console run with the highest possible permissions. You don't need to op yourself first — you already are, as far as the server is concerned. op Steve just adds Steve to the persistent list.
OP levels — the part nobody reads
Vanilla Minecraft has four operator levels. The level controls how much an op can actually do:
- Level 1 — bypass spawn protection. That's it.
- Level 2 — can use
/clear,/difficulty,/effect,/gamemode,/gamerule,/give,/setblock,/spawnpoint,/tp,/summon. Edit command blocks. - Level 3 — adds
/ban,/deop,/kick,/op,/pardon, and other player-management commands. - Level 4 — adds
/stopand other server-control commands. Full power.
The default level is set in server.properties:
op-permission-level=4
For a public SMP, dropping the default to 2 and saving 4 for yourself (by editing ops.json manually) is a sensible safety measure — moderators can still teleport and give items, but only you can /stop the server.
Editing ops.json directly
Open Files → ops.json. It looks like this:
[
{
"uuid": "069a79f4-44e9-4726-a5be-fca90e38aaf5",
"name": "Notch",
"level": 4,
"bypassesPlayerLimit": false
},
{
"uuid": "853c80ef-3c37-49fd-aa49-938b674adae6",
"name": "Steve",
"level": 2,
"bypassesPlayerLimit": false
}
]
To bump someone's level or let them bypass max-players, edit the JSON and restart. Make sure to stop the server first — Minecraft rewrites this file on shutdown and your edits will be lost otherwise.
Removing OP
Two ways — either is fine:
> deop Steve
[Server] Made Steve no longer a server operator
Or stop the server, delete the offender's entry from ops.json, save, start the server. Same result.
Whitelist basics
Whitelist mode locks the server to a guest list. Great for friends-only SMPs, private modded worlds, or anywhere you don't want random scanners poking around.
Two prerequisites and the rest is easy:
- Add every player you want to allow.
- Turn whitelist on.
Doing it the other way around — turning it on first and then trying to add players — works, but anyone who tries to log in during that gap gets booted.
Enabling the whitelist
From the console:
> whitelist on
[Server] Whitelist is now turned on
Or edit server.properties:
white-list=true
enforce-whitelist=true
The enforce-whitelist setting is the important one. Without it, removing a player from the whitelist only affects their next login — they stay connected this session. With it on, they get kicked the instant you remove them. For most use cases, leave it on.
Adding & removing players
From the console:
> whitelist add Notch
[Server] Added Notch to the whitelist
> whitelist remove Notch
[Server] Removed Notch from the whitelist
> whitelist list
[Server] There are 4 whitelisted players: Notch, Steve, Alex, Herobrine
Names are case-insensitive but spelling counts. The server resolves the name to a UUID via Mojang's API when you add them — if Mojang is down, the add will fail with "That player does not exist". Wait a minute and retry.
Whitelist file structure
whitelist.json sits next to ops.json and looks similar:
[
{
"uuid": "069a79f4-44e9-4726-a5be-fca90e38aaf5",
"name": "Notch"
},
{
"uuid": "853c80ef-3c37-49fd-aa49-938b674adae6",
"name": "Steve"
}
]
You can bulk-edit this file directly. Same rule as ops.json: stop the server first or your changes get overwritten.
The offline-mode gotcha
By default the server runs in online mode — every joining player is verified against Mojang's auth servers, and their UUID is the real one tied to their account. Setting online-mode=false (offline mode) gives every player a UUID derived from their username, which means:
- The whitelist you built in online mode won't match anyone in offline mode.
- Op entries you added in online mode also won't match.
- Anyone can join as any username, including yours.
Don't flip online-mode=false unless you really know why. It's the single most common cause of "I added myself to the whitelist but I'm still getting kicked." Cracked clients won't work on PulsarServers regardless — the only legitimate reason for offline mode is running a Velocity/BungeeCord proxy in front of the server, and in that case the proxy enforces auth instead.
Bedrock players (Geyser / Floodgate)
Bedrock accounts have an XUID, not a Mojang UUID — and they often have a . prefix in their name (e.g. .SteveBE) added by Floodgate. Two things to know:
- Add Bedrock players using their in-game name with the prefix:
whitelist add .SteveBE. - If you've installed Floodgate, set
floodgate.json→send-floodgate-data: trueso plugins recognise them as Floodgate players for permissions.
Customising the kick message
By default rejected players see "You are not white-listed on this server!" — fine, but not friendly. Override it with a plugin like Whitelister or edit your proxy's reject template. Vanilla servers don't expose the message directly.
Common issues
- "You are not white-listed" even though I added myself. Three suspects: typo in the username, server in offline mode (UUIDs don't match), or the whitelist file wasn't reloaded. Restart the server and try again.
- OP commands don't work even though I'm in
ops.json. Check thelevelfield. Level 2 won't let you/stop; you need level 4. Also checkop-permission-levelinserver.properties— it caps the maximum level applied at runtime. - "That player does not exist." Mojang's API didn't respond. Check the spelling first; if that's right, wait a minute and try again. Status of Mojang services: status.mojang.com.
- My edits to
ops.json/whitelist.jsongot reverted. You edited the file while the server was running. Minecraft rewrites both files on shutdown. Stop the server, edit, then start. - Plugin permissions ignore my OP status. Some plugins (LuckPerms, Vault-based systems) deliberately bypass vanilla OP — see Permissions & commands. Grant the matching permission node instead.
- Whitelist works for Java but Bedrock players are kicked. They're missing the Floodgate prefix in their whitelist entry. Add them again from the console while they're connected — Floodgate fills in the correct prefixed name.
Still stuck? Open a ticket with the relevant console lines plus the contents of ops.json or whitelist.json and we'll dig in.