Changelog

Presspeech changelog

Release history for the macOS and Windows apps, newest first. The two apps are released separately and have their own version numbers. Each entry links to its GitHub release, which has the complete notes and downloads.

Latest: macOS 0.3.10 (22 October 2026) and Windows 0.1.12 (22 September 2026).

macOS

macOS releases

macOS 0.3.10

· GitHub release

The full release notes begin with a notice to read before opening this build.

This update adds an optional, more accurate speech model, starts recording sooner after an idle hotkey press, and fixes a freeze after model downloads.

Speech model choice

  • Settings → Dictation → Speech Model now offers Parakeet Ultra alongside the default Parakeet TDT v3. Ultra is a post-trained v3 with the same 25 languages and similar speed, and lower word error rates in FluidAudio's published benchmarks.
  • Ultra is opt-in. Choosing it asks first, then downloads about 630 MB from Hugging Face (v3 is about 480 MB) and verifies every file before use. If Ultra cannot be downloaded, verified, or loaded, Presspeech switches back to v3 and says so.
  • The v3 copy stays on disk, so switching back needs no download. Reset Speech Model Cache resets only the selected model.
  • Parakeet TDT v3 remains the default, and nothing changes unless you choose Ultra. The bundled FluidAudio speech runtime moves to 0.17.7; on the project's comparison recordings, v3 transcripts were unchanged.

Responsiveness

  • Recording starts faster after the hotkey when the microphone was idle. Presspeech now prepares the audio input while idle without starting it, so the microphone and its recording indicator stay off until you press the hotkey. Built-in and USB microphones use this path; Bluetooth, aggregate, virtual, and other wireless inputs start as before.
  • Each recording start writes one line of step timings to the local log, beginning press timing:. It contains durations only, with no key, app, window, or audio content.
  • Presspeech no longer becomes unresponsive for minutes after a speech-model download finishes. Download progress rebuilt the menu for every received chunk; it now updates in the 5% steps the status already shows. This affected first-run model downloads as well as model switches.

Output mute

  • On outputs with no mute control, such as many HDMI and DisplayPort displays, Mute system audio while recording now records without attempting to mute and notes this once in the local log, instead of logging a failed mute on every dictation. Outputs that can mute behave as before.

Diagnostics

  • When automatic insertion stops and the transcript is copied for manual paste, the local log now says why: which destination check failed and at which step, a held modifier key, an unavailable paste key, or a Unicode typing limit. Delivery decisions are unchanged. App names, window titles, transcript text, and clipboard contents are not logged.

Audio and transcription remain local.

macOS 0.3.9

· GitHub release

The full release notes begin with a notice to read before opening this build.

Setup accessibility

  • A clean install now waits for an explicit Download Model choice before starting the first ~500–600 MB speech-model download. Setup also shows the estimated free space needed for download and CoreML preparation before the choice. Set Up Later defers it; an approved download resumes on later launches. Existing installations keep their automatic startup, and a cached model loads without another prompt.
  • Routine model-progress and permission-label updates in Setup Checklist now update the existing accessible elements instead of replacing the full view hierarchy. VoiceOver reading position, keyboard focus, and scroll position remain stable while those values change.
  • Permission actions now distinguish Continue before the first microphone prompt from Open Settings for an earlier denial or system-settings grant; VoiceOver labels name the permission and action without implying Presspeech granted access itself.
  • Once the model, audio input, and permissions are ready, Try Dictation is available even if the configured hotkey has not yet been tested. The scratchpad explains how to use the menu's Start Dictation and Stop and Transcribe actions instead; Done still requires a real hotkey event.

Language hints

  • The macOS Language Hint menu now covers all 25 languages supported by the multilingual Parakeet model. Dutch, Danish, Swedish, Finnish, Hungarian, Estonian, Latvian, Lithuanian, Maltese, and Greek users can now select the same wrong-script filtering that was already available for the other model languages. Auto-detect remains the default.

Delivery authorization

  • Setup now requires both focused-window Accessibility access and Quartz keyboard-event posting before declaring automatic delivery ready. A stale or separately denied posting grant can no longer make Presspeech report a paste that macOS silently discarded; diagnostics identify the two checks, and Try Again refreshes whichever represented TCC service is still missing.
  • When exact-window capture is unavailable, the local log now distinguishes an Accessibility query failure from an invalid frontmost process or a focus change during the bounded query. These fixed categories include no app name, window title, field contents, or transcript text.
  • If a required permission is missing when transcription completes or before delivery, Presspeech now finishes processing and keeps the complete transcript on the clipboard for manual paste. A grant that remains missing returns the app to permission setup; an observed interruption prevents that dictation from being pasted automatically even if the grant returns before delivery.
  • Copy-only notices now say to use Command-V only if the clipboard has not changed. The menu notice can persist until the next dictation, so a later copy can replace the transcript; use Copy Last Transcript if it is available rather than pasting the newer item. This changes guidance, not clipboard ownership or automatic-paste behavior.
  • Copying a History entry no longer clears an uncertain-delivery warning. A successful clipboard copy cannot establish whether the original field already contains all or part of the dictation; inspect it before pasting.

Model-download privacy

  • Public speech-model downloads no longer inherit Hugging Face account tokens from HF_TOKEN, HUGGING_FACE_HUB_TOKEN, or HUGGINGFACEHUB_API_TOKEN. Presspeech removes those credentials only from its own process before FluidAudio can read them; the user's shell, token store, and other applications are unchanged.
  • If that process-local removal unexpectedly fails, Presspeech refuses to start rather than allowing a public model request to carry an account credential. Diagnostics and logs contain variable names only, never token values.
  • Malformed inherited https_proxy or http_proxy values now stop startup before FluidAudio can log the full proxy URL or silently ignore the intended route. The alert and app log identify only the setting name; correct or remove it before relaunching. Valid proxy settings still apply, and a trusted TLS-inspecting proxy can still read model-request headers.
  • The previous macOS 0.3.8 release may have included an inherited Hugging Face token in a public model-download request, although the model needs no account token. This applies to model requests, not dictation audio or transcripts. The 0.3.9 change only removes credentials from Presspeech's process; it does not alter the user's shell or token store. If upgrading from 0.3.8, keep a working model cache and follow the version-specific guidance before a later model download.

