OfflineVoice is the fastest local voice dictation for Mac. Hold one hotkey and speak, transcription runs entirely on your machine, and the text is pasted straight into the focused input field. Because nothing leaves your Mac, it is both faster and more private than tools that depend on the cloud.
No cloud. No account. No subscription. Your audio and text never leave the device. Free and open source (GPL-3.0).
macOS 13+ · Apple Silicon · signed & notarized — just double-click to open.
Hold key → on-device ASR → paste
One click: ⬇ Download OfflineVoice for Mac (.dmg) — or build from source below.
The current repo contains two deliverables:
OfflineVoice.app: the macOS Dock app with a menu-bar status icon.website/: the public landing page with a real Download for Mac button.
- Local macOS app build through Xcode.
- Branded App icon, Dock-visible app shell, and menu-bar status icon.
- First-run onboarding for positioning, permissions, and the hotkey.
- Main window with Home, Settings, Shortcuts, Privacy & Local AI, and About pages.
- Global push-to-talk with default
Right Option, editable from the app UI. - Microphone, Speech Recognition, and Accessibility permission status with settings shortcuts.
- Two on-device recognition modes you choose from the Privacy & Local AI page:
- Speed (default): Apple's native on-device speech recognition. Near-instant — text appears almost as soon as you stop talking — and the most lightweight option, with zero extra downloads.
- Accuracy: Whisper (large-v3 turbo) for more accurate English and technical or specialized content. The model downloads once to your machine on first use, then works offline.
- Works in any app: the recognized text is pasted into the focused input field.
- Website landing page for the "fastest local voice dictation for Mac" positioning.
- Real website download path at
/downloads/OfflineVoice-mac.dmg. - DMG packaging script: a Developer ID build is written to
website/public/downloads/, while an unsigned local build goes todist/local-preview/.
- macOS 13+
- Xcode
- Node.js 20+ for the website
- Optional: XcodeGen if regenerating
OfflineVoice.xcodeprojfromproject.yml
Speed mode uses Apple's built-in on-device speech recognition and needs no downloads. Accuracy mode downloads the Whisper model on first use and caches it locally for offline use afterwards.
cd website
npm install
npm run devOpen the printed local URL. The Download for Mac button points to:
/downloads/OfflineVoice-mac.dmg
In development this resolves to:
website/public/downloads/OfflineVoice-mac.dmg
cd website
npm run buildThe static site is emitted to website/dist/.
The current Vercel project is owens-projects-ba5444b1/website.
npx vercel deploy --prod --cwd website --scope owens-projects-ba5444b1 --yesPublic preview:
https://website-owens-projects-ba5444b1.vercel.app
xcodegen generate
xcodebuild \
-project OfflineVoice.xcodeproj \
-scheme OfflineVoice \
-configuration Release \
-destination 'platform=macOS' \
-derivedDataPath build \
buildThe app is created at:
build/Build/Products/Release/OfflineVoice.app
If you only changed Swift files, xcodegen generate is usually not required. Run it after changing project.yml, assets, bundle settings, package dependencies, or Info.plist generation settings.
Run the packaging script from the repo root:
./scripts/package-mac.shThe script:
- Builds the Release app.
- Copies
OfflineVoice.appinto a DMG staging folder. - Adds the OfflineVoice DMG volume icon when available.
- Ad-hoc signs the staged app for local testing.
- Creates the downloadable DMG.
- Writes a SHA-256 checksum next to it.
Generated files:
website/public/downloads/OfflineVoice-mac.dmg
website/public/downloads/OfflineVoice-mac.dmg.sha256
To publish a new local website download:
./scripts/package-mac.sh
cd website
npm run buildDeploy or serve website/dist/. Vite copies website/public/downloads/OfflineVoice-mac.dmg into the built site automatically.
Before sending a link to another Mac user:
./scripts/package-mac.sh
cd website
npm run build
npm run devThen verify:
- Open the local website.
- Click Download for Mac and confirm
/downloads/OfflineVoice-mac.dmgdownloads. - Open the DMG and drag
OfflineVoice.appto Applications, or open it from the mounted image for a quick smoke test. - Approve any macOS security prompts on first launch.
- Approve Microphone access.
- Approve Speech Recognition access for Speed mode.
- Use the menu-bar icon to open Accessibility settings if needed, then enable OfflineVoice.
- Put the cursor in any input field, hold
Right Option, speak, and release.
OfflineVoice is a Dock-visible Mac app with an optional menu-bar status icon.
Users should:
- Open
OfflineVoice.app. - Complete the onboarding window.
- Approve Microphone access when macOS asks.
- Approve Speech Recognition access for Speed mode (Apple's on-device recognizer).
- Open Accessibility settings from onboarding or Home if shown, then enable OfflineVoice.
- Confirm the default shortcut or record a new shortcut in Settings.
- Put the cursor in any text field, hold the shortcut, speak, and release.
Microphone and Speech Recognition are required for on-device transcription. Accessibility is required for the global push-to-talk key and automatic paste.
OfflineVoice v0.3.0 stores user settings at:
~/.config/offlinevoice/config.json
The app UI manages:
- First-run onboarding completion.
- Launch at login.
- Menu-bar icon visibility.
- Auto paste and clipboard restore behavior.
- Primary dictation shortcut.
- Recognition mode (Speed or Accuracy) and the Whisper model used in Accuracy mode.
Switching recognition mode reloads the transcription engine in place — no restart needed. The next dictation simply waits for the new engine to finish loading.
Public OfflineVoice builds are signed with a Developer ID certificate and notarized by Apple, so the DMG opens with a simple double-click and no Gatekeeper warning.
Local builds you produce yourself without signing credentials are ad-hoc signed for testing only. If macOS blocks an unsigned local build:
- Right-click
OfflineVoice.appand choose Open, then confirm Open in the dialog. - Or open System Settings ▸ Privacy & Security and click Open Anyway.
- You only need to do this once.
scripts/package-mac.sh produces an ad-hoc DMG by default. To ship a signed,
notarized DMG that opens without any Gatekeeper prompt, you need an Apple
Developer Program membership and a Developer ID Application certificate in
your keychain, then store notary credentials once:
xcrun notarytool store-credentials "OfflineVoice-Notary" \
--apple-id <apple-id> --team-id <TEAMID> --password <app-specific-password>Then run the packager with both env vars set — it signs with the Hardened Runtime + entitlements, notarizes, and staples the ticket:
DEVELOPER_ID_IDENTITY="Developer ID Application: Your Name (TEAMID)" \
NOTARY_PROFILE="OfflineVoice-Notary" \
./scripts/package-mac.shSetting only DEVELOPER_ID_IDENTITY signs + verifies but skips notarization;
setting neither falls back to the ad-hoc build.
- The public download is a checked-in/static file under
website/public/downloads/. - Translate and Ask Anything are visible as future shortcut modes but disabled in v0.3.0.
- Launch at login uses
SMAppService. - Switching recognition mode from the UI is persisted and reloads the engine in place.
- The website product preview is a designed placeholder until real screenshots or a screen recording are captured.
- A proper release flow should produce versioned artifacts, checksums, release notes, and notarized DMGs.
