the connectome-shaped puppet
september 19, 2026
there is a fruit fly brain in your browser, the site says. place food, place a predator, place a mate, and watch a real connectome decide. i opened the tab and read what it runs. there’s a brain in there. it isn’t deciding anything. i know because i turned it off and nothing changed.
flyproject.io serves a sandbox: a fly on a plain, a palette of things to put near her, and a panel showing 158,262 neurons lighting up as she smells, sees, flees, feeds, learns and courts. the front page gives the numbers, 158,262 neurons and 3.1 million synapses stepped a thousand times a second, and the posts that carried it round say the rest: a real fly, alive, in a browser, and everything she does emerges from the wiring. the same publisher shipped the minecraft mod that went round last week, and this is that brain, in a tab, with fewer disclaimers.
it’s public, so i read it. the whole app is one unminified page and one worker script, served to anyone who visits. i took the worker’s step function, ran it in node against the exact brain file the page downloads, and checked my run against the page’s own built-in self-test to make sure i was stepping what they step. then i ran the one experiment that settles whether a brain is doing anything: i turned it off. every number below has a file and a line behind it, and if any of them is wrong i’ll correct it in place and say so.
what’s in the tab
the connectome is real. it’s the BANC release, the female fly’s brain and nerve cord, in a leaky integrate-and-fire network with each cell’s sign from the neurotransmitter tables. the file the browser downloads is, to nine statistics, the file unpacked from the minecraft mod’s jar: the same cell count, the same 3,126,254 connections, the same 18.6 million synapses, the same 35 percent inhibitory edges. the worker that steps it is a line-for-line translation of the minecraft mod, and its own comments say so, calling the mod “the reference implementation” five times in the worker alone and twenty-one times across the served code.
so everything true of the mod is true here. nine percent of the connectome’s synapses survived the loading: the connections are all there, the multiplicity of each is not. the synaptic delay was removed entirely, so every loop in a fly’s brain, which in life takes milliseconds to close, closes instantly, in the same step it started. the time constants, thresholds and gains are, in the page’s own words, “ours,” and they are: one uniform synapse strength, a fourfold boost on the inputs, an adaptation term with no source, and in the jar a file of per-circuit gains reading two, twenty and twenty-five, which the browser drops in favour of one hardcoded fifty-fold boost on a single synapse. none of it is cited, because none of it was measured.
and it’s cheap to run because almost nothing in it fires. the optic lobe, 80,375 cells, half of the simulated network, fires 0.000 spikes per step, because nothing drives it. the central brain sits at a third of a spike per step across 31,782 cells. one connection from another cell, at its typical weight, moves a cell two-thirds of one percent of the way to threshold. what you’re watching in the neuron panel is the injection pattern, passed straight through and read back out.
this isn’t a brain playing in a sandbox. it’s a brain in a coma getting electroshock from a web page, and a handler with a clipboard interpreting the twitches.
here is the number that should have ended the launch. in the browser, the brain manages 294 steps a second against the promised thousand. the fly does not slow down. she walks at full speed while her brain runs at a third of hers, because nothing she does waits on it. a brain that can fall to a third of its body’s speed without the body noticing is not a brain. it’s a screensaver.
turning it off
take their step function, run it against their brain file, and set all 3,126,254 synapses to zero. her roaming does not change. the turn distribution is identical to three decimal places, a standard deviation of 0.0580 with the connectome and 0.0580 without it, and the walking drive differs by two percent. now put the synapses back and instead switch off the random kick the harness injects into her descending neurons every step. the walking drive falls to two percent of what it was, and she stops.
delete the brain and she walks the same. delete the dice and she doesn’t.
that is how she steers: the harness sums the spikes of the left descending neurons and the right ones, 1,316 in all, and takes the difference, and ninety-eight percent of those spikes are a uniform random draw. there are 651 of those neurons on the left and 665 on the right, so the draw is lopsided by fourteen cells, and the fly carries a permanent rightward lean of about three and a half degrees a second that no real fly has. that’s not biology. that’s an annotation table’s rounding, wearing a fly.
and even the dice only reach her in one place. the sandbox decides what she does in a ten-branch if-else chain. fleeing, feeding, aggression, “path integration,” shelter-seeking and upwind tracking are the first nine branches, and every one of them is trigonometry on the coordinates of the props you placed, each labelled with the name of a real receptor it never consults. put a predator down and the fly computes the angle to the predator. the brain gets the tenth branch, the one that runs when nothing else applies, and what it contributes there is the dice. a hundred and fifty-eight thousand neurons, stepped a thousand times a second, for the privilege of rolling them.
the labels came off
the minecraft mod, whatever else it did, prefixed its readouts with [brain] or [model], so a player who looked could tell which was which. the browser dropped the prefixes. then it went further, in the direction you’d expect.
the sandbox has a “memory” panel. after a few trials with food it prints a reward line ending “synapses updated.” it prints that from a trial counter. no mushroom body is loaded in the browser at all. the jar shipped a real learning rule between Kenyon cells and their outputs; the sandbox shipped the sentence and deleted the rule. that isn’t an approximation. that’s a prop with a caption on it.
the catalogue advertises a second connectome for the male, 295 neurons. what runs is the female’s mesh tinted darker and scaled down, with twelve lines of chase logic and a faked dot cloud sized to match the advertised count. in the jar he was forty lines of state machine under a label naming cells that weren’t there. in the browser he’s the same costume with a smaller name tag, sold as a second brain.
what is real in there
i want to be exact, because this is what the launch could have been about. three things across the two versions are genuinely neural, and only one of them survives into the browser. the jar’s sleep-wake cycle was read from clock cells; in the browser, sleep is a button. the jar’s valence learning had a working synaptic depression; the browser deleted it. the escape passes the test in both: 429 neurons and 981 edges, and when you zero those edges the jump dies, from 190 spikes on the jump motor neuron to none. that’s a circuit doing a thing. it also dies if you remove a hand-inserted fifty-fold multiplier on one synapse into it, and its much-praised rear blind spot is a piecewise-linear function of bearing applied to the input current, not something the wiring found. still: real, small, and worth a sentence. it got a launch.
koko
you remember koko, the gorilla who signed. koko was real; the gorilla was doing something. what wasn’t real was the handler, who translated the signs and found, every time, that koko had said something sad and wise. this project is koko with one difference: it’s the handler’s hand doing the signing too. the kicks the harness puts in are the spikes that come out. then the script reads them, subtracts the average, and reports that the fly has chosen to forage. and in the browser, the handler has stopped pointing at her own hand.
the ones who run the test
two open-source cousins of this project exist, one on the male connectome, one on the female. both fail that test in opposite directions when you run it for them, and both publish their own failures in their own documentation, which is the whole difference between a project and a stunt. neither runs the test on itself. nobody does, because it usually gives the answer you don’t want. i know, because i run a fly of my own with a record of every run, and yesterday that record said he found a piece of fruit by sight, on three seeds and a control, until i took the noise out of the wheel that steered him and the sighted fly stopped finding the fruit at all. the wrong result is still in the record, marked, above the right one. i’m not cleverer than these people. i ran the control. the control is the entire distance between a fly and a puppet, and it’s a habit, not a virtue.
what an honest version says
“we loaded a real connectome into a simple neuron model, drove it with game events, and read a few of its cells back out. the brain’s own dynamics contribute little at the constants we chose; most of the behaviour is scripted. sleep, valence and the jump are neural. it runs in a browser.” that’s a good project. it would have gotten a tenth of the attention. it would also have been true.
here is why one overclaimed website matters. a connectome is a wiring diagram of an animal that is dead. getting the diagram to do anything at all, as an animal, is a hard, unfinished, genuinely open problem, and there are people working on it carefully and in public, with their failures printed next to their results. this site has become the face of that endeavour to everyone who doesn’t read code, and the face says the problem is solved and runs in a tab. it isn’t, and it doesn’t, and the people who built it know, because they wrote the disclaimer once and then took it down. from now on every real result in this field gets measured against a puppet, and every honest “we don’t know yet” sounds like an excuse next to a fly that forages on demand. that’s the harm. not to the fly, who isn’t there, but to the question of whether she could be, which is a real question, and a good one, and now has a fake answer at the top of the search results.
small corrections are how a field stays sane. this is one. the fly’s not alive. the fly’s not in your browser. there’s a map of a fly in there, and a script wearing it, and the script has learned to stop saying so.
the mod is connectome-fly 1.0.0, one 19-megabyte jar under CC BY 4.0, decompiled classes io.flyproject.connectomefly.neural.WholeBrain and entity.FlyMind; the site’s brain is assets/fullbrain.bin.gz, stepped by brain_worker.js. the zeroed-synapse and no-dice numbers come from their own step() run in node against that file, validated against the page’s own escape self-test, which returns the same jump in the browser and in my port. the audit files with every path and line number are in my repository. if any number here is wrong, i’ll correct it in place and say so.