A modern Paper/Folia plugin for tablists, scoreboards, nametags, templates, and lightweight animated player displays.
- GitHub: https://github.com/Hydr46605/Tabular
- Releases: https://github.com/Hydr46605/Tabular/releases
- Issues: https://github.com/Hydr46605/Tabular/issues
- Guide: docs/guide.md
Tabular gives server owners one clean config for the player display surfaces that are usually spread across several plugins:
- tablist header and footer
- player list names
- sidebar scoreboard
- nametag prefixes and suffixes
- permission-priority layouts
- reusable MiniMessage templates
- frame-based text animations
- PlaceholderAPI expansion through Lattice integrations
- PacketEvents presence reporting through Lattice integrations
Tabular is built on the shared Lattice runtime. Install the standalone Lattice plugin on the server and keep Tabular unshaded so both plugins use the same Lattice API classes.
- Java 25
- Paper or Folia
26.1.2 - Lattice
0.8.9 - Optional: PlaceholderAPI for
%placeholder%expansion - Optional: PacketEvents for integration status reporting
- Download the standalone
Lattice-0.8.9plugin and the latestTabular-<version>.jarfrom GitHub Releases. - Put both jars in your server
plugins/directory. - Start the server once to generate
plugins/Tabular/config.yml. - Edit the config and run
/tabular reload.
| Command | Permission | Description |
|---|---|---|
/tabular |
tabular.command |
Shows current layout, template, animation, PlaceholderAPI, and PacketEvents status. |
/tabular apply |
tabular.command |
Refreshes all online player displays. |
/tabular layouts |
tabular.command |
Lists configured layouts sorted by priority. |
/tabular reload |
tabular.command.reload |
Reloads config.yml and refreshes displays. |
/tabular diagnostics |
tabular.command.diagnostics |
Shows Lattice runtime diagnostics for support and health checks. |
/tabular help |
tabular.command |
Shows the registered Tabular command tree. |
Tabular writes one config.yml with four main sections:
| Section | Purpose |
|---|---|
settings |
Global toggles such as PlaceholderAPI expansion and scoreboard restore behavior. |
templates |
Named reusable MiniMessage snippets referenced with <template:name>. |
layouts |
Permission-priority tablist, scoreboard, and nametag layouts. |
animations |
Named frame lists referenced with <animation:name>. |
Layouts are selected by highest priority. A blank permission makes the layout available to everyone; otherwise the player must have that permission.
Built-in placeholders:
<player>, <display_name>, <world>, <layout>, <online>, <max>, <ping>, <health>, <health_rounded>, <date>, <time>
Reusable template example:
templates:
brand: "<aqua><bold>My Server</bold></aqua>"
layouts:
default:
priority: 0
permission: ""
tablist:
enabled: true
update-interval-ticks: 20
header:
- "<template:brand>"
- "<gray>Welcome, <white><player></white></gray>"Tabular compiles against io.github.hydr46605:lattice-paper:0.8.9 and io.papermc.paper:paper-api:26.1.2.build.74-stable. Paper 26.1.2 publishes Java 25 API artifacts, so Tabular requires Java 25 for both building and running this version. Local development automatically uses a sibling ../Lattice checkout when present; otherwise Gradle resolves Lattice from Maven Central.
./gradlew --no-daemon --no-watch-fs clean buildThe plugin jar is written to:
build/libs/Tabular-0.4.0.jar
Tags use v<version>, for example v0.2.0. The release workflow builds the plugin jar and attaches it to the GitHub release. GitHub and Modrinth release notes are read from docs/release-notes/<version>.md. The Modrinth workflow publishes when MODRINTH_PROJECT_ID and MODRINTH_TOKEN are configured in the repository settings.