Updating Instructions
June 19, 2026 · View on GitHub
These are the usual steps for updating ViaFabricPlus to a new Minecraft version. If you're unsure about anything, feel free to ask in the ViaVersion Discord.
1. Update Dependencies
Update all upstream versions in gradle.properties. The main ones are:
minecraft_versionfabric_loader_versionfabric_api_versionsupported_minecraft_versions(if needed)
Also update versions in the dependencies block of build.gradle.kts.
2. Update Core References
- Update the
NATIVE_VERSIONfield inProtocolTranslator - Update protocol constants in
ViaFabricPlusProtocol
3. Port the Code
- Decompile the Minecraft source with your preferred tool.
- Try to compile the mod and port the code until all fixes work again.
4. Update Data Diffs
Set updating_minecraft = true.
Run gradle test to automatically update various data JSONs in the assets.
Manually check the following files:
entity-dimensions.json
Set updating_minecraft = false.
5. Validate Mixins
Check if all mixins in the injection package still apply correctly.
Critical ones include:
MixinClientLevel#tickEntityMixinClientLevel#tickPassengerMixinPlayer#changeSpeedCalculation
6. Diff Game Code
Diff the new Minecraft source against the previous version (e.g. using git).
Implement all relevant changes for ViaFabricPlus. These usually include:
- Logic changes (e.g.
if (a && b)→if (b || a)) - Movement changes (e.g.
player.yaw→player.headYaw) - Networking changes (e.g. new packet or changed structure)
- Visual changes (e.g. animations)
Note: ViaVersion already covers most server-side gameplay changes. ViaFabricPlus usually handles client-side and deeper integration fixes.
See Contributing Guidelines for details on which fixes matter.
7. Focus Areas in Game Code
Usually important (mojang mappings):
net.minecraftnet.minecraft.clientguimultiplayerplayer
net.minecraft.utilnet.minecraft.worldentityinventoryitemlevel(includingblock)
Usually safe to skip:
com.mojangnet.minecraft.advancementsnet.minecraft.commandsnet.minecraft.datanet.minecraft.gametestnet.minecraft.realmsnet.minecraft.recipebooknet.minecraft.referencesnet.minecraft.resourcesnet.minecraft.servernet.minecraft.soundsnet.minecraft.statsnet.minecraft.tags
8. Verify Upstream
Check the ViaVersion/upstream protocol implementation.
- Report upstream issues when needed
- If an issue can't be fixed upstream without excessive work, add a client-side workaround in ViaFabricPlus
9. Final Steps
-
Run the game and verify all GUIs and visuals.
-
Clean up your code and ensure it's readable.
- Client-side fixes are sorted by protocol version, newest at the top.
-
Open a pull request and wait for review.
Project Structure
- Every change to the game is called a feature.
- Features live under both
features/andinjection/mixin/features/. - Loading is handled by static blocks and a dummy
initfunction inFeaturesLoading.
Build Files
- Common build logic comes from the BaseProject Gradle convention plugin.
- The root project includes all submodules (including optional ones like
viafabricplus-visuals). - Be careful not to introduce unintended dependencies on optional submodules.
Release Process
-
Set
project_versioningradle.propertiesto the new release version. -
Pin version IDs of
configureVVDependenciesinbuild.gradle.kts. -
Commit with the message:
ViaFabricPlus <version>
Versioning Scheme
- Major → Breaking or fundamental refactors (e.g. new mappings, full rewrite)
- Minor → Port to a new game version or major feature addition
- Patch → Bug fixes or small features
After releasing:
- Switch back to
-SNAPSHOTversion - Unpin
configureVVDependencies
Make a version bump commit:
Start <release version> cycle
Git Branches
ver/<version>→ all new changes are merged into the branch of the currently active Minecraft version- Keep one branch per Minecraft version (e.g.
ver/1.21.5)
See ViaFabricPlus-archive for older branches.