Linux · Windows · macOS beta · MIT

Your voice is the keyboard.

Press CtrlAltV and talk: your words become real keystrokes in whatever app has focus, terminal included, as you speak. Bring a key for a cloud speech service (xAI by default) or run your own offline speech server. The mic opens only when you ask, and it never presses Enter in a terminal it recognizes.

A keyboard that presses its own keys as the words you speak are typed into the text field above it, and presses the arrow and modifier keys when you move the caret by voice. Enter is marked “yours”, and this board never presses it; a line break you dictate here appears without it.

Tap and speak

Speech is recognized in this tab by Moonshine tiny (MIT, Moonshine AI): about 35 MB, downloaded once you tap the mic and allow it (about 62 MB where WebGPU runs it), then kept in your browser's cache. It's a small model, so expect more mishearings than with the app's speech services; this page reads its usual mishearings of “VK” and “spell” (“The K”, “Bell”) as those words. Here, words lock when you pause, and caret commands and “VK, run …” are on; in the app those two are off until you turn them on. Nothing you say leaves this tab. If the model can't run here, the page offers your browser's own speech service, and names it before it starts.

01 · molten dictation

Words land while you speak.

In the app, each word stays molten for at least 1.5 seconds, long enough for the recognizer to repair it in place, then freezes: a later guess never retypes it, though your own spoken edits can. Say “scratch that” to take back what you just said, “period” for punctuation, “new line” for a break, “new number” for a numbered list. Amounts, dates and phone numbers come out the way you'd write them — “twenty five percent by october sixth” types 25% by October 6 — and “emoji rocket” types 🚀. Misheard a name? “Spell that s i o b h a n” swaps the last word on screen, so “Shivon” becomes “Siobhan”, and “correct monday to friday” fixes a word anywhere in this dictation. Turn on caret commands, say one on its own — “select previous word”, “go to end of line”, “delete the line” — and the keyboard presses the real keys for it after your words have landed.

Fixed the race condition in the audio thread

molten repaired frozen
02 · registers

The same words, typed the way the app wants.

It checks which app has focus and picks a register: prose gets capitals and punctuation, and a terminal it recognizes gets digits and no sentence capitals. Map an editor to python, shell or javascript in [registers.map] and speech compiles into code: “for i in range ten colon” types for i in range(10):. The same check picks the keys: an editor gets ctrl← for “go back a word” (option← on a Mac), a Linux shell gets readline's altb. The panes show your last dictation through each register.

notes.md · prose
~ · terminal
main.py · python
~ · shell
app.ts · javascript
04 · where your words go

Cloud speech with your key, or fully offline.

No speech model ships with the app. With a key for xAI (the default), OpenAI, Groq, Deepgram or AssemblyAI, your audio goes to that service while you dictate, and text you ask to hear goes to the voice service you choose. Point it at your own OpenAI-compatible speech server instead, such as Speaches, and your audio goes no further than that server. A language model handles rewrites, Kai and the punctuation at your pauses: xAI's Grok with an xAI key, or a local one such as llama-server. No analytics. Your recorded audio is held in memory while it is transcribed and never written to disk.

