Get your free server today! View Plans →
Home Plans Blog About Contact Panel Join Discord
Minecraft

LuckPerms permissions tutorial: ranks, groups and prefixes

A practical LuckPerms tutorial for Minecraft servers. Set up ranks, groups, inheritance, prefixes, tracks and per world permissions, with a troubleshooting section.

LuckPerms permissions tutorial: ranks, groups and prefixes

By the end of this guide you'll have LuckPerms installed and a clean set of ranks on your Minecraft server: a default group for new joiners, a member group, a VIP group, and an admin group, all with the right permissions, chat prefixes, and a track so you can promote players with one command. This is written for anyone running a Paper, Spigot, or Velocity server who wants real control over who can do what. You don't need to be a programmer. You just need access to your server console or panel.

What LuckPerms actually does

LuckPerms is the permissions plugin that almost every serious server ends up using. On its own, a vanilla Minecraft server only knows two kinds of player: ops and everyone else. That's far too blunt. LuckPerms lets you hand out exactly the abilities you want, to exactly the people you choose.

Before you touch any commands, it helps to know the handful of ideas the whole system is built on.

Keep those five words in mind and the rest of this guide will click into place.

Step 1: Install LuckPerms

Grab the build that matches your platform from the official LuckPerms downloads page. There are separate jars for Bukkit/Spigot/Paper, for Velocity, for BungeeCord, and so on. Pick the right one. The Bukkit jar will not load on a Velocity proxy.

Drop the jar into your plugins folder and restart the server. Don't use a plugin reload command for the first install, just stop and start it cleanly.

plugins/
  LuckPerms-Bukkit-5.x.x.jar

When it loads you'll see something like this in the console:

[LuckPerms] Loading server dependencies...
[LuckPerms] Successfully enabled. (took 412ms)

By default LuckPerms stores its data in a small H2 file inside plugins/LuckPerms/. That's fine for a single server. If you run a network and want every server to share the same ranks, point them all at a MySQL or MariaDB database in config.yml instead, then restart. We'll keep the default file storage for this walkthrough.

You can run LuckPerms commands from the server console or in game. In game you'll need the luckperms.* permission, which ops have automatically, so set yourself as op once to get started if you haven't already. The base command is /lp, and /luckperms works too.

Step 2: Create your groups

LuckPerms ships with one group already: default. Every player who has no other group falls into it, so this is where you put the bare minimum that everyone should have. Now let's create the other three.

/lp creategroup member
/lp creategroup vip
/lp creategroup admin

You'll get a confirmation line for each one:

[LuckPerms] member was created successfully.

Groups exist now, but they're empty. Time to give them powers.

Step 3: Grant permissions to each group

The pattern is always the same: /lp group <name> permission set <node> true. Setting it to false explicitly denies the node, which matters later for overriding inheritance.

Here's a sensible starting point. These nodes assume you're running EssentialsX, which is the most common command plugin, so adjust them to match whatever plugins you actually have.

/lp group default permission set essentials.spawn true
/lp group default permission set essentials.help true
/lp group default permission set essentials.msg true

/lp group member permission set essentials.home true
/lp group member permission set essentials.sethome true
/lp group member permission set essentials.tpa true

/lp group vip permission set essentials.fly true
/lp group vip permission set essentials.hat true
/lp group vip permission set essentials.nick true

/lp group admin permission set essentials.ban true
/lp group admin permission set essentials.kick true
/lp group admin permission set essentials.gamemode true

Now wire up inheritance so each rank builds on the one below it. This is the part that saves you the most work.

/lp group member parent add default
/lp group vip parent add member
/lp group admin parent add vip

With that chain in place, a VIP gets default perks, member perks, and VIP perks all at once. You only ever have to define the extra nodes for each tier, not repeat the whole list.

A quick warning about wildcards. The node * grants literally everything, including dangerous plugin commands and other servers' admin tools. It's tempting to give admins * and move on. Don't, unless you fully trust that person and understand what it opens up. Grant specific nodes or a plugin's own wildcard like essentials.* instead.

Step 4: Put players into groups

To add a player to a group, use the parent add command on the user. Adding a parent group is how membership works under the hood.

/lp user Steve parent add member

If you want that group to become the player's main one (the one shown as their primary rank), set it:

/lp user Steve parent set vip

The difference matters. parent add stacks a group on top of what they already have. parent set removes their other normal groups and gives them just this one. For a straightforward rank system, parent set is usually what you want.

To see everything a player has, run:

/lp user Steve info

That prints their primary group, their parent groups, prefix, and any directly assigned permissions. It's the first command you should reach for whenever something looks wrong.

Step 5: Build a track and promote along it

A track turns your groups into a ladder. Create one and add the groups in order from lowest to highest.

/lp createtrack ranks
/lp track ranks append default
/lp track ranks append member
/lp track ranks append vip
/lp track ranks append admin

Now promoting a player is one command. LuckPerms moves them up to the next group on the track.

/lp user Steve promote ranks
[LuckPerms] Promoting Steve along track ranks from member to vip.

And to demote them back down a rung:

/lp user Steve demote ranks

Tracks are great for staff applications, donor tiers, or playtime rewards, because you never have to remember which group comes next. The track already knows.

Step 6: Prefixes, suffixes, and weights

Prefixes and suffixes are the colored tags you see next to names in chat, like a green [Member] or a gold [VIP]. LuckPerms stores them, but it does not draw them by itself. You need a chat plugin that reads them. EssentialsX Chat, or a dedicated chat plugin like one of the popular formatting plugins, will pick them up. Make sure that plugin's format string includes the LuckPerms prefix placeholder, usually wired through Vault or PlaceholderAPI.

