Boreas:: Zephyr-style kernel APIs and a device model
Posted: Thu Jul 02, 2026 2:16 am
Sharing an open-source project we've been using in our ESP-IDF work: Boreas, a thin compatibility layer that lets you write IDF projects using Zephyr RTOS API conventions; a more uniform, structured surface on top of ESP-IDF/FreeRTOS.
What you get:
- Kernel primitives: k_sem, k_work, k_timer, k_thread, k_msgq, k_event, slist/dlist, ring buffer, and the timeout model
- A device model: device_t + *_dt_spec helpers for I2C/SPI/GPIO/UART that separate hardware description from application logic. Changing a pin or supporting a different board revision becomes a config change. Proper DTS is not here, so configs live in code. In other projects we've made adc, i2s, temp_sensor devices and more
- System services: per-module log levels, thread analyzer, subsystem watchdog, retry/backoff
- A shell with excellent command-registration ergonomics
It's not an OS port and it sits on top of the ESP-IDF you already use. The components are independent, so you can pull in just the piece you want (on one project we grabbed only zshell).
Tested on ESP-IDF v5.4/v5.5, both on the linux target (no hardware needed) and on-device on the ESP32-S3 and -C5. Apache-2.0; kernel API surface derived from Zephyr (also Apache-2.0).
Notable here is the "why not just use Zephyr". The short answer is business reasons. Not all teams want the on-ramp for Zephyr, IDF ecosystem requires it, new silicon, or more.
Repo + runnable examples: https://github.com/intercreate/boreas
Release notes (v0.1.0): https://github.com/intercreate/boreas/r ... tag/v0.1.0
Feedback very welcome!
What you get:
- Kernel primitives: k_sem, k_work, k_timer, k_thread, k_msgq, k_event, slist/dlist, ring buffer, and the timeout model
- A device model: device_t + *_dt_spec helpers for I2C/SPI/GPIO/UART that separate hardware description from application logic. Changing a pin or supporting a different board revision becomes a config change. Proper DTS is not here, so configs live in code. In other projects we've made adc, i2s, temp_sensor devices and more
- System services: per-module log levels, thread analyzer, subsystem watchdog, retry/backoff
- A shell with excellent command-registration ergonomics
It's not an OS port and it sits on top of the ESP-IDF you already use. The components are independent, so you can pull in just the piece you want (on one project we grabbed only zshell).
Tested on ESP-IDF v5.4/v5.5, both on the linux target (no hardware needed) and on-device on the ESP32-S3 and -C5. Apache-2.0; kernel API surface derived from Zephyr (also Apache-2.0).
Notable here is the "why not just use Zephyr". The short answer is business reasons. Not all teams want the on-ramp for Zephyr, IDF ecosystem requires it, new silicon, or more.
Repo + runnable examples: https://github.com/intercreate/boreas
Release notes (v0.1.0): https://github.com/intercreate/boreas/r ... tag/v0.1.0
Feedback very welcome!