VoiceWave

> ๐๏ธ Offline, privacy-first dictation for Windows ยท no cloud ยท no subscription trap ยท Whisper accuracy ยท < 500 ms cold start
winget install VoiceWave.LocalCore

Live Demo
VoiceWave in action: pill activation, live capture, and instant text insertion โ all on-device.
Install
Via Microsoft winget (one line, recommended):
winget install VoiceWave.LocalCore
winget upgrade VoiceWave.LocalCore keeps you current on every future release.
Or grab the latest installer directly and run it. Once installed, VoiceWave keeps itself current via signed in-app auto-update.
Why VoiceWave?
| VoiceWave | Wispr Flow Pro | Dragon Professional | Windows Speech |
|---|
| Price | Free | $15/mo | ~$500 one-time | Free |
| Works Offline | โ
Always | โ Cloud-only | โ
Yes | โ
Yes |
| Audio stays on device | โ
Never leaves | โ Sent to servers | โ
Local | โ
Local |
| Accuracy engine | Whisper (local) | Whisper (cloud) | Proprietary | Proprietary |
| Open Source | โ
| โ | โ | โ |
| Windows | โ
| โ
| โ
| โ
|
| Free tier | โ
(open source) | 2,000 words/week | โ | โ
(limited) |
| Latency | < 500 ms | Network-dependent | < 1 s | Varies |
| Customizable | โ
Rust/React | โ | โ | โ |
Wispr Flow Pro pricing source: wisprflow.ai/pricing (April 2026 โ $15/mo, $12/mo billed annually).
What's New in 0.6.0
Hands-free dictation, dark mode, and deeper insights
- Double-tap the push-to-talk shortcut to dictate hands-free. Pause when you
are done or press the shortcut again; Escape cancels the active dictation.
- Hands-free capture keeps a short release tail when stopped manually, so
quiet final syllables are not clipped.
- VoiceWave now has complete Light, Dark, and System themes across the app
shell, dashboard, settings, and floating recording pill.
- Statistics now include insertion-success-aware totals, a GitHub-style
streak heatmap, and richer insight panels.
What's New in 0.5.9
Usage visibility and dashboard polish
- Optional anonymous activated-install counting records one first successful
dictation and at most one active marker per day. It is off by default and
never sends audio, transcript text, account identity, filenames, or settings.
- Updates keep the same random installation identifier, so updating VoiceWave
does not inflate the active-install count.
- The Home greeting now uses the signed-in profile name or a general guest
welcome instead of a hardcoded name.
- The website now labels and counts installer transfers only, excluding updater
metadata checks and unrelated release assets.
What's New in 0.5.8
Crash safety
- VoiceWave could refuse to launch after an unclean shutdown. If the machine
lost power or the app was force-killed while saving one of its data files,
that file could be left with its size recorded but no contents โ and the app
would then fail to start, with no window and no message. Every store now
recovers: it finishes the interrupted save, falls back to a backup, and if
neither can be read, sets that file aside and starts from defaults.
- Saves are crash-safe. Data is written to a temporary file and flushed to disk
before replacing the original, so losing power mid-save can no longer destroy
your settings, dictionary, snippets, history, or stats.
- A damaged encryption key is set aside and regenerated instead of blocking
startup, and VoiceWave tells you once if anything had to be reset.
What's New in 0.5.7
First-run reliability
- A failed speech-model download no longer traps setup. If the one-time
download fails โ no connection, a captive network, a dropped link โ VoiceWave
now says so and offers Retry instead of showing a progress bar that never
moves. Whatever downloaded before the failure is kept.
- Cancel actually cancels a model download, and keeps the bytes already
fetched so Install resumes rather than restarting. Pause and Resume, which
never applied to these models, are no longer shown.
- Quitting during a download no longer leaves a background helper process
running after the app is closed.
- Setup shows downloaded size ("213 MB of 465 MB") alongside the percentage,
so a slow connection reads as slow rather than stuck.
What's New in 0.5.6
Voice snippets
- Say a phrase you choose and VoiceWave inserts your saved text exactly as you
wrote it โ casing, punctuation, line breaks, and URLs preserved
byte-for-byte. Triggers work standalone or inline, and repeat within one
dictation.
- Saved expansions are protected through deterministic formatting and the
on-device polish pass, so neither the formatter nor the language model can
reword content you own.
- Encrypted on device, works signed out and offline, replicates across your
devices when signed in. Own page in the app with search, edit, and delete.
Dictionary fixes and local-first storage
- Removed a plaintext dictionary backup file left on disk by an older
migration, and stopped unapproved suggestions from influencing
transcription before you approve them.
- Dictionary storage was rebuilt so the encrypted on-device store is the
single source of truth in every account state, with optional cloud storage
as replication on top โ tombstoned deletes that propagate, and local writes
that never roll back on a remote failure. Groundwork rather than a
user-visible change: cloud sync ships disabled in release builds.
What's New in 0.5.5
Mode-aware polish profiles
- Coding and Writing use separate, compact on-device prompts tuned for the
bundled Qwen2.5-1.5B model. A Rust fidelity gate accepts the result or falls
back to deterministic formatting when the model is slow or uncertain.
- Literal never calls the language model and keeps fillers and repeated words;
Standard preserves immediate insertion and can offer an optional polished
version afterward.
- Selecting an AI-shaped profile prepares the local model automatically, and
the active profile is warmed after launch. (The four-thread production CPU
cap was listed here in error โ it landed after this build was cut and ships
in 0.5.6.)
What's New in 0.5.0
Zero-setup offline transcription
- The installer now ships a self-contained CPU faster-whisper runtime โ a fresh install transcribes the default model immediately, with no Python install and no manual setup, fully offline.
On-device AI polish (opt-in)
- An optional local LLM pass cleans up filler, capitalization, and punctuation after dictation and offers the polished text on the pill. It runs entirely on-device and uses a fail-closed fidelity validator; rejected output falls back to deterministic text.
Productivity
- Dictionary export / import โ back up and move your custom-term dictionary between machines.
- Interactive pill actions โ one-tap actions on pill notices (copy the transcript, add a term).
- Mic-volume guard โ a Dynamic-Island-style pill notice warns when your input level is too low, so quiet-mic dictations don't silently fail.
Insertion
- Terminals are now detected by process, not window title โ dictation pastes correctly into the Codex and Claude desktop apps (previously misread as CLIs and forced to clipboard-only).
- The "Polished version ready" pill surfaces occasionally rather than after every dictation; fallback and error notices still show every time.
What's New in 0.4.0
Updates
- In-app auto-update โ VoiceWave checks GitHub on launch and offers a one-click "Install & Restart" when a newer signed release is available. Updates are cryptographically signed and verified before install.
What's New in 0.3.1
Audio pipeline
- Soft word endings ("s", "th", "f", drifted "e") no longer clipped โ post-release capture window lifted to 300 ms, with a matching 300 ms trim pad on both capture and inference layers.
- Volume-adaptive trim thresholds โ quiet speakers and post-pause resumptions now land fully instead of being truncated as silence.
- All aggressive DSP (pre-emphasis, gain normalization, noise attenuation, hum notch, soft limiter) defaults to off. Whisper receives audio as captured.
Inference
- Cold-start prewarm at app launch โ first dictation drops from 2โ5 s to ~500 ms.
- Extra hallucination guard:
log_prob_threshold = -1.0 on the primary decode alongside the existing no_speech and compression_ratio floors.
- Opt-in
whisper.cpp models: wcpp-small.en (~466 MB) and wcpp-large-v3-turbo (~1.6 GB). Vulkan backend available behind the whisper-vulkan cargo feature.
Reliability
- Push-to-talk release no longer drops silently on key bounce.
- Clipboard paste keeps the dictated text โ no more "old content pasted" after delayed Ctrl+V.
- SendInput refuses to type into Windows security dialogs (UAC, Credential Manager, PIN prompts).
- Worker stdout drained between requests to prevent ID-mismatch stalls after cancel/retry.
- Decode threads reserve one CPU core for the UI to stop taskbar stutter during transcription.
Product At A Glance
| Area | Summary |
|---|
| Runtime | Tauri 2 shell + Rust core + React/Tailwind frontend |
| ASR (default) | faster-whisper via a bundled CPU Python runtime (fw-small.en / fw-large-v3), CUDA auto-detected when present โ works offline out of the box |
| ASR (opt-in) | whisper.cpp via whisper-rs (wcpp-small.en / wcpp-large-v3-turbo), Vulkan feature flag |
| Privacy Path | No outbound audio transport, no cloud transcription path in v1 |
| UX Contract | Explicit state model: idle -> listening -> transcribing -> inserted/error |
| Insertion Reliability | Direct insert -> clipboard fallback -> history fallback (blocked on Windows security dialogs) |
| Platform Scope | Windows implementation/validation active since 2026-02-10 |
Core Capabilities
| Icon | Capability | Technical Detail |
|---|
 | Local-Only Privacy | Production path has no outbound audio transport and no cloud transcription rewrite path for v1. |
 | Deterministic Runtime Flow | Audio capture, inference orchestration, insertion, and persistence are handled in Rust services behind Tauri commands/events. |
 | Fallback-Safe Insertion | Insertion engine prioritizes direct insertion and degrades to clipboard/history fallback to preserve user text. |
 | Verified Model Lifecycle | Model install/switch includes cataloging, checksum verification, and recommendation logic. |
