Parrot
A free, offline, private AI text-to-speech desktop app built on Rust ๐ฆ
Install / Use
/learn @rishiskhare/ParrotREADME
Parrot: AI Text-to-Speech
A free, offline, private AI text-to-speech for your desktop
Highlight text in any app, press a shortcut<br/> Hear it read aloud instantly, privately, on your device
Supports 9 languages:<br/> English (US & UK) ยท Spanish ยท French ยท Hindi ยท Italian ยท Japanese ยท Portuguese (Brazilian) ยท Chinese (Mandarin)
What is Parrot? ๐ฆ
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.
How It Works
- 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
Installation
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.
Features
- 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
Models
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.
Voices
| 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 |
Keyboard Shortcuts
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.
Settings Overview
| 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 |
Command-Line Interface
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-transcription
macOS: When using the app bundle, invoke the binary directly:
/Applications/Parrot.app/Contents/MacOS/Parrot --toggle-transcription
Linux Notes
Text Input Tools
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).
Global Shortcuts on Wayland
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-transcription
Hyprland:
bind = $mainMod, O, exec, parrot --toggle-transcription
Unix Signal Control
You 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
Other Linux Notes
-
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-shell0|sudo apt install libgtk-layer-shell0| | Fedora/RHEL |gtk-layer-shell|sudo dnf install gtk-layer-shell| | Arch |gtk-layer-shell|sudo pacman -S gtk-layer-shell|
Building from Source
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 build
On macOS, if you hit a CMake error:
CMAKE_POLICY_VERSION_MINIMUM=3.5 bun run tauri dev
Architecture
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)
Acknowledgments
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.
License
MIT. See LICENSE for full text.
Parrot is a derivative work of Handy (ยฉ 2025 CJ Pais). Both are distributed under the MIT License.
