Pindrop π€
April 13, 2026 Β· View on GitHub
The only 100% open source, truly Mac-native AI dictation app

Pindrop is a menu bar dictation app for macOS that turns your speech into textβcompletely offline, completely private. Built with pure Swift/SwiftUI, packaged with Xcode + SwiftPM, and powered by WhisperKit for optimal Apple Silicon performance.
Download Latest Release Β· Documentation Β· Contributing Β· Community
Why Pindrop?
While other dictation apps compromise on privacy, performance, or platform fidelity, Pindrop is designed specifically for Mac users who refuse to compromise.
| Pillar | What It Means |
|---|---|
| π Mac-Native | Pure Swift/SwiftUIβnot a web wrapper. Feels like Apple built it. |
| π Privacy-First | 100% local transcription. Your voice never leaves your Mac. |
| β‘ Apple Silicon Optimized | WhisperKit + Core ML = 2-3x faster than generic Whisper on M-series chips. |
| π 100% Open Source | No freemium tiers, no "Pro" features, no lock-in. Ever. |
Comparison
| Feature | Pindrop | Handy | OpenWhispr |
|---|---|---|---|
| Platform | macOS only | Windows, macOS, Linux | Windows, macOS, Linux |
| Framework | Swift/SwiftUI (native) | Tauri (Rust + Web) | Tauri (Rust + Web) |
| ML Engine | WhisperKit (Apple Core ML) | Generic Whisper | Generic Whisper |
| Apple Silicon | Native optimization | Emulated | Emulated |
| Source Code | 100% open source | 100% open source | Freemium (paid "Lazy Edition") |
| Battery Impact | Minimal (native) | Higher (web runtime) | Higher (web runtime) |
| Menu Bar Design | First-class native | Web-based UI | Web-based UI |
The bottom line: If you want the best dictation experience on a Macβmaximum speed, minimal battery drain, and true native feelβPindrop is the only choice.
Features
- 100% Local Transcription β Runs entirely on your Mac using OpenAI's Whisper model via WhisperKit. Your voice never leaves your computer.
- Multiple Transcription Engines β Choose between WhisperKit (Core ML optimized) and Parakeet, with streaming transcription support for real-time results.
- Global Hotkeys β Toggle mode (press to start, press to stop) or push-to-talk. Works from anywhere in macOS.
- Smart Output β Text is automatically copied to your clipboard and optionally inserted directly at your cursor.
- Notes System β Full note-taking with pinning, tagging, and AI-powered title generation. Organize and revisit your transcriptions as structured notes.
- Transcription History β All your dictations are saved locally with full search. Export to JSON, CSV, or plain text.
- Multiple Model Sizes β Choose from Tiny (fastest) to Large (most accurate) depending on your needs.
- AI Enhancement (Optional) β Clean up transcriptions using any OpenAI-compatible APIβcompletely optional and off by default.
- Custom Dictionary β Define custom word replacements and vocabulary to improve transcription accuracy for names, jargon, and specialized terms.
- Media Controls β Automatic media pausing and system audio muting during recording so your transcription stays clean.
- Auto-Updates β Sparkle-based automatic update system keeps Pindrop up to date with zero effort.
- Beautiful macOS Design β Native SwiftUI interface that feels at home on your Mac.
Built With
- Swift β Apple's modern, fast, and safe programming language
- SwiftUI β Declarative UI framework for truly native Mac apps
- WhisperKit β High-performance Core ML implementation of OpenAI Whisper by Argmax, Inc.
- SwiftData β Modern data persistence framework
- FluidAudio β Native macOS speech model support for Parakeet
- Sparkle β Native macOS update framework
Pindrop is developed as a native macOS app with Xcode, SwiftPM, and SwiftUI. Normal development stays entirely within the Apple toolchain.
Requirements
- macOS 14.0 (Sonoma) or later
- Apple Silicon (M1/M2/M3/M4) recommended for optimal performance
- Microphone access (required for recording)
- Accessibility permission (optional, enables direct text insertion; clipboard works without it)
Installation
Pindrop releases are now signed with the project's Apple Developer identity. After the app is notarized and stapled, macOS should open it normally:
- Download
Pindrop.dmgfrom the releases page - Open the DMG and drag Pindrop to Applications
- Launch Pindrop from Applications
- If you downloaded a build that has not been notarized yet, macOS may still warn on first launch:
- Right-click Pindrop β Open, or
- Open System Settings β Privacy & Security and use "Open Anyway"
- After notarization, Pindrop should launch without the old self-signed workaround
For maintainers: the default local release flow now exports a signed app bundle before packaging the DMG. just dmg-self-signed remains available only as a fallback when Apple signing is unavailable.
Screenshots
Coming soon: Notes & History dashboard, AI Enhancement settings, Recording indicator
Building from Source
Since this is an open-source project, you can also build it yourself. Don't worryβit's straightforward.
Step 1: Clone the Repository
git clone https://github.com/watzon/pindrop.git
cd pindrop
Step 2: Open in Xcode
open Pindrop.xcodeproj
Or simply double-click Pindrop.xcodeproj in Finder.
Step 3: Build and Run
- In Xcode, select a scheme from the toolbar (Pindrop should be selected by default)
- Press
Cmd+Ror click the Run button - The app will compile and launch
After the first build, Pindrop will appear in your menu bar (look for the microphone icon). The app runs exclusively in the menu barβno dock icon.
Using the Build System (Recommended)
This project includes a justfile for common build tasks. Install just if you haven't already:
brew install just
Common commands:
just build # Build for development (Debug, signed)
just build-unsigned # Build for development without signing
just build-release # Build for release
just export-app # Export a signed app for distribution
just dmg # Export signed app + create DMG
just test # Run tests
just dmg-self-signed # Fallback self-signed DMG
just clean # Clean build artifacts
just --list # Show all available commands
Release commands (maintainers):
just release-notes 1.9.0 # Create draft release notes file at release-notes/v1.9.0.md
just release 1.9.0 # Local manual release (tests, signed DMG, notarize/staple, appcast, tag, push tag, GitHub release)
Manual Build (Alternative)
To create a distributable build manually:
xcodebuild -scheme Pindrop -configuration Release build
The compiled app will be in DerivedData/Build/Products/Release/Pindrop.app.
Exporting a Signed App
To export a Developer ID-signed app bundle:
just export-app
Creating a DMG
To create a distributable signed DMG:
just dmg
This requires create-dmg:
brew install create-dmg
The DMG will be created in dist/Pindrop.dmg.
Creating a Release
Releases are published manually from a local machine using just + gh.
Use either the one-command flow or the explicit step-by-step flow.
# One command (recommended)
just release 1.9.0
Equivalent explicit steps:
# 0. Create and edit contextual release notes
just release-notes 1.9.0
# 1. Ensure tests pass
just test
# 2. Build signed release DMG
just dmg
# 3. Generate appcast.xml for the current version
just appcast dist/Pindrop.dmg
# 4. Create and push tag
git tag -a v1.9.0 -m "Release v1.9.0"
git push origin v1.9.0
# 5. Create GitHub release with notes + attach DMG + appcast.xml
gh release create v1.9.0 dist/Pindrop.dmg appcast.xml --title "Pindrop v1.9.0" --notes-file release-notes/v1.9.0.md
First Launch
When you first open Pindrop, you'll see an onboarding flow:
- Grant Microphone Permission β Required for recording dictations
- Download a Model β Start with "Tiny" for the fastest experience (about 75MB)
- Set Up Your Hotkey β Default is Option+Space for toggle mode
- You're Ready β Press your hotkey and start dictating
Usage
Recording Modes
Toggle Mode (default: Option+Space)
- Press once to start recording (menu bar icon turns red)
- Press again to stop and transcribe
- Your transcribed text appears in your clipboard immediately
Push-to-Talk
- Hold your hotkey to record
- Release to stop and transcribe
- Configure a different hotkey in Settings β Hotkeys
Output
Transcribed text is always copied to your clipboard. If you've granted Accessibility permission, it's also inserted directly at your cursor in the active application.
History
Access all your past transcriptions:
- Click the menu bar icon β History (or press
Cmd+H) - Search through any transcription
- Copy individual entries or export to JSON/CSV/plain text
Settings
General
- Output Mode: Clipboard only, or clipboard + direct insertion
- Language: English (more languages coming in future updates)
Hotkeys
- Configure your toggle hotkey and push-to-talk hotkey
- Press the "Record New Hotkey" button and press your desired keys
Models
| Model | Size | Speed | Accuracy |
|---|---|---|---|
| Tiny | ~75 MB | Fastest | Good |
| Base | ~150 MB | Fast | Good |
| Small | ~500 MB | Medium | Better |
| Medium | ~1.5 GB | Slower | High |
| Large | ~3 GB | Slowest | Highest |
Start with Tiny or Base for daily use. Switch to Medium or Large when you need maximum accuracy.
AI Enhancement
- Toggle AI-powered text cleanup on/off
- Enter any OpenAI-compatible API endpoint
- Your API key is stored securely in the macOS Keychainβnot in UserDefaults
Troubleshooting
App doesn't appear in menu bar
Pindrop is a menu bar-only appβit intentionally has no dock icon. Look for the microphone icon in the top-right corner of your menu bar.
Microphone permission denied
- Open System Settings β Privacy & Security β Microphone
- Enable permission for Pindrop
- Restart the app
Direct text insertion not working
- Open System Settings β Privacy & Security β Accessibility
- Click "+" and add Pindrop
- Restart the app
- Clipboard output still works without this permission
Transcription is slow
- Use a smaller model (Tiny or Base)
- Make sure you're on Apple Silicon (Intel Macs are supported but slower)
- Close other resource-intensive applications
Model download fails
- Check your internet connection
- Ensure you have enough disk space (75MBβ3GB depending on model)
- Try downloading again from Settings β Models
Hotkey doesn't work
- Check for conflicts with other apps
- Try a different key combination
- Click the menu bar icon first to ensure the app has focus
Architecture
Pindrop/
βββ Pindrop/ # Main app bundle
β βββ PindropApp.swift # App entry point + lifecycle
β βββ AppCoordinator.swift # Central service coordination
β βββ Services/
β β βββ AudioRecorder.swift # AVAudioEngine recording
β β βββ AudioDeviceManager.swift # Audio device selection
β β βββ TranscriptionService.swift # Transcription orchestration
β β βββ Transcription/ # Transcription engine architecture
β β β βββ TranscriptionEngine.swift # Engine protocol
β β β βββ StreamingTranscriptionEngine.swift # Streaming protocol
β β β βββ WhisperKitEngine.swift # WhisperKit backend
β β β βββ ParakeetEngine.swift # Parakeet backend
β β β βββ AudioEngineCapabilities.swift # Engine capability detection
β β β βββ VoiceActivityDetector.swift # VAD support
β β β βββ SpeakerDiarizer.swift # Speaker identification
β β β βββ TextToSpeechEngine.swift # TTS support
β β βββ ModelManager.swift # Model downloads
β β βββ HotkeyManager.swift # Global shortcuts
β β βββ OutputManager.swift # Clipboard + text insertion
β β βββ HistoryStore.swift # SwiftData persistence
β β βββ NotesStore.swift # Note-taking system
β β βββ SettingsStore.swift # Settings + Keychain
β β βββ PermissionManager.swift # Permissions handling
β β βββ AIEnhancementService.swift # Optional AI cleanup
β β βββ AIModelService.swift # AI model management
β β βββ MediaPauseService.swift # Media pause during recording
β β βββ UpdateService.swift # Sparkle auto-updates
β β βββ LaunchAtLoginManager.swift # Login item management
β β βββ PromptPresetStore.swift # AI prompt presets
β β βββ DictionaryStore.swift # Custom dictionary
β β βββ ContextEngineService.swift # Context engine
β β βββ ContextCaptureService.swift # Context capture
β β βββ ContextEngineContracts.swift # Context engine protocols
β β βββ AppContextAdapter.swift # App context bridging
β β βββ MentionFormatter.swift # @mention formatting
β β βββ MentionRewriteService.swift # Mention rewriting
β β βββ PathMentionResolver.swift # Path mention resolution
β β βββ WorkspaceFileIndexService.swift # Workspace file indexing
β βββ Models/
β β βββ TranscriptionRecord.swift
β β βββ TranscriptionRecordSchema.swift
β β βββ Note.swift
β β βββ NoteSchema.swift
β β βββ PromptPreset.swift
β β βββ WordReplacement.swift
β β βββ VocabularyWord.swift
β β βββ FeatureModelType.swift
β β βββ FloatingIndicatorType.swift
β βββ UI/
β β βββ Main/
β β β βββ MainWindow.swift
β β β βββ DashboardView.swift
β β β βββ HistoryView.swift
β β β βββ DictionaryView.swift
β β β βββ NotesView.swift
β β βββ Settings/
β β β βββ SettingsWindow.swift
β β β βββ GeneralSettingsView.swift
β β β βββ HotkeysSettingsView.swift
β β β βββ ModelsSettingsView.swift
β β β βββ AIEnhancementSettingsView.swift
β β β βββ UpdateSettingsView.swift
β β β βββ PresetManagementSheet.swift
β β β βββ AboutSettingsView.swift
β β βββ Onboarding/
β β β βββ OnboardingWindow.swift
β β β βββ OnboardingWindowController.swift
β β β βββ WelcomeStepView.swift
β β β βββ PermissionsStepView.swift
β β β βββ ModelSelectionStepView.swift
β β β βββ ModelDownloadStepView.swift
β β β βββ HotkeySetupStepView.swift
β β β βββ AIEnhancementStepView.swift
β β β βββ ReadyStepView.swift
β β βββ Theme/
β β β βββ Theme.swift
β β βββ Components/
β β β βββ CopyButton.swift
β β β βββ SearchableDropdown.swift
β β β βββ MarkdownEditor.swift
β β β βββ NoteCardView.swift
β β βββ StatusBarController.swift # Menu bar icon
β β βββ FloatingIndicator.swift # Recording indicator
β β βββ SplashScreen.swift
β βββ Utils/
β βββ Logger.swift # Logging wrapper
β βββ AlertManager.swift # Alert handling
β βββ ModelCapabilities.swift # Model feature detection
β βββ ImageResizer.swift # Image utilities
β βββ Icons.swift # Icon assets
βββ PindropTests/ # XCTest suite
βββ Pindrop.xcodeproj # Xcode project
Running Tests
xcodebuild test -scheme Pindrop -destination 'platform=macOS'
Community
Join the conversation and get help:
- GitHub Discussions β Ask questions, share ideas, and connect with other users
- GitHub Issues β Report bugs or request features
Contributing
We welcome contributions! Please see CONTRIBUTING.md for guidelines on how to get started.
Whether you're fixing a bug, adding a feature, or improving documentation, your help makes Pindrop better for everyone.
License
MIT License. See the LICENSE file for details.
Acknowledgments
- WhisperKit β The Swift implementation that makes this possible
- OpenAI Whisper β The original speech recognition model
Note: This project is currently open source and free to build yourself. Pre-built binaries may be available for purchase in the future.