Dictation that never leaves your machine.
Voice2Prompt is a free, open-source, on-device voice dictation tool. Hold a key, speak, and your words land wherever your cursor is — transcribed and cleaned up entirely offline, on macOS and (soon) Windows.
Everything a premium cloud dictation app does — running on your machine
Voice2Prompt ships fast because every layer is a swappable local sidecar. New capabilities land every release.
Local speech-to-text
A whisper.cpp sidecar runs over localhost HTTP, keeping the model resident so every utterance skips reload time. Sub-second latency, zero cloud round-trip.
LLM cleanup
A local Ollama model fixes punctuation, drops filler words, and adapts tone per app — casual for Slack, professional for Mail and Docs. Falls back to raw transcription if Ollama's off.
Smart text injection
Inserts at the caret via macOS's Accessibility API, and automatically falls back to clipboard + ⌘V for apps — like Slack, Notion, VS Code — that reject AX insertion.
Voice commands
"Select all," "make this formal," "shorten this" — rule-based editing runs instantly, and rewrite commands hand your current selection to the LLM and replace it in place.
Six ways to trigger it
Hold the 🌐 Fn key for push-to-talk, double-tap to lock into hands-free — or bind one of five hotkey chords instead, no extra permission required. Pick whichever fits your workflow in Settings → Trigger.
Native menu-bar app
Self-contained, ad-hoc signed .app with a menu-bar tray (Open / Start-Stop / Quit) and launch-at-login — one permission grant, no child-process mess.
One pipeline, all of it on localhost
Every stage — capture, transcription, cleanup, injection — talks over 127.0.0.1. Nothing you say is sent anywhere.
Hotkey
Fn / Carbon chordMic capture
malgo · 16kHz monowhisper-server
POST /inferenceOllama
POST /api/chatInject
AX insert / ⌘VBoth the STT and LLM engines are local HTTP sidecars on 127.0.0.1. The Go core (cmd/voice2prompt) shares config and engine code with the Wails desktop app, so the CLI and the menu-bar app behave identically.
Built in the open, shipping phase by phase
This is early — and that's the point. Star the repo or subscribe below to catch new releases as each phase lands.
Feasibility spike
Hotkey → record → whisper → paste, latency measured end-to-end.
macOS text injection
Accessibility-API caret insert with clipboard fallback.
Local LLM cleanup
Punctuation, filler removal, context-aware tone via Ollama.
Wails settings app
Onboarding, permissions, hotkey + dictionary editor.
Windows port
UI Automation-based injection for Windows.
Command mode
Editing keystrokes + LLM rewrite of your current selection.
Packaging
Self-contained .app, menu-bar tray, launch-at-login.
New phases ship as releases — the fastest way to know is the newsletter below, or watch the repo on GitHub.
Get notified about new releasesGet Voice2Prompt
Builds are hand-packaged right now, so we email the current download link instead of hosting a public button — that way you always get a working link plus a heads-up when a new build replaces it. Grab the source anytime from GitHub Releases.
Getting past Gatekeeper, step by step
Voice2Prompt is ad-hoc signed, not notarized yet (that needs a paid Apple Developer account) — so macOS blocks it once and asks for a few permissions. None of this is unusual for an open-source app; here's exactly what to click.
Open the DMG and install
Double-click Voice2Prompt.dmg, then drag Voice2Prompt.app onto the Applications shortcut in the same window. Eject the DMG once it's copied.
Bypass Gatekeeper (one time only)
Opening it normally shows this — it's expected, not a sign anything's wrong:
Click Done (not Move to Bin!) — then bypass it properly, either way:
Right-click (or Control-click) Voice2Prompt.app in Applications → Open → click Open again in the dialog that appears.
— or — go to System Settings → Privacy & Security, scroll to the security notice, and click Open Anyway:
Still getting blocked (common right after a browser download)? Clear the quarantine flag from Terminal:
xattr -dr com.apple.quarantine /Applications/Voice2Prompt.app
Grant permissions
Microphone — macOS prompts automatically the first time you record. Click Allow.
Accessibility (required) — System Settings → Privacy & Security → Accessibility, toggle Voice2Prompt on. Quit and reopen the app afterward — permission changes only apply on relaunch.
Input Monitoring (only if using the default Fn-key trigger) — System Settings → Privacy & Security → Input Monitoring, toggle Voice2Prompt on. Also set Keyboard → "Press 🌐 key to" → Do Nothing. Picked a hotkey chord instead? Skip this one entirely — none of the five need it.
Six triggers to choose from in Settings → Trigger:
Fn / 🌐 — hold to talk, double-tap to lock into hands-free (needs Input Monitoring)
Ctrl+Option+Space · Ctrl+Shift+Space · Cmd+Option+Space · F8 · F9 — hold to talk, no extra permission
Start dictating
Hold your trigger, speak, release — the transcript types itself wherever your cursor is.
Every permission is scoped to this one app and can be revoked anytime from the same Privacy & Security screens. Voice2Prompt is fully open source, so you can read exactly what each permission is used for in internal/inject/, internal/audio/, and internal/hotkey/.