# Changelog All notable changes to D3RO Voice will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] ### Planned - macOS / Linux support - Additional Whisper model management UI - Cloud-optional backup (encrypted, opt-in) - Plugin system for custom pipelines ## [1.4.0] - 2026-09-21 ### Added - **Several shortcuts per action.** Every action now holds a list of bindings instead of a single one, so a second (or third) shortcut can be added with the `+` button and removed individually. - **Mouse buttons as shortcuts.** Side buttons (back / forward) can be bound on their own; right and middle click require a modifier. Left click cannot be bound because it drives every on-screen interaction. Mouse events cannot be swallowed, so a bound button still performs its original action — the settings screen says so before the binding is saved. - **Pick a key from a searchable list.** Besides pressing the key, a shortcut can now be chosen from a grouped dropdown with a search box inside it, which also makes keys reachable that are awkward to press while recording. - **The history and command popups are rebindable.** `Ctrl+Shift+V` and `Ctrl+Shift+C` were fixed in code and had no settings entry; they are now ordinary actions. The voice command shortcut, which had never been exposed in settings, is visible as well. ### Fixed - **Double-press hands-free never triggered.** Dictation and hands-free ship with the same default key and are told apart by the double press, but shortcut lookup stopped at the first match, so hands-free was unreachable in installed builds. Both actions now receive the event and are split by press type. - **Reserved system shortcuts could be assigned anyway.** The check compared joined key names, so pressing the modifiers in a different order let `Ctrl+C` and friends through. Combinations are now compared structurally. - **Turning shortcuts off also killed the popup shortcuts permanently.** Disabling global shortcuts released every registration in the process, including ones it did not own, and re-enabling never restored them. - **Enabling shortcuts after starting with them off left nothing bound.** - **Shortcut labels were frozen in the language they were recorded in** and did not follow the app language or platform conventions. They are now derived on display. - **The dashboard caption indicator never reflected the real state** because the event payload was stored instead of the state inside it. ### Changed - Shortcuts are stored as one list per action. Existing shortcuts are migrated automatically on first launch; no reconfiguration is needed. ## [1.3.7] - 2026-09-19 ### Fixed - **Recording and live caption overlays never worked in installed builds.** Popup pages loaded their scripts as classic `