Embedded Rust vs C in 2026 · the pragmatic decision
Rust for embedded has arrived · on Cortex-M, RISC-V, ESP32. Here is the honest decision frame we use on greenfield firmware in 2026.
Rust for embedded has arrived · on Cortex-M, RISC-V, ESP32. Here is the honest decision frame we use on greenfield firmware in 2026.
Embedded Rust in 2026 is the opposite of 2022. The community settled on a default stack (probe-rs, Embassy, embedded-hal 1.0), the tooling works, and safety-critical teams now default to Rust for new Cortex-M / RISC-V / ESP32 work. C is not going anywhere though. Here is the honest decision frame we use.
Embassy (https://embassy.dev) made async embedded practical. Before it, async-on-MCU was a research topic. Today it is the default for any firmware that juggles multiple async IO operations (BLE + Wi-Fi + sensor readout simultaneously).
#[embassy_executor::main]
async fn main(spawner: Spawner) {
let p = embassy_stm32::init(Default::default());
let mut led = Output::new(p.PB7, Level::High, Speed::Low);
loop {
led.toggle();
Timer::after_millis(500).await;
}
}On a Cortex-M4, a minimal no-std Rust binary lands around 4-6 KB. Equivalent C is closer to 1-2 KB. For a flagship-MCU project (Cortex-M33 or ESP32-S3), this is immaterial. For a ULP BLE-only tag on a 16KB device, it still rules Rust out.
Default: Rust for new projects on M4 / M33 / RISC-V / ESP32. C for legacy, cert-required, and sub-16KB targets. Mixed projects work fine · Rust for app, C for vendor SDK.

Founder, DField Solutions
I'm a full-stack engineer and I build across the whole stack myself · AI agents, web and mobile apps, blockchain, backends, security, right down to the OS layer. If it's software, I've probably built it and broken it.
Let's talk about your project. 30 minutes, no strings.