Qoraal is a flexible, event-driven application framework for embedded systems — structured where it matters, fluid where it helps.
It gives you a portable OS abstraction, a scalable task system, clean service management, logging, shell support, and watchdog handling, designed to keep embedded applications modular and sane across multiple RTOSes or POSIX environments.
Embedded projects don’t usually fail because someone cant write a driver.
They fail slowly, from entropy.
Qoraal is built around a few simple beliefs:
- Events over spaghetti: make "what happened" explicit.
- Services with lifecycles: init/start/stop beats "some global init order."
- Portable by design: the OS port is a boundary, not an afterthought.
- Small, predictable primitives: boring on purpose but reliable in production.
- No framework religion: you can adopt it piece-by-piece and keep your own style.
Qoraal's goal is not to be clever, it’s to keep your system coherent as it grows.
- Zephyr
- FreeRTOS
- ThreadX / Azure RTOS
- POSIX (Linux, macOS, Windows/MinGW)
- ChibiOS
"Write once. Build anywhere." — within the boundaries above.
If you run Qoraal on a new target and it holds up, open an issue/PR with the RTOS, toolchain, and board/host details.
Portable API for:
- Threads & priorities
- Mutexes, semaphores, events
- Timers and time conversion
- Basic IRQ/context detection (where supported)
This is what allows Qoraal services to run unchanged on different OSes.
A lightweight task engine with:
- Priority task queues
- Deferred work from interrupts
- Timed / delayed tasks
- Optional waitable tasks
- Internal thread pool tuned for embedded work
Perfect for systems that need responsiveness without chaos.
Define services with clear lifecycles:
- init → start → stop
- dependency ordering
- failure handling and restart logic
A simple structure that prevents big-app entropy.
- Channel-based logging per module
- Deferred logging using tasks
- Pluggable log channels (RTT, UART, POSIX stdout, Zephyr logging, FLASH)
- Optimized for low-resource systems
A small, terminal-independent command shell with:
- Commands
- Arguments
- Simple scripting
- Easy routing to UART, RTT, TCP, or Zephyr console
Great for bring-up and debugging or configuration management.
Unified interface for hardware watchdogs.
Feed from tasks → avoid random device resets.
-
Open a Codespace or your local environment.
-
Run:
Windows/Linux/macOS/GitHub Codespace
make all
-
When the Qoraal shell starts:
. runme.sh
You’ll see the demo services start up.
add_subdirectory(qoraal)
target_link_libraries(app PRIVATE qoraal)Check the sample test project. Should run on most platforms.
- Clean structure without rigidity
- Portable across major RTOS ecosystems
- Designed for real products, not toy demos
- Small, sharp, predictable
Qoraal sits quietly in the center of your system and keeps everything coherent, without getting in your way.