dora-rs/dora

▲ 5 stars today★ 3,942⑂ 440

DORA (Dataflow-Oriented Robotic Architecture) is middleware designed to streamline and simplify the creation of AI-based robotic applications.

About dora-rs/dora

dora-rs/dora is an open-source project on GitHub, mainly written in Rust. DORA (Dataflow-Oriented Robotic Architecture) is middleware designed to streamline and simplify the creation of AI-based robotic applications. It currently holds 3,942 stars and 440 forks with 0 open issues, and was last pushed on an unknown date (repository created unknown).

Project Overview

AI Homed tracks it on the Today's Trending board, currently at rank #86 with 5 new stars today.

GitHub Repository Details

Repository dora-rs/dora · default branch - · size 0 KB · watchers 0 · source: GitHub REST API and repository README

README

English | 简体中文

Website | Python API | Rust API | Guide | Discord

https://github.com/dora-rs/dora/blob/HEAD/Build and test https://github.com/dora-rs/dora/blob/HEAD/crates.io https://github.com/dora-rs/dora/blob/HEAD/docs.rs https://github.com/dora-rs/dora/blob/HEAD/PyPI https://github.com/dora-rs/dora/blob/HEAD/License


dora 1.0 is out. Read the 1.0 release post.

Dora

Agentic Dataflow-Oriented Robotic Architecture -- a 100% Rust framework for building real-time robotics and AI applications.

User Guide | 用户指南 (中文)

Built and maintained with agentic engineering -- AI agents do the heavy lifting on code generation, reviews, refactoring, and testing; humans set direction and gate every merge.

---

Table of Contents

Features

Performance

Developer experience

Production readiness

Debugging and observability

Ecosystem

Installation

From crates.io (recommended)

cargo install dora-cli           # CLI (dora command)
pip install dora-rs              # Python node/operator API

From source

git clone https://github.com/dora-rs/dora.git
cd dora
cargo build --release -p dora-cli
PATH=$PATH:$(pwd)/target/release

Python API (requires maturin >= 1.8: pip install maturin)

Must run from the package directory for dependency resolution

cd apis/python/node && maturin develop --uv && cd ../../..

Platform installers

macOS / Linux:

curl --proto '=https' --tlsv1.2 -LsSf \
  https://github.com/dora-rs/dora/releases/latest/download/dora-cli-installer.sh | sh

Windows:

powershell -ExecutionPolicy ByPass -c "irm https://github.com/dora-rs/dora/releases/latest/download/dora-cli-installer.ps1 | iex"

Build features

| Feature | Description | Default | |---------|-------------|---------| | tracing | OpenTelemetry tracing support | Yes | | metrics | OpenTelemetry metrics collection | Yes | | python | Python operator support (PyO3) | No | | redb-backend | Persistent coordinator state (redb) | Yes |

cargo install dora-cli --features redb-backend

Quick Start

1. Run a Python dataflow

Important: The PyPI package is dora-rs, not dora. The import name
is dora (from dora import Node), but pip install dora installs an
unrelated package.
cargo install dora-cli            # or use install script below
pip install dora-rs numpy pyarrow
git clone https://github.com/dora-rs/dora.git && cd dora
dora run examples/python-dataflow/dataflow.yml

This runs a sender -> transformer -> receiver pipeline. Here's what the Python node code looks like:

# sender.py -- sends messages and polls for STOP
from dora import Node
import pyarrow as pa
import time

node = Node() sent = 0 while sent < 100: event = node.try_recv() if event is not None and event["type"] == "STOP": break node.send_output("message", pa.array([sent])) sent += 1 time.sleep(0.1)

# receiver.py -- receives and prints messages
from dora import Node

node = Node() for event in node: if event["type"] == "INPUT": print(f"Got {event['id']}: {event['value'].to_pylist()}") elif event["type"] == "STOP": break

See the Python Getting Started Guide for a full tutorial, or the Python API Reference for complete API docs.

2. Run a Rust dataflow

cd examples/rust-dataflow
dora run dataflow.yml

