Most people speak at roughly 130–160 words per minute, while typing speed typically tops out around 60–70. That is more than a 2x difference.

Software development today involves writing a substantial amount of text: detailed context prompts for AI assistants in Cursor or Claude, architectural decision records, issue descriptions, and constant team communication. Dictating that volume of text seems like an obvious way to save time.

However, developers who try standard speech-to-text usually give up quickly for two reasons:

  1. It does not understand development context. Generic STT mishandles casing, knows nothing about camelCase, mangles technical terminology, and turns library names into arbitrary everyday words.
  2. Too many manual steps. Most standalone utilities require opening a window, clicking record, waiting, clicking “Copy”, switching back to the editor, and pasting. If a simple task requires five extra mouse actions, the habit never sticks.

To solve both issues, I built Nyx Vox. It is a lightweight desktop utility written in Rust and Tauri that I use every day.


In this article:


How the Pipeline Works

The primary requirement was simple: the input process must be invisible and require zero mouse clicks.

graph LR
    A["Tap Hotkey"] --> B["Speak (Hands Free)"]
    B --> C["Smart VAD (3–15s silence) OR Tap Again"]
    C --> D["Text Drops into Focused App"]

The workflow:

  1. You remain inside your active program: your code editor, terminal, chat, or browser.
  2. Tap a global hotkey — no need to hold it down, your hands stay completely free. Speak at your natural pace while a subtle volume indicator appears on screen.
  3. Recording finishes automatically via Smart VAD (Voice Activity Detection): once you finish speaking, it detects silence (configurable from 3 to 15 seconds) and completes the process. Alternatively, tap the hotkey again to insert the text immediately.
  4. Within 300 to 500 milliseconds, the formatted text is pasted directly into your active cursor position.

Under the hood:

  • Audio capture is handled via cpal with a small pre-speech circular buffer so initial consonants are never clipped.
  • The audio is sent to Whisper (cloud inference via Groq takes ~500 ms).
  • The raw transcript passes through an LLM for formatting.
  • The app simulates a native paste shortcut (Cmd+V on macOS or Ctrl+V on Windows) into whichever window was focused prior to recording.

Formatting Without Changing Meaning

Standard dictation engines frequently attempt to rephrase speech or insert synonyms. For code and technical instructions, that is unacceptable.

In Nyx Vox, the language model operates under strict normalization rules:

  • The author’s exact words are preserved. The model does not summarize, invent details, or swap technical terms.
  • Disfluencies are removed. Pauses, filler words (“uhm”, “like”), and repeated syllables are stripped out.
  • Syntax and punctuation. Punctuation is applied, text is structured into clean paragraphs, and technical identifiers (PostgreSQL, Docker, TypeScript, GraphQL, REST API) are formatted with correct casing.

You speak a rough train of thought, and clean, properly formatted text lands directly in your editor.


Where It Saves Time Daily

I keep Nyx Vox running continuously in the background. Here are three areas where it has replaced typing for me:

  • Prompts for Cursor and Claude. Getting accurate code from an LLM on the first attempt requires rich context: files to avoid, methods to call, and error handling rules. Typing that out takes one to two minutes. Speaking it takes 15 seconds.
  • Replies in Telegram and Slack. You can answer a teammate directly from your IDE without switching windows or reaching for the mouse. Tap the key, speak two sentences, and VAD completes the recording and pastes the reply.
  • Notes and Documentation. While designing a module architecture or drafting an API spec, it is often easiest to open a blank note in Obsidian and talk through the logic out loud.

Privacy and Local Mode

When dealing with proprietary codebases under non-disclosure agreements, sending audio to third-party endpoints is not an option. Nyx Vox supports two operating modes:

  1. High-Speed (Cloud): Speech recognition runs via Groq LPU Whisper, keeping roundtrip latency around 500 ms. For text formatting, you can bring your own API key for Gemini, DeepSeek, Qwen, or GigaChat.
  2. Local (Offline): Whisper runs directly on your machine. On macOS, it utilizes Metal hardware acceleration. No audio or text leaves your computer.

All API keys are encrypted on-device (AES-256-GCM) and remain strictly local.


Windows Support and Open Source

I originally built Nyx Vox for my own Mac setup. Because the core is written in Rust with Tauri 2, OS-specific hooks are isolated, and the project now includes Windows support as well.

The Windows build follows the identical workflow: global keyboard hooks, foreground window resolution via Win32 APIs, and input injection through enigo.

The repository is completely open source:


Feedback

For any open-source tool, practical feedback from real users is the most important component of development.

If you write lots of prompts, communicate in dev chats, or want to reduce keyboard strain, download the build for your platform, try it for a day or two, and let me know how it works in GitHub Issues. Any notes on latency, hotkeys, or edge cases will help make the tool better for everyone.