Plugin basics
Paper vs Spigot vs Bukkit: which plugin API to build for
Bukkit, Spigot, Paper and Purpur explained for plugin makers: how they relate, which API a plugin should use and whether one jar runs on all of them.
The names Bukkit, Spigot, Paper and Purpur show up everywhere in plugin talk and they are easy to mix up. They are layers of the same family, and knowing how they relate tells you which one a plugin should be written for.
The family tree
- Bukkit is the original plugin API. It is no longer developed as a server, but its API lives on inside the others.
- Spigot is a server that extends the Bukkit API and optimised the server.
- Paper is a fork of Spigot with more performance work and extra API. It is what most servers run today.
- Purpur is a fork of Paper with many gameplay options.
Because each one is built on the previous, a plugin that only uses the Spigot (Bukkit) API runs on Spigot, Paper and Purpur.
Which API should a plugin use
If you want one jar that works on all of them, build against the Spigot API and avoid Paper-only classes. If you know your server is Paper and you want newer features, the Paper API gives you extras, but the jar will not load on plain Spigot.
PluginForge keeps to the common Bukkit API on purpose, with optional Vault, LuckPerms and PlaceholderAPI integrations when you ask for them. That is why the plugins it makes run on Spigot, Paper and Purpur, and why they keep working through Minecraft updates better than code that reaches into server internals.
What about NMS
NMS means net.minecraft.server, the game internals. Code that uses it can do things the API cannot, such as custom entities and packets, but it breaks with almost every Minecraft update and needs separate code per version. For most server features you do not need it.
Which server software should you run
For most people Paper is the right choice: it is fast, widely supported and runs Spigot plugins. Pick Purpur if you want its extra options. Run plain Spigot only if a plugin you depend on does not work on Paper.
What none of these run
Fabric and Forge are different systems. Mods for them are not plugins and cannot be loaded by Paper. Velocity and BungeeCord proxies have their own, separate plugin APIs as well.
A simple decision guide
- You want the best performance and the widest support: run Paper and build against the Bukkit API.
- You need a feature that only Paper has: build against the Paper API, and accept that the jar will not load on Spigot.
- You are on an old version such as 1.8 or 1.12: the Spigot API is the common base, because the Paper API for those versions is limited.
- You want one jar to share with others: stay on the common API.
What changes for you as a server owner
Almost nothing in daily use. Commands, permissions and config files work the same. Differences show up in performance settings, extra configuration files that Paper adds and a few extra events. If you move from Spigot to Paper, your plugins and worlds usually carry over without changes.
Frequently asked questions
Is Paper allowed to run Spigot plugins?
Yes. Paper is a fork of Spigot and keeps its plugin API, so Spigot plugins run on it.
Should I choose Purpur?
Only if you want its extra gameplay options. It is based on Paper, so Paper plugins run on it too, but the extra settings add more things to understand.
Does the generator support Paper-only features?
It keeps to the common API so that one jar runs on Spigot, Paper and Purpur, with optional integrations when you ask for them.