DART: Dynamic Animation and Robotics Toolkit
See the code
DART (Dynamic Animation and Robotics Toolkit) is an open-source C++17 library, with Python bindings (dartpy), for the kinematics, dynamics, and contact simulation of articulated rigid and soft bodies in robotics and computer animation. It represents articulated systems in generalized coordinates and computes their motion with Featherstone's Articulated Body Algorithm, which makes it accurate and stable.
[!NOTE]
mainis the development branch. For the latest stable release, install a package below.
Atlas, soft-worm, and soft-contact scenes available in the Python demo catalog (pixi run demos), plus a Unitree G1 IK puppet from an earlier example
Python
import dartpy as dart
world = dart.simulation.World() # 1 ms time step, gravity along -z
# A shapeless 1 kg rigid body (the default inertia) free-falling from z = 1 m.
body = dart.dynamics.Skeleton("body")
body.createFreeJointAndBodyNodePair()
body.setPosition(5, 1.0) # FreeJoint DOFs: rotation (0-2), translation (3-5)
world.addSkeleton(body)
for _ in range(100):
world.step()
print(f"t = {world.getTime():.3f} s, z = {body.getPosition(5):.3f} m")
# t = 0.100 s, z = 0.950 m
C++
#include <dart/dart.hpp>
#include <iostream>
int main()
{
auto world = dart::simulation::World::create();
// A shapeless 1 kg rigid body (the default inertia) free-falling from z = 1 m.
auto body = dart::dynamics::Skeleton::create("body");
body->createJointAndBodyNodePair<dart::dynamics::FreeJoint>();
body->setPosition(5, 1.0); // FreeJoint DOFs: rotation (0-2), translation (3-5)
world->addSkeleton(body);
for (int i = 0; i < 100; ++i)
world->step();
std::cout << "t = " << world->getTime() << " s, z = " << body->getPosition(5)
<< " m\n";
}
# CMakeLists.txt next to main.cpp
cmake_minimum_required(VERSION 3.22.1)
project(my_app CXX)
find_package(DART REQUIRED CONFIG)
add_executable(my_app main.cpp)
target_link_libraries(my_app PUBLIC dart)
| Method | Command |
|---|---|
| pip | pip install dartpy |
| uv | uv add dartpy |
| pixi | pixi add dartpy |
| conda | conda install -c conda-forge dartpy |
PyPI wheels cover the most common platforms and Python versions; see the Python installation guide for the exact list.
| Platform | Command |
|---|---|
| Cross-platform (recommended) | pixi add dartsim-cpp or conda install -c conda-forge dartsim-cpp |
| Ubuntu / Debian | sudo apt install libdart-all-dev |
| Arch Linux (AUR) | yay -S libdart |
| FreeBSD | pkg install dartsim |
| macOS (Homebrew) | brew install dartsim |
| Windows (vcpkg) | vcpkg install dartsim:x64-windows |
Distribution packages can lag behind the latest release: all distributions →. See the C++ installation guide for details.
git clone https://github.com/dartsim/dart.git
cd dart
pixi run test # configure, build, and run the C++ tests
pixi run demos # build dartpy and launch the Python demo catalog
See the build guide for options and other platforms.
Contributions are welcome; start with the contributing guide.
main is the development branch for the next release: pull requests target it,
and all new patches land on it. Stable versions are available as
tagged releases and as the packages
above.
If you use DART in an academic publication, please consider citing the 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.
432 followers · starred Jul 2026
293 followers · starred Aug 2020
151 followers · starred Jan 2019
265 followers · starred May 2026
DART: Dynamic Animation and Robotics Toolkit
See the code
DART (Dynamic Animation and Robotics Toolkit) is an open-source C++17 library, with Python bindings (dartpy), for the kinematics, dynamics, and contact simulation of articulated rigid and soft bodies in robotics and computer animation. It represents articulated systems in generalized coordinates and computes their motion with Featherstone's Articulated Body Algorithm, which makes it accurate and stable.
[!NOTE]
mainis the development branch. For the latest stable release, install a package below.
Atlas, soft-worm, and soft-contact scenes available in the Python demo catalog (pixi run demos), plus a Unitree G1 IK puppet from an earlier example
Python
import dartpy as dart
world = dart.simulation.World() # 1 ms time step, gravity along -z
# A shapeless 1 kg rigid body (the default inertia) free-falling from z = 1 m.
body = dart.dynamics.Skeleton("body")
body.createFreeJointAndBodyNodePair()
body.setPosition(5, 1.0) # FreeJoint DOFs: rotation (0-2), translation (3-5)
world.addSkeleton(body)
for _ in range(100):
world.step()
print(f"t = {world.getTime():.3f} s, z = {body.getPosition(5):.3f} m")
# t = 0.100 s, z = 0.950 m
C++
#include <dart/dart.hpp>
#include <iostream>
int main()
{
auto world = dart::simulation::World::create();
// A shapeless 1 kg rigid body (the default inertia) free-falling from z = 1 m.
auto body = dart::dynamics::Skeleton::create("body");
body->createJointAndBodyNodePair<dart::dynamics::FreeJoint>();
body->setPosition(5, 1.0); // FreeJoint DOFs: rotation (0-2), translation (3-5)
world->addSkeleton(body);
for (int i = 0; i < 100; ++i)
world->step();
std::cout << "t = " << world->getTime() << " s, z = " << body->getPosition(5)
<< " m\n";
}
# CMakeLists.txt next to main.cpp
cmake_minimum_required(VERSION 3.22.1)
project(my_app CXX)
find_package(DART REQUIRED CONFIG)
add_executable(my_app main.cpp)
target_link_libraries(my_app PUBLIC dart)
| Method | Command |
|---|---|
| pip | pip install dartpy |
| uv | uv add dartpy |
| pixi | pixi add dartpy |
| conda | conda install -c conda-forge dartpy |
PyPI wheels cover the most common platforms and Python versions; see the Python installation guide for the exact list.
| Platform | Command |
|---|---|
| Cross-platform (recommended) | pixi add dartsim-cpp or conda install -c conda-forge dartsim-cpp |
| Ubuntu / Debian | sudo apt install libdart-all-dev |
| Arch Linux (AUR) | yay -S libdart |
| FreeBSD | pkg install dartsim |
| macOS (Homebrew) | brew install dartsim |
| Windows (vcpkg) | vcpkg install dartsim:x64-windows |
Distribution packages can lag behind the latest release: all distributions →. See the C++ installation guide for details.
git clone https://github.com/dartsim/dart.git
cd dart
pixi run test # configure, build, and run the C++ tests
pixi run demos # build dartpy and launch the Python demo catalog
See the build guide for options and other platforms.
Contributions are welcome; start with the contributing guide.
main is the development branch for the next release: pull requests target it,
and all new patches land on it. Stable versions are available as
tagged releases and as the packages
above.
If you use DART in an academic publication, please consider citing the 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.
432 followers · starred Jul 2026
293 followers · starred Aug 2020
151 followers · starred Jan 2019
265 followers · starred May 2026