Most servers need three pieces of on-screen information: floating text in the world (holograms), a sidebar on the right (the scoreboard), and a formatted player list with a header, footer and rank prefixes (the tab list). The usual stack on Paper is DecentHolograms for holograms, the TAB plugin for the tab list, nametags and sidebar, and PlaceholderAPI feeding both with live values such as a player's balance or rank. All three are free and well maintained. The thing to get right is refresh rate: every placeholder on every line is resolved for every player on every refresh, and a sidebar that updates fifteen lines ten times a second for fifty players is a measurable slice of your tick. Vanilla commands - text display entities and /scoreboard - are enough for simple servers and cost nothing extra.
This guide covers each piece, the commands and config you need, and how to keep them cheap. Rank prefixes depend on your permissions setup, covered in LuckPerms.
PlaceholderAPI: the glue#
Almost everything dynamic on a scoreboard or hologram comes from PlaceholderAPI. It is a plugin that lets other plugins expose values as placeholders such as %player_name%, %vault_eco_balance% or %luckperms_prefix%, and lets display plugins ask for them.
PlaceholderAPI does not contain most placeholders itself. They come in expansions, downloaded from its eCloud:
/papi ecloud download Player/papi ecloud download Vault/papi ecloud download Server/papi ecloud download LuckPerms/papi reload/papi parse me %player_name% has %vault_eco_balance_formatted%/papi parse me <text> resolves placeholders for you and prints the result, which is the fastest way to check a placeholder works before putting it on a scoreboard. If it prints the placeholder unchanged, the expansion is missing or the providing plugin is not installed. Some plugins register their placeholders themselves and need no expansion; their documentation says which.
Install PlaceholderAPI first, then the display plugins. The display plugins call it; it calls the expansions; the expansions call the plugins that own the data.
Holograms with DecentHolograms#
DecentHolograms is the common free hologram plugin on current Paper. A hologram is a stack of lines at a location; lines can be text, items or player heads, and holograms can have multiple pages that players click through.
/dh create welcome &6Welcome to the server/dh line add welcome 1 &7Type &f/rules &7before you build/dh line add welcome 1 #ICON: DIAMOND_PICKAXE/dh line add welcome 1 &7Online: &f%server_online%/dh movehere welcome/dh list/dh delete welcomeWhat those do:
/dh create <name> [content]creates a hologram where you stand with an optional first line./dh line add <hologram> <page> <content>appends a line to a page. Page1is the first.#ICON: <MATERIAL>makes a line a floating item instead of text.- Placeholders work in lines when PlaceholderAPI is installed.
Holograms are saved as files in plugins/DecentHolograms/holograms/, one per hologram, which makes them easy to edit in bulk, copy between servers, and back up.
DecentHolograms holograms are packet-based: the server does not create real entities for each line, so a lobby full of them costs little server-side. The cost is in updating. Each line containing placeholders is refreshed on an interval for every player who can see it; keep the update interval long for slow-changing values (a leaderboard does not need to update every second) and keep placeholder-heavy holograms out of busy spawn areas.
Older servers often use HolographicDisplays, which created armour stands for each line. It is less actively developed for current versions; FancyHolograms is another current option, built on display entities. Pick one hologram plugin and stay with it.
The vanilla alternative
Since 1.19.4, Minecraft has text display entities that do the same job without any plugin:
/summon minecraft:text_display ~ ~2 ~ {text:"Welcome to the server",billboard:"center"}billboard:"center" makes the text always face the player. That form uses the 1.21.5 and later text syntax; earlier versions expect the text as a JSON string. Text displays are real entities, saved with the world, and they do not support PlaceholderAPI. For a handful of static signs on a small server, they are perfect. For anything dynamic or anything you will rearrange often, a plugin is easier.
Sidebar scoreboards#
The sidebar is the box on the right of the screen. Vanilla limits it to 15 lines and one objective at a time per display slot.
The vanilla way, which is enough for minigames and simple stat tracking:
/scoreboard objectives add kills playerKillCount "Kills"/scoreboard objectives setdisplay sidebar kills/scoreboard objectives modify kills numberformat blankThe last line (1.20.3 and later) hides the red score numbers down the right side, which is what most people want from a decorative sidebar. Vanilla scoreboards cannot show per-player dynamic text such as a player's own balance, which is why servers use plugins.
A plugin sidebar shows each player their own lines, built from placeholders. TAB has a sidebar module (below), and dedicated scoreboard plugins exist. Two rules for any of them:
- Fifteen lines is the ceiling, and readable sidebars are usually under ten. Server name, rank, balance, online count, website. Nobody reads line thirteen.
- Refresh what changes. The online count can update every few seconds; the website address never changes and should not be re-resolved at all.
The tab list with TAB#
TAB, by NEZNAMY, is the standard for the player list. It handles the header and footer, the format of each player's name in the list, sorting by rank, nametag prefixes and suffixes above heads, the sidebar, belowname and playerlist objectives, and boss bars. It runs on Paper and on Velocity or BungeeCord, so on a network it can manage the tab list across every backend.
Configuration is in plugins/TAB/config.yml, with group and user overrides in groups.yml and users.yml (or a database on networks). The structure has changed between major versions, so start from the file your version generates. A simplified header and footer looks like this:
header-footer: enabled: true header: - "&6&lMY SERVER" - "&7Survival - 1.21" footer: - "&7Online: &f%online% &7Ping: &f%ping%ms" - "&7example.com"%online% and %ping% are TAB's own internal placeholders and do not need PlaceholderAPI. PlaceholderAPI placeholders work too, once it is installed.
Prefixes and sorting come from groups. TAB can read the group from LuckPerms and apply a prefix per group, and sort the list so staff appear at the top:
admin: tabprefix: "&c[Admin] " tagprefix: "&c"vip: tabprefix: "&a[VIP] "_DEFAULT_: tabprefix: "&7"tabprefix is the prefix in the player list; tagprefix is above the head. Rather than writing prefixes in TAB at all, many servers set them in LuckPerms and use %luckperms_prefix% in TAB, so a rank has one source of truth.
Refresh rates and what they cost#
This is the part that decides whether your display plugins are free or a lag source.
Every placeholder is a small piece of code. %player_name% is a lookup; %vault_eco_balance% asks the economy plugin, which may query a database; some third-party placeholders iterate over every online player or every claim. Display plugins resolve placeholders on a timer, per player.
The arithmetic for a sidebar: 50 players x 10 lines with placeholders x 10 refreshes a second = 5,000 placeholder resolutions a second. If one of those placeholders is slow, the server is slow.
TAB lets you set refresh intervals per placeholder in config.yml, under a section for PlaceholderAPI refresh intervals with a default and per-placeholder overrides, in milliseconds:
placeholderapi-refresh-intervals: default-refresh-interval: 500 "%server_uptime%": 1000 "%vault_eco_balance%": 2000 "%player_name%": -1-1 means never refresh after the first resolution, right for values that cannot change during a session. Long intervals are right for anything that changes rarely: a balance updating every two seconds is indistinguishable in play from one updating every half second.
TAB also has /tab cpu, which prints how much CPU time each TAB feature and each placeholder is using. If a placeholder is expensive, it shows up at the top. It is the first command to run when you suspect your tab or sidebar setup, before reaching for spark. If you do need the full picture, reading a spark report shows display plugins in the call tree like everything else.
Leaderboards, timers and other common displays#
Most servers end up wanting the same handful of displays beyond the basics. Each has a cheap way and an expensive way.
Leaderboards. A "top ten richest players" hologram at spawn is a classic. The expensive way is a placeholder that sorts every account in the economy each time it is resolved. The cheap way is a plugin or expansion that caches the sorted list and refreshes it every few minutes - most economy and statistics plugins that offer top-list placeholders do this, and their documentation says how often. Set the hologram's update interval to match. Nobody notices that the leaderboard is three minutes old; everybody notices if the server hitches every time it refreshes.
Playtime and statistics. Vanilla statistics placeholders read from player stats already held in memory, which is cheap for online players. Placeholders that read offline players' statistics from disk are not, and should never appear on a frequently refreshed line.
Event countdowns. A countdown to a weekly event in the sidebar or a boss bar is popular and harmless if it uses a placeholder that computes from a fixed time. Avoid countdown implementations that run a repeating task per player.
Per-world sidebars. TAB and most sidebar plugins can show a different sidebar per world or per condition - a minigame sidebar inside an arena, a survival one elsewhere. Use conditions rather than several plugins each owning the sidebar in a different world; two plugins fighting over the same display is the most common cause of flicker.
Staff information. A staff-only line showing TPS or MSPT is useful and cheap, but gate it behind a permission so normal players never resolve it. TAB supports display conditions based on permissions for exactly this.
The rule across all of them: decide how stale each value may be, and set its refresh to that. A display that is accurate to the millisecond is paying for precision nobody can see.
Networks, Bedrock and other edge cases#
Proxy networks. Install TAB on the proxy for a tab list that shows players across every backend, with consistent prefixes. Placeholders that depend on the backend - a player's balance on survival - need TAB's bridge plugin on the backends to pass PlaceholderAPI values up. Holograms stay per backend. A Velocity proxy network covers the layout.
Bedrock players. Through Geyser, Bedrock clients see the tab list and sidebar, but formatting may differ - some colour codes and widths render differently. Keep layouts simple if a large share of your players are on Bedrock. Geyser crossplay has the details.
Teams conflict. Nametag prefixes use scoreboard teams. Only one plugin can control a player's team at a time. If TAB, a nametag plugin and a minigame plugin all set teams, prefixes flicker or vanish. Pick one owner for nametags and disable the feature in the others.
Flickering sidebars. Older scoreboard plugins rebuilt the whole sidebar on every update, which some clients render as flicker. TAB and modern plugins update lines in place. If you see flicker, it is usually a second plugin also writing to the sidebar.
On RE:NODE the console has tab completion, which helps with long /dh and /papi commands, and the file manager has a syntax-highlighting editor for TAB's YAML, so an indentation mistake is visible before you reload. The CPU graph against your plan's limit makes it obvious if a new sidebar cost something.
A sensible starting setup#
For a typical survival server:
- PlaceholderAPI with the Player, Server, Vault and LuckPerms expansions.
- TAB with a two-line header (server name, game mode), a footer with online count and website, LuckPerms prefixes, staff sorted first.
- A sidebar of six to eight lines: rank, balance, online, playtime, website. Placeholders refreshing every one to two seconds, static lines never.
- DecentHolograms at spawn for rules, a welcome, and a weekly leaderboard that refreshes every minute.
/tab cpuchecked after setup and after every addition.
That covers what players expect to see without spending tick time on it. Everything beyond that - animated headers, rainbow nametags, a hologram on every warp - is taste, and each piece has a small cost worth measuring. If you are building a full network spawn, the plugins worth installing puts these in context with the rest of the stack.
FAQ#
Do I need PlaceholderAPI for TAB?
Not for TAB's own placeholders such as %online% and %ping%. You need it for anything from other plugins - balances, ranks from LuckPerms, claims, playtime. Most servers install it.
Why does my scoreboard show red numbers on the right?
That is the vanilla score display. On 1.20.3 and later, /scoreboard objectives modify <objective> numberformat blank hides them for vanilla objectives; plugin sidebars usually have an option to hide them as well.
Are holograms bad for performance?
Packet-based holograms such as DecentHolograms cost little to exist. The cost is in updating placeholders on many lines for many players. Keep update intervals long and avoid placeholders that do heavy work.
Why do prefixes keep disappearing or flickering?
Two plugins are both controlling scoreboard teams or the sidebar. Choose one plugin to own nametags and one to own the sidebar, and disable those features elsewhere.
Can I use vanilla commands instead of plugins?
Yes, for static holograms (text display entities) and shared scoreboards such as kill counts. Vanilla cannot show each player their own dynamic values or a formatted header and footer with live placeholders.




Comments
Completely anonymous: no account, no email, no cookie. We store the name you type, the text and the time - nothing else. Links are limited and markup is not rendered.