Vibeleaderboard
Index / tool
Visit frigade.com
Category
AI Tools
Rank
No. 1097Tools index

Previous survey · No. 1113 ·

Pricing
Open Source
Type
TOOL
Use case
Productivity & Collaboration
Interfaces
Desktop
GitHub
468 stars
Latest release
v0.1.15
Date

About

Yap is a free, open-source, on-device voice dictation app for macOS that turns speech into text in any app you can type into, using Apple's built-in Speech framework. It requires no account, API key, or network connection, pastes text directly where the cursor is, and keeps a searchable local history of transcripts.

What it does

A menu bar app for Apple Silicon Macs. Press a hotkey, speak, press it again, and the words appear in whichever text field you left. Speech recognition runs on the speech engine Apple added in macOS 26, so the app bundles no model of its own. Before pasting it strips filler sounds like "um" and can optionally pass the text through Apple's on-device language model for punctuation and list formatting. Each dictation is also kept in a local history you can search.

Why it's ranked here

The privacy claim holds up against the code. Transcription is wired only to Apple's on-device engine, with no fallback to the older recognizer that can send audio to Apple's servers, and support for Intel Macs was dropped because that fallback was the only option there. The optional cleanup step uses the local Apple model too. Add an MIT license, a small native Swift codebase with a single third-party package, and a paste routine built around the timing quirks of Chromium and Electron apps, and Yap reads as a carefully scoped tool, not a thin wrapper.

What's good

The paste step handles the awkward cases. It records the target app before its own window appears, waits for held modifier keys to clear, and restores your previous clipboard only if nothing else has been copied in the meantime. When another app is blocking synthetic keystrokes, as password fields do, it leaves the text on the clipboard and logs which app holds the lock. The optional cleanup cannot lose your words: past about 6,000 characters, after a 30 second timeout, or when the edited result shares too few words with what you said, it pastes the raw transcript instead.

Tradeoffs

It needs macOS 26 on Apple Silicon, so older Macs and Intel machines are out. Accessibility permission must be granted by hand, and local source builds lose their permissions on every rebuild. The transcript stays on the clipboard for half a second after pasting, so a quick manual paste in that window inserts it twice. Recognition follows the system language with no picker yet. The no network promise covers the app's own code: if the speech model for your language is not installed, Yap asks macOS to download it. The README badge says Swift 6, while the project file still builds in Swift 5 mode.

How to use it well

Use it as a push to talk input for prompting coding agents, terminals and chat apps, where the press to stop flow lets you discard a bad take before anything lands. Press Escape twice to cancel, and bind a single modifier such as right shift if a chord feels slow. Turn on cleanup if you want punctuation and spoken lists formatted. Add names and jargon to the dictionary so recognition favors them. It is not a meeting transcriber or a voice command system, and it will not help on Intel Macs or older macOS.

Technical notes+

Sources/Services/TranscriptionService.swift builds a SpeechTranscriber with volatileResults inside a SpeechAnalyzer, biases recognition with AnalysisContext contextualStrings from the user dictionary, and calls AssetInventory to install and reserve the locale model when missing. Sources/Coordinator/RecordingCoordinator.swift is a MainActor state machine (idle, recording, transcribing, inserting) whose dependencies are protocols; its stop path runs FillerRemoval.strip, a dictionary first-letter correction, then optional cleanup. Sources/Services/TextInjector.swift pastes via an NSAppleScript System Events keystroke, falls back to a four-event synthetic Command-V on a private CGEventSource posted at the HID tap, and restores the pasteboard after restoreDelay 0.5s guarded by changeCount plus a session UUID type. Sources/Services/TranscriptCleanupService.swift uses FoundationModels with a Generable schema, greedy sampling, a 6,000 character cap, a 30 second watchdog and an isFaithful word-overlap check at 0.6. Sources/Services/SecureInput.swift reads kCGSSessionSecureInputPID from the IORegistry root. project.yml sets ARCHS arm64, SWIFT_VERSION 5.0, ENABLE_HARDENED_RUNTIME NO and ad-hoc signing for the base config, and declares a YapTests unit-test target; install.sh regenerates the project with XcodeGen and copies the build into /Applications.

Observed

License
MIT (Copyright Frigade, Inc.)
Language
Swift, native macOS app with no browser engine
Platform
macOS 26 or later, Apple Silicon only (arm64 build in project.yml)
Install
Homebrew cask, signed DMG download, or build from source with install.sh
Speech engine
Apple on-device SpeechAnalyzer and SpeechTranscriber, no bundled model
Optional cleanup
Apple on-device language model through FoundationModels, falls back to raw text on failure
Third-party dependencies
One Swift package: KeyboardShortcuts
Tests
Unit-test target YapTests declared in project.yml
Build tooling
Xcode project generated by XcodeGen from project.yml, not committed

Read from README.md, LICENSE, project.yml, install.sh, Sources/Coordinator/RecordingCoordinator.swift, Sources/Services/TranscriptionService.swift, Sources/Services/StreamingTranscriber.swift, Sources/Services/TextInjector.swift, Sources/Services/TranscriptCleanupService.swift, Sources/Services/SecureInput.swift, Sources/Services/FillerRemoval.swift.

Tags

dictationmacosvoiceon-deviceopen-source

Media

Yap

Comments (0)

No comments yet

Editorially curated, with community endorsements as a secondary signal. Corrections welcome.