KeyEcho v1.0.0
Read the launch story -> How GPT-5.6 helped me ship KeyEcho 1.0
Features
- Migrate the desktop app to Tauri 2 and SolidJS, replacing the Vue dashboard with a smaller Solid + UnoCSS settings window
- Rework the dashboard into a compact app card with clearer sound pack selection, pack browsing, volume, auto launch, and project update controls
- Add readable display names for bundled and downloaded sound packs
- Add a v1.0.0 project update card that links users to the KeyEcho sound pack vote
- Add Tauri 2 capability configuration and refreshed command bindings between the frontend and Rust backend
- Replace the app and tray icon set with a new KeyEcho-specific design
- Add performance documentation for the audio hot path and sound pack memory budget
Performance
- Predecode the selected sound pack when it is selected, so key presses no longer perform OGG seek/decode work
- Reuse shared
Arc<[f32]>sample buffers so each playback clones only lightweight metadata instead of copying sample data - Deduplicate identical
[start_ms, duration_ms]sound slices during sound pack loading - Remove the global sound pack mutex from the playback hot path by using lock-free current-sound and volume reads
- Send only key press events to the audio thread, avoiding release-event playback work
- Bound the audio event queue to 256 events so overloaded playback drops new events instead of growing memory and latency without limit
- Enforce a 10 MiB decoded sample memory budget for downloaded and custom sound packs before playback predecode
- Document reference results for
cherrymx-black-abs: cached lookup now averages 43.50 ns/op, 27.2x faster than the v0.0.5 cached model, with 0 sample bytes copied per playback
Security and Signing
- Publish signed and verified Windows and macOS packages: Windows installers are Authenticode-signed, and macOS builds are Developer ID signed, notarized, stapled, and verified
- Add a dedicated signed build workflow for macOS Intel, macOS Apple Silicon, Windows x64, and Windows ARM64 packages
- Add Windows Azure Artifact Signing preflight, NSIS installer signing, and Authenticode verification before publishing signed artifacts
- Modernize the release workflow with verify jobs before release publishing, narrower GitHub token permissions, concurrency control, Node 24, pnpm cache, stable Rust, and explicit release artifact uploads
- Update Tauri updater generation to read release notes from
CHANGELOG.md, select the latest semver GitHub release, reject ambiguous macOS updater artifacts, and fail when updater signatures are missing - Publish arch-specific updater artifacts for Windows, macOS, and Linux instead of relying on ambiguous asset names
- Validate sound pack download URLs and redirects so app downloads only official HTTPS
.tararchives from the KeyEcho repository - Reject oversized sound archives, unsafe tar paths, symlinks, and unsupported tar entry types during sound pack extraction
- Restrict app-opened external URLs to
keyecho.appand the official KeyEcho GitHub repository
Fixes
- Keep the app alive in the tray while destroying the dashboard WebView on close, then recreate and focus the dashboard when reopened
- Make the settings window resizable and increase its default size for the rebuilt dashboard
- Improve macOS modifier key press and release handling by tracking left/right modifier state independently
- Clean up Windows keyboard hook callback state and unhook the low-level keyboard hook when the message loop exits
- Clean up Linux XRecord callback state, record ranges, display handles, and record contexts on listener shutdown or failure
- Reopen the audio output when the default device becomes unavailable or the stream is invalidated
- Clamp persisted volume to the supported range and reject non-finite volume values
- Fix updater platform mapping for Windows, macOS, and Linux, including not mapping Linux x64 updater artifacts to ARM platforms
- Fix Windows signing test command path, quoting, wrapper generation, preflight, and signature verification
Resolved GitHub issues
- Address unsigned-code macOS launch warnings, update permission churn, and Windows false positives by moving Windows and macOS releases to signed, verified packages (#3, #8, #16, #18, #19, #24, #43)
- Address output device switching so KeyEcho follows default output device changes without requiring a tray restart (#20, #41)
- Address NK Cream and online sound download failures by deriving pack names from official archives and safely extracting packs into the expected app data layout (#31, #32, #34)
- Address app and menu bar icon feedback with a new KeyEcho-specific icon set (#28)