First tagged release of Verbatim, a real-time, vendor-agnostic macOS dictation tool with
visible corrections. Supersedes the earlier v0.1.0 tag.
Note on scope. Per the project's own milestone plan
(docs/architecture/git-and-release.md,docs/product/roadmap.md), av1.0.0tag is
defined as landing at milestone M6 — public release, Windows support, signed/notarized
builds. As of this tag, the project is at M4 (functionally complete) / M5 (in
progress): macOS-only, source-only, not code-signed or notarized. This tag reflects
the maintainer's explicit decision to version the current state as1.0.0; it does not
assert M6 exit criteria are met. See Known limitations below.
Highlights
- Real-time dictation with a two-layer pipeline — a live transcript streams as you speak
(never blocked on the correction model), and a correction pass runs when a segment
finalizes. - Visible corrections — removed and replaced spans are shown, not silently rewritten,
before the cleaned text is inserted. - Vendor-agnostic core — speech-to-text and correction are independent, swappable roles
behind two interfaces inpackages/core, with one adapter file per vendor. - Bring-your-own-key, local-first — keys are stored in the OS keychain and sent only to
the vendor you choose. No audio or transcript content telemetry.
macOS desktop app (milestone M4 — functionally complete)
- Menu-bar app with a floating, non-activating overlay that never steals keyboard focus
from the app underneath it. - Focusable Settings window and a first-run onboarding flow for entering provider
keys. - Focused-field text injection via the Accessibility API with a clipboard-paste fallback;
secure/password fields are refused (copied to clipboard instead). - ⌥Space toggle with both tap-to-toggle and hold-to-talk.
- Rust config store + OS keychain; the app owns and supervises its own backend
("sidecar") and injects keys from the Keychain — no key ever crosses the renderer. - Release sidecar packaging so the backend ships bundled inside the app.
Providers
- PyAI (default) — speech-to-text and correction.
- Deepgram — streaming speech-to-text.
- OpenAI — speech-to-text and correction.
- Anthropic — correction.
- Speech-to-text and correction vendors can be mixed (for example Deepgram STT +
Anthropic correction). - Multilingual: non-English dictation routes STT through Deepgram or OpenAI, since PyAI's
speech-to-text is English-only.
Quality & polish (milestone M5 — in progress; shipped in this tag)
- Reliability: retry-with-backoff, streaming keepalive, and auto-reconnect wiring.
- Custom vocabulary: a user term list injected into correction and used to boost STT.
- Snippet text-expansion.
- Formatting modes: prose / message / code / raw.
- Revert-to-raw undo and a paste-last-result hotkey (both configurable).
- Concurrency guard for overlapping dictations.
- Opt-in, metadata-only telemetry with latency capture (content is never sent; transport
is not yet enabled).
Web demo
- Vite browser app with a Demo (no mic) mode that replays a real captured sample — the
full live-transcript, correction-diff, and formatted-output flow with no microphone or key.
Developer experience
- npm-workspaces monorepo:
packages/core,apps/widget,apps/backend,apps/web. - Headless core CLI pipeline (
npm run pipeline) with an offline fixture + mock path. - Vitest unit/integration suite (adapters tested against faithful mock servers, no live
network) and a Playwright end-to-end demo test. - CI gates on every pull request: lint, type-check, tests, secret scanning (
gitleaks),
dependency audit (npm audit), and CodeQL.
Known limitations {#known-limitations-v1}
- macOS only. Windows support is planned for a later release.
- No published binary. Install from source; builds are not yet code-signed or notarized.
- Long-input live transcript can occasionally show stitch artifacts from the streaming
provider; the final (batch-transcribed) output is unaffected. - Experimental, not verified end-to-end: Meetings ("Granola mode") and command-mode /
wake-word features are prototypes. Meetings requires a macOS loopback audio device. - Provider availability and exact model behavior depend on your vendor account and keys.
Upgrade notes
- First release — no migration required. If you had checked out the short-lived
v0.1.0tag,
re-tag/pull tov1.0.0;v0.1.0has been removed. - Copy
.env.exampleto.envfor standalone/local development, or enter keys in the
desktop app's Settings window (stored in the OS keychain).