Offline Wayland Rust No account

Speak. It appears.

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+Spacevoxtray toggle

workspace 2 — nvim · notes.md

Runs where you live.

Hyprland Sway Niri river KDE Plasma GNOME *

* clipboard fallback where virtual-keyboard injection is limited

the problem.

Dictation on Linux is stuck between two bad options

option 1

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.

option 2

The X11 relic

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.

the loop.

Three steps. No account.

From hotkey to text in the focused window — without leaving your desktop or your machine.

01

Press your hotkey

Or click the tray icon. Toggle or push-to-talk — bind it in your compositor the way you like.

02

Speak naturally

Audio is captured locally over PipeWire. Whisper runs on your CPU. Nothing is uploaded.

03

Text lands at the cursor

Injected into the focused app via wtype, ydotool, or clipboard fallback when needed.

why voxtray.

Built for the desktop you already use

Not a web app in a tray costume. A native Linux tool that respects tiling workflows and privacy.

Tray-native

Always available, never another window to manage. Four clear states: idle, recording, processing, error.

Wayland-first

Designed for modern compositors and tiling window managers — Hyprland, Sway, Niri, and friends.

Local Whisper

Transcription runs on your CPU with tiny or base models. No cloud round-trip, no API key.

Injection that tries hard

wtype → ydotool → clipboard. Text still reaches you when virtual keyboards are limited.

Open and inspectable

Pure Rust codebase you can read, build, and audit. No black-box binary with hidden telemetry.

History & settings

Search past transcripts, re-inject, and tune mic, model, and injection preference in a quiet iced UI.

on your machine.

Your voice stays home.

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.

🎤
Mic
CPU
Whisper, local
Cursor
Cloud

everything under ~/.local/share/voxtray/ & ~/.config/voxtray/

the surfaces.

Quiet when idle. Clear when you need it.

Configure once. Dictate anywhere. The UI stays out of the way until you open it.

Tray states

Idle — ready
Recording
Processing
Error — recoverable

Settings

Default · PipeWire
base
wtype → ydotool → clipboard

History

deploy pipeline is green 14:02
schedule the retro for Thursday 13:41
thanks, shipping the patch now 11:18
get it.

Install

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.

cargo install voxtray AUR Build from source
questions.

Before you ask

Does my audio ever leave the machine?

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.

Which compositors are supported?

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.

Do I need special permissions?

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.

How do hotkeys work on Wayland?

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.

Which Whisper models can I use?

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.

Is it really open source?

Yes — pure Rust, licensed MIT OR Apache-2.0. Read it, build it, audit it, patch it.

Stop typing the same sentences.

Install VoxTray, bind a key, and speak into the window you already have open.