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. Anything that speaks the
session bus can subscribe.
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.
Speaks D-Bus, not a custom port.
Every Linux desktop already runs a session bus. horchd registers xyz.horchd.Daemon1 there, broadcasts a typed Detected signal, and lets anything subscribe — Home Assistant bridges, shell scripts, the bundled horchctl monitor, the tray app. No HTTP listener, no auth to invent, no protocol to maintain.