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.1

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.1
File
dartpy-6.20.1-cp315-cp315-manylinux_2_28_x86_64.whl CPython 3.15 CPython 3.15 Linux glibc 2.28+ x86-64 Details
dartpy-6.20.1-cp315-cp315-manylinux_2_28_aarch64.whl CPython 3.15 CPython 3.15 Linux glibc 2.28+ ARM64 Details
dartpy-6.20.1-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
dartpy-6.20.1-cp314-cp314-manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ x86-64 Details
dartpy-6.20.1-cp314-cp314-manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ ARM64 Details
dartpy-6.20.1-cp314-cp314-macosx_15_0_arm64.whl CPython 3.14 CPython 3.14 macOS 15.0+ ARM64 Details
dartpy-6.20.1-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
dartpy-6.20.1-cp313-cp313-manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64 Details
dartpy-6.20.1-cp313-cp313-manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ ARM64 Details
dartpy-6.20.1-cp313-cp313-macosx_15_0_arm64.whl CPython 3.13 CPython 3.13 macOS 15.0+ ARM64 Details
dartpy-6.20.1-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
dartpy-6.20.1-cp312-cp312-manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64 Details
dartpy-6.20.1-cp312-cp312-manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ ARM64 Details
dartpy-6.20.1-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.1-cp315-cp315-manylinux_2_28_x86_64.whl

Download URL dartpy-6.20.1-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
11fe3b08e9e41740e0c0d3ceda836a4b1fab049b11a3fb10bbb083fd3254257b
BLAKE2b-256 checksum
How to use checksums
e8a027be38fcee52a867a85ae4ee5645dd3aea158ee268b5414b82885269bedb
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.1-cp315-cp315-manylinux_2_28_aarch64.whl

Download URL dartpy-6.20.1-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
539680ad7dbf212b18e2121c71c26f73bed7e5033b1d89c42290c91aa0747e56
BLAKE2b-256 checksum
How to use checksums
4b63d21fe9f97d2c2ad8e4b42bb0616517074e02d838f70546a2b10fc59e485d
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.1-cp314-cp314-win_amd64.whl

Download URL dartpy-6.20.1-cp314-cp314-win_amd64.whl
Size 13.5 MB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
7a2ffb702fce7c5c292eb35057d77fd71e1d3a00be3af4d2c388c7dccc5d9036
BLAKE2b-256 checksum
How to use checksums
6f4ef3e51db382c9b872ac0264c4f17a6858498d53fa09c4af6299549cd946ce
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.1-cp314-cp314-manylinux_2_28_x86_64.whl

Download URL dartpy-6.20.1-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
92d9b6a772ae758c7de278f66cb181d29560089e4edb7931ddadbb1e7f7880b0
BLAKE2b-256 checksum
How to use checksums
6dbf6b3bb6dcdf94fc579c89f2407d2d81d65c8b0e338664596b197120000a69
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.1-cp314-cp314-manylinux_2_28_aarch64.whl

Download URL dartpy-6.20.1-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
12d8b04bfcb4867d2f8696babef86f4698b4d33221c935ba7a22e16fb42e7e13
BLAKE2b-256 checksum
How to use checksums
879ace621f8e32db718ece214d0843e4d54dff2e6a6f7c7ae3733b5733b32266
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.1-cp314-cp314-macosx_15_0_arm64.whl

Download URL dartpy-6.20.1-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
be320d5efe97855083f7dc765a419b84e94ccee4cdedbbb1b2bc5d761aab3752
BLAKE2b-256 checksum
How to use checksums
0efcab20bb5fe78c383d58952197f8cd981b77d4207e509979ad73bb1642b6f2
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.1-cp313-cp313-win_amd64.whl

Download URL dartpy-6.20.1-cp313-cp313-win_amd64.whl
Size 13.5 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
7b1e31f7f62dff9ba3368fc1f063aaf082ba2230bf8cc423721e0859f1d1e09e
BLAKE2b-256 checksum
How to use checksums
c4089c30f561e75e04a85b62025186e448c2e15394eab44413155a83df43dea7
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.1-cp313-cp313-manylinux_2_28_x86_64.whl

Download URL dartpy-6.20.1-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
2216d47f879c36b6e28584161931027e1b693aecbd998f3f7dc78ca5cc4a3522
BLAKE2b-256 checksum
How to use checksums
c4b4f61a4cf46ed9d2469875894d64143dcbc3ff555ccfbb1da9a7c1b708de14
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.1-cp313-cp313-manylinux_2_28_aarch64.whl

Download URL dartpy-6.20.1-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
e01baff227c3973775c06a8a7974a24247fd3eeddc9e397a88128dbbd063723b
BLAKE2b-256 checksum
How to use checksums
d665b343ba94dfbc98241ecf8056d1e1e92dc649e07b5c618629944bccd13654
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.1-cp313-cp313-macosx_15_0_arm64.whl

Download URL dartpy-6.20.1-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
e364cd32816b31d7874b09053a2b745978417346a468599b1c2eac4c7bfc9ff6
BLAKE2b-256 checksum
How to use checksums
3fb59a1ffb1ccaf0d9afba917ea1b0134bd3c56b40113c4b300336cd142fad50
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.1-cp312-cp312-win_amd64.whl

Download URL dartpy-6.20.1-cp312-cp312-win_amd64.whl
Size 13.5 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
df59e8d874a59c377411d95667db4e09724c95eb9caa34cc34a4131f792e6440
BLAKE2b-256 checksum
How to use checksums
4cb073c6078483750ea003cd16f0e6d5ef59ed39ea88fc7a0304b355822047b2
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.1-cp312-cp312-manylinux_2_28_x86_64.whl

Download URL dartpy-6.20.1-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
95e52266690e64cd793ebefca87e1fd376d6c69c58d206b4f6296a48d4ece2b7
BLAKE2b-256 checksum
How to use checksums
18a141418194a2b1a8013e3602fb59c71128e2423b51afdc9b05f365a4887e77
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.1-cp312-cp312-manylinux_2_28_aarch64.whl

Download URL dartpy-6.20.1-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
b75acdb1aac5c3d75bce2d0546e48c953e9b44705b3de9655357722330ebd654
BLAKE2b-256 checksum
How to use checksums
17e5e690ee987cb44be263b14556141dab16537eab6609a16b08142ec886f0b8
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.1-cp312-cp312-macosx_15_0_arm64.whl

Download URL dartpy-6.20.1-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
c65fc432f1e6f2ab09fa60f9d382675128e891dda93b3194c728c59019508c5b
BLAKE2b-256 checksum
How to use checksums
f0d296dc84e61865540bbc68c1eedc7d3a6171370248e57b58b9250f756c1f10
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.1

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