A macOS native speech-to-text app with global hotkey support, offering both cloud (OpenAI Whisper API) and local (WhisperKit) transcription.
- Global Hotkey — Trigger recording from anywhere with a keyboard shortcut (default:
⌥ Space) - Dual Transcription Providers — Choose between OpenAI's cloud API or on-device WhisperKit
- Auto-Type — Transcribed text is automatically typed into the focused application
- Floating Overlay — Animated waveform UI shows recording status
- Transcription History — Searchable history with date grouping and audio playback
- Model Management — Download and manage local Whisper models with progress tracking
- macOS 14.0 (Sonoma) or later
- Apple Silicon recommended for local transcription
- Microphone access permission
- Accessibility permission (for auto-typing)
Download the latest release from Releases:
- Download and extract
SpeakEasy-vX.X.X-macOS.zip - Remove the quarantine attribute (required for unsigned apps):
xattr -cr ~/Downloads/SpeakEasy.app - Move
SpeakEasy.appto your Applications folder - Open the app (you may need to right-click and select "Open" the first time)
- Grant microphone and accessibility permissions when prompted
- Build & Run — Run
dev(via mise) to build and launch - Grant Permissions — Allow microphone and accessibility access when prompted
- Configure Provider:
- OpenAI: Add your API key in Settings → Providers
- Local: Download a Whisper model from Settings → Providers
- Press
⌥ Space(or your custom shortcut) to start recording - Speak your text
- Release or press the shortcut again to stop
- Transcription is automatically typed at your cursor (or copied to clipboard)
Press Esc to cancel recording.
Run tests using:
mise run test
# or
swift testTests live in Tests/SpeakEasyTests/ and use Swift Testing:
import Testing
@testable import SpeakEasyLib
@Suite("My Feature Tests")
struct MyFeatureTests {
@Test("Description of what this tests")
func testSomething() {
let result = myFunction()
#expect(result == expectedValue)
}
}To publish a new version:
-
Create and push a version tag:
git tag v1.0.0 git push origin v1.0.0
-
The Release workflow will automatically:
- Build the app for macOS
- Create a ZIP archive with the
.appbundle - Generate a SHA256 checksum
- Create a GitHub Release with auto-generated release notes
Alternatively, trigger a release manually from the Actions tab using "workflow_dispatch" and specifying a version (e.g., v1.0.0). The workflow will create the tag automatically.
Note: Use semantic versioning (e.g., v1.0.0). Tags containing - (e.g., v1.0.0-beta) are marked as pre-releases.
- Swift 6 / SwiftUI
- SwiftData for persistence
- WhisperKit for local inference
- AVFoundation for audio capture