Notes / 2026.09.25

Look Ma, No Ums

Voice is Local is a free, open-source dictation app for the Mac. Hold Right Option, talk, let go. Nothing leaves the machine.

I liked the convenience of the AI-based dictation tools. The speech recognition is high quality, and they work the way dictation should: press and hold a key, talk, and the text shows up wherever you’re typing. But the privacy aspect bugged the hell out of me. My audio goes off to someone’s server, and after that I have no idea who reads it, what gets kept, or whether some AI training pipeline gets to chew on my thoughts forever. Once it’s gone, I’ve lost control of it.

Now I’ve solved it for myself. Apple provides native speech recognition APIs on the Mac: free, unlimited, and fully local. Nothing leaves the machine and the audio stays private. So I built Voice is Local on top of them, and I’m cancelling my subscription to the cloud one. It’s free and MIT-licensed.

I first called it Holos, which is Ukrainian for “voice”, because I think in Ukrainian. Apple’s new on-device model doesn’t do Ukrainian, though, and there are literally dozens of paid dictation products out there, all trying to make money. This one is free, open source, and keeps your voice on your own Mac, so the app’s name now says exactly that. The repository is still called holos, which reminds me to add Ukrainian once Apple supports it.

What it does

Voice is Local sits in the menu bar. You hold Right Option, talk, and let go. The words appear in whatever text field you’re in: Notes, Mail, a browser, ChatGPT’s input box, a terminal. They stream in while you’re still talking, so you can watch the sentence arrive rather than wait for it.

The Voice is Local menu, opened from its waveform icon in the menu bar: the last dictation was typed into iTerm2, with Copy Result, Correct Last Dictation and Setup below.

macOS has had its own dictation for years, and for some reason it never felt natural or smooth to me. Voice is Local works the way the third-party tools do, because that’s the way that feels smooth. I granted it a few permissions once, and I never have to deal with Apple’s dictation UI.

There’s no account, no server, and nothing to subscribe to. The only download is Apple’s speech model, which comes from Apple, once.

My favourite part is what’s not on the screen. There’s an optional preview toast, and I turned it off. While I’m dictating, the only sign anything is happening is the little microphone-in-use indicator macOS puts in the menu bar. That’s all I need. The text goes where the cursor is, and nothing else gets in the way of my work.

A macOS menu bar with a handful of icons and the clock; the waveform on the left is Voice is Local.

Why it needs the newest macOS

This is a Mac-only tool, and a fussy one about which Mac. It exists because Apple rebuilt its speech framework recently. SpeechAnalyzer and SpeechTranscriber arrived in macOS 26, and they let an ordinary app run Apple’s on-device transcription directly, with the model downloaded and managed by the system. macOS 27 added AnalyzerInputConverter, which turns live microphone audio into the format the analyzer wants, and Voice is Local relies on it. I tried building it for macOS 26, and the compiler refused.

So Voice is Local requires macOS 27, and macOS 27 only runs on Apple Silicon. If your Mac can’t run the latest macOS, this one isn’t for you.

It doesn’t need Siri or the macOS Dictation setting, and it never talks to either. I do have Siri turned on, though, and I haven’t tried it with Siri off.

The small things

The Voice is Local Corrections window: the last dictation at the top, and learned corrections below, such as "Jav model" to "Jev model" and "common free" to "comment-free".

One hold lasts up to two minutes, then it finalizes. That’s a long paragraph. For now it’s English only.

Building it

You need an Apple Silicon Mac on macOS 27 and Xcode with Swift 6.4.

git clone https://github.com/orlenko/holos.git
cd holos
./scripts/build-app.sh
open build/VoiceIsLocal.app

The Setup window opens on first launch. Grant the three permissions, click Install for the speech model, enable dictation, then hold Right Option and talk.

The Voice is Local Setup window with every step green: Microphone, Accessibility, Input Monitoring, English speech assets and Dictation. Filler removal is on; the dictation preview is off.

It’s an ad-hoc signed personal build, not notarized and not in the App Store. To update it later, run ./scripts/restart-app.sh: it quits the app, rebuilds it and opens it again. Don’t run build-app.sh over a running copy. The script refuses anyway, because replacing a running app breaks its signature and macOS asks for all the permissions again. The README and the dictation validation notes have the details.