3. Distributed mode (ad-hoc)

# Terminal 1: start coordinator + daemon
dora up

Terminal 2: start a dataflow (--debug enables topic inspection)

dora start dataflow.yml --attach --debug

Terminal 3: monitor

dora list dora logs dora top

Stop or restart

dora stop dora restart --name dora down

4. Managed cluster

# Bring up a multi-machine cluster from a config file
dora cluster up cluster.yml

Start a dataflow across the cluster

dora start dataflow.yml --name my-app --attach

Check cluster health

dora cluster status

Tear down

dora cluster down

See the Distributed Deployment Guide for cluster.yml configuration, label scheduling, systemd services, rolling upgrades, and operational runbooks. The network side — one LAN, a VPN mesh, or isolated subnets joined by zenoh routers — is the Multi-machine Guide.

CLI Commands

Lifecycle

| Command | Description | |---------|-------------| | dora run | Run a dataflow locally (no coordinator/daemon needed) | | dora up | Start coordinator and daemon in local mode | | dora down | Tear down coordinator and daemon | | dora build | Run build commands from a dataflow descriptor | | dora start | Start a dataflow on a running coordinator | | dora stop | Stop a running dataflow | | dora restart | Restart a running dataflow (stop + re-start) |

Monitoring

| Command | Description | |---------|-------------| | dora list | List running dataflows (alias: ps) | | dora clean | Remove finished and failed dataflows from the coordinator | | dora logs [--node ] | Show logs for a dataflow or node | | dora top | Real-time resource monitor (TUI); also dora inspect top | | dora topic list | List topics in a dataflow | | dora topic hz | Measure topic publish frequency (TUI) | | dora topic echo | Print topic messages to stdout | | dora topic info | Show topic type and metadata | | dora node list | List nodes in a dataflow | | dora node info | Show detailed node status, inputs, outputs, and metrics | | dora node add --from-yaml | Add a node to a running dataflow | | dora node remove | Remove a node from a running dataflow | | dora node connect | Add a live mapping between nodes | | dora node disconnect | Remove a live mapping between nodes | | dora node restart | Restart a single node within a running dataflow | | dora node stop | Stop a single node within a running dataflow | | dora topic pub | Publish JSON data to a topic | | dora param list | List runtime parameters for a node | | dora param get | Get a runtime parameter value | | dora param set | Set a runtime parameter (JSON value) | | dora param delete | Delete a runtime parameter | | dora trace list | List recent traces captured by the coordinator | | dora trace view | View spans for a specific trace (supports prefix matching) | | dora record | Record dataflow messages to .drec file | | dora replay | Replay recorded messages from .drec file |

Cluster management

| Command | Description | |---------|-------------| | dora cluster up | Bring up a cluster from a cluster.yml file | | dora cluster status | Show connected daemons and active dataflows | | dora cluster down | Tear down the cluster | | dora cluster install | Install daemons as systemd services | | dora cluster uninstall | Remove systemd services | | dora cluster upgrade | Rolling upgrade: SCP binary + restart per-machine | | dora cluster restart | Restart a dataflow by name or UUID |

Setup and utilities

| Command | Description | |---------|-------------| | dora doctor | Diagnose environment, connectivity, and dataflow health | | dora status | Check system health (alias: check) | | dora new | Generate a new project or node | | dora graph | Visualize a dataflow (Mermaid or HTML) | | dora expand | Expand module references and print flat YAML | | dora validate | Validate dataflow YAML and check type annotations | | dora system | System management (daemon/coordinator control) | | dora completion | Generate shell completions | | dora self update | Update dora CLI |

Node Hub (unstable)

| Command | Description | |---------|-------------| | dora hub search | Find nodes by name, keyword, or category | | dora hub info [@] | Show a package's typed contracts + example | | dora hub init [PATH] | Scaffold a dora-node.yml manifest | | dora hub publish [PATH] | Validate + add a pinned index entry (--dry-run) | | dora hub yank @ | Yank/restore a published version (--undo) | | dora hub list/outdated/update | Inspect, check, and refresh lockfile pins | | dora hub fetch | Mirror pinned sources locally (inspection / CI / transfer) |

