← Devlog

M0.1 — the pipe is open

The first sprint shipped no gameplay at all, on purpose. What it shipped was the pipe everything else has to run through.

What actually exists after this sprint

Four crates — server, client, protocol, worldgen — on Bevy 0.19, Rust edition 2024. A headless server ticking at a strict, fixed rate with no renderer and no window. A real wire protocol, encoded once and decoded once, confined to a single module so nothing else in the codebase gets to invent its own idea of what a message looks like. And two native clients that connect, exchange messages, and receive distinct identities from the server — proven end to end by a test, not eyeballed in a terminal.

That last detail mattered more than it sounds. It’s easy to build a demo where two clients appear to work and are actually both talking to the same mocked connection under the hood. The test that closes this sprint connects two real clients over a real socket and asserts their welcome messages disagree with each other in the one place they’re supposed to.

Why no gameplay, deliberately

008’s design doctrine is blunt about sequencing: build the throughput analyser before the voxel simulator, not after. That’s a load-bearing ordering decision, not a style preference — retrofitting it later is a rewrite, not a refactor. Sprint one exists to get the boring, structural things right first: the transport, the protocol, the process boundary between “the server decides” and “the client asks.” Everything gameplay- shaped gets to stand on top of that instead of being tangled through it.

What’s still missing

Everything a player would recognize as a game. No terrain, no blocks, no Drop, no timer, no score, nothing rendered. That’s not a confession — it’s the sprint doing exactly what it was scoped to do. The next sprint puts avatars on that pipe and gets them talking over a real deployed server; the one after that finally builds something you can place a block on.