In short: prefixes are set in LuckPerms with lp group <group> meta setprefix <weight> "<prefix>", but they only show in chat with a chat plugin. For a simple format with prefixes, EssentialsX Chat (if EssentialsX is already installed) or LPC is enough. A swear filter, anti-spam, anti-advertising, channels and mentions come with ChatManager, while Carbon adds MiniMessage channels and shared chat across several servers. The main trap is the prefix format: some plugins expect &c codes, others MiniMessage tags.
How chat works: LuckPerms, Vault and a chat plugin
LuckPerms stores group prefixes and suffixes but doesn't format chat itself. It hands them to Bukkit-API plugins through Vault: EssentialsX Chat and ChatManager won't show prefixes without Vault and LuckPerms. LPC and Carbon require LuckPerms itself. Groups and weights are covered in LuckPerms, and Vault in economy and Vault.
lp group admin meta setprefix 300 "&c[Admin] "
lp group vip meta setprefix 100 "&6[VIP] "
# for LPC — the same prefix in MiniMessage
lp group admin meta setprefix 300 "<red>[Admin]</red> "Chat plugins compared
| Carbon | ChatManager | EssentialsX Chat | LPC | |
|---|---|---|---|---|
| Servers | Paper 1.21.1+, Folia, Velocity, Fabric; Java 21+ | Paper, Folia, Purpur | Bukkit, Spigot, Paper; Folia not supported | Paper (recommended), Spigot, Folia |
| Where prefixes come from | LuckPerms (required) | Vault and LuckPerms (required) | Vault and LuckPerms | LuckPerms (required) |
| Format | MiniMessage, per-group formats | & codes and HEX, per-group formats | & codes, &#RRGGBB by permission, per-group formats | MiniMessage, group and track formats |
| Channels | Yes: channel commands, radius, world, quick prefix | Local, global and world chat, staff chat | Radius chat; ! shouts to everyone, ? asks a question | No |
| Swear and spam filter | Regex filter; a personal /filter | Swearing, spam, caps, ads, special characters — in chat, commands and on signs | No | Anti-spam, repeats, caps, profanity mask, anti-advertising (off by default) |
| Mentions | @name with highlight and sound | @name with sound and title, @everyone | Not in the module description | @name with highlight and sound |
| Networks | Shared chat via Redis, NATS or RabbitMQ, or install on Velocity | Not described | No | Not described |
| Latest build | 3.0.0-beta.39, 18 September 2026, up to 26.3 (all 3.0 builds are beta) | 4.0.4, 9 May 2026, 26.1.2–26.2 | 2.22.0, 31 May 2026, up to 26.1.2 on Modrinth | 4.4.0, 5 July 2026, up to 26.2 |
| Code | Open source, GPL-3.0 | Open source, MIT | Open source, GPL-3.0 | Open source, MIT |
Each one in brief
Carbon
Chat built on channels: each channel has its own file with per-group formats, a command, a quick prefix (for example ! for staff chat) and a radius (-1 means none, 0 means the same world, or the same server on Velocity). It has mentions, ignore and mute, item linking with the <item> tag, party chat, and integrations with DiscordSRV, mcMMO, Towny and FactionsUUID. On a network Carbon goes either on every backend with a message broker (Redis, NATS or RabbitMQ) and an external database, or on Velocity only — then 1.19.1+ clients need SignedVelocity on the proxy and the backends. Note that the 3.0 branch still ships as beta builds.
format {
basic {
"default_format"="<luckperms_prefix> <display_name> <luckperms_suffix>: <message>"
}
}ChatManager
The "kitchen sink of chat management" from Crazy Crew: an anti-swear filter with words added in game (/antiswear add <word>, permission chatmanager.antiswear.add), anti-spam, anti-caps, anti-advertising with a URL whitelist, a special-character block, banned commands, auto-broadcasts, staff chat, social and command spy, and chat logs. Radius channels switch with /chatradius: local chat reaches 250 blocks by default. It needs Vault and LuckPerms; write group names in the config in lowercase — that's how LuckPerms stores them.
EssentialsX Chat
An EssentialsX module: one chat format for everyone (chat.format) and per-group ones (chat.group-formats), with the name, prefix, suffix, group and world inserted by the placeholders listed in config.yml's comments. chat.radius turns on radius chat (0 means global), and with essentials.chat.shout or essentials.chat.question a message starting with ! or ? reaches everyone. Colors in messages are unlocked by essentials.chat.color and essentials.chat.format, and HEX &#RRGGBB by essentials.chat.rgb. There are no filters or mentions, and the module doesn't parse PlaceholderAPI placeholders on its own. More in EssentialsX.
LPC
LPC (LuckPerms Chat Formatter) is a lightweight MiniMessage formatter: LuckPerms group and track formats, per-rank gradient names, PlaceholderAPI placeholders, [item] with a hover tooltip, mentions, emoji like :heart: and clickable links. Moderation — anti-spam, a repeat blocker, a caps filter, a profanity mask, anti-advertising and /lpc mute <player> [duration] — is off by default. Player messages can't inject click or hover components: dangerous MiniMessage tags don't work in them.
Swearing, spam and ad filters
- The word list is your job. Add the words and spellings your community uses: in ChatManager with
/antiswear add <word>right in game, in Carbon as patterns inchat-filter(the key is a regular expression, the value its replacement), in LPC in the profanity mask settings. - Bypasses. Words glued together, spaced out or written in "fancy" letters are the usual ways around a filter. ChatManager catches glued words and spaced letters and can block special characters; its docs honestly say the increased-sensitivity mode can cause false positives.
- An opt-in filter. Carbon has
optional-chat-filter: each player turns it on with/filter. - Mutes belong to a punishment plugin. LPC (
/lpc mute) and Carbon have built-in mutes, and LPC also has anlpc.mutednode that punishment plugins set. Timed mutes with reasons and history are easier to run in a ban plugin — see ban plugins. - Rules first. Write down what counts as spam, advertising and abuse — you can build the rules in our rules generator, and the principles are in server rules.
Which one to pick
- EssentialsX is already installed and you need prefixes and colors — EssentialsX Chat, but check there's a build for your version.
- You only want good-looking prefixes and MiniMessage gradients — LPC.
- You want a swear filter, anti-advertising and anti-spam out of the box — ChatManager.
- Channels, a Velocity network, shared chat between servers — Carbon.
- A Folia server — Carbon, ChatManager or LPC: EssentialsX doesn't support Folia.
Leave chat styling to one plugin: the ChatManager docs, for example, advise choosing which plugin handles color codes and turning them off in the others. Prefixes in the tab list and above heads come from TAB, not from the chat plugin, and the chat bridge to Discord is DiscordSRV.
Chat and the anticheat
A chat filter deals with words, an anticheat with actions. Some spam never goes through chat: BookBot churns out books full of ads in seconds, and AntiAFK types in chat and moves the character so the server won't kick a player who's long asleep. DGuard — the best anticheat for a modern Minecraft server — catches both: they're among the 47 cheat types in our comparison that it covers on every front — combat, movement, packets, inventory, building and the world. It gathers evidence and doesn't rush to a verdict, and you set how strict the punishments are.
FAQ
How do I add chat prefixes in Minecraft?
Give the group a prefix in LuckPerms: lp group vip meta setprefix 100 "&6[VIP] ". Then install a chat plugin that shows it: EssentialsX Chat or ChatManager (they also need Vault), LPC or Carbon.
Why doesn't my LuckPerms prefix show in chat?
LuckPerms doesn't format chat itself: you need a chat plugin, plus Vault for EssentialsX Chat and ChatManager. If the prefix shows up as &c[Admin] or with raw tags, its format doesn't match the plugin: LPC expects MiniMessage, EssentialsX Chat expects & codes.
How do I set up a swear filter on a Minecraft server?
Install a chat plugin with a filter: in ChatManager add words with /antiswear add <word>, in Carbon use regular expressions in chat-filter, in LPC turn on the profanity mask in the settings. Add the words and spellings your players actually use.
How do I make local and global chat?
In EssentialsX Chat set chat.radius in blocks: normal messages are heard nearby, and with ! and the essentials.chat.shout permission they reach everyone. In ChatManager players switch channels with /chatradius; in Carbon every channel has its own radius.
How do I share chat between several servers?
For example with Carbon: install it on every backend with a message broker (Redis, NATS or RabbitMQ) and an external database, or on Velocity only. Players need the carbon.crossserver permission to receive messages from other servers.
Sources
- LuckPerms: prefixes, suffixes and meta
- Carbon Chat on Modrinth
- Carbon: channel configuration
- Carbon: basic configuration (filter, mentions, networks)
- ChatManager on Modrinth
- ChatManager documentation
- EssentialsX: modules (EssentialsX Chat)
- EssentialsX: default config.yml (chat section)
- EssentialsX: color permissions
- LPC on Modrinth
- PlaceholderAPI: using placeholders (EssentialsXChat)
- DGuard, the best anticheat for a modern Minecraft server: checks compared with GrimAC, Vulcan, Polar, Intave and Matrix
- DGuard: installation, requirements and troubleshooting
- DGuard: supported Paper and Leaf versions