Skip to content

One game version at a time

Changing. Follow: #412, #388, #537

mcrs follows the newest Minecraft snapshot and supports exactly that one.1 Today it is 26.4-snapshot-7.

The file assets/minecraft/version.json is the only place that states the version. It is the file of the same name from the client jar, copied byte for byte, and the core crate embeds it. A test fails when a Rust, TOML or Gradle source file repeats one of its values, and the oracle tool reads the version from the same file. The world plugin refuses to start on a data pack whose version.json differs from the embedded one.

One command moves the project to the next snapshot

Section titled “One command moves the project to the next snapshot”
Terminal window
cargo run -p mcrs_minecraft_update -- <version id>

The command replaces the version file, the client jar descriptor, the generated reports and the block and item definitions, and it regenerates the captured fixtures that Parity with vanilla describes. It ports no code. Whatever the new snapshot changes in the Rust crates shows up as broken tests and printed diffs, and people fix those. So a move is mostly a data update, plus the port of the behaviour that really changed. The details are in Move to a new snapshot and in the tool README.

There are no datafixers, so mcrs does not upgrade old saves. A chunk or player file must carry the targeted DataVersion. When the value is missing or different, you get an error that names both numbers, because there is no migration chain.2 An unknown field in a file the game wrote is also a loud error, and mcrs does not keep such a field as raw bytes. Worlds written between an update and the ports that follow it are not worth keeping.

The client must be the same snapshot as the server. A vanilla client of that snapshot can join in offline mode. A client of another version cannot, for now.

The protocol crate holds the packets of one version and no older packet layouts, so the engine does no version negotiation.

If you run a server for players, read What mcrs is, and what it is not first. For production the project points to Paper, Folia, Minestom and Velocity.

Most players stay on releases, so a lobby or a proxy needs to accept their clients. A proposal in review adds a translator at the network edge.3 It is a chain of steps that converts frames between the client protocol and the targeted protocol, from the targeted version down to 1.21.6, which is protocol 771. The engine would still see only one version. Each step would list what it degrades, and a new snapshot would change only the newest step.

Status lists what works today for this snapshot.

  1. Not planned#412 The decision to target one version at a time, with no backward compatibility. ↩ ↩2

  2. Not planned#388 The decision that saves are read at exactly the targeted data version, with no datafixers. ↩

  3. WIP#537 The proposed decision that the network edge translates client protocols down to 1.21.6. ↩ ↩2

Sources and verification

Verified: 26.4-snapshot-7, 51d45c26a, 2026-11-09

Tracking: #412, #388, #537