Skip to content

Compatibility

Ember Menus is one jar covering 1.16.5 through the current release, on Paper, Purpur, Folia and Spigot. Five versions across that range are boot-tested; the table below says exactly which.

Server software

Tested on
Paper 26.2-121 Verified
Purpur 26.2-2632 Verified
Folia 26.2-7 Verified, no Vault present
Spigot - Should work, not yet run

Minecraft versions

One jar, 1.16.5 through the current release, and five points across that range are boot-tested rather than assumed.

Minecraft Java Result
1.16.5 11 Boots, 10 menus loaded, 16 commands registered, no plugin errors
1.20.4 17 Boots, 10 menus loaded, 16 commands registered, no plugin errors
1.21.1 21 Boots, remapped by Paper automatically, no plugin errors
1.21.8 21 Boots, remapped by Paper automatically, no plugin errors
26.2 25 Boots, 10 menus loaded, 16 commands registered, no plugin errors

All five were run on clean Paper servers with nothing else installed, from one jar with the same checksum, on the release build. Four different Java runtimes, no UnsupportedClassVersionError on any of them.

Versions between and below those are not individually tested. Nothing here calls a version-specific API directly, so there is no known reason they would fail, but "no known reason" is not the same as having run it. If you are on one, try it and tell us either way on Discord.

Why one jar covers so much

This module compiles against the Spigot 1.16.5 API and emits Java 8 bytecode, which every JVM from 8 to 25 will load. Anything newer is reached by reflection through compat/Compat. The rest of the Ember line targets 26.2 and Java 25, which is right for those plugins and would be fatal here.

Why the plugin is built this way

Supporting one version does not mean writing for one version. Two API changes have quietly killed menu and shop plugins, and both were survivable:

InventoryView became an interface in 1.21. It had been a class for a decade. Code compiled against the old shape throws IncompatibleClassChangeError the moment it calls getTopInventory() on a modern server, and nothing in the log explains why. Every such call here goes through reflection instead.

The version string changed shape. Everything up to 1.21.x reads 1.20.4-R0.1-SNAPSHOT; the 2026 releases read 26.2.build.121-stable. A parser that assumes the old shape reads 26.2 as "major 2", decides the server is ancient, and starts turning off features that work. We hit this during development and fixed it; the parser tracks the numbering scheme separately.

Optional integrations

Every one is reached at runtime and every one is optional. A missing plugin turns one feature off; it never stops the menus loading.

For
PlaceholderAPI Placeholders anywhere, and our own %embermenus_*%. Optional, but eight of the ten bundled menus use it
EssentialsX Kit names and cooldowns, for the kits menu
Vault Money actions and conditions
Ember Coins Money, including on Folia where Vault does not run
LuckPerms Nothing directly. Permissions go through Bukkit, so any permissions plugin works
HeadDatabase hdb:1234 icons
ItemsAdder, Oraxen, Nexo, MMOItems, EcoItems Custom item icons

HeadDatabase was verified live. The custom-item hooks are written against each plugin's documented API but have not each been run on a server, and we would rather say that than imply a test we did not do.

Folia

Ember Menus declares folia-supported: true and was run on real Folia.

All scheduling goes through the region-aware schedulers, and menus are opened and redrawn on the thread that owns the player, which is the only correct way to touch a player's inventory there.

Vault does not run on Folia at all. Money actions fall back to talking to Ember Coins directly, so they keep working.

Running alongside another menu plugin

You can. They will fight over command names, and we lose on purpose: a command another plugin already registered is never taken, and the console tells you which menu wanted it. Ours stays reachable as /emenus open <menu>.

That makes it safe to install this next to your existing setup, import your menus, and switch over when you are ready.

Java

Java 21 or newer, which is what the current Minecraft release requires anyway. The jar itself is built to an older bytecode target, so the Java version is never the thing that stops it loading.