Lenia
A real continuous cellular automaton, computed live on your graphics card. Watch the Orbium glider swim, grow a primordial soup that self-organizes into life, or paint your own — the whole simulation runs in your browser, nothing uploaded.
⚡ 100% in your browser — no server, no uploadWebGL2 not available
Lenia needs WebGL2 with floating-point render targets. Try the latest Chrome, Edge, Firefox, or Safari on a desktop, or a recent phone. Everything else on the page still works.
What am I looking at?
This is Lenia, a continuous cellular automaton invented by Bert Chan. Conway’s Game of Life has cells that are either alive or dead and time that ticks in whole steps. Lenia smooths all of that out: every cell holds a real value between 0 and 1, the neighbourhood is a wide fuzzy ring instead of eight square cells, and each step nudges the grid by a small fraction. From those smooth rules, something remarkable happens — stable, self-repairing, moving creatures appear. They are called solitons, and they behave uncannily like microscopic organisms.
The headline creature is the Orbium: a little crescent that swims steadily across the grid, holding its exact shape as it goes. It is the continuous cousin of the Game of Life glider. Load it and watch it wrap around the edges forever. Then switch to a primordial soup and watch structure condense out of pure noise, or grab the brush and drop your own blob of life to see what it becomes.
How does this run in my browser?
The whole simulation lives on your GPU. Lenia’s update rule is, for every cell: take a weighted average of the neighbours inside a radius using the Lenia kernel, feed that number through a bell-shaped growth function G(u) = 2·exp(−(u−μ)²/2σ²) − 1, and add a small slice of the result back to the cell. That is exactly a convolution followed by a pointwise map — the kind of thing graphics cards are built for.
So each step is a WebGL2 fragment shader that runs once per cell in parallel, reading the current state from a floating-point texture and writing the next state to another, ping-ponging between the two. At the balanced setting that is tens of thousands of cells, each summing hundreds of neighbours, several times per frame — comfortably real time. The kernel itself is the classic smooth bump, exp(α(1 − 1/(4r(1−r)))), precomputed once and uploaded as a small texture. Nothing is uploaded to a server and it keeps running with your internet off.
Things to try
Load the Orbium glider and let it swim, then gently paint a wall in its path and watch it deform and recover. Switch to Primordial soup and nudge μ and σ a hair — the entire character of the world changes, from isolated blobs to writhing rotors to branching coral. Drop the growth width σ very low with μ near 0.15 and life becomes fragile and picky; widen it and the grid fills with churn. Paint two blobs next to each other and see whether they merge, orbit, or annihilate. When something beautiful happens, hit Save PNG or Record.
Is this really the same math as the research Lenia?
Yes. The kernel is the unimodal smooth-bump core, the growth is the Gaussian mapping, and the Orbium uses its published parameters — kernel radius 13, μ = 0.15, σ = 0.015 — and its exact seed. I verified the seed reproduces a stable, translating soliton before shipping.
Does anything leave my device?
No. The simulation runs entirely on your GPU in the browser. There is no server, no upload, and no sign-up. It works offline.
Why does the soup sometimes fade away?
Life in Lenia only survives in certain bands of μ and σ. If you push the sliders into a hostile regime the pattern can die out or, at the other extreme, flood the grid. The presets sit in known living regimes; hit Reseed to start fresh.
Who invented Lenia?
Lenia was created and named by Bert Wang-Chak Chan, building on Conway’s Game of Life and SmoothLife. The Orbium and the other creatures come from his search through this continuous world.
I build something like this every day.
Senior full-stack engineer, available for senior or contract work, fully remote. See the rest of the lab or get in touch.