An extremely fast and simple dataflow oriented robotic framework to manage your projects and run complex apps, written in Rust.
Latency benchmark with Python API for both framework, sending 40M of random bytes.
llama.cpp.ros2.curl or powershell.| Title | Description | Shields |
|---|---|---|
| PyOrbbeckSDK | Image and depth from Orbbeck Camera | |
| PyRealsense | Image and depth from Realsense | |
| Video Capture | Image stream from Camera |
| Title | Description | Shields |
|---|---|---|
| Keyboard | Keyboard char listener | |
| Microphone | Audio from microphone | |
| PyAudio(Speaker) | Output audio from speaker |
| Title | Description | Shields |
|---|---|---|
| Feetech | Feetech Client | |
| Dynamixel | Dynamixel Client |
| Title | Description | Shields |
|---|---|---|
| Agilex - UGV | Robomaster Client | |
| DJI - Robomaster S1 | Robomaster Client | |
| Dora Kit Car | Open Source Chassis |
| Title | Description | Shields |
|---|---|---|
| Alex Koch - Low Cost Robot | Alex Koch - Low Cost Robot Client | |
| Lebai - LM3 | Lebai client | |
| Agilex - Piper | Agilex arm client |
| Title | Description | Shields |
|---|---|---|
| Pollen - Reachy 1 | Reachy 1 Client | |
| Pollen - Reachy 2 | Reachy 2 client | |
| Trossen - Aloha | Aloha client |
| Title | Description | Shields |
|---|---|---|
| Silero VAD | Silero Voice activity detection |
| Title | Description | Shields |
|---|---|---|
| Whisper | Transcribe audio to text |
| Title | Description | Shields |
|---|---|---|
| Qwen2.5-vl | Vision Language Model using Qwen2.5 VL | |
| InternVL | InternVL is a vision language model |
| Title | Description | Shields |
|---|---|---|
| Qwen2.5 | Large Language Model using Qwen |
| Title | Description | Shields |
|---|---|---|
| RDT-1B | Infer policy using Robotic Diffusion Transformer |
| Title | Description | Shields |
|---|---|---|
| Yolov8 | Object detection |
| Title | Description | Shields |
|---|---|---|
| SAM2 | Segment Anything |
| Title | Description | Shields |
|---|---|---|
| ArgosTranslate | Open Source translation engine | |
| Opus MT | Translate text between language |
| Title | Description | Shields |
|---|---|---|
| Kokoro TTS | Efficient Text to Speech |
| Title | Description | Shields |
|---|---|---|
| Llama Factory Recorder | Record data to train LLM and VLM | |
| LeRobot Recorder | LeRobot Recorder helper |
| Title | Description | Shields |
|---|---|---|
| Plot | Simple OpenCV plot visualization | |
| Rerun | Visualization tool |
| Title | Description | Shields |
|---|---|---|
| Mujoco | Mujoco Simulator | |
| Carla | Carla Simulator | |
| Gymnasium | Experimental OpenAI Gymnasium bridge |
pip install dora-rs-cli
Install dora with our standalone installers, or from crates.io:
cargo install dora-cli
curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/dora-rs/dora/main/install.sh | bash
powershell -c "irm https://raw.githubusercontent.com/dora-rs/dora/main/install.ps1 | iex"
git clone https://github.com/dora-rs/dora.git
cd dora
cargo build --release -p dora-cli
PATH=$PATH:$(pwd)/target/release
The full documentation is available on our website.
A lot of guides are available on this section of our website.
uv venv --seed -p 3.11
dora build https://raw.githubusercontent.com/dora-rs/dora/refs/heads/main/examples/object-detection/yolo.yml --uv
dora run yolo.yml --uv
Make sure to have a webcam
To stop your dataflow, you can use ctrl+c
Dataflow-Oriented Robotic Architecture (dora-rs) is a framework that makes creation of robotic applications fast and simple.
dora-rs implements a declarative dataflow paradigm where tasks are split between nodes isolated as individual processes.
Each node defines its inputs and outputs to connect with other nodes.
nodes:
- id: camera
path: opencv-video-capture
inputs:
tick: dora/timer/millis/20
outputs:
- image
-
- id: plot
path: opencv-plot
inputs:
image: camera/image
The dataflow paradigm has the advantage of creating an abstraction layer that makes robotic applications modular and easily configurable.
It offers several features, such as:
Communication between nodes is handled with shared memory on a same machine and TCP on distributed machines. Our shared memory implementation tracks messages across processes and discards them when obsolete. Shared memory slots are cached to avoid new memory allocation.
Nodes communicate with Apache Arrow Data Format.
Apache Arrow is a universal memory format for flat and hierarchical data. The Arrow memory format supports zero-copy reads for lightning-fast data access without serialization overhead. It defines a C data interface without any build-time or link-time dependency requirement, that means that dora-rs has no compilation step beyond the native compiler of your favourite language.
dora-rs uses Opentelemetry to record all your logs, metrics and traces. This means that the data and telemetry can be linked using a shared abstraction.
Opentelemetry is an open source observability standard that makes dora-rs telemetry collectable by most backends such as elasticsearch, prometheus, Datadog...
Opentelemetry is language independent, backend agnostic, and easily collect distributed data, making it perfect for dora-rs applications.
Note: this feature is marked as unstable.
import pyarrow as pa
# Configuration Boilerplate...
turtle_twist_writer = ...
## Arrow Based ROS2 Twist Message
## which does not require ROS2 import
message = pa.array([{
"linear": {
"x": 1,
},
"angular": {
"z": 1
},
}])
turtle_twist_writer.publish(message)
You might want to use ChatGPT to write the Arrow Formatting: https://chat.openai.com/share/4eec1c6d-dbd2-46dc-b6cd-310d2895ba15
You can easily create a self-coding robot, by combining Hot-reloading with a Retrieval Augmented Generation (RAG) that is going to generate code modification from your prompt.
See:examples/python-operator-dataflow
Self-Coding Robot is just the tip of the iceberg of robotics combined with llm, that we hope to power. There is so much more that we haven't explored yet like:
| dora-rs | Hoped for | |
|---|---|---|
| Tier 1 Support | Python, Rust | C, C++, ROS 2 |
| Tier 2 Support | C, C++, ROS2 | |
| Message Format | Arrow | Native |
| Local Communication | Shared Memory, Cuda zero-copy IPC | Custom Middleware, intra-process tokio::channel communication |
| Remote Communication | Zenoh | Custom Middleware |
| Metrics, Tracing, and Logging | Opentelemetry | Native logging libraries into Opentelemetry |
| Supported Platforms (x86) | Windows, MacOS, Linux | |
| Supported Platforms (ARM) | MacOS, Linux | |
| Configuration | YAML |
We are passionate about supporting contributors of all levels of experience and would love to see
you get involved in the project. See the
contributing guide to get started.
Our main communication channels are:
Feel free to reach out on any topic, issues or ideas.
We also have a contributing guide.
This project is licensed under Apache-2.0. Check out NOTICE.md for more information.