Breaking for Mac users: please delete your old OpenWhispr first. 1.7.0 uses a new app ID — we had to migrate Apple Developer accounts, so you'll be asked to re-grant permissions on first launch. Notes, settings, API keys, and downloaded models carry over automatically.
Summary
- More sign-in options — new: Sign in with Microsoft, Sign in with Apple on macOS. Auth runs on our own infra now (migrated to Better Auth); self-hosters can point at their own server.
- Sessions in your OS keychain — survive crashes and Electron restarts. No more random sign-outs.
- API keys encrypted at rest — all 12 BYOK + enterprise creds moved from
.envto the OS keychain. Silent one-time migration on first launch. - Background meeting recording — navigate to other notes, open Settings, switch tabs; the audio pipeline keeps going. New floating pill shows live mic levels and clicks back to the recording note.
- Per-note diarization preferences persist across stop/resume.
- Cleaner mic capture with a new acoustic gate + better echo cancellation. Music pause/resume on Windows works again.
- Per-scope LLM setup — pick different providers/models for cleanup, agent, formatting, and chat. You can now have text cleanup toggled ON but your dictation agent toggled OFF.
- NVIDIA Parakeet
parakeet-unified-en-0.6b— new English-only model, 5.91% avg WER, ~631 MB. openwhisprCLI talks directly to the desktop app via a local HTTP bridge (127.0.0.1, bearer-token); falls back to cloud when the app is closed.- Proxy-aware fetches + OS CA trust — corporate TLS interception works.
- Auto-learn corrections now work for Cyrillic, CJK, Arabic, Devanagari.
- A bunch of other small bug fixes and performance improvements.
Detailed changelog
- build(mac): migrate Apple signing to Gizmo Labs Inc. by @gabrielste1n in #639
- fix(qdrant): set cwd to STORAGE_DIR so packaged app doesn't crash on startup by @gabrielste1n in #640
- feat(sync): cross-device delete propagation by @gabrielste1n in #646
- feat(meeting): interop cloud streaming providers + AEC/VAD improvements by @gabrielste1n in #656
- Re-grant permissions modal for 1.6.11 upgraders by @gabrielste1n in #659
- fix(chat): persist first user message when creating a new conversation by @xAlcahest in #662
- fix(tls): trust OS CA store for Node-side TLS; keep realtime WS on OpenAI only by @gabrielste1n in #657
- Fix adding non-ASCII languages to dictionary by @wake0up0ne0 in #666
- Fix dictionary correction tracking for TextPattern-based controls (alongside existing ValuePattern support) by @wake0up0ne0 in #665
- Bundle ID migration: com.herotools.openwispr → com.gizmolabs.openwhispr by @gabrielste1n in #669
- feat(cli): local HTTP bridge for unified CLI by @gabrielste1n in #676
- fix(notes): update folder selection when moving notes between folders by @gabrielste1n in #678
- refactor: split dictation cleanup from dictation agent + per-scope LLM config by @gabrielste1n in #677
- refactor(auth): switch desktop to Better Auth + add Microsoft sign-in by @gabrielste1n in #686
- fix(network): proxy-aware fetches + actionable connectivity errors by @gabrielste1n in #687
- chore(release): 1.7.0 confidence cleanup by @gabrielste1n in #689
- ci(release): rename VITE_NEON_AUTH_URL → VITE_AUTH_URL by @gabrielste1n in #690
- fix(auth): initiate desktop OAuth from browser, not renderer by @gabrielste1n in #692
- feat(auth): Sign in with Apple on macOS by @gabrielste1n in #691
- fix(onnx): cap embedding segments and isolate inference in utility process by @gabrielste1n in #693
- fix(sidecars): reap children on quit and on next launch (#683) by @gabrielste1n in #694
- docs(changelog): plain-English 1.7.0 + lockfile refresh by @gabrielste1n in #695
- fix(llama): raise Vulkan startup timeout, stop server before re-download by @xAlcahest in #698
- fix(media): fall back to media key when GSMTC fails on Windows by @xAlcahest in #697
- docs(readme): acknowledge Hugging Face as model hub by @gabrielste1n in #703
- feat(transcribe): generate clientTranscriptionId for cloud sync dedup by @gabrielste1n in #702
- feat(security): encrypt API keys at rest via safeStorage by @gabrielste1n in #629
- fix(media): use AsTask bridge for WinRT async calls in GSMTC scripts by @xAlcahest in #706
- fix(media): resume playback on no-audio-detected event by @kdenney in #701
- feat(auth): switch desktop to Authorization: Bearer + safeStorage by @gabrielste1n in #704
- fix(ci): compile macos-media-remote binary in release and build workflows by @kdenney in #700
- feat(reasoning): self-hosted OpenAI-compatible parity + thinking-mode toggle by @gabrielste1n in #708
- feat(parakeet): add parakeet-unified-en-0.6b model by @milanleonard in #713
- feat(meeting): background recording with floating pill and responsive layout by @gabrielste1n in #709
- fix(runtime): unblock model downloads, surface ONNX worker errors, dedupe hotkey re-register by @gabrielste1n in #716
- fix(linux): resolve symlink in launcher wrapper by @xAlcahest in #717
New Contributors
- @wake0up0ne0 made their first contribution in #666
- @kdenney made their first contribution in #701
- @milanleonard made their first contribution in #713