Dictation for macOS · MIT licensed · bring your own key

Speak anywhere.
VoxFlow writes it for you.

Hold ⌥ ⌃, say the thing, let go. Apple Speech transcribes it on your Mac, an AI pass turns the rambling into a sentence, and the text lands at your cursor in whatever app you were already in.

macOS 26+ · Apple Silicon · open the DMG, drag to Applications

⌥⌃ heldapple speech · whisper fallback · on-device
audio in−1.2 s silence trimmed
transcript

um so can you uh check whether the the cache is warm before we ship

rewrite

Can you check whether the cache is warm before we ship?

only when the text needs it
A dictation traced end to end: audio is captured and silence-trimmed, transcribed on device by Apple Speech, rewritten into a clean sentence because this one stumbles, and inserted at the cursor — all within the 1.5 second budget.

How it works

Five stages between your voice and your cursor.

Everything on the hot path is Rust — the hotkey tap, audio capture, the voice detector, the state machine. The interface only draws what already happened.

  1. 01

    Hold the keys

    Hold Option+Ctrl anywhere in macOS. A small pill fades in at the bottom of the screen. Nothing takes focus, nothing covers what you were reading.

    CGEventTap · no letter-key shortcut to collide with

  2. 02

    Speak

    Audio is captured through CoreAudio and gated by a voice activity detector, so the silence at either end never reaches the model.

    CPAL capture · WebRTC VAD

  3. 03

    Apple Speech, on device

    Transcription runs on your Mac through Apple's SpeechAnalyzer. When it comes back unsure, the audio is re-run through local Whisper with Metal acceleration. Either way it does not leave the machine — the fallback model downloads once, on first use.

    SpeechAnalyzer · whisper-rs fallback · Metal

  4. 04

    An AI pass cleans it up

    The raw transcript goes through a rewrite pass that drops fillers, fixes grammar, and returns a sentence you would have typed. On by default, not a paid add-on.

    Groq, OpenAI, or your own endpoint

  5. 05

    It lands at your cursor

    The finished text is pasted into whatever app had focus — editor, terminal, browser, chat. VoxFlow puts the text on the clipboard, sends Cmd+V, and then puts your old clipboard back.

    Clipboard paste · SQLite history, 30 days by default

What you get

Built to feel like part of the OS.

Stays out of the way

One pill at the bottom of the screen while you talk, and nothing else. No window opens, no focus is stolen, no modal interrupts you.

Built to stay out of the latency budget

VoxFlow targets an 80 ms pill and text inside 1.5 s for a short phrase. The hot path is Rust; the interface only renders.

Your audio stays home

Apple Speech runs on device, with local Whisper as an automatic confidence fallback. Only eligible transcript text can reach an optional rewrite provider.

Works where you write

Insertion is system-wide, so the same hotkey works in Cursor, VS Code, Slack, Gmail, Notion, Obsidian, browsers, and terminals — anywhere Cmd+V works.

Keys live in the Keychain

Provider keys are stored through the macOS Keychain, never in a plaintext settings file. Local history is a SQLite file you own.

Different voice per app

Per-app profiles pick the output mode for whatever has focus — Markdown in Obsidian, Terminal-safe in iTerm, Code-preserve in Cursor, Email in Mail.

Learns the words you use

Add preferred spellings and VoxFlow biases both speech engines toward them, so it writes handoff instead of hand of. Fix a word by hand and it offers to remember it.

Spends the expensive model only when it matters

Hybrid routing keeps short, clean audio on the cheap model and sends anything long or noisy to the accurate one, then drops to the cheap tier once you hit your cap.

Costs you can see

VoxFlow tracks what each dictation costs, projects the month, and warns you at 50, 80, and 100 percent of a cap you set.

Inside the app

Settings that match how you actually work.

VoxFlow is one pill while you talk. Everything else lives in a settings window you open when you need it, and not before.

Per-App Profiles in VoxFlow settings: Cursor set to Code-preserve, iTerm to Terminal-safe with cloud disabled, Obsidian to Markdown, and Mail to Email.
A different voice per app. Code-preserve in Cursor, Terminal-safe in iTerm with the cloud switched off entirely, Markdown in Obsidian, Email in Mail.
Teach it your vocabulary — VoxFlow settings.
Teach it your vocabulary Preferred spellings bias Apple Speech and Whisper alike; a replacement fixes a specific mishear after the fact.
Watch what it costs — VoxFlow settings.
Watch what it costs Minutes, spend, and a projection for the month, against a cap you set.
Every dictation, kept locally — VoxFlow settings.
Every dictation, kept locally Copy it, paste it again, or correct it — and a correction can teach the vocabulary.
Privacy you can inspect — VoxFlow settings.
Privacy you can inspect Audio is never written to disk, history expires on a schedule, and password managers are blocked outright.

Bring your own key

Pick where the work happens.

Transcription is local by default. The rewrite pass talks to any OpenAI-compatible endpoint, so you can route it to Groq, to OpenAI, to a machine in your own house, or turn it off entirely.

Fully local

$0 per month

Apple Speech with local Whisper fallback, cleanup off. Nothing leaves the machine.

Local + cloud rewrite

cents per month

On-device transcription, with Groq handling only adaptive cleanup on short text.

Your own server

$0 marginal

Point VoxFlow at any OpenAI-compatible server you run — a home box over Tailscale, say.

Costs depend on your own provider and usage. VoxFlow tracks each dictation and projects your month so nothing arrives as a surprise. Seeprovider keys for setup.

Privacy

Your voice never has to leave the machine.

  • Audio is transcribed on device by Apple Speech or local Whisper — no upload, no account, no transcript telemetry.
  • Provider keys are stored in the macOS Keychain, not in a settings file.
  • Transcript history is a local SQLite database you can read or delete yourself.
  • Turn the rewrite pass off and VoxFlow makes no network calls at all.
  • The whole thing is MIT licensed, so you can read every line before trusting it.

Pricing

The app is free.

Never for the minutes. No account. MIT licensed. You only pay a provider if you turn the rewrite pass on and point it at one.

$0

what VoxFlow charges. Forever.

Included

Local Whisper, the hotkey, the overlay, rewrite, history, as many providers as you want. The whole app.

You may still pay

Only Groq, OpenAI, or a server you run, and only if you send text there. Turn rewrite off and nothing leaves the machine.

Questions

The things people ask first.

Does my voice get sent to the cloud?

No. Transcription runs on your Mac — Apple’s SpeechAnalyzer first, and local Whisper when it is unsure. The Whisper fallback model is downloaded once, on first use. Only the resulting text can reach a rewrite provider, and you can turn the rewrite pass off to keep everything on device.

Is VoxFlow a subscription?

No. The app is free. There is no VoxFlow subscription and no account. If you send the rewrite pass to Groq or OpenAI, you pay that provider directly for what you use.

Which apps does it work in?

Any app that accepts text. VoxFlow copies the result to the clipboard and sends Cmd+V, then restores what you had on the clipboard before — so it works in editors, terminals, browsers, chat apps, and email. Accessibility permission is what lets VoxFlow watch for the hotkey.

What is the hotkey?

Option+Ctrl by default, held or toggled. It uses a CGEventTap rather than a letter-key global shortcut, so it does not collide with shortcuts inside the app you are using.

Which platforms are supported?

macOS 26 or later on Apple Silicon.

How is this different from Wispr Flow?

Same idea, different economics. VoxFlow is free. Transcription stays on your Mac, keys live in the Keychain, and you pay a provider only if you choose to. Wispr Flow charges a monthly subscription for the minutes.

Stop typing what you could just say.