A fully local voice loop for my Mac

I paid for dictation software for exactly three days.

On April 18th i installed Wispr Flow, the subscription dictation app everyone raves about. It’s genuinely good. Three days later i installed Hex, a free, open-source, fully local alternative — and according to macOS’s own last-used metadata, i never opened Wispr Flow again. Not once. That was two and a half months ago; Hex is still my daily driver.

Why local

Three reasons, in whatever order you like:

  • No subscription. Dictation is a commodity now. Whisper runs great on Apple Silicon.
  • No round-trip. Audio doesn’t travel to a server and back before words hit the editor.
  • No leak. Dictation is intimate data — it’s every half-formed thought you speak at your machine. It shouldn’t leave the machine.

Voice in: Hex

Hex is voice-to-text on a hotkey: hold a key, talk, release, and the transcription lands wherever your cursor is. It runs Whisper locally on Apple Silicon, it’s free, and it’s open source. Most of what i dictate is prompts — talking to Claude Code is much faster than typing at it.

The missing half: building Yapper

Voice in was solved. But i was still reading everything back. So in mid-May i built the mirror image: Yapper — highlight text anywhere, press ⌃⇧S, and hear it read aloud. Locally.

Under the hood it’s two pieces:

  • A FastAPI server wrapping Kokoro-82M, a small open TTS model that sounds shockingly good for its size. It preloads at startup, streams audio sentence-by-sentence so playback starts before the full clip is synthesized, and keeps an LRU cache for repeated text.
  • A native Swift menubar app: global hotkey → grab the selected text via the Accessibility API (with a Cmd+C fallback) → POST to the server → play the WAV.

Both halves run permanently via launchd, and there’s a Homebrew tap if you want to try it: voice, speed, and hotkeys are all configurable from the menu bar.

The loop

Together they close the loop: dictate prompts in with Hex, listen to responses back with Yapper. A fully local voice interface to my AI tools — no accounts, no API keys, no audio leaving the machine.

How it happened

Apr 18 Install Wispr Flow
Apr 21 Install Hex. Never open Wispr Flow again
May 14 Start building Yapper (née Kokoro Speak)
May 27 Streaming TTS, menubar app, Homebrew tap, v0.1.0
Today Voice in, voice out, $0/month

The math

Wispr Flow is ~$12–15/month. Hex is free. Yapper is free (i wrote it, but you get it free too). The whole stack runs on hardware i already own, and it’ll keep working if either company disappears — because neither half needs a company.

Links: Hex · Yapper · brew tap