The cloud toll
Consumer dictation apps want an account, a subscription, and your audio on their servers. Great polish — until you read the privacy policy or lose the network.
Local voice dictation for Linux. Lives in your tray. Works on Wayland. Your words never leave the machine.
Built for Hyprland, Sway, and tiling workflows. Pure Rust. Offline by default.
Bind it your way — e.g. Super+Space → voxtray toggle
Runs where you live.
* clipboard fallback where virtual-keyboard injection is limited
Consumer dictation apps want an account, a subscription, and your audio on their servers. Great polish — until you read the privacy policy or lose the network.
The classic open-source tools lean on xdotool-era hacks that quietly break on Wayland compositors — or demand a full desktop environment you don't run.
VoxTray is the third option: a native Wayland tool that runs Whisper on your CPU, types where your cursor is, and asks for nothing but a microphone.
From hotkey to text in the focused window — without leaving your desktop or your machine.
Or click the tray icon. Toggle or push-to-talk — bind it in your compositor the way you like.
Audio is captured locally over PipeWire. Whisper runs on your CPU. Nothing is uploaded.
Injected into the focused app via wtype, ydotool, or clipboard fallback when needed.
Not a web app in a tray costume. A native Linux tool that respects tiling workflows and privacy.
Always available, never another window to manage. Four clear states: idle, recording, processing, error.
Designed for modern compositors and tiling window managers — Hyprland, Sway, Niri, and friends.
Transcription runs on your CPU with tiny or base models. No cloud round-trip, no API key.
wtype → ydotool → clipboard. Text still reaches you when virtual keyboards are limited.
Pure Rust codebase you can read, build, and audit. No black-box binary with hidden telemetry.
Search past transcripts, re-inject, and tune mic, model, and injection preference in a quiet iced UI.
No accounts. No telemetry by default. Models and history live under XDG paths on your disk. Optional network is only for downloading a model if you choose.
Privacy is not a mode — it is the default path from microphone to cursor.
everything under ~/.local/share/voxtray/ & ~/.config/voxtray/
Configure once. Dictate anywhere. The UI stays out of the way until you open it.
One path for most users. Alternatives for packagers and from-source builds.
Latest release
$ curl -sSL https://example.com/voxtray/install.sh | bash
Requires PipeWire (or Pulse) and preferably wtype or ydotool.
First run downloads a small Whisper model into your XDG data directory.
No. Capture, transcription, and history all happen locally. The only optional network call is downloading a Whisper model on first run — and you can place the model file yourself instead.
First-class: wlroots compositors — Hyprland, Sway, Niri, river — where wtype injection works over the virtual-keyboard protocol. KDE Plasma works via the fallback chain. On GNOME, text is delivered through the clipboard fallback because Mutter doesn't implement virtual-keyboard-v1.
Not for the preferred path. wtype is protocol-based and needs nothing extra. Only the ydotool fallback may require membership in the input group or a udev rule — documented in the README, never assumed.
You bind a key in your compositor to voxtray toggle — the most reliable mechanism on Wayland, and the one you already use for everything else in a tiling setup. Push-to-talk and toggle modes are both supported.
tiny and base ship as the defaults — fast enough for CPU-only inference on ordinary hardware. Larger models are selectable in Settings if you're willing to trade latency for accuracy. GPU acceleration is on the roadmap, not in the MVP.
Yes — pure Rust, licensed MIT OR Apache-2.0. Read it, build it, audit it, patch it.
Install VoxTray, bind a key, and speak into the window you already have open.