mrkeyoor.com_
Wed 16 Sept 16:01 UTC
Dev Toolsevaluationupdated 16 Sept 2026

dora review

Dora is a Rust runtime for building robots and AI systems from small programs connected as a dataflow graph. It starts and monitors nodes written in Rust, Python, C, or C++, moves Arrow data between them on one or several machines, and provides one CLI for running, inspecting, recording, and replaying the system.

Verdict

Our Dora test command hit the 900-second cap with 2 tests passed and 0 failed while Cargo was still compiling, despite a 19-second install and 1-second build. Dora deserves a trial for a new mixed-language robot because its graph, Arrow messages, record/replay tools, and 1.x node-API promise fit together well. Keep ROS 2, or run both through the bridge, when mature device packages and proven fleet operations outweigh a smaller runtime.

We ran it

Lab card: what happened when we ran doraScreenshot of dora (dora-rs.ai)
Install✓ · 19s1 packages
Build✓ · 1s
Tests✗ timed out · 900s2 passed · 0 failed of 2 (cargo test)
Repo1237 files~212,023 lines of source · 13.1 MB · 17 CI workflows · tests dir

Answers from our run

Does dora build from source?

Dependencies installed in 19 seconds (1 packages), and the build succeeded in 1 seconds. We cloned commit 080749c into a clean Debian container with 3 CPUs and no project-specific setup.

Do dora's tests pass?

Yes: 2 of 2 passed when we ran the project's own test command (cargo test). Some failures need services or credentials a bare container does not have.

Who should not use dora?

Hard real-time control systems: Dora's tuning guide says it cannot guarantee hard real time, and its --rt flag promotes the daemon's main thread rather than every worker or node.

What are the alternatives to dora?

ROS 2, Zenoh-Flow. Our Dora test command hit the 900-second cap with 2 tests passed and 0 failed while Cargo was still compiling, despite a 19-second install and 1-second build.

Setup3/519-second install, while the full test command exceeded 15 minutes
Docs5/5Clear guides for APIs, dataflows, clusters, migration, and tuning
Community4/53,944 stars with same-day commits and active issue handling
Maturity3/5Core 1.x surfaces are frozen; several subsystems remain experimental

Who it’s for

Robotics teams that want Python, Rust, C, and C++ nodes in one declared dataflow.
Developers moving large camera, point-cloud, or model outputs between local processes through shared memory.
Small teams that want a lighter graph runtime while retaining a bridge into ROS 2.
Operators prepared to test coordinator recovery, Zenoh networking, process cleanup, and Linux scheduling on their exact machines.

Who it’s NOT for

Hard real-time control systems: Dora's tuning guide says it cannot guarantee hard real time, and its --rt flag promotes the daemon's main thread rather than every worker or node.
0.x fleets that need a rolling upgrade: the 1.0 release post says 0.x nodes, daemons, CLIs, and coordinators do not interoperate with 1.0.
Teams treating every 1.0 feature as frozen: the Hub, operators, ROS 2 bridge, MAVLink bridge, and tensor pool sit outside the 1.x compatibility promise.
Operators who must inspect raw camera topics safely today: open issue 3509 reports that dora topic hz on a large output can wedge the coordinator control plane.
Windows users relying on local-run orphan containment: open issue 3474 reports that the Job Object lacks the kill-on-close limit.

Setup reality

Our sandbox installed 1 package in 19 seconds, and the recorded build completed in 1 second. cargo test then timed out at the 900-second cap: 2 tests had passed, 0 had failed, and the log was still compiling workspace crates. The checkout held 1,237 files, about 212,023 source lines, and 13.1 MB.

The released CLI can be installed with Cargo or a platform script. Python nodes need the dora-rs package, Python 3.11 or newer, and usually PyArrow. Source work adds a Rust toolchain, while C and C++ nodes have separate APIs and build requirements.

Distributed use adds a coordinator, one daemon per machine, Zenoh networking, and SSH cluster access. Soft real-time tuning needs Linux capabilities and kernel choices. The repository has 17 CI workflow files, no Dockerfile, and a tests directory.

Dora turns a robot into a graph of small programs

A Dora application is a YAML graph whose nodes send named outputs into other nodes' inputs. Each node can be a Rust binary, a Python script, or a program using the C or C++ API. The runtime starts those processes, connects the edges, watches their health, and can restart a failed node according to policy. That model is easy to explain to a team debugging a camera, detector, and controller on the same bench.

The implementation is substantial without being a giant checkout. Our copy held 1,237 files, about 212,023 source lines, and 13.1 MB. The workspace includes the CLI, coordinator, per-machine daemon, in-process runtime, language APIs, ROS 2 and MAVLink bridges, recording tools, telemetry, and examples. Apache Arrow is the common message representation, while Zenoh handles the data path between processes and across machines.

Version 1.0 freezes node APIs but leaves extensions flexible

