Yap open-source on-device voice dictation for macOS – features, installation, and community feedback

Yap – Open‑source on‑device voice dictation for macOS

Yap provides instant, offline dictation on macOS 26+ by leveraging Apple’s built‑in SpeechAnalyzer and SpeechTranscriber APIs, eliminating the need for external models, API keys, or network traffic.


What Yap Does

Yap lives as a menu‑bar app. Press the global shortcut (default ⌘⇧D) and a small window appears with a live waveform and a live preview of the spoken text. Press the shortcut again and the transcript is pasted into the currently focused text field. All transcripts are saved locally for later retrieval.

The app does not ship any speech model; it streams audio to the OS‑provided on‑device model and receives partial results in real time.


Why Yap Is Different from macOS Built‑in Dictation

Feature macOS Built‑in Dictation Yap
Activation System‑wide shortcut, but no visual feedback Same shortcut plus a live waveform and preview window
Model Uses the same on‑device model but hidden behind a UI that does not expose partial results Directly accesses SpeechAnalyzer for streaming results
Customizability Fixed shortcut, no history, no re‑binding Fully rebindable shortcut, optional single‑modifier trigger, transcript history with search
Privacy Audio may be sent to Apple servers if “enhanced dictation” is enabled No network traffic; all processing stays on the machine
Extensibility Closed source, no way to audit MIT‑licensed Swift code, ~3 k lines, 4 MB binary

The key distinction is Yap’s live preview and clipboard‑based insertion that works across any app, plus a transparent open‑source implementation.


Technical Foundations

  1. Audio CaptureAVAudioEngine pulls audio from the default microphone. Buffers recorded before the speech stack is ready are cached and flushed once the transcriber attaches, preventing clipped first words.
  2. On‑Device TranscriptionSpeechAnalyzer streams speech to text with volatile results enabled, providing the live preview. SFSpeechRecognizer serves as a fallback for locales not yet supported by the new API.
  3. Insertion Logic – Yap copies the transcript to the clipboard, synthesizes a ⌘V keystroke via System Events, then restores the original clipboard contents. A deliberate delay ensures Chromium‑based apps (e.g., Chrome, Slack) read the pasteboard before it is overwritten.
  4. State ManagementRecordingCoordinator is a small state machine whose dependencies are protocol‑based, allowing comprehensive unit testing without a microphone.

Installation Options

  • Homebrew (recommended):
    brew install --cask frigadehq/tap/yap
    brew upgrade --cask yap   # to update later
    
  • Direct download: Grab the signed .dmg from the GitHub releases page and drag Yap to Applications.

Permissions Required

Permission Reason
Microphone Capture audio
Speech Recognition Access Apple’s on‑device model
Accessibility Identify the focused UI element for pasting
Automation Send the synthetic ⌘V keystroke

Accessibility must be enabled manually in System Settings; macOS does not allow programmatic granting.


Performance and Accuracy

A benchmark cited by the developers shows Apple’s on‑device model achieving 2.12 % WER on clean audio and 4.56 % WER on noisy audio, outperforming Whisper Small (3.74 % / 7.95 %) while running roughly three times faster on the same dataset.


Community Feedback (Hacker News)

  • Installation hiccup – A user reported that the Homebrew tap URL was broken (Repository not found). The repository now exists at frigadehq/homebrew-tap; the issue is being tracked on the project’s issue tracker.
  • Comparison to built‑in dictation – Several commenters asked how Yap differs from macOS’s native dictation. The answer is the live UI, clipboard‑based insertion that works in any app, and the open‑source nature that lets users audit the code.
  • Feature requests – Users suggested a language picker (the most likely next addition) and a settings window accessible via ⌘,. The maintainers note that they intentionally keep the feature set minimal but will consider widely‑requested additions.
  • Bug reports – One user on macOS 27 Beta observed that transcription stopped after speaking despite correct permissions. The issue was filed and the maintainers are investigating compatibility with the beta OS.
  • Use cases – Developers are integrating Yap with AI‑assisted workflows (e.g., feeding transcripts to Claude or other LLMs) to enable hands‑free prompting.
  • Privacy praise – Commenters highlighted the privacy advantage of never leaving the machine, especially compared to cloud‑based services.

Limitations

  • macOS version – Requires macOS 26 (Tahoe) or later because it depends on the new speech APIs. Earlier versions cannot run Yap.
  • Unsandboxed – To drive System Events and access the clipboard, Yap runs unsandboxed and is distributed outside the Mac App Store, similar to other dictation utilities.
  • No language picker yet – Currently follows the system locale; adding per‑session language selection is on the roadmap.

Getting Started with Development

# Clone and build in one step
git clone https://github.com/FrigadeHQ/yap.git && cd yap && ./install.sh

The script installs XcodeGen if needed, quits any running instance, builds the app, and launches it. For Xcode users:

xcodegen generate          # generate Yap.xcodeproj
open Yap.xcodeproj         # then ⌘R to run

Run the test suite with:

xcodebuild -project Yap.xcodeproj -scheme Yap -destination 'platform=macOS' test

Note that locally built binaries are signed ad‑hoc, causing macOS to treat each rebuild as a new app and forget granted permissions. The released builds are properly signed to avoid this.


License

Yap is released under the MIT License.


Bottom Line

Yap demonstrates that Apple’s on‑device speech models are now fast and accurate enough to replace heavyweight third‑party solutions. By exposing these models through a tiny, open‑source macOS utility, Yap gives users a privacy‑first, low‑latency dictation experience that works anywhere a keyboard does.

Sources

Related

  • Project
  • Project
  • Project
  • Project
  • Project