Rust-first – ergonomic & safe
Sub-microsecond latency – zero-alloc, data-oriented runtime
Deterministic replay – every run, bit-for-bit identical
Interoperable with ROS2 – bridges via Zenoh opening the path for a progressive migration.
Runs anywhere – from Linux servers, workstations, SBC to bare-metal MPUs
Built to ship – one stack from simulation to production
Already showing up in:
No setup required. Open one of the live demos in your browser: the simulator runs on the left and the live Copper monitor runs on the right.
These are not mockups: BalanceBot is the exact same application that runs on a Raspberry Pi physical robot, and Flight Controller is the same control stack we run on a microcontroller (STM32H7) on real drones. Copper lets that same graph be recompiled for embedded hardware, a local workstation, or the browser.
BalanceBot Self-balancing robot sim with a live Copper DAG and latency monitor. |
Flight Controller Quadcopter flight sim with the same live Copper monitor. |
Prefer a native app instead of the browser? Install the published demo crates from crates.io:
cargo install cu-rp-balancebot
balancebot-sim
cargo install cu-flight-controller
quad-simThe source for the published demo crates above lives in
copper-project/extra-examples.
Cross-framework comparison benchmarks live in
copper-project/benchmarks.
Want to see more Copper in action? Watch the community showcase video.
- Requires Rust 1.95 or newer. The latest stable Rust toolchain is recommended.
- Start a new project from templates: Project Templates
- Browse the live component catalog: Copper Component Catalog Community components are welcome there too; if you build a reusable Copper component, prefer publishing it as its own crate and adding it to the catalog.
- See a full task graph + runtime walkthrough: Copper Application Overview
- Build and deploy an application: Build and Deploy a Copper Application
- RON configuration reference: Copper RON Configuration Reference
Link to the full documentation
- Runtime concepts and SDK features: Copper Runtime Overview
- Task lifecycle: Task Lifecycle
- Modular configuration: Modular Configuration
- Task automation: Task Automation with just
- Supported platforms: Supported Platforms
- Bare-metal development: Baremetal Development
- Component catalog: Copper Component Catalog
- FAQ: FAQ
- Release notes: Copper Release Notes
- Roadmap: Roadmap
Copper has two very different Python stories:
- Offline Python log analysis: use
cu29-exportand app-specific PyO3 modules in the application crates that expose them. This is a reasonable workflow because Python stays off the runtime hot path. - Runtime Python task prototyping: use components/tasks/cu_python_task and examples/cu_python_task_demo. This is for experimentation only and is strongly not recommended for production or realtime robots.
Putting Python inside a Copper task defeats the performance model Copper is built for: it adds allocations, latency, jitter, and middleware overhead, and it ruins the realtime characteristics of the stack. The intended use is to sketch one task in Python, get the behavior right, then rewrite it in Rust.
If you use Copper-rs in your research, please cite it as:
@misc{copperrs2026,
author = {Guillaume Binet and Copper Project contributors},
title = {Copper-rs: A deterministic runtime and SDK for robotics},
year = {2026},
howpublished = {GitHub repository},
url = {https://github.com/copper-project/copper-rs},
note = {Version v0.13 or latest}
}Note
We are looking for contributors to help us build the best robotics framework possible. If you are interested, please join us on Discord or open an issue.
