← Open Source
copper-project

copper-rs

Copper is an operating system for robots - build, run, and replay your entire robot deterministically.

InfrastructureMake world agent-readyRust
Open on GitHub
Momentum
+2stars in 24 hours+0.1%
1.52k
Stars
106
Forks
+12
This week
36
Contributors
Created 2020-08-27 · Updated 2026-10-05 · #3509 today
Top developers
README

Copper logo

Copper Runtime & SDK

A Rust runtime for building, running, recording, and deterministically replaying static robot task graphs, from Linux to bare metal.

CI/CD status cu29 on crates.io Rust 1.95 or newer Read the Copper book Copper documentation Copper release notes Copper Discord

▶ Try Copper in your browser  ·  Build your first app

Why Copper

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.

See It Run

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 browser demo](https://raw.githubusercontent.com/copper-project/copper-rs/master/doc/static/demo-balancebot-browser.png)](https://cdn.copper-robotics.com/demo/balancebot/index.html)
    

  [BalanceBot](https://cdn.copper-robotics.com/demo/balancebot/index.html)
    

  A self-balancing robot simulation using the application that runs on Raspberry Pi hardware.
    

  [Source code](https://github.com/copper-project/extra-examples/tree/master/examples/cu_rp_balancebot)




  [![Flight controller browser demo](https://raw.githubusercontent.com/copper-project/copper-rs/master/doc/static/demo-flight-controller-browser.png)](https://cdn.copper-robotics.com/demo/flight-controller/index.html)
    

  [Flight Controller](https://cdn.copper-robotics.com/demo/flight-controller/index.html)
    

  A quadcopter simulation using the control stack deployed on STM32H7 flight hardware.
    

  [Source code](https://github.com/copper-project/extra-examples/tree/master/examples/cu_flight_controller)

Watch more robots built with Copper in the community showcase, or explore the cross-framework benchmarks.

Build Your First Copper App

Install the latest stable Rust toolchain, then:

cargo install cargo-cunew
cargo cunew hello_copper
cd hello_copper
cargo run

The generated app has 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 graph), the exact generated process schedule (just sched), post-execution timing from the default Copper log (just sched-log), and replay. Host projects also include just pgs-baseline, just pgs-optimize, just pgs-candidate, and just pgs-measure; the starter schedule.ron is a conservative placeholder to tune for the real workload. Project creation asks whether the target is bare metal/no_std and omits PGS scaffolding for that choice.

How Copper Fits Together

Stage What happens
Declare Define the static task graph in copperconfig.ron.
Generate #[copper_runtime] wires the graph at compile time.
Run Execute deterministically with a zero-allocation hot path.
Record Capture messages, timing, and state in a unified .copper log.
Inspect Replay a recorded run, export its data, and inspect its state.

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.

Live telemetry: stream robot data and structured logs to a ground station over UDP, view live task outputs, and save a replayable .copper archive. A live Copper twin can reconstruct selected deterministic task outputs locally to reduce bandwidth. Try the telemetry demo.

Explore Copper

Learn

Book · Runtime overview · API docs

Build

Project templates · RON reference · Component catalog

Go deeper

Examples · Logging and replay · Python support

Project

Supported platforms · Release notes

Community

Contributing · GitHub Discussions · Discord

Codec, ZED camera, and ViTFly inference crates are maintained in this workspace. See in-tree crates and verification.