rtic is a free, open source orchestration & scheduling project written in Rust and released under Apache-2.0. It has 2,403 GitHub stars, 263 forks and 58 open issues, and was last pushed 8 hours ago. On this registry it ranks #44 of 64 tracked projects in Orchestration & Scheduling, with 5 head-to-head comparisons available. It gained 1 stars over the last 3 tracked days.

What is rtic?

What it is

RTIC is the Real-Time Interrupt-driven Concurrency framework for ARM Cortex-M microcontrollers. It lives in the Rust embedded ecosystem, with topics that include bare-metal, no-std, concurrency, and scheduling. The README describes it as a hardware accelerated Rust RTOS and a concurrency framework for building real-time systems. All Cortex-M devices are fully supported, and most RISC-V devices are supported.

It solves the problem of organizing concurrent embedded software around tasks, interrupts, timers, and shared memory. Instead of leaving developers to coordinate event handlers and data access by hand, RTIC provides event triggered or spawned tasks, message passing, a timer queue, priority based critical sections, and compile time deadlock free execution. It targets systems where scheduling overhead, memory use, and data race freedom are important.

Key capabilities

  • Tasks are the unit of concurrency and can be event triggered by asynchronous stimuli or spawned by the application on demand.
  • Messages can be passed to software tasks at spawn time.
  • A timer queue lets tasks be delayed or scheduled to continue at a future time, which supports periodic tasks.
  • Task prioritization enables preemptive multitasking.
  • Fine-grained priority based critical sections support efficient and data race free memory sharing.
  • Deadlock free execution is guaranteed at compile time, which the README says is stronger than the standard Mutex abstraction.
  • The scheduler has minimal software footprint because hardware does bulk scheduling; tasks share a single call stack and need no hard dependency on a dynamic allocator.

Who uses it and how

  • Developers building bare-metal Rust applications for Cortex-M microcontrollers can use RTIC as the concurrency framework and scheduler.
  • Application authors use event triggered tasks for asynchronous stimuli and spawned tasks for requests raised by the program.
  • Real-time control work can use the timer queue for delayed work and periodic tasks.
  • Community members use examples repo, Matrix room, meeting notes, and RFC repo for examples, discussion, and major changes.
  • Contributors run local tests with QEMU and ESP32 QEMU through cargo xtask ci, cargo xtask fmt, and cargo xtask clippy.

Getting started

The README points to the rtic crate on crates.io, the user documentation at rtic.rs, and the API reference at rtic.rs/stable/api. Local test workflows use QEMU, optional ESP32 QEMU, and cargo xtask commands such as ci, fmt, and clippy.

When to use it — and when not to

Use RTIC for bare-metal Rust real-time systems on Cortex-M and supported RISC-V targets, especially when interrupt-driven tasks, timer scheduling, and low scheduling overhead are central. Do not use it when the target lacks RTIC backend support, and do not expect a hosted deployment path from the provided facts. The main weakness is partial RISC-V support, because the README says most RISC-V devices are supported and directs readers to the book for backend particularities and limitations.

project readme (upstream, from github) — read inline

Real-Time Interrupt-driven Concurrency

The hardware accelerated Rust RTOS

A concurrency framework for building real-time systems.

crates.io docs.rs book matrix Meeting notes

Features

  • Tasks as the unit of concurrency [^1]. Tasks can be event triggered (fired in response to asynchronous stimuli) or spawned by the application on demand.

  • Message passing between tasks. Specifically, messages can be passed to software tasks at spawn time.

  • A timer queue [^2]. Software tasks can be delayed or scheduled to continue running at some time in the future. This feature can be used to implement periodic tasks.

  • Support for prioritization of tasks and, thus, preemptive multitasking.

  • Efficient and data race free memory sharing through fine-grained priority based critical sections [^1].

  • Deadlock free execution guaranteed at compile time. This is a stronger guarantee than what's provided by the standard Mutex abstraction.

  • Minimal scheduling overhead. The task scheduler has minimal software footprint; the hardware does the bulk of the scheduling.

  • Highly efficient memory usage: All the tasks share a single call stack and there's no hard dependency on a dynamic memory allocator.

  • All Cortex-M devices are fully supported.

  • Most RISC-V devices are supported. Refer to the RTIC book to learn more about RISC-V backends, their particularities, and their limitations.

  • This task model is amenable to known WCET (Worst Case Execution Time) analysis and scheduling analysis techniques.

User documentation

Documentation for the development version.

API reference

Community provided examples repo

Chat

Join us and talk about RTIC in the Matrix room.

Weekly meeting minutes can be found over at RTIC HackMD

Contributing

New features and big changes should go through the RFC process in the dedicated RFC repository.

Running tests locally

To check all tests locally, make sure you got QEMU (and ESP32 QEMU if so desired) then:

$ cargo xtask ci

To only format code before PR (included in ci above):

$ cargo xtask fmt

Clippy lints:

$ cargo xtask clippy

and so on. See cargo xtask --help for all options.

Acknowledgments

This crate is based on the Real-Time For the Masses language created by the Embedded Systems group at Luleå University of Technology, led by Prof. Per Lindgren.

References

[^1]: Eriksson, J., Häggström, F., Aittamaa, S., Kruglyak, A., & Lindgren, P. (2013, June). Real-time for the masses, step 1: Programming API and static priority SRP kernel primitives. In Industrial Embedded Systems (SIES), 2013 8th IEEE International Symposium on (pp. 110-113). IEEE.

[^2]: Lindgren, P., Fresk, E., Lindner, M., Lindner, A., Pereira, D., & Pinho, L. M. (2016). Abstract timers and their implementation onto the arm cortex-m family of mcus. ACM SIGBED Review, 13(1), 48-53.

License

All source code (including code snippets) is licensed under either of

at your option.

The written prose contained within the book is licensed under the terms of the Creative Commons CC-BY-SA v4.0 license (LICENSE-CC-BY-SA or https://creativecommons.org/licenses/by-sa/4.0/legalcode).

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be licensed as above, without any additional terms or conditions.

Frequently asked questions

Is rtic free to use?

rtic is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does rtic do?

Real-Time Interrupt-driven Concurrency (RTIC) framework for ARM Cortex-M microcontrollers

What is rtic written in?

rtic is primarily written in Rust. Its source is publicly available at https://github.com/rtic-rs/rtic, and it has 2,403 GitHub stars.