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 modelsSIR, SIS, SEIR, with a simple API for defining custom diseases
  • Flexible networksRandomNet, 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 Calibration framework 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

CategoryTypesDescription
DiseasesSIR, SIS, SEIRInfectious disease models
NetworksRandomNet, MFNet, MSMNet, StaticNet, MixingPoolContact structures
DemographicsBirths, Deaths, PregnancyPopulation dynamics
InterventionsRoutineDelivery, CampaignDeliveryVaccines, treatment, screening
ConnectorsSeasonality, CoinfectionConnectorCross-module interactions
AnalyzersFunctionAnalyzer, Snapshot, InfectionLogCustom result tracking

Documentation outline