Desktop dictation that types into the focused app.
dictate runs as a small tray app. Press your configured push-to-talk shortcut,
speak, and it transcribes into whatever app you are already using.
Current status: early desktop app. Linux and Windows 11 installs, tray controls, startup integration, recent history, model selection, API key storage, update, and uninstall paths are implemented. Signed Windows installer packaging is still future work.
Windows 11 normal install:
powershell -ExecutionPolicy Bypass -Command "iwr -useb https://cdn.jsdelivr.net/npm/@arcforgelabs/dictate@latest/install.ps1 | iex"Open Dictate from the Start Menu after install.
Ubuntu/Debian source install:
./install-ubuntu.shGeneric Linux source install:
./install.shOpen Dictate from the app launcher after install.
Windows source install, from the repo/source directory:
powershell -ExecutionPolicy Bypass -File .\install-windows-wizard.ps1The local .ps1 installer scripts must be run from a checkout or extracted
source directory. They will not work from C:\Windows\System32.
Node/npm users can also run:
npx @arcforgelabs/dictate installOpen Dictate
Select Model
Set API key if using a hosted model
Set push-to-talk shortcut if desired
Hold shortcut, speak, release
Review Recent History when needed
By default, Dictate installs a normal app launcher entry and starts on sign-in. Startup can be changed from Settings.
Windows installed from the hosted installer:
powershell -ExecutionPolicy Bypass -Command "iwr -useb https://cdn.jsdelivr.net/npm/@arcforgelabs/dictate@latest/update.ps1 | iex"
powershell -ExecutionPolicy Bypass -Command "iwr -useb https://cdn.jsdelivr.net/npm/@arcforgelabs/dictate@latest/uninstall.ps1 | iex"Windows from source:
powershell -ExecutionPolicy Bypass -File .\update-windows.ps1
powershell -ExecutionPolicy Bypass -File .\uninstall-windows.ps1Linux:
./update.sh
./uninstall.shUse -RemoveUserData on Windows or --remove-user-data on Linux only when you
also want to remove config, logs, history, and downloaded model data.
- Starts from the Windows Start Menu or Linux app launcher
- Runs as a tray app
- Types dictated text into the focused app
- Supports configurable push-to-talk
- Shows selected model/status in the app UI
- Supports launch on startup
- Stores hosted-provider API keys in the OS secret store
- Keeps a small Recent History for copy/paste recovery
- Provides installer, updater, uninstaller, and doctor paths
Supported provider defaults:
faster-whisper/turbofor local transcriptionopenai/gpt-4o-mini-transcribexai/grok-speech-to-textgemini/gemini-3-flash-preview
Local transcription can use CPU or GPU where supported. Hosted providers require an API key before they can be selected.
dictate
dictate --no-tray
dictate --once
dictate --once --copy
dictate doctor --quick
dictate doctor --quick --fix
dictate doctor --check-model-loadHotword and model options are available from Settings. CLI flags still exist for automation and testing:
dictate --stt-backend faster-whisper --model turbo
dictate --stt-backend openai --model gpt-4o-mini-transcribe
dictate --stt-backend xai --model grok-speech-to-text
dictate --stt-backend gemini --model gemini-3-flash-preview
dictate --add-hotword AcmeWidget
dictate --list-hotwordsUser state is local:
Linux:
~/.config/dictate/config.yaml
~/.local/share/dictate/
Windows:
%APPDATA%\dictate\config.yaml
%LOCALAPPDATA%\dictate\
Repo defaults intentionally ship with hotwords: []. Hotwords are user-specific
and should not be packaged into the public repo default config.
- Dictate does not intentionally write raw API keys to
config.yaml. - API keys configured in the app use the OS secret store.
- Dictation text can be sensitive; check logs and issue reports before sharing.
- Important transcriptions should be verified before relying on them.
- Support and maintenance are best-effort.
MIT. See LICENSE.