What the fork actually gives you
Spigot is CraftBukkit plus years of patches. Paper is Spigot plus a second layer of patches that mostly does one thing: keep work off the main thread and throw away work nobody can see. Async chunk loading and saving, optimized lighting, entity ticking that skips what players can't perceive — most of it originally written for networks with hundreds of players, all of it useful at twenty.
In 2026 the interesting branch is Folia, Paper's experiment with tick regions owned by separate threads. For a normal survival or minigame network Paper is the default and Spigot is the exception you choose for a reason.
Three settings before you touch anything
Fork arguments take hours; these three take ten minutes and usually win:
- view-distance and simulation-distance. Ten and eight is generous for most servers. Drop the lobby to six, keep gameplay worlds at eight, and let per-player view distance on the proxy handle the flex.
- Entity activation range. Animals 32, monsters 32, villagers 16. Idle entities stop thinking every tick; farms outside those ranges cost almost nothing.
- Chunk GC. Empty worlds unload on a timer instead of lingering in memory forever.
That list has fixed more lag than any fork discussion I've sat through.
Measure, don't argue
Install spark, run /spark profiler --timeout 20 during a normal evening, and read MSPT — not TPS. TPS sits at a polite 20 while MSPT drifts 45 to 55, and one busy update tips the whole thing over. Timings is deprecated; a spark report is shareable, readable, and the first thing any good plugin author asks for.
A typical twenty-player survival on Paper 1.21 with the three settings above sits at 8–14 ms MSPT on a 4 GHz core. That's the number you're defending.
| Area | Paper | Spigot |
|---|---|---|
| Chunk IO | Async by default | Mostly synchronous |
| Tick optimizations | Many, upstreamed continuously | Base set only |
| Plugin compatibility | Near-total | Total |
| Profiling | spark first-class | Manual setup |
When Spigot is still the right call
Three real cases: a paid plugin that explicitly refuses Paper builds (rare, but it happens), a legacy server pinned to a version Paper dropped, and the week you're debugging what looks like a Paper-specific bug. Otherwise the answer is boring — Paper, three settings, spark, sleep.
PaperMC docs — Getting started — read on September 2026
spark — Minecraft profiler — read on September 2026
RnK is a Minecraft developer with six years in the game — plugins, server setups and performance work across Paper, Spigot and Folia backends. Three networks run day to day; the rest of the time is client work. The bench is open on Discord.