Skip to content

Hi, I'm Redon.

I'm a fullstack engineer and tech lead at DataCose, and I build my own products on the side.

Social Links:

OpenWisper

Local, offline-first dictation for macOS. Hold a key, talk, and the cleaned-up text lands wherever your cursor is.

Year
2026
Stack
  • Swift
  • whisper.cpp
  • Metal
  • AVAudioEngine

OpenWisper is a dictation app for macOS. You hold a key, say what you want to write, let go, and the text appears wherever your cursor is: a Slack message, an email, a code comment, a terminal. It gets cleaned up on the way, so "um, so basically, new paragraph" turns into proper punctuation and a line break instead of being typed out word for word.

What I cared about most is where your voice goes, and by default the answer is nowhere. Transcription runs on your own Mac through whisper.cpp, an open-source C/C++ port of OpenAI's Whisper speech model, so it keeps working with the Wi-Fi off. Cloud transcription (Groq or OpenAI) and an LLM cleanup pass are available if you want them. They're opt-in, and they only run with API keys you paste in yourself.

Why I built it

I'd been using Wispr Flow and liked it a lot. For anything longer than a sentence, talking is faster than typing, and after a week or so it stops feeling strange. What I didn't like was the account, the subscription, and every sentence I said going to someone else's server. Speech models small enough to run on a laptop had become good enough that none of that seemed necessary anymore. So I built the version I wanted: a menu bar app with no Dock icon, no sign-up, and nothing leaving the machine unless I ask it to.

How it fits together

Every dictation goes through the same five steps:

  1. Hotkey. A global keyboard listener notices the key going down and coming back up. It doesn't interpret anything. It only reports "down", "up" and "Esc".
  2. Record. The microphone is captured into memory as 16 kHz mono audio, the format Whisper models expect. It's never written to disk.
  3. Transcribe. The audio goes to whichever engine is configured: the local whisper.cpp model by default, or a cloud API.
  4. Clean up. Optionally, the raw transcript goes through a short LLM prompt that removes filler words and fixes punctuation.
  5. Insert. The final text is pasted into whatever app is in front.

It's written in Swift, with AppKit for the windows and menu bar and SwiftUI for the views inside them. It builds with Swift Package Manager and a Makefile instead of an Xcode project, and it has no third-party Swift packages. whisper.cpp is compiled from source and linked into the app with Metal enabled, so the model runs on the GPU. The model is loaded once and then stays in memory, which is why there's no pause for it to reload between dictations.

Every transcript is kept locally, one click from the clipboard.

What the write-ups cover

Most of the interesting code in this project isn't the speech recognition, since whisper.cpp does that part. It's everything around it: working out what a key press means, and making sure nothing you said gets lost between the microphone and the cursor.

One key, two gesturesHow a single hotkey does push-to-talk and hands-free mode without asking which one you meant.Never losing what you saidLocal transcription, a cleanup step that's allowed to fail, and a paste that doesn't wreck your clipboard.

GitHub activity