Menu
 

LuckPerms Setup Guide (2026): Groups, Permissions, Prefixes, Web Editor

LuckPerms: The Complete 2026 Guide

Last updated: May 2026 · LuckPerms version 5.5+

Short version: install the LuckPerms JAR, run /lp editor, build your group ladder in the browser, paste the result back in console. For chat prefixes, also install Vault + a Vault-aware chat plugin (EssentialsChat is the standard).

Installation (Paper, Spigot, Purpur)

  1. Download the platform JAR from luckperms.net/download. Pick the Bukkit/Paper build for single-server, the Velocity or BungeeCord build for proxies.
  2. Drop the JAR into plugins/.
  3. Restart the server (not /reload, which can corrupt plugin state).
  4. First boot creates plugins/LuckPerms/config.yml and (for default SQLite) plugins/LuckPerms/luckperms-h2-v2.mv.db.
  5. Optional: edit config.yml to switch storage to MySQL or MariaDB if you need cross-server sync. Restart again after the config change.

For multi-server networks (BungeeCord, Velocity, multi-paper), every server needs the LuckPerms JAR and the proxy needs the matching proxy build. All servers point at the same MySQL database; messaging service handles real-time sync.

The Web Editor (the modern way)

LuckPerms has a browser-based UI that beats command-line group setup for almost everything. Workflow:

  1. In-game or console: /lp editor. The plugin generates a single-use URL.
  2. Click the URL. Edit groups, permissions, prefixes, contexts in the browser.
  3. Click Save in the top right. The editor returns a paste-back command.
  4. Paste the command into console or in-game. Changes apply immediately.

The editor is hosted by the LuckPerms team but your data never leaves your server until you explicitly run the paste-back command. Edits are local to the browser session; the server only sees the final diff.

Group hierarchy and inheritance

A working rank system needs inheritance (groups extending other groups) and weights (numeric priority for resolving conflicts). Example:

GroupParentWeightTypical permissions
defaultnone0essentials.spawn, essentials.home
vipdefault100essentials.fly, essentials.nick
moderatorvip500essentials.ban, essentials.kick
adminmoderator1000* (all permissions)

Weight matters when a player belongs to multiple groups. Higher weight wins for prefix/suffix display, but inheritance always merges permissions (more access never removes existing access unless explicitly denied).

/lp creategroup vip
/lp group vip parent add default
/lp group vip permission set essentials.fly true
/lp group vip weight set 100
/lp user PlayerName parent add vip

Prefixes, suffixes, and Vault

LuckPerms stores prefixes; it does not render them. Three pieces are required:

  1. LuckPerms stores the prefix/suffix metadata.
  2. Vault is the bridge plugin that exposes those values to other plugins.
  3. A chat plugin (EssentialsChat, LPC, DeluxeChat, ChatControl) reads from Vault and formats chat output.

Missing any of the three and prefixes will not show in chat. Common setup:

# Set the prefix
/lp group vip meta setprefix "&b[VIP] "
/lp group admin meta setprefix "&c[Admin] "
/lp group default meta setprefix "&7[Member] "

# Set a suffix (optional)
/lp group admin meta setsuffix " &7(staff)"

