Show HN: Yap – OSS on-device voice dictation for macOS with no model to download

Posted by pancomplex 21 hours ago

Counter90Comment33OpenOriginal

Hey 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!

Comments

Comment by jwr 7 hours ago

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.

Comment by heresalexandria 12 hours ago

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.

Comment by pancomplex 12 hours ago

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?

Comment by heresalexandria 11 hours ago

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.

Comment by pancomplex 11 hours ago

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 :)

Comment by HaloZero 11 hours ago

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.

Comment by pancomplex 10 hours ago

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

Comment by echoangle 4 hours ago

That doesn’t prove it doesn’t send data if it has the possibility. It could use the offline model only as a fallback.

Comment by earthpyy 9 hours ago

I was having the same question, now it makes sense.

Comment by 12 hours ago

Comment by Ducki 6 hours ago

Does the built-in dictation not use these models or why would I use this app instead of Apple's own dictation?

Comment by pancomplex 1 hour ago

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.

Comment by 9dev 9 hours ago

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!

Comment by theturtletalks 4 hours ago

Sounds really interesting, is it open-source by any chance?

Comment by xjlin0 29 minutes ago

Great, hope to see the language picker soon!

Comment by primaprashant 6 hours ago

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

Comment by prabhanjana_c 8 hours ago

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.

Comment by prabhanjana_c 7 hours ago

It works, on my Mac book pro. Thanks!

Comment by jorisw 7 hours ago

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.

Comment by pancomplex 1 hour ago

Sorry about these issues - appreciate all the details. Are you on an Intel Mac by any chance?

Comment by jorisw 7 hours ago

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.

Comment by pancomplex 7 hours ago

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

Comment by jorisw 7 hours ago

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.

Comment by d3k 7 hours ago

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.

Comment by perelin 2 hours ago

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.

Comment by 7 hours ago

Comment by hbn 11 hours ago

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

Comment by pancomplex 10 hours ago

It's a great name. Glad someone else thought of something similar!

Comment by solos 2 hours ago

I have wrote one too. Maybe this is the future.

Comment by __erik 12 hours ago

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

Comment by pancomplex 12 hours ago

My bad - this is now fixed. Thank you!

Comment by echoscarrie 9 hours ago

On-device speech recognition on macOS is such a game changer for privacy and speed. Excited to test this out!

Comment by pancomplex 8 hours ago

Totally! I honestly think so many frontier AI models will be running locally in the future. This is just the start.

Comment by eric_khun 12 hours ago

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

Comment by pancomplex 12 hours ago

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?

Comment by wayknow 8 hours ago

[flagged]

Comment by umang_01 7 hours ago

[dead]

Comment by receptopalak 3 hours ago

[flagged]