Open-source project
dartsim/dart avatar
dartsim/dart

DART 7: A research physics engine caught between a redesign and a stable release

Research-focused C++23 physics engine for robotics, animation, and machine learning, with Python bindings.

1,204 stars304 forksC++BSD-2-Clause

At a glance

What is it?
DART 7 on the main branch is a C++23 and Python physics engine for robotics and animation, but it is explicitly not production-ready. This review covers what the new API offers, how to run it, and why most users should stay on DART 6 LTS.
Who is it for?
Adopt DART 7 only if you are a researcher or developer who needs the new Python-first API, can build from source with pixi, and is comfortable with a moving target. Do not use it for production robotics or simulation work; the README itself warns it is not recommended for production.
Can I use it commercially?
Yes. BSD-2-Clause is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 2 days ago.
What is it written in?
Mainly C++, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 14, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What DART 7 changes and who it targets

DART is a physics engine with a long history: it powers Gazebo and has been used in research labs. The main branch now tracks DART 7, a redesign that is not yet recommended for production use. The README is explicit about this. DART 7 targets researchers in robotics, animation, and machine learning who need more than a black-box simulator. The promise is transparent kinematics, dynamics, collision, and constraint solving. The key difference from DART 6 is a Python-first facade: the quick-start example builds a world, adds a rigid body, locks topology, and steps the simulation in a few lines of Python. This is a deliberate shift toward accessibility, but it comes with a cost: the C++ API is still in flux.

The mechanism: generalized coordinates and Featherstone

DART uses generalized coordinates for articulated rigid body systems and Featherstone's Articulated Body Algorithm for dynamics. This is a specific choice. Many engines use maximal coordinates with constraint solvers; DART instead computes joint-space dynamics directly. The benefit is accuracy and stability for articulated chains, which matters for robot arms and humanoid animation. The README lists this as a research-grade feature. The Python example shows a simple box, but the engine is designed for complex kinematic trees. The new API exposes RigidBodyOptions and a World object with enter_simulation_mode and step methods. The workflow is to add bodies, lock topology, then step. This is a concrete data flow: you build a model, freeze its structure, then simulate.

Getting it running: pixi is the path to DART 7

The README gives exact commands. For Python on DART 7, you must build from source: pixi run build. After that, you can run a smoke test with PYTHONPATH=build/default/cpp/Release/python pixi run python - <<'PY'. The example creates a world, adds a rigid body with default options, enters simulation mode, steps once, and prints time and position. For demos, pixi run py-demos -- --scene rigid_body --headless --frames 1 runs a headless rigid-body scene. There is also a GUI verifier: pixi run py-demos -- --scene rigid_solver_compare. The README warns that PyPI currently serves the stable DART 6 line as the latest non-yanked dartpy package. So if you install dartpy with pip today, you get DART 6, not DART 7. The DART 7 wheel lane builds CPython 3.14 wheels, but they are not published yet. This is a real friction point.

The C++ API is not ready, and that is a limitation

The README states that the DART 7 C++ simulation facade is available in source builds, but the final public header transaction is still in progress. That means the C++ API shape is not stable. If you are a C++ user, you cannot rely on DART 7 headers yet. The documentation points to docs/design/simulation_cpp_api.md for current examples, but that is a design document, not a stable reference. For a C++ physics engine, this is a significant limitation. Production C++ projects should stay on the release-6.* branches, where the API is fixed. The README also says DART 7 C++ package smoke checks are not yet published. So if you need C++ for a product, DART 7 is the wrong tool today.

A genuine alternative: DART 6 LTS

The alternative is not a competitor like Bullet or MuJoCo; it is DART's own stable line. DART 6 LTS is maintained on the release-6.20 branch and is what you get from conda-forge, apt, brew, and vcpkg. The README directs stable users to the stable documentation site. The difference in approach is stark: DART 6 has a mature C++ API and a Python binding that works, but it does not have the new Python-first facade. DART 7 is a rewrite that may eventually unify the API, but today it is a research preview. If you want the DART engine without the instability, install dartsim-cpp from conda-forge or use the system package. The Python package dartpy from conda-forge is DART 6. This is the practical choice for anyone who needs a working engine now.

Maintenance and upgrade cost: what to expect

The repository is active: the last push was August 2026, with a v6.19.4 release in July 2026. There are also verification media releases for GUI docking and memory diagnostics, which suggests a rigorous testing workflow. The README mentions a 36-row rigid-body visual verification workflow. This is a sign of engineering discipline, but it also means the project is investing in DART 7 quality, not just DART 6 maintenance. The upgrade cost from DART 6 to DART 7 is high: the API changes, the build system uses pixi, and the Python package is not yet on PyPI. You will need to build from source and track the latest documentation. The license is BSD-2-Clause, which is permissive and allows commercial use. No legal advice here, but that is a straightforward license.

Editorial conclusion

Adopt DART 7 only if you are a researcher or developer who needs the new Python-first API, can build from source with pixi, and is comfortable with a moving target. Do not use it for production robotics or simulation work; the README itself warns it is not recommended for production. Before adopting, verify that the dartpy wheel for DART 7 has been published on PyPI, and confirm that the C++ API you need is stable, since the header transaction is still in progress. If you need a dependable engine today, use DART 6 LTS from conda-forge or your system package manager.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
Community notes

Community notes