Clipboard privacy

  • Keep Previous Clipboard for Manual Restore now also retains an eligible previous clipboard when Presspeech uses clipboard-only recovery because the original focused window is unavailable or has changed. Interrupted direct Unicode fallback follows the same rule. The option remains off by default, and restoration still requires explicit confirmation.
  • Automatic paste, focus-change recovery, Copy Last Transcript, and every copy or cut from Try Dictation now prepare transcript entries with AppKit's current-device-only option. They remain available to local Command-V but do not become available through Universal Clipboard.
  • Transcript entries carry the standard transient, auto-generated, and concealed markers used by cooperating clipboard managers. The concealed marker additionally asks those tools not to display the transcript in clear text or persist it. macOS Clipboard History, third-party software that ignores those markers, and other local clipboard readers remain separate privacy boundaries.
  • A saved previous clipboard is restored with its original items and formats, but is republished for the current Mac only. The original cross-device scope is not recoverable from the snapshot, so restoration fails private rather than making earlier content newly available through Universal Clipboard; Presspeech does not add transcript markers to the restored items.
  • Cut in Try Dictation now keeps the selected text when its protected clipboard copy was replaced or the selection changed before deletion. Clipboard ownership can still change after the final check, so this is not an atomic cut guarantee.
  • When macOS is configured to deny Presspeech pasteboard reads, dictation still replaces the clipboard with the transcript but skips the optional previous- clipboard snapshot without attempting to read it. The restore menu identifies the denied access instead of reporting a generic unavailable representation.

Diagnostic privacy

  • Speech-recognition failures now write only a fixed failure event to the local log. Upstream decoder error descriptions are suppressed because they can include a partial recognition hypothesis.

Audio and transcription remain local. Clipboard text is not written to logs, and these protections do not claim to prevent another local process from reading the current pasteboard.

macOS 0.3.8

· GitHub release

The full release notes begin with a notice to read before opening this build.

This update fixes audio capture when input and output hardware use different sample rates, strengthens automatic text delivery, and adds configurable macOS hotkey combinations.

Audio reliability

  • The capture tap now reads the selected microphone's hardware format instead of inheriting the output device's rate. This prevents apparently successful recordings from producing empty audio when, for example, a 48 kHz microphone is used alongside 44.1 kHz output.
  • If macOS cannot convert a selected microphone's format to the 16 kHz mono stream required by speech recognition, audio startup now fails with a recovery message instead of appearing ready and silently discarding every recording.
  • Recordings that end too quickly now say to speak longer instead of silently disappearing. A capture that returns no samples points to microphone recovery in the HUD, menu, Setup Checklist, VoiceOver, and diagnostics, with a direct Check Microphone… action in the menu and Dock menu.
  • Setup Checklist identifies the selected microphone, explains when an unavailable saved device has fallen back to the system default, and provides a keyboard-accessible chooser beside the audio check.

Safer text delivery

  • Presspeech preserves the frontmost process and exact Accessibility-focused window from recording through automatic paste. When the destination does not expose that window identity, delivery stays in manual clipboard recovery so an uncertain destination cannot receive an automatic paste.
  • Automatic clipboard restoration and its delay presets are retired: a timer cannot establish that a slow destination has consumed the paste. The new Keep Previous Clipboard for Manual Restore option requires a fresh opt-in, including for users who previously enabled automatic restoration.
  • With that option enabled, an eligible complete previous clipboard snapshot stays only in memory for up to five minutes. After checking that the latest dictated text arrived, choose Restore Previous Clipboard… and explicitly confirm. Cancel is the default; confirmation is not an operating-system acknowledgement.
  • Consecutive dictations preserve the original snapshot and original deadline, which includes time asleep. Expiry, newer clipboard ownership, disabling the option or quitting discards the snapshot without an automatic rewrite. Clipboard ownership is checked after focus lookups and immediately before paste; a newer copy stops delivery. A stale confirmation cannot restore a different dictation's offer, and a failed restore never retries another write.
  • Clipboard snapshots are capped at 64 MB and 256 representations. Oversized, unusually complex, incomplete, or concurrently changed clipboards are never retained as partial restore offers; dictation continues where ownership is stable, and the menu explains when the previous clipboard was not kept.
  • Update checks accept only releases that GitHub marks immutable.

Flexible hotkeys

  • Record Hotkey can now save combinations using Command, Control, or Option with another key, with optional Shift, alongside the existing right-side modifier and function-key choices.
  • Complete combinations persist across restarts and work in hold or toggle mode. Unsafe shortcuts and ordinary unmodified typing keys remain blocked, and a binding that cannot be saved rolls back to the previous hotkey.
  • Recording a modifier no longer triggers an AppKit exception. Releasing a right-side modifier preserves the selected combination when its left-side partner remains held, including keys held before the recorder opens.

Keyboard accessibility

  • Interactive windows now request automatic Tab and Shift-Tab order recalculation. Setup Checklist also refreshes that order when it replaces controls, alongside its existing keyboard focus preservation.

Community compatibility evidence

  • Support → Test App Compatibility… now opens the privacy-safe repeated target-app protocol directly from the app. The protocol collects aggregate delivery and focus-safety outcomes without asking users to publish dictated text.

Shareable diagnostics

  • Copy Diagnostics now omits exact microphone names, raw startup errors, recent log lines and nonstandard application paths. It keeps status and configuration summaries useful for support; detailed errors remain in the local log for review before sharing.

Audio and transcription remain local. Transcript text and clipboard contents are not written to the diagnostic log, and the global listener does not record ordinary typed keys.

After installing this release, you can help verify automatic paste and safe recovery in one target app by running the short, privacy-safe compatibility protocol. Passing reports are useful too; share only aggregate outcomes from blank, disposable fields, never dictated text or clipboard contents. Before sharing, check the support guide for a current reporting route. If issue creation is restricted and no comparable open report accepts comments, keep the worksheet draft private and retry later. A downloaded draft stays local; it is not submitted or monitored. Do not send a report elsewhere as a workaround.

