Fabric vs Paper, what to use?

What software better fit your needs?
Before starting
Before starting, this discussion will be limited to only Paper vs the server-side only component of Fabric.
If you need a client-side component or both client-server enforced modifications, then there's only one answer: use Fabric.
Client-side modifications do not exist on Paper, as it is completely server-side,
What is Fabric
Fabric is a mod loader for Minecraft.
It targets both, client and servers modifications using mixins.
What is Paper
Paper is a server-side modification framework for Minecraft.
It targets specifically server-side modifications via its API.
It is part of the Bukkit family of server software, which dates from around 2010.
What do you want to do
There is no such thing as "the best server software", both Fabric and Paper serve entirely different purposes.
Therefore is important to actually understand your own needs in order to pick the option that better suit your needs.
In the world of software we call this a use case, which describes your requirements and the use you're going to give the system.
In this case, what do you plan to do?
Want to play with friends? For how long are you going to play? What kind of gameplay do you and your friends have?
Or maybe, want to open a public SMP? Is it going to last months or years? Do you have an already established community or are you just starting?
How each community evolved
Bukkit has been around for more than a decade, since the alpha versions of Minecraft, at the time the only notable options were hMod, Forge and Bukkit.
If you wanted to make a server without forcing your players to install anything on their client, your only viable option would be Bukkit,
since hMod took at huge performance hit on servers.
Most of the servers that required to be modified server-side while fully allowing vanilla clients to join, were public servers, those
that sell you ranks or advantages, provide minigames and such.
The community evolved around that concept, and plugins were built to provide server admins with multiple tools from common staff utilities, to
fully dedicated minigames.
Due to the high demand, and performance limitations of Minecraft, the Bukkit community created the first proxy, Bungeecord, which allowed to connect
multiple Spigot servers, allowing for the creation of Networks, where you can dedicate an entire server for the lobby, another for your SMP, another for
one type of minigame, maybe other minigames, etc.
On the other hand, Fabric is a project that dates from 2018.
Compared to Bukkit, Fabric is a complete modding framework, allowing you to create client and server modifications, enforcing or not to have said modifications
on both sides.
As such, Fabric has taken the role to entirely modify the game, without limitations.
Want to play Pokémon inside Minecraft? Look no further than Cobblemon. Want to build your own machines and automation systems? Look no further than Create.
Fabric has evolved to allow both developers and players to make their dreams come true and, as such, fabric mods have been made around
the possibility of modifying your game as much as you want.
Vanilla behavior
Due to the evolution of Bukkit, a lot of modifications were made to the commercial side of Minecraft servers, ranging from performance to others related to
minigames. You can take a look at older versions of Bukkit and see that snowballs inflict knockback on players, while in vanilla those only disappear.
Paper, been built on top of Bukkit, while they have been restoring vanilla parity, they have also broke other behavior for the sake of performance, such as
TNT trajectories.
Fabric on the other hand, is a modding framework, if you don't add anything, it will not modify anything, which allows you to keep a perfect vanilla parity from the start. You also have the freedom to add mods like Lithium to boost your performance without sacrificing vanilla behavior in any way.
Exploits
This is where things start to change, and the question from the beginning will start to make sense.
If your server is going to be public, with no whitelist and advertised all over the internet, you have a new concern: to keep the server running at all costs.
When you play with friends and the server goes down, you laugh and turn it back on. But the people joining now are not your friends, and are
more akin to a customer, the server cannot just go down, and even worse, it cannot go down because someone is crashing it intentionally.
Even worse, in a server for only friends, it is very unlikely that anyone allowed will be crashing the server intentionally.
Let's put an example easy to understand: The bundle exploit.
The only thing any player had to do when the exploit became public was to find a bundle, and send a packet requesting to drop the item at index -1.
It was extremely easy to pull of, and all servers were vulnerable.
The exploit was fixed on Paper and all servers were protected after updating, while Fabric, being a modding framework, was not up to them to fix it,
and required looking for a mod that would fix it. You had to be aware of the crash existence to even thinking of fixing it.
This example can be extended to almost any exploit you can think of, there are not just a few exploits out there.
If the server is going public, your best option will be Paper, or use Fabric and pray that AntiCrasher gets
updated fast enough.
Dupes
When you make a public SMP you usually have to think of an economy, specially when you're going to have an in-game store to sell custom items.
It wouldn't be funny to make a custom set of armor, sell it for 500 in-game currency that you only get after playing for around a month,
and some dude that joined 2 days ago managed to buy after duplicating large amounts of sand and sell it in the store.
There are countermeasures sure, like not allowing sand to be sold in the store, or using a plugin that changes prices based on supply/demand.
But, do you have that option? Also, what about dupes or other gameplay exploits that you're not aware of?
Dupes simply break economies and not all people are prepared to handle them appropriately.
While I'm personally not a fan of dupes, they have become an integral part of Minecraft at this point and are fun for most people. Paper fixes all dupes and exploits, most server owners don't want those in their servers, but allows some of them to be re-enabled, like the sand dupe or tnt dupes (this one is cool).
Still, if you like to use these dupes or other kinds of gameplay exploits, your best option will be Fabric.
The Plugin/Mods ecosystem
This part might be the easiest or the most complicated to explain so far.
The easy part:
If a mod/plugin you want to use is only available in one platform, then just use that platform.
If a mod is not available for Paper, use Fabric, if a plugin does not have a mod version for Fabric, then just use Paper.
Now, the complicated part, you might notice there are a certain kind of plugins that are not available as mods:
- EssentialsX is not available as a Fabric mod, nor does it have any equivalent.
- Land protection plugins? Missing in Fabric too, there's one but only available for 1.21.1.
- Logging plugins like CoreProtect or prism? Also missing in Fabric.
This is mostly related to the evolution of each community, land protection, logging players actions and other management-related
operations are not usually a concern for a Fabric server, it is a concern for servers that will go public.
I want to be clear, is not like Fabric cannot handle those, Fabric is much more powerful than Paper on almost any sense, is that
there's not much interest in their community for those kinds of tools, and no one develops or actively maintains any.
I personally use a pair of plugins called MythicMobs and ModelEngine which allows to create entities fully server-side by
using packets and resourcepack tricks. The user does not require to install anything on their client, they can just join.
Why would something like that exist on Fabric if you can just modify the client to add said entities?
And this is not just an advantage of Paper over Fabric, the same happens the other way around:
- e4mc is not available as a plugin.
- Carpet is also not available as a plugin.
- Vivecraft cool but still not available in Paper.
There's just not much interest in porting these mods to Paper.
Optimization
Paper comes bundled with a lot of performance enhancement for the Minecraft server.
And server owners are free to optimize their servers even further via their configuration files, which allow you to specifically
target the parts of the game that are making up most of your server lag.
There's an amazing guide made by @EterNity
which I highly advise you to read for more detailed explanations.
In Fabric, you can use Lithium to optimize your server. But there's not much you can do besides just installing Lithium.
Which one is faster?
Personally, I always find Paper to be faster than the combination of Fabric + Lithium.
If you want to properly compare the two, first, work in an isolated Linux environment. DO NOT USE WINDOWS, as
some optimizations like packet compression are Linux-only, plus Windows has a lot of background noise from other processes.
Do not rely on the GUI or the /mspt command for comparison, use a proper tool like spark
and start a profiler session using /spark profiler start --timeout 300.
Finally, run the test with a realistic number of expected players. Lag DOES NOT SCALE LINEARLY, if you run the test while
being the only player online, the results will be heavily biased.
Avoid world-generation comparisons, as Paper loads and generates chunks asynchronously, and provide and API that plugins can
use to fully take advantage of that feature, which makes it unfair for Lithium.
Comparisons of this kind will be severely biased in favor of Paper.
Stability
You can actually get a similar performance for chunk generation in Fabric by using mods like C2ME.
And this is where the next point starts, how long do you plan to run your server for?
Paper relies on a project called Moonrise from which it draws most of its performance.
C2ME is faster than Moonrise in almost every way, however its performance came at the price of stability.
While you're unlikely to run into issues while using C2ME, it is something that has happened quite frequently in the past,
you can look at their issues tab and look for issues related to the engine
itself, not incompatibilities with other mods.
If you plan to run a longstanding server, for at least a year, and that server will be public, you will probably want to use
the most stable alternative on the market.
If the server is only going to last a month, or a couple of months, then there's no risk, specially if only your friends are
going to play.
Maintainability
Most plugins don't require any sort of explicit update when a new Minecraft version releases.
Even if their Modrinth page doesn't state it supports a newer version, it will most certainly do.
This is due to plugins using an API which is maintained by Paper, and not as volatile as directly interacting with Mojang's code
which is the case for Mixins, what Fabric uses. The plugins that do use Mojang's internal code are a minority.
This difference means that you, in most scenarios, will be able to run a new version of Minecraft relatively short after a new
version arrives. And even if you have to wait for an explicit update, it will be for very few of your plugins.
If you're a developer, this will also be important to you, as it will allow you to focus on ther, more important tasks, than
having to update your software to prepare for a new version.
If you're running Fabric, you can still make use of FabricAPI for the most common tasks.
The Fork ecosystem
In the case of Paper, you don't have to limit yourself to use only Paper, this ecosystem has a ton of variations.
- You have Pufferfish, that will give you a small extra performance boost and provide you with tools like Sentry.
- You have Purpur, which allows you to customize the server even more, configuring enderchest and barrel sizes, or making any mob ridable.
- You have Leaves, which restores the vanilla behavior to Paper.
- And especially Folia, which regionalizes players and their lag, people are completely free to do what they want without impacting others.
Conclusion
First of all, apologies if this whole thing sounds heavily biased towards Paper, it is the software I use the most since my use case is a public commercial server. As such, Paper is the software I know the most and can give a detailed opinion about it.
The only thing I want you to take away from all of this is that there is no conclusion!
The software you're going to use depends entirely on the usage you intend to give your software:
- If you're going to play technical minecraft, and need full vanilla parity, take Fabric, don't think it twice.
- If a mod doesn't have a plugin version nor any equivalent, then use Fabric.
- If you want exploits, are not going to host hundreds of people, then use Fabric.
And please, don't call server owners greedy for using Paper instead of Fabric for their server.
Maintaining a server is already expensive, opening multiple Fabric servers to hold the equivalent of a single Paper server
is not viable.
Specially if you want to create a massive map where a lot of people can play, only Folia can get you that far, synchronizing
all servers so players are able to see each other in the map, or cross shards is already very complex and only large networks
are able to pull of such task.
For instance, my playerbase barely has any technical players, so I don't have a huge priority to keep vanilla behavior. And they don't complain either, we find a way to make their stuff work on my software.