v0.6 · actively shipping new phases

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.

No network calls
<300ms round trip
MIT licensed
voice2prompt — interactive
./bin/voice2prompt
Hold Ctrl+Option+Space, speak, release…
📝 ""
audio 2.1s | infer 190ms | TOTAL 260ms | via accessibility ✅ under 800ms
100% on-device — nothing leaves localhost
whisper.cpp + Ollama — no per-word API cost
Go engine — macOS today, Windows in progress
Open source — MIT, built in public
Features

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.

Fn / 🌐 — hold, double-tap to lockCtrl+Option+SpaceCtrl+Shift+SpaceCmd+Option+SpaceF8F9

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.

Architecture

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 chord

Mic capture

malgo · 16kHz mono

whisper-server

POST /inference

Ollama

POST /api/chat

Inject

AX insert / ⌘V

Both 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.

Roadmap

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.

P0

Feasibility spike

Hotkey → record → whisper → paste, latency measured end-to-end.

✓ Shipped
P1

macOS text injection

Accessibility-API caret insert with clipboard fallback.

✓ Shipped
P2

Local LLM cleanup

Punctuation, filler removal, context-aware tone via Ollama.

✓ Shipped
P3

Wails settings app

Onboarding, permissions, hotkey + dictionary editor.

◐ In progress
P4

Windows port

UI Automation-based injection for Windows.

○ Planned
P5

Command mode

Editing keystrokes + LLM rewrite of your current selection.

◐ In progress
P6

Packaging

Self-contained .app, menu-bar tray, launch-at-login.

◐ In progress

New phases ship as releases — the fastest way to know is the newsletter below, or watch the repo on GitHub.

Get notified about new releases
Download

Get 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.

Required — we send the current build link straight to your inbox. We'll also let you know about major new releases. No spam, unsubscribe anytime.

macOS will ask for a couple of permissions on first launch (and block the app once, since it isn't notarized yet) — see the install & permissions steps below before you open it.

First launch (macOS)

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.

1

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.

2

Bypass Gatekeeper (one time only)

Opening it normally shows this — it's expected, not a sign anything's wrong:

🛡️
"Voice2Prompt" Not Opened
Apple could not verify "Voice2Prompt" is free of malware that may harm your Mac or compromise your privacy.
DoneMove to Bin
What you'll see on a plain double-click

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:

Allow applications fromApp Store & Known Developers
"Voice2Prompt" was blocked to protect your Mac.Open Anyway
System Settings → Privacy & Security
🛡️
Open "Voice2Prompt"?
Apple is not able to verify that it is free from malware that could harm your Mac or compromise your privacy.
Move to BinOpen AnywayDone
Confirm once more — 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

3

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

4

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/.