Offline speech to text for Linux. Local voice dictation with Whisper — no cloud, no account, no subscription.
Hold Right Ctrl and speak. Your words are typed straight into whatever app you're using — editor, browser, terminal. Everything runs on your own machine, so your voice never leaves your computer.
Tested on a ThinkPad T16 Gen 4 (AMD) with a Radeon graphics chip, on Fedora 44 with KDE. It uses whisper.cpp and the distil-medium.en speech model.
- A Linux desktop with PipeWire audio (most modern ones have it)
- Rust,
git,cmake, and a C++ compiler - Vulkan drivers plus
glslc— on Fedora:sudo dnf install vulkan-loader-devel glslc gcc-c++ - ydotool and
wl-clipboard(so Cadence can type for you)
git clone https://github.com/oisinmcgrath/cadence.git
cd cadence
./desktop/install.shThe script builds Cadence, builds whisper.cpp
with Vulkan support, downloads the speech model (~795 MB), starts the speech
server, adds a menu entry, and sets up the two permissions Cadence needs. It
asks for sudo only for those permissions, and it's safe to run again — every
step it has already done is skipped.
If you'd rather run the root steps yourself, use ./desktop/install.sh --no-sudo
and it will print them instead of running them.
Log out and back in afterwards, then launch Cadence from your application menu. Click into a text box, hold Right Ctrl, speak, then let go.
Cadence needs these, and the installer sets both up:
/dev/uinput— so it can type into other apps. Granted with auaccessudev rule, which hands the device to whoever is logged in at the screen rather than opening it up to everyone.- The
inputgroup — so it can tell when you're holding Right Ctrl. This one is broader than we'd like: it lets Cadence read all keyboard events. See Privacy and safety.
Group membership doesn't reach programs that are already running, so a terminal
left open through the logout still won't see it. Check with id -nG | grep input.
These are environment variables you can set if you need to change defaults:
| Setting | What it does |
|---|---|
CADENCE_STT_URL |
Which speech server to use (default: local whisper.cpp) |
CADENCE_CHUNK_SECS |
How often text appears while you hold the key (default: 3.5 seconds) |
CADENCE_MIC |
Which microphone to use |
CADENCE_BIN |
Where the Cadence program is |
Your voice never leaves your computer. The speech server runs locally, Cadence sends nothing online, and there's no tracking of any kind.
Worth knowing: to detect the Right Ctrl hold, Cadence reads from /dev/input,
which means it can see every key you press — not just the one it's waiting for.
Linux has no way to grant access to a single key. Cadence only ever looks for
Right Ctrl and does nothing with the rest, and the code is right here in
src/hold_to_talk_over_evdev.rs if you want to
check that for yourself.
The typing side is tighter: the ydotoold daemon runs privately, only while
Cadence is running, and the kernel kills it the moment Cadence exits.
© 2024–2026 Oisin McGrath — free under GPL version 2.
Speech models and whisper.cpp have their own licenses.
Project page · Privacy · Terms