# cjpais/Handy: an offline Whisper and Parakeet transcription app you can fork

> Handy is a Tauri desktop app that turns a keyboard shortcut into transcribed text in any field, running Whisper or Parakeet models locally. It is deliberately small and forkable, and the README is unusually candid about where it breaks.

**cjpais/Handy** — Project brief: A free, open source, and extensible speech-to-text application that works completely offline.

- Repository: https://github.com/cjpais/Handy
- Website: https://handy.computer
- Stars: 32,480 · Forks: 3,002
- Language: Rust
- License: MIT
- Published: 2026-08-08 · Updated: 2026-08-18 · Language: en
- Canonical page: https://hysenlabs.com/projects/cjpais-handy

## What Handy actually solves, and for whom

Most dictation tools either charge a subscription or ship your microphone audio to a server. Handy takes the opposite position: the README says transcription happens "on your own computer without sending any information to the cloud." That single constraint decides the design. Models run locally, so the app carries the cost of downloading weights and the cost of inference on your own CPU or GPU.

The intended user is someone who types into many different applications and wants one shortcut that works everywhere. Press a configurable shortcut, speak, release, and the text is pasted into whatever field has focus. There is no per-app integration to configure and no browser extension. The README frames the project's ambition narrowly: Handy "isn't trying to be the best speech-to-text app, it's trying to be the most forkable one." That is a real design commitment, not marketing. The architecture is split into replaceable Rust crates, and the licence is MIT, so a team can take the transcription pipeline and drop it into its own product.

It is not aimed at meeting transcription, speaker diarisation, or long-form audio files. It is a keyboard-level input method.

## The pipeline: VAD, then Whisper or Parakeet, then a paste

The README describes a four-step loop: press the shortcut to start or stop recording (or use push-to-talk), speak, release, and Handy processes the audio with Whisper before pasting the transcript into the active text field.

Two stages sit between the microphone and the text. First, silence is filtered using VAD with Silero, so quiet stretches never reach the model. Second, the remaining audio goes to whichever model you selected. Whisper models are offered in Small, Medium, Turbo and Large variants and use GPU acceleration when available. Parakeet V3 is described as a CPU-optimized model with automatic language detection. Choosing between them is a trade-off between accuracy, latency and whether your machine has a usable GPU.

The application itself is a Tauri app: a React and TypeScript frontend with Tailwind CSS for the settings UI, and a Rust backend for system integration, audio processing and inference. The core crates named in the README are transcribe-cpp for Whisper-family GGML/GGUF models, transcribe-rs for Parakeet, cpal for cross-platform audio I/O, vad-rs for voice activity detection, rdev for global shortcuts and system events, and rubato for audio resampling. That list is the useful part of the architecture section: each concern is a separate dependency you can swap.

## Installing Handy and dictating your first sentence

The README points to the releases page and to handy.computer for downloads. On macOS there is a Homebrew cask, and on Windows a winget package. Both are flagged in the README as not maintained by the Handy developers, which matters if you hit a packaging bug.

```bash
brew install --cask handy
```

```bash
winget install cjpais.Handy
```

After installing, launch the app and grant the permissions it asks for. The README lists microphone and accessibility. Accessibility access is what allows the app to insert text into other applications, so dictation will appear to do nothing without it. Then open Settings and set your preferred keyboard shortcut.

The application also accepts command-line flags, which are sent to an already-running instance through the single-instance plugin. That means you can trigger recording from a script or a launcher rather than from the keyboard.

```bash
handy --toggle-transcription
```

For autostart scenarios the README shows combining startup flags, for example `handy --start-hidden --no-tray`. On macOS, when Handy is installed as an app bundle, the README says to invoke the binary directly:

```bash
/Applications/Handy.app/Contents/MacOS/Handy --toggle-transcription
```

There is also a debug mode, opened with Cmd+Shift+D on macOS and Ctrl+Shift+D on Windows and Linux, which the README describes as being for development and troubleshooting.

## Known limitations the README states plainly

The project publishes its own failure modes, which is rarer than it should be. The most serious is that Whisper models crash on certain system configurations on Windows and Linux. The README says the issue is configuration-dependent and does not affect all systems, and asks developers who hit it to provide debug logs. There is no documented workaround.

