Skip to content

News

This page is the change log of mcrs. Each entry says what was merged, what changed for people who write plugins, and what is still missing. A change is marked “Breaking” when old plugin code stops compiling. The newest entry comes first.

The last tag is 27 days old, and 152 pull requests were merged after it, so the first entry covers work that has no tag yet.

This entry covers 2026-10-14 to 2026-11-10. In that time 6 authors made 874 commits and merged 156 pull requests. 123 of the pull requests are from andreypfau, and 33 are from five other people.

  • Worlds tick as parallel cells behind a muxer thread and a shared data layer (Works#646).
  • The server has mobs with a parallel AI stage, the client renders mobs, and there is a benchmark with 50,000 pigs (Works#651).
  • Entity physics, movement checks and block simulation work (Works#648), and so do the block tick and block event queues (Works#477).
  • Player bans and the whitelist follow their specifications (Works#637, Works#635).
  • The server disconnects and saves every player before shutdown (Works#624).
  • A player can break blocks in creative mode (Works#643).
  • The mc.rs landing page was added, with a language switcher (Works#629, Works#633), and CI checks that the client compiles for wasm32 (Works#622).
  • The VarInt and VarLong reader now rejects out-of-range bits (Works#653).
  • NBT reads and writes the two Bedrock encodings, little-endian for storage and varint for the network, next to the Java one (Works#679).
  • The new crate mcrs_minecraft_text_flatten fills translations in flattened text. A translated disconnect reason used to show an empty line, and now it shows its fallback or its key (Works#680).
  • Survival block breaking has a specification, taken from a vanilla server (Works#686). Block placing in creative mode has one too, also from a vanilla server (Works#645, Works#692).
  • Teleport confirmation follows its specification. The server resends a pending teleport while the client moves, and tests check it through a scripted client (Works#683, part of Partial#623).
  • CI runs the project’s own pull requests in one self-hosted job and fork pull requests on hosted runners, and a change to docs/ alone builds nothing (Works#691). Cargo resolves features once for the whole workspace (Works#685).
  • Coding agents get AGENTS.md, agent skills and path rules (Works#687). How to contribute explains how to use them.
  • The landing page has search engine metadata, robots.txt and a sitemap (Works#684).

A plugin here is Rust code that is compiled into the server.

  • MinecraftServerPlugin became the plugin group MinecraftServerPlugins, with members such as ServerCorePlugin, DimensionWorldsPlugin, WorldGenPlugin and ServerNetworkPlugin. You can disable or replace any member (Works#551). The engine members then moved to the new crate mcrs_minecraft_engine_server, and mcrs_minecraft_server keeps the vanilla group (Works#592).
  • No library crate reads the environment or the working directory for settings now. Operators are an ops field of the plugin, and the client knobs are a Knobs resource (Works#548). The details are in Environment variables.
  • Text::to_legacy_lossy is removed. Use plain_text or legacy_text from mcrs_minecraft_text_flatten, which also take a Language (Works#680).
  • The reader and the writer of mcrs_minecraft_nbt lost the _be suffix of their methods, so get_u8_be is get_u8 now (Works#679).
  • A plugin can add plugins to every dimension world with add_dimension_plugin, or to one dimension world with add_dimension_plugin_to (Works#552).
  • The chat event is cancellable. An observer can stop a line or replace its text before the broadcast (Works#636, part of Partial#283). Join, leave, movement and block events are not done.
  • Changed chunks are not saved to region files (WIP#78), and there is no online mode (WIP#82).
  • There is no loader for plugins outside the server build, and no decision on it.
  • There is no speed claim against another server. The benchmark runs are provisional, as Performance explains.

Commit bf147fb2c, two commits after v0.5.7.

The workspace version is now 0.5.8, and CI runs mutation testing only on demand. Nothing breaks for plugin authors. The crates are still not published (Undecided#321).

Commit 4fe86dc75, two commits after v0.5.6.

The xtask check now refuses a literal that names any fixture destination directory. The other commit is the version bump. Nothing breaks for plugin authors, because this tag changes only the test tooling. What is missing is the same as in v0.5.8.

Commit e57c49ebe, seven commits after v0.5.5.

Parity tests and fixtures now load oracle dumps, protocol goldens and data goldens through one fixture loader, which resolves them by name and checks their version. There are two new xtask checks. The first warns about vanilla claims that are tested against literals outside parity files. The second checks that parity tests compare against fixtures loaded by name. Nothing breaks for plugin authors. What is missing is the same as in v0.5.8.

  • Watch the tags. The repository has 11 of them, and the latest is v0.5.8.
  • Watch the list of merged pull requests.
  • Watch the four direction issues in the Roadmap.

An RSS feed of this page is planned.

Sources and verification

Verified: 26.4-snapshot-7, f50e2fdf6, 2026-11-10