This page follows the same rules: no analytics, no cookies. After your first dictation your browser keeps the speech model in its cache (clear this site's data to remove it); nothing you say is stored. Its Content-Security-Policy lets it reach only this site and the speech model's hosts. It fetches the model only once you tap the mic and allow it.

# ~/.config/voice-keyboard/config.toml
[providers.openai]
base_url = "http://localhost:8000/v1"  # Speaches

# models you have downloaded into Speaches
[stt]
provider = "openai"
model = "Systran/faster-whisper-large-v3"

[tts]
provider = "openai"
model = "speaches-ai/Kokoro-82M-v1.0-ONNX"
voice_id = "af_heart"

[llm]
provider = "openai"
base_url = "http://localhost:8080/v1"  # llama-server
model = "your-model-id"  # what its /v1/models lists
# no key · nothing leaves your machine
v2.4.0 · Linux · Windows 10/11

Install Hyperfurion VK.

Download it and run it as yourself, not with sudo or as administrator. On Linux it asks for your password for the system steps (audio libraries, the virtual keyboard, adding you to the input group), and after the first install you log out and back in once. Setup then asks how to transcribe your speech — a key for a cloud service, or your own server — and about your hotkey, language, Kai (the push-to-talk assistant: setup says where its questions would go, and it is off unless it runs locally or you turn it on) and caret commands. Running a local llama-server? Setup finds it and offers its model as your language model.

HyperFurion-VK-Setup.run · run it as yourself, not with sudo; it asks for your password only for the system steps (audio libraries, keyboard access)

Free and open source. Every feature works with your own provider key or a local model. macOS is in beta — install from a checkout.

What gets installed
  • Linux: a Python package in ~/.local/share/voice-keyboard-venv, the voice-keyboard CLI, a systemd user service that starts it when you log in, a GNOME Shell overlay extension (45–50), audio and clipboard libraries from your package manager, and the uinput rule for the virtual keyboard. It adds you to the input group, which the global hotkey needs; that group can read every keyboard and mouse.
  • Windows 10/11: a tray app with a native overlay and an on-screen Kai button (while Kai is on). Installs Python for you if needed. It starts with Windows; turn that off with “Start with Windows” in the tray menu. Press CtrlAltV in any app; CtrlAltR reads a selection aloud.
  • Config: ~/.config/voice-keyboard/config.toml on Linux, mode 600. On Linux, and in classic Windows edit boxes, a password field forces the verbatim register and is never written to the history.
linux · one line
# downloads the release installer and runs it as you
curl -fsSL https://github.com/liamghennigan/Hyperfurion-VK/releases/latest/download/install-hyperfurion-vk.sh | bash

# first install: log out and back in, then press Ctrl + Alt + V and speak

# not typing? it names the fix
voice-keyboard doctor
windows · powershell
# a tray app; installs Python if you need it
irm https://raw.githubusercontent.com/liamghennigan/Hyperfurion-VK/main/packaging/windows/install-hyperfurion-vk.ps1 | iex
the full board

A keyboard you can talk to.

edit

Spoken edits

“Scratch that”, “new line”, “period”, “quote … unquote”, “new bullet”, “new number”, “new heading”, “new checkbox”, “emoji rocket” — a real edit grammar, parsed before anything is typed. Spanish, French and German sets are one setting away (“punto”, “à la ligne”, “neue Zeile”). Say literal to type the next word as-is.

numbers

Written the way you'd write it

“Twenty three” is 23 in a terminal and words in prose — until a unit makes it certain: 25%, $5.50, $3.2 billion, 3:30 PM, June 5, 1999, room 402, Q3, 2.5 MB, 555-1234, example.com/docs. Lowercase recognizers get their I, OK and Monday capitalized.

spell

“Spell that s i o b h a n”

Swaps the last word for the one you spelled — letters, NATO words, “capital k”, spoken digits — keeping its punctuation and its capital. Each fix is offered to your personal dictionary, never applied on its own.

navigate

Move the caret by voice

“Go left three words”, “select that”, “go to end of line”, “undo that”, “paste that”, “press tab”. Said on its own, a command presses the app's own keys after your words land — editors get the shift and ctrl chords, Linux shells get readline's. Enter is never one of them, and “paste that” works only where it can tell the app isn't a terminal. Off by default; one question in setup turns it on.

fix

“Correct monday to friday”

Fixes a word anywhere in this dictation, its capital kept, and offers the pair to your dictionary. “Cap that”, “uppercase that”, “lowercase that” recase the last thing you said — no model, no selection.

rewrite

“VK, make that formal”

Say “VK,” then an instruction, and what you just said goes with it to your language model and is repaired on screen, in place. Select a paragraph in an app first, and it rewrites the selection instead. On this page a fixed stand-in knows only formal, upper case and title case, and changes nothing for any other instruction; the app needs a language model (xAI's Grok with your key, or a local one).

assistant

Kai, in the keyboard

Hold Right Ctrl and ask. Ask for a command in a terminal, or in an app it can't identify, and Kai types a draft and leaves Enter to you ([assistant] terminal_fallback = false keeps an app it can't identify answer-only); anything else it answers aloud. It runs on your language model (a one-gigabyte local model can draft the commands). Kai is on by default when it runs locally (your own speech server and language model); with xAI or another online service it waits until you turn it on (voice-keyboard kai on, or “Turn on Kai…” in the Windows tray), which says first where your questions would go. While it is on, it saves your questions and its answers on your computer unless you turn its memory off.

read

Read anything aloud

Select text and press your read-aloud key (CtrlAltR on Windows; on Linux, a desktop shortcut you bind to voice-keyboard tts) to hear it in xAI's voice, OpenAI's, ElevenLabs', or a local one.

recall

An opt-in memory

A local ledger of what you dictated: list it, re-type it, search it. It also finds words you re-dictated to fix them and offers each pair to your dictionary; nothing is applied until you accept it. Off until you turn it on.

how it compares · checked October 2026

How it compares.

Next to the voice tools Linux users already know, and Dragon on Windows. It doesn’t win every row: it ships no speech model, and Talon goes much further with hands-free control.

FeatureHyperfurion VKTalonNumennerd-dictationDragon
Open sourceMITno (free; Talon+ is paid)AGPL-3.0GPL-2.0+no (paid)
Needs no API key or serverno: a key (xAI by default) or your own speech serveryes: free speech modelyes: free Vosk modelyes: free Vosk modelyes: model included
Works fully offlineonly with your own speech server (and a local language model for rewrites and Kai)yesyesyesyes (desktop)
Linux on Waylandyes, and X11no: X11 only; 1.0 planned as the last free Linux releaseyeswith a flagno Linux
Types as you speakwith xAI (the default) or your own local servernew in 1.0 (“Hum”, GPU)no: types after each pauseyes, by defaultpreview; types at each pause
Never presses Enter in a terminalnever in a terminal it recognizes, not even on “new line”on “press enter” or “slap”on “yes”never, by designon “new line” or “press Enter”
Spoken correctionsbuilt inin the community command set“ditch”, “change”nonebuilt in
Scripting and hands-free mousephrases in config; no mouseextensive; eye trackingphrase files; noises, click, scrolla Python hook; no mousecustom commands; MouseGrid

Not in the table: Handy (open source, offline, Windows, macOS and Linux), Voice Access (built into Windows 11, works offline), and the AI dictation apps Wispr Flow and Superwhisper (Mac, Windows and phones) and VoiceInk (Mac). The full comparison has a line on each.

checked October 2026 against each project’s own docs and code · not a benchmark: nothing here measures accuracy · Hyperfurion VK cells are v2.4.0 with default settings · full comparison → · out of date? open an issue

the edges

Known limits.

  • No speech model ships with the app: you need a key for a speech service or your own speech server.
  • Words land while you speak with xAI, or with your own server at a local address (localhost, a private IPv4 address or a .local name), re-transcribed every 2.5 seconds; with OpenAI, Groq, Deepgram or AssemblyAI, or a server anywhere else, they land when you stop talking.
  • Linux and Windows are first-class. macOS is in beta, installed from a checkout. iOS lets no app press keys in other apps, so this one can't run there.
  • Repairs assume nothing else edits the field while you dictate. If focus moves to another app mid-sentence, typing stops there and the whole transcript goes to your clipboard, replacing what was on it; a dictation typed when you stop looks again just before it types, and types nothing into another app either.
  • A caret command needs a pause before and after it; said mid-sentence it is typed as words. Terminals have no selection to extend. Caret commands ([nav]) and “VK, run …” ([intent]) are off by default in the app; this page has both on, with your own platform's keys. Full list on GitHub →