Local, offline speech-to-text for Windows. One hotkey, instant transcript, straight to your clipboard.
sayso sits quietly in your tray. Press Ctrl+Alt+Space, speak, press it again. Your words are transcribed locally by whisper.cpp and land in your clipboard, ready to paste anywhere. No account, no cloud, no network round-trip.
- Global hotkey dictation: press to record, press to finish, from any app. Rebindable in settings.
- Live preview: watch the transcript form while you speak (updates roughly every 1.5 seconds, with an automatic fallback to batch mode on slow machines).
- Auto-copy: the final transcript is copied to your clipboard the moment it is ready.
- PowerToys-Run-style popup: a minimal always-on-top pill that shows recording state, live text, and the result, then gets out of your way.
- History: every transcription is kept locally with search, copy, and delete.
- Multilingual: automatic language detection or pin one of 98 languages.
- Model choice: tiny, base, small, or medium Whisper models, downloaded on first use and cached locally.
- Microphone selector: pick any input device, with graceful fallback to the system default if it disappears.
- Tray native: close to tray, double-click to reopen, optional autostart with Windows (starts hidden).
- Dark and light themes.
Grab the latest installer from the Releases page:
| File | What it is |
|---|---|
sayso_x.y.z_x64-setup.exe |
NSIS installer (recommended) |
sayso_x.y.z_x64_en-US.msi |
MSI installer |
On first dictation, sayso downloads the Whisper base model (about 148 MB) once and stores it locally. Everything after that works fully offline.
- Launch sayso. It lives in your system tray.
- Press Ctrl+Alt+Space and start speaking. The popup shows the recording state and a live preview.
- Press Ctrl+Alt+Space again to finish. The transcript is copied to your clipboard and saved to history.
- Press Esc while the popup is open to cancel a recording.
- Double-click the tray icon (or use its menu) to open the main window with your history and settings.
| Setting | Description |
|---|---|
| Hotkey | Rebind the global dictation shortcut |
| Language | Auto-detect or one of 98 fixed languages |
| Model | Whisper tiny / base / small / medium, with download manager |
| Microphone | Input device selection with system-default fallback |
| Live preview | Toggle live partial transcripts while recording |
| Autostart | Start with Windows, hidden in the tray |
| Popup auto-hide | How long the result stays on screen |
| Theme | Dark (default) or light |
Your audio never leaves your machine. Transcription runs entirely on your CPU via whisper.cpp. sayso makes exactly one kind of network request: downloading a Whisper model from Hugging Face when you select one that is not cached yet. There is no telemetry, no account, and no cloud API.
Local data lives here:
| Path | Contents |
|---|---|
%APPDATA%\sayso\settings.json |
Settings |
%APPDATA%\sayso\history.json |
Transcription history |
%APPDATA%\sayso\models\ |
Downloaded Whisper models |
%LOCALAPPDATA%\sayso\logs\ |
Log files |
Delete those folders and sayso forgets everything.
Prerequisites:
- Node.js 22+ and pnpm
- Rust (stable, MSVC toolchain) with Visual Studio Build Tools (C++ workload)
- CMake and LLVM (required by whisper-rs; set
LIBCLANG_PATHto LLVM'sbindirectory)
pnpm install
pnpm tauri dev # run in development
pnpm tauri build # build installers into src-tauri/target/release/bundle/Verification suite:
pnpm typecheck
pnpm lint
cd src-tauri
cargo check
cargo clippy -- -D warnings
cargo test --libNote: whisper-rs on Windows needs the MSVC environment (
INCLUDE/LIBfromvcvars64.bat) in addition to CMake and LLVM, otherwise its bindgen step fails with layout errors. Run builds from a Developer PowerShell / Command Prompt for VS or callvcvars64.batfirst.
| Layer | Choice |
|---|---|
| Shell | Tauri 2 (Rust host + WebView2) |
| UI | React 19, Vite, TypeScript, Tailwind CSS 4, Zustand |
| Speech-to-text | whisper-rs (whisper.cpp bindings) |
| Audio capture | cpal, 16 kHz mono |
| Storage | Plain JSON, no database |
Issues and pull requests are welcome. Please run the verification suite above before opening a PR.