A general-purpose probabilistic programming system with programmable inference, embedded in Julia

  • What does Gen provide.

Gen.jl is still under active development. If you find a a bug or wish to share ideas for improvement, feel free to visit the Github site or contact at us here.


The Gen package can be installed with the Julia package manager. From the Julia REPL, type ] to enter the Pkg REPL mode and then run:

pkg> add Gen


julia> import Pkg; Pkg.add("Gen")

To test the installation locally, you can run the tests with:

using Pkg; Pkg.test("Gen")

Getting Started

Tutorial Redirect

We are in the process of moving tutorial docs around. For more stable tutorial docs, see these tutorials instead. See more examples here.

To see a overview of the package, check out the examples. For a deep-dive on how to do inference with Gen.jl, check out the tutorials.


See the Developer's Guide on how to contribute to the Gen ecosystem.

Supporting and Citing

This repo is part of ongoing research at ProbComp and may later include new experimental (for the better)! If you use Gen for your work, please consider citing us:

 author = {Cusumano-Towner, Marco F. and Saad, Feras A. and Lew, Alexander K. and Mansinghka, Vikash K.},
 title = {Gen: A General-purpose Probabilistic Programming System with Programmable Inference},
 booktitle = {Proceedings of the 40th ACM SIGPLAN Conference on Programming Language Design and Implementation},
 series = {PLDI 2019},
 year = {2019},
 isbn = {978-1-4503-6712-7},
 location = {Phoenix, AZ, USA},
 pages = {221--236},
 numpages = {16},
 url = {},
 doi = {10.1145/3314221.3314642},
 acmid = {3314642},
 publisher = {ACM},
 address = {New York, NY, USA},
 keywords = {Markov chain Monte Carlo, Probabilistic programming, sequential Monte Carlo, variational inference},