macOS 0.3.7

· GitHub release

This update keeps completed dictation bound to its original window and makes setup, recovery, and core controls easier to reach without relying on a visible menu-bar item or the default hotkey.

Safer text delivery

  • Presspeech captures the destination before starting the audio engine and rechecks it before every automatic paste path.
  • If focus changes while Presspeech is recording, transcribing, or preparing the clipboard, the transcript is copied for manual paste instead of being sent to the newly focused window.
  • The menu-bar item keeps the Copied — press ⌘V to paste recovery action visible until the next dictation, even when transcript history is disabled. The recording indicator and VoiceOver announce the same recovery state.

Setup and recovery

  • Setup Checklist now tracks the speech model, audio input, each permission, and the hotkey independently, with a retry or grant action beside the step that needs attention. It now waits for a real hotkey event before changing from Close to Done, rather than treating event-tap creation as proof that the configured key reaches Presspeech. The window is resizable and scrolls on smaller screens.
  • Opening Presspeech again while it is already running brings Setup Checklist forward instead of silently doing nothing.
  • Show in Dock provides a persistent alternative when the menu-bar item is hidden by a notch or a crowded menu bar. Its Dock menu exposes dictation, Settings, support, and recovery controls; the standard application menu also provides Settings and Command-comma while Dock mode is enabled.
  • If macOS has registered Launch at Login but still needs approval, the setting says so and opens the relevant System Settings pane instead of turning the registration off.

Accessibility and controls

  • Named Start Dictation and Stop and Transcribe menu actions provide a hotkey-free path and can be invoked with macOS Voice Control.
  • The menu-bar control exposes loading, ready, recording, transcribing, and recovery states to VoiceOver.
  • The recording indicator follows Reduce Motion, Reduce Transparency, Increase Contrast, and Differentiate Without Color as those settings change.
  • Standard Edit and Window menus provide Undo, Cut, Copy, Paste, Select All, Close, Minimize, Zoom, and window discovery with the usual keyboard commands.
  • Record Hotkey now previews a right-side modifier or F-key and waits for explicit confirmation instead of changing the shortcut on the first eligible keypress. Native Tab, Return, Space, and Escape dialog controls remain usable, and F-key choices explain when an Apple keyboard may require Fn.
  • Dictation recovery instructions are announced to VoiceOver rather than being available only as a visual or audible cue.

Dictionary usability

  • Large Dictionary & Shortcuts collections now open in a searchable manager with keyboard selection plus add, edit, and multi-item delete controls, instead of expanding into an impractically long menu.
  • Double-clicking a rule opens it for editing, and a native shortcut menu puts Edit and multi-item Delete beside the selected rows for pointer and VoiceOver users. Truncated table cells expose their complete value in a tooltip.
  • Invalid dictionary edits stay open with their draft text intact, focus the field that needs attention, and explain empty, oversized, unsupported, or full-library input instead of appearing to save an item that was discarded.

Stability

  • The optional recording HUD now stays hidden instead of crashing if macOS temporarily reports no available displays during sleep or display reconfiguration.

Audio and transcription remain local. Transcript text, dictionary contents, and shortcut contents are not written to the diagnostic log.

macOS 0.3.6

· GitHub release

This patch updates the local speech engine with upstream correctness fixes for longer dictations and language hints.

Dictation reliability

  • Long recordings preserve token order and content more reliably where the speech engine joins its 15-second processing windows.
  • Final long-form windows align to the last speech-bearing audio instead of trailing silence, reducing the chance of lost content near release.
  • Language hints no longer apply an English token blocklist outside the narrow French case it was designed for.
  • Transient model-download failures preserve the existing cache instead of discarding usable files.

The notarised app zip is now roughly 8-9 MB rather than 2.5 MB because the current FluidAudio package statically links additional support code. This does not add another speech-model download, background service, or network call. Audio and transcripts remain on the Mac, and transcript text never enters the diagnostic log.

macOS 0.3.5

· GitHub release

This patch lets longer macOS dictations finish naturally while preserving the automatic recording safety cutoff.

Configurable recording length

  • Settings → Behavior → Maximum Recording Length now offers 1, 2, 5, and 10 minute limits. The existing two-minute limit remains the default.
  • Reaching the selected limit still stops, transcribes, and pastes the captured dictation, so a forgotten toggle cannot record indefinitely.
  • Hand-written max_recording_seconds defaults values are constrained to 30 seconds through 10 minutes to keep in-memory audio bounded.

There is no speech-model migration in this release. Audio and transcripts remain on the Mac, and transcript text never enters the diagnostic log.

macOS 0.3.4

· GitHub release

This urgent patch fixes a macOS hotkey regression introduced in 0.3.3.

Hotkey reliability

  • Dictation starts normally again when Presspeech is ready. Version 0.3.3 incorrectly treated the ready state as if the app were terminating, so every hotkey press was rejected.
  • The hotkey self-test now distinguishes a ready app, a temporarily blocked app, and an app that has actually terminated.

There is no speech-model migration in this release. Audio and transcripts remain on the Mac, and transcript text never enters the diagnostic log.

macOS 0.3.3

· GitHub release

This patch makes the dictation hotkey recover cleanly when Presspeech is not yet able to start another recording, and improves privacy-safe troubleshooting for hotkey permission problems.

Hotkey reliability

  • In toggle mode, a press received while the model is still loading or a transcription is in progress no longer consumes the next valid press. As soon as Presspeech is ready, the next press starts recording normally.
  • Presspeech now records whether the macOS keyboard event tap is actually delivering events, helping distinguish a stale Input Monitoring grant from an unused hotkey.
  • Diagnostics can identify an unmatched modifier key without recording ordinary keycodes or any typed text.

There is no speech-model migration in this release. Audio and transcripts remain on the Mac, and transcript text never enters the diagnostic log.

macOS 0.3.2

· GitHub release

This patch makes the opt-in clipboard restoration path safer and more reliable across applications with different paste timing.

