Backed by Y Combinator

The solution to your ROS2 headaches.

Robot middleware at microsecond latency. Zero-copy, deterministic, ROS2-compatible. Built in Rust.

~/robot-ws
# Install the middleware on Linux, one line
$ curl -fsSL cerulion.com/install.sh | sh
Installing cerulion for linux-x86_64
iceoryx2 runtime ready # shared-memory transport
ROS2 message types loaded # e.g. sensor_msgs/Image
cerulion graph run perception
Backed by
Y CombinatorNVIDIA InceptionMassRobotics
Built by engineers from
MITPennOxford
01 — Cerulion Middleware

Robot plumbing, re‑engineered from scratch.

Cerulion goes after the part that hurts most in production: the single-machine, real-time graph. Built in Rust on iceoryx2 shared memory, its zero-copy hot path holds IPC at microsecond latency no matter the payload, and every run is deterministic and replayable by default.

Round-trip latency · p50-p99
20,114×faster than ROS 2 defaults at 16 MiB
Cerulion
4.98µs
ROS 2 defaults
100.2ms

16 MiB round-trip, p50-p99. Internal benchmark. The 20,114× ratio uses unrounded p50s.

Compatibility · adopt incrementally
Native ROS2 message support from the get‑go.
  • sensor_msgs
  • geometry_msgs
  • nav_msgs
  • tf2_msgs
// reuse the types you already ship
use sensor_msgs::Image;
use geometry_msgs::Twist;

Zero-copy from the first message, even non-POD types with unsized arrays. Your existing ROS2 nodes run inside the Cerulion runtime, faster and deterministic.

Transport · zero-copy shared memory
Written once. Read in place.
small messages
flat
4.94–4.99µs · payload-independent
camera · lidar
in‑place
near hardware speed

Even non-POD messages with unsized arrays move through shared memory in place, not just fixed-size structs.

Determinism · replay matches live exactly
Reproduce exactly. Debug once.
cerulion trace inspect ./traces
schedulerdeterministic DAG
orderderived from graph
diff vs live0 differences
replay is bit‑for‑bit identical

Execution order comes from the graph, not the OS scheduler. A bug you hit in the field replays identically on your desk, no flake, no guesswork.

QoS · triggers & backpressure
Backpressure, not dropped frames.

Nodes fire on their trigger topics in a statically-derived order. When a consumer lags, backpressure throttles upstream instead of dropping data — and missed tick deadlines still surface loudly.

Fault isolation · no penalty
Process isolation, faster than composed + intra-process at stock settings.

At stock settings, each node stays isolated while messages still clear in microseconds: at 16 MiB, 4.98µs here versus 25.3µs for composed + intra-process. On an RT-tuned machine, ROS 2 composed + intra-process reaches 5.0–6.2µs against Cerulion's 5.9–6.5µs, so this comparison is posture-dependent.

Read the docs →
Talk to us

See it on your robot.

Book a demo and we'll walk through how Cerulion fits your stack: zero-copy shared memory, deterministic replay, and ROS2 compatibility. Bring a workload and we'll run the benchmarks live.

✓ Built in Rust
✓ ROS2 compatible