A composable Julia ecosystem for infectious disease modelling.
Infectious disease models that integrate multiple data sources provide better evidence for outbreak response than chains of separate models, but building them is slow and requires expertise across domains. Composable modelling, where validated components combine into joint models that properly propagate uncertainty, addresses this but requires an ecosystem of reusable infectious disease model components. We believe Julia is the best language for this ecosystem due to its type system, multiple dispatch, automatic differentiation support, and existing scientific computing infrastructure (SciML, Turing.jl, Distributions.jl), which provide the foundations composable modelling needs.
In R, we have built the epinowcast ecosystem (packages, community forum, seminar series) and developed several other widely used packages including EpiNow2 and scoringutils. These are used by infectious disease academics and public health departments internationally. We want to create something equivalent in Julia: a domain-focused ecosystem in the mould of SciML or Turing.jl, with the community infrastructure of rOpenSci and the domain specificity of SpeedyWeather.jl.
The ecosystem is a set of small, composable packages that combine into infectious disease models: each does one thing and combines with the others, and most extend Distributions.jl so they share a common interface and compose cleanly. Package documentation is collected on the ecosystem site, its unified docs browser, and the packages page. Empty scaffold repositories are listed as planned until they have real, documented functionality.
| Package | Description |
|---|---|
| CensoredDistributions.jl | Primary, interval, and double interval censoring for epidemiological delay distributions |
| ComposedDistributions.jl | A verb grammar for n-ary composition over any Distributions.jl distribution |
| ConvolvedDistributions.jl | Distribution convolution and shared numerical quadrature for Distributions.jl |
| ModifiedDistributions.jl | Wrappers that each change one behaviour of a distribution — rescaling, likelihood weighting, hazards, or transforms |
| ReparameterisedDistributions.jl | Alternative parameterisations for Distributions.jl |
| LoweredDistributions.jl | Lower a distribution, or a whole composed event tree, onto a backend-agnostic dynamical-systems representation (a phase-type chain or a CTMC) |
| DistributionsInference.jl | A PPL-neutral fit protocol and log-density engine: any object that names its own parameters becomes fittable, with Turing.jl, Bijectors, and FlexiChains readback as extensions (early development) |
| ScoringRules.jl | Proper scoring rules for probabilistic forecasts |
| ComposableTuringIDModels.jl | Composable probabilistic infectious disease modelling built on Turing.jl — the ecosystem prototype (early development) |
| EpiAwareADTools.jl | Automatic differentiation safety machinery for the stack, tested across ForwardDiff, ReverseDiff, Mooncake, and Enzyme |
| EpiAwarePackageTools.jl | Shared CI, documentation, quality, and AD-benchmark tooling for the ecosystem |
| EpiAwareR | R interface to EpiAware.jl (prototype) |
| Package | Description |
|---|---|
| GenerationTime.jl | Representing and estimating generation time distributions |
| DEdiseasecomponents.jl | Reusable components for differential equation infectious disease models |
New projects start as project proposals before they become scaffold repositories. If you have an idea for a composable modelling component that does not exist yet, add a proposal there.
| Repo | Description |
|---|---|
| ComposableProbabilisticIDModels | The case for composable probabilistic infectious disease models |
| JuliaForIDM | Julia for applied infectious disease modelling |
We are at an early stage and actively looking for collaborators. If you are interested in composable modelling, infectious disease epidemiology, or Julia ecosystem development, please open an issue or get in touch.