Penwright
Changelog

What changed in Penwright.

We follow Keep-a-Changelog: every release gets its own entry, every change is listed here in plain language.

[Unreleased]

Latest

Added

Nothing yet.

Changed

Nothing yet.

Fixed

Nothing yet.

[0.1.0] — unreleased

Initial public-readiness milestone. The product, marketing site, and cloud backend are now wired up end-to-end.

Added

  • Local-first dictation. Global hotkey (default Cmd+Shift+Space) starts
  • Screenshot tool. Capture-to-text flow alongside dictation for visual
  • Hybrid cleanup pipeline. Configurable cleanup styles, custom
  • Floating status bar. 220×44 always-on-top pill window that reflects
  • Marketing site (apps/web). Next.js 16 App Router on React 19,
  • Stripe billing + offline license. /billing Stripe Checkout +
  • Dashboard metrics. Account page + admin-facing usage rollups
  • Redesigned UI. Native-feeling Mac look — sidebar nav, settings,
  • Local-first privacy contract. Cloud AI routes (/dictate,
  • CI/CD scaffolding. GitHub Actions for build/test on every push,
  • Fly.io infrastructure. apps/api/fly.toml for the Express API
  • Operations runbook + risk register. docs/runbook.md,

audio capture; whisper.cpp transcribes on-device with Metal acceleration;

llama.cpp cleans up the text with the local model; the result is inserted

into the currently-focused Mac app, with clipboard-paste fallback.

prompts.

dictionaries, and snippets — all applied locally in production.

recording / transcribing / inserting state.

Tailwind v4, EN + DE locales, pricing, checkout, account, billing,

download, blog, features, compare, use-cases, legal pages.

webhook (checkout.session.completed) issues an HS256-signed license JWT

the desktop app stores in macOS Keychain; /license/activate,

/license/refresh, /license/status handle the lifecycle.

surfaced from the API's SQLite store.

dictionary, snippets, onboarding flow.

/transcribe, /cleanup, /dictionary, /snippets, /usage-event)

are mounted only when NODE_ENV !== "production" and

ENABLE_DEV_CLOUD_AI === "true". Production deployments cannot leak

audio/text to the cloud.

tag-driven macOS DMG release, manual Vercel web deploy.

with SQLite on a persistent volume.

docs/risk-register.md.

Known limitations

  • macOS-only build target.
  • DMG ships unsigned by default in CI until Apple Developer ID secrets
  • API is single-instance (SQLite on one Fly volume) — see risk register.
  • No Sentry, no DLQ for Stripe webhooks, no automated SQLite backup yet.

are configured.

Get ahead of the next release.

Install Penwright today. Updates ship automatically.