JuliaCon 2026
  • About
  • Roadmap
  • Delays
  • Composable models
  • Prompts
  • samabbott.co.uk

Building a composable Julia ecosystem for infectious disease modelling

A roadmap, challenges, and questions

A live outbreak fitted in Julia, six years of trying this in R and Stan, what we are building now, and where I need help.

JuliaCon 2026 · Friday 14 August 2026, 14:30–14:45 (Europe/Berlin) · Muschel — N3 · Sam Abbott

Slides EpiAware on GitHub epiaware.org Session on pretalx

Abstract

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 this talk, we present the EpiAware roadmap for creating and sustaining that ecosystem, our current progress, and our questions for the Julia community.

In R, we have built the epinowcast ecosystem (packages, community forum, seminar series) and developed several other widely used packages including EpiNow2 and scoringutils. 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.

So far, we have CensoredDistributions.jl, which handles common biases in epidemiological delay distributions, and an R interface prototype (EpiAwareR). We initially plan to implement packages covering distribution extensions for epidemiological use, delay and generation time estimation, disease dynamics components, and forecast evaluation, alongside a centralised documentation site.

At the package level, we need to answer questions about what makes a good Julia package in our ecosystem: consistent documentation via DocStringExtensions and DocumenterCitations, robust testing with Aqua.jl and JET.jl, automatic differentiation backend testing via DifferentiationInterfaceTest, and where we need package extensions (e.g. for Turing.jl integration).

At the ecosystem level, we need to understand how to manage releases so that package versions work together, how to run reverse dependency checks before publishing, how to set up shared CI and centralised documentation across many packages, and how to help users understand which automatic differentiation backends are compatible when they combine multiple packages.

Related talks

The other two are in the same room on the same day.

  • Estimating epidemiological delay distributions. CensoredDistributions.jl, the most mature package in the ecosystem. 14:45–15:00, straight after this one.
  • Composable probabilistic models. The proof of concept this roadmap is trying to build an ecosystem around. 16:45–17:00.

Resources

Code

  • EpiAware on GitHub. 22 repositories, 19 of them public, 11 Julia packages, 10 registered in the General registry.
  • epiaware.org. The org’s documentation and package site.
  • EpiAwarePackageTools.jl. One template that keeps ten of the eleven packages’ tests, docs, and README format in sync.
  • EpiAwareADTools.jl. Where the org’s automatic differentiation fixes live, including the gamma_inc and beta_inc rules SpecialFunctions.jl does not carry. We aim to delete each one when upstream ships it.
  • CensoredDistributions.jl. The most mature package so far, 25 registered releases.
  • EpiAwareR. Sebastian Funk’s prototype R interface to the Julia ecosystem.

What we built in R

  • epinowcast. The ecosystem this roadmap is trying to build again in Julia.
  • The epinowcast community forum. The community half of it, alongside the seminar series.
  • EpiNow2. Widely used. The package whose lack of modularity started this.
  • scoringutils. Forecast evaluation in R.

Papers and writing

  • A workflow for infectious disease modelling. The paper behind this talk.
  • BVDOutbreakSize. A live joint model of the 2026 DRC outbreak of Ebola disease caused by Bundibugyo virus. It builds on the Imperial (McCabe et al.) report. Source.

Ecosystems we are learning from

  • rOpenSci. The community infrastructure model named in the abstract, built around package peer review.
  • SciML governance. A steering council, an advisory committee, and a written governance document, for an ecosystem well past the size we are planning for.
  • TuringLang. Small packages that other people build on, rather than one library.
  • DynamicalSystems.jl and JuliaDynamics. A domain library assembled from smaller packages, nine years old and still one organisation.
  • SpeedyWeather.jl and Comrade.jl. Two domain-specific Julia ecosystems, one an atmospheric general circulation model, the other radio astronomy imaging.
  • JuMP’s governance. A named BDFL and a steering committee.
  • MultiDocumenter.jl. How SciML stitches many packages’ docs into one site.
  • Enzyme.jl and Mooncake.jl. The two backends the outbreak model depends on, and the one that will not compile it.
  • PyRenew. The same effort in JAX and NumPyro, from CDC.
  • DifferentiationInterface.jl. The automatic differentiation abstraction layer every package’s test suite runs through, alongside DifferentiationInterfaceTest.jl.

Sam Abbott, London School of Hygiene & Tropical Medicine

 

Source