COOLJAPAN
← All posts

AstRS 0.1.0 Released — A Pure Rust dora-rs Successor, a From-Scratch RTPS 2.3 Stack, and SMT-Proved Dataflow Graphs

AstRS 0.1.0 is the first release of COOLJAPAN's Pure Rust robotics dataflow middleware — a successor to dora-rs and a replacement path for ROS 2. 40 crates, a from-scratch RTPS 2.3 stack reaching real ROS 2 nodes with no ROS installed, zero-copy shared memory, and an SMT prover that rules out deadlock before boot.

release astrs robotics ros2 dataflow middleware pure-rust rtps smt

Robotics middleware has forced the same choice for a decade: ROS 2, an industry-standard C/C++ colossus with no memory-safety story, or dora-rs, the right architecture in the right language that outsources its data plane to Zenoh and drags a C libgit2+OpenSSL build into every install. AstRS 0.1.0 refuses the choice.

Today we released AstRS 0.1.0 — the first release of a from-scratch, 100% Pure Rust robotics dataflow middleware. AstRS (Astro Boy + Rust, pronounced “asters”) is a drop-in successor to dora-rs and a practical replacement path for ROS 2. Forty publishable crates and binaries went to crates.io today: the full substrate, the daemon/coordinator/runtime orchestration layer, the complete ROS 2 interop stack, built-in signal and vision node libraries, a deterministic simulation harness, a C API, and the CLI/TUI tooling.

No C. No C++. No Fortran. Not in the default build, not in any feature combination, on any target — the policy is absolute and enforced by cargo deny plus a workspace sys-crate sweep, not by good intentions. Dataflow graphs of isolated OS processes exchange self-describing columnar messages over one wire spec and one payload format. Same-host legs get a purpose-built zero-copy shared-memory ring; cross-host legs get TCP or QUIC; ROS 2 nodes are reached directly over a from-scratch RTPS 2.3 stack. No Zenoh, no DDS vendor runtime. Rust 1.95+, edition 2024, Apache-2.0.

Why AstRS 0.1.0 is a game changer

The incumbents’ pain, verified against dora-rs 1.0.0-rc.4 source rather than its docs:

AstRS 0.1.0 ends all of that:

Six criterion-tracked targets ship with 0.1.0, each backed by a real in-tree bench rather than an aspirational number:

BenchmarkTarget (0.1.0)
Same-host SHM handoff, 4 MB frame, p99< 120 µs
Same-host small message (256 B) RTT, p99< 25 µs
Cross-host transport, 4 MB frame, LAN, p99< 4 ms
Timer jitter @ 1 kHz, p99< 150 µs
astrs run cold start, 10-node graph< 800 ms
RTPS pub → ROS 2 sub, 1 KB, p99< 1.5 ms

The suite behind them stands at 9,696 tests on default features and 9,854 with --all-features, zero failures (7 skipped either way), plus 1,174 doctests.

Technical Deep Dive: the four layers

1. The substrate. astrs-wire is the single control-plane protocol surface: one framed codec, one message family per leg, a Hello/Welcome/Refused handshake with version negotiation, and an append-only compatibility contract frozen into golden snapshot files that cargo xtask snapshot-protocol verifies every release — a reordered or removed enum variant fails the check, not a stale paragraph. astrs-time is a first-party hybrid logical clock (the uhlc replacement) with a fully controllable test clock and checked-arithmetic deadlines. astrs-data is the columnar payload format: 64-byte aligned buffers, RecordBatch, a std type URN registry, schema hashing, and tensor/image views.

2. Orchestration and execution. astrs-manifest parses graphs with deny_unknown_fields strictness — config never silently accepts what it won’t honor. astrs-graph is the validated model (nodes, ports, edges, virtual sources), astrs-scheduler supplies a bounded, policy-driven, eviction-immune InputQueue, and the daemon/coordinator/runtime trio executes it. astrs-raft backs coordinator high availability.

3. The ROS 2 interop pillar. astrs-cdr implements XCDR1 encode/decode in both endiannesses plus XCDR2 read, with ROS 2 alignment rules. astrs-rtps is RTPS 2.3 on tokio — the full message model, the discovery builtins, and QoS including the DURABILITY reader half that DDS places on both endpoints. Above them sit astrs-idl (codegen), astrs-ros2 (an rcl-level client library), astrs-rosbag, astrs-tf and astrs-urdf.

4. Nodes, simulation and tooling. astrs-nodes-signal and astrs-nodes-vision ship the common DSP and camera-frame stages twice over — as reusable library surfaces and as ready-to-run nodes. astrs-sim is a deterministic fixed-step harness driving a real dataflow. bins/astrs-cli puts the entire verb set on one astrs binary, including astrs hub for fetching nodes and operators from a package index and astrs token mint --scope read|mutate for read-only cluster credentials.

Getting Started

One install line gives you coordinator, daemon, runtime, CLI, TUI, recorder and ROS 2 bridge. No colcon, no setup.bash, no Python environment:

cargo install astrs-cli    # installs the `astrs` binary

Scaffold a node and run it:

astrs new node hello       # scaffolds hello/{Cargo.toml,src/main.rs,dataflow.yml}
cd hello
cargo build --release
astrs validate dataflow.yml
astrs run dataflow.yml

Running one of the in-repo examples end to end looks like this:

$ cargo build -p hello-timer
$ astrs run examples/hello-timer/dataflow.yml
   0.176s [greeter] hello from greeter, 10 ticks to go
   0.219s [greeter] tick 1 at hlc 1787562511209225000-0
   ...
   2.019s [greeter] done after 10 ticks
   2.033s [greeter] exited (exited successfully)
dataflow 01a03307-4a90-7772-ac55-3076cd385431 finished (1 node(s), 0 failed)

Twenty runnable example graphs ship under examples/, from the one-node hello-timer through multi-daemon clusters, record/replay, and live ROS 2 interop with no ROS installed.

What’s inside 0.1.0 (released September 6)

Tips

This is the foundation

AstRS is a COOLJAPAN Ecosystem flagship, and it internalizes what dora imports by standing on its siblings: oxicode encodes every control frame, OxiZ discharges the graph proofs, OxiArc (deflate/lz4/zstd) compresses recordings, OxiCrypto backs the token scopes, OxiFFT powers the signal nodes, OxiQUIC and OxiHTTP carry the cross-host and hub legs, and OxiSQL with OxiStore persists coordinator state. Every one of them is Pure Rust, which is the only reason AstRS can make the claim it does.

Repository: https://github.com/cool-japan/astrs

Star the repo if you have ever fought a DDS vendor’s QoS quirks, waited on colcon, or discovered that your middleware’s config field was read by nothing.

The era of “robotics means C++ and a sourced setup script” is over. Pure Rust robotics middleware is here — fast, safe, provable, and sovereign.

KitaSan at COOLJAPAN OÜ September 6, 2026

↑ Back to all posts