Clipboard reliability

  • Presspeech now waits longer after posting Command-V before restoring the previous clipboard, giving slower target applications time to consume the dictated text.
  • Temporary transcript clipboard entries stay on the current Mac and carry standard transient markers, so cooperating clipboard managers do not retain text that exists only long enough to paste.
  • Clipboard writes are assembled before Presspeech takes ownership, and stale snapshots are discarded if another application changes the clipboard. When safe restoration is not possible, Presspeech leaves the dictated text in place instead of risking clipboard data loss.

Speech model

The current FluidAudio candidates were re-evaluated on an expanded public speech corpus. Parakeet TDT v3 remains the production model because it still delivers the best accuracy and latency for Presspeech's push-to-talk workflow. There is no speech-model migration in this release.

No audio, transcripts, settings, or clipboard contents leave the Mac.

macOS 0.3.1

· GitHub release

Presspeech now uses its own identity consistently across the app bundle, preferences, correction documents, Application Support data, Homebrew tap, and release tooling.

Clipboard restoration

  • A new opt-in Restore clipboard after paste setting puts the previous clipboard contents back after a dictation paste. It is off by default.
  • Restoration preserves multiple items and representations such as text, images, files, rich text, and links. If every representation cannot be copied safely, or the clipboard changes before restoration, Presspeech leaves the dictated text on the clipboard instead of risking data loss.

Upgrade notes

  • Saved preferences, hotkey choices, local dictionary rules, correction sync configuration, and interrupted-audio recovery state migrate automatically on first launch.
  • macOS privacy grants cannot be transferred between bundle identifiers. Setup Checklist opens automatically so you can grant Microphone, Accessibility, and Input Monitoring once to the current Presspeech identity.
  • The Homebrew install and update command is now brew update && brew upgrade --cask rcourtman/presspeech/presspeech.

No audio, transcripts, settings, or migration data leave the Mac.

macOS 0.3.0

· GitHub release

Presspeech 0.3 establishes the current product identity and adds voice shortcuts, spoken formatting, and a focused first-run dictation test.

New

  • Voice shortcuts map a phrase you say to exact reusable text. They are deterministic, local, and managed alongside dictionary corrections.
  • Spoken formatting commands optionally turn phrases such as “new line”, “new paragraph”, “bullet point”, “comma”, “open quote”, and parentheses into exact formatting without a rewriting model.
  • Try Dictation opens a focused private scratchpad after setup, so the first hotkey test has an obvious destination.
  • FluidAudio is updated to v0.15.5 after model-integrity, cold-download, latency, and real-dictation regression checks.

Upgrade notes

Homebrew users can run:

brew update
brew upgrade --cask rcourtman/presspeech/presspeech

After upgrading, launch /Applications/Presspeech.app. macOS shows its standard downloaded-app confirmation on first launch; choose Open after checking that Apple found no malicious software.

For a previous direct-download install, quit the installed copy, replace it with Presspeech.app, and launch it once.

macOS 0.2.20

· GitHub release

What's Changed

  • Rapid dictation stability: Presspeech now keeps the microphone engine warm briefly between rapid dictations instead of tearing CoreAudio down and rebuilding it after every release. This avoids a reproducible freeze after several quick uses while still closing the input session after the user pauses.
  • Audio route handling: Configuration-change notifications caused by Presspeech's own audio-engine start/stop cycle are ignored, so they no longer trigger redundant deferred restarts during normal dictation.
  • Filler-word cleanup: Removing a sentence-start filler inside a longer transcript now restores the capitalization of the next word. For example, This is the first sentence. Um this is the second sentence. now becomes This is the first sentence. This is the second sentence.

macOS 0.2.16

· GitHub release

What's Changed

  • Hotkey responsiveness: System-audio mute calls, corrections-sync file checks, and update helpers now run off the main thread that services the global hotkey tap. A slow call (iCloud-synced corrections file, Homebrew, AppleScript) can no longer stall typing system-wide or cause macOS to drop a hotkey press.
  • Mute reliability: If the system-audio mute succeeds but its verification read fails, Presspeech now keeps the crash-recovery marker and watchdog armed instead of tearing them down — the Mac can no longer be left muted with no recovery path. The mute lifecycle is now driven by pure, self-tested decision functions.
  • Toggle mode: Pressing the hotkey while a transcription is still finishing no longer silently swallows presses; the toggle state only advances when a recording can actually start.
  • Filler-word removal: Fixed punctuation artifacts with consecutive or sentence-final fillers ("So, um, uh, yes." no longer becomes "So,, yes."), and fillers before "?" or "!" are now cleaned up.
  • Update check: "Remind me later" now survives relaunch instead of re-prompting shortly after the next launch. Manual check failures distinguish being offline from GitHub rate limiting and unexpected responses. The check now sends a fixed presspeech-update-check User-Agent, documented in the privacy table.
  • Text corrections: Failed saves now surface an alert instead of silently dropping the edit, the corrections file cap is raised to 4 MiB so maximum-size sets always fit, imports say when a file was truncated to the 512-entry cap, and sync no longer loses near-cap entries after a merge or skips an explicit "Sync Corrections Now" behind a stalled background scan.
  • Audio capture hardening: Closed a data race on audio-converter state during engine stop/restart.
  • Text insertion: The fallback typing path now posts matching key-up events so apps that track key state behave correctly.
  • Privacy documentation: Now lists every model re-download trigger, the Homebrew hosts contacted during a user-triggered update, and the fact that the last transcript stays on the clipboard after pasting.
  • Release and CI hardening: Release tags are annotated and pushed explicitly, releases run QA gates (CI-green check, self-test suite, packaged smoke test) before notarization, a --cask-only mode resumes half-finished releases, CI actions are SHA-pinned, the benchmark harness is compiled in CI, and docs deploy only after checks pass.

macOS 0.2.15

· GitHub release

