The entire dependency tree
Every Minecraft server has to speak the wire protocol, inflate and deflate chunk data, parse NBT, read Anvil region files and hash things the way Mojang does. The usual answer is a handful of crates. mycelia's answer is that all of it is the project.
grep '^name = ' Cargo.lock name = "mycelia-server" name = "spore" name = "substrate-compress" name = "substrate-data" name = "substrate-proto" name = "substrate-world"
Six packages. All six are mycelia's own crates. That is the whole lock file — there is no seventh line, and nothing below it.
Where it actually stands
mycelia is early. That is worth saying plainly, because a project page is the easiest place in the world to describe something that does not exist yet. So here is both halves.
Working todayVanilla clients connect
An unmodified 1.21.1 client goes through the server list, the configuration phase and into play, against the real server.
Real worlds, read and written
Anvil saves load, and they are written back field-faithfully: everything mycelia does not model travels through verbatim rather than being dropped.
Byte-identical chunks
On a flat world the chunk packet matches vanilla's byte for byte, all 7,022 of them. Light, biomes and all four light masks match on real worlds too.
Its own compression
A hand-written Deflate encoder takes a real chunk from 38,622 to 5,046 bytes on the wire — within about 1.3% of zlib at level 6.
A tick loop
Fixed 50 ms step with catch-up, and a visible complaint when it cannot keep up. Timings are reported as median and p95, never as an average.
Green, and honestly green
344 tests and zero clippy warnings — checked against real vanilla bytes rather than against mycelia's own round trips.
Online mode
Chat runs unsigned, which is the correct shape for offline mode. Online mode needs the signature chain, and that is not built.
Most of the game
Commands answer you, but /tp and /gamemode do not move
anything yet. The tick loop exists; routing packets through it is the next cut.
A client with a window
A headless client already joins vanilla and mycelia servers with the same code. It has no window and draws nothing.
Modded blocks
They render as air, on purpose. Visibly missing is a better failure than quietly wrong, and it stays that way until the real thing works.
The license, in two sentences
mycelia is AGPL-3.0-or-later with one additional permission under section 7. The additional permission exists for one specific reason: server operators should not have to open their own plugins in order to run an open server.
Your plugin stays yours
A plugin, mod or extension that uses only the documented extension interfaces is not a derivative work of mycelia. It can stay closed, and running it alongside mycelia in the same process does not change that.
Changes to mycelia get published
Modify the server, the client or the substrate crates and the AGPL applies in full — including section 13, so people using your modified version over a network must be offered its source.
The work stays open. What you build on top of it is yours.
The exception is a drafted section 7 permission, not legal advice. If something commercial depends on it, have a lawyer read it.
Coming, and open to a few early hands
The source is not public yet. It will be — the license was chosen for that — but not while the server still cannot do online mode and the client has no window. Publishing early buys expectations that the code cannot pay.
If you want in before that, whether to test a build or to work on it: contributions are possible on request. Say hello.
Both chats are new and still being furnished. Email works either way.