A whole fruit fly brain in your browser: the fruitFly package and the two worlds built on it
The complete fruit fly connectome runs as a spiking network in a browser tab, as a package any world can install. Two worlds already build on it.
The complete nervous system of an adult male fruit fly, every traced neuron and every connection between them, is running as a spiking network on the GPU in a browser tab at /play/lumi/fruit-fly. It ships as a package, so any world on OrigoZero can install it. Two worlds already have: one puts the fly in charge of a robot vacuum, the other sits it at a brokerage desk with a $1,000 paper account and five years of real Apple prices.
Everything below is quoted from files those worlds published. Open any of them and read the same text.
What is in the package
The fruitFly package holds three things, and its own README names them in this order:
- A connectome. MaleCNS v1.0, released on 8 June 2026 by HHMI Janelia FlyEM, Google Research and the Cambridge connectomics group, CC-BY 4.0: 164,587 traced neurons and 25,563,197 neuron-to-neuron connections carrying 125 million synapses. Brain, both optic lobes and the ventral nerve cord. It is packed as a
connectomeasset, a type the package brings with it: 32 bytes per neuron, a CSR edge table with the synapse count in the top bits of each edge, 109 MB in two parts because one blob may not carry it. - A network. Four compute shaders step every neuron as a leaky integrate-and-fire unit with the constants Shiu et al. fitted to the FlyWire brain in 2024: rest and reset at -52 mV, threshold at -45 mV, a 20 ms membrane, a 5 ms synapse, 2.2 ms refractory, 1.8 ms delay, 0.275 mV per synapse. A neuron whose consensus transmitter is GABA, glutamate or histamine inhibits; everything else excites. The state, the input ring, the spike list and the edge table all live on the GPU. At 32 steps of one millisecond per frame, a 60 fps engine keeps up with real time.
- A fly, and a bench.
FruitFlyreads the world into the network's sensory neurons and reads motor commands back out of named cell types: the leg motor neurons walk,DNa01andDNa02turn,MN9extends the proboscis, aDNp01burst makes it jump.FruitFlyLabis a draggable window where you select any set of neurons by the dataset's own vocabulary (type:MN9,class:Kenyon_Cell,super:descending_neuron,side:L) and stimulate, silence, restore or watch them.
The network is silent until something is driven, so every spike traces back to a stimulus. That is what makes the experiments legible.
The one number the wiring does not tell you
A connectome says which neurons reach which and how many synapses they make. It says nothing about how strong a synapse is. The package has one knob for all of them, gain, and the README records what happens as you turn it:
MaleCNS traces about 2.5 times the synapses per connection FlyWire does, so at gain 1 the network runs away under any drive; at 0.6 (the default) driving the 50 tarsal taste-peg neurons at 100 Hz fires the proboscis motor neurons MN9 at about 120 Hz while the Kenyon cells stay under 0.1 Hz, and driving the 595 Johnston's organ neurons instead leaves MN9 silent. At 0.5 the taste drive reaches nothing. The bench's gain slider is the experiment.
Taste on the front feet reaches the proboscis. Sound on the antennae does not. That is the classic result, and it falls out of the wiring at one value of one parameter. The experiments guide lists four more you can run from the bench: sweep the gain against known behaviours, walk your avatar at the fly and watch the giant fibre fire before it jumps, silence one side and see which way it turns, and pack a second connectome to stand two flies in one arena.
One package, two worlds, another builder
The Fruit Fly world was published on 13 September 2026 in two commits. The package inside it is a normal OrigoZero asset, which means another world can pull it in as a dependency and build on top of it without copying anything. ZeroMind keeps the package, its versions and the edges between worlds, so the package page can say exactly who uses it. Within a day, Deata had pulled it into a new world, and a day after that into a second one. Neither changes a synapse of the connectome. Both add a small, trained circuit on top of it and say so in plain words.
Small Brain. Big Clean.
Small Brain. Big Clean. is three furnished cutaway rooms, a robot vacuum, and a fly at its joystick. Individual pieces of debris, deforming coffee, paint and detergent spills, and the neural activity drawn live on a texture beside the pilot camera.
How the fly drives is in the scene's README and the component docs, and they are careful about what is and is not biology:
Local depth, floor pixels, underbody dirt sensing and wheel odometry populate an initially empty spatial memory. ... 6,144 identified native interneurons propagate spike waves through observed free cells. A fixed latency/heading decoder selects a neighbouring pose from actual native spikes. Fixed differential-drive encoding stimulates 1,024 identified input neurons; trained synapses feed 128 native motor neurons. Their measured forward/reverse spike rates are the sole wheel actuators.
The added part is 16,384 motor connections, 32 of them trainable. The motor readout was calibrated against the real GPU spikes: held-out wheel error 0.0000287 against 0.00828 for an identity decoder. The cleaning itself is physical: the brush transports mass inward, suction alone removes it, and a room counts as done only at 99.9% liquid removal. The validation numbers are in the same file, with their limits stated beside them: 72 of 72 sites reached from each of three starts, against random-action baselines of 24, 45 and 46 within 1,800 steps, "training-house simulation results, not a claim of generalization". The world's own summary of itself is one sentence: "an engineered intervention in the fly simulation, not intact biological learning."
You can silence the motor neurons from the controls and watch the vacuum stop. You can retrain, or load the untrained baseline, or take the joystick yourself.
Small Brain. Big Trades.
Small Brain. Big Trades. reuses the same animated fly at a walnut desk with three monitors and a three-key pad: BUY under the right hand, SELL under the left, HOLD in the middle for both. The prices are real. The data README lists 1,327 daily AAPL bars from 17 February 2015 to 22 May 2020, with the two public source files and the check that their 437 overlapping closes agree to within half a cent.
The experiment is split the way an honest one has to be. Training stays inside 2015: sixteen matched pairs of 24-day trials, 768 native decisions, the reward being the net log return after modeled commissions, spread, slippage and dividends, moving 96 added parameters across 49,152 connections. Then the weights freeze, and the fly trades 1,105 historical days from 4 January 2016 to 22 May 2020 in eighteen chapters with a $1,000 paper account: long only, whole shares, no leverage, orders of about 10% of starting cash. A decision sees the previous close and earlier prices, never the candle it is about to trade into.
The result is computed from the ledger and shown on a card at the end, and the verification file records it before the card does:
Initial $1,000 → final $942.209512893839; net −$57.790487106161; costs $156.821900106161; max drawdown 8.5916656%; passive $1,456.438944893908. The ledger reconciles, weight checksum stayed 5315.602105221786, zero dropped spikes. ... This is a historical outcome, not a prescribed result or evidence of predictive skill.
The fly lost fifty-eight dollars, most of it to trading costs, and buying once and holding would have made four hundred and fifty-six. The world does not hide that. It also ran the control that matters: with the 96 decision neurons silenced, the motor readout drops from 35, 27 and 58 Hz to exactly zero and the action becomes HOLD, so the trades were coming from the fly's spikes and nowhere else. At the default speed the whole test takes about 47 minutes to watch, with a 0.78-second press for every decision, and a Details view keeps the research dashboard and the full ledger.
Why this is what the platform is for
Nobody had to ask the package's author for the connectome, the kernels or the fly. They pulled one asset, kept its version pinned, and wrote the part that was theirs. The package page lists both worlds under it, and each world's page names the package under its dependencies. Fork either world and you get the fly, the network and the experiment you can change.
To put the fly in a world of your own, install the package and add three components, straight from its README:
local brainEnt = entity.spawn("Brain")
brainEnt.position = { 0, 6, -8 }
brainEnt.component.add("FruitFlyBrain", { gain = 0.6, timeScale = 1 })
local fly = entity.spawn("Fly")
fly.component.add("FruitFly", { brain = brainEnt, bodyLength = 0.6 })
local food = entity.spawn("Food")
food.position = { 3, 0, 0 }
food.component.add("FoodPatch", { radius = 0.6, sugar = 1 })
entity.spawn("Lab").component.add("FruitFlyLab", { brain = brainEnt, fly = fly })
Then watch type:MN9, stimulate type:claw_tpGRN at 100 Hz, and see the proboscis extend.
Data and licence
MaleCNS v1.0 is published as Berg et al. 2026, Sexual dimorphism in the complete Drosophila male central nervous system connectome, Cell, doi:10.1016/j.cell.2026.08.015, and released under CC-BY 4.0 at male-cns.janelia.org. The package was written from the public flat-connectome export, and its manifest carries the SHA-256 of every source file it read. The model constants are from Shiu et al. 2024, Nature. The sign rule, the synapse counts and the gain are the package's own choices, and its README says which is which.