A free, offline, private AI text-to-speech for your desktop
Highlight text in any app, press a shortcut
Hear it read aloud instantly, privately, on your device
Supports 9 languages:
English (US & UK) Β· Spanish Β· French Β· Hindi Β· Italian Β· Japanese Β· Portuguese (Brazilian) Β· Chinese (Mandarin)
Parrot reads your selected text aloud using a small text-to-speech model that runs entirely on your device. Your text never leaves your machine: no cloud, no accounts, no internet required after the initial model download.
The backend is written in Rust, keeping the app fast, lightweight, and resource-efficient. The model itself is only ~115 MB and runs on any modern CPU with no GPU required.
- Select text in any application
- Press the shortcut (default:
Option+Spaceon macOS,Ctrl+Spaceon Windows/Linux) - A small overlay appears while Parrot synthesizes and plays the audio
- Press
Option+Pto pause/resume (all shortcuts are customizable)
π Here's how it sounds: sample
Download the latest stable version for macOS, Windows, and Linux from the Parrot website.
On first launch, Parrot prompts you to download the TTS model (~115 MB). Once downloaded, the app works completely offline.
- Private by design: your text is processed locally and never sent anywhere
- Lightweight: ~115 MB model, minimal memory footprint, Rust-powered backend
- Works in any app: reads selected text from browsers, editors, PDFs, terminals, anywhere
- Streaming playback: audio starts playing before the full text has been synthesized
- Free forever: no subscription, no API key, no account required
- Pause & resume: pause and resume playback mid-sentence with a keyboard shortcut
- Floating overlay: a lightweight indicator shows speaking status with pause controls
Parrot ships with Kokoro-82M, a compact neural TTS model that delivers natural-sounding speech at ~115 MB, small enough to download once and forget, efficient enough to run on any modern CPU without a GPU.
Kokoro supports 54 voices across 9 languages. The voice is selected automatically based on your language setting, or choose one manually in Settings β General.
| Language | Female Voices | Male Voices |
|---|---|---|
| English (US) | Alloy, Aoede, Bella, Heart, Jessica, Kore, Nicole, Nova, River, Sarah, Sky | Adam, Echo, Eric, Fenrir, Liam, Michael, Onyx, Puck, Santa |
| English (UK) | Alice, Emma, Isabella, Lily | Daniel, Fable, George, Lewis |
| Spanish | Dora | Alex, Santa |
| French | Siwis | - |
| Hindi | Alpha, Beta | Omega, Psi |
| Italian | Sara | Nicola |
| Japanese | Alpha, Gongitsune, Nezumi, Tebukuro | Kumo |
| Portuguese (Brazilian) | Dora | Alex, Santa |
| Chinese (Mandarin) | Xiaobei, Xiaoni, Xiaoxiao, Xiaoyi | Yunjian, Yunxi, Yunxia, Yunyang |
All shortcuts are fully customizable in Settings β General.
| Action | macOS | Windows / Linux |
|---|---|---|
| Speak selected text | Option+Space |
Ctrl+Space |
| Pause / resume playback | Option+P |
Alt+P |
| Open settings | Cmd+, |
Ctrl+, |
| Open debug panel | Cmd+Shift+D |
Ctrl+Shift+D |
The pause/resume shortcut is only active while Parrot is playing. It can be customized or disabled in Settings β General.
| Category | Options |
|---|---|
| General | Shortcuts, TTS language, voice, output device, audio feedback |
| Models | Download, switch, and delete TTS models |
| Advanced β App | Start hidden, autostart, tray icon, overlay position, model unload timeout |
| Advanced β Speech | Worker threads, playback speed, fast first response |
| Advanced β History | Entry limit, auto-delete period |
| History | Browse, replay, copy, and delete past utterances |
| Debug | Log level, keyboard implementation, diagnostics |
Parrot supports CLI flags for scripting and window manager integration. Remote control flags are delivered to the already-running instance; you do not need to keep a second instance running.
parrot [FLAGS]
| Flag | Description |
|---|---|
--toggle-transcription |
Toggle TTS on/off in the running instance |
--start-hidden |
Launch without showing the main window |
--no-tray |
Launch without a tray icon (closing the window quits) |
--debug |
Enable verbose trace logging |
Example: bind to a window manager shortcut:
parrot --toggle-transcriptionmacOS: When using the app bundle, invoke the binary directly:
/Applications/Parrot.app/Contents/MacOS/Parrot --toggle-transcription
For reliable text pasting on Linux, install the appropriate tool for your display server:
| Display Server | Recommended | Install |
|---|---|---|
| X11 | xdotool |
sudo apt install xdotool |
| Wayland | wtype |
sudo apt install wtype |
| Both | dotool |
sudo apt install dotool |
dotool requires adding your user to the input group: sudo usermod -aG input $USER (log out and back in after).
Parrot's built-in global shortcut capture has limited support on Wayland. The recommended approach is to configure your desktop environment or window manager to invoke the CLI flag instead.
GNOME:
- Open Settings > Keyboard > Keyboard Shortcuts > Custom Shortcuts
- Add a new shortcut with the command
parrot --toggle-transcription
KDE Plasma:
- Open System Settings > Shortcuts > Custom Shortcuts
- Create a new Command/URL shortcut with
parrot --toggle-transcription
Sway / i3:
bindsym $mod+o exec parrot --toggle-transcriptionHyprland:
bind = $mainMod, O, exec, parrot --toggle-transcriptionYou can also send signals directly to the Parrot process, useful for hotkey daemons that manage their own keybindings:
| Signal | Action |
|---|---|
SIGUSR1 |
Toggle TTS |
SIGUSR2 |
Toggle TTS |
pkill -USR2 -n parrot # toggle TTS-
The speaking overlay is disabled by default on Linux (
Overlay Position: None) because some compositors treat it as the active window and steal focus. -
If the app fails to start, try setting
WEBKIT_DISABLE_DMABUF_RENDERER=1. -
If you see
error while loading shared libraries: libgtk-layer-shell.so.0, install the runtime package:Distro Package Command Ubuntu/Debian libgtk-layer-shell0sudo apt install libgtk-layer-shell0Fedora/RHEL gtk-layer-shellsudo dnf install gtk-layer-shellArch gtk-layer-shellsudo pacman -S gtk-layer-shell
Prerequisites: Rust (latest stable), Bun
# Clone the repository
git clone https://github.com/rishiskhare/parrot
cd parrot
# Install frontend dependencies
bun install
# Run in development mode
bun run tauri dev
# Build a release binary
bun run tauri buildOn macOS, if you hit a CMake error:
CMAKE_POLICY_VERSION_MINIMUM=3.5 bun run tauri dev
Parrot is built with Tauri 2, a Rust backend with a React/TypeScript frontend. The entire synthesis and audio pipeline runs in Rust, which keeps CPU and memory usage low even during continuous playback.
src-tauri/src/
βββ managers/
β βββ tts.rs # Streaming TTS synthesis and audio playback
β βββ model.rs # Model download, extraction, and lifecycle
β βββ history.rs # Utterance storage and retention
βββ audio_toolkit/ # Audio device enumeration and resampling
βββ commands/ # Tauri IPC handlers (frontend β backend)
βββ settings.rs # Persistent settings with serde
βββ shortcut/ # Global hotkey capture (Tauri + HandyKeys backends)
βββ overlay.rs # Floating speaking indicator window
src/
βββ components/settings/ # Settings UI (35+ components)
βββ overlay/ # Speaking overlay window
βββ stores/settingsStore.ts # Zustand state management
Key dependencies: tts-rs (Kokoro TTS), rodio (audio playback), cpal (audio devices), tauri-specta (type-safe IPC)
Parrot is a fork of Handy by CJ Pais, released under the MIT License. The original project provided the Tauri architecture, audio pipeline, and UI foundation that made Parrot possible.
TTS synthesis is powered by Kokoro-82M via tts-rs.
MIT. See LICENSE for full text.
Parrot is a derivative work of Handy (Β© 2025 CJ Pais). Both are distributed under the MIT License.