DField SolutionsMérnöki stúdió · Budapest
Loading · Töltődik
Skip to content
Back to blog
·10 min read
Embedded··10 min read

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.

Last verified
Listen
Dezso Mezo
Founder, DField Solutions
ShareXLinkedIn#
Embedded Rust vs C in 2026 · the pragmatic decision

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.

When we pick Rust

  • Greenfield project on a modern MCU (Cortex-M, RISC-V, ESP32, RP2040).
  • Memory-safety matters (medical, automotive, finance).
  • Async concurrency is non-trivial. Embassy is a genuine productivity win.
  • Build reproducibility is important. Cargo plus probe-rs beats the C/Makefile mess.

When we stay with C

  • MISRA-C certification is required. Rust tooling for cert is still immature.
  • Sub-16KB flash targets. Rust binary footprint is catching up but still larger.
  • Legacy toolchains (AVR, old PIC, STM8). Rust support is unreliable.
  • Hardware vendor ships only a C SDK. Binding-generation bias adds risk.

The Embassy moment

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;
    }
}

Binary size reality

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.

ShareXLinkedIn#
Dezso Mezo
By

Dezso Mezo

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.

Keep reading
RELATED PROJECTS
Let's talk

Would rather build together?

Let's talk about your project. 30 minutes, no strings.