What's Changed

  • Hotkey recovery: Added Settings -> Hotkey -> Reset Hotkey to Default so a bad or awkward custom hotkey can be returned to Right Option without recording a replacement.
  • Hotkey recorder polish: The recorder now accepts additional F-keys and right-side modifiers, rejects unsafe typing keys, and has stronger self-test coverage for save, rollback, and listener restart paths.
  • Speech model recovery guidance: Startup failures now distinguish likely interrupted/corrupt model caches from network/download failures and point to Support -> Reset Speech Model Cache... when that is the right recovery path.
  • Unexpected-exit notice: On the next launch after an abnormal exit, Presspeech offers to copy privacy-safe diagnostics or open the local log. Nothing is sent anywhere.
  • Mute recovery: If Presspeech crashes or is force-quit while it muted system audio for an active recording, a local watchdog now unmutes the Mac when the app process disappears. The next launch also repairs any stale mute marker.
  • Audio capture hardening: Recording samples are accumulated in segments and flattened outside the audio lock, with added downmix/converter self-tests.
  • Private benchmark tooling: Added redacted real-dictation regression and power benchmark helpers. Their reports redact transcript text, fixture names, and local paths by default, and CI now runs their self-tests.
  • Release safety checks: Added a packaged-app smoke script that verifies resources, signing, entitlements, and packaged self-tests.

macOS 0.2.11

· GitHub release

What's Changed

  • Hardened the update helper: The script Presspeech writes to relaunch after a Homebrew upgrade now lives in the per-user temporary directory with mode 0600, not in /tmp with a brief world-readable window. No user-facing behaviour change; closes a local file-permission gap.
  • Refuses sync through symlinks: The text-corrections sync file is now checked with lstat before every periodic read and write. If the configured path is a symbolic link, Presspeech shows a "Sync Failed" alert and stops syncing instead of following the link. Protects against another local process planting a symlink at the persisted sync path.
  • Refuses to launch under a tampered model-download environment: If REGISTRY_URL or MODEL_REGISTRY_URL is set in Presspeech's process environment, Presspeech now exits with a blocking alert pointing you at ~/Library/LaunchAgents/, your shell rc files, and any parent process. FluidAudio uses those variables to redirect the speech-model download base URL, and Presspeech does not document either as a feature.
  • Setup Checklist polish: Permission descriptions now name the exact System Settings breadcrumb and the control to flip. The TCC-reset tip explains the "Try Again" step explicitly, including the "doesn't appear in Settings" case. Checklist rows, separators, and the footer now share a single content width so the Status / Grant column no longer drifts between rows.
  • Documented the speech-model trust model: SECURITY.md now spells out how the Parakeet TDT v3 weights reach the user (HTTPS from Hugging Face via FluidAudio, no cryptographic integrity check on the payload) and what the realistic abuse channel looks like.
  • Enabled Dependabot: Weekly PRs for the single Swift dependency (FluidAudio) and the GitHub Actions used in .github/workflows/. Repo-side hygiene; no app-side change.

macOS 0.2.10

· GitHub release

What's Changed

  • Streamlined Permission Onboarding: Added automatic deep-linking for Input Monitoring and Microphone permissions. If a permission is missing or was previously denied, clicking "Grant" now opens the exact sub-pane in macOS System Settings so you don't have to hunt for it.
  • Actionable Setup Guidance: Rewrote all checklist descriptions to provide clear instructions on what switch to toggle or button to click.
  • Self-Healing Assistance: Added a visible tip explaining that clicking "Try Again" triggers Presspeech's built-in TCC database reset to resolve stuck macOS permission states.
  • Layout and Alignment Fixes: Resolved an AppKit auto-layout bug where long description texts caused text elements to shift and crop at the screen edges.

macOS 0.2.9

· GitHub release

What's Changed

  • Added Setup Checklist..., a small guided setup window for model readiness, permissions, and hotkey testing.
  • Added an internal TextInserter layer so Presspeech can keep clipboard paste as the default while leaving room to test app-specific insertion strategies later.
  • Updated Copy Diagnostics with speech model readiness and text insertion details.
  • Expanded the README with a clearer architecture overview.

macOS 0.2.8

· GitHub release

What's Changed

  • Added a Launch at Login setting.
  • Added memory usage to Copy Diagnostics for easier support.
  • Improved the recording HUD with a delayed Transcribing... state that only appears when transcription takes long enough to notice.
  • Cleaned up Settings menu grouping and labels.
  • Fixed several dialogs so they reliably bring Presspeech forward before showing modal UI.

macOS 0.2.7

· GitHub release

What's Changed

  • Added a manual Check for Updates... action to the menu.
  • Added visible results for update checks, including up-to-date, failed-check, and manual-update-needed states.
  • Hardened the in-app Homebrew updater so it refreshes the Presspeech tap, fetches the tap-qualified cask, and uses tap-qualified upgrade and reinstall commands.

Updating From v0.2.6

If the in-app Update Now... action does not relaunch Presspeech or does not install the latest version, run:

brew update && brew upgrade --cask rcourtman/presspeech/presspeech

macOS 0.2.5

· GitHub release

What's Changed

  • Added settings for recent transcript history: last 5, last 1, or off.
  • Added a setting to hide the floating recording waveform.
  • Removed the duplicate "Add Correction From Latest" shortcut; text corrections now live in Settings.
  • Kept recording feedback simpler: static red menu-bar icon while recording, with the original floating waveform HUD restored.
  • Improved handling for multi-channel input devices by mixing active channels down to mono.
  • Hardened correction sync conflict handling and Homebrew update verification.

macOS 0.2.4

· GitHub release

Reliability and control release. Improves hotkey handling, startup readiness, microphone selection, cancellation, paste behavior, and text-correction workflows. No migration steps — brew upgrade --cask presspeech or the in-app Update now… button handles everything.

Dictation Reliability

  • Hotkey handling — suppresses only the configured dictation hotkey, handles right-side modifier keys correctly, ignores F-key auto-repeat for recording transitions, and keeps the event-tap path responsive.
  • Startup readiness — starts the audio engine before enabling dictation, blocks recording until required permissions are granted, and adds retry actions when speech model, audio input, or hotkey startup fails.
  • Audio recovery — restores system audio if Presspeech quits during a muted recording and refreshes audio input after microphone route changes.

Settings And Workflow

  • Microphone selection — adds a microphone picker, remembers the selected device, falls back cleanly when it is unavailable, and hides CoreAudio's default aggregate pseudo-device from the explicit list.
  • Recording control — adds Escape/menu cancellation for active recordings without paste, history, or completion sound.
  • Paste behavior — lets you append a space, append a newline, or add no suffix after pasted dictation.
  • Feedback sounds — adds a setting to turn start/completion sounds off while keeping dictation behavior unchanged.

