Need help with Catalyst.jl?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

226 Stars 37 Forks Other 1.5K Commits 48 Opened issues


Chemical reaction network and systems biology interface for scientific machine learning (SciML). High performance, GPU-parallelized, and O(1) solvers in open source software

Services available


Need anything else?

Contributors list


Build Status Coverage Status Stable API Stable Dev API Dev ColPrac: Contributor's Guide on Collaborative Practices for Community Packages

Catalyst.jl is a symbolic modeling package for analysis and high performance simulation of chemical reaction networks. Catalyst defines symbolic

s, which can be created programmatically or easily specified using Catalyst's domain specific language (DSL). Leveraging ModelingToolkit and Symbolics.jl, Catalyst enables large-scale simulations through auto-vectorization and parallelism. Symbolic

s can be used to generate ModelingToolkit-based models, allowing the easy simulation and parameter estimation of mass action ODE models, Chemical Langevin SDE models, stochastic chemical kinetics jump process models, and more. Generated models can be used with solvers throughout the broader SciML ecosystem, including higher level SciML packages (e.g. for sensitivity analysis, parameter estimation, machine learning applications, etc).

Breaking Changes and New Features

Breaking changes and new functionality are summarized in the file.

Tutorials and Documentation

A short 15 minute overview of Catalyst as of version 6 is available in the talk Modeling Biochemical Systems with Catalyst.jl.

For information on using the package, see the stable documentation. The in-development documentation describes unreleased features in the current master branch.


  • DSL provides a simple and readable format for manually specifying chemical reactions.
  • Catalyst
    s provide a symbolic representation of reaction networks, built on ModelingToolkit.jl and Symbolics.jl.
  • The Catalyst.jl API provides functionality for extending networks, building networks programmatically, network analysis, and for composing multiple networks together.
  • ReactionSystem
    s generated by the DSL can be converted to a variety of
    s, including symbolic ODE, SDE, and jump process representations.
  • By leveraging ModelingToolkit, users have a variety of options for generating optimized system representations to use in solvers. These include construction of dense or sparse Jacobians, multithreading or parallelization of generated derivative functions, automatic classification of reactions into optimized jump types for Gillespie-type simulations, automatic construction of dependency graphs for jump systems, and more.
  • Generated systems can be solved using any DifferentialEquations.jl ODE/SDE/jump solver, and can be used within
    s for carrying out parallelized parameter sweeps and statistical sampling. Plot recipes are available for visualizing the solutions.
  • Julia
    s can be obtained for all rate laws and functions determining the deterministic and stochastic terms within resulting ODE, SDE, or jump models.
  • Latexify can be used to generate LaTeX expressions corresponding to generated mathematical models or the underlying set of reactions.
  • Graphviz can be used to generate and visualize reaction network graphs. (Reusing the Graphviz interface created in Catlab.jl.)
  • Catalyst
    s can be imported from SBML files via SBMLToolkit.jl, and from BioNetGen .net files and various matrix network representations using ReactionNetworkImporters.jl.

Illustrative Examples

Gillespie Simulations of Michaelis-Menten Enzyme Kinetics

rs = @reaction_network begin
  c1, S + E --> SE
  c2, SE --> S + E
  c3, SE --> P + E
end c1 c2 c3
p = (0.00166,0.0001,0.1)   # [c1,c2,c3]
tspan = (0., 100.)
u0 = [301., 100., 0., 0.]  # [S,E,SE,P]

solve JumpProblem

dprob = DiscreteProblem(rs, species(rs) .=> u0, tspan, parameters(rs) .=> p) jprob = JumpProblem(rs, dprob, Direct()) jsol = solve(jprob, SSAStepper()) plot(jsol,lw=2,title="Gillespie: Michaelis-Menten Enzyme Kinetics")

Adaptive SDEs for A Birth-Death Process

using Catalyst, Plots, StochasticDiffEq, DiffEqJump
rs = @reaction_network begin
  c1, X --> 2X
  c2, X --> 0
  c3, 0 --> X
end c1 c2 c3
p = (1.0,2.0,50.) # [c1,c2,c3]
tspan = (0.,10.)
u0 = [5.]         # [X]
sprob = SDEProblem(rs, species(rs) .=> u0, tspan, parameters(rs) .=> p)
ssol  = solve(sprob, LambaEM(), reltol=1e-3)
plot(ssol,lw=2,title="Adaptive SDE: Birth-Death Process")

Getting Help

Catalyst developers are active on the Julia Discourse, and the Julia Slack channels #sciml-bridged and #sciml-sysbio. For bugs or feature requests open an issue.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.