Minimal local speech-to-text for macOS.
Hold a global hotkey → speak → words appear at the cursor as you talk.
Fully offline. No telemetry. No account. No subscription.
- Download the latest
.dmg - Drag Flowy.app into your Applications folder
- Right-click → Open on first launch (Gatekeeper bypass for unsigned apps — one-time only)
- Follow the setup wizard to grant Microphone, Speech Recognition, and Accessibility permissions
Default hotkey: ⌥ Space (Alt+Space). Configurable in Settings.
Requires: macOS 13 Ventura or later, Apple Silicon
| Feature | Detail |
|---|---|
| Local only | Uses macOS on-device Speech Recognition — no API keys, no cloud |
| Live push-to-talk | Hold a global hotkey while speaking; text streams into the focused window from partial recognition results |
| Voice punctuation | Say "period", "comma", "new line", "new paragraph", and related commands to insert punctuation and line breaks |
| Guided onboarding | First-launch wizard walks through all required permissions |
| Autosave settings | Changes save automatically — no Save button |
| Custom dictionary | Word-substitution map applied after every transcription |
| Auto-stop on silence | VAD detects when you stop speaking and stops recording |
| History | Browse and copy your last 20 transcriptions |
| Autostart | Optional launch at login |
Flowy is not yet signed with an Apple Developer certificate, so macOS blocks the first open.
Fix (one-time): Right-click Flowy.app → Open → Open
Alternatively: System Settings → Privacy & Security → scroll to Security → Open Anyway.
The setup wizard guides you through each permission on first launch:
- Speech Recognition — required for transcription
- Microphone — required for recording
- Accessibility — required for keystroke injection into other apps (falls back to clipboard if not granted)
Requires Xcode Command Line Tools:
xcode-select --installmake build # release build → target/release/bundle/macos/Flowy.app
make relaunch # build + kill + relaunch
make dmg # package distributable DMG
make check # compile-only (no launch)Settings save automatically. The config file lives at:
~/Library/Application Support/flowy/config.json
{
"hotkey": "Alt+Space",
"autostart": false,
"dictionary": {},
"inputDevice": null,
"maxRecordingSecs": 60,
"vadEnabled": true,
"vadSilenceSeconds": 0.6,
"historySize": 20
}Pure Swift · AppKit + SwiftUI · no Electron · no web layer
Global hotkey (Carbon RegisterEventHotKey)
│
AppModel (@MainActor)
│
AVAudioEngine + SFSpeechRecognizer partials (on-device)
│
dictionary substitution + spoken punctuation
│
StreamingInjector partial reconciliation ──► focused app
(fallback: NSPasteboard)
│
final pass: amendments / optional local rewrite / translation
│
final reconciliation or clipboard fallback
MIT