A tiny, dependency-free ML runtime for ARM Cortex-M. Runs int8 and int4 models with zero allocations on devices as small as a $4 MCU.
Engineering intelligence
where silicon meets the real world.
I'm trentenwen. I build at the boundary where machine learning meets real hardware — quantized models on microcontrollers, ML-driven robotics, and the tools that make them usable. Sometimes firmware. Sometimes Python. Always close to the metal.
Most of my work lives between PyTorch notebooks and bare-metal C — pushing models down to kilobytes and microseconds, then wiring them to motors, microphones, and sensors that have to survive in the real world.
I prefer small, sharp tools over big frameworks. A 200-line runtime will outlive a 2 MB dependency every time. Most of what I publish here is in that spirit: notes from the trenches of putting intelligence on devices that don't have much.
How I got an 8 KB keyword-spotting model below 4 KB by moving the quantization noise into training. Notes, charts, and a bunch of dead ends.
Your model isn't the slow part. The DMA, the cache, and the OS are. A practical guide to measuring where audio inference actually spends its time.
A short tale of IMU drift, Kalman filters, and why no single sensor is honest. Plus a 60-line complementary filter that ships in production.
Exporting, quantizing, converting, and shipping a 200 KB model to a $4 chip without losing your sanity. An end-to-end walkthrough.
Neural audio synthesis firmware for STM32H7. A 70 KB GRU generates wavetables in real time at 48 kHz. No malloc, no FPU.
SWO-based profiler for embedded ML workloads. Captures per-layer latency, memory, and cache misses on bare-metal targets. Streams to a Python notebook.
A 12 KB MQTT-to-HTTP gateway for low-power sensor networks. Runs on an ESP32-C3 with TLS, runs for weeks on a coin cell.
- Rust
- C / C++
- Python
- TypeScript
- Lua
- PyTorch
- ONNX
- TFLite Micro
- llama.cpp
- numpy / scipy
- STM32 (H7, F4, G0)
- ESP32 / ESP32-C3
- RP2040
- Arduino
- Raspberry Pi
- KiCad
- LTspice
- Sigrok / PulseView
- PlatformIO
- probe-rs
- neovim
- tmux
- uv
- git / jj
- Linux
- Verilog
- ESP-IDF (deeply)
- JAX
- Zephyr RTOS