Speak to type app
0
stars
332
commits
C++
primary language
Sep 7, 2026
updated
A native macOS menu bar app for instant voice-to-text transcription. Hold a key, speak, release — your words appear wherever you're typing. Completely offline, powered by whisper.cpp with Apple Silicon optimization.
NSEvent.flagsChanged (keyCode 63) and custom shortcuts via Carbon RegisterEventHotKey. App Store compliant — no event taps or input monitoring.Choose from 10 different models based on your needs:
| Model | Size | Speed | Best For |
|---|---|---|---|
| Large V3 Turbo Q5 | 547 MB | Fast | Recommended — best balance of speed, size & accuracy |
| Large V3 Turbo | 1.5 GB | Fast | 8x faster than Large V3, high accuracy |
| Distil Large V3 | 756 MB | Very Fast | 6x faster than Large V3, good accuracy |
| Distil Small (EN) | 166 MB | Very Fast | English only, 2x faster than Small |
| Large V3 Q5 | 1.1 GB | Medium | Quantized Large V3, smaller file |
| Large V3 | 2.9 GB | Slowest | Maximum accuracy |
| Medium | 1.5 GB | Slow | Good accuracy, moderate size |
| Small | 466 MB | Medium | Balanced option |
| Base | 142 MB | Fast | Quick transcription |
| Tiny | 75 MB | Fastest | Minimal resources |
The app uses an advanced streaming architecture:
~/Library/Logs/Whisperer/Whisperer requires up to two system permissions:
| Permission | Purpose | Required? | How to Grant |
|---|---|---|---|
| Microphone | Record your voice for transcription | Yes | Auto-prompted on first use |
| Accessibility | Paste transcribed text at cursor (system-wide dictation) | Optional | System Settings → Privacy & Security → Accessibility |
A guided onboarding flow walks you through permissions on first launch. The app works fully without Accessibility — transcriptions copy to clipboard for manual paste.
whisperer.xcodeproj in XcodeClick the Whisperer icon in your menu bar to:
This is handled automatically — the app filters out arrow key presses that set the Fn flag internally on macOS.
This is intentional when pressing Fn+key combinations (like Fn+Volume). The app detects these combos and cancels to prevent accidental recordings during normal keyboard use.
~/Library/Application Support/Whisperer/ for partial downloadsThis is fixed in the current version through graceful shutdown handling. If you experience crashes, check ~/Library/Logs/Whisperer/crash.log for details.
whisperer.log for detailed application logsWhisperer/
├── WhispererApp.swift # App entry point & menu bar setup
├── AppState.swift # Global state machine & recording workflow
│
├── UI/
│ ├── OverlayPanel.swift # Floating NSPanel window
│ ├── OverlayView.swift # SwiftUI overlay content
│ └── WaveformView.swift # Audio level visualization
│
├── Audio/
│ ├── AudioRecorder.swift # AVAudioEngine microphone capture
│ ├── AudioMuter.swift # System volume control
│ ├── AudioDeviceManager.swift # Input device enumeration
│ └── SoundPlayer.swift # Start/stop sound effects
│
├── KeyListener/
│ ├── GlobalKeyListener.swift # flagsChanged + Carbon hotkey detection
│ └── ShortcutConfig.swift # Shortcut configuration & persistence
│
├── Transcription/
│ ├── WhisperBridge.swift # whisper.cpp Swift wrapper
│ ├── WhisperModel.swift # Model definitions & metadata
│ ├── WhisperRunner.swift # CLI-based transcription (legacy)
│ ├── StreamingTranscriber.swift # Real-time streaming transcription
│ ├── ModelDownloader.swift # Hugging Face model downloads
│ └── SileroVAD.swift # Voice activity detection
│
├── TextInjection/
│ └── TextInjector.swift # Clipboard + paste text entry
│
├── Permissions/
│ └── PermissionManager.swift # Centralized permission handling
│
├── Core/
│ ├── Logger.swift # File-based logging system
│ ├── CrashHandler.swift # Crash detection & reporting
│ ├── SafeLock.swift # Thread-safe locking primitives
│ ├── TaskTracker.swift # Async task tracking
│ └── QueueHealthMonitor.swift # Queue health diagnostics
│
└── Resources/
├── whisper-cli # whisper.cpp binary (if used)
└── Assets.xcassets # App icons & images
~/Library/Application Support/Whisperer/~/Library/Logs/Whisperer/NSEvent.addGlobalMonitorForEvents(matching: .flagsChanged) — detects modifier state changes via keyCode 63, not keystrokesRegisterEventHotKey — standard macOS hotkey API, no Input Monitoring requiredNSPasteboard, post synthetic Cmd+V via CGEvent.post(tap: .cgAnnotatedSessionEventTap)All source code is provided as-is for the Whisperer project.
332 commits
C++
39.3%
C
26.0%
Swift
19.6%
Cuda
5.2%
Python
2.4%
Metal
1.6%
GLSL
1.1%
Speak to type app
0
stars
332
commits
C++
primary language
Sep 7, 2026
updated
A native macOS menu bar app for instant voice-to-text transcription. Hold a key, speak, release — your words appear wherever you're typing. Completely offline, powered by whisper.cpp with Apple Silicon optimization.
NSEvent.flagsChanged (keyCode 63) and custom shortcuts via Carbon RegisterEventHotKey. App Store compliant — no event taps or input monitoring.Choose from 10 different models based on your needs:
| Model | Size | Speed | Best For |
|---|---|---|---|
| Large V3 Turbo Q5 | 547 MB | Fast | Recommended — best balance of speed, size & accuracy |
| Large V3 Turbo | 1.5 GB | Fast | 8x faster than Large V3, high accuracy |
| Distil Large V3 | 756 MB | Very Fast | 6x faster than Large V3, good accuracy |
| Distil Small (EN) | 166 MB | Very Fast | English only, 2x faster than Small |
| Large V3 Q5 | 1.1 GB | Medium | Quantized Large V3, smaller file |
| Large V3 | 2.9 GB | Slowest | Maximum accuracy |
| Medium | 1.5 GB | Slow | Good accuracy, moderate size |
| Small | 466 MB | Medium | Balanced option |
| Base | 142 MB | Fast | Quick transcription |
| Tiny | 75 MB | Fastest | Minimal resources |
The app uses an advanced streaming architecture:
~/Library/Logs/Whisperer/Whisperer requires up to two system permissions:
| Permission | Purpose | Required? | How to Grant |
|---|---|---|---|
| Microphone | Record your voice for transcription | Yes | Auto-prompted on first use |
| Accessibility | Paste transcribed text at cursor (system-wide dictation) | Optional | System Settings → Privacy & Security → Accessibility |
A guided onboarding flow walks you through permissions on first launch. The app works fully without Accessibility — transcriptions copy to clipboard for manual paste.
whisperer.xcodeproj in XcodeClick the Whisperer icon in your menu bar to:
This is handled automatically — the app filters out arrow key presses that set the Fn flag internally on macOS.
This is intentional when pressing Fn+key combinations (like Fn+Volume). The app detects these combos and cancels to prevent accidental recordings during normal keyboard use.
~/Library/Application Support/Whisperer/ for partial downloadsThis is fixed in the current version through graceful shutdown handling. If you experience crashes, check ~/Library/Logs/Whisperer/crash.log for details.
whisperer.log for detailed application logsWhisperer/
├── WhispererApp.swift # App entry point & menu bar setup
├── AppState.swift # Global state machine & recording workflow
│
├── UI/
│ ├── OverlayPanel.swift # Floating NSPanel window
│ ├── OverlayView.swift # SwiftUI overlay content
│ └── WaveformView.swift # Audio level visualization
│
├── Audio/
│ ├── AudioRecorder.swift # AVAudioEngine microphone capture
│ ├── AudioMuter.swift # System volume control
│ ├── AudioDeviceManager.swift # Input device enumeration
│ └── SoundPlayer.swift # Start/stop sound effects
│
├── KeyListener/
│ ├── GlobalKeyListener.swift # flagsChanged + Carbon hotkey detection
│ └── ShortcutConfig.swift # Shortcut configuration & persistence
│
├── Transcription/
│ ├── WhisperBridge.swift # whisper.cpp Swift wrapper
│ ├── WhisperModel.swift # Model definitions & metadata
│ ├── WhisperRunner.swift # CLI-based transcription (legacy)
│ ├── StreamingTranscriber.swift # Real-time streaming transcription
│ ├── ModelDownloader.swift # Hugging Face model downloads
│ └── SileroVAD.swift # Voice activity detection
│
├── TextInjection/
│ └── TextInjector.swift # Clipboard + paste text entry
│
├── Permissions/
│ └── PermissionManager.swift # Centralized permission handling
│
├── Core/
│ ├── Logger.swift # File-based logging system
│ ├── CrashHandler.swift # Crash detection & reporting
│ ├── SafeLock.swift # Thread-safe locking primitives
│ ├── TaskTracker.swift # Async task tracking
│ └── QueueHealthMonitor.swift # Queue health diagnostics
│
└── Resources/
├── whisper-cli # whisper.cpp binary (if used)
└── Assets.xcassets # App icons & images
~/Library/Application Support/Whisperer/~/Library/Logs/Whisperer/NSEvent.addGlobalMonitorForEvents(matching: .flagsChanged) — detects modifier state changes via keyCode 63, not keystrokesRegisterEventHotKey — standard macOS hotkey API, no Input Monitoring requiredNSPasteboard, post synthetic Cmd+V via CGEvent.post(tap: .cgAnnotatedSessionEventTap)All source code is provided as-is for the Whisperer project.
332 commits
C++
39.3%
C
26.0%
Swift
19.6%
Cuda
5.2%
Python
2.4%
Metal
1.6%
GLSL
1.1%