Plugins / Nameplates
Nameplates
Multi-line nametags on display entities: rows, conditions, animations, LuckPerms, PlaceholderAPI.
Get Nameplates
$7.99 on BuiltByBit, list price on 16 October 2026. BuiltByBit sales can lower it, the listing shows the current price.
Also in Complete Collection: Every Plugin, Server Polish Bundle.
Try it live
Nameplates runs on a public demo server, set up so you can use it yourself. Join, try it, then decide.
Address: try.zeropvp.xyz:25570 (Java Edition 1.21.11)
In Minecraft: Multiplayer, Add Server, paste the address, Join. Type /demo go nameplates to land at its booth, or right-click the compass and pick it. The world resets every night.
Free version: NameplatesLite
NameplatesLite is free to download and run on your servers. It does the basics of Nameplates; the paid plugin adds the rest.
In NameplatesLite: up to 2 rows stacked above the head on text displays riding the player, MiniMessage text, {player} {world} {health} {maxhealth} {ping} {level}, LuckPerms {prefix} {suffix} {group} {groupname} without PlaceholderAPI, per-row scale, gap, background, shadow, see-through and view range, vanilla nametag hidden, /plate to hide your own, nameplates.exempt, /nameplates reload, refresh, rows, preview.
Only in Nameplates: unlimited rows, per-row conditions ({health} < 20 and friends), per-row permissions, animations (bob, pulse, wiggle, rainbow), PlaceholderAPI, the in-game dialog editor.
Moving up: the rows in config.yml use the same keys; copy them into plugins/Nameplates/config.yml. Lite also switches itself off when the full plugin is installed. A third row in a Lite config is skipped with a console warning, not deleted.
Overview
Nameplates
Stack as many lines above a player's head as you want, each with its own text and condition
Vanilla gives you one line above a player's head, and a scoreboard team gives you a prefix on it. Nameplates gives you as many lines as you want, each one its own object with its own text, size, background, animation and the condition that decides whether it appears at all.
Built on Minecraft's own text display entities, so there is no packet library, no resource pack and nothing to break on the next update.
Stacked rows above each player: rank, level, health, name.
- Latest version
- 1.2.0
- Server
- Paper or Purpur, Java 21
- BuiltByBit
- Nameplates on BuiltByBit
What changed in 1.2.0
- Fixed: LuckPerms prefixes, suffixes and group names written with & or § colour codes (including &#rrggbb hex) showed the codes as text above the head. They are now drawn in colour, and a bold or coloured prefix no longer spills onto the name after it. PlaceholderAPI values with colour codes are converted the same way.
- Plates now go away while a player is invisible (potion), in spectator mode, or vanished by a vanish plugin (EssentialsX, SuperVanish, PremiumVanish and others that mark vanished players). Before, the plate floated on and gave the player away.
- Sneaking players get a faint plate that does not show through walls, like the vanilla name. hide.sneaking can be dim, hide or none.
- All of these are in the new hide: block in config.yml and on the Layout screen of /nameplates.
- /plate is now remembered across relogs and restarts (stored in hidden-players.txt).
- New permission nameplates.toggle (default: everyone) for /plate.
- An existing config.yml does not get the hide: block written into it, but the new defaults apply anyway. Add the block by hand, or use the Layout screen, to change them.
Features
Why server owners pick it
- As many rows as you want above every player
- Each row has its own condition, size and animation
- Built on display entities: no packet library, no resource pack
- LuckPerms and PlaceholderAPI support
- An editor in game
What makes it different
- Built on text display entities: no packet library and no resource pack
- Every row has its own condition, permission, size and animation
- LuckPerms prefix, suffix and group work without PlaceholderAPI installed
Works with
- Paper or Purpur 1.21.11 (or newer 1.21.x), Java 21+
- LuckPerms and PlaceholderAPI are both optional
- Display entities mean clients on 1.19.4+ see the plates
- No DRM, no licence key and no licence server; the code is not obfuscated
What you get
- New in v1.3.0: Hides when it should: plates go away for invisible, spectating and vanished players, and sneaking players get a faint plate like the vanilla name
- New in v1.3.0: LuckPerms colour codes: & and hex codes in prefixes and suffixes are drawn in colour
- New in v1.3.0: /plate remembered: a player's choice survives relogs and restarts
- Rows: every line is a row in the config, stacked bottom to top, with its own scale and spacing
- Conditions: a row appears only when its condition passes, for example a health row that shows up only when the player is hurt, or a badge that appears while a placeholder says so
- Permissions per row: give a rank an extra line without touching the others
- LuckPerms built in: {prefix}, {suffix}, {group} and {groupname} work with no PlaceholderAPI installed
- PlaceholderAPI for everything else, refreshed on a timer you set
- Animations: bob, pulse, wiggle and rainbow, per row, with a speed
- Backgrounds: any ARGB colour, or none at all for floating text
- See-through and shadow per row, and a view range so plates fade out at distance
- The vanilla nametag is hidden automatically, so there is no doubled-up name
- /plate lets a player hide their own, and nameplates.exempt keeps staff clean
- Everything is MiniMessage: gradients, hex colours, bold, the lot
Every player gets their own rows, filled in live.
How a row looks in the config
Each row is one line of config, switched on or off here.
rows:
name:
text: "{prefix}<white>{player}</white>{suffix}"
scale: 1.0
background: "#40000000"
health:
text: "<red>H</red> <white>{health}</white><gray>/{maxhealth}</gray>"
scale: 0.7
condition: "{health} < 20" only while hurt
rank:
text: "<gradient:#ffd166:#ff7f50><bold>{groupname}</bold></gradient>"
permission: "nameplates.row.rank"
animate: pulse
Conditions understand >, <, >=, <=, ==, !=, contains and startswith, on placeholders or plain text.
The editor
The editor: rows, layout, preview your own plate, rebuild.
- /nameplates on its own opens a real Minecraft dialog window with every row in it
- Open a row to edit its text and its permission in a field, switch the row off, step the scale and the gap, cycle the animation, and flip the shadow and see-through-walls switches
- Every change is written to config.yml and the plates are rebuilt at once, so you watch the nameplate change above the heads while the window is still open
- A layout screen holds the height, the line spacing, the view range and the vanilla nametag switch
menu: falseputs the plain help line back
FAQ
Which servers does it run on?
Paper or Purpur 1.21.11 or a newer 1.21.x, with Java 21.
Do I need other plugins?
No. LuckPerms and PlaceholderAPI are supported if you have them.
Is there DRM or a licence key?
No. There is nothing to activate and no licence server to reach, and the code is not obfuscated.
How long does setup take?
Drop the jar into /plugins and restart. The setup guide above has 3 short steps.
Can I try it before I buy?
Yes. This page has a test server with the plugin installed.
Where do I get help?
In the active support Discord, in the discussion tab on this page, or in the documentation.
Do vanished players give themselves away with their plate?
No. Plates hide for vanished players (EssentialsX, SuperVanish, PremiumVanish and others), for invisibility and in spectator mode.
Updates
Released on September 16, 2026 and updated 5 times since. The latest version is v1.3.0 (October 16, 2026). Every update is free, new Minecraft versions included.
Also by Frostyh
- Alias: nicknames with the matching skin
- Holograms: floating text and boards
- TierTags: tier lists and tags in tab and above heads
- Complete Collection: all my published plugins in one purchase, 40% off
If this plugin helps your server, a short review on this page would mean a lot. Thank you!
Installation
Requirements
- Server software
- Paper, or a Paper fork such as Purpur. Spigot and CraftBukkit are not supported: the plugin uses Paper-only APIs.
- Minecraft version
- plugin.yml api-version 1.21; built against Paper API 1.21.11
- Java
- 21 or newer
- Required plugins
- none
- Optional plugins
PlaceholderAPI,LuckPerms
Steps
- Download
Nameplates.jarfrom BuiltByBit. There is no licence key to enter. - Stop the server and put the jar into the
pluginsfolder. - Start the server. The plugin creates
plugins/Nameplates/config.ymlwith the defaults shown under Configuration. - Edit
config.ymlto suit your server. - Apply the changes with
/nameplates reload(Reload the config and rebuild every plate), or restart the server.
Setup guide
- Drop Nameplates.jar into /plugins and restart. The default config already shows a name row, a health row and a rank row.
- Edit the rows to your ranks and stats, then /nameplates reload.
- Use /nameplates preview to check the text without walking around.
SMP: name with the LuckPerms prefix, a health row that only appears when someone is hurt, a clan tag row driven by a placeholder.
RPG: a level row, a class row behind a permission, and a boss title that pulses.
PvP: a kill-streak row that only shows past three kills, and a rank row for donors.
Commands
From plugin.yml. "Not set" in the permission column means plugin.yml attaches no permission to the command itself; the nodes the plugin checks are listed under Permissions.
| Command | Aliases | Usage | Description | Permission |
|---|---|---|---|---|
/nameplates | /np | /nameplates reload|refresh|rows|preview | Nameplates admin. | not set |
/plate | none | /plate | Hide or show your own nameplate. | not set |
Subcommands in detail
/plate Hide or show your own nameplate.
/nameplates reload Reload the config and rebuild every plate.
/nameplates refresh Rebuild every plate without reloading.
/nameplates rows List the loaded rows.
/nameplates preview Print your own rows in chat, for tuning text.
Permissions
From plugin.yml.
| Node | Default | Description | Children |
|---|---|---|---|
nameplates.admin | operators | Reload and refresh. | none |
nameplates.toggle | everyone | Use /plate to hide or show your own nameplate. | none |
nameplates.exempt | nobody until granted | Never gets a nameplate. | none |
nameplates.row.rank | everyone | Shows the rank row from the default config. | none |
The store page also describes these groups and patterns:
nameplates.row.<id>: whatever you set on a row's permission
Placeholders
This plugin registers no PlaceholderAPI placeholders.
With PlaceholderAPI installed, it fills in placeholders from other plugins inside its own text.
Configuration reference
The default files as they ship in the jar, with their comments. The plugin writes them to plugins/Nameplates/ on first start.
config.yml
Top-level keys:
| Key | Default | Comment above it |
|---|---|---|
menu | true | bare /nameplates opens the editor instead of printing the help |
update-ticks | 10 | how often the text is refreshed (20 = once a second) |
base-height | 0.25 | how high the first row sits above the head |
line-height | 0.28 | spacing between rows |
mount-offset | 0 | none |
view-range | 0.5 | how far away plates are visible (1.0 is about 64 blocks) |
hide-vanilla-nametag | true | none |
hide | section, 4 keys | When a plate is taken down, so it never gives away a player who is meant to be hidden. |
rows | section, 3 keys | none |
theme | section, 11 keys | Every message below is written against these names, not against hex codes: <accent>Open</accent> rather than <#4ad0c8>Open</#4ad0c8>. Change a colour here and it changes on every screen at once. Ordinary MiniMessage still works, so <gradient:#a:#b> and... |
messages | section, 75 keys | none |
review-reminder | true | One thank-you line with the BuiltByBit review link: once in the console after install and once in chat for the first operator who joins. It never repeats and sends nothing anywhere. false turns it off. |
# Nameplates - stacked nametags on display entities.
#
# Every row below is one line above the player's head, listed bottom to top. A row shows only when
# its permission and its condition both pass, so one config covers every rank.
#
# Text supports MiniMessage, {player} {world} {health} {maxhealth} {ping} {level},
# LuckPerms {prefix} {suffix} {group} {groupname}, and any PlaceholderAPI placeholder.
menu: true # bare /nameplates opens the editor instead of printing the help
update-ticks: 10 # how often the text is refreshed (20 = once a second)
base-height: 0.25 # how high the first row sits above the head
line-height: 0.28 # spacing between rows
mount-offset: 0.0
view-range: 0.5 # how far away plates are visible (1.0 is about 64 blocks)
hide-vanilla-nametag: true
# When a plate is taken down, so it never gives away a player who is meant to be hidden.
hide:
invisible: true # while under an invisibility potion
spectator: true # while in spectator mode
vanished: true # while a vanish plugin hides them (EssentialsX, SuperVanish, PremiumVanish...)
# While sneaking: dim (faint and not through walls, like the vanilla name), hide, or none.
sneaking: dim
rows:
name:
enabled: true # a row can be switched off here or in the editor
text: "{prefix}<white>{player}</white>{suffix}"
scale: 1.0
background: "#40000000"
see-through: false
shadow: false
animate: none
health:
text: "<red>❤</red> <white>{health}</white><gray>/{maxhealth}</gray>"
scale: 0.7
gap: 0.02
background: "#30000000"
condition: "{health} < 20" # only shows when they are hurt
animate: none
rank:
text: "<gradient:#ffd166:#ff7f50><bold>{groupname}</bold></gradient>"
scale: 0.8
gap: 0.04
background: none
permission: "nameplates.row.rank"
animate: pulse
speed: 1.0
# ------------------------------------------------------------------------------------------------
# THEME
# ------------------------------------------------------------------------------------------------
# Every message below is written against these names, not against hex codes: <accent>Open</accent>
# rather than <#4ad0c8>Open</#4ad0c8>. Change a colour here and it changes on every screen at
# once. Ordinary MiniMessage still works, so <gradient:#a:#b> and <#ff0000> are fine anywhere.
theme:
accent: "#4ad0c8" # your colour: headings and anything the player is meant to click
accent2: "#9be5e1" # a lighter accent, for a second level of emphasis
title: "#f4f7ff" # screen titles
text: "#c2ccdd" # ordinary prose
muted: "#6b7a94" # hints, separators, anything the eye should skip
value: "#ffffff" # the numbers and names the player opened the screen to read
good: "#57e08a"
warn: "#ffc857"
bad: "#ff6b6b"
small-caps: false # ᴇхᴀᴍᴘʟᴇ - a garnish; whole menus in it read badly
# Real Minecraft item pictures beside the buttons and in the chest screens. Drawn from the
# client's own textures, so there is nothing to install and no resource pack: it needs a
# 1.21.9 or newer client, and older ones simply see the buttons as words.
item-icons: true
messages:
prefix: "<accent><bold>Plates</bold></accent> <muted>»</muted> "
no-permission: "<bad>You cannot do that.</bad>"
players-only: "<text>Players only.</text>"
help: "<text>/nameplates reload · refresh · rows · preview · /plate to hide your own</text>"
reloaded: "<value>Reloaded {rows} row(s).</value>"
refreshed: "<value>Every nameplate rebuilt.</value>"
rows: "<text>Rows: </text><value>{list}</value>"
own-hidden: "<text>Your nameplate is hidden.</text>"
own-shown: "<text>Your nameplate is back.</text>"
# The editor. Every line here is a screen title, a button label or a tooltip.
menu-title: "<value>Nameplates</value>"
menu-close: "<white><icon:close></white><text>Close</text>"
menu-back: "<white><icon:back></white><text>Back</text>"
menu-back-tip: "<text>Back to the screen before.</text>"
menu-everyone: "everyone"
menu-always: "always"
menu-home-rows: "<text>Rows: </text><value>{on} on</value><text> of {count}</text>"
menu-home-layout: "<text>Base {base} · line {line} · refresh every {ticks} ticks</text>"
menu-rows: "<white><icon:layout></white><accent>Rows</accent>"
menu-rows-tip: "<text>The lines above the head, bottom to top.</text>"
menu-rows-title: "<value>Rows</value>"
menu-rows-empty: "<text>No rows in the config.</text>"
menu-row-line: "<text> - </text><value>{row}</value><text>: {text}</text>"
menu-row-open-tip: "<text>Open the row {row}.</text>"
menu-row-title: "<value>Row: {row}</value>"
menu-row-preview: "<text>Text: </text>{text}"
menu-row-facts: "<text>Scale {scale} · gap {gap} · {animate} · {permission} · {condition}</text>"
menu-row-field-text: "<text>Text of this row</text>"
menu-row-field-permission: "<text>Permission, empty for everyone</text>"
menu-row-save: "<white><icon:yes></white><good>Save text and permission</good>"
menu-row-save-tip: "<text>Write both fields to config.yml and rebuild the plates.</text>"
menu-row-enabled: "<white><icon:yes></white>Row on"
menu-row-enabled-tip: "<text>A row that is off never shows.</text>"
menu-row-scale: "<white><icon:layout></white>Scale"
menu-row-scale-tip: "<text>How big the line is.</text>"
menu-row-gap: "<white><icon:layout></white>Gap"
menu-row-gap-tip: "<text>Extra space above the row below.</text>"
menu-row-animate: "<white><icon:fire></white><value>Animation: </value><accent>{animate}</accent>"
menu-row-animate-tip: "<text>none, bob, pulse, wiggle, rainbow.</text>"
menu-row-shadow: "<white><icon:layout></white>Shadow"
menu-row-shadow-tip: "<text>Drop shadow behind the text.</text>"
menu-row-see-through: "<white><icon:layout></white>See through walls"
menu-row-see-through-tip: "<text>Show the row even behind blocks.</text>"
menu-layout: "<white><icon:layout></white><accent>Layout</accent>"
menu-layout-tip: "<text>Height, spacing and view range.</text>"
menu-layout-title: "<value>Layout</value>"
menu-layout-intro: "<text>Where the stack sits and how far away it can be seen.</text>"
menu-layout-base: "<white><icon:layout></white>Height"
menu-layout-base-tip: "<text>How high the first row sits above the head.</text>"
menu-layout-line: "<white><icon:layout></white>Line spacing"
menu-layout-line-tip: "<text>Distance between two rows.</text>"
menu-layout-range: "<white><icon:layout></white>View range"
menu-layout-range-tip: "<text>1.0 is about 64 blocks.</text>"
menu-layout-vanilla: "<white><icon:layout></white>Hide vanilla nametag"
menu-layout-vanilla-tip: "<text>Hide the plain name Minecraft draws itself.</text>"
# The hide: switches on the layout screen.
menu-hide-invisible: "Hide when invisible"
menu-hide-invisible-tip: "<text>Take the plate down under an invisibility potion.</text>"
menu-hide-spectator: "Hide in spectator"
menu-hide-spectator-tip: "<text>Take the plate down in spectator mode.</text>"
menu-hide-vanished: "Hide when vanished"
menu-hide-vanished-tip: "<text>Take the plate down while a vanish plugin hides the player.</text>"
menu-hide-sneaking: "<white><icon:layout></white><value>Sneaking: </value><accent>{mode}</accent>"
menu-hide-sneaking-tip: "<text>none, dim (faint, not through walls) or hide.</text>"
menu-preview: "<white><icon:layout></white><value>Preview mine</value>"
menu-preview-tip: "<text>Print your own rows in chat.</text>"
menu-mine-shown: "<good>■</good> <value>My plate is showing</value>"
menu-mine-hidden: "<muted>■</muted> <text>My plate is hidden</text>"
menu-mine-tip: "<text>Hide or show your own nameplate.</text>"
menu-refresh: "<white><icon:reload></white><text>Rebuild all plates</text>"
menu-refresh-tip: "<text>Tear every plate down and build it again.</text>"
menu-reload: "<white><icon:reload></white><text>Reload config</text>"
menu-reload-tip: "<text>Read config.yml again.</text>"
switch-on: "<white><icon:yes></white><good><bold>ON</bold></good> <value>{title}</value>"
switch-off: "<white><icon:no></white><bad><bold>OFF</bold></bad> <text>{title}</text>"
step-up: "<value>{title} +</value> <muted>({value})</muted>"
step-down: "<value>{title} -</value> <muted>({value})</muted>"
# One thank-you line with the BuiltByBit review link: once in the console after install and once
# in chat for the first operator who joins. It never repeats and sends nothing anywhere. false turns it off.
review-reminder: trueConfig guide
The annotated summary from the store page. Where it and the default file above differ, the file is what the plugin ships.
update-ticks: 10 how often text is refreshed (20 = once a second)
base-height: 0.25 how high the first row sits
line-height: 0.28 spacing between rows
view-range: 0.5 1.0 is about 64 blocks
hide-vanilla-nametag: true
rows: ... your lines
Text placeholders: {player} {world} {health} {maxhealth} {ping} {level} {prefix} {suffix} {group} {groupname}, plus every PlaceholderAPI placeholder.
FAQ
Which servers and versions does it run on?
It needs Paper or a Paper fork such as Purpur, because it uses Paper-only APIs (the dialog API for its menus, Adventure text components). Spigot and CraftBukkit are not supported. plugin.yml declares api-version 1.21, the jar is built against Paper API 1.21.11, and it needs Java 21 or newer.
Does it need other plugins?
No other plugin is required (plugin.yml has no hard dependencies). Optional: PlaceholderAPI, LuckPerms (plugin.yml softdepend), used when present.
How do I apply config changes?
Edit plugins/Nameplates/config.yml and run /nameplates reload (reload the config and rebuild every plate). A restart works too.
Does it run on Folia, or for Bedrock players?
Not tested on Folia, and plugin.yml does not declare folia-supported. Bedrock players (through Geyser) have not been tested either.
What licence do I get?
The licence terms are the BuiltByBit EULA shown on the listing. There is no licence key to enter, and the plugin never contacts a licence server.
Links
- BuiltByBit: Nameplates
- Support Discord: discord.gg/KG4ubAZEuw
- All plugins on BuiltByBit: the collection
- More plugins: all plugins
- Custom work: commissions
Support
Questions, bugs or ideas: the active support Discord or the discussion tab on this page. When something breaks, include your server version and the error from the console.
Full setup guide, commands, permissions and config reference: documentation.