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
10,807×faster than standard ROS2 at LiDAR scale
Cerulion
2.4µs
ROS2
26.2ms

16 MB round-trip, p50-p99. Internal benchmark.

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
~3.0µ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 intra-process.

Every node in its own process, so a crash stays contained. Messages still clear in microseconds, faster than ROS2 intra-process.

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