Skip to content
Manic Microbes

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

  1. M0

    Complete

    The 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.

  2. M1

    Complete

    Substrate, 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.

  3. M2

    Complete

    Cells, 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.

  4. M3

    Complete

    Sensing 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.

  5. M4

    Complete

    The 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.

  6. M5

    Complete

    Phylogeny, 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.

  7. M6

    Complete

    Editor, 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.

  8. M7

    Complete

    Junctions 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.

  9. M8

    Complete

    Ecology, 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.

  10. M9

    Next

    Scale 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.

  11. M10

    Being built

    The 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

The performance target is one number — fifty thousand cells at thirty frames a second, with the window responding. Half of it is the renderer’s and half is the simulation’s, and until the simulation moved onto its own thread the two could not be told apart: the tick rate was the frame rate, so any figure measured both costs added together. Profiling against that would have tuned the wrong thing.

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.

intendedAfter the first release

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.

designedLater, and deliberately not sooner

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.