Text Corrections And Support

  • Recent transcript actions — clears in-memory recent transcripts and can seed a new correction from the latest transcript without logging transcript text.
  • Diagnostics copy — copies a transcript-free support summary with app, permission, microphone, and setting metadata.
  • Correction sharing cleanup — removes temporary correction-share files after the share flow finishes or is dismissed.

Privacy

  • No telemetry, analytics, crash reporting, cloud transcription, new Presspeech network call, or expanded entitlement was added.

macOS 0.2.3

· GitHub release

Text correction portability release. Adds import, export, sharing, and optional file-based sync for saved text corrections. No migration steps — brew upgrade --cask presspeech or the in-app Update now… button handles everything.

Text Corrections

  • Import and export — save corrections as a .presspeech-corrections file, then bring them into another Mac with merge or replace.
  • Native sharing — share the corrections file from the macOS share sheet, including AirDrop when available.
  • Optional sync file — point Presspeech at a corrections file in iCloud Drive, Dropbox, Syncthing, or another synced folder. Presspeech reads and writes that local file; the folder provider handles moving it between Macs.
  • Double-click import — .presspeech-corrections files are registered as Presspeech documents and can be opened with the app.

Privacy

  • Sync does not add a Presspeech account, backend, or new direct network call. Correction files are readable JSON so they remain portable and auditable.

macOS 0.2.2

· GitHub release

Text correction release. Adds a local corrections dictionary for recurring words or phrases the speech model consistently mishears. No migration steps — brew upgrade --cask presspeech or the in-app Update now… button handles everything.

Text Corrections

  • Local correction dictionary — add replacement pairs from Settings → Text Corrections. Put the incorrect text Presspeech typed under Typed, and the desired output under Paste.
  • Whole-word and phrase matching — corrections apply after transcription and before paste/history, with longest matches winning when entries overlap.
  • Private by default — corrections are stored in local preferences. Audio still stays on-device, transcripts are still never written to disk, and logs only record how many corrections were applied.

Polish

  • The correction editor uses a fixed AppKit layout so the text fields render reliably inside the menu-triggered dialog.
  • Dialog copy now uses Typed → Paste wording and a clearer clawed → Claude example.

macOS 0.2.1

· GitHub release

Polish release. Menu tightening, sharper README, smaller Settings submenu. No migration steps — brew upgrade --cask presspeech or the in-app Update now… button handles everything.

Menu

  • Most recent transcript is back inline — one click to copy what you just dictated, instead of hovering into the Recent submenu. The submenu still appears for older transcripts when there's more than one.
  • Settings is leaner — the redundant "Check for updates now…" action was removed; the 6-hour automatic poll handles everything, and quitting + relaunching forces a fresh check via the 30-seconds-after-launch initial poll. The remaining toggle now reads "Check for updates automatically" so its purpose is unambiguous.
  • Quit Presspeech row alignment — macOS Tahoe was decorating it with a destructive-action glyph that pushed the row out of line with the others. Routed through our own selector; flush-left now.

macOS 0.2.0

· GitHub release

Presspeech is now a native Swift app. Same UX — push-to-talk, menu bar, no preferences window — rebuilt on the Apple Neural Engine via FluidAudio + Parakeet TDT v3.

  • ~100 ms from key release to pasted text (down from ~180 ms)
  • 2.2 MB download (down from ~150 MB)
  • Two hardened-runtime entitlements instead of six
  • No embedded interpreter, no JIT, no library-validation override

Upgrading from v0.1.x

brew upgrade --cask presspeech or the in-app Update now… button handles the swap. Settings, granted permissions, and Skip-version state carry over cleanly — same bundle id, same Developer ID cert.

Heads up: v0.2.0 requires macOS 26 (Tahoe). If you're on macOS 13, 14, or 15, the upgrade will refuse with a brew error — stay on v0.1.6 until you can upgrade macOS.

Reclaiming disk space (optional)

The old MLX model cache from v0.1.x is no longer used. ~600 MB:

rm -rf ~/.cache/huggingface/hub/models--mlx-community--parakeet-tdt-0.6b-v2

If you ever installed v0.1.x from a source clone via install.sh, the LaunchAgent it created is also unused now:

launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/com.local.presspeech.plist 2>/dev/null
rm -f ~/Library/LaunchAgents/com.local.presspeech.plist
Windows

Windows releases

Windows 0.1.12

· GitHub release

The full release notes begin with a notice to read before opening this build.

Presspeech for Windows 0.1.12 recovers from microphone hardware changes without requiring an app restart and refreshes the pinned CUDA runtime.

Audio-device recovery

  • If a selected or automatic microphone disappears, Presspeech can safely refresh PortAudio's device table and retry discovery when the device is reconnected. A specifically selected device still fails safely rather than silently switching to a different microphone.
  • Process-wide coordination prevents a device refresh from terminating PortAudio while a recording, microphone check, stream construction, or device query is active. Slow driver work does not hold the app state lock, and stale discovery from an earlier recording cannot overwrite a newer one.
  • Native streams whose first close attempt fails remain protected and are retried before any later backend reset, avoiding unsafe recovery around a handle that the audio driver may still consider live.

Release runtime

  • The Windows CUDA package now pins Torch 2.14.0 with CUDA 12.6, and the resolved Python 3.12.10 release graph remains locked and reproducible.

Installation and updates

  • Uninstall now removes the current user's Presspeech startup entry, preventing Windows from trying to launch a removed executable at sign-in.
  • Update checks accept only releases that GitHub marks immutable. Publication verifies the release attestation and both installer and checksum assets.
  • Before publication, the hosted Windows runner checks the finished installer's install, packaged self-test, startup-entry cleanup, and uninstall behavior.

This remains a prerelease. The complete microphone, target-app, upgrade, and assistive-technology qualification matrix is still required before stable promotion.

