Skip to main content

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.

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 from dart-demos (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

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.

C++

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.

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 and launch the interactive demo app

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

Metadata

Release files for dartpy 6.20.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for dartpy 6.20.2
File
dartpy-6.20.2-cp315-cp315-manylinux_2_28_x86_64.whl CPython 3.15 CPython 3.15 Linux glibc 2.28+ x86-64 Details
dartpy-6.20.2-cp315-cp315-manylinux_2_28_aarch64.whl CPython 3.15 CPython 3.15 Linux glibc 2.28+ ARM64 Details
dartpy-6.20.2-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
dartpy-6.20.2-cp314-cp314-manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ x86-64 Details
dartpy-6.20.2-cp314-cp314-manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ ARM64 Details
dartpy-6.20.2-cp314-cp314-macosx_15_0_arm64.whl CPython 3.14 CPython 3.14 macOS 15.0+ ARM64 Details
dartpy-6.20.2-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
dartpy-6.20.2-cp313-cp313-manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64 Details
dartpy-6.20.2-cp313-cp313-manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ ARM64 Details
dartpy-6.20.2-cp313-cp313-macosx_15_0_arm64.whl CPython 3.13 CPython 3.13 macOS 15.0+ ARM64 Details
dartpy-6.20.2-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
dartpy-6.20.2-cp312-cp312-manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64 Details
dartpy-6.20.2-cp312-cp312-manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ ARM64 Details
dartpy-6.20.2-cp312-cp312-macosx_15_0_arm64.whl CPython 3.12 CPython 3.12 macOS 15.0+ ARM64 Details

Total release size: 231.0 MB

Release files / dartpy-6.20.2-cp315-cp315-manylinux_2_28_x86_64.whl

Download URL dartpy-6.20.2-cp315-cp315-manylinux_2_28_x86_64.whl
Size 18.8 MB
Tags CPython 3.15 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
e8a272e7e7b347b7d550229be9916b6743fa665b95ac894d535718707de09006
BLAKE2b-256 checksum
How to use checksums
31cc9c65426130dc4bfd0646cf9394804465e8847b24399e9bcfa671242bcef9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / dartpy-6.20.2-cp315-cp315-manylinux_2_28_aarch64.whl

Download URL dartpy-6.20.2-cp315-cp315-manylinux_2_28_aarch64.whl
Size 17.4 MB
Tags CPython 3.15 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
572a50d208894c6f98da2b503faa56bdbb4451aa0af563dd54d6218d804ddbde
BLAKE2b-256 checksum
How to use checksums
dc0c33bc54ba60f840ed4398c6e361e196ae5ddc681c8179771075b07867c7cb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / dartpy-6.20.2-cp314-cp314-win_amd64.whl

Download URL dartpy-6.20.2-cp314-cp314-win_amd64.whl
Size 13.5 MB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
9c3d9c0a810c855c078dd14b84cd1f5f4b4c3f8966de7b99b2c1834af689e194
BLAKE2b-256 checksum
How to use checksums
d12756ed5edd15c987e222acf8d5d41d7facbacac47e3bb649aaaa199d851fc7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / dartpy-6.20.2-cp314-cp314-manylinux_2_28_x86_64.whl

Download URL dartpy-6.20.2-cp314-cp314-manylinux_2_28_x86_64.whl
Size 18.8 MB
Tags CPython 3.14 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
82e6032c494ec43a24818963aa337f3a87cb9e02981797176bd39adfa2ebf501
BLAKE2b-256 checksum
How to use checksums
df1416167da2597bdfaf6b74d43cae9db57e4ed5748e3accf142f25cc3728772
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / dartpy-6.20.2-cp314-cp314-manylinux_2_28_aarch64.whl

Download URL dartpy-6.20.2-cp314-cp314-manylinux_2_28_aarch64.whl
Size 17.4 MB
Tags CPython 3.14 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
60b80bbc74001ea34d02ce3800d11b2b568707e0c3f4c27bed28fcce1ddbc87d
BLAKE2b-256 checksum
How to use checksums
c378f70ed24b98e1224e84a5d23746142ff64806df26905193559bd355c6f125
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / dartpy-6.20.2-cp314-cp314-macosx_15_0_arm64.whl

Download URL dartpy-6.20.2-cp314-cp314-macosx_15_0_arm64.whl
Size 15.3 MB
Tags CPython 3.14 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
b3e2216d42915658929de8f3f2cd61a5da313e723cf8d5acad40afc6dac7b776
BLAKE2b-256 checksum
How to use checksums
e32435a82a7dad9a9ea0a7415121113ec9d42bdc2247e37be91a192d15347727
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / dartpy-6.20.2-cp313-cp313-win_amd64.whl

Download URL dartpy-6.20.2-cp313-cp313-win_amd64.whl
Size 13.5 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
a4c5de6172d505fd47d8c91c5649c6da1dd963d39a71bbd1b0a624fd84905cec
BLAKE2b-256 checksum
How to use checksums
3a0f83e11076e88724beedf84638856d18b731b2c3b8a452f2756266fe8b7c7b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / dartpy-6.20.2-cp313-cp313-manylinux_2_28_x86_64.whl

Download URL dartpy-6.20.2-cp313-cp313-manylinux_2_28_x86_64.whl
Size 18.8 MB
Tags CPython 3.13 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
cadabe7fb7786b76e9275256d82bb20f62ed565cc2ad03925198442c3cb936dc
BLAKE2b-256 checksum
How to use checksums
42e74fdac116dd4838ac8b2fb41e19647eff837e11914e30298dbc348ec865b5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / dartpy-6.20.2-cp313-cp313-manylinux_2_28_aarch64.whl

Download URL dartpy-6.20.2-cp313-cp313-manylinux_2_28_aarch64.whl
Size 17.4 MB
Tags CPython 3.13 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
6319e51788295ece08ff4d99737e5500808a135e055ec7bb739b399e7db5aead
BLAKE2b-256 checksum
How to use checksums
f7892198fd4be4aa4523ff4544206c35d38346f2e55f645c59b3ffa9e80706b4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / dartpy-6.20.2-cp313-cp313-macosx_15_0_arm64.whl

Download URL dartpy-6.20.2-cp313-cp313-macosx_15_0_arm64.whl
Size 15.3 MB
Tags CPython 3.13 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
22080e2698400b9c8501ee427f92db6069635030c0d07f257e6744e9dbef5aa5
BLAKE2b-256 checksum
How to use checksums
446c6f32c56f7991b90ab6b8f2b84f295369b010487096ebfd3f9c910779ad04
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / dartpy-6.20.2-cp312-cp312-win_amd64.whl

Download URL dartpy-6.20.2-cp312-cp312-win_amd64.whl
Size 13.5 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
b3ce52b1f74e1904bc98d369b26feea729db8e64932b2bc33ec7950110e9b136
BLAKE2b-256 checksum
How to use checksums
80ece4910e26467aedb969f92ff267773b2269fa00c8d85b512ac70deadbb8e3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / dartpy-6.20.2-cp312-cp312-manylinux_2_28_x86_64.whl

Download URL dartpy-6.20.2-cp312-cp312-manylinux_2_28_x86_64.whl
Size 18.8 MB
Tags CPython 3.12 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
da3234ae1922bbe03097ffa150021515f7e10b635d183878a807b4578b3aa202
BLAKE2b-256 checksum
How to use checksums
1fda0bc372f92dd4659aea5d2f0de1e0ad63a03a78d0123d1be8c28edb6491ea
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / dartpy-6.20.2-cp312-cp312-manylinux_2_28_aarch64.whl

Download URL dartpy-6.20.2-cp312-cp312-manylinux_2_28_aarch64.whl
Size 17.4 MB
Tags CPython 3.12 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
2f909c09442af972afb6f32f75674ceb6b707a711c3eca0c7af93320f31a89f4
BLAKE2b-256 checksum
How to use checksums
5c9bf66c8794f07ad9d960c742ffc41c98368644683f453856e90523eb13b350
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / dartpy-6.20.2-cp312-cp312-macosx_15_0_arm64.whl

Download URL dartpy-6.20.2-cp312-cp312-macosx_15_0_arm64.whl
Size 15.3 MB
Tags CPython 3.12 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
dfb0c2a86c56a5755e94f1f94389f095f3a9264343cf3661d14ad5ce34986e60
BLAKE2b-256 checksum
How to use checksums
351a35521fdff30c92e920d26ff19c62b9a9ca0945237efffd04d625459b8162
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Security for dartpy 6.20.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page