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.
- Permissions are the on/off switches. Every plugin command is gated behind a permission node, for example
essentials.flyorworldedit.wand. Give a player that node and they can use the feature. - Groups are bundles of permissions. Instead of granting nodes to every player one at a time, you grant them to a group and then drop players into that group.
- Inheritance means one group can include everything another group has. If your vip group inherits member, then VIPs automatically get all member perks plus their own extras.
- Tracks are ordered promotion ladders, like default to member to vip to admin. They let you promote and demote along a path with a single command.
- Contexts are conditions. A permission can apply only in one world, only in survival mode, or only on a specific server in a proxy network.
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 likeessentials.*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.