Two macOS quirks are hardware-level rather than fixable. A Bluetooth headset microphone may temporarily reduce playback quality or volume while recording, because Bluetooth switches to bidirectional audio; the README suggests keeping the headphones as output and selecting the Mac's built-in or an external microphone inside Handy. Separately, shortcuts containing the fn or Globe key only work on Apple keyboards. The README explains why: fn is not part of the standard USB HID keyboard specification, Apple reports it through a vendor-specific usage that macOS honours only from Apple devices, and third-party keyboards handle the key in firmware without sending anything to the computer. If you move between a MacBook keyboard and an external one, pick a shortcut built from standard modifiers instead.

On Linux, Wayland support is described as limited. Text input requires wtype or dotool to be installed, and the README's Linux table recommends xdotool on X11. If you are on Wayland and have not installed either tool, transcription may run but the text will not appear.

## How Handy differs from cloud dictation and from building your own

The obvious alternative is a cloud transcription service, or an operating system feature such as the dictation built into macOS and Windows. Those require no model download and no GPU, and they generally handle more languages and accents out of the box. The difference is where the audio goes. Handy's whole premise is that it does not leave the machine, which matters if you dictate client notes, medical text or anything covered by a policy that forbids third-party processing. The cost is that you supply the compute, and the model you pick determines how good the result is.

The other alternative is writing the pipeline yourself. Handy's own crates are the reason that is now less attractive: transcribe-cpp, transcribe-rs, vad-rs, cpal and rubato are the pieces you would otherwise assemble and debug. Taking the app as a starting point and modifying it is the path the README invites.

One integration exists as a separate project rather than in-tree. A Raycast extension by @mattiacolombomc can start and stop recording, browse transcript history, manage the dictionary, and switch models and languages. Its source lives in a different repository, so its release cycle is not Handy's.

## Maintenance, licence and what upgrading involves

The last push to the main branch was on 2026-08-24, and the most recent release, v0.9.6, carries the same date. Version 0.9.5 landed on 2026-08-08 and v0.9.4 on 2026-07-21, so releases have been arriving at roughly monthly intervals. The repository is not archived. The README still describes the project as actively being developed and links to its known issues, which means you should expect the crash reports to remain open for a while.

The licence is MIT, which permits commercial use, modification and redistribution provided the copyright notice and permission notice are included. That is what makes the forkable claim credible. It also means the Homebrew cask and winget package are third-party redistributions: if one of them lags behind or breaks, the fix comes from their maintainers, not from this repository.

Upgrade cost is mostly model management. Because Whisper variants and Parakeet are separate downloads, moving between them changes disk usage and memory pressure rather than the application binary. The Tauri updater plugin appears in package.json, so in-app updates are part of the build, but the README does not document a rollback path if a new version regresses on your machine.

## Conclusion

Adopt Handy if you want a shortcut-driven dictation tool that never sends audio off the machine and you are willing to work around platform quirks: on Wayland install wtype or dotool, and on macOS avoid fn-based shortcuts unless you only use Apple keyboards. Do not adopt it if you need a supported, guaranteed-stable transcription engine, since the README itself lists Whisper crashes on some Windows and Linux configurations and asks for debug logs. Before installing, check the releases page for your platform's asset and read BUILD.md if you intend to build from source.

## FAQ

### How do I install Handy on macOS or Windows?

Download the latest release from the releases page or handy.computer. macOS also has a Homebrew cask (brew install --cask handy) and Windows has a winget package (winget install cjpais.Handy), though the README notes both are not maintained by the Handy developers.

### Does Handy send my audio to the cloud?

No. The README states the process is entirely local: silence is filtered with Silero VAD and transcription runs on your own machine using Whisper or Parakeet models, with no audio sent to a server.

### Why does text input not work on Linux with Wayland?

The README describes Wayland support as limited and says text input requires wtype or dotool to be installed. On X11 it recommends xdotool instead.

## Sources

- [Official documentation](https://handy.computer)
- [Official README](https://github.com/cjpais/Handy#readme)
- [Project repository](https://github.com/cjpais/Handy)
- [Release notes](https://github.com/cjpais/Handy/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/cjpais-handy
