Turing.jl is a Julia
probabilistic programming
package for Bayesian inference and likelihood-based estimation.
Current capabilities include:
- Model specification
with the
@modelmacro - Hamiltonian Monte Carlo for differentiable target distributions
- Particle MCMC for posteriors involving discrete variables and stochastic control flow
- Gibbs sampling that combines particle MCMC, HMC, random-walk Metropolis–Hastings, elliptical slice sampling, and other transition kernels
- Variational inference with ADVI and normalising flows
- Maximum likelihood and maximum a posteriori estimation through Optimization.jl, using L-BFGS by default
The Turing.jl team has limited capacity for triage and review. We prioritise correctness, stability, and tightly scoped fixes.
Contributions that address reproducible defects are especially welcome: incorrect results, unexpected failures, or behaviour that contradicts the documentation. Reports should include a minimal reproducible example where practical. See the guidance for helping out for details on small fixes, proposing new work, and reviewing.
Questions about a scoped task may be raised on its issue, in the Turing channel on Julia Slack, or on Julia Discourse.
If you use Turing.jl in published work, please cite:
Turing.jl: A General-Purpose Probabilistic Programming Language
Tor Erlend Fjelde, Kai Xu, David Widmann, Mohamed Tarek, Cameron Pfiffer, Martin Trapp, Seth D. Axen, Xianda Sun, Markus Hauru, Penelope Yong, Will Tebbutt, Zoubin Ghahramani, Hong Ge
ACM Transactions on Probabilistic Machine Learning, 1(3):1–48, 2025.
Turing: A Language for Flexible Probabilistic Inference
Hong Ge, Kai Xu, Zoubin Ghahramani
Proceedings of the Twenty-First International Conference on Artificial Intelligence and Statistics, PMLR 84:1682–1690, 2018.
Expand for BibTeX
@article{10.1145/3711897,
author = {Fjelde, Tor Erlend and Xu, Kai and Widmann, David and Tarek, Mohamed and Pfiffer, Cameron and Trapp, Martin and Axen, Seth D. and Sun, Xianda and Hauru, Markus and Yong, Penelope and Tebbutt, Will and Ghahramani, Zoubin and Ge, Hong},
title = {{Turing.jl}: A General-Purpose Probabilistic Programming Language},
journal = {ACM Trans. Probab. Mach. Learn.},
year = {2025},
volume = {1},
number = {3},
pages = {1--48},
month = aug,
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
doi = {10.1145/3711897},
url = {https://doi.org/10.1145/3711897},
}
@inproceedings{pmlr-v84-ge18b,
author = {Ge, Hong and Xu, Kai and Ghahramani, Zoubin},
title = {{Turing}: A Language for Flexible Probabilistic Inference},
booktitle = {Proceedings of the Twenty-First International Conference on Artificial Intelligence and Statistics},
editor = {Storkey, Amos and Perez-Cruz, Fernando},
series = {Proceedings of Machine Learning Research},
volume = {84},
pages = {1682--1690},
year = {2018},
month = {09--11 Apr},
publisher = {PMLR},
pdf = {https://proceedings.mlr.press/v84/ge18b/ge18b.pdf},
url = {https://proceedings.mlr.press/v84/ge18b.html},
}Turing.jl is distributed under the MIT License. Its source code, tests, and documentation are public, allowing methods and implementations to be inspected and reused. Reproducible analyses should archive the analysis code and Julia project environment, and record data provenance, random seeds, and relevant computational settings.