Firmware Dependency Stack

This document defines the ESP32-S3 firmware dependency versions and their compatibility matrix.

Container Environment

Development uses the official Espressif container:

docker.io/espressif/idf-rust:esp32s3_latest

Version Note (2026-01-11): esp32s3_latest currently resolves to toolchain v1.90.0.0. For reproducible builds, pin to esp32s3_1.90.0.0.

This container includes:

  • Xtensa Rust toolchain for ESP32-S3
  • espflash for firmware deployment
  • All required build tools

Version Matrix

Last Updated: 2026-01-11 ESP HAL Status: Testing stable 1.0.0 with existing ecosystem

ESP HAL Ecosystem

CrateVersionPurpose
esp-hal1.0.0Hardware Abstraction Layer (stable)
esp-rtos0.2.0Embassy executor + WiFi scheduler
esp-radio0.17.0WiFi/BLE/ESP-NOW (requires unstable)
esp-backtrace0.18.0Panic handler with backtraces
esp-println0.16.0Serial output and logging
esp-storage0.8.0Flash storage (tower only)
esp-alloc0.9.0Heap allocator
esp-bootloader-esp-idf0.3.0ESP-IDF compatible bootloader

Upgrade Notes

Upgraded to esp-hal 1.0.0 stable ecosystem:

  • esp-hal 1.0.0-rc.1 → 1.0.0 (no API changes per release notes)
  • esp-rtos 0.1.1 → 0.2.0 (required for esp-metadata-generated compatibility)
  • esp-radio 0.16.0 → 0.17.0 (required for esp-metadata-generated compatibility)

Embassy Async Runtime

CrateVersionPurpose
embassy-executor0.9.xAsync task executor
embassy-time0.5.xTime and delay utilities
embassy-sync0.7.xChannels, mutexes, signals
embassy-futures0.1.xFuture utilities (tower only)
embassy-net0.7.xNetwork stack (cat only)

Application Frameworks

CrateVersionPurpose
rmk0.8.xKeyboard framework with Vial (tower only)
usbd-hid0.9.xUSB HID types (tower only)

Serialization

CrateVersionPurpose
postcard1.xBinary serialization (no_std)
serde1.0Serialization framework
heapless0.8 (firmware) / 0.7 (common)Fixed-capacity collections

Stability Notes

Stable APIs (esp-hal 1.0.0)

  • GPIO, SPI, I2C, UART drivers
  • Timer configuration and delays
  • Core HAL initialization
  • Memory allocation

Unstable APIs (behind unstable feature)

  • ESP-NOW (esp-radio) - next stabilization target
  • WiFi and BLE drivers
  • Some advanced peripheral features

The unstable feature is required for ESP-NOW wireless communication. While functional, these APIs may change in minor version updates.

Upgrade History

2026-01-11: esp-hal RC to Stable Ecosystem

Upgraded to esp-hal 1.0.0 stable with compatible ecosystem versions.

CrateBeforeAfter
esp-hal1.0.0-rc.11.0.0
esp-rtos0.1.10.2.0
esp-radio0.16.00.17.0

esp-rtos and esp-radio upgraded to resolve esp-metadata-generated version conflict (0.2.0 vs 0.3.0).

API Change: esp-hal-smartled now takes &mut [PulseCode; N] instead of owned buffer. Use StaticCell for async tasks.

Feature Flags

Cat Crate

esp-hal = { features = ["esp32s3", "log-04", "unstable"] }
esp-rtos = { features = ["embassy", "esp-alloc", "esp-radio", "esp32s3", "log-04"] }
esp-radio = { features = ["esp-alloc", "esp-now", "esp32s3", "log-04", "smoltcp", "unstable", "wifi"] }

Tower Crate

esp-hal = { features = ["esp32s3", "log-04", "unstable"] }
esp-rtos = { features = ["embassy", "esp-alloc", "esp-radio", "esp32s3", "log-04"] }
esp-radio = { features = ["esp32s3", "wifi", "esp-now", "unstable", "log-04"] }

References