Speech recognition remains entirely local, and transcript and dictionary text remain excluded from diagnostics. This build is not yet code-signed, so Windows SmartScreen may show Unknown publisher; choose More info → Run anyway only where local policy permits, after verifying the supplied SHA-256 checksum.

Windows 0.1.11

· GitHub release

Presspeech for Windows 0.1.11 keeps completed dictation bound to its original window and makes setup, recovery, and core controls easier to use without depending on the notification-area icon or the default hotkey.

Safer text delivery

  • Presspeech captures the destination process and window before recording and rechecks them before every automatic paste path, including Try Dictation.
  • If the destination is unavailable or focus changes during recording or transcription, the transcript remains on the clipboard for manual paste instead of being sent to the newly focused window.

Setup and recovery

  • Setup checks microphone input and waits for the selected speech model to be ready before it can finish. Failed checks expose retry and recovery actions.
  • Computers without usable CUDA now start with the CPU-capable Whisper base.en model instead of selecting a GPU-only model that cannot load.
  • Changing models starts preparation immediately and reports loading, ready, and failed states without consuming the next dictation attempt.
  • Launching Presspeech again restores its existing window, or opens Setup or Settings, rather than silently doing nothing.
  • Setup and Settings report global-hotkey readiness and can replace a failed or stopped keyboard listener without requiring access to the tray icon.
  • Press Escape or choose Cancel Dictation (Esc) to discard an active recording without transcription or clipboard changes.

Accessibility and controls

  • Setup, Settings, update, and Try Dictation windows expose names, roles, values, and actions through Windows UI Automation, with access keys and screen-reader announcements for important status changes.
  • Dialogs are resizable and scroll on smaller or scaled displays. The recording indicator follows Windows DPI and high-contrast colours.
  • Setup can apply a different hotkey before completion, so a conflicting default key no longer blocks first run.
  • When Windows blocks simulated input into an app running as administrator, Presspeech leaves the transcript on the clipboard and explains how to paste it safely instead of silently losing the delivery attempt.

Recognition and language

  • Whisper models use reviewed immutable snapshots, do not carry text from the previous recording into the next one, and filter silence before decoding.
  • British spelling conversion now covers common inflections consistently.

Release dependencies are pinned to an exact Windows and Python 3.12.10 graph. Speech recognition remains entirely local, and transcript and dictionary text remain excluded from diagnostics. This build is not yet code-signed, so Windows SmartScreen may show Unknown publisher; choose More info → Run anyway after verifying the supplied SHA-256 checksum.

Windows 0.1.10

· GitHub release

Presspeech for Windows 0.1.10 makes update downloads respect the update window's lifetime.

Fixed

  • Closing the update window now cancels an active installer download instead of allowing the multi-gigabyte transfer to continue invisibly in the background.
  • Cancelled downloads remove their private partial file and never reach the install prompt.

The installer still receives the full update security checks: Presspeech accepts only the exact versioned assets from a canonical Windows prerelease, checks GitHub's published sizes and SHA-256 digests, verifies the checksum asset, and locks and revalidates the installer immediately before process creation.

Speech recognition remains entirely local. Update checks still send no app version, device details, settings, transcripts, or usage identifiers. This build is not yet code-signed, so Windows SmartScreen may show Unknown publisher; choose More info → Run anyway after verifying the supplied SHA-256 checksum.

Windows 0.1.9

· GitHub release

Presspeech for Windows 0.1.9 hardens the verified update path from GitHub release selection through installer process creation.

Fixed

  • Presspeech now keeps both the verified installer and its containing directory locked until Windows creates the installer process. This closes the remaining parent-path replacement window after the final size and SHA-256 check.
  • Update checks now request enough GitHub release metadata to keep Windows prereleases visible as macOS releases accumulate.

Release integrity

  • The updater accepts only canonical windows-vX.Y.Z prereleases with exactly the expected versioned installer and checksum assets, including GitHub's published sizes, SHA-256 digests, states, names, and canonical URLs.
  • The release workflow verifies those same public asset properties against the locally built files before reporting a successful publication.

Speech recognition remains entirely local. Update checks still send no app version, device details, settings, transcripts, or usage identifiers. This build is not yet code-signed, so Windows SmartScreen may show Unknown publisher; choose More info → Run anyway after verifying the supplied SHA-256 checksum.

Windows 0.1.8

· GitHub release

Presspeech for Windows 0.1.8 closes the remaining replacement window when an approved update installer starts and makes Windows release builds more reproducible.

Fixed

  • Immediately before launch, Presspeech now opens the verified installer with Windows write and delete sharing disabled, rechecks its size and SHA-256 through that handle, and keeps the handle open until process creation. The approved path therefore cannot be changed between final verification and launch.
  • Reparse points and directories are rejected by the same locked-file check.

Release integrity

  • Release installs now pin the CUDA-enabled Torch build, PyInstaller hook bundle, and Inno Setup version explicitly.
  • Runtime and CUDA dependency declarations now share one authoritative Torch pin, with CI checks that prevent the CPU and CUDA install paths from drifting apart.

Speech recognition remains entirely local. Update checks still send no app version, device details, settings, transcripts, or usage identifiers. This build is not yet code-signed, so Windows SmartScreen may show Unknown publisher; choose More info → Run anyway after verifying the supplied SHA-256 checksum.

Windows 0.1.7

· GitHub release

Presspeech for Windows 0.1.7 hardens both in-app updates and the release pipeline that produces them.

Fixed

  • Update downloads are now bounded by the installer size published by GitHub, and stop immediately if a response exceeds that size.
  • Presspeech rechecks the approved installer's exact filename, size, and SHA-256 immediately before launching it. A file changed after download is rejected instead of executed.
  • Downloads use an exclusively created random staging file, preventing a pre-existing link at the former predictable .part path from redirecting or truncating another file.

Release integrity

  • Windows releases are bound to the exact approved main commit and versioned tag before artifacts can be published or replaced.
  • Frozen builds now run a model-free package smoke test before installer creation, catching missing lazy imports and native runtime modules.

Speech recognition remains entirely local. Update checks still send no app version, device details, settings, transcripts, or usage identifiers. This build is not yet code-signed, so Windows SmartScreen may show Unknown publisher; choose More info → Run anyway after verifying the supplied SHA-256 checksum.

