EpiAware EpiAware EpiAware
  • Quick start
  • Docs
  • Tutorials
  • News
  • Gallery
  • Guides
    • Using Julia
    • FAQ
    • Contributing
    • Developer docs
  • Community
    • Get involved
    • Team
    • Funding
    • epinowcast & the forum
  • Forum
EpiAware Logo EpiAware Logo

Composable tools for infectious disease modelling in Julia.

Composable

Small, interchangeable parts — delays, latent processes, infection and observation models — that combine into a full joint model. Swap a part to test a different assumption.

Uncertainty-aware

Uncertainty propagated correctly from the latent process through infection dynamics and observation. Full Bayesian inference via Turing.jl’s NUTS sampler.

Built for response

Designed for real-time outbreak analysis: nowcasting, forecasting, and scenario modelling from the same model definition, with reporting delays and ascertainment built in.

Built on Julia

Fast, autodiff-ready, and tightly integrated with Turing.jl, SciML, and the Julia scientific ecosystem.

Get Started
composed_delays.jl
using ComposedDistributions, ModifiedDistributions, Distributions

# A delay tree: incubation → competing outcomes
tree = Sequential([
    Gamma(2.0, 1.5),                 # incubation period

    # compete/recover branches
    resolve(:death   => (Gamma(2.0, 3.0), 0.3),   # 30% fatal
            :recover => (LogNormal(2.0, 0.8), 0.5), # 50% recover
            :hosp    => LogNormal(1.5, 0.6)),       # 20% hospitalised
])

# Inspect the tree, parameter inventory, and default priors
event_tree(tree)
params_table(tree)
priors = build_priors(params_table(tree))

# Simulate a record and score it
rand(tree)
logpdf(tree, ans)

Core Packages

The EpiAware ecosystem is built on a foundation of powerful, composable packages.

Explore Ecosystem →
ComposableTuringIDModels.jl

Assemble infectious disease models from interchangeable parts as a single Turing model.

CensoredDistributions.jl

Handle the censoring and truncation biases common in epidemiological delay data.

ComposedDistributions.jl

A grammar for composing distributions into event trees.

ModifiedDistributions.jl

Rescale, weight, or modify distributions, keeping the full distribution interface.

Explore Ecosystem →

A model built from parts

Assemble a latent process, an infection model, and observation layers into one Turing model. The structure is clear — every part is named and stays inline.

Quick Start →
renewal_model.jl
using ComposableTuringIDModels, Distributions, Turing

# Renewal infections with inline latent process
data = IDData(gen_distribution = Gamma(1.4, 1 / 0.38))

model = IDModel(
    Renewal(data;
        rt = AR(; ϵ_t = HierarchicalNormal(
            std_prior = HalfNormal(0.1))),
        initialisation_prior = Normal(log(1.0), 1.0)),

    # Multiple observation layers:
    #   delay → ascertainment → negative-binomial noise
    LatentDelay(
        Ascertainment(
            NegativeBinomialError(),
            ascertainment_prior = Beta(10, 2)),
        truncated(Normal(5.0, 2.0), 0.0, Inf)))

# Fit to case data with Turing's NUTS
chain = sample(as_turing_model(model, cases, length(cases)),
               NUTS(), MCMCThreads(), 1_000, 2)

News & Updates

Read the latest from the EpiAware team.

View more →

A composable ecosystem for infectious disease modelling

Why we are building EpiAware, and where it is today.

Jul 8, 2026
No matching items
View more →

Built on Julia

We build in Julia for its type system, multiple dispatch, and automatic differentiation, on top of the scientific infrastructure.

SciML

Differential equations, sensitivity analysis, and scientific machine learning.

Turing.jl

Probabilistic programming and Bayesian inference.

Distributions.jl

The shared vocabulary of probability distributions our packages extend.

New to Julia? Start with the Using Julia guide.

Background

From R to Julia — the story behind EpiAware.

In R we built the epinowcast ecosystem and packages such as EpiNow2 and scoringutils, now used by academics and public health teams internationally. EpiAware is the Julia equivalent: a domain-focused ecosystem in the mould of SciML or Turing.jl, with community infrastructure like rOpenSci and the domain focus of SpeedyWeather.jl.

We are at an early stage and looking for collaborators — here is how to get involved.

EpiAware — a composable Julia ecosystem for infectious disease modelling.

  • Packages

  • Get involved

  • Funding

  • epinowcast forum

  • Edit this page
  • Report an issue