Runtime Architecture

Primary architecture boundary is defined in docs/rfc/0001-system-architecture.md.
Core modules:
desktop-shell (Tauri host)
audio-pipeline (capture, resample, buffering, VAD)
inference-worker (whisper.cpp integration + cancellable jobs)
insertion-engine (direct/clipboard/history reliability chain)
hotkey-manager (global binding lifecycle)
model-manager (catalog/download/checksum/health)
persistence (local settings/history/stats)
diagnostics (redacted export, opt-in)
experience-state (shared state contract for UX)
Status Snapshot (Repository Baseline)
As documented in this branch:
- Phase 0 complete.
- Phase 1 complete for Windows runtime integration.
- Phase 2 implemented and validated in Windows execution scope.
- Phase 3 implemented and validated for Windows rescue baseline.
- Phase 4 and Phase 5 gate automation is implemented (
phase4, phase5, and reliability checks).
- Release gate automation is implemented (
npm run release:gate).
- Phase 6 not started.
Open release blockers called out in current docs:
- Artifact freshness policy now requires fresh evidence (
<= 7 days) for release-candidate decisions.
- Reliability exit thresholds are stricter (
insertion >= 98%, correction <= 12%, crash-free >= 99.5%, TTFSD <= 3).
- Legal/compliance checklist and risk register are now release-gate inputs and must stay current.
References:
- docs/PHASE3_IMPLEMENTATION.md
- docs/PHASE4_READINESS.md
- docs/PHASE5_READINESS.md
- docs/phase3/artifacts/windows-manual-acceptance-2026-02-11.md
Stack
- Frontend:
React 18 + Tailwind + Vite
- Desktop shell:
Tauri 2
- Core runtime:
Rust
- ASR (default):
faster-whisper (CTranslate2) via Python subprocess; CUDA auto-detected
- ASR (opt-in):
whisper.cpp via whisper-rs; Vulkan behind whisper-vulkan cargo feature
- Local storage/ops: encrypted billing files + local runtime state/history artifacts
Quick Start
- Install dependencies:
npm install
- Run frontend dev mode:
npm run dev
- Optional: enable cloud auth + sentence sync (Firebase):
Copy-Item .env.example .env
Then fill the VITE_FIREBASE_* keys in .env from your Firebase project settings.
When configured, VoiceWave enables:
- Email/password sign-up + sign-in
- Per-user cloud storage of only the latest 5 sentences
- Per-user synced approved dictionary terms
- Recent sentence list in Home and Dictionary views
Firestore rules template is provided at:
-
docs/firebase/firestore.rules
-
Run tests:
npm run test -- --run
- Build frontend:
npm run build
- Run desktop app (requires Rust/Tauri prerequisites):
npm run tauri:dev
- In app: open
Models, install fw-small.en (recommended default, ~466 MB) or fw-large-v3 for highest accuracy. Optional: wcpp-* whisper.cpp variants live alongside them. Then run dictation from Home.
Validation and Gates
| Command | Purpose |
|---|
npm run phase1:validate | Phase I validation suite |
npm run phase1:battery | Phase I battery/thermal run |
npm run phase2:validate | Phase II validation suite |
npm run phase3:validate | Phase III validation suite |
npm run phase4:prep | Phase IV readiness report |
npm run phase4:gate | Phase IV blocking gate |
npm run phase5:prep | Phase V readiness report |
npm run phase5:gate | Phase V blocking readiness gate |
npm run phase5:reliability | Phase V reliability evidence report |
npm run phase5:reliability:gate | Phase V blocking reliability gate |
npm run release:gate | End-to-end release blocking gate (phase4 + phase5 + risk/compliance) |
npm run test:coverage | Frontend test + coverage thresholds gate |
npm run security:secrets -- -Enforce | Enforced secret leakage scan |
npm run security:deps -- -Enforce | Enforced dependency vulnerability gate |
npm run security:firestore-rules -- -Enforce | Firestore rules schema/policy contract gate |
npm run quality:frontend:gate | Frontend quality gate (coverage + build) |
npm run quality:backend:gate | Backend quality gate (tests + inventory threshold) |
npm run phaseA:cpu | CPU latency sweep |
npm run phaseB:gpu:check | GPU readiness check |
npm run phaseB:gpu | GPU latency sweep |
npm run phaseB:fw | Faster-whisper latency sweep |
Runtime Contract Surface (High-Level)
Phase I baseline commands:
start_dictation(mode)
cancel_dictation()
load_settings()
update_settings(settings)
get_voicewave_snapshot()
Phase II additions include hotkey, permission, and insertion command surfaces.
Phase III additions include model manager, benchmark/recommendation, history, and dictionary command surfaces.
Phase V additions include diagnostics status and export command surfaces.
See full contract list in docs/rfc/0001-system-architecture.md.
Monetization and Entitlements
VoiceWave is free to use. Download, install, and run โ no subscription required.
Reference: docs/monetization.md
Privacy and Security Guardrails
- No outbound audio transport in production path.
- Local-only ASR and deterministic local post-processing in current monetization architecture.
- Model/update verification paths are documented in phase evidence.
- Diagnostics export is user-triggered and revocable.
- Anonymous activated-install analytics is off by default. If explicitly enabled, VoiceWave sends only a
random installation identifier, app version, first-success marker, and once-per-day active marker โ never
audio, transcript text, account identity, filenames, or settings.
References:
- docs/security/threat-model-v1.md
- docs/risk/risk-register.md
- docs/phase4/evidence/update-signing-verification.md
Latest Recorded Validation Evidence
Latest recorded run: 2026-07 (against 0.4.0 baseline).
- Rust library test suite: 218 pass / 0 fail.
- Frontend test suite (
npx vitest run): 34 pass / 0 fail.
npm run build: recorded pass.
cargo check --no-default-features --release: recorded pass.
Reference artifact trail:
- docs/phase3/artifacts
- docs/phase4/artifacts
- docs/phase5/artifacts
- docs/testing/hardware-tier-recommendation-windows.json
CI
Workflow: .github/workflows/ci.yml
Current CI baseline includes:
- Docs formatting checks
- Markdown lint
- Secrets scan
- Phase 0 artifact integrity checks
- Frontend tests and build
- Rust tests and compile paths
- Release gate job (
npm run release:gate) on Windows runner
Local pre-commit guard (recommended):
git config core.hooksPath .githooks
chmod +x .githooks/pre-commit (macOS/Linux only)
Repository Map
src/ # React app and UI runtime bridge
src-tauri/ # Rust core runtime + Tauri shell
voicewave-website/ # Marketing website
docs/ # RFCs, phase plans, evidence, security, testing
scripts/ # Validation, readiness, benchmark, tauri utilities
vendor/ # Local whisper-rs / whisper.cpp vendored deps
Source of Truth Docs
- Product requirements: docs/prd/v1-prd.md
- Architecture RFC: docs/rfc/0001-system-architecture.md
- Test strategy: docs/testing/test-strategy.md
- Hardware tiers: docs/testing/hardware-tiers.md
- Release thresholds: docs/testing/release-thresholds-windows.json
- Legal/compliance checklist: docs/testing/legal-compliance-checklist.md
- Phase recovery plan: docs/PHASE_RECOVERY_PLAN.md
- Implementation ledger: Idea.md
- Phase I implementation: docs/PHASE1_IMPLEMENTATION.md
- Phase II implementation: docs/PHASE2_IMPLEMENTATION.md
- Phase III implementation: docs/PHASE3_IMPLEMENTATION.md
- Phase III remaining: docs/PHASE3_REMAINING.md
- Phase IV readiness: docs/PHASE4_READINESS.md
- Phase V readiness: docs/PHASE5_READINESS.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
Local Verification Utility
# Phase 0 artifact checks
& "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -ExecutionPolicy Bypass -File .\scripts\ci\check-phase0-artifacts.ps1