![]()
Ember Plugins · Server software · Free and open source
EmberMC¶
Ignite better performance. A Paper fork built for large survival and economy networks.

What it is¶
EmberMC is server software: a fork of Paper that you run instead of Paper, and that runs your Paper plugins unchanged. It is a general-purpose server for any network - big survival or economy servers with real player counts, real farms, and real people trying to lag them on purpose. It runs every Paper plugin; the Ember suite happens to run on it too, but EmberMC stands on its own.
It is free and open source, published by TheMeanOneDevelopments under the GNU GPL v3. Server software has to be free - the Minecraft EULA does not allow selling modified server software - and GPLv3 goes further: anyone may run, study and modify EmberMC, but any distributed fork must stay open under GPLv3 too. Nobody can close it and sell it as a proprietary product.
Where it stands¶
Honestly: early, with one measured win. The current build is Paper
a2a42c5b (Minecraft 26.2) with EmberMC branding, the /ember command, the
configuration framework, the profiler and the tuner. Its first performance
change is a default: Paper ships the Alternate Current redstone engine and
leaves it off; EmberMC turns it on. On the same host, same rig, /mspt read
Paper 3.0 ms · Purpur 2.5 ms · EmberMC 0.6 ms - all on the
Benchmarks page with how they were produced. Everything else is still Paper's
behaviour, and nothing else will be advertised until there is a benchmark to
point at.
What exists today:
A clean fork. Built on paperweight-patcher, the same tooling Paper uses. Every EmberMC change is a readable patch on top of a pinned Paper commit. Pulling a new Paper build is a one-line change plus re-applying patches.
Paper-compatible by contract. The Bukkit, Spigot and Paper APIs are Paper's,
untouched. EmberMC answers "yes" to plugins that ask whether they are running on
Paper, so nothing that works on Paper refuses to load. Its own brand id is
embermc:ember for plugins that want to know.
/ember status. TPS over one, five and fifteen minutes, MSPT, players,
entities, block entities, loaded chunks and heap, in one screen.
A profiler that is always on. Every tick is split into phases and timed for about a microsecond a tick, so when a tick spikes the server already knows what it was doing and writes it down. Per-plugin attribution is one command away.
Entity tiers. Paper's activation range is on/off: everything in range ticks fully, everything outside freezes. EmberMC splits the range into a full ring and an outer ring that ticks fully every Nth tick - and exempts anything a player is interacting with, so nothing you are fighting, leading, riding or farming is ever throttled. Measured on a live server: up to 82% lower entity tick time under 8,000 mobs, reproducible yourself with /ember bench; see Benchmarks.
A Packet Guard that shapes, not just blocks. Paper limits all packets with
one number; EmberMC limits each category - movement, commands, book edits,
inventory - with its own token bucket and its own action (log, warn, throttle,
drop, kick). A sprint and a book-spam attack no longer share a limit, and
/ember security shows exactly what is being stopped. It never logs packet
contents or authentication.
An engine that answers load. Once a second the tick's p95 picks a level -
normal, light, moderate, aggressive - with real hysteresis: five seconds above a
threshold to rise, twenty below to fall, one step at a time. Today it drives two
things, the entity tiers and the pathfinding backoff, inside floors they set
themselves; every change is one
console line with the number that caused it, and /ember status shows the level.
A tuner instead of a guide. /ember tune show performance lists every
Paper, Spigot and Bukkit key the preset would change and what a player could
notice; apply writes it with backups; revert puts upstream defaults back.
It refuses changes that would break a plugin you actually run.
Tested on a real box. The Ember suite, Floodgate, packetevents and spark all load and run on it: 12 plugins, zero errors. The plugin-compatibility matrix is recorded against that real set, not a synthetic one.
Where it is going¶
The order is deliberate: you cannot make hot paths faster until you can see them, so instrumentation comes before optimisation, and a configuration framework comes before anything that needs configuring.
| Milestone | What it brings | |
|---|---|---|
| ✅ | 1 · Fork and branding | Done |
| ✅ | 2 · Configuration | ember-global.yml, world defaults + per-world overrides, presets - see Configuration |
| ✅ | 3 · Profiler | Always-on phase timing, opt-in per-plugin attribution, spike reports - see Profiler |
| ✅ | 4 · Entity engine | Measured: entity phase up to 82% lower vs Paper under 8,000 mobs - see Benchmarks and Entity tiers |
| ✅ | 5 · Pathfinding | Failed-pathfind backoff generalised to every goal, not just entity-follow. Collision is already Paper-bounded - see Pathfinding |
| ✅ | 6 · Items and XP | Live per-chunk item cap, and an XP-orb cap that folds overflow into survivors so no experience is lost - see Item and XP limits |
| ✅ | 7 · Chunk engine | Chunk-retention diagnostics: /ember chunks shows what holds chunks loaded. Loading and saving are already Paper's - see Chunk engine |
| ✅ | 8 · Packet Guard | Per-category token-bucket limiter with a plugin-message category, unit-tested - see Security |
| ✅ | 9 · Adaptive engine | State machine drives the entity tiers and tightens the pathfinding backoff under load, all bounded - see Adaptive engine |
| ✅ | 10 · Memory and network | Idle-RAM trimmer and outbound network visibility (/ember netstat). Metadata dedup and decompression limits are already Paper's - see Idle memory, Network |
| ✅ | 11 · Compatibility | Plugin matrix verified live (12 plugins, 0 errors) and a register of every observable change with its toggle - see Compatibility |
| ✅ | 12 · Benchmarks | /ember bench reproduces the tier numbers on your own load; R1 to R5 published with their methods - see Benchmarks and Benchmark harness |
The full roadmap, with the engineering rules each milestone follows, is on the roadmap page.
The rules it is built under¶
These are not aspirations; they are the checks every change goes through.
- Stability, then correct gameplay, then TPS. A benchmark number is never a reason to remove vanilla behaviour.
- Every optimisation is measured. Before it is written, its plan records the Paper behaviour, the bottleneck, the change, the compatibility and threading implications, the expected gain and how it will be measured.
- No silent behaviour changes. Anything a plugin could observe ships with a toggle and a line in the compatibility register.
- Nothing off the main thread unless Paper's architecture already guarantees the access is safe there.
- Every cache is bounded and has an invalidation story and a metric.
- No performance claim without the benchmark that supports it.
Downloads¶
Download EmberMC 26.2 (build 1) from GitHub Releases.
Replace your Paper jar with it and start the server as normal. The first boot downloads the vanilla server from Mojang and patches it locally (Paperclip), so no Mojang code is redistributed. Java 21+ (Java 25 recommended). Your worlds, plugins and configs are untouched; to roll back, put your old jar back. Prefer to compile it? Build it yourself from source, it is GPLv3.
Commands and permissions¶
| Command | Permission | What it does |
|---|---|---|
/ember · /ember status |
ember.command.status |
TPS, MSPT, players, entities, block entities, chunks, heap |
/ember version |
ember.command.version |
EmberMC build, Minecraft version, Bukkit API, Java, Paper compatibility |
/ember config |
ember.command.config |
Active profile, console settings, file locations, each world's effective values |
/ember reload |
ember.command.reload |
Re-reads every EmberMC config file; reports what applied and what needs a restart |
/ember profiler [start [s]\|stop] |
ember.command.profiler |
Tick phases (mean/p95/p99); start or stop plugin attribution |
/ember plugins |
ember.command.plugins |
ms/tick per plugin over the session, with what it does not measure |
/ember worlds · /ember entities · /ember chunks |
ember.command.<name> |
Per-world tick cost and counts; entity types; loaded chunks |
/ember metrics |
ember.command.metrics |
Every ember_* gauge - also served at /metrics in Prometheus format when metrics.endpoint is on |
/ember security |
ember.command.security |
Per-category packet limits, actions, and allowed/blocked counts - see Security |
/ember tune show\|apply\|revert [preset] |
ember.command.tune |
Apply Paper/Spigot/Bukkit performance keys per preset, with backups and safety guards - see Tuner |
ember.command grants the command itself. All default to operators.