The 1.0 release makes a precise promise. Its Rust, Python, C, and C++ node APIs, wire protocol, CLI commands, and dataflow YAML schema are frozen for the 1.x series. Nodes built against 1.0 are supposed to keep building and talking to later 1.x daemons. Python 3.11 is the floor for that series, and Rust users select an Arrow major through a feature flag rather than inheriting one forever.

That promise does not cover everything in the 1,237-file workspace. The operator API, Hub, ROS 2 bridge, MAVLink bridge, tensor pool, and some extension surfaces may change in a minor release. A 0.x component also cannot communicate with 1.0, so upgrading requires a full stop and coordinated replacement rather than a rolling mix of versions. The narrower promise is credible because the project spells out its edges instead of calling the entire repository stable.

What happened when we ran it

Our sandbox installed one package in 19 seconds and recorded a successful build in 1 second. The full cargo test command was a different story. It reached the 900-second limit with 2 tests passed and 0 failed out of the 2 that had completed. The command timed out, so the suite did not pass or fail as a whole. That distinction matters more than the partial green count.

The last log lines were still compiling workspace components, including the daemon, coordinator, runtime APIs, download extension, and a fault-tolerance fixture named late-dynamic-sender. This was a 3-CPU, 12 GB unprivileged Rust container. The checkout had a tests directory and 17 CI workflow files, but no Dockerfile. A contributor should budget for a large first compile and use the project's targeted CI commands before assuming a full workspace test will fit an ordinary feedback loop.

Shared memory is the attraction, while hard real time stays out of scope

Dora sends larger same-machine messages through Zenoh shared memory and uses network transport when nodes move across machines. The project's own benchmark reports lower Python node latency than ROS 2, but our run did not reproduce that benchmark. Record/replay, topic inspection, queue policies, input timeouts, and typed ports are more immediately useful reasons to try it because they shape how failures get diagnosed and replayed.

The tuning guide is candid about limits. Dora offers memory locking, CPU affinity, and SCHED_FIFO for soft real-time work, yet the --rt profile affects the daemon's main thread and does not promote spawned nodes. Our unprivileged 12 GB container did not validate any scheduler or memory-lock behavior. A deployment needing tight control loops must test kernel configuration, capabilities, node scheduling, queue behavior, and worst-case jitter on the actual robot.

Distributed operation adds coordinator and inspection failure modes

Local dora run avoids a separate coordinator, while managed dataflows use one coordinator plus a daemon on every machine. Persistent redb state helps the coordinator remember dataflows, and daemons reconnect after interruption. Cluster commands can install systemd services and perform rolling binary upgrades. Those features move Dora beyond a local graph runner, but they also create control-plane behavior that a bench demo will never exercise.

Open issue 3509 gives a useful test case: sending a large camera output through dora topic hz reportedly wedges the coordinator connection while the dataflow keeps running. Issue 3474 reports incomplete orphan containment for local runs on Windows. With 17 CI workflows and an explicit fault-tolerance test area, the project is clearly working on these paths. Buyers should still rehearse coordinator loss, daemon reconnect, node crashes, debug subscriptions, and forced shutdown before putting motion behind the graph.

Same-day commits followed the 1.0.1 release

GitHub showed a September 16, 2026 push, 3,944 stars, and 35 combined open issues and pull requests. The issue search returned 21 open issues, including a nightly-regression tracker updated that day. Version 1.0.1 shipped on September 3 with packaging, CI, and release fixes shortly after the 1.0 announcement. That is current maintenance around a fresh compatibility promise, not years of field evidence for the new major.

The 19-second install and 1-second build make Dora cheap to inspect. The unfinished 900-second test run makes source validation expensive enough to plan. Start with one non-safety-critical graph, record representative sensor traffic, and force the coordinator, daemon, and nodes to fail separately. If recovery matches the documentation and the ROS 2 bridge covers missing drivers, Dora can earn a wider role one dataflow at a time.

Alternatives

ProjectWhat it isPick it when
ROS 2The established open robotics platform with a large driver, package, and tooling ecosystem.pick this instead when hardware support, community packages, and long-lived deployment conventions matter more than Dora's compact dataflow model.
Zenoh-FlowA declarative dataflow framework built directly around the Zenoh communication layer.pick this instead when cloud-to-device Zenoh composition is the main requirement and you do not need Dora's robotics CLI and language APIs.

What people are saying

  1. [github-trending] dora-rs/dora

Sources

  1. Dora README
  2. Dora 1.0 release post
  3. Dora real-time tuning guide
  4. Dora distributed deployment guide
  5. Dora issue 3509: large topic inspection report
  6. Dora issue 3474: Windows orphan containment report
  7. Dora 1.0.1 release

More dev tools reviews

omnyssh · fd · tinycast · crystal · pydantic · IKONA-Security · the whole board →