A free, open source, and extensible speech-to-text application that works completely offline.
Handy is a cross-platform desktop application that provides simple, privacy-focused speech transcription. Press a shortcut, speak, and have your words appear in any text field. This happens on your own computer without sending any information to the cloud.
Handy supports command-line flags for controlling a running instance and customizing startup behavior. These work on all platforms (macOS, Windows, Linux).
Remote control flags (sent to an already-running instance via the single-instance plugin):
Handy links gtk-layer-shell on Linux. If startup fails with error while loading shared libraries: libgtk-layer-shell.so.0, install the runtime package for your distro:
Distro
Package to install
Example command
Ubuntu/Debian
libgtk-layer-shell0
sudo apt install libgtk-layer-shell0
Fedora/RHEL
gtk-layer-shell
sudo dnf install gtk-layer-shell
Arch Linux
gtk-layer-shell
sudo pacman -S gtk-layer-shell
For building from source on Ubuntu/Debian, you may also need libgtk-layer-shell-dev.
The recording overlay is disabled by default on Linux (Overlay Position: None) because certain compositors treat it as the active window. When the overlay is visible it can steal focus, which prevents Handy from pasting back into the application that triggered transcription. If you enable the overlay anyway, be aware that clipboard-based pasting might fail or end up in the wrong window.
If you are having trouble with the app, running with the environment variable WEBKIT_DISABLE_DMABUF_RENDERER=1 may help
If Handy fails to start reliably on Linux, see [Troubleshooting → Linux Startup Crashes or Instability]!(#linux-startup-crashes-or-instability).
Global keyboard shortcuts (Wayland): On Wayland, system-level shortcuts must be configured through your desktop environment or window manager. Use the [CLI flags]!(#cli-parameters) as the command for your custom shortcut.
GNOME:
Open Settings > Keyboard > Keyboard Shortcuts > Custom Shortcuts
Click the + button to add a new shortcut
Set the Name to Toggle Handy Transcription
Set the Command to handy --toggle-transcription
Click Set Shortcut and press your desired key combination (e.g., Super+O)
KDE Plasma:
Open System Settings > Shortcuts > Custom Shortcuts
Click Edit > New > Global Shortcut > Command/URL
Name it Toggle Handy Transcription
In the Trigger tab, set your desired key combination
In the Action tab, set the command to handy --toggle-transcription
Sway / i3:
Add to your config file (~/.config/sway/config or ~/.config/i3/config):
bindsym $mod+o exec handy --toggle-transcription
Hyprland:
Add to your config file (~/.config/hypr/hyprland.conf):
bind = $mainMod, O, exec, handy --toggle-transcription
You can also manage global shortcuts outside of Handy via Unix signals, which lets Wayland window managers or other hotkey daemons keep ownership of keybindings:
Signal
Action
Example
SIGUSR2
Toggle transcription
pkill -USR2 -n handy
SIGUSR1
Toggle transcription with post-processing
pkill -USR1 -n handy
Example Sway config:
bindsym $mod+o exec pkill -USR2 -n handy
bindsym $mod+p exec pkill -USR1 -n handy
pkill here simply delivers the signal—it does not terminate the process.
Overlay & Pasting Issues (Linux):
The recording overlay window can interfere with pasting transcribed text into target applications on Linux (X11)
Solution: Open Settings > Advanced and set “Overlay Position” to “None” to disable the overlay
Enable “Audio Feedback” (also in Advanced) if you still want audible confirmation of recording state
Users who upgrade from older versions or import settings from other platforms may need to manually apply this change
The following are recommendations for running Handy on your own machine. If you don’t meet the system requirements, the performance of the application may be degraded. We are working on improving the performance across all kinds of computers and hardware.
For Whisper Models:
macOS: M series Mac, Intel Mac
Windows: Intel, AMD, or NVIDIA GPU
Linux: Intel, AMD, or NVIDIA GPU
Ubuntu 22.04, 24.04
For Parakeet V3 Model:
CPU-only operation - runs on a wide variety of hardware
Minimum: Intel Skylake (6th gen) or equivalent AMD processors
Performance: ~5x real-time speed on mid-range hardware (tested on i5)
Automatic language detection - no manual language selection required
Handy release artifacts are signed with Tauri’s updater signature format. The public key is stored in [src-tauri/tauri.conf.json]!(src-tauri/tauri.conf.json) under plugins.updater.pubkey.
To verify a release manually, set ARTIFACT to the filename you downloaded, save the pubkey value from src-tauri/tauri.conf.json to handy.pub.b64, then decode the public key and matching .sig file from base64 and verify the artifact with minisign:
If you’re behind a proxy, firewall, or in a restricted network environment where Handy cannot download models automatically, you can manually download and install them. The URLs are publicly accessible from any browser.
Handy can auto-discover custom Whisper GGML models placed in the models directory. This is useful for users who want to use fine-tuned or community models not included in the default model list.
How to use:
Obtain a Whisper model in GGML .bin format (e.g., from Hugging Face)
Place the .bin file in your models directory (see paths above)
Restart Handy to discover the new model
The model will appear in the “Custom Models” section of the Models settings page
Important:
Community models are user-provided and may not receive troubleshooting assistance
The model must be a valid Whisper GGML format (.bin file)
Model name is derived from the filename (e.g., my-custom-model.bin → “My Custom Model”)
If Handy fails to start reliably on Linux — for example, it crashes shortly after launch, never shows its window, or reports a Wayland protocol error — try the steps below in order.
1. Install (or reinstall) gtk-layer-shell
Handy uses gtk-layer-shell for its recording overlay and links against it at runtime. A missing or broken installation is the most common cause of startup failures and can manifest as a crash or a hang well before any window is shown. Make sure the runtime package is installed for your distro:
Distro
Package to install
Example command
Ubuntu/Debian
libgtk-layer-shell0
sudo apt install libgtk-layer-shell0
Fedora/RHEL
gtk-layer-shell
sudo dnf install gtk-layer-shell
Arch Linux
gtk-layer-shell
sudo pacman -S gtk-layer-shell
If it is already installed and you still see startup problems, try reinstalling it (e.g. sudo pacman -S gtk-layer-shell again) in case the library files were corrupted by a partial upgrade.
2. Disable the GTK layer shell overlay (HANDY_NO_GTK_LAYER_SHELL)
If installing the library does not help, you can skip gtk-layer-shell initialization entirely as a workaround. On some compositors (notably KDE Plasma under Wayland) it has been reported to interact poorly with the recording overlay. With this variable set, the overlay falls back to a regular always-on-top window:
On some GPU/driver combinations the WebKitGTK DMA-BUF renderer can cause the window to fail to render or to crash. Try:
Terminal window
WEBKIT_DISABLE_DMABUF_RENDERER=1handy
Making a workaround permanent
Once you’ve found a flag that helps, export it from your shell profile (~/.bashrc, ~/.zshenv, …) or from the desktop autostart entry that launches Handy. If you launch Handy from a .desktop file, you can prefix the Exec= line, e.g.:
Exec=env HANDY_NO_GTK_LAYER_SHELL=1 handy
If a workaround helps you, please open an issue describing your distro, desktop environment, and session type — that information helps us narrow down the underlying bug.