17 unstable releases (8 breaking)

0.9.1 Aug 31, 2025
0.8.0 Aug 1, 2025
0.7.0 Jan 2, 2025
0.6.3 Nov 12, 2024
0.0.0 Oct 31, 2020

#53 in Embedded development

Download history 22789/week @ 2025-09-11 23844/week @ 2025-09-18 25046/week @ 2025-09-25 22275/week @ 2025-10-02 29336/week @ 2025-10-09 25685/week @ 2025-10-16 28537/week @ 2025-10-23 29159/week @ 2025-10-30 29105/week @ 2025-11-06 29135/week @ 2025-11-13 31193/week @ 2025-11-20 28567/week @ 2025-11-27 30489/week @ 2025-12-04 22937/week @ 2025-12-11

58,490 downloads per month
Used in 127 crates (116 directly)

MIT/Apache

145KB
2K SLoC

embassy-executor

An async/await executor designed for embedded usage.

  • No alloc, no heap needed.
  • Tasks are statically allocated. Each task gets its own static, with the exact size to hold the task (or multiple instances of it, if using pool_size) calculated automatically at compile time. If tasks don't fit in RAM, this is detected at compile time by the linker. Runtime panics due to running out of memory are not possible.
  • No "fixed capacity" data structures, executor works with 1 or 1000 tasks without needing config/tuning.
  • Integrated timer queue: sleeping is easy, just do Timer::after_secs(1).await;.
  • No busy-loop polling: CPU sleeps when there's no work to do, using interrupts or WFE/SEV.
  • Efficient polling: a wake will only poll the woken task, not all of them.
  • Fair: a task can't monopolize CPU time even if it's constantly being woken. All other tasks get a chance to run before a given task gets polled for the second time.
  • Creating multiple executor instances is supported, to run tasks with multiple priority levels. This allows higher-priority tasks to preempt lower-priority tasks.

Dependencies

~0.7–2.2MB
~38K SLoC