It’s a living doc, but should answer quite some questions.
Do you plan on monetizing this somehow? If not, open sourcing some, if not all, would be pretty cool, even if it weren't necessarily licensed in a way that others could 'take' it, if that's your concern. Nonetheless, a very cool project.
I’ve spent a lot of time optimizing hot paths and getting calculations down, but when the ecology goes a bit wild, you’ll still see temporary spikes. If you want to focus on stats only, you can switch to Simmer mode (no graphs) or turn off the arena, which reduces rendering work quite a bit.
To keep it sane, I don’t do naive all-vs-all. I use:
Zone-based spatial indexing so most checks only run against local neighbors (roughly n/16 instead of n). Temporal caching of indices so they’re not rebuilt every tick. Statistical sampling for crowd density at high population (estimate from a fixed-size sample instead of full scans).
So in practice it’s closer to O(n² / k), with k ≈ 16–50 depending on zone layout and population. You still see spikes during blooms, but it’s usually 10–30× faster than naive pairwise checks.
You might be able to do a bit better for some of these, check this out https://en.wikipedia.org/wiki/N-body_simulation
Essentially the idea in some optimizations is to divide the space into cells, and so you can discard relations with elements in far away cells.
One big recent win was actually on the rendering side: I was rebuilding complex morphology geometry every frame for large organisms. I’ve added caching for that, which significantly reduced spikes during population blooms.
At very high populations the sim tick itself becomes the bottleneck, even for mostly O(n) logic per organism. When populations crash (which they usually do ecologically), performance recovers.
Quad trees / more adaptive structures are on my radar, but I’m trying to balance complexity vs predictability for now.
I'd like more hover help to explain features, so i can read them while it runs. Next to 'Cognition' there is some help. I'd like that on all parameters.
And, would like to see results from multiple long term runs. Does it settle out in particular configurations over time?
And, need little more short description of what is going on, since it seems to cycle around different stability points and not really one life form take off.
Totally agree on hover help. Only a few parameters have it now, but adding tooltips across the board is on my list so it’s easier to explore while it runs.
You can also use the narrate function to make a bit more sense of it.
On long-term behavior: I’ve run hundreds of long sims, many over a million ticks, and there isn’t one stable end state, sometimes I end up with one lineage of giants but even they got taken over or go extinct. I usually see eras in size, traits, and cognition, with different dominant lineages over time. Sometimes big organisms appear quickly, sometimes it takes hours, and some worlds crash early.
I also agree a short narrative layer would help explain what’s going on. Some of the underlying assumptions are described here if you’re curious: https://soupof.life/concepts
It’s still very much an experiment. Best way to experience it is just to open it and watch a world unfold for a while.
Also, it's currently running at 1 tick per second...
That also explains the slowdown: once those values get extreme, a lot of the probability and normalization math gets very expensive.
It’s fixed now by restoring the original weights before every early return. Thanks for flagging it. That was a legit bug.
https://claude.ai/public/artifacts/8f39482c-b2c7-4bd6-8d47-4...
click the maze and you can watch flies genetically evolve brains to beat the level. Genetic algorithms beat every version of backprop and transformer architecture that I tried. Pause it and click one of the flies for a stunning visualization of its whole brain.
If you are interested you can read more on how I implemented brains here: https://soupof.life/concepts/life-organisms/cognition
Traits like spikes, tentacles, lobes, adhesion, and size add drag/weight, so complex or armored bodies are slower and less agile. Bigger bodies and complex structures also have higher metabolic upkeep. It’s not true fluid dynamics or area/volume math, but it’s tuned to produce the same evolutionary tradeoffs.
So you get: big and complex = strong but slow and hungry. Small and simple = fast and cheap but fragile.
- "micro-brains" and "learning" is always showing 0 for me..but on the "neural" section it shows some tiny ups on the brain graph, ...saying at the same time in the bigger box under the graph that 22% have micro-brains, while showing 0 in all other places for that number
- "Timeline" seems not to work, always showing "Timeline data will appear as the simulation progresses." also after 150k ticks
- regarding seasons: whats the meaning of "(2s)" for the conditions? Im assuming its a kind of countdown?
- indicator "Food" always seems to show 100%
Great questions, and you actually caught a few UI inconsistencies that I’ve now fixed.
Titans / Giants: these are just very large organisms. Titans are size 20 and up, and I log those in the size panel. I also updated the field guide with sizes: https://soupof.life/concepts/life-organisms/size-classes
Micro-brains / learning showing 0: that was a real bug in the UI. Different panels were using different thresholds to decide what counts as a brain. I’ve aligned everything so micro-brains now consistently mean organisms that can actually form memories and learn. The stats and graphs should now match.
Timeline not showing: timeline only records data if logging is enabled. I’ve updated the panel to make that explicit and added a button to enable recording directly.
Seasons and (2s): that was unclear. It now shows how many seasons are left for extreme conditions, for instance 2 seasons left, with tooltips explaining what each season does.
Food always at 100%: that was also wrong. It was showing a refill rate, not real scarcity. It now reflects actual global food availability and will drop when the world is under pressure.
Really appreciate you flagging this, it helped clean up a bunch of confusing edges.
You can click any organism to zoom in and see size, traits, and morphology details.
Lineages can change color if they diverge enough to be treated as a new distinct lineage, but that’s a separate case.
Curious about the performance issues Meegul mentioned. These simulations can be surprisingly compute-intensive once you add physics interactions between many entities. Would love to see the code if you ever open-source it.
Nice work.
Not sure yet on open-sourcing. Appreciate the interest!
When you enable the "Enable Observation", they observe your motion (through your webcam) and will react accordingly. There's a little more detail about the Webcam Observation in the manual :)
---
Webcam Observation
Enabling webcam allows the Blinkys to "see" you through motion detection. They respond to your real-world movement:
Motion is detected by comparing video frames every 100ms
Significant motion (> 30%) triggers awareness in random Blinkys
If collective trust is low (< 0.4), your movement increases their fear
If trust is high, your presence may comfort them
The "THEY ARE WATCHING YOU" indicator appears when Blinkys are aware of your cursor.
The "CAMERA ACCESS GRANTED" warning appears when webcam is active
Privacy Note: Webcam data is processed entirely locally in your browser. No video is transmitted, stored, or sent anywhere. The Blinkys only receive a single motion intensity value (0-1), not actual images. You can disable the camera at any time.
The actual simulation and arena rendering is all custom using the Canvas 2D API, no rendering libraries there.
I have 35/100 evolution score, low diversity and stagnation. Filled with just a bunch of aggressive spiked creatures. What should I do???
What you’re seeing is usually a local optimum: one aggressive/spiky strategy found something that works and crowded out everything else, so diversity collapses.
There are some things that can break it: Just waiting. At this stage you often get crashes from starvation, pathogens or reproduction overshoot. Seasons and climate cycles can shake dominant strategies loose: https://soupof.life/concepts/world-systems/climate-seasons and low-diversity phases like this are often fragile. With a bit of bad luck, this can turn into a big reset or even a near-extinction.
There’s no manual intervention by design, so it’s mostly patience or starting a fresh world. But in my experience, long stagnant plateaus are often right before something dramatic happens.
Each organism just has a set of numeric traits (size, armor, spikes, tentacles, aggression, reproduction rate, etc). There are no genes, codons, chromosomes, or genetic sequences. When organisms reproduce, offspring traits are basically noisy, heritable copies of the parents, with per-trait heritability and mutation.
Structural traits (like size) are strongly inherited, behavioral traits are more plastic. Big size, armor, high reproduction, etc all come with metabolic and mobility tradeoffs and mutation rates can go up under stress.
So it’s a phenotype-level evolutionary model, not a molecular genetics simulator. The goal is to get interesting evolutionary dynamics and tradeoffs, not to simulate real DNA or genetic architectures.
You can zoom into (and capture a snapshot of) each organism by clicking it and see a lot of details on traits.
Soup of Life is an artificial life simulation with moving agents that have genomes, energy, and heritable traits like size, morphology, and behavior. Organisms are born, feed, reproduce with mutation, and die in a continuous 2D world with different ecological zones that bias evolution in different directions.
Unlike Conway’s Game of Life, which is a deterministic cellular automaton on a fixed grid, this is an evolving ecosystem. You see predator–prey dynamics, trait trade-offs, niche specialization, boom–bust cycles, and extinction events. There is no explicit notion of species. Lineages and niches emerge naturally from reproduction and environmental pressure.
For most people it works best if you go in unprepared and just watch what happens.
As I've heard it said regarding art, part of the appreciation comes from knowing _how_ it was made (and why), not merely from what was made. We don't appreciate Warhol's soup cans because they're soup cans -- it's everything else about them that makes it art.
So, my recommendation is, make the narrator a default panel on the opening screen. Give folks a narrative description of the events occurring up front, and then invite them to explore the work from there.
No human could possible conflate this game with Conway’s game of life — especially when they explicitly name Conway’s game of life. It is conceptually impossible to make this error.