Projects Dust MC

Project 02

Dust MC

A Minecraft server, written from scratch in Rust.

Early — foundations built GPL-3.0 Rust Open source

A Minecraft: Java Edition server implementation written entirely in Rust, from scratch. No fork, no vendored code. It targets 1.21.1 first, and the plan runs to nineteen phases across five stages, each with a written exit criterion.

The timeline is three to four years to a usable release. That is in our notes as an honest figure, not a hedge.

Why not fork something

We re-examined this once the licence made an existing Rust server legally usable as a base, and looked hard at what we would be inheriting. Worldgen turned out to be the one area we could least afford to take on someone else's terms.

Worldgen defects are the expensive class, because they are latent in every chunk already written to disk.

A fix does not repair the world it has already produced. So Phase 6's exit criterion is not "the terrain looks right" — it is block-identical output against a real vanilla server across ten seeds. Every one of those defects is a parity defect, and ordinary unit tests pass straight over them.

Where it is now

Early. Configuration, the server lifecycle, the 1.21.1 protocol layer, chunk storage and a full light-propagation engine are written and tested. It does not yet accept a player connection.

At a glance

Language
Rust
Target
MC 1.21.1
Protocol
767
Licence
GPL-3.0
Phases
19
Timeline
3–4 years
Dust-MC on GitHub

Multi-version from the first commit

The packet codec was written multi-version from commit one, because retrofitting it is a rewrite. Protocol work is done against decompiled sources rather than community wiki data — and where the two disagree, the decompile wins.

An embedded JVM, for plugins only

Rust runs everything. Java exists in exactly two bounded places: an embedded JVM, because plugins genuinely are compiled bytecode, and a launcher jar that hosting panels expect. A standing CI test enforces it — with the JVM disabled the server must still boot and every feature except plugin loading must work.

No vanilla numbers in the repository

Terrain baselines arrive from an extraction step run against a server jar the operator already has. It started as a licensing boundary and improved the design: a resolver that hard-coded vanilla's figures would be quietly wrong on every modded world.

Configuration that cannot silently do nothing

One config file. A field with no documentation comment is a compile error. Environment overrides are overlaid before deserialisation so they get identical type checking. An unknown ore name is an error that names the closest match, not a setting that quietly does nothing.

Ore density as multipliers, not counts

A count is written against one baseline and stops meaning what its author intended the moment a datapack changes that baseline — silently, because the number is still valid. A multiplier composes with the world instead of fighting it.

It is open source.

Dust MC is GPL-3.0 and public. Read it, build it, or file an issue.

Dust-MC on GitHub