Reference a node with one line of YAML -- hub: dora-yolo@^0.5 -- and dora build resolves, pins, and type-checks it. See the Hub guide.

For full CLI documentation, see docs/cli.md. For running a dataflow across several machines, start with docs/multi-machine.md; for cluster management, see docs/distributed-deployment.md.

Dataflow Configuration

Dataflows are defined in YAML. Each node declares its binary/script, inputs, and outputs:

nodes:
  • id: camera
build: pip install opencv-video-capture path: opencv-video-capture inputs: tick: dora/timer/millis/20 outputs:
  • image
env: CAPTURE_PATH: 0 IMAGE_WIDTH: 640 IMAGE_HEIGHT: 480
  • id: object-detection
build: pip install dora-yolo path: dora-yolo inputs: image: camera/image outputs:
  • bbox
  • id: plot
build: pip install dora-rerun path: dora-rerun inputs: image: camera/image boxes2d: object-detection/bbox

Built-in timer nodes: dora/timer/millis/ and dora/timer/hz/.

Input format: / to subscribe to another node's output. Long form supports queue_size, queue_policy (drop_oldest or backpressure), and input_timeout. See the YAML Specification for details.

Type annotations: Optionally annotate ports with type URNs for static and runtime validation. See the Type Annotations Guide for the full type library.

nodes:
  • id: camera
path: camera.py outputs:
  • image
output_types: image: std/media/v1/Image
dora validate dataflow.yml                        # static check (warnings)
dora validate --strict-types dataflow.yml         # fail on warnings (CI)
dora build dataflow.yml --strict-types            # type check during build
DORA_RUNTIME_TYPE_CHECK=warn dora run dataflow.yml  # runtime check

Modules: Extract reusable sub-graphs into separate files with module: instead of path:. See the Modules Guide for details.

nodes:
  • id: nav_stack
module: modules/navigation.module.yml inputs: goal_pose: localization/goal

Architecture

https://github.com/dora-rs/dora/blob/HEAD/Dora architecture: dora CLI drives the Coordinator over a WebSocket control plane; the Coordinator launches a Daemon per host; Daemons and Nodes exchange data over the Zenoh data plane

| Layer | Protocol | Purpose | |-------|----------|---------| | CLI <-> Coordinator | WebSocket (port 6013) | Build, run, stop commands | | Coordinator <-> Daemon | WebSocket | Node spawning, dataflow lifecycle | | Daemon <-> Daemon | Zenoh | Distributed cross-machine communication | | Node <-> Node | Zenoh SHM | Direct zero-copy data plane for messages >4KB | | Daemon <-> Node | Shared memory / TCP | Control plane + small message delivery |

Key components

Workspace layout

binaries/
  cli/                  # dora CLI binary
  coordinator/          # Orchestration service
  daemon/               # Node manager + IPC
  runtime/              # In-process operator runtime
  ros2-bridge-node/     # ROS2 bridge binary
  mavlink2-bridge-node/ # MAVLink 2 bridge binary
  record-node/          # Dataflow message recorder
  replay-node/          # Recorded message replayer
libraries/
  core/                 # Descriptor parsing, build utilities
  message/              # Inter-component message types
  arrow-convert/        # Arrow data conversion
  recording/            # .drec recording format
  log-utils/            # Log parsing, merging, formatting
  coordinator-store/    # Persistent coordinator state (redb)
  extensions/
    telemetry/          # OpenTelemetry tracing + metrics
    ros2-bridge/        # ROS2 interop (bridge, msg-gen, arrow, python)
    mavlink2-bridge/    # MAVLink 2 interop (Arrow ↔ MAVLink, TCP/UDP/serial)
    download/           # Download utilities
apis/
  rust/node/            # Rust node API (dora-node-api)
  rust/operator/        # Rust operator API (dora-operator-api)
  python/node/          # Python node API (PyO3)
  python/operator/      # Python operator API (PyO3)
  python/cli/           # Python CLI interface
  c/node/               # C node API
  c/operator/           # C operator API
  c++/node/             # C++ node API (CXX bridge)
  c++/operator/         # C++ operator API (CXX bridge)
