✕
What you are looking at
A square world that wraps at the edges. Seeds grow in drifting patches. Sparrows eat seeds; hawks eat sparrows. Every bird has an energy budget: moving, seeing and simply being alive all cost energy, a meal restores some, and a bird that runs dry dies. A bird with plenty of energy has a chick, which inherits its parent's body plan and brain with small mutations.
Nobody is told to chase or flee. A bird's retina feeds a tiny neural network that decides how hard to turn and accelerate. Brains that ate got to reproduce; brains that did not, did not. What you see is what survived.
Keys
Space pause / play
. step one tick
[ ] slower / faster
F follow the selected bird
R select a random bird
V show every bird's field of view
T show the selected bird's trail
S scatter seeds
M arm a meteor, then click
0 reset the view
Esc deselect / cancel
Reproducible by design
The seed in the header and the settings you choose define the world completely. The same link replays the same world, tick for tick, on any machine, and the checksum in the status bar matches what the native command-line build prints for the same seed and tick.
Save world writes this exact moment to a file. Open it here later, drop it on the map, or continue it headless with rustywings run --resume; rustywings verify --resume … --ticks 0 prints the checksum you saw when you saved. Save genome writes one bird's body plan and brain; drop that file on another world to release the bird there.
Built in Rust, compiled to WebAssembly, simulated on a Web Worker and drawn with WebGL2. Inspired by Patryk Wychowaniec's Learning to Fly series; the simulation, the ecosystem and this frontend are original work. Source on GitHub .