Color codes use the standard & format (or hex with &#RRGGBB on Paper). Test by joining as a non-OP player; OP overrides everything.

Contextual permissions (per-world, per-server)

Permissions can be limited to a world, a server, or a custom context. Use this for flight in PvE zones, command access only on the survival server, or seasonal events:

# Flight only in pvp_world
/lp group vip permission set essentials.fly true world=pvp_world

# WorldEdit only on the build server
/lp group builder permission set worldedit.* true server=build

# Combined: flight only on the lobby server's main world
/lp group default permission set essentials.fly true server=lobby world=lobby_world

List a player's contextual permissions with /lp user PlayerName permission info.

The 12 commands you actually use

CommandWhat it does
/lp editorGenerate the web editor URL. The primary admin entry point.
/lp user <name> infoShow all groups, perms, prefixes, contexts for a player.
/lp user <name> parent set <group>Assign a player to a single group (replaces previous group).
/lp user <name> parent add <group>Add a group to a player without removing existing groups.
/lp user <name> permission set <node> <true|false>Grant or deny a specific permission to a player directly.
/lp group <name> infoShow a group's permissions, inheritance, weight, contexts.
/lp group <name> permission set <node> <true|false>Grant or deny a permission to a whole group.
/lp group <name> meta setprefix "&c[Tag] "Set the group's chat prefix.
/lp verbose on <name>Start recording every permission check for that player. Debug tool.
/lp verbose pasteUpload the verbose log to a shareable URL.
/lp syncForce a reload from storage (useful on proxy networks after manual DB edits).
/lp treeGenerate the permission tree the server currently knows about. Find permission nodes you didn't know existed.

Common troubleshooting

OP overrides everything

If you are OP, every permission check returns true regardless of LuckPerms. De-op yourself (/deop YourName) when testing group permissions, otherwise you cannot tell what is granted by LuckPerms vs your OP status.

Prefix saved but not showing

Vault not installed, or no Vault-aware chat plugin running. Verify with /vault-info; you should see LuckPerms listed as the chat/permissions provider. Install EssentialsChat (with EssentialsX) if you have nothing.

"Permission node <X> was not granted"

Run /lp verbose on PlayerName, have the player retry the command. The verbose log shows which node was checked and whether any group granted it. Common cause: the permission node typo'd, or granted to the wrong group, or denied explicitly somewhere with weight overriding the grant.

Changes don't propagate across the proxy network

SQLite (default) doesn't sync across servers. Switch to MySQL or MariaDB in config.yml, point every server at the same database, and configure the messaging service (Redis or SQL polling). Run /lp sync on each backend after the swap.

JSON or YAML error after manual config edit

If you hand-edited config.yml or a JSON storage file and broke it, run the edits through an online YAML/JSON validator. Or just use the web editor next time and skip manual edits entirely.

Multi-server setup (BungeeCord, Velocity)

For proxy networks, every backend server runs the Bukkit/Paper LuckPerms JAR, and the proxy itself runs the matching proxy build (Velocity or BungeeCord). They must share a database (MySQL/MariaDB, not SQLite) and a messaging service. The most common setup:

  • MariaDB or MySQL for permission storage
  • Redis for real-time messaging (changes on one server appear on others within seconds)
  • Or SQL-polling messaging if Redis is overkill (5-10 second sync delay)

Test sync by editing a group on one backend and running /lp user PlayerName info on another. The change should appear without restart.

Storage backends

BackendBest forTrade-offs
SQLite / H2 (default)Single-server, under 100 playersNo cross-server sync. Restores from file backup.
MySQL / MariaDBMulti-server, larger networksRequires DB. Trivial to back up. Industry standard.
PostgreSQLNetworks already running Postgres elsewhereFewer tutorials online; otherwise equivalent to MySQL.
MongoDBMongo-shop infrastructure already in placeLess commonly used; community support thinner.
JSON / YAML filesTiny servers, no DB availableSlow at scale; no concurrent writes; hand-editing risk.

Switching storage backends: configure the new backend in config.yml, run /lp export current-state, restart with the new backend active, run /lp import current-state. Documented in the LuckPerms wiki.

Real-world example: 4-rank server

A standard small-to-medium server uses a 4-rank ladder: defaultdonatormoderatoradmin. Full setup from scratch:

# Create groups
/lp creategroup donator
/lp creategroup moderator
/lp creategroup admin

# Set up inheritance
/lp group donator parent add default
/lp group moderator parent add donator
/lp group admin parent add moderator

# Set weights for prefix priority
/lp group default weight set 0
/lp group donator weight set 100
/lp group moderator weight set 500
/lp group admin weight set 1000

# Permissions per tier
/lp group default permission set essentials.spawn true
/lp group default permission set essentials.home true
/lp group donator permission set essentials.fly true
/lp group donator permission set essentials.nick true
/lp group moderator permission set essentials.ban true
/lp group moderator permission set essentials.kick true
/lp group moderator permission set essentials.mute true
/lp group admin permission set * true

# Prefixes (requires Vault + EssentialsChat or similar)
/lp group default meta setprefix "&7[Member] "
/lp group donator meta setprefix "&b[Donator] "
/lp group moderator meta setprefix "&9[Mod] "
/lp group admin meta setprefix "&c[Admin] "

# Assign a player
/lp user PlayerName parent set donator

Always test as a non-OP player. OP status overrides every permission check and will mislead you into thinking your group setup works when it actually does not.

Related Minecraft Guides

Need a Minecraft server with LuckPerms pre-configured? Rent a Minecraft server with Supercraft, LuckPerms is one-click installable, Vault + EssentialsChat ready, MariaDB available for multi-server setups.

Tired of fighting this issue every patch?

Run a managed Minecraft server with us - we handle the patches, mod-version pinning, save backups, and DDoS protection. Set up in 3 minutes, 5 datacenter regions, no contract.

See Minecraft hosting plans →
Top