Voice
macOS menu-bar dictation with local Whisper — speech to text in any app, on-device.
Dev-storyChallenge
Dictation built into the OS or cloud apps sends your voice off-device and often misses technical terms; we wanted fast, private dictation that works in any app.
What we did
WebEdge Voice is a Swift macOS menu-bar app that runs Whisper locally: pick a microphone and language, press a shortcut to dictate, and the transcribed text is inserted wherever you are typing — nothing is sent to a server.
Result
Speech-to-text anywhere on the Mac, on-device and private, with per-language and per-microphone settings straight from the menu bar.
Dev-story article
Voice: how the project was built
Cloud dictation is fast but sends your voice off the machine; local dictation keeps it private but is usually slow enough to feel broken. This app takes the second path and refuses the slowness: press a shortcut, speak, and the transcript lands in whatever field has focus, with Whisper doing the decode on the same Mac. Most of the engineering is not the transcription itself but the milliseconds around it and the macOS plumbing that lets pasted text reach other apps.
Sections
05
Modules
05
Stack
Swift + Whisper
Why the project exists
Dictation built into the OS or cloud apps sends your voice off-device and often misses technical terms; we wanted fast, private dictation that works in any app.
Cloud dictation is fast but sends your voice off the machine; local dictation keeps it private but is usually slow enough to feel broken. This app takes the second path and refuses the slowness: press a shortcut, speak, and the transcript lands in whatever field has focus, with Whisper doing the decode on the same Mac. Most of the engineering is not the transcription itself but the milliseconds around it and the macOS plumbing that lets pasted text reach other apps.
What was built
WebEdge Voice is a Swift macOS menu-bar app that runs Whisper locally: pick a microphone and language, press a shortcut to dictate, and the transcribed text is inserted wherever you are typing — nothing is sent to a server.
A macOS 14+ menu-bar dictation app for Apple Silicon, built on whisper.cpp with Metal, triggered by Ctrl+Shift+Space. The whisper model is not bundled - you pick one on first launch as a separate ~1.6 GB download - and everything from mic capture to inference to insertion runs locally. It ships as a deliberately Russian-only build rather than pretend to serve languages the model transcribes badly.
Main modules and user path
Warm-up decode at launch: the first dictation paid 407 ms building Metal pipelines and the compute graph, so a one-second silent decode on the launch task moves that cost off the user's first words, dropping the first dictation to ~104 ms.
Unblocking the paste path: insertText slept twice on the main thread (~56 ms of real cost); the pasteboard restore moved to asyncAfter with a changeCount guard so a second dictation cannot clobber the first, and paste now measures 1-6 ms.
The Accessibility-grant signing saga: macOS keys the Accessibility permission to the app's code-signing identifier and cdhash, so ad-hoc-signed rebuilds read as a new app and dropped the grant every time - fixed by re-signing with a fixed identifier and a stable self-signed local cert that pins the requirement to the cert, not the changing binary.
Hallucination and dead-stream filtering: reject mic streams that are all-zero silence before inference, scale audioCtx and token limits to clip length to stop long-clip truncation and repetition loops, and strip known subtitle-corpus artifacts after decode (validated 53/53 caught, zero false positives over 2439 recordings).
Optional Silero VAD, off by default and honest about it: worthless on the short clips the app targets (~2 ms saved), but on long dictation it drops silence to pull a clip back under Whisper's 30 s window and halve encoder passes - a 92 s recording went from two passes to one.
Architecture and technology decisions
Built with Swift, Whisper, macOS.
Swift with a hand-mirrored bridge to whisper.cpp (pinned to v1.9.1) running on Metal, Apple Silicon only, with text insertion via the Accessibility API and pasteboard; run.sh handles the local self-signed signing path, with notarized-DMG release scripts for distribution.
Result and lessons
Speech-to-text anywhere on the Mac, on-device and private, with per-language and per-microphone settings straight from the menu bar.
A private, on-device dictation tool where Whisper itself runs ~90 ms end to end and the press-to-paste loop feels instant - honest about being one machine, one model, one language rather than a cloud service in disguise.
Related articles
Read next
Related project stories
These projects share nearby technical or product decisions, so they show how the same principle behaves in another context.
Dev-storyMac GPU Checker
A macOS GPU benchmark in real TFLOPS (fp16 GEMM) — and whether the chip holds it under load.
Dev-storyFableVita
FableVita — an AI fitness coach with leagues, quests and a fraud-safe rewards economy.
Dev-storyCMS
A dynamic headless CMS on webedge-db — content types, media, roles, and the public read API behind our sites and their articles.
Have a similar idea?
Discuss your project