Julia's POMDP ecosystem: a grammar for decision-making under uncertainty
A common interface for defining, solving, and simulating Markov decision processes—fully or partially observable, discrete or continuous.

What it does
POMDPs.jl is a core interface package for working with MDPs and POMDPs in Julia. It doesn’t implement solvers itself; instead it defines a shared vocabulary so that problem definitions, solver algorithms, and simulators can all talk to each other. A companion “standard library” called POMDPTools fills in the practical bits—policies, belief updaters, distributions, and simulators.
The interesting bit
The ecosystem ambition is the real story. The README lists dozens of satellite packages: value-iteration solvers, particle and Gaussian filters, pre-built models (LaserTag, RockSample, RoombaPOMDPs), and bridges to Python via quickpomdps/pyjulia and to the broader Julia reinforcement-learning stack through CommonRLInterface. It’s trying to be the lingua franca for sequential decision research in Julia.
Key highlights
- Handles both fully observable (MDP) and partially observable (POMDP) problems, discrete and continuous spaces
- QuickPOMDPs DSL shown in the README lets you define a Tiger POMDP in ~15 lines of Julia
- Two-way integration with CommonRLInterface connects to JuliaReinforcementLearning
- Python interop available via quickpomdps or direct pyjulia table passing
- SymbolicMDPs.jl bridge supports PDDL-style symbolic planning models
Caveats
- POMDPs.jl itself is strictly the interface; you will need to install solver packages separately (e.g.
Pkg.add("QMDP")) - Native solver support on Windows/OSX is noted as partial—“most non-native solvers should work, but may require additional configuration”
Verdict
Worth a look if you’re doing sequential decision-making research in Julia and want composable, swappable components. Skip it if you need a single batteries-included framework or if you’re committed to Python-native tooling like OpenAI Gym or rllib.