What is Handy?
Handy is a free, open source speech-to-text application that works completely offline. It waits in the background with a tray icon; press a global keyboard shortcut, say what you want to write, and Handy transcribes it on your own machine and pastes the text into whatever window has focus: an editor, a terminal, a chat client, a browser form. Nothing is sent to a cloud service. The speech models (OpenAI's Whisper in several sizes, and NVIDIA's Parakeet, which is fast on a plain CPU) are downloaded once from inside the app and then run locally, with voice activity detection trimming the silence before the model hears it. It is a Tauri application written in Rust by CJ Pais, MIT licensed, and it works on both X11 and Wayland desktops.
apt upgrade does it, on every machine you dictate on.
⚡ Key Features of Handy
⌨️ One Shortcut, Any App
Press the global shortcut, speak, press it again (or hold it in push-to-talk mode and let go) and the transcription is pasted into the focused window. There is no special box to dictate into; anything that accepts typing accepts Handy.
🔒 Completely Offline
Audio is recorded, transcribed and thrown away on your own computer. No account, no API key, no subscription, and no network once a model is on disk.
🧠 Whisper and Parakeet
Pick the model that suits the hardware: Whisper Small, Medium, Turbo or Large, GPU accelerated where a GPU is available, or Parakeet, tuned to run quickly on the CPU and able to detect the language by itself.
🔇 Voice Activity Detection
Silero VAD filters out silence and background noise before the audio reaches the model, so the pauses while you think do not turn into stray words.
🐧 X11 and Wayland
Works on both display servers, typing the result into the focused application through small input helpers the package pulls in: xdotool on X11, wtype and wl-clipboard on Wayland, and ydotool for GNOME.
🧩 Open and Extensible
MIT licensed and built to be forked: the Rust backend and the web interface are small enough to read, and the settings cover the microphone, the shortcut, the model and the language.
apt upgrade keeps you on the latest version.
📦 Installation from deb.griffo.io
Step 1: Add Repository
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(. /etc/os-release; echo ${DEBIAN_CODENAME:-${UBUNTU_CODENAME:-$VERSION_CODENAME}}) main" | sudo tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
sudo apt updateinstall -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(. /etc/os-release; echo ${DEBIAN_CODENAME:-${UBUNTU_CODENAME:-$VERSION_CODENAME}}) main" | tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
apt updatesudo apt install extrepo
sudo extrepo enable griffo
sudo apt update🆓 There is an always-free mirror. deb-free.griffo.io serves packages free forever, no account, no subscription, at most 2 months behind upstream, security fixes immediately. It currently carries cliamp, Ghostty, lazydocker, Oh My Posh, Uncloud and Zed; Handy is not one of them, so the repository above is the only way to get it today, ask and it can be enrolled.
🧩 About the extrepo option. extrepo is Debian's own tool for external repositories: it writes the sources file and installs the signing key for you, checking the key against signed metadata first. This repository is registered with it as griffo, and the always-free mirror as griffo-free, so on Debian (bookworm, trixie, forky and sid) the commands above are the whole setup.
extrepo sets up the sources file and the key only, so a subscription's credentials still go in /etc/apt/auth.conf.d/deb.griffo.io.conf. Ubuntu is not covered, because extrepo publishes metadata for Debian suites only: there, use the sudo or root commands.
Step 2: Install Handy
# Install latest Handy
sudo apt install handy
# Verify installation
dpkg -s handy | grep Version# Install latest Handy
apt install handy
# Verify installation
dpkg -s handy | grep VersionStep 3: First run
# Start Handy from your application menu, or from a terminal
handy
# The first run walks you through choosing a model; it is downloaded
# once, and every transcription after that runs offline on this machine
# The helpers that type the text (xdotool, wtype, wl-clipboard) came
# with the package. GNOME on Wayland needs ydotool and its daemon instead;
# check that it is installed (it is recommended, where the suite has it)
apt policy ydotool🎯 Basic Usage Examples
Dictating:
# 1. Put the cursor where the text should go: an editor, a terminal, a chat box
# 2. Press the shortcut set in Handy's settings and speak
# 3. Press it again (or let go of it in push-to-talk mode)
# The transcription is pasted where the cursor was
# Handy keeps running in the tray; start it again if you closed it
handyChoosing the microphone:
# List the capture devices the kernel sees
arecord -l
# The input names PipeWire or PulseAudio show in Handy's settings
pactl list short sources
# Check the level of the default input before blaming the model
arecord -d 5 /tmp/test.wav && aplay /tmp/test.wavKeeping it current:
# Handy updates with the rest of the system
sudo apt update && sudo apt upgrade
# Which version is installed, and which is the newest available
apt policy handy
# Remove it again
sudo apt remove handy# Handy updates with the rest of the system
apt update && apt upgrade
# Which version is installed, and which is the newest available
apt policy handy
# Remove it again
apt remove handy🔧 Tool Integrations
Handy needs no integration with anything: if an application accepts typed text, it accepts dictation. What matters is the desktop around it:
- X11:
xdotoolis a dependency of the package, so text reaches the focused window with nothing extra to install - Wayland:
wtypeandwl-clipboardcome with the package too. Some compositors do not hand global shortcuts to applications; if the shortcut does nothing on yours, check the compositor's keyboard settings - GNOME on Wayland: GNOME, the default on Ubuntu 26.04, does not accept
wtype, so Handy needsydotoolwith its daemon running there. The package recommendsydotoolon the suites that ship it (Debian trixie does not); the Linux notes in Handy's README cover starting the daemon - dotool: Handy can use it too, but it is in no Debian or Ubuntu archive: install it yourself and add your user to the
inputgroup - Audio: Handy records through PipeWire or PulseAudio like any desktop app; pick the input device in its settings, and a headset microphone beats a laptop's built-in one for accuracy
- Hardware: the Whisper models use the GPU when one is available and get slow on a CPU at the larger sizes; on a laptop without a capable GPU, Parakeet is the fast choice
- Your tools: dictate commit messages in a terminal such as kitty or Ghostty, prose in Zed, replies in ZapZap or a browser, and prompts for an AI assistant, all with the same shortcut
🚀 Why Choose deb.griffo.io?
- Official Debian: does not package Handy,
apt install handyfails on a stock system - Upstream downloads: a
.debor AppImage from the GitHub releases page, current on the day you fetch it, and fetched again by hand for every release after that - Building from source: a Rust toolchain, a JavaScript toolchain for the interface, the WebKitGTK and audio development packages Tauri needs, and a long compile
- deb.griffo.io: latest version with automatic updates
- ✅ The Only apt Source: Handy is in neither the Debian nor the Ubuntu archives; this repository packages the official upstream release
- ✅ One Name Everywhere: the package is
handyand so is the command:sudo apt install handy, thenhandyor the launcher entry - ✅ Private by Construction: the package ships the application, not a model or a service; your voice never leaves the machine, and the network is used only to download the model you pick
- ✅ Complete Package: the official upstream Linux build (binary, bundled libraries, desktop entry, icons) with its dependencies declared so it installs on every supported suite, the text-input helpers pulled in, and only the launcher's empty menu category filled in
- ✅ Automatic Updates: packages updated within hours of upstream releases
- ✅ Two Architectures: amd64 on Bookworm, Trixie, Forky and Sid; arm64 on Trixie, Forky and Sid only, because upstream builds arm64 against glibc 2.39 and Bookworm has 2.36; there is no i386, armhf or riscv64 build
- ✅ Multi-Distribution: works on Bookworm, Trixie, Forky and Sid
- ✅ Easy Maintenance: standard apt commands for updates
📦 Package Build Repository
The Debian packages are automatically built and maintained in this GitHub repository:
- 🎙️ handy-debian - Latest release builds
🔗 Related Packages
Also available from deb.griffo.io:
- Zed - A fast GUI code editor to dictate into
- ZapZap - A WhatsApp desktop client, for the replies you would rather say than type
- GPU Screen Recorder - Another X11 and Wayland desktop tool, for recording the screen
- kitty - A GPU terminal where dictated commit messages land just as well
- Ghostty - A native GTK terminal, same story
💝 Support This Project
If this repository saves you time and effort, please consider supporting it!