Windows 0.1.6

· GitHub release

Presspeech for Windows 0.1.6 makes fresh model downloads reproducible and keeps them tied to the version that passed Presspeech's native QA.

Fixed

  • Parakeet TDT v3 now loads an immutable Hugging Face snapshot instead of the model repository's mutable main branch. A fresh 0.1.6 install therefore receives the same model configuration and weights that passed the Windows CUDA/ASR gate.
  • The pin is preserved through the normal FP16 load and both FP32 fallback paths. The retained Nemotron and Moonshine Transformers backends are pinned to reviewed snapshots as well.

This intentionally freezes the model revisions already exercised by Presspeech; it does not change the speech engine or send any new network data. Speech recognition remains entirely local. Update checks still send no app version, device details, settings, transcripts, or usage identifiers. This build is not yet code-signed, so Windows SmartScreen may show Unknown publisher; choose More info → Run anyway after verifying the supplied SHA-256 checksum.

Windows 0.1.5

· GitHub release

Presspeech for Windows 0.1.5 improves transcript cleanup and makes optional GPU-idle model unloading reliable across repeated dictations.

Fixed

  • Filler removal now repairs punctuation and sentence capitalization after removing “um”, “uh”, and similar speech. It also preserves real words and compounds such as “well”, “err”, “uh-huh”, and “ohm”.
  • Optional idle model unloading now stays on Presspeech’s permanent model worker and waits behind any queued transcription. Every transcription attempt refreshes the idle deadline, including empty or failed results, so a stale timer cannot unload the model immediately after it was used.

Speech recognition remains entirely local. Update checks still send no app version, device details, settings, transcripts, or usage identifiers. This build is not yet code-signed, so Windows SmartScreen may show Unknown publisher; choose More info → Run anyway after verifying the supplied SHA-256 checksum.

Windows 0.1.4

· GitHub release

Presspeech for Windows 0.1.4 hardens recording lifecycle recovery and the user-approved update path.

Fixed

  • Recordings now stop automatically after two minutes if Windows misses a hotkey release, bounding in-memory audio and restoring muted playback.
  • Recording startup, microphone callbacks, post-roll completion, and the new duration limit are scoped to the recording that created them. Delayed work from an older recording can no longer attach to or stop a newer one.
  • Update API redirects are rejected. Installer and checksum redirects must remain HTTPS on approved GitHub release hosts at every hop.

Speech recognition remains entirely local. Update checks still send no app version, device details, settings, transcripts, or usage identifiers. This build is not yet code-signed, so Windows SmartScreen may show Unknown publisher; choose More info → Run anyway after verifying the supplied SHA-256 checksum.

Windows 0.1.3

· GitHub release

Presspeech for Windows 0.1.3 makes startup readiness truthful and prevents dictation controls from activating before the local speech model is usable.

Fixed

  • Push-to-talk is now gated on the configured model being loaded and fully warmed.
  • An early hotkey press keeps Preparing speech model… visible and does not open the microphone, play start/stop cues, mute playback, or show misleading Listening… / Transcribing… states.
  • The scratchpad Dictate button follows the same readiness rule.
  • A failed or explicitly unloaded model remains retryable, with only one load attempt queued at a time.

Speech recognition remains entirely local. This build is not yet code-signed, so Windows SmartScreen may show Unknown publisher; choose More info → Run anyway after verifying the supplied SHA-256 checksum.

Windows 0.1.2

· GitHub release

Presspeech for Windows 0.1.2 fixes playback muting on PCs with more than one active audio output.

Fixed

  • Dictation now mutes every active Windows playback endpoint, rather than only the default multimedia device. This covers audio routed separately to a headset, Realtek speakers, HDMI output, or another active endpoint.
  • Every endpoint's original mute state is saved and restored independently.
  • A failure on one endpoint no longer prevents other endpoints from being muted or safely restored, and the log records endpoint counts and failures.

Speech recognition remains entirely local. This build is not yet code-signed, so Windows SmartScreen may show Unknown publisher; choose More info → Run anyway after verifying the supplied SHA-256 checksum.

Windows 0.1.1

· GitHub release

Presspeech for Windows 0.1.1 makes first launch and ongoing maintenance clearer without changing the fast, local dictation path.

What's new

  • First-run readiness window showing model status, microphone selection, push-to-talk key, and Start with Windows
  • Optional privacy-safe daily update checks plus a manual tray-menu check
  • User-approved installer downloads verified against the GitHub asset size and published SHA-256 before Presspeech offers to run them
  • Copy Diagnostics tray action with runtime and configuration metadata but no transcript, audio, or dictionary contents
  • Atomic settings writes for safer background update checks and UI saves

Privacy and signing

Speech recognition remains entirely local. Update checks send a fixed User-Agent and ordinary HTTPS metadata only; no app version, device identifier, settings, audio, transcript, or usage counts are attached.

This build is not yet code-signed. Windows SmartScreen may show Unknown publisher; choose More info → Run anyway after verifying the SHA-256 checksum supplied with the installer.

Windows 0.1.0

· GitHub release

First packaged Windows release of Presspeech.

What is included

  • Self-contained Windows x64 installer: no Python or command-line setup required
  • NVIDIA Parakeet TDT 0.6B v3 with CUDA acceleration and duration-aware decoding
  • Whisper fallbacks, British spelling, local dictionary rules, audio cues, playback muting, and visual status indicator
  • Right Alt hold-to-talk, configurable hotkeys, deterministic microphone selection, and Start with Windows support
  • Local-only audio processing with no accounts, telemetry, or transcript logging

Requirements and first launch

  • Windows 10 or 11, x64
  • A current NVIDIA driver is strongly recommended for the default Parakeet model
  • About 4.4 GB for the installed app, plus about 2.5 GB for the first-run model download

This build is not yet code-signed. Windows SmartScreen may show Unknown publisher; choose More info → Run anyway after verifying the SHA-256 checksum supplied with the installer.

Earlier releases

Releases whose notes were not kept in the repository, including the earlier macOS 0.1.x builds, are listed only on GitHub Releases. This page is generated from the repository changelog.