ComposeBiology as code

Biosimulant is an open source framework for humans and agents to compose and run any biomodel, from Boltz, DiffDock, and SBML pathways to your own custom dynamics.

$ pipx install biosimulant
biosimulant — zsh
$

Why a framework

Biology has the models. It's missing the framework.

Biology has built up decades of mechanistic standards: SBML pathways, CellML cells, NeuroML neurons. Now AI models like Boltz-2 and DiffDock are arriving too. Getting any two to run together still means hand-writing custom Python for every connection. So only specialists can do it, and every project rebuilds the same plumbing.

Boltz-2
DiffDock
SBML
CellML
NeuroML
Your ODEs
biosimulantone contractinputs() · outputs() · advance_window()
One runnable world

Without it: custom Python wiring for every pair of models.

Biotech, beyond the specialists

Today, simulation is gated behind one-off scripts and bespoke wiring. A real framework turns biology into a developer tool. If you can write Python, you can compose and run models, and the field opens to far more builders.

Built for the agent era

As coding agents take over more of the code layer, they need one consistent interface to build against. A shared contract across every standard lets agents compose and run biomodels they've never seen, without learning each format's quirks.

One contract. Any biology standard.

Three steps. Anything else that follows the same contract, an SBML pathway, a CellML cardiac cell, a NeuroML neuron, an ONNX inference module, your own ODEs, can plug straight into your model.

  • Subclass BioModule.
  • Declare inputs() and outputs() as named ports with units.
  • Implement advance_window.

The runtime handles unit checks, time alignment, and signal delivery.

import biosimulant


class Tumor(biosimulant.BioModule):
    """A tumor that grows, shrinking under an incoming drug signal."""

    def inputs(self):
        return {"drug": biosimulant.SignalSpec.scalar()}

    def outputs(self):
        return {"cells": biosimulant.SignalSpec.scalar(emitted_unit="cells/mL")}

    def advance_window(self, start, end):
        ...  # net growth over [start, end], scaled by the drug signal

    def get_outputs(self):
        return self._outputs


world = biosimulant.BioWorld()
world.add_biomodule("tumor", Tumor())
world.add_biomodule("dose", Infusion())   # your code, SBML, CellML, ONNX...
world.connect("dose.drug", "tumor.drug")
world.run(duration=24.0)
Try it live

See Biosimulant in action

Four real labs, running in your browser.

Boltz-2 predicted protein-ligand complex in the Biosimulant lab

Drug discovery

Predict how a drug binds, from text

Paste a protein sequence and a candidate drug. The model folds the protein, drops it into the right pocket, and scores how tightly they bind. A week of wet-lab work, in a single pass. The leap that made structure-based drug discovery practical.

View more, go to labs

Talk to us about your simulation workflow

Biosimulant Platform is for teams building reusable virtual simulations across research and engineering.

  • Research teams building reusable virtual experiments instead of one-off simulations.
  • Simulation groups that need inspectable workflows, reproducible runs, and shared review loops.

Contact

Start the conversation

Tell us what you are simulating, how your team works today, and where Biosimulant might fit.

Prefer the standalone page? Use the contact page.