← back

Protein → Cell

The simulation pipeline, the open-source projects at every stage, and the RSX-shaped gap a solo systems person can build
Landscape survey · 2026-07-04

One sentence

You cannot simulate protein→cell end-to-end — it is six stages bolted together and every stage-join leaks (one stage's output is the wrong kind of object for the next); the guarded-but-recoverable gap is not accuracy, it is SPEED, and there is no production Rust MD engine to claim it.

This is an "explore the search" landscape page. Each stage below is scored three ways: how a modern 2026 pipeline handles it, where it breaks, and how a solo builder makes it simpler — with a repo table drawn from a live GitHub survey (star counts page-scraped 2026-07-04, treat as ±5%). The through-line: the models and data are increasingly open; the recoverable asset is the fast native runtime nobody owns.

Stage 1 — Sequence → Structure

Takes a sequence (protein, or a complex: protein+protein, protein+ligand, protein+nucleic acid) and predicts a static 3D pose. The AlphaFold2/3 lineage. Every repo here outputs coordinates, not motion — the shared limit the rest of the pipeline exists to fix.

How it's handled now

A 2026 pipeline treats structure as a swappable commodity stage. Boltz-2, Chai-1, Protenix and OpenFold3 have converged on near-identical complex specs, so one normalized input fans out to several models. The real cost is the MSA (multiple-sequence alignment), not the model — teams run it once, cache it, feed every model the same alignment, or go MSA-free (ESMFold, Chai single-seq) when speed beats a few points of accuracy. Because Boltz/Chai/Protenix are all MIT/Apache and commercial-clean, teams ensemble 2–3 of them and keep the best pLDDT/PAE pose rather than bet on one. Boltz-2 is the pivot: structure and a binding-affinity score in one run.

Where it breaks

You leave Stage 1 with a beautiful corpse — one frozen crystal-like pose. A protein is a distribution at 310K; function often lives in excited states it never shows. No dynamics, no thermodynamics, no kinetics. Disorder (~30% of the proteome) returns as low-pLDDT spaghetti people wrongly delete. Confidence lies exactly where it matters — allostery, cryptic pockets, point-mutation effects. AF3's affinity outputs are learned correlations with no energy underneath.

How to make it simpler

Each repo is a Python monorepo with its own conda env, CUDA pins, weight-download dance and bespoke output layout. The stage is conceptually one function — sequence → coordinates — buried under a dozen setup steps. A single Rust CLI can own the ugly parts: resolve/pin the model (Boltz-2 default: MIT, commercial-safe), one input schema compiling to whichever backend's YAML (--model boltz2|chai|protenix|openfold3), cache/reuse one MSA (or --no-msa), and normalize every backend's pose to canonical mmCIF + a small JSON sidecar. Heavy math stays in the model containers; Rust makes the stage one reproducible command.

The repos

RepoStarsLangWhat it does
google-deepmind/alphafold3~8.3kPythonReference AF3; protein/nucleic/ligand complexes, best accuracy. Weights gated + non-commercial
jwohlwend/boltz~4.1kPythonBoltz-1/2 — AF3-parity structure + binding affinity, MIT, commercial-OK
facebookresearch/esm~4.2kPythonArchived ESM/ESMFold — single-sequence fold, no MSA
aqlaboratory/openfold~3.4kPythonTrainable PyTorch AF2; the training substrate the field forks
RosettaCommons/RFdiffusion~2.9kPythonDesign, not prediction — diffuses novel backbones/binders
evolutionaryscale/esm~2.8kPythonESM3 generative + ESMC embeddings; fast MSA-free fold (weights NC)
chaidiscovery/chai-lab~2.0kPythonChai-1 all-atom complex prediction, MSA-free option, restraint conditioning
bytedance/Protenix~2.0kPythonAF3 reproduction; Protenix-v2 gains on antibody-antigen
PaddlePaddle/PaddleHelix~1.1kPythonHosts HelixFold / HelixFold3, PaddlePaddle AF3-class
aqlaboratory/openfold-3~780Python2026 newcomer — bitwise AF3 repro, best open monomeric RNA
dptech-corp/Uni-Fold~420PythonPyTorch AF2/Multimer reimpl, trainable multimer
uw-ipd/RoseTTAFold2~210PythonRF2 folding, the RoseTTAFold line

Stage 2 — MD engines + ML force fields

Takes Stage 1's frozen pose and moves it — integrate Newton's equations, get a trajectory. Two knobs: the integrator (the MD engine) and the forces (classical force field vs neural potential).

How it's handled now

Velocity-Verlet at a ~2 fs timestep (4 fs with hydrogen-mass repartitioning), Langevin/Nosé–Hoover thermostat, SPME Ewald for long-range electrostatics, GPU via CUDA. GROMACS is the throughput workhorse; OpenMM is where new methods land. The 2026 shift is ML interatomic potentials (MACE/MACE-OFF, NequIP/Allegro, Orb, UMA) — near-DFT accuracy with open, downloadable weights — dropped into OpenMM via openmm-ml or served by torchmd-net.

Where it breaks

The MLIP weights are open; the runtime is the moat. Inference runs in Python/PyTorch/JAX and is 10–100× slower than classical force fields, with per-step Python overhead dominating — the accuracy is there, the speed is not. Setup (topology, atom typing, protonation, solvation) is fragile glue that breaks silently. And the timestep is capped by the fastest bond vibration, so reaching 1 ms = 109–1012 steps — the wall of Stage 3.

How to make it simpler

The stack is fast physics wrapped in slow Python glue. Two standalone, cargo add-able wedges: (1) a Rust neural-potential inference kernel (Candle/burn) that keeps data resident on GPU and fuses the message-passing kernels — the exact CPU↔GPU-copy-every-step bug that David-OConnor/dynamics admits about its own classical kernel; (2) a deterministic Rust setup tool (PDB → atom typing + protonation + solvation + FF assignment) to kill the silent-failure surface.

The Rust verdict — verified live

There is no production Rust MD engine. lumol (the closest to a general engine) is self-labeled alpha, classical-only, stalled. David-OConnor/dynamics is the most real attempt — genuine classical MD (Verlet + Ewald + Amber FF, CUDA) — but ~8 stars, solo, admits its GPU path copies CPU↔GPU every step, and has zero neural-potential support. Everything else in the Rust orbit is analysis/IO (groan_rs in Rust, chemfiles C++ with Rust bindings) or force-field fragments. Open lane, confirmed.

The repos

RepoStarsLangWhat it does
lammps/lammps~3.0kC++Large-scale parallel MD, materials-heavy, huge plugin surface (GPL)
facebookresearch/fairchem~2.2kPythonFAIR Chemistry hub — UMA universal potential, data, demos
openmm/openmm~1.9kC++Scriptable GPU MD toolkit; where new methods land
jax-md/jax-md~1.4kPython/JAXDifferentiable GPU/TPU MD — grad through the sim
ACEsuit/mace~1.3kPythonHigher-order equivariant MLIP; near-DFT, weights downloadable
gromacs/gromacs~935C++Fastest classical MD (GH is a mirror; dev on GitLab)
mir-group/nequip~933PythonE(3)-equivariant interatomic potentials
atomistic-machine-learning/schnetpack~934PythonNN potential-energy-surface toolbox (SchNet, PaiNN)
torchmd/torchmd~711PythonEnd-to-end MD engine in PyTorch
orbital-materials/orb-models~602PythonOrb foundation forcefields; weights open
mir-group/allegro~490PythonStrictly-local scalable E(3)-equivariant potential
torchmd/torchmd-net~478Python/C++Train + serve NN potentials (TensorNet, ET), GPU MD
glotzerlab/hoomd-blue~438C++/CUDAGPU MD + Monte Carlo, soft-matter focus
lumol-org/lumol~209Rust"Universal" MD + Monte Carlo — alpha, classical-only, stalled
David-OConnor/molchanica~147RustViewer/editor/simulator GUI; CUDA, GPU docking (app, not library)
openmm/openmm-ml~175PythonHigh-level API to drop MLIPs into OpenMM
ACEsuit/mace-off~74ShellPre-trained transferable organic force fields; weights downloadable (NC)
David-OConnor/dynamics~8RustReal classical MD lib (Verlet, OPC, SPME, Amber FF) — solo, classical-only, GPU path slow

Stage 3 — The timescale gap (the hard wall)

MD reaches ns–µs (ms only on D.E. Shaw's Anton ASIC). Biology — folding, allostery, catalysis, gating — lives at ms → s → minutes, 3–9 orders past routine MD. It's a wall, not a slope: cost is exponential in barrier height (Kramers/Arrhenius). 100× more GPUs buys two orders of linear wall-clock against an exponential need. Brute force loses.

How it's handled now

Three families patch around it, each trading a different thing:

Enhanced sampling

Metadynamics (PLUMED), replica exchange, umbrella sampling — bias along a chosen collective variable, then unbias. Breaks: you must guess the reaction coordinate; a wrong CV gives a confidently-wrong free-energy surface.

Markov State Models

Run thousands of short trajectories, discretize, estimate a transition matrix whose slow eigenvectors give the kinetics. Breaks: needs huge aggregate sampling + careful state/lag choice; bad discretization injects non-Markovian artifacts.

Coarse-graining

Martini 3 via martinize2 — merge ~4 atoms into a bead for 100–1000× speedup. Breaks: throws away the chemistry (H-bonds, side-chain detail) you often needed; hand-tuned, poor transferability.

Where it breaks — and why MSM is the clean wedge

The whole live MSM world is one maintained Python library (deeptime) plus a graveyard of archived predecessors (PyEMMA, MSMBuilder, msmtools). The math — TICA (a generalized symmetric eigenproblem C(τ)v = λC(0)v), k-means/regspace clustering, reversible transition-matrix MLE, PCCA+ — is published and small. deeptime is in-memory, single-machine, scipy-bound; it wants the whole trajectory set in RAM. But mdCATH is 3.3 TB and Folding@home is many TB — today you can't MSM the big open datasets on a workstation.

How to make it simpler

A streaming Rust MSM/TICA/clustering builder: out-of-core TICA (Welford covariance) + streaming mini-batch k-means + transition counting — the covariance accumulation and counting are embarrassingly streamable. One binary ingests trajectory frames → emits metastable states + rate matrix + implied-timescale plot. No Python, no notebook, no AI-glue. And a ready test oracle already exists: mdshare serves the alanine-dipeptide set every deeptime tutorial uses, so the Rust builder validates its eigenvalues/timescales against deeptime's published outputs on the same input (to numerical tolerance — different eigensolvers won't match bit-for-bit). Correctness is checkable without a single experiment — the moat is speed, and speed is verifiable.

The repos — sampling, MSM, coarse-graining

RepoStarsLangWhat it does
deeptime-ml/deeptime~873PythonThe current MSM stack — TICA, VAMP, clustering, MSM/HMM, VAMPnets
plumed/plumed2~505C++The enhanced-sampling library; metadynamics, umbrella, CVs
markovmodel/PyEMMA~338PythonLegacy MSM package — archived 2023, points to deeptime
msmbuilder/msmbuilder~167PythonEarlier MSM toolkit (Stanford lineage) — archived 2021
marrink-lab/vermouth-martinize~148PythonMartinize2 — all-atom → Martini 3 coarse-grained topologies
openpathsampling/openpathsampling~117PythonTransition path sampling — reactive trajectories without a global CV
markovmodel/msmtools~41PythonLow-level transition-matrix estimation (the numerics under PyEMMA)
markovmodel/mdshare~34PythonDownloader for benchmark sets (alanine dipeptide) — the test oracle

Public trajectory datasets — the fuel

DatasetScopeLicenseWhat it is
mdCATH3.3 TB, 5,398 domains, 62.6 ms aggregateCC-BY-4.0Largest open all-atom set; domains × 5 temperatures (HDF5)
ATLAS1,938 proteins, 3× replicasCC-BY-NC-4.0Standardized MD of PDB structures + flexibility (NOT CC0; ~100 ns short)
MISATO16,972 MD sims + 19,443 QM ligandsLGPL-2.1Protein–ligand complex MD for drug discovery
Folding@homemany TB (SARS-CoV-2 etc.)datasets CC0Distributed-computing trajectories; scattered per-project via MolSSI/OSF
DESRES (Anton)fast-folding proteins, GPCRfree-NC, by agreementThe gold ms-scale trajectories — gated by request, not open-download

Stage 4 — Protein → Interactions (docking + affinity)

Given the structure, predict how it binds — the ligand pose, and the binding constant. This is the drug-discovery funnel.

How it's handled now

A funnel: AF3/Boltz-2/Chai fold the complex → Vina/gnina/DiffDock/DynamicBind pose the ligand → OpenFE/FEP (or Boltz-2's affinity head) rank the survivors. Boltz-2 is the 2026 shift — structure and a learned affinity in one pass, collapsing two stages.

Where it breaks

Docking gives poses, not affinities — scoring is the weakest link in all of drug discovery. Boltz-2's affinity is a correlation, not a computed ΔG, so FEP still guards the "real number." And FEP is a Stage-3 problem in disguise: its accuracy is bounded by sampling convergence, so slow binders / induced fit produce silent non-convergence. Cryptic pockets are Stage-3 rare events invisible to a static pose. ML potentials (MACE-OFF, Orb) are the credible path to physics-grade affinity — weights downloadable — but the slow Python runtime is, again, the block.

How to make it simpler

The honest read: the field is drowning in orchestration Python and starved of fast native runtime. The same MSM/kinetics and neural-potential kernels from Stages 2–3 are the simplification here — cryptic pockets and induced fit are rare-event sampling problems, and physics-grade affinity is a fast-inference problem. Don't rebuild the scorers; build the runtime the scorers should call.

The repos

RepoStarsLangWhat it does
gcorso/DiffDock~1.5kPythonDiffusion generative docking (blind pose) — pose only, no ΔG
ccsb-scripps/AutoDock-Vina~1.0kC++Fastest/most-used open docking engine; empirical scoring
gnina/gnina~950C++CNN-scored docking (fork of smina/AutoDock)
OpenFreeEnergy/openfe~301PythonAlchemical free energy (FEP/TI) — the open Schrödinger-FEP+ path
luwei0917/DynamicBind~297JupyterEquivariant generative model — ligand-specific flexible (induced fit)

(Boltz, OpenMM, GROMACS, PLUMED, MACE, Orb recur here from earlier stages — the funnel reuses the same engines.)

Stage 5 — Molecule → Pathway → Cell (systems biology)

Compose interactions into a network and simulate the cell's behaviour — ODEs when copy numbers are high, exact Gillespie SSA (+ tau-leaping) when they're low.

How it's handled now

libRoadRunner is the fast SBML engine; COPASI/basico and Tellurium wrap it for humans; BioNetGen/PySB handle rule-based combinatorial networks. Whole-cell splits into two camps: mechanistic (wcEcoli, E-Cell, Vivarium — hand-assembled, organism-specific) and ML virtual-cell (Arc STATE, scGPT, Geneformer, CZI — interpolate transcriptomics).

Where it breaks — the guarded core

The universal wall is not the solver — it's the rate constants nobody published. A 50-species model needs 100+ params (kon, koff, kcat, Km); most were never measured, the rest measured in vitro under conditions that don't hold in-cell. Parameter inference is an under-determined inverse problem — sloppy / structurally non-identifiable: many parameter sets fit the same data. SABIO-RK (300k+ params) and BioModels give a fraction of the numbers, never the whole set. And the ML virtual-cell camp does not simulate biophysics — it interpolates transcriptomics with no idea what a protein's structure is doing; its real moat is proprietary Perturb-seq/imaging data (Recursion, Insitro, Ginkgo), unrecoverable without a wet lab.

How to make it simpler

A Rust exact-Gillespie / tau-leaping core with a structural-identifiability front door: fit a CRN to time-series and report which parameters are non-identifiable from the data rather than faking a fit. The simplification is not "solve the params" (math forbids it) but "tell the user honestly what's fittable" — which no mainstream tool foregrounds.

The repos

RepoStarsLangWhat it does
bowang-lab/scGPT~1.6kJupyterSingle-cell multi-omics foundation model (perturbation, annotation)
chanzuckerberg/cellxgene~780JSInteractive single-cell transcriptomics explorer (not a simulator)
ArcInstitute/state~608PythonSTATE — predicts perturbation response; open weights (NC), no biophysics
pysb/pysb~198PythonRule-based models as Python programs (compiles to BNG/Kappa)
sys-bio/tellurium~142PythonPython modeling env over libRoadRunner + Antimony
copasi/COPASI~129C++GUI+lib for biochemical network sim (ODE, SSA, param-fit)
RuleWorld/bionetgen~68C++/PerlRule-based modeling of combinatorial signaling networks
sys-bio/roadrunner~62C++High-performance SBML simulator, LLVM-JIT ODE/stochastic
CovertLab/wcEcoli~41PythonCovert Lab whole-cell E. coli model (Science 2022)
vivarium-collective/vivarium-core~37PythonMulti-scale composition engine connecting heterogeneous processes
ecell/ecell4~18PythonMulti-algorithm/multi-scale/spatial cell sim

Kinetic-parameter data (not code): SABIO-RK (300k+ reaction-kinetic params, REST API) and BioModels (SBML repository — publishes topology, hides the numbers).

The gap to build

The RSX edge wasn't the biggest market — it was a specific gap only you saw, exploitable alone. The biotech analogue must be guarded (someone hoards it), recoverable (physics + public tools + public data reconstruct it), and a solo wedge (a standalone artifact useful to non-you users day one). The 2026 finding that reframes everything: the models are less guarded than the folklore says. STATE ships open weights; the Virtual Cell Atlas is CC0; MACE-OFF/Orb weights are downloadable; SABIO-RK holds 300k+ params. So "the crown jewel is proprietary weights" is mostly wrong. The guarded-and-recoverable thing is speed, not data.

The ONE staple, shaped like RSX

A Rust neural-potential MD inference kernel + Markov-State-Model builder — "the fast substrate for biological-timescale dynamics." The field agrees on the methods (MSMs, VAMPnets, MACE-class potentials); the reference implementations are slow Python/JAX and there is no production Rust MD engine. Value in the runtime/solver layer, standalone, users-not-you, no AI-agent glue, no user-coupled SaaS — the same DNA as the simulated-bifurcation QUBO/Ising solver.

v0 — the wedge (weekend → month)

A fast Rust MSM/TICA/clustering builder over public trajectories (DESRES-on-request, Folding@home CC0, mdCATH CC-BY, ATLAS, MISATO). Pure numerics — TICA, streaming k-means, reversible transition-matrix MLE, PCCA+. Streaming/out-of-core makes the open trajectory era usable on a workstation, which deeptime can't. Validates to tolerance against deeptime on the mdshare alanine-dipeptide set. MD labs cargo add it day one. A stochastic/low-latency background is the moat here.

v1 — the kernel

A batched, correct mixed-precision neural-potential inference kernel (Candle/burn) for downloadable MACE-OFF/Orb weights — keep data resident on GPU, fuse the message-passing kernels. This is the thing openmm-ml and NVIDIA NIM get wrong (NIM returns near-zero FP8 activations from StripedHyena). You're not training a model; you're building the substrate that serves open weights at speed.

The honest catches — where it is NOT solo-buildable

The virtual-cell forward model itself needs the wet-lab Perturb-seq data moat (Recursion ~50PB, Insitro, Ginkgo). You cannot generate 100M perturbed cells without a wet lab — don't race Arc/pharma on their data. Fails the solo-wedge leg.

New force-field training data needs DFT clusters you lack — recover the kernel, not the dataset.

Some kinetic rates are non-identifiable from any public time-series by math, not secrecy — your tool must report that honestly, not fake a fit.

The through-line, every stage: the models and data are increasingly OPEN; the guarded-but-recoverable asset is SPEED. Every simplification above is the same move — take a slow Python reference implementation of published numerics and ship it as one fast standalone Rust runtime. Program the layer above the cell = build the engine that computes what the cell will do, fast enough to close the loop.