Skip to content

Repository files navigation

Voxtype

Talk to your Steam Deck instead of fighting the on-screen keyboard.

Hold a back grip button, say what you want to type, release → the text is on your clipboard, ready to paste into any field in Game Mode. Runs fully offline on-device via whisper.cpp. No cloud, no account, no network required.

demo


Why

Game Mode text entry is slow. Searching your library, typing a Steam friend message, filling in a launcher field, renaming a shortcut, entering a Wi-Fi password; all of it routes through the on-screen keyboard, which is fine for a three-letter search and miserable for anything longer.

Voxtype gives you a push-to-talk button that transcribes what you say into the clipboard. Paste it wherever. That's the whole thing.

Features

  • Push-to-talk via any controller button — defaults to R4 (right back grip), configurable in the plugin settings. Supports two-button chords.
  • 100% offline — transcription runs locally with whisper.cpp. No audio ever leaves the device.
  • Vulkan GPU acceleration — optional, ships a Vulkan-enabled voxtype binary for faster transcription with larger models. No system packages, no modifications to SteamOS.
  • Model picker — defaults to base.en (~140 MB, English). Swap to larger or multilingual models from the Settings panel.
  • Auto-start on boot — enable once, it's always ready.

Install

Via Decky Store (recommended, coming soon)

The plugin is currently awaiting review for the official Decky Plugin Store. Once merged, it'll be installable with one tap from the Decky store in Game Mode.

Sideload from a release zip

  1. Grab the latest decky-voxtype-*.zip from the Releases page.
  2. In Game Mode, open Decky → gear icon → Developer → enable Developer Mode.
  3. A new Developer section appears. Tap Install Plugin from URL and paste the zip's release URL. Or copy the zip to /home/deck/ in Desktop Mode and unzip it into /home/deck/homebrew/plugins/.
  4. Reload Steam (power menu → Switch to Gaming Mode restarts the UI if you're already there).

First use

  1. Open the Voxtype panel from Decky's Quick Access menu.
  2. Hit Download model — pulls base.en (~140 MB). One-time, takes under a minute on a decent connection.
  3. Toggle Enable Voxtype.
  4. Press R4 (or whatever you set as PTT). A Listening toast appears.
  5. Talk. Press R4 again.
  6. A toast confirms the transcription. Text is on your clipboard. Paste it anywhere — focus the target text field and use the on-screen keyboard's paste action, or Ctrl+V if you have a keyboard attached.

Settings

Setting Default Notes
Enable Voxtype off Starts/stops the daemon.
Auto-start on boot on Daemon starts automatically when the plugin loads.
Model base.en English-optimized, 140 MB. Larger and multilingual models available in the dropdown.
PTT Button R4 Any controller button except STEAM / QAM.
PTT Chord none Optional second button. When set, recording fires only when both are pressed — useful if R4 is already bound in a game.
GPU acceleration (Vulkan) off Swaps the daemon to the Vulkan-enabled voxtype binary. Noticeably faster for larger models.

Language support

The default base.en model is English-only. For other languages, pick a non-.en model from the Settings dropdown (base, small, medium, etc.). Larger models are more accurate but slower and use more VRAM — on the Deck's APU, small is usually the sweet spot for non-English use. Enable Vulkan acceleration if you go larger than base.

Compatibility

  • Steam Deck (LCD and OLED) — tested and supported.
  • Bazzite on handheld PCs — untested; likely works since Decky Loader and the whisper.cpp binaries don't depend on SteamOS-specific components, but the controller event path through SteamClient.Input has only been verified on Deck hardware. Reports welcome.
  • Other SteamOS-like distros — unsupported.

Troubleshooting

"voxtype binary not found" The remote_binary fetch didn't complete on first install. Reinstall the plugin, or grab a prebuilt zip from Releases and sideload it.

Daemon crashes or the toggle flips back to off Check /home/deck/homebrew/logs/decky-voxtype/voxtype-daemon.log for the daemon's stdout/stderr. Plugin lifecycle events are in the numbered .log files in the same directory. Open an issue with the relevant lines.

PTT presses don't do anything Make sure the daemon is enabled (the toggle stays on). Also confirm the button isn't bound to a Steam Input chord in your current game's controller layout — Steam Input can swallow the raw press before the plugin sees it. Try a different PTT button, or set a two-button chord.

Transcription succeeded but clipboard is empty The legacy clipboard fallback was rejected by the CEF context. Reopen the Decky menu briefly so the plugin UI regains focus, then try again.

Transcription is gibberish You're probably on base.en speaking a non-English language. Switch models in Settings.

How it works

  1. The plugin subscribes to Steam Deck controller button events via SteamClient.Input.
  2. When your configured button (or chord) is pressed, it tells the voxtype daemon to start/stop recording.
  3. Voxtype transcribes the audio locally with a Whisper model and writes the result to /run/user/<uid>/voxtype/last_transcription.txt.
  4. The plugin reads that file and copies the text to the system clipboard via the Web Clipboard API — the same mechanism other Decky plugins use.

No ydotool, no wtype, no system packages. The Vulkan voxtype binary is shipped alongside the CPU one so GPU acceleration works out of the box.

Development

Requires Node 20+ and pnpm 9.

pnpm install
pnpm run build         # rebuilds dist/index.js

# Package a ready-to-install zip (fetches voxtype binaries, assembles layout):
scripts/pack.sh ./dist-pkg

# Deploy to a Deck over SSH:
scp dist-pkg/decky-voxtype-*.zip deck@steamdeck:/home/deck/
ssh deck@steamdeck "cd /home/deck/homebrew/plugins && unzip -o /home/deck/decky-voxtype-*.zip"

CI (.github/workflows/build.yml) produces the same zip on every push — grab it as an Actions artifact for testing. Tagged pushes (v*) also upload to a GitHub Release.

Credits

License

BSD-3-Clause. Voxtype is distributed separately under its own license — see peteonrails/voxtype.

About

A Voice Transcription plugin for decky loader

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages