A curated list of Probabilistic Programming Languages (PPLs), inference libraries, and learning resources.
Probabilistic programming integrates probabilistic models and code into a unified paradigm.
Instead of coding “how” to compute, you specify what your model is, and the PPL system automatically performs inference — from Bayesian statistical models to deep probabilistic programs.
- PyMC – Declarative, graph-based PPL for applied Bayesian statistics. Supports NUTS, ADVI, SMC. Tutorial: PyMC Examples
- Pyro – Universal (generative) PPL built on PyTorch. Strong in deep probabilistic modeling, VI, and HMC/NUTS.
Tutorial: Pyro Tutorials - NumPyro – JAX-based Pyro, offering major speedups via JIT compilation.
Tutorial: NumPyro Tutorials - TensorFlow Probability – Library of probabilistic building blocks in TensorFlow/JAX. Supports HMC, VI, and optimizers.
Tutorial: TFP Examples - Stan (via CmdStanPy/PyStan) – Declarative, static-graph language with gold-standard NUTS implementation.
Tutorial: Stan User’s Guide - Bean Machine – Meta’s research PPL for programmable inference using PyTorch.
Tutorial: Bean Machine Tutorials - Edward2 – A lightweight, low-level probabilistic programming library built on TensorFlow, JAX, or NumPy, emphasizing flexibility via a single abstraction (“random variable”) and tracing-based model manipulation :contentReference[oaicite:0]{index=0}.
Tutorial: Edward Tutorials :contentReference[oaicite:1]{index=1} - GenJAX – JAX-based implementation of Gen with programmable variational inference.
Tutorial: GenJAX Documentation - BlackJAX – Sampling algorithms for JAX (HMC, NUTS, Riemannian HMC, SMC) designed for composability with other JAX-based PPLs.
Tutorial: BlackJAX Examples
- Turing.jl – General-purpose, high-performance PPL supporting NUTS, HMC, PMCMC, Gibbs, VI.
Tutorial: Turing.jl Getting Started - Gen.jl – Research-oriented PPL with programmable inference, hybrid MCMC/VI/SMC algorithms.
Tutorial: Gen.jl Documentation
- Stan (via rstan, cmdstanr) – Seamless integration with R workflows.
Tutorial: Stan User’s Guide - greta – Write models in R syntax, backed by TensorFlow for CPU/GPU execution.
Tutorial: greta Getting Started - JAGS/BUGS – Pioneering declarative PPLs using Gibbs sampling.
Tutorial: JAGS Documentation
- Figaro – Expressive Scala PPL with broad algorithm support (MCMC, SMC, exact inference).
Tutorial: Figaro Guide - Rainier – High-performance, static-graph Scala PPL inspired by Stan/PyMC.
Tutorial: Rainier Examples
- WebPPL – Universal PPL for the web. Runs in-browser or Node.js, popular in cognitive science.
Tutorial: WebPPL Web Book
- ProbLog – Probabilistic logic programming over large, uncertain knowledge bases.
Tutorial: ProbLog Tutorials - Dice – High-speed exact inference for discrete probabilistic programs via WMC.
Tutorial: Dice Documentation
Contributions are welcome! Please ensure:
- Each entry has a link, short description, and follows the existing format.
- Include an official tutorial link when available.
- Keep descriptions objective and concise.
Last updated: 2025-08-14