
Play
A pond lives in this tab now
Orb.farm is an aquatic ecosystem you seed and then cannot stop checking on. Nutrient cycles, in the browser, from the sandspiel school of wonder.
Sequel sighting. Two weeks ago it was sand and fire. This time Max Bittker gives you a glass orb of water and a harder question: can you keep something alive?
Orb.farm is an aquatic ecosystem simulator. You stock the orb with algae, bacteria, plants and fish, then watch a real nutrient cycle run: algae photosynthesize, fish eat and produce waste, bacteria break the waste down into what the algae need. Get the loop balanced and the orb hums along for hours like a screensaver with a metabolism. Get it wrong, too many fish, not enough producers, and you preside over a very educational little collapse.
The roster runs deeper than the toy look suggests. The source defines 21 cell types: fish and goldfish, zooplankton and daphnia, algae, plants, grass, biofilm, bacteria, nitrogen, waste, bubbles, glass, stone, wood, and plastic, for the full aquarium experience.
How a glass pond actually works
Under the surface it is the same architecture as its sibling: a cellular automaton written in Rust, compiled to WebAssembly, rendered with WebGL, every organism an update function run against its neighbors. The whole project is MIT-licensed and sits around five hundred GitHub stars, and the species file alone is about eleven hundred lines of Rust.
Bittker documented that architecture in detail once already, in Making Sandspiel, and the numbers there explain why a pond can afford to run all day in a background tab. Each particle is exactly 32 bits: eight for the species, two eight-bit state registers, eight for a clock. The compiled simulation core came in at 84 kilobytes of WebAssembly, updating a 300 by 300 grid at 60 frames per second with under a millisecond of rendering overhead per frame. He also gave a JSConf EU talk on the split: roughly half Rust for the physics, half JavaScript for everything you click on. Orb.farm is that engine's second life, 99 commits of it, with biology swapped in for ballistics.
Sandspiel grew a community gallery north of 70,000 uploaded creations and a couple thousand daily players; the orb kept none of that social machinery. No uploads, no gallery, no feed. The making-of post quotes artist Loren Schmidt on why tiny pixels work anyway: when a character is eight pixels tall, most of what you see is your own imagination. A forty-pixel fish benefits from the same loophole, and so does the grief when the orb goes cloudy and you realize the bacteria lost.
Follow one meal through it. A fish hunts zooplankton and burns oxygen, leaving a trail of waste. The waste sinks. Bacteria break it down, spending oxygen of their own, and nitrogen drifts upward until it fertilizes a plant, then ends as a bubble climbing back out of the water. Algae photosynthesize while light reaches them, consuming carbon dioxide, and sink when it goes dark. Even the grazers have inner lives: a daphnia gestates before hatching new zooplankton into the water column.
The thresholds read like a keeper's manual. In the species code, algae divide once their stored energy passes 220 and decay into waste past age 200, and a fish breeds only above 250 energy and can die of oxygen starvation like a real one. None of it is animation. All of it is accounting that happens to look like life. The Lenia creatures I logged earlier pull the same trick with continuous math; the orb does it with a ledger.
The family tree matters here, because falling-sand games are a lineage, not an invention. Bittker credits the upload gallery of Dan-Ball's Powder Game, and the small community that traded creations there in the early 2010s, as the thing he was actually rebuilding. The deep end of that lineage is The Powder Toy, the open source desktop sandbox now past version 100, which simulates air pressure, heat and gravity across thousands of community saves and will happily let you build a working CPU out of dust. Orb.farm took the same inheritance and asked it to sit still.
If your fingers itch while reading this, the technique is teachable in an afternoon. Jason McGhee's falling sand tutorial builds one in p5.js from a blank canvas, one rule at a time, including the classic bug where iterating top-down lets a grain plummet clean to the floor in one frame. Start there, and the eleven hundred lines of Rust stop looking like wizardry and start looking like the same loop with more species.
So this is the same WebAssembly muscle as the sandbox, particle simulation at full frame rate in a tab, pointed at patience instead of pyromania. The design goal flipped: sandspiel rewards intervention, orb.farm rewards restraint. The best orbs belong to the people who resisted adding one more fish, which makes it the rare toy that teaches systems thinking through the wrist.
I have had one running in a pinned tab for a week. The fish do not know they are a browser process. The fish do not know anything, they are forty pixels, and still I check on them between meetings like a man with a pond. That is the sighting. That is the whole review.
More wonders built out of one person's patience: the floor an artist has been drawing for years.

Previously
Let there be sand: a falling-sand physics toy written in Rust