horchd_
a daemon that listens.
Native Linux multi-wakeword detection. Loads
N user-defined
.onnx
classifiers in parallel, listens to your mic, and broadcasts a
D-Bus Detected
signal the moment any of them fires. Talks the
Wyoming protocol
too — drop-in wake-word engine for Home Assistant's voice pipeline.
From microphone capture to D-Bus signal in one frame.
Every stage is the same one openWakeWord uses, ported to Rust + ONNX Runtime. The two universal models load once and feed every detector; adding the N-th wakeword costs one classifier evaluation per frame, not a second audio thread.
Lean enough to run on whatever hardware you already own.
Numbers from a release build on consumer x86. Wakeword detection is the kind of always-on background work that should be invisible — these budgets are the reason `horchd` aims to be.
What `horchd` is, in one paragraph each.
Native to the metal.
Single Rust 2024 binary. No Python interpreter at runtime, no virtualenv to bootstrap, no GPU required. Boots in well under a hundred milliseconds, fits in the systemd user-unit lifecycle without ceremony.
N wakewords. One pipeline.
The two universal preprocessing models load exactly once. Every additional [[wakeword]] block adds one classifier evaluation per 80 ms — not a duplicate audio thread, not a duplicate ONNX session. Cost scales with unique model files, not detector instances.
Talks the protocols you already speak.
On the desktop: a typed xyz.horchd.Daemon1.Detected signal on the session bus — anything that speaks D-Bus subscribes. For Home Assistant: an embedded Wyoming-protocol server, mDNS-announced as _wyoming._tcp.local., drop-in for wyoming-openwakeword. No HTTP listener, no custom port, no auth to invent.