Speak. It types. Anywhere.
Real-time voice dictation that drops clean, AI-polished text straight into the app you're already using. Built for anyone who finds typing slow, painful, or impractical. Your voice never has to touch a keyboard.
|
You want to talk instead of type, and have it land in any app. |
You'd rather plug in your own Deepgram and Anthropic keys and skip the subscription. Go to Bring your own keys. |
You're evaluating, forking, or contributing. Go to Build from source and Architecture. |
Grab the latest signed installer from the releases repo:
Run MacroVox_<version>_x64-setup.exe. It's EV-signed by OK Studio Inc., so there's no SmartScreen warning. The app updates itself: every launch it checks for a newer signed build and installs it in the background. The .msi is there for managed or enterprise deployment.
Download the .deb, .rpm, or AppImage from the same releases page and install the one that matches your distro. See Linux notes for runtime dependencies and Wayland caveats.
Binaries live in a separate repo,
okstudio1/macrovox-releases. Source, issues, and development live here.
- Launch MacroVox. A small always-on-top window appears.
- Sign in and start a trial, or paste your own keys under Settings -> Keys.
- Press the mic (or hit
Ctrl+Spacefrom any app), talk, and stop. Your words land on the clipboard and, if you enable it, paste straight into the app you were in.
Typing is a barrier for a lot of people. Repetitive strain, limited mobility, fatigue, or just the friction of a keyboard between a thought and the screen. MacroVox closes that gap: speak naturally, and get back text that reads like you meant it to, in whatever app you're working in. Accessibility isn't a feature here, it's the whole point.
Audio is captured natively in Rust (no browser mic prompts, low latency), streamed to Deepgram Nova-3 for transcription, then handed to Claude Haiku to fix speech-to-text slips, punctuation, and formatting. The cleaned text replaces the raw text on your clipboard a moment later, so you never wait on the AI pass.
- Real-time dictation. Deepgram Nova-3 in streaming mode (words as you speak) or batch mode (higher accuracy after you stop).
- AI cleanup. Claude Haiku polishes every transcript in the background: punctuation, capitalization, and obvious mis-hearings, without changing your meaning.
- Drop it anywhere. Auto-copy and auto-paste put text on the clipboard and into the app you were using, the instant you stop. Native key injection via
enigo. - Global hotkey. Toggle dictation from any app with a shortcut you choose (default
Ctrl+Space). - 20 languages. English, Spanish, French, German, Portuguese, Japanese, Korean, Chinese, and more. The cleanup prompt is language-aware.
- Smart number formatting. Always digits, always words, or a context-aware Smart mode (digits for currency, dates, and measurements; words for small standalone numbers).
- Keyword boosting. Teach it your jargon, names, and acronyms so they transcribe correctly.
- Dictation history. A rolling buffer saves recordings as OGG Opus (about 10x smaller than WAV) for playback, copying, and one-click reprocessing.
- Bring your own keys. Run the whole thing on your own Deepgram and Anthropic accounts, no subscription. Details below.
- Six themes. MCRN, Mars, Belter, Earth, Protomolecule, and Laconia.
- Stays out of the way. Lives in the system tray, always-on-top dictation window, drag it wherever you like.
- Signed and self-updating. EV-signed Windows installer plus an in-app auto-updater.
Screenshots and a short demo clip are on the way. (Want to contribute one? See Contributing.)
MacroVox runs as a managed service by default: sign in, start a trial, and the keys are handled for you. Prefer to use your own provider accounts and skip the subscription? Open Settings -> Keys and paste them in.
| Key | Powers | Required? | Get one at |
|---|---|---|---|
| Deepgram | Speech-to-text | Yes, to record on your own key | console.deepgram.com |
| Anthropic | AI cleanup of transcripts | Optional (raw transcripts still copy without it) | console.anthropic.com |
- Keys are stored in the app's local storage on your device. They go only to Deepgram and Anthropic, never to OK Studio's servers.
- A saved Deepgram key takes priority over managed keys and unlocks recording immediately, with no sign-in.
- A saved Anthropic key sends cleanup straight to the Anthropic Messages API instead of the managed proxy.
- Leave a field blank to fall back to the managed plan for that provider.
- Usage on your own keys is billed to you by Deepgram and Anthropic directly.
MacroVox is a Tauri 2 app: a Rust backend in src-tauri/ and a React + Vite renderer in src/renderer/.
| Requirement | Version | Notes |
|---|---|---|
| Node.js | 20+ LTS | nodejs.org |
| Rust | stable | rustup.rs |
| Git | any | for cloning |
On Linux you also need the WebKitGTK and ALSA development packages (see Linux notes).
git clone https://github.com/okstudio1/MacroVox.git
cd MacroVox
python run.pyrun.py checks prerequisites, runs npm install, and launches npx tauri dev. The first run compiles the Rust backend, which takes a few minutes.
For auth to work, create a .env in the project root:
VITE_SUPABASE_URL=https://your-project.supabase.co
VITE_SUPABASE_KEY=your-anon-key
To develop against your own provider accounts instead, just paste your keys under Settings -> Keys.
| Command | Description |
|---|---|
python run.py |
Start the dev environment (recommended) |
npx tauri dev |
Start Tauri dev directly |
npm run build:renderer |
Build the renderer only (Vite) |
npx tauri build |
Production build plus installer |
npm test |
Renderer unit tests (Vitest) |
npm run test:rust |
Rust unit tests (cargo) |
npm run check:versions |
Verify tauri and @tauri-apps/api major.minor match |
+---------------------------------------------------+
| Rust / Tauri 2 |
| lib.rs app lifecycle, tray, global hotkey |
| commands.rs audio, Deepgram, clipboard, paste |
| audio.rs cpal WASAPI capture, WAV encoder |
| state.rs shared AppState (audio, settings) |
+-----------------------+---------------------------+
| invoke() / emit()
+-----------------------v---------------------------+
| React Renderer (Vite) |
| DictationMode recording UI |
| SettingsPanel all user preferences |
| tauri-ipc.ts typed IPC bridge |
| auth.ts Supabase auth + billing |
+---------------------------------------------------+
The renderer never touches the microphone directly. It asks the Rust side to capture, stream, and inject, which keeps latency low and avoids browser permission prompts. See src-tauri/ARCHITECTURE.md for the full backend tour.
Project structure
MacroVox/
βββ run.py # Dev launcher (prerequisites + npx tauri dev)
βββ src-tauri/ # Rust / Tauri 2 backend
β βββ tauri.conf.json # App config: windows, devUrl, frontendDist
β βββ capabilities/default.json # IPC permissions for all windows
β βββ src/
β βββ main.rs # Entry point, calls lib::run()
β βββ lib.rs # App setup, tray, global shortcut, close handler
β βββ commands.rs # IPC commands (audio, Deepgram, clipboard, windows)
β βββ state.rs # Shared AppState (Mutex-wrapped)
β βββ audio.rs # cpal WASAPI native audio capture
β βββ deepgram_ws.rs # Deepgram WebSocket streaming
β βββ voice_buffer.rs # Dictation history (OGG Opus buffer + manifest)
β βββ platform.rs # Platform detection (OS, Wayland)
βββ src/renderer/ # React UI (Vite + Tailwind)
β βββ dictation.html/tsx # Main dictation window entry
β βββ settings.html/tsx # Settings window entry
β βββ config.ts # App configuration constants
β βββ themes.ts # Theme definitions
β βββ components/ # DictationMode, SettingsPanel, VoiceHistory
β βββ hooks/ # usePostProcessing, useDeepgram, useUpdater
β βββ lib/ # tauri-ipc, auth, supabase, disable-context-menu
βββ netlify/functions/ # Serverless proxies (claude-proxy, deepgram-proxy)
βββ supabase/functions/ # Edge Functions (checkout, billing, webhook)
βββ docs/ # Documentation
βββ package.json
MacroVox builds .deb, .rpm, and AppImage bundles. Install the one that matches your distro.
Runtime dependencies (Debian/Ubuntu names; check your distro for equivalents):
libwebkit2gtk-4.1-0for the Tauri WebViewlibasound2andlibpulse0for audio capture (cpal via ALSA/PulseAudio; PipeWire works through its PulseAudio shim)libayatana-appindicator3-1for tray icon support
Display server:
- X11 is fully supported. Global hotkey, auto-paste, and clipboard all work as on Windows.
- Wayland is partial. Global hotkeys depend on the compositor's XDG portal, and auto-paste via
enigois unreliable, so it's disabled automatically (copy and paste manually, or run from an X11 session for full parity). MacroVox detects the session type at startup and reflects the limitation in Settings.
Microphone picker: on Linux the dropdown hides ALSA's virtual aliases (hw:, plughw:, dmix:, monitor taps, and friends) so you only see real, named devices. Your choice persists across restarts.
Contributions are welcome, especially from people who use adaptive technology day to day. Start with CONTRIBUTING.md for setup, conventions, and the PR flow, and please read the Code of Conduct. Bug reports and feature requests have issue templates ready to go.
Found a vulnerability? Please report it privately, not in a public issue. The preferred channel is a GitHub Security Advisory; the email fallback is owenpkent@gmail.com with [MacroVox security] in the subject. Details and scope are in SECURITY.md.
- Setup Guide: backend infrastructure (Supabase, Netlify, Stripe)
- Release Process and Release Checklist
- Changelog: release history
- Status and Roadmap
- LLM Onboarding: quick orientation for AI assistants
MIT. Copyright 2026 OK Studio. See LICENSE.