The project
What is built, and what is not.
Manic Microbes is a hobby project by David Bennell. Nobody is paying for it, there is no team, and it gets worked on when there are evenings. Every milestone below landed with the tests that let it be called done, and those tests stay in the suite permanently.
9
milestones complete
1
under construction
1
still to start
What is built
M0
CompleteThe virtual machine and the toolchain
64 opcodes, circular stacks, wrapping addressing, saturating arithmetic, complementary template search, promoter binding. An assembler and disassembler with source maps.
Proved by
Ten million random byte arrays executed for a hundred thousand instructions each. Zero panics, zero hangs. Any byte sequence is a legal program.M1
CompleteSubstrate, fluid and chemistry
A grid carrying nineteen diffusing chemicals, a light field, currents and barriers. Flux-based integer diffusion and donor-cell advection, parallel over row bands. Rock holds minerals as solid rather than swallowing them, which closed the last exception in the ledger.
Proved by
A million ticks of aggressive stirring with steep gradients. Per-species totals drift by exactly zero — not within epsilon, zero. The gate itself was wrong for a while, and said sixteen chemicals while measuring seventeen.M2
CompleteCells, metabolism, division and mutation
The first thing that is alive. Organelles, eating and excreting, the metabolic loop closed through photosynthesis, division, death, corpses, and mutation with evolvable copy fidelity.
Proved by
Seed two ancestors differing only in metabolic efficiency; the better one takes over in nine runs out of ten. Selection works, and nothing in the code is doing it.M3
CompleteSensing and motility
Chemosensors, photosensors, touch, oscillators, and cilia that push both the cell and the water around it.
Proved by
Chemotaxis evolves. Starting from a cell with a sensor and cilia but no code connecting them, mean distance to food falls below a motile-but-blind control.M4
CompleteThe microscope
The slide plate: circular vignette, depth of field, drifting dust, continuous zoom from the whole slide to one cell, chemical overlays and a live cell inspector.
Proved by
The state hash after a hundred thousand ticks is identical whether it ran under the microscope or headless. Rendering cannot touch the simulation.M5
CompletePhylogeny, speciation and the wiki
The true tree of descent, genome fingerprints, species forking, Latinate binomials, a page per species retained after extinction, and detectors for every first occurrence.
Proved by
Ten million ticks at a hundred thousand cells fits in under a gigabyte of archive — proof that per-individual records are not being kept.M6
CompleteEditor, debugger and laboratory tools
Assembly editing with diagnostics, breakpoints and single-stepping on a live cell, tweezers, barrier drawing, genome import and export, and arena matches.
Proved by
An arena match replays identically from its scenario and seed, a hundred times, on two different machines.M7
CompleteJunctions and multicellularity
Soft junctions that carry chemicals, energy and genome bytes; hard junctions that carry a distance constraint. The binding key, and connected components maintained incrementally.
Proved by
An eight-cell cluster with cilia on one member moves coherently, with no code in the engine that moves clusters as a unit.M8
CompleteEcology, predation and scenarios
Spikes, damage, rupture, carrion and lysosomes. Seasonal and declining light. The scenario library, trophic analysis and the food web. Four things a cell could not do — swallow another whole, dissolve one from outside, bleed when wounded, or leak across its own membrane — all now exist.
Proved by
In the archipelago, separated populations diverge measurably faster than in a control that differs only by the walls.M9
NextScale and hardening
Memory layout to the 512-bytes-per-cell budget, spatial hashing, an optional GPU fluid path gated on producing identical results, and a hundred-million-tick soak.
Done when
Two hundred thousand cells at thirty ticks per second, headless, on eight cores.M10
Being builtThe instrument
The application around the microscope. The shell, the simulation on its own thread, every parameter authorable and recorded, the genome view, the ecology pane, the cell editor, the scenario builder and the panels-as-windows pass have all landed, and cells that had grown limbs for three releases are finally drawn with them — a cilium beating, a flagellum swimming, a spike out, a holdfast gripping, an exoenzyme clouding the water. What is left is the frame budget and the window's remaining rough edges.
Done when
Fifty thousand cells at thirty frames per second, with the panels drawn and the world running.
Why the instrument comes before the scale work
What is next
None of the following exists. I am writing it down because the decisions I am making now are being made to keep it possible, which is the only good reason to publish a roadmap at all.
A shared genome library
Somewhere to publish a cell you wrote or a founder that evolved, with its ISA version stamped on it so it still runs years later. Browse what other people have grown, pull one down, and drop it onto your own slide to see how it does against what you have. Every genome is a single file already, and every archived species carries the version it evolved under — the format is settled; the place to put them is not built.
Networked mega-grids
Teleporter pads at the edge of a slide that ship cells between running simulations, so a group of machines can hold one substrate far larger than any of them could alone — or run it as a battleground. Explicitly out of scope for now, and the only reason it is still on the table at all is the pair of rules that have never been traded away for convenience.
How to get it
It runs on Windows, macOS and Linux, and every release carries a build for each of them. Cloning and compiling it is the other way in. Both are a page of their own now, rather than the last third of this one.
Questions
Is it a game?
It is a fishtank you can also program. There is nothing to win in the open-ended mode: you seed a world, watch what happens, and read the wiki it writes about its own species.
There is also an arena mode where hand-written cells compete with mutation switched off, which is the closest thing to a game — and closer to Core War than to anything with a score bar.
I came from DarwinBots. What is different here?
Three things, mainly. The genome grows organelles and the organelles do the work, so predation is an organ a cell carries rather than a command it runs. Nothing is created or destroyed, down to the last integer, so a slide fills up when the matter runs out. And the same scenario and seed give the same run on any machine.
The genome language is different again — it is the fifth one I have written. The lineage page has the comparison in full, including what DarwinBots got right and everything since has kept.
How is this different from Conway's Game of Life, Tierra or Avida?
The Game of Life has four rules and no matter. This has a virtual machine per cell, a conserved chemistry, an energy budget, a physical body made of organelles that cost something to build, and a genome that mutates when it is copied.
Tierra and Avida are the closer relatives, along with DarwinBots. What is different here is that the genome builds machinery instead of acting directly, that matter is conserved to the exact integer rather than approximately, and that I want the thing to be watchable as well as measurable — the microscope and the species wiki are half the product, not decoration on a research tool.
Can I write cells myself?
Yes, and that is half of why I built it. There is an assembly language, an assembler with real diagnostics, a disassembler that will show you any living cell's genome, and a debugger with breakpoints and single-stepping that runs against a cell while the world is going.
You can also edit a genome and inject it into a cell that is already alive, then watch what your change does to its descendants.
How large can a world be?
I am aiming at two hundred thousand cells running at thirty ticks per second on eight cores, and fifty thousand of them rendered at thirty frames per second with the panels drawn. The scale work is not finished — it is the milestone ahead rather than behind.
A small slide runs comfortably on a laptop. The simulation core is a separate crate with no rendering in it at all, so you can also run a world headless at whatever speed the machine manages and stream metrics out as JSON.
Can I share what evolves in my world?
Locally, yes: a genome exports as a single file with its instruction-set version stamped on it, and a whole simulation saves as a slide you can send to someone else and have them resume exactly where you stopped.
A shared library to publish those to is intended but not built. It is the next substantial thing after the first release.
Will there be multiplayer?
Not soon, and not in the first version. The design has teleporter pads at the edge of a slide that ship cells between running simulations — enough for a shared substrate across several machines, or a competitive one.
It stays on the table because of two rules I have never traded away for short-term convenience: the simulation is exactly reproducible, and the core runs without the renderer. Machines that cannot agree tick for tick on what happened have no shared substrate to share. Both rules are kept by tests today for reasons that have nothing to do with networking, which is exactly why the option is still there — and why it can wait.
What is it written in?
Rust. The simulation core has no rendering dependency, no floating point, no wall clock and no global random number generator in it — all four are enforced by tests, because each one would quietly break reproducibility.
The front end is Bevy with an immediate-mode UI on top of it. Before this it was Unity and DOTS, and before that Unity again.
Can I use it for teaching or research?
Please do. It is MIT or Apache-2.0, there are binaries for Windows, macOS and Linux, and the source is public if you would rather build it. Runs are exactly reproducible from a scenario file and a seed, and every metric the instrument plots exports as newline-delimited JSON for analysis somewhere else.
The parameter sweep runner exists for the same reason, and it will walk one setting across a range and report what moved.
If something you want to know is not here, it is probably on the idea or in how it works. This is one person’s evenings, so the site is as far as the documentation goes for now.