A fast, private dictation app for macOS — powered by whisper.cpp
OpenFlow is a lightweight macOS menu bar app that turns speech into text — entirely on your device. Press a global shortcut, speak naturally, and have your words inserted into whatever app you're using.
No cloud. No API keys. No subscriptions. Just fast, private dictation.
- 100% Local — All transcription runs on-device using whisper.cpp. Your audio never leaves your Mac.
- Global Shortcut — Hold
⌃⌥Spaceanywhere to record, release to transcribe and insert text. - Apple Silicon Optimized — Takes advantage of the Neural Engine and GPU acceleration on M-series chips.
- Multiple Models — Choose from Tiny, Base, or Small models depending on your speed vs. accuracy preference.
- Smart Insertion — Text is inserted via clipboard paste (fast) or simulated typing (clipboard-safe).
- Text Replacements — Define custom substitution rules that run automatically after transcription.
- Multi-language — Supports English, Spanish, French, German, Italian, Portuguese, Japanese, Korean, Chinese, and auto-detection.
- Minimal UI — Lives in the menu bar with a floating HUD overlay while recording. Stays out of your way.
- macOS 14.0 (Sonoma) or later
- Apple Silicon (M1/M2/M3/M4) or Intel Mac
# Clone the repository
git clone https://github.com/siamekanto19/openflow.git
cd openflow
# Build and run
make runThis will compile the app, create an .app bundle, and launch it.
| Command | Description |
|---|---|
make build |
Build release binary |
make dev |
Build and run in debug mode |
make bundle |
Create the .app bundle |
make dmg |
Create a DMG installer |
make install |
Install to /Applications |
make clean |
Clean build artifacts |
make reset |
Reset all app data for a fresh start |
On first launch, OpenFlow will guide you through onboarding:
- Microphone Access — Required to capture your voice. Audio is processed locally.
- Accessibility Access — Required to insert transcribed text into other apps.
- Download a Model — Choose a Whisper model in Settings → Dictation.
| Model | Size | Speed | Accuracy |
|---|---|---|---|
| Tiny | ~75 MB | Fastest | Good for quick notes |
| Base | ~142 MB | Fast | Better accuracy |
| Small | ~466 MB | Moderate | Best accuracy |
- Press and hold
⌃⌥Space(Control + Option + Space) - Speak — a floating HUD appears showing recording status
- Release — text is transcribed and inserted at your cursor
The menu bar icon provides quick access to settings, last transcript, and history.
OpenFlow/
├── App/ # App entry point, coordinator
├── Audio/ # Audio capture service
├── Data/ # Database, repositories
├── Processing/ # Text formatting, replacements
├── Resources/ # Info.plist, entitlements, icons
├── Shared/ # Logging, extensions, constants
├── System/ # Permissions, hotkey management
├── Transcription/ # Whisper model manager, transcription
└── UI/
├── HUD/ # Floating recording indicator
├── MenuBar/ # Menu bar popover
├── Onboarding/ # First-launch setup flow
└── Settings/ # Preferences (General, Dictation, etc.)
| Package | Purpose |
|---|---|
| SwiftWhisper | Swift bindings for whisper.cpp |
| HotKey | Global keyboard shortcut handling |
| GRDB | SQLite database for transcripts & replacements |
Access settings from the menu bar icon → Settings, or use ⌘,.
- General — Recording mode, HUD visibility, shortcut display
- Dictation — Model selection, downloads, language
- Insertion — Clipboard paste vs. simulated typing, formatting profiles
- Replacements — Custom text substitution rules
- Permissions — Microphone and accessibility status
OpenFlow is designed with privacy as a core principle:
- No network requests for transcription — everything runs locally
- No telemetry or analytics
- No accounts or sign-ups required
- Audio is processed in memory and never saved to disk
- Models are downloaded once from HuggingFace and stored locally
MIT License. See LICENSE for details.