mc-rust
a Minecraft server and client written from scratch in Rust — no Forge, no JVM, no borrowed server code. just the wire protocol, implemented directly, across three eras: modern (1.21.8), Classic (2009), and an Alpha (a1.2.6) protocol currently in testing.
status: modern and Classic are playable end-to-end. Alpha (a1.2.6) is a hand-decoded protocol scaffold under active build/test right now — handshake, login, and chunk data verified against a real packet capture; join stability is the current focus.
protocols
- modern (1.21.8, protocol 772) — full join and play on a procedurally generated survival world; block edit/break persists to SQLite, undoable via a rollback tool
- classic (protocol 7) — complete original Minecraft Classic implementation: gzip world, block placing, player positions, chat, full multiplayer
- alpha (a1.2.6) — from-scratch decode of the Alpha-era protocol, verified byte-for-byte against a live capture; chunk column generation and the map-chunk packet are in; currently chasing a join/reconnect stability issue
- multi-version ping — every client from Classic through 1.21.8 sees a live, joinable server-list entry, even versions that can't actually play
client (mc-client)
- from-scratch Classic client — connects, decodes the world, drivable from a terminal before any rendering existed
- CPU raycaster — per-pixel ray traced through the block grid, no GPU or shaders, runs headless for tests
- physics — player as a falling/colliding box; movement is a pure, testable step function
stack
language: rust
framework: none — protocol handled directly
persistence: sqlite
port: 25565
honest part
no real authentication yet on either modern or Alpha — a username is a claim, not a cryptographically verified identity. the Alpha protocol is being decoded and tested live against real client captures; some sessions still drop and reconnect while that gets nailed down.
a1.2.6 devlog
running log of the Alpha protocol work, newest first.
- 2026-07-23 — server→client packet ids recorded and verified against a live capture; handshake reply and login parse confirmed byte-for-byte; string encoding corrected to single-byte; chunk column generation and the map-chunk packet are in. currently chasing a join/reconnect stability issue on live sessions.
- 2026-07-22 — Alpha (a1.2.6) protocol scaffold parked and started.