Open tools for automated planning.
OpenPlan Labs builds open-source libraries for PDDL planning, multi-agent pathfinding, and GPU-accelerated search.
Everything here is an implementation of published work, written to be read as well as run. Each project says what it does and what it does not do. None of it is a product, a service, or a hosted API — they are libraries you install and call.
- Obstacle
- Unvisited
- Expanded
- Frontier
- Plan
tools/make_figure.py,
which runs the search rather than placing the dots.
Projects
Eight repositories, three threads
Star counts and versions below were checked against the GitHub and PyPI APIs when this page was last built. Where a project is not released, it says so.
PDDL and classical planning
Modelling language in, plan out.-
PythonPDDL
jupyddlA dependency-free, pure-Python PDDL framework: parser, grounder, classical-to-modern planners, heuristics, and a benchmarking harness. No Julia and no native extensions — the standard library only, so it installs anywhere Python does.
-
pddl-examples
Eight hand-written domain and problem pairs, plus a growing mirror of the
planning.domainsclassical collection that a daily job extends. Domain files and problem files only — planners not included. -
awesome-pddl
A curated list of PDDL resources — planners, parsers, editors, domain collections, competitions, and learning material. Readable as a README or as a filterable directory.
-
docker-pythonpddl
PythonPDDL in a container. Parse, ground and solve a PDDL instance with nothing installed but Docker; the planner and heuristic are chosen by environment variable.
Multi-agent pathfinding
Many agents, one shared grid, conflicts to resolve.-
pymapf
Multi-agent planning and pathfinding in Python: CBS, weighted CBS, PIBT, LaCAM, LNS and space-time A* on the centralized side; decentralized NMPC, velocity obstacles and swarm behaviours on the other. Includes a multi-agent RL environment benchmarked against the optimal planner.
GPU acceleration
The same algorithms, batched onto a device.-
cuda-planning
cuplanCUDA-accelerated MAPF and planning: batched BFS, space-time search, prioritized planning, PIBT, velocity obstacles and flocking. Every algorithm has a vectorized NumPy reference implementation alongside its CUDA one behind a single
backend="auto" | "cpu" | "cuda"argument, with CPU–CUDA equivalence enforced by tests. The solvers it ships today are fast and incomplete; optimal search is on the roadmap, not in the box.
Measured results, with the machine and problem set stated: summary · methodology · phases · BFS · PIBT · prioritized planning · velocity obstacles · flocking
Shared
What the other repos are built out of.-
branding
Frontier — the design system: palette, mark, type, figure conventions, CSS tokens, and a matplotlib stylesheet so notebook output matches the docs without anyone thinking about it. This page is built from its tokens. If a repo's colours drift from it, it wins.
-
.github
Org-wide defaults: the contributing guide, code of conduct, security policy, and the issue templates that ask for the things we would otherwise have to ask you for.
What we work on
One problem, seen from three distances
Classical planning, multi-agent pathfinding, and GPU search are usually three literatures with three vocabularies. They are the same problem at three scales: a state space, a way of ordering the states you look at, and the plan you return. The tools here are separate because the data structures differ, not because the ideas do.
Classical planning
A domain and a problem in PDDL, parsed and grounded into a state space, searched with an admissible heuristic. The hard part is the heuristic, and the interesting number is nodes expanded.
Multi-agent pathfinding
The state space is a product of per-agent spaces, so it is exponential in the number of agents. The hard part is deciding which conflicts to resolve and which to plan around, which is what separates CBS from PIBT from LaCAM.
GPU acceleration
A GPU is fast at doing the same thing to a thousand items at once, and slow at following a pointer. So the win comes from batching — one distance map per agent, one wavefront per timestep — not from putting a serial search on device threads.
Three things hold the projects together in practice.
Shared instances: the PDDL tools are exercised on the
domains in pddl-examples,
so a benchmark run in one repo is comparable to a benchmark run in
another. Shared references: every accelerated
algorithm in cuda-planning
keeps a plain NumPy implementation next to it, and the two are tested
for equivalence — a speed-up that changes the answer is not a
speed-up. Shared figures: every plot in every repo
uses the legend in the figure above, so a grid render from
pymapf and one from cuplan can be read side
by side without a key.
Get involved
Ways in, roughly by effort
The org-wide
contributing guide
covers the pull-request flow and what a useful bug report contains; a
project's own CONTRIBUTING.md wins on specifics.
-
Add a domain to pddl-examples
A domain you wrote for a course, a paper, or a robot is exactly what that collection is for. Open a pull request adding a top-level directory with a
domain.pddland at least one problem file, say what it models, and the validate workflow will check the parentheses balance and the(define …)form. Do not hand-edit anything underdomains/— the daily sync regenerates it. How to contribute a domain -
Add an entry to awesome-pddl
A planner, parser, editor, course, or domain collection that is not on the list yet. One entry per pull request, with a sentence saying what it is and, for a planner, what it guarantees. Contribution rules
-
File a bug with its input attached
For the PDDL tools that means the domain and problem files, the exact version, the algorithm and heuristic you ran, and the command. A planner bug without its instance is usually unreproducible. Issue templates
-
Pick up a labelled issue
Every repo carries
good first issueandhelp wantedlabels, though the queue is often empty — these are small projects. If nothing is open and you want something to do, open an issue describing what you would like to add and it will get an answer. Open good first issues -
Report a security problem privately
Not in a public issue. The security policy has the address and what to include.