Too large a timestep or too high a temperature can send a bead to infinity. Hit Restart. If it keeps happening, bring the temperature down.
This needs WebGL2 and WebAssembly. Both are standard in current browsers, but a hardware-acceleration setting or an old device can block them.
Both halves of that sentence matter, so here is exactly what is running.
Each residue is one bead at its α-carbon. The beads obey Langevin dynamics
under a structure-based potential — a Gō model, in the Clementi–Onuchic
form: harmonic bonds and bond angles, a two-term torsion potential, a
10-12 well for every native contact, and a repulsive r⁻¹² core
for every other pair. Nothing is scripted. The chain finds its way there by
integrating forces, and every force in it is checked against a numerical
gradient of the energy before the build ships.
The reference bond angles, torsions and contact distances are all read off the deposited structure. The native state is the global energy minimum by construction. So this model can reproduce a fold; it cannot predict one. Real de-novo folding from sequence alone is not something a browser — or, with physics, anything else — currently does. That gap is why AlphaFold happened.
What the model does earn you is the shape of the process: the collapse, the search, the order contacts form in, how a β-sheet is more frustrated than a helix bundle, and what happens as you push the temperature toward the folding transition. Those are real, and they are what you are watching.
Q is the fraction of native contacts currently made — the standard reaction coordinate for folding. A contact counts as made inside 1.2× its native distance. RMSD is the C-alpha deviation from the deposited structure after optimal superposition. States visited accumulates every (Q, energy) pair the run has passed through: the funnel that textbooks draw as a cartoon, drawn instead from the trajectory in front of you.
| protein | residues | contacts | steps to fold | steps/s | seconds |
|---|---|---|---|---|---|
| Chignolin | 10 | 13 | 40k | 427,000 | 0.1 |
| Trp-cage | 20 | 33 | 70k | 193,000 | 0.4 |
| Villin HP-35 | 35 | 70 | 50k | 85,000 | 0.6 |
| LDLR LA5 | 37 | 83 | 40k | 71,000 | 0.6 |
| Protein G B1 | 56 | 138 | 80k | 42,000 | 1.9 |
| Ubiquitin | 76 | 177 | 90k | 29,000 | 3.1 |
| TBEV protein E | 395 | 1111 | never | 2,200 | — |
Folds are deliberately slowed to about twelve seconds so there is something to watch; the Speed control gives the time back. The last row is the honest edge: 395 residues never reached Q ≥ 0.85 inside the cap, and an all-atom simulation of the same molecule in explicit water would be years of tab. WebAssembly costs about 1.1–1.6× native here — the wall is the timescale, not the language.
It started as a question about a cryo-EM paper — Ji et al., Orthoflaviviruses use diverse binding modes to engage LDLR family receptors — and how much of protein physics a browser could actually afford. Two of the proteins here are from that paper's world: the LDLR LA5 module, and the tick-borne encephalitis virus envelope protein.
Structures from the RCSB Protein Data Bank. Engine in Rust, compiled to WebAssembly with no bindgen; renderer is hand-written WebGL2.