examples/               # Example dataflows

Language Support

| Language | Node API | Operator API | Docs | Status | |----------|----------|--------------|------|--------| | Rust | dora-node-api | dora-operator-api | API Reference | First-class | | Python >= 3.11 | pip install dora-rs | included | Getting Started, API Reference | First-class | | C | dora-node-api-c | dora-operator-api-c | API Reference | Supported | | C++ | dora-node-api-cxx | dora-operator-api-cxx | API Reference | Supported | | ROS2 >= Foxy | dora-ros2-bridge | -- | Bridge Guide | Experimental |

Platform support

| Platform | Rust / Python | C / C++ templates | |----------|---------------|-------------------| | Linux (x86_64, ARM64, ARM32) | First-class (PR-gated) | First-class (nightly-gated) | | macOS (ARM64) | First-class (nightly-gated) | Best effort (nightly-gated) | | Windows (x86_64) | Best effort (nightly-gated) | Best effort (not gated) | | WSL (x86_64) | Best effort | Best effort (not gated) |

Gate meanings (#1716):

dora new --lang rust/python template tests run in nightly across all three platforms; C/C++ variants run in nightly on Linux only. Developers who need cross-platform verification before merge can run make qa-test / make qa-examples / make qa-nightly locally. See docs/testing-matrix.md for the full rationale.

Examples

Core language examples

| Example | Language | Description | |---------|----------|-------------| | rust-dataflow | Rust | Basic Rust node pipeline | | python-dataflow | Python | Python sender/transformer/receiver | | python-operator-dataflow | Python | Python operators (in-process) | | python-dataflow-builder | Python | Pythonic imperative API | | c-dataflow | C | C node example | | c++-dataflow | C++ | C++ node example | | c++-arrow-dataflow | C++ | C++ with Arrow data | | cmake-dataflow | C/C++ | CMake-based build |

Composition

| Example | Language | Description | |---------|----------|-------------| | module-dataflow | Python | Reusable module composition | | typed-dataflow | Python | Type annotations with dora validate |

Communication patterns

| Example | Language | Description | |---------|----------|-------------| | service-example | Rust | Request/reply with request_id correlation | | action-example | Rust | Goal/feedback/result with cancellation | | streaming-example | Python | Token-by-token generation with session/seq/fin metadata |

See docs/patterns.md for the full guide.

Dynamic topology

| Example | Language | Description | |---------|----------|-------------| | dynamic-add-remove | Python | Add/remove nodes from running dataflows | | dynamic-agent-tools | Python | AI agent with dynamically-added tools |

Advanced patterns

| Example | Language | Description | |---------|----------|-------------| | python-async | Python | Async Python nodes | | python-concurrent-rw | Python | Concurrent read-write patterns | | python-multiple-arrays | Python | Mult

GitHub Stars & Activity

3,942Stars
440Forks
0Open issues
RustLanguage

GitHub Popularity

GitHub stars3,942
Forks440
Open issues0
Primary languageRust
License-
Stars gained today5
Created-
Last pushed-

Trending History

Daily boardrank #86 · ▲ 5 stars

Related AI Projects

1

alphaXiv / OpenResearch

Rust★ 3,941⑂ 251▲ 1,036 stars
2

obra / superpowers

Shell★ 287,446⑂ 25,707▲ 522 stars
3

mattpocock / skills

Shell★ 263,286⑂ 22,208▲ 820 stars
4

affaan-m / ECC

JavaScript★ 259,730⑂ 38,861▲ 1,046 stars
5

NousResearch / hermes-agent

Python★ 245,944⑂ 0
6

deepseek-ai / deepseek-harness

TypeScript★ 225,686⑂ 0
7

n8n-io / n8n

TypeScript★ 204,528⑂ 60,702▲ 167 stars
8

Significant-Gravitas / AutoGPT

Python★ 187,373⑂ 0

More AI Rankings