I built this specifically for my dad, who wanted something like Wispr Flow,
but where he could see the text appear as he's speaking it.
Free, open-source voice dictation for macOS that types while you talk.
100% on-device · no account · no cloud · no AI rewriting
Dad wanted dictation that's simple, private, and shows the words as he says them, not after he's done talking.
Most dictation apps record, wait for you to stop, send your voice to a server, rewrite it with AI, and then paste. Dad Flow skips all of that. The text appears as you speak, wherever your cursor is, and it's exactly what you said.
- ⚡️ Live typing. Words appear in any app while you speak. If the recognizer revises a word ("my mat" → "my Mac"), Dad Flow backspaces just that part and fixes it.
- 🔒 Fully local. Audio never leaves your Mac. There's no account, no telemetry, and it works offline.
- 🧔 Dad Mode (Whisper). Pausing to think won't scatter "..." or stray commas into your text. Punctuation only appears once Whisper is sure of it. On by default.
- 🗣️ Two on-device engines:
- Apple On-Device (macOS 26+): Apple's new
SpeechAnalyzer, which streams word-by-word. Built into macOS, so nothing to download. - OpenAI Whisper (large-v3-turbo, small, or base) via WhisperKit on the Neural Engine. The model downloads once, then works offline.
- Apple On-Device (macOS 26+): Apple's new
- ✋ Natural controls. Hold
fnto talk, tap it once for hands-free, or click the floating bar. - 📍 Movable bar. Put it at the bottom, top, left edge, right edge, or either bottom corner.
- ✍️ No AI rewriting. What you say is what gets typed. The only tweaks are smart spacing (adding a space when you continue a sentence) and Dad Mode, and you can turn both off.
- 🧓 Friendly setup. A big, colourful setup screen walks through each permission.
![]() |
![]() |
| Setup: one sticker card per step | Settings: keycaps, a click-to-place screen, big toggles |
- Download DadFlow.dmg from the latest release (or build it yourself).
- Open the DMG and drag Dad Flow into Applications.
- Open it. Release builds are ad-hoc signed, not notarized, so macOS will say it can't verify the developer. Click Done, then go to System Settings → Privacy & Security and click Open Anyway. You only need to do this once.
- Follow the setup screen:
- Microphone: so it can hear you.
- Accessibility: so it can type into other apps and detect the
fnkey. - The 🌐 key: set System Settings → Keyboard → Press 🌐 key to → Do Nothing (or pick a different talk key).
| Mac | Apple Silicon (M1 or newer) |
| macOS | 14 Sonoma or newer · macOS 26+ for the Apple engine (older versions use Whisper automatically) |
| Disk | ~3 MB for the app, plus 75–632 MB if you use Whisper |
You need the Xcode Command Line Tools (full Xcode isn't required).
git clone https://github.com/paulkr/dadflow.git
cd dadflow
./scripts/build-dmg.sh # → dist/DadFlow.dmg (and dist/Dad Flow.app)For development:
swift build
.build/debug/DadFlow # run the menu-bar app
# Stream an audio file through an engine and watch the live transcript
say -o /tmp/t.wav --data-format=LEI16@16000 "Testing one two three"
.build/debug/DadFlow --selftest /tmp/t.wav apple # or: whisper, whisper-dad (Dad Mode)
# Re-render the README graphics and settings screenshots
.build/debug/DadFlow --render-docs docs/imagesTip: macOS ties Accessibility permission to the app's code signature. Each ad-hoc rebuild looks like a "new" app, so you may need to toggle Dad Flow off and on in Privacy & Security → Accessibility after rebuilding.
fn key / click ─▶ HotkeyMonitor ─▶ DictationController ─▶ AudioCapture (AVAudioEngine)
│ │
│ ▼
│ TranscriptionEngine (streaming)
│ ├─ AppleSpeechEngine (SpeechAnalyzer, volatile → final)
│ └─ WhisperEngine (re-decode window every ~0.4 s,
│ confirm all but last segment)
▼ │ full transcript so far
OverlayController ▼
(floating bar) LiveTyper ─▶ diff vs. typed text
─▶ backspace the changed tail
─▶ type the new chars (CGEvent)
| Piece | File |
|---|---|
| Hotkey (hold = push-to-talk, tap = hands-free) | App/HotkeyMonitor.swift |
| Session state machine | App/DictationController.swift |
| Live typing with in-place corrections | Typing/LiveTyper.swift |
| Apple on-device engine | Engines/AppleSpeechEngine.swift |
| Whisper streaming engine | Engines/WhisperEngine.swift |
| Model download & loading | Engines/ModelManager.swift |
| Floating bar (non-activating panel) | UI/Overlay.swift |
| Setup & Settings window | UI/SettingsView.swift |
Whisper models are stored in ~/Library/Application Support/DadFlow/Models.
The settings window uses a retro soda-shop theme: a cream canvas, deep-teal ink, fruit-coloured "sticker" cards with solid outlines instead of shadows, and chunky pill buttons that squish when pressed. Everything is drawn in SwiftUI. The README graphics are rendered by the app itself (--render-docs), so they always match.
| Token | Hex | Used for |
|---|---|---|
| Canvas | #FDF7E7 |
window background |
| Ink | #14433D |
headlines, outlines, primary buttons |
| Lemon · Cherry · Lavender · Mint | #FDF4B5 #FEBAC4 #E3D2ED #D3E8E3 |
section cards |
| Aqua | #2AD2C9 |
toggles & selected states |
| Lime | #95D95D |
"Done" chips |
Issues and pull requests are welcome. Ideas that fit the spirit of the project:
- More languages in the picker
- A custom-vocabulary list (names, places)
- Intel / universal builds
- Developer ID signing & notarization in CI
Please keep it local-only and simple enough for a dad.
Dad Flow is free and always will be. If it saves you some typing and you'd like to say thanks, you can sponsor me on GitHub 🍯. It helps cover the Apple developer fee, which would let future releases open without the "Open Anyway" step.
- WhisperKit by Argmax (MIT), which runs Whisper on Apple Silicon
- OpenAI Whisper (MIT) for the speech recognition models
- Apple's Speech framework for the on-device
SpeechAnalyzer
Dad Flow is an independent project. It isn't affiliated with or endorsed by Wispr, OpenAI, or Apple.
Copyright © 2026 Dad Flow contributors.
Dad Flow is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License v3.0 as published by the Free Software Foundation. See LICENSE for the full text. Licenses for bundled dependencies (MIT / Apache-2.0, all GPLv3-compatible) are in THIRD_PARTY_NOTICES.md.
This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose.






