Very interesting to watch, though I don't really have a great idea of what's going on most of the time. Performance seems to be fairly poor despite my system being pretty beefy (Ryzen 9 7950x3d). I see the performance monitor and notice that the render loop seems to fairly regularly exceed the latency for 60fps, despite this being a 'simple' task by modern standards. I'd give more helpful feedback as to why, but the minified code makes it hard to say.
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.
FPS dips usually line up with big ecological events (population blooms, mass reproduction, lots of giant organisms, pathogen waves). The sim and rendering are decoupled, so you get (hopefully) brief spikes when a lot happens at once, then it settles again as populations crash/thin out. It’s normal behavior, not a runaway bug.
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.
Yes, some parts are inherently O(n²) (mate finding, crowd density, predator/prey proximity, pathogen spread). Ecology needs pairwise relationships.
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.
Fair question. By real time I mean the simulation is continuously running and evolving while you’re watching it, not that it’s synced to real-world biological or physical time.
Neat simulation, but something seems up with the traits. I have ended up with two lineages with ridiculously high "Predate" scores - one with over 10^22 "percent".
Also, it's currently running at 1 tick per second...
Good catch, you actually found a bug. The predation (and dormancy) weights were being multiplied by scarcity/emotion modifiers, but in some early-return paths the original values were never restored. That meant the weights compounded every tick and could blow up exponentially into these absurd numbers.
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.
I'm not sure if it's a local issue or intended, but the dots change color when crossing different niches(?), like their color is filtered through the background pane. I would imagine the color of the dots represent specific species and shouldn't change color across environments.
@maybe-tomorrow out of curiosity, is my guess that this is made with help from codex correct? (I'm trying to keep up my sense for the different default aesthetics of the different models, but this one I'm not sure about)
This is awesome. How do you integrate morphology into the simulation? Does morphology effect movement (via area friction or mass impact on momentum) or metabolism (via area/volume ratio)?
Maybe off topic but this site feels very vibe coded to me. Doesn't mean it's necessarily slop, it seems interesting. But I guess it's just too much effort on the UI and other things like that which someone with a limited budget wouldn't spend time on (but an AI can) vs the core thing. Just an observation (and apologies if I'm wrong).
Spent a few minutes just watching worlds unfold. There's something meditative about it.
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.
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.
I actually got a lot of thoughtful feedback from Reddit after sharing this last week, and I’ve been iterating on it since. Figured it was worth sharing the updated version again.
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.
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 someone who, indeed, went in unprepared to just to see what happens, I was also left wanting in knowing what exactly I was looking at. It all just looked arbitrarily random to me.
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.
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.
If you’re interested in what’s happening under the hood (and what isn’t), I’ve documented the concepts and abstractions here:
https://soupof.life/concepts
It’s a living doc, but should answer quite some questions.
Very interesting to watch, though I don't really have a great idea of what's going on most of the time. Performance seems to be fairly poor despite my system being pretty beefy (Ryzen 9 7950x3d). I see the performance monitor and notice that the render loop seems to fairly regularly exceed the latency for 60fps, despite this being a 'simple' task by modern standards. I'd give more helpful feedback as to why, but the minified code makes it hard to say.
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.
it runs slow for me too but also doesn't peak the CPU core
FPS dips usually line up with big ecological events (population blooms, mass reproduction, lots of giant organisms, pathogen waves). The sim and rendering are decoupled, so you get (hopefully) brief spikes when a lot happens at once, then it settles again as populations crash/thin out. It’s normal behavior, not a runaway bug.
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.
I guess some O(n^2) algorithm.
Yes, some parts are inherently O(n²) (mate finding, crowd density, predator/prey proximity, pathogen spread). Ecology needs pairwise relationships.
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.
What does the "real" mean in "real time"?
Fair question. By real time I mean the simulation is continuously running and evolving while you’re watching it, not that it’s synced to real-world biological or physical time.
love the UI. i made something along a similar concept recently: https://blinkys.entropicsystems.net/
Neat simulation, but something seems up with the traits. I have ended up with two lineages with ridiculously high "Predate" scores - one with over 10^22 "percent".
Also, it's currently running at 1 tick per second...
Good catch, you actually found a bug. The predation (and dormancy) weights were being multiplied by scarcity/emotion modifiers, but in some early-return paths the original values were never restored. That meant the weights compounded every tick and could blow up exponentially into these absurd numbers.
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.
I'm not sure if it's a local issue or intended, but the dots change color when crossing different niches(?), like their color is filtered through the background pane. I would imagine the color of the dots represent specific species and shouldn't change color across environments.
@maybe-tomorrow out of curiosity, is my guess that this is made with help from codex correct? (I'm trying to keep up my sense for the different default aesthetics of the different models, but this one I'm not sure about)
This is awesome. How do you integrate morphology into the simulation? Does morphology effect movement (via area friction or mass impact on momentum) or metabolism (via area/volume ratio)?
Maybe off topic but this site feels very vibe coded to me. Doesn't mean it's necessarily slop, it seems interesting. But I guess it's just too much effort on the UI and other things like that which someone with a limited budget wouldn't spend time on (but an AI can) vs the core thing. Just an observation (and apologies if I'm wrong).
Spent a few minutes just watching worlds unfold. There's something meditative about it.
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.
I notice it mentions microbrains, in case people are interested, a similar fruitflies evolving brains is this one: (Desktop only).
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.
The ShowHN a few days ago, https://news.ycombinator.com/item?id=46613549
I actually got a lot of thoughtful feedback from Reddit after sharing this last week, and I’ve been iterating on it since. Figured it was worth sharing the updated version again.
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.
Could you link the Reddit post? I’ve been interested in this kind of idea and how these systems work but never knew how to begin
Sure: https://www.reddit.com/r/InternetIsBeautiful/comments/1qfoej...
Looks very cool, so congrats, but I'm not that interested without a description of the genomes, etc.
Hey, I remember this Black Mirror episode!
It's cool. Curious what libraries you're building on, from a web front-end perspective, to make the UI and charts etc?
The website does not make it clear what is it about, is this a Conway's game of life implementation?
Creator here. It is not Conway’s Game of Life.
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 someone who, indeed, went in unprepared to just to see what happens, I was also left wanting in knowing what exactly I was looking at. It all just looked arbitrarily random to me.
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.
Hello bot.
Really like what you are going for.
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.
Amazing! Thank you for sharing.
A couple sprites might help better understand what is going on, and feel better emotional connection to these lives.