dartsim/dart

DART: Dynamic Animation and Robotics Toolkit

C++

1,216

6,116 commits

updated Oct 14, 2026

See the code

README

DART

DART: Dynamic Animation and Robotics Toolkit

CI Linux CI macOS CI Windows
Documentation Status codecov Codacy Badge
PyPI Version conda-forge Version License

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] main is the development branch. For the latest stable release, install a package below.

Four DART demos: an Atlas humanoid walking under a SIMBICON controller, a Unitree G1 humanoid posed with inverse kinematics, a soft-body worm crawling, and a soft ball landing with adaptive soft contact
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

Why DART?

  • Research-grade dynamics — Featherstone's algorithms in generalized coordinates, with direct access to the mass matrix, Coriolis and gravity forces, Jacobians, and their derivatives
  • Contacts and constraints — LCP-based contact with Dantzig and PGS solvers, joint limits, closed kinematic loops, and soft bodies; collision detection through FCL (default), Bullet, ODE, or DART's native detector
  • Model loading — URDF, SDF, SKEL, and MJCF (experimental) parsers
  • Kinematics and control — hierarchical whole-body inverse kinematics with analytical solver support (e.g., IkFast), plus operational-space and stable-PD control examples
  • C++ and Python — the same engine through dartpy, packages on PyPI, conda-forge, and major package managers, and reproducible source builds with pixi
  • Battle-tested — powers Gazebo through gz-physics, and is used by research labs worldwide

Quick Start

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)

Installation

Python

MethodCommand
pippip install dartpy
uvuv add dartpy
pixipixi add dartpy
condaconda install -c conda-forge dartpy

PyPI wheels cover the most common platforms and Python versions; see the Python installation guide for the exact list.

C++

PlatformCommand
Cross-platform (recommended)pixi add dartsim-cpp or conda install -c conda-forge dartsim-cpp
Ubuntu / Debiansudo apt install libdart-all-dev
Arch Linux (AUR)yay -S libdart
FreeBSDpkg 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.

Build from source

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.

Documentation

Contributing

Contributions are welcome; start with the contributing guide.

Branches

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.

Citation

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}
}

License

DART is licensed under the BSD 2-Clause License.

Star History

Star History Chart
collision-detection
computer-animation
cpp17
dynamics
gazebo
inverse-kinematics
kinematics
lie-group
mjcf
multibody
physics-engine
pybind11
python-bindings
rigidbody
robotics
sdf
simulation
urdf

dartsim/dart

DART: Dynamic Animation and Robotics Toolkit

C++

1,216

6,116 commits

updated Oct 14, 2026

See the code

README

DART

DART: Dynamic Animation and Robotics Toolkit

CI Linux CI macOS CI Windows
Documentation Status codecov Codacy Badge
PyPI Version conda-forge Version License

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] main is the development branch. For the latest stable release, install a package below.

Four DART demos: an Atlas humanoid walking under a SIMBICON controller, a Unitree G1 humanoid posed with inverse kinematics, a soft-body worm crawling, and a soft ball landing with adaptive soft contact
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

Why DART?

  • Research-grade dynamics — Featherstone's algorithms in generalized coordinates, with direct access to the mass matrix, Coriolis and gravity forces, Jacobians, and their derivatives
  • Contacts and constraints — LCP-based contact with Dantzig and PGS solvers, joint limits, closed kinematic loops, and soft bodies; collision detection through FCL (default), Bullet, ODE, or DART's native detector
  • Model loading — URDF, SDF, SKEL, and MJCF (experimental) parsers
  • Kinematics and control — hierarchical whole-body inverse kinematics with analytical solver support (e.g., IkFast), plus operational-space and stable-PD control examples
  • C++ and Python — the same engine through dartpy, packages on PyPI, conda-forge, and major package managers, and reproducible source builds with pixi
  • Battle-tested — powers Gazebo through gz-physics, and is used by research labs worldwide

Quick Start

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)

Installation

Python

MethodCommand
pippip install dartpy
uvuv add dartpy
pixipixi add dartpy
condaconda install -c conda-forge dartpy

PyPI wheels cover the most common platforms and Python versions; see the Python installation guide for the exact list.

C++

PlatformCommand
Cross-platform (recommended)pixi add dartsim-cpp or conda install -c conda-forge dartsim-cpp
Ubuntu / Debiansudo apt install libdart-all-dev
Arch Linux (AUR)yay -S libdart
FreeBSDpkg 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.

Build from source

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.

Documentation

Contributing

Contributions are welcome; start with the contributing guide.

Branches

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.

Citation

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}
}

License

DART is licensed under the BSD 2-Clause License.

Star History

Star History Chart
collision-detection
computer-animation
cpp17
dynamics
gazebo
inverse-kinematics
kinematics
lie-group
mjcf
multibody
physics-engine
pybind11
python-bindings
rigidbody
robotics
sdf
simulation
urdf

Project health

Overall

3.1/10

Maintained

10/10

Code review

0/10
OpenSSF Scorecard

Significant stargazers

Johnny

432 followers · starred Jul 2026

Paul Melnikow

293 followers · starred Aug 2020

Chang Su

151 followers · starred Jan 2019

myd7349

265 followers · starred May 2026