Desktop navigation polished Refined the desktop app's navigation experience, including sidebar motion and visual behaviour.
Fixed slow loading of large dictation histories Large histories now load responsively instead of stalling, with history refresh races guarded against.
Fixed note search responsiveness Searching notes is now responsive, addressing prior slowness in note search.
v0.1.149
Shortcut capture now saves reliably on key release Fixed shortcut recording for dictation and Notes so the key combination is captured correctly when the keys are released, including support for modifier-only taps. Capture retries are retained and conflicting modifier shortcuts are now rejected instead of silently accepted.
v0.1.148
Note picker sessions made more reliable The searchable note picker now serializes note delivery and protects insertion sessions and queries from interference. Lost input is reconciled, operation ownership is isolated, and drafts and corrected references now survive navigation.
Organize notes by project and tag Notes can now be organized by project and tag, with the ability to select which preserved version of a note to keep.
Optional faithful note enrichment with sourced project memory Notes can now be optionally rewritten faithfully while drawing on sourced project memory. Stale enrichment jobs are retired, memory is preserved through project merges and independent corrections, internal whitespace is kept intact during fidelity checks, and disfluent notes are tidied while provenance is validated separately.
v0.1.147
Insert saved notes via a searchable native picker Added a searchable picker to find and insert previously saved voice notes directly into the focused native app. Note delivery is now serialized and isolated so picker sessions and queries do not interfere with each other or with in-progress input.
v0.1.146
Capture and keep personal voice notes Koe can now record voice notes and save them durably, with an editor that preserves the original recording source. Recovery, cancellation, and unsaved edits are handled safely even when actions overlap, and interrupted recordings no longer leave broken note data behind.
v0.1.144
Refreshed dialogs, popovers, and menus with smoother animations The app's popups and panels (dialogs, popovers, sheets) were rebuilt with a new underlying approach, giving them more polished, consistent motion and transitions.
v0.1.143
Redesigned desktop UI with new accessible design system The desktop app's interface now uses a consistent themed set of controls (buttons, dialogs, drawers, badges, cards, and more), improving visual consistency and accessibility throughout the app.
v0.1.142
Fixed recording freezes during dictation Recording no longer freezes due to unbounded history delivery, overlapping stop actions, or lost cancellation ownership. Recording state and processing ownership are now kept properly isolated and ordered.
v0.1.141
Clipboard paste and capture failures now reported instead of silent Failures during paste and capture now surface to the user or logs instead of failing silently.
v0.1.140
Fixed macOS permission detection and refresh issues Microphone, accessibility and other permission checks are now more reliable: the app performs a single combined check instead of repeated redundant ones, correctly detects when accessibility access is revoked, and reads microphone authorization status directly from the system. Blocked and unknown permission states are now distinguished so onboarding, home and settings screens reflect the real state.
v0.1.139
Bug fixes and improvements.
v0.1.138
Speech engine now unloads after 30 minutes idle The transcription engine automatically unloads after 30 minutes without use to free resources. The time it takes to reload from a cold start can now be queried for diagnostics.
Recording reliability and crash-recovery fixes Recovery records used to restore in-progress recordings are now retained with an explicit way to discard them, and settings are written only once per recording instead of repeatedly. The accessibility focus check used during dictation is now bounded, preventing it from running unbounded and risking a freeze.
v0.1.137
Bug fixes and improvements.
v0.1.136
Fixed silence trimming deleting speech in quiet recordings Voice detection during recording used to misjudge quiet audio, causing whole words spoken in a quiet room to be silently cut from the recording before transcription. Detection now works on the shape of the signal rather than its absolute loudness, so recordings are no longer damaged based on how close the user was to the microphone, while the actual audio transcribed remains untouched.
v0.1.135
Warning shown when microphone input is too quiet The app now measures actual microphone signal level (not just total silence) and warns when speech is too quiet to transcribe well. The home screen shows a level meter with a target notch, and both the home screen and the dictation overlay display an amber "Mic level low - move closer" message when needed, with clipping also detected.
v0.1.134
Voice Actions screens redesigned with shared components The Voice Actions screen and related controls (buttons, inputs, model picker, select, sign-in dialog) now use a shared design system, giving them a more consistent look and feel.
v0.1.133
Added sample console for testing Voice Actions The Actions screen now includes a sample console where users can try out a Voice Action and see its behaviour before relying on it.
v0.1.132
Added programmable Voice Actions Users can now define custom voice actions triggered during dictation, configurable with their own shortcuts. Action hook errors now fail closed instead of silently proceeding.
v0.1.131
Global dictation shortcut now works reliably across keyboard layouts Hardened capture of the global dictation shortcut so it registers correctly on different keyboard layouts. Fixed race conditions during shortcut validation and removed duplicate shortcut event transitions that could cause the shortcut to misbehave.
v0.1.130
Active dictation now recoverable after a crash Dictation in progress can now survive an app crash and resume properly, with fixes to prevent races when starting or stopping capture and during app updates.
v0.1.129
Long dictations now survive crashes and retry properly Long dictations are journaled durably so audio and text survive an app or system crash and can be recovered. Fixed a bug that incorrectly rejected valid long dictations, and retry of a failed dictation now follows the same path as a normal paste.
v0.1.128
Redesigned visual conversion surfaces The home screen and conversion visuals have been redesigned, changing how conversion states are displayed to the user.
v0.1.127
Fixed crash on Rosetta with CoreAudio devices The desktop app no longer crashes when running under Rosetta and accessing CoreAudio devices; translated capture is now blocked before it can reach CoreAudio.
v0.1.126
Aligned trust and security handling across app and background service Updated the subscription screen and model information display, and improved security handling for the app's connection to its backend service, keeping trust and security behaviour consistent throughout.
v0.1.125
App launches more reliably Hardened startup and launch handling in the desktop app to reduce reliability issues seen when the app starts.
Diagnostics stay local, privacy copy clarified Diagnostic data collected by the app now stays on the local machine, and privacy-related text shown to users has been clarified.
v0.1.123
Refined desktop screens with live validation feedback Updated the home, onboarding, settings, and model list/drawer screens with UX refinements and live validation feedback.
v0.1.122
Fixed leftover streaming state after recording errors Stopping a recording that encountered an error now properly resets the streaming state in all error paths, avoiding leftover state from failed sessions.
v0.1.121
Bug fixes and improvements.
v0.1.120
Bug fixes and improvements.
v0.1.119
Fewer slow reloads between dictations The transcription engine now stays cached for 30 minutes of inactivity instead of 5, avoiding the 10-20 second reload delay that previously hit about a third of transcriptions after short pauses (e.g. waiting for an LLM response). This keeps roughly 1GB of memory reserved for longer, in exchange for faster resumed dictation.
v0.1.117
BYOK transforms now return plain text Fixed BYOK transform responses so they return plain text instead of sometimes leaking raw structured formatting to the user. Markdown code fences are stripped and the extra wrapping is removed automatically if a model ignores the plain-text instruction.
Removed auto-transform based on preferred language Reverted the automatic transform trigger based on the preferred language setting; transforms no longer run automatically from this setting.
v0.1.116
Fixed model picker dropdown clipping and key hint The model picker dropdown no longer gets clipped by surrounding elements and always displays fully. The API key row is now highlighted when no key is set, with a clearer inline hint that a key is required to use transforms.
Fixed BYOK provider requests blocked by network permissions Requests to OpenRouter, OpenAI, Anthropic, Groq, and Mistral were being blocked by the app's network access rules, preventing BYOK transforms from working. The allowed destinations now include all BYOK provider URLs.
v0.1.115
Anthropic and Groq added as BYOK transform providers Users can now select Anthropic and Groq as providers for the bring-your-own-key transform feature, in addition to existing options. Anthropic models are routed through OpenRouter while Groq is fetched directly from its own model list.
v0.1.114
Searchable model picker for BYOK transform BYOK settings now offer a searchable dropdown with pricing information to choose the transform model, replacing the free-text model field. Model lists are fetched per provider (OpenRouter, OpenAI) and cached.
v0.1.113
BYOK settings fields no longer grayed out without a key When billing mode is BYOK but no API key is set, the billing toggle, provider selector, model field, and API key input are now interactive so BYOK can actually be configured. Previously only the presets were grayed out while these controls remained inert.
History list scrolling improved further History list rendering was optimized so only the rows currently visible are kept on screen, keeping memory use constant regardless of list size, with row heights adjusting automatically for different text lengths.
BYOK transform requests unblocked by security policy The app's security settings were silently blocking BYOK transform requests to OpenRouter, OpenAI, Anthropic, Mistral, and Groq. These provider destinations are now allowed, so BYOK transforms work again.
v0.1.112
History list now scrolls smoothly at any size The history screen renders only the rows currently visible instead of the whole list, keeping memory use constant and scrolling smooth no matter how many entries exist. Row heights adjust automatically for entries with different amounts of text.
v0.1.111
BYOK settings stay usable without a key When billing mode is set to BYOK but no API key has been entered yet, the billing toggle, provider selector, model field, and API key input remain interactive. Only the presets (Clean, Format, etc.) are grayed out until a key is configured.
v0.1.110
Fixed dropped segments under CPU pressure Transcription no longer drops segments or produces wrong results when the system is under heavy CPU load.
v0.1.109
BYOK support for post-processing transforms Users can now use post-processing features like Clean, Format, and Translate without a Pro subscription by supplying their own OpenRouter or OpenAI API key. A new Pro/BYOK toggle in Settings lets users choose billing mode and configure provider, model, and API key.
Auto-retry threshold tightened to avoid false positives Retry now only triggers on audio longer than 5 seconds with fewer than 5 characters per second, instead of the previous 3-second and 8-characters-per-second thresholds. This prevents unnecessary retries on short legitimate transcripts and normal-speed transcripts.
v0.1.108
Auto-retry threshold tightened to avoid false positives The automatic retry on low-quality transcription now only triggers for audio longer than 5 seconds with fewer than 5 characters per second, instead of the previous 3 second / 8 characters per second thresholds. This prevents unnecessary retries on short legitimate transcripts and normal-speed transcripts.
v0.1.107
Fixed dictation still dropping tail of speech Fixed two remaining causes of transcripts losing the last words spoken: a too-short final audio frame was misclassified as silence, and a short trailing speech segment was discarded when the record button was released mid-sentence. Both are now handled so trailing speech is kept.
Automatic retry on low-quality transcription When a transcription looks suspiciously poor, Koe now automatically retries it once using the saved audio and keeps whichever result has more text. This happens silently, with no error shown, only a slightly longer processing time.
v0.1.106
Fixed transcripts losing the last words spoken Voice activity detection no longer drops the end of a recording. Incomplete final audio frames are now handled correctly instead of being marked as silence, and the last speech segment is always kept even if it is shorter than the usual minimum, so releasing the record button mid-sentence no longer cuts off the tail of the transcript.
v0.1.105
Detects AirPods disconnect and switches microphone automatically Koe now notices immediately when the active microphone changes, for example when AirPods disconnect and macOS switches to the internal mic. The app refreshes its device list and falls back to the default device instead of continuing to record near-silent audio from the stale device.
v0.1.104
Rejects near-silent recordings instead of transcribing garbage When the microphone signal is too quiet for more than 2 seconds (as can happen after switching from AirPods to the internal mic), Koe now shows a "Microphone signal too low" error instead of sending the audio to transcription. This prevents garbled, hallucinated text from being produced from near-silent audio.
v0.1.103
Fixed transcription quality degradation after many dictations The transcription engine is now cached and reused across dictations instead of being recreated each time, which was causing accumulated state to degrade transcription quality after around 35 uses. The engine is dropped automatically on error and unloaded after 5 minutes of inactivity to keep behaviour stable.
v0.1.101
Fixed transcription quality degrading after repeated dictations Limited the transcription engine to 4 threads so it no longer competes with the app's interface and audio threads for CPU time. This prevents the transcription quality from degrading after many consecutive uses of dictation.
v0.1.100
Bug fixes and improvements.
v0.1.98
Fixed voice detection cutting off less aggressively and long recordings breaking transcription Voice activity detection now trims background noise more aggressively instead of treating it as speech, preventing overly long audio blobs from reaching transcription. Each spoken segment is now capped at 60 seconds (truncated, not dropped), fixing transcription failures caused by very long segments.
v0.1.97
Empty transcription results now trigger auto-restart Empty transcription results on audio longer than 3 seconds now use the same 'quality too low' message as the quality gate, so the auto-restart counter increments correctly. Auto-restart now reliably triggers after 2 consecutive failures instead of being silently skipped for empty results.
v0.1.96
Preferred language setting for transcription output Added a Language setting with a dropdown of 12 languages that forces transcription output into the chosen language, correcting cases where the app transcribes speech into the wrong language instead of the one spoken. Works with any post-processing preset but has no effect when translate is active.
v0.1.95
Audio input now warmed up at app launch The app briefly opens and closes the default audio input device in the background when it starts, so the first recording no longer suffers a 1-2 second delay before the waveform appears at full volume.
v0.1.94
Long recordings now transcribed segment by segment Audio is now split at natural silence boundaries into speech segments and each segment is transcribed separately, then concatenated, instead of feeding the entire recording at once. This removes the previous 90-second cap and its audio loss, and makes recordings of 2 minutes or more transcribe reliably without mid-sentence cuts.
v0.1.93
Local audio capped at 90 seconds for on-device transcription Local transcription now truncates audio cleanly at 90 seconds because longer recordings caused local models to take too long and lose quality. Reported audio duration now reflects the final trimmed and capped sample count instead of the original length.
v0.1.92
Overlay status label now shown below waveform with clearer phases The recording overlay now displays its status label centered beneath the waveform instead of overlapping it. The label shows "Processing…" and, when a transform step is active, "Transforming…"; no label appears when no transform step is needed.
v0.1.91
App auto-restarts after repeated low-quality transcriptions If transcription quality checks fail twice in a row, the app now restarts itself automatically to reset its internal transcription state, since this state can degrade after around 30 uses. The restart is quick and happens without user interaction.
v0.1.90
Status label shown only during transform step The overlay no longer shows a status label during simple processing, since the single step is obvious without one. The label now appears only during transform, to explain the extra wait.
v0.1.89
Reverted global initialization causing transcription quality decline Removed a global thread pool initialization step that was found to interfere with the transcription engine's internal configuration, again degrading transcription quality after repeated dictation calls. This continues the earlier fix for the same underlying issue.
Cleaner restart after app updates After installing an update, Koe now fully exits and relaunches as a brand-new process instead of reusing the running one. This ensures the operating system fully reclaims memory and avoids transcription quality degrading after many rapid updates.
Fixed overlay flash between transcribing and transforming The recording overlay no longer briefly disappears and reappears when transcription finishes and text transformation begins. The status shown during that transition now updates correctly.
v0.1.88
Fixed transcription quality decline after app updates After installing an update, Koe now fully quits and relaunches as a fresh process instead of an in-place restart, preventing leftover memory from the previous version from degrading dictation quality over repeated updates.
v0.1.87
Reverted change that degraded repeated transcriptions Removed a global setting introduced to fix repeated dictation reliability, because it interfered with the transcription engine and made quality degrade faster than before. Transcription now again relies entirely on the transcription engine's own internal configuration.
v0.1.86
Fixed garbled transcriptions after repeated use Local transcription no longer degrades into garbled output after several dictations in a row. Each transcription session was leaving behind extra background threads that piled up and starved later transcriptions of processing power; sessions now share a single pool instead.
v0.1.85
Improved silence trimming using voice activity detection Silence trimming now uses a more robust voice activity detection method instead of a simple volume threshold, better handling whispers, varying volume and background noise. This reduces the amount of audio sent for transcription by 50-70% on typical recordings while keeping speech plus a small padding.
Quality gate rejects garbled transcriptions Transcription output is now checked for quality after processing; if the result looks degraded, it is rejected instead of being pasted, and the user sees a "Transcription quality too low" error.
v0.1.84
Fixed empty transcriptions on long audio Removed a setting that forced transcription to run on the processor only, overriding automatic hardware acceleration; this had been causing long audio recordings to return empty text.
Fixed crash on accented characters in transcript preview Fixed a crash caused by cutting preview text at a position that could fall inside a multi-byte character (e.g. French accented letters), which previously broke all subsequent transcriptions.
Silence trimmed before transcription Added automatic detection and removal of long silent stretches from recordings before they are sent to transcription. This improves transcription quality on long recordings with significant dead air, which previously produced much shorter and less complete text.
v0.1.83
Fixed empty transcriptions on long audio Transcription no longer forces processor-only handling on macOS, which had caused audio longer than about 10 seconds to return empty text while short clips still worked.
Reverted transcription back to in-process engine processing The approach introduced to fix transcription quality degrading across recordings has been reverted, since it made the issue worse and added new problems from passing audio data through temporary files. Transcription now runs as it did originally, with additional diagnostic logging kept in place for further investigation of the degradation issue.
v0.1.81
Fixed transcription quality degrading after repeated recordings Transcription quality no longer degrades after around five recordings in a session. The internal behavior causing this was disabled, trading a slightly slower per-recording speed for consistent quality across unlimited recordings.
v0.1.80
Transcription runs in-process again, not in a subprocess The isolated subprocess used for local transcription has been reverted; transcription now runs directly in-process again, as the subprocess approach did not fix the earlier slowdown and risked new issues with audio data handling.
v0.1.79
Local transcription now runs in an isolated subprocess Each local transcription now runs in a fresh, isolated process instead of in-process, preventing internal memory state from accumulating across repeated transcriptions. This fixes progressive quality degradation for all local engines (Parakeet, Whisper, Moonshine, SenseVoice), at the cost of negligible overhead per transcription.
v0.1.78
Editor picker now opens files without permission errors The file editor picker now opens files using a different method than before, which had been blocked by security restrictions and could fail to open the chosen editor.
Terminal apps removed from editor picker Warp and Ghostty no longer appear as options in the editor picker, since terminals tried to execute the file instead of opening it for editing.
Fixed transcription quality degrading over time Transcription quality no longer degrades in the released app after repeated use. The app now grants transcription the memory access it needs, resolving a bug that caused garbled or poor results in production builds.
v0.1.77
Bug fixes and improvements.
v0.1.76
Bug fixes and improvements.
v0.1.75
Bug fixes and improvements.
v0.1.74
Fixed hooks settings layout and error handling Corrected the hooks form layout so dropdowns and the input/Add control appear on separate rows, and fixed a display issue that broke rendering. Errors opening a path from the hooks screen are now logged instead of being silently ignored.
v0.1.73
Added hooks management UI in Settings Settings now includes a section to manage hooks, allowing users to view and configure hooks directly from the app.
v0.1.72
Fixed 3-second delay before dictation transcription Transcription requests no longer wait on a session lookup that could hang in the app; the app now uses the already-refreshed login token directly, removing an added delay of about 3 seconds per transcription.
Fixed API key migration failing in production builds Fixed a production build issue where a required internal script failed to load, causing API key migration to fail.
v0.1.71
Fixed API key migration failing in production builds API key migration no longer fails in the released app; the app now loads its internal storage correctly on startup instead of receiving an unexpected page in place of the file it needed.
v0.1.70
Removed 3-second delay before dictation transforms Text transform requests no longer wait on a slow session check that could add several seconds of latency. The app now uses the already-available authentication token directly, so transforms start immediately.
v0.1.69
Fixed hangs during login and text transform Dictation transforms and sign-in no longer hang indefinitely when the app's session check stalls in some window states. Session lookups now time out and fall back to the stored token, and all requests to the account service are routed through a more reliable network path.
v0.1.68
Fixed dictation hang when session lookup stalls The app no longer freezes when checking the login session takes too long; it now falls back to the stored login token after 3 seconds. If no token is available at all, dictation continues and returns the original text instead of getting stuck.
v0.1.67
Bug fixes and improvements.
v0.1.66
Graceful fallback when selected microphone is unplugged If the previously selected audio input device is no longer available, Koe now falls back to the system default instead of failing. The app also detects disconnection during periodic device checks and automatically resets to the default device.
v0.1.65
Fixed LLM text transform requests hanging Text transform requests to the cloud service no longer silently hang on macOS. The app now sends these requests through a different network path that bypasses the issue.
v0.1.64
Fixed crashes on macOS 26 Tahoe and database panics The app no longer crashes on macOS 26 (Tahoe) due to an incompatible system component. Database operations that previously could crash the whole app on an internal error now fail gracefully instead.
v0.1.61
Added dictionary-powered transcription correction Koe can now use a custom dictionary to correct transcription results, improving recognition of specific words and terms.
v0.1.60
Fixed unreliable on-device transcription results Transcription now starts fresh for each recording instead of reusing a shared state, fixing inconsistent or unreliable results.
Fixed UI freeze during model download Download progress updates are now throttled so the app no longer freezes while a transcription model is downloading.
v0.1.59
Auth token refreshed before streaming transcription The app now refreshes the authentication token before starting a streaming transcription session, preventing failures caused by stale tokens.
Empty transcriptions no longer saved or pasted Empty transcription results are now skipped and no longer appear in history or get pasted, and the Parakeet engine resets after producing an empty result.
v0.1.58
Fixed remaining app freeze from error reporting The error-reporting feature now loads only when needed so it no longer causes the app to freeze in production.
v0.1.57
Fixed app freezing due to error-reporting conflict Disabled a part of the error-reporting system that was interfering with internal app communication, which had caused the app to malfunction.
v0.1.56
Fixed stuck download progress for voice models Model download progress no longer stays stuck at 0% when the server does not report a file size.
v0.1.55
Cancel AI transform in progress Users can now cancel an ongoing AI transformation of a transcription by pressing Escape, clicking the overlay X, or clicking a Cancel button.
v0.1.54
Added AI post-processing for transcriptions Transcriptions can now be cleaned up, reformatted, summarized, translated, or transformed with a custom prompt after dictation. The feature is gated behind a subscription and can be toggled from the system tray, with descriptions explaining each option.
Translate input replaced by searchable drawer The inline translate text field has been replaced with a searchable bottom drawer for picking the target language, which stays open while the overlay remains visible during translation.
Reorganized settings screen API key entry has moved into a bottom drawer, a changelog link was added, and the close button is now hidden while a recording is in progress.
v0.1.53
Fixed audio recording reliability issues Resolved audio issues causing lost final audio when stopping streaming transcription, crashes during batch recording, and degraded reliability the longer the app ran. Stopping a streaming recording now waits for the transcription engine's final response instead of cutting off audio capture immediately.
Fixed transcription crashes cascading across engines A failed transcription attempt on SenseVoice or Moonshine no longer poisons subsequent attempts; both engines now clear their cache on failure like Parakeet and Whisper already did. Added logging around transcription errors to help diagnose issues in production.
Added feedback widget Introduced a feedback widget in the desktop app allowing users to submit feedback.
v0.1.52
Fixed overlay cancellation and release upload issues Fixed problems with cancelling recordings from the overlay and with uploads at release, and corrected regressions in the stop flow and streaming fallback behaviour.
v0.1.51
Recording history moved into settings The recording history view has been reorganized and is now part of the settings section of the app instead of a separate area.
Added screenshot capture as hook input Koe can now capture a screenshot as an input and pass it through the hooks system, letting configured hooks act on the screenshot alongside dictation.
Hardened security and fixed recording/streaming stability issues Hooks are now blocked by default unless explicitly allowed, hook configurations are validated before use, and outgoing connections are limited to a list of trusted addresses; a security flaw in file extraction was also closed, along with a timing issue that could occur when cancelling an action. Separately, fixed a memory leak, an expired-session bug, lagging silent audio, and recording stability problems introduced since version 0.1.50, and improved how permissions and streaming/sync are handled for reliability.
v0.1.50
Added user-configurable hooks support Koe now supports a user-configurable hooks system, letting users define custom hooks through a configuration file stored in their home directory.
v0.1.49
Default recording mode changed to toggle, noise suppression added Recording now defaults to toggle mode instead of hold, and an optional noise suppression feature (RNNoise) can be enabled. The app now warns the user when noise suppression is unavailable and surfaces audio errors instead of failing silently.
Stop or cancel recording from tray menu or home screen Added the ability to stop or cancel an in-progress recording directly from the tray menu or the home screen, and the update banner now shows an installing state while a downloaded update is being applied.
Fixed overlay, monitor switching, freeze and model caching issues Fixed the overlay window not being click-through on transparent areas and incorrect positioning when switching monitors. Fixed an audio-related freeze that could lock up the app, cached local transcription models between calls, cleaned up streaming state, and added a no-audio warning during recording.
v0.1.48
Fixed app freeze during audio device detection Resolved a freeze caused by an internal conflict while listing microphones. Audio device detection now runs in the background so the app no longer locks up.
Delayed no-audio warning to allow Bluetooth mic warm-up Added a 3-second grace period before showing the no-audio warning, giving Bluetooth microphones time to start up and avoiding false warnings.
Adjusted stop recording hint for hold vs toggle mode The shortcut hint label for stopping recording now reflects whether recording mode is set to hold or toggle.
v0.1.47
Fixed overlay click-through and positioning on monitor switch The dictation overlay no longer blocks clicks to underlying windows and now repositions correctly when the display setup changes.
v0.1.46
Added optional noise suppression (RNNoise) The desktop app can now apply RNNoise-based noise suppression to recordings and transcription, reducing background noise before audio reaches the transcription engine.
Added lightweight usage analytics The app now records anonymized snapshots of settings and key events (app opened, recording started/completed/canceled, model changed, settings changed) to help understand usage, with debounced syncing and write-only storage.
Fixed recording freeze and improved recording UX Fixed an app freeze caused by an internal conflict between device detection and audio recording; device listing is now asynchronous and no longer blocks audio processing. Added a grace period before silence detection to accommodate slow Bluetooth microphone warm-up, and adapted the shortcut hint label to match hold vs. toggle recording modes.
v0.1.45
Bug fixes and improvements.
v0.1.44
Added lightweight usage analytics Koe now records basic usage data such as app opens, recording start/completion/cancellation, model changes and settings changes, for both anonymous and signed-in users. Data is written only, not readable from the app itself.
Fixed freeze when recording due to audio conflict Koe no longer freezes due to an internal conflict between listing microphones and capturing audio. Listing audio devices now happens without blocking the recording process.
Improved recording behavior for Bluetooth mics and shortcuts Recording now waits briefly before treating silence as a stop signal, giving Bluetooth microphones time to warm up. The on-screen shortcut hint also now correctly reflects whether recording is set to hold or toggle mode.
v0.1.43
Escape key no longer leaks to other apps when canceling Pressing Escape to cancel recording or processing now stops the key event from propagating further, so it no longer affects focused inputs in other apps such as canceling a Claude Code generation.
Sound playback no longer slows down over time Notification sounds are now pre-loaded for instant, zero-latency playback, fixing an increasing delay that built up from accumulating audio instances during a session.
v0.1.42
Automatic update checks with in-app notifications Koe now checks for updates in the background shortly after launch, every 30 minutes, and when the window regains focus. An animated, dismissible banner appears when an update is available, and the tray menu shows whether an update is ready.
v0.1.41
Added system tray icon showing recording status Koe now shows a tray icon that changes to indicate when a recording is in progress.
v0.1.40
Fixed authentication errors in streaming connection The app's connection for streaming transcription was failing with an authentication error because the login token was only recognized in one part of the request and not where the app now sends it. Streaming transcription now authenticates correctly.
Longer cloud recordings now supported via smaller audio uploads Recordings sent to cloud transcription are now compressed with a much smaller audio format, cutting upload size roughly tenfold. This raises the practical limit for cloud (non-streaming) recordings from about 2.3 minutes to about 25 minutes before hitting upload size limits.
Fixed stale "no API key" warning after login or key changes The notice prompting for an API key or subscription could keep showing after signing in or updating keys because it did not refresh on those changes. It now updates correctly, including in the model selection drawer for bring-your-own-key mode.
v0.1.39
Fixed streaming transcription losing accumulated text on stop Stopping a streaming recording no longer wipes the transcribed text before it can be captured, so the final result is preserved instead of being lost.
Default shortcut changed to Fn key, Parakeet marked recommended The default dictation shortcut is now the Fn key, and the Parakeet model is now marked as the recommended transcription model in the model list.
Recording now uses explicit Idle/Recording/Streaming/Processing states Recording state is now tracked with explicit states instead of a simple on/off flag, preventing invalid transitions such as starting a batch recording while a streaming session is active.
v0.1.38
Fixed overlay window hidden behind loading screen The recording overlay window no longer gets stuck behind the app's loading screen on startup.
Fixed layout and header navigation issues Corrected layout problems and header navigation behaviour in the desktop app.
v0.1.37
Fixed settings reset on app startup Settings no longer occasionally reset to defaults due to a startup timing issue.
Fixed BYOK accordion and subscription state across sign-in The bring-your-own-key inline accordion now displays correctly, and subscription status is preserved across sign-in and sign-out events instead of being lost.
v0.1.36
Added anonymous sessions and server-side authentication The app now supports anonymous sessions and authenticates users through secure sign-in tokens issued by the server, with settings synced accordingly.
Fixed OTP code entry reliability The onboarding code entry field now reliably accepts each digit, allows overwriting, and supports re-submission when entry fails.
v0.1.35
Added mouse button shortcuts for dictation control New mouse button shortcuts can now start and stop dictation. The app detects interfering third-party mouse driver software and warns the user, replacing a previous warning that used to persist incorrectly.
Redesigned onboarding with single permissions page and OTP entry Onboarding now presents all permission steps on a single page instead of several. A new individual-digit one-time-code entry field with automatic submission was added, the overlay layout issue on back-to-back recordings was fixed, and one-time-code verification was hardened.
Fixed frozen waveforms, broken auto-send, and Fn key emoji picker Fixed a timing issue that caused the waveform display to freeze on quick button release. Auto-send now works correctly in Telegram and similar apps, and the Fn key emoji picker no longer appears during capture. Settings layout was also reorganized.
v0.1.34
Added auto-send option after pasting transcription Koe can now automatically press Enter after pasting a transcription, letting users send dictated text without a manual keypress. The option is available as a toggle in the app.
v0.1.33
Fixed sign out failing with stale sessions Sign out now works correctly even when the current session is stale or expired.
v0.1.32
Failed transcriptions retried with recording saved When a transcription attempt fails, the app now retries automatically and keeps the recorded audio instead of discarding it. Errors are now logged for troubleshooting.
v0.1.31
Overlay UX polish Refined the overlay's visual appearance and interactions.
Added delete button to history entries Users can now delete entries directly from the transcription history.
Toast notifications now navigate on tap Tapping a toast notification now takes the user to the relevant view instead of just dismissing it.
v0.1.30
Onboarding auto-advances when a step is completed The desktop app's onboarding flow now moves automatically to the next step once the current step is completed, instead of waiting for a manual action.
Updated privacy messaging for Pro mode The app now shows revised privacy information specific to Pro mode.
Fixed updater failing to reach the update server The app's update check now correctly reaches and verifies the update server, restoring the ability to detect and install updates.
v0.1.29
Reduced latency for realtime transcription streaming Adjusted network handling for the realtime transcription connection, reducing delay between speaking and text appearing.
Fixed missing live transcription text from a cloud provider Corrected an issue causing incremental transcription text from one cloud transcription option to be dropped, so live dictation output is no longer missing.
v0.1.28
Improved cloud model selection experience Updated how cloud model selection looks and feels in the desktop app, refining the experience after the prior configuration unification.
v0.1.27
Unified cloud model configuration and added API Keys settings section The desktop app now presents a single, unified interface for configuring cloud transcription models, and adds a dedicated API Keys section in settings.
Fixed billing status not updating automatically Subscription status is now correctly updated when a billing event is processed, resolving cases where account status could get out of sync after payments.
v0.1.26
Fixed connection blocks to account and billing services The app no longer blocks the connections needed for account sign-in and billing, fixing flows that previously failed.
Reordered onboarding confirmation buttons In the microphone and accessibility onboarding steps, the "I've done it" button now appears above the primary action.
Added Upgrade to Pro button in account settings Users who are not subscribed now see an "Upgrade to Pro" button in Account settings.
v0.1.25
Added native macOS menu bar Koe now has a native macOS menu bar with About, Settings, and Check for Updates entries.
v0.1.24
Fixed streaming latency and end-of-phrase truncation Dictation streaming starts faster and no longer truncates the end of phrases. Streaming sessions now behave consistently whether using the built-in service or a personal API key, and a cleanup issue that occurred when no API key was set has been fixed.
App stays running when main window closes, errors shown in overlay Closing the main window no longer quits the app; it now hides the window instead. Errors are now surfaced directly in the overlay.
v0.1.23
Overlay now shows live streaming preview while dictating The dictation overlay bubble displays a live preview of the streamed transcription as it comes in, instead of only showing the final result.
Overlay bubble redesigned with narrower, translucent look The overlay is narrower with a translucent background, fixed positioning, and now surfaces error messages and a setup notice directly in the bubble.
Auto-paste and permission handling made more reliable Auto-paste after dictation is more reliable, and the app now shows more precise permission status (checking, needed, waiting, or granted), re-requesting permissions on launch and improving the permission click flow.
v0.1.22
Added support for multiple local transcription engines Koe can now use several different local transcription engines instead of one, including new engine options shown in the app. Users can choose the engine that best fits their needs.
Added realtime streaming transcription Transcription can now stream text as speech is captured instead of waiting for the full recording to finish, powered by a new realtime transcription mode.
Fixed auto-paste and simplified permission setup Auto-paste of transcribed text now works correctly, and the permissions flow was simplified to be more reliable.
v0.1.21
Fixed accessibility prompt appearing before onboarding completes The macOS Input Monitoring prompt no longer appears before the user has granted accessibility permission. The listener for the globe key now only starts once accessibility access is confirmed.
Fixed cloud warning modal not covering full window The cloud warning modal now appears above the drawer instead of being clipped inside it, so it correctly covers the entire window.
Restored visual guide during accessibility onboarding The System Settings preview showing exactly what to toggle is back on the accessibility onboarding step.
Fixed Koe missing from Accessibility settings list after reset Koe now always appears in the System Settings Accessibility list, even after permissions were previously reset, by prompting for trust before opening System Settings.
v0.1.20
Added subscription modal before checkout A subscription confirmation modal now appears before redirecting to payment.
Improved model list appearance and interactions Model rows now show a hover state and an expanded background, with layering and other visual tweaks across the interface.
v0.1.19
Redesigned history list with hover-to-copy entries The history list now has a clean, minimal look without cards or borders, lets you copy an entry by hovering over it, and shows a smooth transition when an entry is checked.
Added download progress indicator in header A circular progress indicator now appears in the header while a model is downloading.
Local model names now prefixed with Whisper Local model names shown in the app are now prefixed with "Whisper" for clarity.
v0.1.18
Model picker now opens as a drawer The model selection screen is no longer part of the Settings pages. It now slides up as a drawer from any screen and can be dismissed without switching tabs.
Cancel processing with the Escape key An ongoing transcription can now be cancelled by pressing Escape.
Improved recording and processing overlay visuals The overlay shown during recording and processing has an updated layout, styling, and smoother animated transitions.
v0.1.17
Refined header navigation styling The header navigation now scales slightly on hover, uses an accent color to mark the active item, and has adjusted spacing.
v0.1.16
Reordered settings sections and renamed Audio to Microphone The settings page now lists sections in the order Model, Microphone, Permissions. The former Audio section has been renamed to Microphone.
Selected model row now shows as a navigation link The settings page's model selection row now looks consistent with other model rows and displays a chevron indicating it opens a further screen.
Added transcription overlay toast A toast notification now appears as an overlay while transcription is happening, giving visual feedback during dictation.
Added sound effects for recording start and stop The desktop app now plays short sound effects when a voice recording session starts and stops.
v0.1.15
Bug fixes and improvements.
v0.1.13
Clearer microphone permission errors with quick settings access The desktop app now shows a specific notice when microphone access is blocked, with a button that opens System Settings directly to the microphone permission page. The FAQ was updated to help with common microphone permission issues.
v0.1.12
Bug fixes and improvements.
v0.1.10
Added account sign-in and subscription support The app can now sign users in with a one-time passcode and account screen, and offers subscription plans purchased through Stripe payment links. Sign-in and subscription features now start up in a way that avoids startup issues.
Redesigned onboarding and overlay experience Onboarding now has an updated layout with repositioned logo, footer actions, and entrance animations. The recording overlay and audio visualizer were reworked for clearer positioning, and model list rows now have a fixed height with a steady 4px progress bar and speed indicators instead of badges; clicking a model's indicator now opens its page.
Added bring-your-own-key support and settings improvements Settings now let users supply and validate their own API key (BYOK), include a Danger Zone to reset app data, show Model above Audio, pre-fill the contact form's subject and body, and no longer show the 'Made by Gwendall' link. The transcription feature was also updated internally.
v0.1.8
Bug fixes and improvements.
v0.1.7
Redesigned installer with drag-to-Applications background The macOS installer now shows a custom background image guiding users to drag Koe into the Applications folder.