Starsim.jl
Agent-based modeling framework for simulating disease transmission.
Starsim.jl is a Julia port of the Python Starsim framework for agent-based simulation of infectious disease transmission over contact networks.
Features
- Modular architecture — diseases, networks, demographics, interventions, analyzers, and connectors are independent, composable modules
- Built-in disease models —
SIR,SIS,SEIR, with a simple API for defining custom diseases - Flexible networks —
RandomNet,MFNet,MSMNet,StaticNet,MixingPool, and maternal/household networks - Common Random Numbers (CRN) — slot-based RNG streams for robust counterfactual scenario comparison
- GPU-ready — generic array backend with Metal.jl / CUDA.jl support
- AD-compatible — designed for automatic differentiation through simulations (ForwardDiff, Enzyme)
- Calibration — built-in
Calibrationframework with Optimization.jl integration - Categorical composition — Catlab.jl extension for compositional epidemiological modeling
Installation
using Pkg
Pkg.add(url="https://github.com/epirecipes/Starsim.jl")Quick start
using Starsim
sim = Sim(
n_agents = 5_000,
networks = RandomNet(n_contacts=10),
diseases = SIR(beta=0.05, dur_inf=10.0, init_prev=0.01),
dt = 1.0,
stop = 365.0,
)
run!(sim)
# Access results
df = to_dataframe(sim)
prev = get_result(sim, :sir, :prevalence)Or use the one-liner demo to get a pre-configured simulation:
sim = demo()
run!(sim)Module types
| Category | Types | Description |
|---|---|---|
| Diseases | SIR, SIS, SEIR | Infectious disease models |
| Networks | RandomNet, MFNet, MSMNet, StaticNet, MixingPool | Contact structures |
| Demographics | Births, Deaths, Pregnancy | Population dynamics |
| Interventions | RoutineDelivery, CampaignDelivery | Vaccines, treatment, screening |
| Connectors | Seasonality, CoinfectionConnector | Cross-module interactions |
| Analyzers | FunctionAnalyzer, Snapshot, InfectionLog | Custom result tracking |