A Rust OS kernel for industrial IoT edge devices.
KEI is a Rust OS kernel for ARM64 and RISC-V edge devices. It also ships a
#![no_std] library for embassy sensor nodes.
KEI is derived from Asterinas, a Rust framekernel. It adds ARM64 board support, virtio-gpu display, industrial drivers, and a sensor-node wire protocol — while staying independent of upstream release cycles.
flowchart TB
subgraph Gateway["KEI kernel"]
KERN["RTOS-grade kernel\nARM64 / RISC-V"]
NET["Network stack\nMQTT · WebSocket · HTTP"]
DRV["Industrial drivers\nModbus · CAN · S7comm"]
end
subgraph Sensors["Sensor nodes"]
EMB["embassy MCU firmware\nusing kei no_std library"]
end
SENSORS -->|"kei wire protocol\n(UART / RS-485)"| Gateway
Gateway -->|"WebSocket / MQTT"| CLOUD["Cloud platform"]
| Component | Location | What it does |
|---|---|---|
| KEI kernel | workspace root | Rust OS kernel for ARM64/RISC-V. Syscall ABI, virtio-gpu, framebuffer, network stack. |
| kei library | packages/kei/ |
#![no_std] library for embassy sensor nodes: wire protocol, manifest schema, HAL traits. |
Kernel:
just build # Build for default board (NanoPi R3S)
just test-all # Boot-test all architectures in QEMULibrary:
cd packages/kei
cargo test --all-features # 20 tests
cargo run --example host_demo # Wire protocol demoSee the library guide and benchmark results for details.
The aris-render desktop (Blitz HTML/CSS layout + Vello CPU rasterization →
/dev/fb0) requires the aris
repository. Point kei at your aris checkout via the ARIS_REPO environment
variable:
cp .env.example .env
# Edit .env and set ARIS_REPO to your aris repo path, e.g.:
# ARIS_REPO=../aris (sibling directory — the default)
# ARIS_REPO=/home/me/aris (absolute POSIX path)
# ARIS_REPO=D:\source\aris (absolute Windows path)Build commands follow a two-level convention (just build <object>):
just build browser aarch64 # compile aris browser engine only (musl cross)
just build desktop aarch64 # full stack: kernel + browser + initramfs
just render aarch64 # launch QEMU with aris-rendered desktopThe justfile auto-loads .env (via set dotenv-load). If ARIS_REPO is
unset, it falls back to ../aris (sibling directory layout).
SySL-1.0 for KEI's own code. Vendored Asterinas code under MPL-2.0. See LICENSE and LICENSE-MPL.
