odin has grown from just one package to a series of packages; this document aims to help orient you to the right place to understand how pieces fit together and where to find help.

The packages

  • odin contains the domain specific language (DSL), and the original implementation suitable for simple use. It can compile continuous time (ODE) and discrete time models to C, R or JavaScript. It contains no ability to do inference.
  • dust contains an engine for running odin-style models in parallel. It supports both continuous time and discrete time models, but does not “know” anything about odin. This is the lower level support that many users will end up engaging with eventually.
  • odin.dust is a package for compiling odin models to work with dust. It will likely merge into odin once dust is on CRAN.
  • mcstate is a package for performing inference with odin models compiled to work with dust. It implements a particle filter, particle MCMC and other statistical methods.


The documentation for mcstate concerns mostly performing inference with odin.dust models

The documentation for dust is typically more advanced, but will be useful at times for users of odin.dust models

Missing topics:

  • Using ODE models with odin.dust
  • The DSL for comparing models and data
  • Higher-level documentation of multiple parameter sets at once
  • Higher-level documentation for running models on a GPU
  • Lower-level documentation on the relationship between deterministic and stochastic models
  • More details on constructing transformation functions in mcstate

Each package also comes with reference documentation, which contains examples and detailed help for individual functions.

The TypeScript ecosystem

In addition to the above, we are growing our ability to work with JavaScript models - the main output of this is wodin, an interface for running odin models on the web, which you can see at epimodels.dide.ic.ac.uk.

  • wodin: wodin itself
  • dopri-js: an ODE solver in TypeScript allowing smooth interpolation of its solutions
  • dfoptim: derivative-free optimisation methods for TypeScript
  • odin-js: TypeScript support for running continuous time odin models
  • dust-js: An implementation of part of the dust interface in TypeScript
  • random-js: Another random number library for JavaScript


  • Eventually we will merge odin.dust into odin (once dust is on CRAN)
  • We may deprecate the original discrete time interface
  • We will implement some of the missing features mentioned in the porting guide within odin.dust
  • We are designing a DSL for mcstate to make the inference part of the system nicer to work with; this will include an overhaul of the nested models.