copper-project/copper-rs

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

1,487

stars

1,484

commits

Rust

primary language

Sep 11, 2026

updated

discord.gg/VkCG7Sb9Kw
operating-system
physical-ai
robotics
ros
rust
Browse cluster: Rust for Robotics and ROS2

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 Copper documentation Copper Discord

▶ Try Copper in your browser  ·  Build your first app  ·  Read the book

Why Copper

Built for robotsBuilt 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
BalanceBot
A self-balancing robot simulation using the application that runs on Raspberry Pi hardware.
Source code
Flight controller browser demo
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.

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

In 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), post-execution timing from the default Copper log (just plan-log), and replay.

How Copper Fits Together

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.

Explore Copper

Contributors

(top 30 of 35)

gbin

1,079 commits

makeecat

219 commits

dependabot[bot]

95 commits

Scofield626

28 commits

copper-project/copper-rs

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

1,487

stars

1,484

commits

Rust

primary language

Sep 11, 2026

updated

discord.gg/VkCG7Sb9Kw
operating-system
physical-ai
robotics
ros
rust
Browse cluster: Rust for Robotics and ROS2

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 Copper documentation Copper Discord

▶ Try Copper in your browser  ·  Build your first app  ·  Read the book

Why Copper

Built for robotsBuilt 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
BalanceBot
A self-balancing robot simulation using the application that runs on Raspberry Pi hardware.
Source code
Flight controller browser demo
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.

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

In 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), post-execution timing from the default Copper log (just plan-log), and replay.

How Copper Fits Together

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.

Explore Copper

Contributors

(top 30 of 35)

gbin

1,079 commits

makeecat

219 commits

dependabot[bot]

95 commits

Scofield626

28 commits

Languages

Rust

92.6%

Jupyter Notebook

4.2%