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.