C-compatible FFI wrappers around the ember multi-agent framework.
This crate exposes a subset of ember's functionality through a C ABI, enabling use from C or C++ projects. The primary motivation being integration with the Arduino ESP32 toolchain allowing integration with the existing vast C/C++ ecosystem.
This crate is highly experimental. The API is unstable, coverage is incomplete, and support for future ember features is not guaranteed.
| Module | Description |
|---|---|
container |
Container initialisation and agent registration |
agent |
Reactive agent creation |
behaviour |
Reactive behaviour creation |
context |
Agent context access and management |
message |
Message construction, envelope, and filters |
acc |
External communication channel registration (e.g. ESP-NOW via the Arduino library) |
The ESP32-specific modules (esp/alloc, esp/critical_section) allow the user of the bindings to
specify their own allocator and critical_section implementation. For example, using the Arduino
built-in allocator allowing rust types to be allocated and managed on the same heap as native C/C++
types.
The primary use case is linking ember into an Arduino ESP32 project as a static library. The
xtensa-esp32-arduino-elf.json target spec and build.rs are configured for this workflow.
See the justfile for the build commands used during development.
- Rust (see
rust-toolchain.toml) - The Xtensa ESP32 toolchain (
xtensa-esp32-arduino-elf) - An Arduino ESP32 project to link against
To be determined. Please contact the authors before reuse or redistribution.