Two powerful productivity tools for macOS — voice typing and clipboard manager — completely free, no subscription, no account.
EchoType is a lightweight macOS menu-bar app that combines:
- Push-to-talk voice typing — speak into any app, on-device Whisper transcription, zero internet
- Smart clipboard manager — persistent history, fuzzy search, pinned items, images & files — triggered by a single hotkey
Both features are 100% free and run entirely on your Mac.
| Hold shortcut | Speak | Release | Text appears |
|---|---|---|---|
⌥ Space |
"Hey John, attaching the updated deck." | ↑ | Hey John, attaching the updated deck. |
| Trigger | Browse & Search | Press Enter | Done |
|---|---|---|---|
⌘ Shift V |
fuzzy-search your full clipboard history | ↑ | pastes into active app |
- Push-to-talk — hold global hotkey, speak, release; text is instantly injected at your cursor
- Offline transcription — WhisperKit (on-device Whisper) — no internet, no cloud, nothing leaves your Mac
- Works everywhere — Cursor, VS Code, Chrome, Slack, Notion, Figma, Terminal, email apps
- Minimal UI — lives in your menu bar; floating overlay shows listening / processing / done state
- Configurable — model size, microphone, typing speed, shortcut key
- Persistent history — stores up to 200 clipboard items across sessions (SQLite-backed)
- All content types — text, URLs, images (with thumbnails), and files
- Fuzzy search — find anything instantly by typing; exact → prefix → substring → fuzzy ranking
- Pinned items — pin frequently-used snippets so they stay at the top (
⌘P) - Keyboard-first —
↑/↓navigate,Returnpastes,⌘Ppins,⌘Deleteremoves,Esccloses - Password manager safe — automatically ignores copies from 1Password, Bitwarden, LastPass, Dashlane
- Deduplication — consecutive identical copies don't create duplicate entries
- Relative timestamps — see when each item was copied (just now / 5m ago / 2h ago)
No subscription. No account. No telemetry. Both tools are completely free.
| Item | Minimum |
|---|---|
| macOS | 14 Sonoma |
| Architecture | Apple Silicon (arm64) |
| Swift | 5.10+ (via Xcode CLT) |
Intel Macs are not supported — WhisperKit targets Apple Silicon.
# Clone
git clone https://github.com/Rishurajgautam24/EchoType.git
cd EchoType
# Build release .app bundle
make app
# Launch
make runOn first launch:
- Grant Microphone, Accessibility, and Input Monitoring permissions
- Hold
⌥ Spaceanywhere to start voice typing - Press
⌘ Shift Vanywhere to open the clipboard palette - The first voice-typing session downloads the Whisper model (~150 MB)
| Command | Description |
|---|---|
make app |
Release build → build/EchoType.app |
make debug |
Debug build → build/EchoType-debug.app |
make run |
Build release + open |
make run-debug |
Build debug + open |
make dmg |
Package release into build/EchoType.dmg |
make clean |
Remove .build/ and build/ |
EchoType/
├── Sources/EchoTypeApp/
│ ├── App/ # AppDelegate, AppState, coordinator
│ ├── Audio/ # AVAudioEngine capture pipeline
│ ├── Whisper/ # WhisperKit engine + model catalog
│ ├── Injection/ # CGEvent + pasteboard text injection
│ ├── Hotkey/ # Global hotkey manager
│ ├── Overlay/ # Floating status panel (SwiftUI)
│ ├── MenuBar/ # Status bar controller
│ ├── Permissions/ # Onboarding + permission checks
│ ├── Settings/ # SettingsStore + SettingsView
│ └── Clipboard/
│ ├── Models/ # ClipboardItem model
│ ├── Monitoring/ # NSPasteboard watcher (0.3s poll)
│ ├── Storage/ # SQLite database + store
│ ├── Search/ # Fuzzy search engine
│ ├── Overlay/ # Palette UI (SwiftUI, 600×400)
│ └── Paste/ # Injection back into active app
├── Resources/
│ ├── Info.plist
│ ├── EchoType.entitlements
│ └── AppIcon.icns
├── Tests/
├── scripts/
├── Package.swift
└── Makefile
| Permission | Why |
|---|---|
| Microphone | Capture audio for voice transcription |
| Accessibility | Inject text into the focused app via CGEvent |
| Input Monitoring | Listen for global hotkeys |
The app guides you through granting these on first launch.
Microphone
↓
AVAudioEngine (PCM buffer capture)
↓
WhisperKit (on-device Whisper inference, Apple Silicon)
↓
Text output
↓
CGEvent injection (typed into active window)
NSPasteboard (polled every 300ms)
↓
ClipboardMonitor (filters password managers, deduplicates)
↓
ClipboardStore (SQLite-backed, 200 item limit, pinned items)
↓
⌘ Shift V → ClipboardPalette (fuzzy search + keyboard nav)
↓
CGEvent / Pasteboard injection
Key technical choices:
- Hotkey:
NSEvent.addGlobalMonitorForEvents— avoids deprecated Carbon APIs - Transcription: WhisperKit via
argmax-oss-swift— multiple model sizes, 100% offline - Clipboard storage: SQLite via custom
ClipboardDatabase— persists across launches - No App Sandbox: CGEvent injection and global monitors are incompatible with sandboxing
- Global push-to-talk voice typing
- WhisperKit on-device transcription
- CGEvent system-wide text injection
- Floating voice status overlay
- Clipboard manager with persistent SQLite history
- Fuzzy clipboard search
- Pinned clipboard items
- Image + file clipboard support
- Password manager exclusion
- Streaming transcription (text appears while speaking)
- Smart voice commands (
"new paragraph","delete last sentence") - AI cleanup pass (auto-capitalisation, punctuation)
- Rewrite modes (Professional / Concise / Friendly)
- Context-aware formatting (coding vs email vs chat)
- Custom vocabulary
Contributions are welcome! See CONTRIBUTING.md.
MIT — see LICENSE.