DART (Dynamic Animation and Robotics Toolkit) is an open-source, research-focused physics engine for robotics, animation, and machine learning. It provides transparent kinematics, dynamics, collision, and constraint-solving foundations for users who need more than a black-box simulator. DART uses generalized coordinates for articulated rigid body systems and Featherstone's Articulated Body Algorithm for accurate, stable motion dynamics.
Important
Which DART is this? This main branch tracks DART 7, an in-progress
redesign that is not yet recommended for production use. Its documentation
is the latest site.
For a stable release, use DART 6 LTS:
documentation ·
release-6.20 branch.
- Research-grade dynamics — Featherstone algorithms, generalized coordinates, and direct access to dynamics quantities
- Easy to start — Python and C++ packages through common package managers, plus reproducible source builds with pixi
- Extensible foundations — Math, native collision, constraints, model loading, benchmarks, and tests that support new algorithms and baseline comparisons
- Unified model loading — Load URDF, SDF, and MJCF models through a single API
- Scalable compute roadmap — Cross-platform CPU support today, with roadmap work for multi-core, SIMD, and accelerator backends
- Battle-tested ecosystem — Powers Gazebo, research labs, and production systems worldwide, with best-effort support for production use
Python
import dartpy as dart
import numpy as np
world = dart.World(time_step=1.0 / 1000.0)
# Add a 1 kg rigid body one metre above the origin.
options = dart.RigidBodyOptions()
options.mass = 1.0
options.position = np.array([0.0, 0.0, 1.0])
box = world.add_rigid_body("box", options)
# Lock topology, then simulate 100 steps.
world.enter_simulation_mode()
for _ in range(100):
world.step()
print(f"t = {world.time:.3f} s, box z = {float(box.translation[2]):.3f} m")C++
The DART 7 C++ simulation facade is available in source builds while the final
public header transaction is still in progress. Use the C++ API shape recorded
in docs/design/simulation_cpp_api.md
for current source-checkout examples; DART 6 C++ snippets remain on the
release-6.* branches for compatibility-line users.
The quick-start snippets above target the current main branch and DART 7 API.
The tracked DART 7 wheel lane builds CPython 3.14 wheels on Linux, macOS, and
Windows, but PyPI currently serves the stable DART 6 line as the latest
non-yanked dartpy package. Use the source checkout path for the DART 7 Python
facade until a non-yanked DART 7 wheel is published.
| Method | Command |
|---|---|
| source checkout (DART 7 today) | pixi run build from this repository |
| uv/pip (DART 7 after wheel publish) | uv add dartpy --prerelease allow / pip install --pre dartpy |
| pixi (DART 6 stable today) | pixi add dartpy |
| conda (DART 6 stable today) | conda install -c conda-forge dartpy |
| Platform | Command |
|---|---|
| Cross-platform (recommended) | pixi add dartsim-cpp or conda install -c conda-forge dartsim-cpp |
| Ubuntu | sudo apt install libdart-all-dev |
| Arch Linux | yay -S libdart |
| FreeBSD | pkg install dartsim |
| macOS | brew install dartsim |
| Windows | vcpkg install dartsim:x64-windows |
These snippets create a tiny model in code, so they do not depend on sample data
files being present. The Python snippet targets a DART 7 source build; if
dart.World or add_rigid_body is missing, the environment resolved a stable
DART 6 package and should use the stable documentation.
Python source build
Run this after pixi run build from a source checkout:
PYTHONPATH=build/default/cpp/Release/python pixi run python - <<'PY'
import dartpy as dart
world = dart.World()
body = world.add_rigid_body("box", dart.RigidBodyOptions())
world.enter_simulation_mode()
world.step()
print(f"t = {world.time:.4f} s, box position = {body.translation}")
PYC++ package
The published C++ package smoke for the compatibility line is maintained on
release-6.*. DART 7 C++ package smoke checks move through
check-dart7-artifacts and the local source-checkout promotion gates until
DART 7 C++ artifacts are published.
pixi install
# Smoke the Python-first DART 7 rigid-body demo surface.
pixi run py-demos -- --scene rigid_body --headless --frames 1
# Open the curated rigid-body GUI verifier.
pixi run py-demos
pixi run py-demos -- --scene rigid_solver_compare
# Capture docked visual evidence for the solver comparison.
pixi run py-demo-capture -- --scene rigid_solver_compare --frames 24 --width 960 --height 540 --show-ui
# Optional C++ World-only companion smoke.
pixi run demos -- --scene rigid_body --headless --frames 1The full 36-row rigid-body visual verification workflow, Rigid Workflow
search terms, and capture commands are in the
Python demos README.
- Static Docs: English | 한국어
- AI Docs (experimental): DeepWiki for quick codebase Q&A | NotebookLM (Google account required)
- Questions: Ask in GitHub Discussions when you want maintainer or community input.
- Developer Onboarding Guide — Architecture, components, and workflows
- Contributing Guide — Style guide and contribution process
- Project Direction — Research-focused north star and priorities
- Living Plans — Active and proposed roadmap items
- Background Theory — Dynamics, contact solving, and mathematical foundations
- Gazebo Integration — gz-physics integration workflow
- Release Roadmap — Compatibility, deprecations, and future plans
main— Active development targeting DART 7 (not yet production-ready)release-6.20— Maintenance branch for DART 6 LTS (critical fixes only); see the DART 6 documentation
If you use DART in an academic publication, please consider citing this JOSS Paper:
@article{Lee2018,
doi = {10.21105/joss.00500},
url = {https://doi.org/10.21105/joss.00500},
year = {2018},
publisher = {The Open Journal},
volume = {3},
number = {22},
pages = {500},
author = {Jeongseok Lee and Michael X. Grey and Sehoon Ha and Tobias Kunz and Sumit Jain and Yuting Ye and Siddhartha S. Srinivasa and Mike Stilman and C. Karen Liu},
title = {DART: Dynamic Animation and Robotics Toolkit},
journal = {Journal of Open Source Software}
}DART is licensed under the BSD 2-Clause License.

