Desktop dictation (Windows: primary target; macOS supported): double‑tap Caps Lock to start and stop dictating. The transcript is pasted with Ctrl+V (Windows / Linux) or ⌘V (macOS) into the focused field and saved to history.
Transcription is local-only: bundled whisper.cpp (whisper-cli) processes recordings on this machine. The app does not use Web Speech or cloud speech APIs.
This file is the onboarding map for contributors and coding agents: product summary, settings, stack, and how to run, build, and ship.
| Layer | Choice |
|---|---|
| Desktop shell | Tauri 2 (Rust src-tauri/, tray, IPC, global shortcut plugin) |
| UI | React 19, TypeScript, Vite, Tailwind CSS v4 |
| Dictation hotkey | @tauri-apps/plugin-global-shortcut |
| Overlay position | @tauri-apps/plugin-positioner |
| STT | whisper.cpp local whisper-cli sidecar |
Frontend entry: src/ (main window, floating overlay, transcription pipeline). Native commands and prefs: src-tauri/src/.
- Hotkey: global Caps Lock, double‑tap to toggle dictation on/off.
- Floating dictation bar (overlay): status while dictating; compact when idle depending on settings.
- Paste-to-focus: put the caret in the target field, then dictate; final text is pasted via simulated Ctrl+V (⌘V on macOS) and optionally Enter — see settings.
- History in the main window: tap a row to copy; Clear all.
- Tray: closing the main window does not quit the app; use tray Show / Quit.
- Theme: system / light / dark (applies to main window and overlay).
All of these live in the main window Settings drawer (gear). Values are persisted in Rust app preferences on the desktop.
| Setting | Meaning |
|---|---|
| Dictation bar | Always visible vs Hide when idle (overlay presence when you are not dictating). You can also Hide dictation bar from the bar’s context menu. |
| After dictation | Paste text — clipboard + Ctrl+V only. Paste and send — same, then simulates Enter for chat-style fields. |
| Appearance | System, Light, or Dark. |
To develop or build from source
-
Desktop targets: primarily Windows 10+; macOS 11+ is supported via Tauri (WKWebView) with the fixes in this repo.
-
Windows only: Microsoft Edge WebView2 (usual on Windows 10/11), Rust (rustup) MSVC toolchain, installers need WiX + NSIS per Tauri Windows prerequisites.
-
Using a built installer /
.appyou downloaded: no Xcode, CMake, or Rust needed — Whisper is bundled inside the package (whoever shipped it rannpm run setup:whisperandnpm run tauri build). -
Cloning this repo and building yourself on macOS 11+:
- Not Apple’s huge Xcode.app necessarily —
xcode-select --install(Command Line Tools: clang + macOS SDK) is enough for Rust and for the Whisper CMake step. - CMake (e.g.
brew install cmake), Rust, Node.js, andnpm run setup:whisperbeforenpm run tauri dev/tauri build.
- Not Apple’s huge Xcode.app necessarily —
-
Node.js 18+ and npm — all desktops.
End users
- Allow microphone when the OS prompts. On macOS, grant Accessibility if the system asks — simulated ⌘V paste relies on accessibility permissions.
npm installFetch Whisper binaries and the quantized model (needed for tauri dev / tauri build):
-
Windows — zipped OpenBLAS (or
--gpucuBLAS) release + DLLs intoresources/whisper_runtime/. -
macOS — CMake builds whisper.cpp (first run can take several minutes): needs Apple Command Line Tools (
xcode-select --install; full Xcode optional) plus CMake andtar.
npm run setup:whisperOptional Windows, download the NVIDIA/cuBLAS Whisper build:
npm run setup:whisper -- --gpuOn Linux, the setup script downloads the model only unless you arrange sidecars yourself — see src-tauri/binaries/BINARIES.txt.
App icons: npm run tauri icon (expects app-icon.svg or pass a path to a PNG).
# Full desktop app (Vite + Tauri)
npm run tauri dev
# Web UI only (no Tauri / no dictation shell)
npm run devAutomated check used in this repo (Vitest + production Vite build + cargo test):
npm run verifyProduction build (after npm install and, on Windows, npm run setup:whisper):
npm run tauri buildInstallers and bundles appear under src-tauri/target/release/bundle/, typically:
- NSIS:
nsis/Mello Voice_<version>_x64-setup.exe - MSI:
msi/Mello Voice_<version>_x64_en-US.msi
Version comes from src-tauri/tauri.conf.json (and related package metadata).
If the build fails because app.exe cannot be overwritten (Access denied), close dev instances or run taskkill /IM app.exe /F, then build again.
Unsigned builds may trigger SmartScreen (“Unknown publisher”). Code signing is outside this repo.
- First run: allow microphone when Windows prompts; if blocked, fix under Settings → Privacy & security → Microphone.
- Open the app (main window + tray). You may close the main window; dictation keeps running from the tray.
- Focus the field. Double‑tap Caps Lock to listen, double‑tap again to stop — then After dictation runs.
- Tray: Show / Quit. Dictation bar: right‑click for Hide dictation bar.
mello-voice/
├── src/ # React UI, hooks, transcription glue
├── src-tauri/ # Tauri app, Rust commands, Whisper sidecar
│ ├── binaries/ # whisper-cli (after setup)
│ └── resources/ # models and runtime DLLs
└── scripts/setup-whisper-assets.mjs
Shipping a version (GitHub Release, Windows installers): ask the agent to release — see RELEASE.md, AGENTS.md, and .cursor/skills/mello-voice-release/SKILL.md. Local Windows build troubleshooting: .cursor/skills/mello-voice-windows-release/SKILL.md.
Marketing site: the landing page in landing/ deploys to GitHub Pages at https://2ne.github.io/mello-voice/ when landing/ changes on main.
Mello Voice is free and open source. If it saves you time, optional tips help fund development — Ko-fi. No account or payment required to use the app.
MIT — use, modify, and distribute with attribution. Mello Voice is open source; the app itself still runs entirely on your machine.