I Built a Headless Speech-to-Text Tool in Rust — Meet Voicr
Most speech-to-text tools assume you want a GUI. A tray icon, a settings panel, a splash screen. I didn't.

Most speech-to-text tools assume you want a GUI. A tray icon. A settings panel. I didn't. I wanted something that runs in the background, takes commands from a socket, and types out whatever I just said. No window. No Electron. Just a binary.
That's Voicr.
What It Actually Does
Voicr is a terminal-first STT tool written entirely in Rust. You run it as a daemon, send it commands over a Unix socket, and it transcribes your mic input. Or you skip the daemon entirely and do one-shot transcriptions:
voicr transcribe --auto-stop
That's it. Records until silence, prints the text, exits.
The daemon mode is where it gets useful. Start it once:
voicr daemon &
Then toggle recording from anywhere:
voicr send toggle # start
voicr send toggle # stop + transcribe
I have this bound to Super+Space in my hotkey daemon. Press once to start, press again to get the text. That's the whole workflow.
Why Rust
Partly because I wanted the challenge. Mostly because I needed a single binary I could drop on any Linux machine without worrying about runtimes or virtual environments.
The audio handling and ML inference are built on top of transcribe-rs. I handled the daemon protocol, socket layer, history storage (SQLite), and the CLI on top of it.
Model Options
Voicr supports several models depending on what you need:
- Moonshine (31MB to 192MB) for fast, low-latency transcription
- Parakeet V3 (478MB) is the recommended starting point, good accuracy, fast enough
- SenseVoice (160MB) if you need multilingual support
- GigaAM v3 (225MB) for better accuracy at a reasonable size
- Whisper variants if you want the familiar option (requires Vulkan at build time)
You set your model once and forget it:
voicr model download parakeet-tdt-0.6b-v3
voicr config set model.selected parakeet-tdt-0.6b-v3
If you're on a machine with limited RAM, there's an unload_timeout setting that drops the model from memory after a few minutes of inactivity.
The Part I Use Every Day
The hotkey integration. With sxhkd on Linux:
super + space
echo '{"cmd":"toggle"}' | nc -U /tmp/voicr.sock
Pair that with xdotool to auto-type the transcription wherever your cursor is:
nc -U /tmp/voicr.sock | while IFS= read -r line; do
text=$(echo "$line" | jq -r 'select(.type=="transcription") | .text')
[ -n "$text" ] && xdotool type --clearmodifiers "$text"
done
Comments
Lovable Leaks Source Code: The $6.6B BOLA Vulnerability
An 8 million user platform ignored a critical BOLA vulnerability for 48 days. How a $6.6B AI app builder leaked source code, credentials, and user data.
Google Released Gemma 4 for Free. Here Is Why That Makes Sense.
Gemma 4 dropped April 2, 2026 under Apache 2.0 with full commercial rights. This is what the architecture actually does and what Google is really after.
Build a Full Stack App for Under $5 Per Month
Learn how to build and deploy a full stack app using Next.js Supabase Railway and Cloudflare for under $5 per month. Beginner friendly step by step guide.
Tagged