A Rust runtime for building, running, recording, and deterministically replaying static robot task graphs, from Linux to bare metal.
▶ Try Copper in your browser · Build your first app · Read the book
| Built for robots | Built to ship |
|---|---|
| Static by design: task graphs are declared in RON and wired at compile time. | Runs anywhere: Linux, macOS, SBCs, and bare-metal microcontrollers. |
| Realtime first: zero-allocation, data-oriented execution on the hot path. | Deterministic replay: record a run, reproduce it, and inspect it offline. |
| Rust-first: ergonomic task APIs with compile-time guarantees. | Interoperable: connect to ROS 2 through Zenoh and migrate progressively. |
Already flying, driving, swimming, spacefaring, and powering humanoids.
These are the same Copper applications used on physical robots, recompiled for the browser. The simulator runs beside a live view of the Copper task graph and latency.
BalanceBot A self-balancing robot simulation using the application that runs on Raspberry Pi hardware. Source code |
Flight Controller A quadcopter simulation using the control stack deployed on STM32H7 flight hardware. Source code |
Watch more robots built with Copper in the community showcase, or explore the cross-framework benchmarks.
Install the latest stable Rust toolchain, then:
cargo install cargo-cunew
cargo cunew hello_copper
cd hello_copper
cargo runIn about 30 seconds, you have a typed source → task → sink graph that prints its
first messages and records logs/hello-copper.copper. Start with
copperconfig.ron, src/main.rs, and src/tasks.rs; the generated justfile
also provides helpers for logs, CopperLists, topology (just dag), the exact
generated process schedule (just plan), and replay.
flowchart LR
Config["copperconfig.ron<br/>Static task graph"]
Generate["#[copper_runtime]<br/>Compile-time generation"]
Runtime["Deterministic runtime<br/>Zero-alloc hot path"]
Log["Unified .copper log"]
Tools["Replay · Export · Inspect"]
Config --> Generate --> Runtime --> Log --> Tools
The robot is a static thing: Copper turns its declared graph into a purpose-built runtime, then records messages, timing, and state into one replayable log.
| Learn | Book · Runtime overview · API docs |
| Build | Project templates · RON reference · Component catalog |
| Go deeper | Examples · Logging and replay · Python support |
| Project | Supported platforms · Roadmap · Release notes |
| Community | Contributing · GitHub Discussions · Discord |