Set a prefix on a group like this. The color codes use the standard ampersand format.

/lp group member meta setprefix "&a[Member] "
/lp group vip meta setprefix "&6[VIP] "
/lp group admin meta setprefix "&c[Admin] "

Suffixes work the same way:

/lp group vip meta setsuffix " &e★"

Here's the catch that trips people up. A player can belong to more than one group, so which prefix wins? That's what weight decides. The group with the highest weight provides the prefix. Give each rank a weight that climbs with seniority.

/lp group default setweight 10
/lp group member setweight 20
/lp group vip setweight 30
/lp group admin setweight 40

So if someone is both VIP and admin, the admin tag shows because admin has the higher weight. Without weights, the result is unpredictable, and you'll spend an afternoon wondering why a prefix won't stick.

Step 7: Per world and context permissions

Contexts let a permission apply only under certain conditions. The most common one is per world. Say you want flight in your creative world but not in survival. You can attach a world context to the node.

/lp group vip permission set essentials.fly true world=creative

Now that grant only applies while the player is in the world named creative. In any other world the node simply isn't there.

If you run a proxy network with shared database storage, the server context is just as useful. This lets a player be admin on one server and a normal member on another, all from the same permissions data.

/lp user Steve parent add admin server=survival

Contexts can stack and they can apply to almost any command that sets a node or a group. They're the tool that turns a flat permission list into something that actually fits a multi world or multi server setup.

Step 8: The web editor

Typing dozens of commands gets old fast. LuckPerms has a web editor that's genuinely one of its best features. Run this:

/lp editor

It generates a one time link to a hosted page. Open it in your browser and you'll see every group, every user, and every node laid out in a clean interface. You can tick boxes, drag inheritance around, edit prefixes, and rearrange tracks visually.

When you're done, hit the save button in the editor. It hands you an /lp applyedits command with a unique code. Paste that into your console and your changes go live.

/lp applyedits aGdJ2k

Nothing changes on your server until you run applyedits, so you can experiment freely in the editor without risk. For any setup more involved than a few groups, this is the way to work.

Step 9: Verify your setup

Before you announce new ranks, test them. The fastest check is to ask LuckPerms directly whether a player has a node.

/lp user Steve permission check essentials.fly
[LuckPerms] Steve has permission essentials.fly set to true
in context world=creative (from group vip)

Notice it tells you where the permission came from. That source line, "from group vip", is the single most useful piece of information when you're debugging. It removes the guesswork.

Troubleshooting

A permission just won't work

First, confirm the player actually has the node with /lp user <name> permission check <node>. If it says the value is true but the feature still fails, the node name is probably wrong. Check the plugin's documentation for the exact spelling. A node like essentials.fly does nothing if the real one is essentials.fly.others. Also make sure the player rejoined or you ran /lp sync after the change.

Inheritance order and explicit denials

If a player has a permission set to true in one group and false in another, the negative usually wins on the same level, and a node set directly on the user overrides anything from a group. So if a perk mysteriously refuses to turn on, search for a stray false somewhere up the chain. Run /lp user <name> info and read the source of each node. An explicit deny on the default group will quietly block everyone above it.

Wildcards causing chaos

If you gave a group * and now staff can do things they shouldn't, that's the wildcard granting every node on the server. Remove it with /lp group admin permission unset * and grant specific nodes instead. Wildcards are a blunt instrument and they ignore the careful structure you built.

Prefix not showing in chat

LuckPerms only stores prefixes, it doesn't render them. If your tags are missing, the chat plugin is the culprit, not LuckPerms. Confirm you have a chat formatting plugin installed, that Vault is present if your plugin needs it, and that the format string includes the prefix placeholder. If two groups fight over the prefix, set weights so the senior rank wins.

Changes not applying

If a command succeeds but you see no effect, run /lp sync to pull the latest data, and have the player relog. On a network with database storage, make sure every server points at the same database and that messaging is configured, otherwise one server won't know another changed something.

Wrap up

You now have a working rank ladder: default for newcomers, member, vip, and admin, each inheriting from the last, with prefixes, weights, a promotion track, and per world contexts where you need them. The pattern scales as far as you want to take it. Add a donor track, split staff into helper and moderator, or gate features behind playtime, all using the same handful of commands. Lean on the web editor for the big changes and /lp user info whenever something looks off, and you'll rarely get stuck. If you host with us at Bytte.cloud, LuckPerms drops straight into the plugins folder from the panel and the console commands above work exactly as written.

Common questions

Do I need a separate plugin to show LuckPerms prefixes in chat?

Yes. LuckPerms only stores prefixes and suffixes. You need a chat plugin such as EssentialsX Chat to actually display them, and its format string must include the prefix placeholder.

What is the difference between parent add and parent set?

parent add stacks a group on top of a player's existing groups. parent set replaces their normal groups with just the one you name, which is usually what you want for a clean rank system.

Why is my permission set to true but still not working?

Check the exact node name against the plugin docs, look for an explicit false higher up the inheritance chain, and run /lp sync or have the player relog after the change.

What does group weight control in LuckPerms?

Weight decides which group's prefix and suffix win when a player belongs to more than one group. The group with the highest weight provides the displayed prefix.

Can I give a permission only in one world?

Yes. Add a world context to the command, for example /lp group vip permission set essentials.fly true world=creative. The node then only applies in that world.

TR
Tom Reyes
Support Engineer at Bytte.cloud

Part of the Bytte.cloud team. We run game servers, bots and websites for a living, and we write these guides from what we see day to day in support and on our own servers.

Want to try this on real hardware?

Bytte.cloud has free plans for game servers, bots and websites. No credit card, set up in seconds.

Start for free See the plans