Show HN: Yap – OSS on-device voice dictation for macOS with no model to download
github.comHey HN! I wanted to share this OSS project I've been working on.
It's called Yap and its a small menu-bar app for macOS that does voice to text for any input. You'll set a hotkey, press it, talk, press it again, and the text gets pasted into whatever field you were in. Everything runs locally and never leaves your computer. Fully OSS and MIT licensed.
With macOS 26, Apple recently added two new APIs, SpeechAnalyzer and SpeechTranscriber, that do streaming on-device speech to text using models the OS ships and manages. So the app ships no model of its own and loads nothing before the first word. A recent benchmark put Apple's model slightly ahead of Whisper Small on accuracy and about 3x faster (see: https://news.ycombinator.com/item?id=48894752). On Mac, there's really no need anymore to download models or pay for expensive APIs.
A lot of existing dictation tools do one of a few things I wanted to avoid with this OSS project. They either:
- cost money (for something that's literally built into the OS)
- bundle memory-intensive models (e.g. Whisper or Parakeet)
- webapps wrapped in Electron
- Intel macs straight up don't work
- closed source
- use third-party APIs that will have access to all your transcripts
It's around 3,000 lines of native Swift in a 4 MB app and idles near 60 MB of memory. Audio comes off AVAudioEngine into SpeechAnalyzer with volatile results turned on for the live preview, history is stored in SwiftData. There's no network code in it at all.
Repo and a demo available here: https://github.com/FrigadeHQ/yap
Happy to answer questions and would love to hear any feature requests!
Incidentally, I've been testing a lot of dictation apps and models. I am on macOS Sequoia and intend to skip Tahoe altogether, so newer Apple models were not an option. I also dictate in multiple languages.
I mostly use the MacWhisper app until now, but I got frustrated by its slow development and lack of focus and dictation. So I tried the free TypeWhisper app. It works very well, but then I tested multiple models and my conclusion was that one cannot beat the Whisper Large v3 model for accuracy. I tried Qwen ASR (very good, but only for English), Voxtral (spoke Polish to it and it wrote Russian, BIG oopsie), Parakeet TDT 3 (very fast, but sometimes inaccurate).
I got frustrated by the speed of the Whisper Large model. So I spent an hour with AI benchmarking, testing and developing a new plugin. Turns out that on a modern Mac with a good GPU you can run the Whisper Large model at roughly the same speed as the tiny Parakeet model. 2-3x faster than what other apps ship. It's just that nobody bothered.
So, I am now happily dictating into TypeWhisper and then feeding the dictated text into a local gemma-4-26b-a4b-qat LLM for corrections. Everything happens instantly.
Thank you for testing TypeWhisper and the different models so thoroughly, and for sharing the results. Comparing several engines across multiple languages is already valuable; going one step further and building a faster Whisper Large v3 plugin is a real contribution.
This is exactly why I made TypeWhisper’s engine and plugin layer extensible. The best setup depends heavily on language, hardware, and workload. Your result that Large v3 can run close to Parakeet speeds on a modern Mac is especially interesting, as is your fully local Whisper plus Gemma correction workflow.
If you’re comfortable sharing the plugin or benchmark setup, I’d be very interested in taking a closer look and seeing whether it could benefit more users. Either way, thank you for putting so much time into this and contributing your findings back to the project.
I don't think get it unless I'm missing something - how is this different from just using the built in Mac OS dictation feature?
At first I thought it was going to be a CLI/package to interface with that API which sounded interesting, but I already use a hotkey to dictate text on my Mac via the OS.
I don't think you're missing something - Apple's built in dictation is pretty good. The biggest issue is that it still executes parts of it online via Apple's servers and even has a disclosure that it "sends information like your voice input, contacts, and location to Apple."
This project uses the on-device SpeechAnalyzer API directly and makes zero network calls, and since it's open source you can verify that nothing leaves your Mac. It also keeps a local searchable history. Finally, I also added press-to-stop with a preview so you can cancel a bad take before it inserts, instead of typing live (very useful in terminal).
What type of package were you hoping it was?
Ahh that makes sense, I was under the impression that OS dictation used exclusively on device models for dictation now but you're right - they do still send this data for transcription.
That definitely changes my take and I'm interested in trying this!
My initial assumption was that this was something I could invoke via CLI or within scripts to transcribe audio from files or user input using on-device models, which is something I would presently probably use Whisper for.
That would be a super trivial fork actually! You basically just need this file https://github.com/FrigadeHQ/yap/blob/main/Sources/Services/... and then wrap a cli around it :)
Does the new SpeechAnalyzer API not call Apple Servers? I remember when I was building on the last version, it you wanted real time transcription you needed at least to upload it to Apple Servers for processing.
I think it once did! Now it doesn't - ways to easily verify this:
1) install the dmg in the GH repo
2) turn off wifi
3) use it offline
That doesn’t prove it doesn’t send data if it has the possibility. It could use the offline model only as a fallback.
I was having the same question, now it makes sense.
Amazing! This is something I wanted to look into too.
The Apple Foundation models SDKs are surprisingly cool. I recently started working on a personal productivity app that tries to keep track of all the projects I work on, and the ideas and initiatives within these. It does so by creating a graph of events, fed by Claude transcripts and the git and browser history, then letting FM summarize and describe all events; that in turn feeds a semantic search index in an SQLite database.
What I have now is an app that shows me where all my projects stand, what I last worked on, where I left forks behind (like deciding for one idea and doing something else "later"), and how to get back into something I wasn’t working on for a while. It also has a built-in MCP server, so I can ask Claude code about any past event or decision or roughly-similar keyword, and it’ll get sensible answers back!
Called the thing Pensieve :-)
However, one thing still missing is actually being able to ask it directly, or talk to it, so Yap looks like a great opportunity to learn!
Sounds really interesting, is it open-source by any chance?
Does the built-in dictation not use these models or why would I use this app instead of Apple's own dictation?
Apple's built in dictation still executes parts of it online and even has a disclosure that it "sends information like your voice input, contacts, and location to Apple."
This project uses the on-device SpeechAnalyzer API directly and makes zero network calls, and since it's open source you can verify that nothing leaves your Mac.
Great, just experimenting to see which is better voice apps to use for my Claude Code cli, on my Mac. for now settled with /voice command. will try Yap. It will be good to have an option to add custom voice commands, let say I want to open an app, or go to folder, that can be plugged, apart from transcription. Not sure if that is deviation, for Yap, love to have that kind of feature.
It works, on my Mac book pro. Thanks!
Pretty cool. Added to this awesome-style GitHub repo I maintain containing all the best open-source voice typing tools:
https://github.com/primaprashant/awesome-voice-typing
built a small voice notes thing for myself last week and the surprise was that transcription accuracy wasn't the hard part. it's that i almost never want the raw transcript, i want the cleaned up version of it. keeping that out of scope is probably the right call for a dictation tool though.
I'm considering adding a feature to include auto punctuation and capitalization. Would that solve it for you?
Strangely, on my macOS 27 Beta build 26A5388g, nothing happens after I finish speaking. No input is transcribed or pasted and nothing is shown in the history.
I do see the input being listed to — there's an audio graph animated as I speak (~US English), though it appears to be late in picking up my speech. Only my second "test?" is represented in the graph as it moves leftwards.
I went through all the permissions, they show as checked.
I also had a crash once, I've submitted the crash report.
Using the DMG from GitHub.
Sorry about these issues - appreciate all the details. Are you on an Intel Mac by any chance?
Nope MacBook Air M4
Couple of suggestions/remarks:
- Remove the presence of the Dock icon. Yap is the kind of app you just want as a menu bar utility. Like Whisper.
- Add a "Settings..." menu item to the main Yap menu with `Command-,` as a shortcut. This will align it with other apps.
- I couldn't enter F13 as a shortcut.
- I saw there's a transcript history of input. I kind of don't want that to be there. I believe input should be ephemeral and not logged.
Thank you for this feedback! Heard from other folks the menu bar is redundant too - will kill it in the next update and fix the F13 issue.
And interesting re: history - it does have the option to clear, but you’d want that as a setting?
Trying to keep the amount of settings to a minimum - personally finding it overwhelming when apps have too many bells and whistles lol
Honestly I'd ditch the Dock icon and keep the menubar item. For a utility with no other UI to use, that's the way to go, and similar apps do the same.
W.r.t. the history — I'm just saying I don't want my input to be logged at all. It has no utility. It can be discarded as soon as it's pasted. I don't want to maintain a log by pressing Clear every now and then.
Seems nice! I have been using Handy https://handy.computer/ for a while and I am happy with it (using Parakeet), this seems quite similar in terms of features, except that is uses Apple's APIs.
Big fan of Handy as well. I often mix languages (german/english) and Apple onboard dictation is not working well in these cases. Having the ability to switch models so far has proven to be helpful. I guess Handy should implement the new native Apple APIs though.
I thought I was familiar with this project but I think it’s unrelated to this one I remembered from last year? Same name and also more or less an app layer for the new speech to text APIs introduced in OS 26.
https://github.com/finnvoor/yap
It's a great name. Glad someone else thought of something similar!
This is super cool! The brew install path in the readme doesn't seem to work
remote: Repository not found. fatal: repository 'https://github.com/frigadehq/homebrew-tap/' not found
My bad - this is now fixed. Thank you!
Great, hope to see the language picker soon!
I have wrote one too. Maybe this is the future.
link to the benchmark against parakeet TDT v2 (the one im using now with spokenly) : https://get-inscribe.com/blog/parakeet-moss-apple-speech-ben...
NVIDIA Parakeet TDT v2 still best, but look like apple is not far behind.
i'd be happy to switch to yours if you add parakeet support, but that ight defy the purpose of the repo
Thanks for linking! I've used both Apple's and Parakeet locally for a while and haven't been able to spot the difference in quality and speed is better on Apple's model (+ doesn't take several gigs of memory). Have you noticed any quality differences anecdotally?
On-device speech recognition on macOS is such a game changer for privacy and speed. Excited to test this out!
Totally! I honestly think so many frontier AI models will be running locally in the future. This is just the start.