VoidRP UI
Real interfaces on a vanilla Minecraft client. No mods, no Forge, nothing for the player to install.
Requires Paper 26.2. This plugin does not run on Spigot or Bukkit.
Serves clients from 1.21.6 up. Open source, MIT licensed.
A screenshot of a real client, not a mockup: the player's own skin, the game's own item textures, and the cursor on the tile it is hovering.
The player turns their head, the cursor follows, and whatever it is over lights up.
Real interfaces on a vanilla Minecraft client. No mods, no Forge, nothing for the player to install.
Requires Paper 26.2. This plugin does not run on Spigot or Bukkit.
Serves clients from 1.21.6 up. Open source, MIT licensed.
A screenshot of a real client, not a mockup: the player's own skin, the game's own item textures, and the cursor on the tile it is hovering.
The player turns their head, the cursor follows, and whatever it is over lights up.
Why
A server interface in Minecraft is a chest full of items. Anything richer needs a client mod, and hardly anyone installs one. Paid tools like LocoUI draw interfaces on a vanilla client, but their pages are built in a visual editor and baked into a resource pack: data that did not exist when the pack was built cannot be shown.
Here a page is code, and everything on it is sent from the server the moment it is shown. No rebuilding the pack to add a button.
What a page can have
- Layout: rows, columns and grids that lay themselves out for the player's screen, from 5:4 to 21:9
- Style: backgrounds, 16 levels of transparency, rounded corners, borders, soft shadows and glows
- Text: the Inter typeface in seven sizes and three weights, wrapping, alignment, coloured runs
- Components: buttons, tabs, tick boxes, switches, steppers, sliders, dropdowns, progress bars, tiles, notices, dialogs
- Content: scrolling lists, tooltips, players' faces, your own PNG pictures, 788 vanilla item and block icons
- Input: a cursor driven by where the player looks, clicks, the scroll wheel, number keys, dragging, text typed into the game's own dialog
- Themes: four in the jar, and your own in a dozen colours
Four looks, one page
The same page and the same code. The whole look is a dozen colours in theme.yml.
Midnight (default)
Daylight
Ember
Grove
Daylight
Ember
Grove
Installing
- Drop the jar into plugins/ on a Paper server and restart.
- That is all. The plugin builds the resource pack and serves it itself from a built-in web server (port 8123).
Port closed, shared hosting, or behind Velocity/BungeeCord? Install the plugin on the game server, not the proxy. Put the pack on any web host, set pack.url, and point pack.publish-dir at that host's folder: the plugin copies the pack there on every start and checks in the log that the address serves the right one.
Optional: PacketEvents. With it the cursor reacts up to 50 ms sooner, older clients get the right pack straight away, and other plugins' boss bars are hidden while a page is open.
Clients
- 26.2 and newer: voidrp-ui.zip
- 1.21.6 – 26.1.2: voidrp-ui-legacy.zip
For developers
A page is a Kotlin class that answers one question: what do I look like right now?
Code (Text):
class ShopPage(private val balance: Int) : Page() {
override fun view(): View = Panel(
style = Theme.page,
width = Size.Fixed(600),
gap = Theme.SPACE_4,
children = listOf(
Text("Shop", Theme.TEXT_H2, Theme.INK, Weight.SEMIBOLD),
Text("Balance: $balance", Theme.TEXT_BODY, Theme.INK_SOFT),
button("Buy", id = "buy"),
),
)
override fun onClick(id: String, button: Button) {
if (id == "buy") { /* ... */ refresh() }
}
}
override fun view(): View = Panel(
style = Theme.page,
width = Size.Fixed(600),
gap = Theme.SPACE_4,
children = listOf(
Text("Shop", Theme.TEXT_H2, Theme.INK, Weight.SEMIBOLD),
Text("Balance: $balance", Theme.TEXT_BODY, Theme.INK_SOFT),
button("Buy", id = "buy"),
),
)
override fun onClick(id: String, button: Button) {
if (id == "buy") { /* ... */ refresh() }
}
}
How it works
A page travels as one line of text in the title of an invisible boss bar. The resource pack carries a patched text shader that recognises the plugin's glyphs by their colour and puts each one where it belongs. Hovering and clicks are resolved on the server, so the client is never trusted.
A page costs about 3 ms to lay out and is sent only when it changes. A cursor frame costs 0.02 ms and a few dozen bytes. The pack is 1.2 MB, downloaded once.
Limits, honestly
- The client reports where it is looking 20 times a second. The cursor is smoothed between readings.
- While a page is open, the player's head really does turn. Modal pages get an opaque background.
- A server cannot know the shape of the player's screen, so each player sets it once, in about five seconds.
- Shader packs (Iris, OptiFine) are fine. Mods that replace the text shaders are not.
Links
- Source and documentation
- Bug reports: please use GitHub rather than reviews, so the problem can actually be fixed
- Also on Hangar
Quick facts
- Edition: Minecraft Java
- File type: .jar
- Minecraft version listed: 26.2
- How to install: Install the matching mod loader (Forge, Fabric or NeoForge) for your Minecraft version. → Download the .jar. → Put it in the .minecraft/mods folder and launch that loader profile.
- Where to get it: Opens on Spigot — not every file is mirrored on our own servers.
Install steps are the general flow for this file type — How to install Minecraft Java mods & modpacks walks through it step by step.
VoidRP UI is a free Minecraft Java mod. Compatible with Minecraft 26.2. Downloaded 3 times (via Spigot). Download it and open it directly in the game.