PaperMC/Paper: The most widely used, high performance Minecraft server
github.com
github.com
We've switched entirely over to Paper for everything because it works so much better than vanilla, and it also enables us to put it behind a Velocity proxy (Minecraft Java Application layer proxy also developed by the same group that develops Paper) for better scalability, more secure infrastructure, and some cool features like enabling any version of Java edition to join the same server (mad props to the ViaVersion & ViaBackwards plugin teams that make this possible!). This is impossible to do with Vanilla. We do all of our own content development creating the activities the kids do during the events, and the plugin ecosystem that someone else mentioned is hugely helpful for this. I especially want to call out how awesome the Geyser and Floodgate plugins are — they make it possible for Java and Bedrock clients to play together in the same world, which makes our customers lives so much easier.
We're hiring part time / contract developers, event hosts, and technical support personnel. If this sounds interesting, please reach out. My contact info is in my profile.
I have Minecraft on iOS, as well as two Java licenses. You can have both mixed on the same server if you are using Paper with Floodgate and Geyser. It's great; my younger child can use iOS, while my elder kids can use the java licenses on their computers.
Bedrock also has a different combat model that lacks the indicators java has.
A comprehensive list is here: https://minecraft.wiki/w/Minecraft_Wiki:Parity_issue_list
1. Pure vanilla server.jar. Has horrible performance, little flexibility, but in the end, it Just Works. This is the server that Realms (Mojang's paid hosting service) uses. In recent versions, some modding is possible via datapacks.
2. Fabric Loader and some vanilla-compatible mods like Carpet etc. Here, "vanilla-compatible" means that a vanilla client can still connect. This is the preferred way of playing for the TMC (Technical Minecraft) community since the underlying server stays mostly vanilla, down to the smallest details and bugs, and no behaviors are changed. The TMC community becomes very agitated when someone tries to "fix" some bugs - they rely on those bugs.
3. Forge/Fabric with mods that change the gameplay, and require the mods to be present on both client and server. This is the traditional "modded" experience, as seen on TV.
4. Bukkit/Spigot/Paper/Purpur, various generations of server software that heavily patches the vanilla server, fixing bugs, adding new functionalities, and presenting a very comprehensive Plugin API, while still allowing vanilla clients to connect. This is the software used by servers that implement custom gamemodes, public servers that need griefing/duping/exploit protection. Many high tech farms don't work on Paper because of how many things it "fixes".
5. Folia - a fork of Paper that has multithreading support. It comes with its own can of worms.
Performance-wise, Fabric+Lithium is probably the most performant in the default configuration, though if you're willing to remove functionality, you can probably get better performance out of Paper (at the cost of losing gameplay features).
As for Bugrock Edition: well... there is Geyser that lets you connect to a Java Edition server with a Bedrock client. ;)
There's some history in the "Bukkit" family that might make their chaos make more sense.
In the beginning, there was Bukkit, which was a plugin API. And there was its reference implementation, CraftBukkit. It was very popular, Bukkit was the de facto API for server-side modding, and I made 50 bucks off of advertising revenue share for downloads of my plugin, which was a lot for me as a high schooler with one (1) year of java experience. Times were good. Where was I? Oh yeah.
So, for a long good while, times were swell. Then iirc Microsoft announced they were acquiring Mojang (I think this was the precipitating event? Someone correct me if not). And the main Craft/Bukkit guy threw in the towel and pulled a very clever poison pill: he DMCA'd his own repos. You see, Mojang essentially didn't care about server.jar distribution because they were a cool indie company. So CraftBukkit just included it. Which meant it was always in violation of Bukkit's GPL license since that code wasn't open source.
So anyway, CraftBukkit explodes in a supernova and the resulting stellar nursery produces Spigot which pioneered the distribution strategy that all successors would then use - they distribute a decompilation map and their source, then you run a jar that downloads server.jar and performs the unholy mixing of licenses on your machine.
This is where I left the scene so I only have a summary from here on out. Spigot is the main go-to for a while, but the stellar nursery is still hot, and so various creative differences produce Paper, which seems to have mostly caught on to replace spigot though it seems like spigot is still a nontrivial player as well. And these all still implement the same ole GPL licensed Bukkit API.
So Bukkit wasn’t the first. It was hMod in 2010. Everyone came over from hMod because hey0 disappeared for a hot minute in late 2010. Everyone from Bukkit came from hMod, although there were also holdbacks who didn’t like someone stealing the hMod community, but a gathering of major plugin developers and devs from hMod forced everyone’s hand (but also, hey0 disappeared for a relatively long time with no explanation).
hMod also had a problem: it didn’t attempt to reverse any of the code obfuscation from Mojang, so working with it was extremely difficult. When hMod came about, it predated the MCP project as well by like 3 months, which started as a major community effort to deobfuscate the codebase. Bukkit came after MCP and could take from it inspiration.
We are still in year 2010.
Fast forward many years later… Microsoft had nothing to do with what happened actually. Bukkit was secretly owned by Curse, and much later Mojang secretly bought Bukkit.
This secret sale pissed off a lot of the community and one of the core but non-OG contributors (Wolverness — he joined Bukkit much later) issued a DMCA against the codebase as a form of protest. This was obviously controversial but he also had a lot of support.
Mojang actually never substantially interfered with the wholesale illegal distribution of its source code.
Anyway, because Mojang was officially hiring the Bukkit team, but only limited to some members from the OG 2010 team, and with the other core contributors not being included at all, and with the DMCA taking down the repos, Bukkit became dirty and there wasn’t a future for Bukkit anymore. Spigot, which was then a performance fork of Bukkit, became the de facto successor (not to say that there weren’t many other options and competing choices in play too).
Spigot didn’t create their distribution strategy though. MCP did things this way.
hMod! That was before my time, though I remember the name now.
A good recap; https://blog.jwf.io/2020/04/open-source-minecraft-bukkit-gpl...
Not that that API isn't impressive. I was also surprised to learn MCC uses it.
Minecraft server software marketshare is tracked with bstats. Paper (58.3%) is a fork of Spigot (21.3%) and is more open to contributions and has a lot more performance enhancements. Spigot continues CraftBukkit which implements the Bukkit API. Spigot only really exists to update to the latest game version and no longer receives performance enhancements. Purpur (10.1%) also exists and forks paper, and add gameplay features that couldn't be forked into Paper.
The largest non-bukkit competitor is Fabric, which is nice because by default it changes no gameplay behavior. Spigot and all forks change gameplay behavior to improve performance and make implementing the API easier in subtle ways. Paper is more suitable for a public server as it patches exploits by default while Fabric is better for a more technical or private server as it doesn't break vanilla behavior .
Bukkit-based servers can be made compatible with Bedrock edition with the Geyser plugin
From that perspective, Paper is much more commonly used by commercial server owners (since they're catering to the very large audience of casual users who don't want to install mods) and casual users paying for a server host for their friends who just want a couple of small tweaks, while Fabric and Forge are generally used more by smaller groups of dedicated power users who want a lot of extra mods
Paper and Forge both focus primarily on providing a large extension API through modifying the decompiled Minecraft source code, while Fabric takes a different route by providing primarily an extensive dynamic Java bytecode modification library that allows developers to effectively "build their own API" by modifying the vanilla Minecraft classes at runtime. This means Fabric is generally much faster and easier to update to newer versions, and most smaller mod developers have adopted it as their preferred platform of choice due to the more powerful tools, and use open source libraries to make up for the lack of a built in API. (These are generalizations, of course, and Forge and Fabric have experienced a fair amount of convergent evolution at this point as well.)
On the performance side, there's a new experimental Paper-like server called Folia from some of the core developers aimed at providing radical parallelism. Normally, all Minecraft servers run their main gameloop on a single thread, and the largest of server operators deal with the issue by providing front end proxies that shard users to different servers, which limits interactivity. From a technical complexity level, you could almost compare it to a GIL-less server reimplementation. All, again, built as patches onto the decompiled Minecraft source code. It's gaining more stability and has been used in some very exciting public tests
As for competitors...well it is not really a competition -- it just depends on what you are focused on for your player-base. Paper is a performance-focused fork of Spigot which is an, to very loosely describe, "interface" for Bukkit. Bukkit itself is an API for Minecraft that interfaces with plugins/mods. If someone is running "modded" Java Minecraft, they are likely touching one of these, or even a fork of Paper.
Paper adds some features/tweaks on-top of Spigot and if your server is having some performance issues or you want a specific feature that Paper offers then you would utilize Paper. If you are fine on Spigot, you use Spigot.
Personally I have always used Paper when hosting servers, as performance (less "rubber-banding" with higher player-counts) was my focus in that time. As well Paper offered the configurable option of "per-player" mob spawning, so we did not have a single player that stood above a cave hogging all of the mob spawns.
I was researching Java edition specifically, however among the ones linked below, at least one (Nukkit) has a Bedrock (C++) edition.
Many of these are related, e.g. Paper is based on Spigot which in turn is based on Bukkit.
Paper seems to be the most widely used currently.
Paper https://papermc.io/
Spigot https://www.spigotmc.org/
Bukkit https://dev.bukkit.org/
Nukkit https://cloudburstmc.org/articles/
Folia (mod for Paper) https://github.com/PaperMC/Folia
PaperBin (mod for Paper) https://github.com/x4e/PaperBin
- QuiltMC, which is a fork of FabricMC - NeoForge, which is a fork of Forge
Both have their own benefits and downsides, and are mostly comparable with their originals.
I specifically mean some kind of all-in-one solution rather than a hodgepodge of tools and bash scripts.
Something that gets one close to the Minecraft Java Realms experience + mods, which one can just provision on their EC2 instance or wherever they may run the Minecraft server.
[1] https://pterodactyl.io/community/config/eggs/creating_a_cust...
[2] https://streamable.com/hlscux (an example of a panel for a server I administer)
Licensing wasn't so much a problem in the early days of Minecraft. The first really popular server mod (CraftBukkit) not only provided binaries, but deopfuscated server code on a GitHub repo (since DMCA'd): http://github.com/bukkit/craftbukkit. That repository was ostensibly licensed as LGPL, but no one really believed that, given it was derived from Mojang's proprietary binaries.
Mojang eventually acquired CraftBukkit and hired their devs. And there's an interesting footnote: for several months, Mojang didn't tell anyone they'd acquired CraftBukkit, and they kept making releases to the public GitHub repository. Given it was Mojang making these pushes, I believe (IANAL) that they are officially-licensed LGPL versions of the Minecraft server, albeit ~10 years out-of-date now.
Actually, it's a lot more interesting than that. My understanding was that said contributor realized that since Bukkit is GPL, it can't be legally distributed combined with proprietary Mojang code. His takedown notices were based on GPL violation, not just revoking authorization (which he probably can't do with the GPL?)
Oh this is an interesting legal area to explore. I wonder what you could do with that?
Does anyone have experience with this?
It's much, much more performant, and able to handle a lot more players/chunks loaded/etc on the same setup compared to a vanilla server. Along with significant performance improvements out of the box, it also adds more configurations (vanilla has server.properties, but papermc adds paper.yml) which allow you to hand tune optimizations[1], from things like disabling player collisions, disabling block updates for certain laggy blocks, etc. These changes are configurable because they trade off expected vanilla behavior for better performance.
The real strength of paper though is that they do all this while also implementing the spigot API, which enables paper server owners to use a wide variety of server mods[2] that can allow you to add things like minigames, anticheat, etc while still being compatible with unmodified clients.
[1] https://www.spigotmc.org/threads/guide-server-optimization%E... (outdated but a bit more succinct) https://paper-chan.moe/paper-optimization/ (more technical)
Some things that you can tweak for performance reasons also affect gameplay. For example, you can tweak the radius at which items group together into stacks of entities. Enabling this can make certain farm builds not work, e.g. a piglin bartering farm might have the gold bar destined for one piglin merge with the bar destined for a neighbouring piglin, when in pure Vanilla settings that might not happen. Similarly, you can have XP orbs merge into single orbs with higher XP values. But this drastically changes how long it takes to use an efficient XP farm, where normally you would be waiting for minutes for your player to receive the XP one orb at time.
Basically just enable the unsupported settings. My players were happy with the end result of each one I flipped on so presumably the behavior was as expected.