Guidefor modders3 min read
Reading Fabric, NeoForge and Quilt version numbers
Every loader numbers itself differently, and NeoForge encodes the Minecraft version in its own. How to read each one, and which numbers must match what.
Three loaders, three philosophies
The numbering is not arbitrary. Each scheme reflects a design decision about how tightly the loader is bound to the game.
Fabric
Fabric splits into two pieces that are numbered independently, and understanding the split is most of what you need.
Fabric Loader, something like 0.17.4. Plain semantic versioning, and deliberately
not tied to a Minecraft version. One loader build works across many Minecraft versions,
which is a large part of why Fabric supports a new release within days: the loader usually
does not need to change at all.
Fabric API, something like 0.130.0+26.2. The part after the + is the Minecraft
version it targets. This one is absolutely version specific, because it is the layer that
actually touches the game.
So the loader is version independent and the API is not, and mixing them up is the most common failure in a fresh Fabric install: the loader starts fine, no mods load, and nothing obviously says why. If a Fabric setup loads nothing, install Fabric API.
NeoForge
NeoForge encodes the Minecraft version inside its own version number, which looks strange until you see the rule:
26.2.0.35
│ │ │ └── build number
│ │ └──── patch of the Minecraft version (0 for 26.2 itself)
│ └────── Minecraft minor
└───────── Minecraft major
So 26.2.0.35 is the 36th NeoForge build for Minecraft 26.2. 26.2.1.4 would be for
26.2.1.
It carried the same idea across the numbering change. Under the old scheme it dropped the
leading 1, so 21.11.44 meant Minecraft 1.21.11. Under the calendar scheme it uses the
year directly, so 26.2.0.35 means Minecraft 26.2. Two different shapes for the same
rule, which is worth knowing if you parse these strings: a three-part NeoForge version is
1.x, a four-part one starting with a year is calendar era.
Builds carry a -beta suffix while a Minecraft version is new. That is NeoForge telling you
it is not finished with that version yet, and it is worth believing.
Because the Minecraft version is inside the number, there is nothing to match up. Pick the NeoForge version whose first parts are your Minecraft version. Current builds are on the NeoForge page, from NeoForge's own API.
Quilt
Quilt follows Fabric's shape, because it began as a Fabric fork.
Quilt Loader, like 0.29.1, version independent in the same way Fabric's is.
Quilt Standard Libraries (QSL), the equivalent of Fabric API, tied to a Minecraft version.
Quilt also runs most Fabric mods and can load Fabric API, so a Quilt setup often has both sets of libraries present. That is normal rather than a mistake.
Forge
Forge, the predecessor to NeoForge, uses MINECRAFT-FORGE, such as 1.20.1-47.2.0. The
Minecraft version is stated outright rather than folded in, which is easier to read and is
why NeoForge's scheme surprises people who came from it.
Forge is still used by older modpacks pinned to older Minecraft versions. New work is on NeoForge.
What has to match what
| Thing | Must match your Minecraft version? |
|---|---|
| Fabric Loader | No |
| Fabric API | Yes |
| Quilt Loader | No |
| QSL | Yes |
| NeoForge | Yes, and it is in the number |
| Forge | Yes, and it is in the number |
| Any individual mod | Yes, and the loader too |
The last row is the one that catches people. Whatever the loader's rules, every mod is built for one Minecraft version and one loader, and no loader flexibility changes that. See why mods are loader specific.
Picking a version to build against
If you write mods:
- Target the loader version, not the newest. Requiring a loader release from last week excludes everyone who has not updated, for no benefit.
- Be exact about the Minecraft version in your metadata. Writing
1.21when you mean every 1.21.x version, or the reverse, is what makes catalogues and users disagree about what you support. Ours reads the release metadata rather than the description, so that field is what people see. - Declare your API dependency with a range where you can, so a patch release of the API does not break your mod for everyone.