Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

106 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

MacroVox logo

MacroVox

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.

License: MIT Release Platform Built with Tauri 2 Powered by Deepgram + Claude


Pick your path

πŸŽ™οΈ I want to use it

You want to talk instead of type, and have it land in any app.

Go to Install, then First run.

πŸ”‘ I want my own keys

You'd rather plug in your own Deepgram and Anthropic keys and skip the subscription.

Go to Bring your own keys.

πŸ”§ I want the code

You're evaluating, forking, or contributing.

Go to Build from source and Architecture.


Install

Windows

Grab the latest signed installer from the releases repo:

Download MacroVox for Windows

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.

Linux (beta)

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.

First run

  1. Launch MacroVox. A small always-on-top window appears.
  2. Sign in and start a trial, or paste your own keys under Settings -> Keys.
  3. Press the mic (or hit Ctrl+Space from any app), talk, and stop. Your words land on the clipboard and, if you enable it, paste straight into the app you were in.

Why MacroVox

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.

How it works

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.


Features

  • 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.)


Bring your own keys

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.

Build from source

MacroVox is a Tauri 2 app: a Rust backend in src-tauri/ and a React + Vite renderer in src/renderer/.

Prerequisites

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

Run it

git clone https://github.com/okstudio1/MacroVox.git
cd MacroVox
python run.py

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

Scripts

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

Architecture

+---------------------------------------------------+
|                  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

Linux notes

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-0 for the Tauri WebView
  • libasound2 and libpulse0 for audio capture (cpal via ALSA/PulseAudio; PipeWire works through its PulseAudio shim)
  • libayatana-appindicator3-1 for 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 enigo is 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.


Contributing

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.

Security

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.

Documentation

License

MIT. Copyright 2026 OK Studio. See LICENSE.

Built with care for people who'd rather talk than type.

About

No description, website, or topics provided.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages