Changed
- Logo and background customization now apply as you pick them. The "Save changes" buttons are gone: choosing a colour or an image updates the app straight away, so what you see is the result rather than a preview you had to commit. Reset is still there and now takes effect immediately too.
- The autostart settings use the same wording on every platform. "Start with Windows" is now "Start at login", and its description and the "Start minimized" description no longer mention Windows.
- macOS: permissions are now documented properly. Key capture needs both Accessibility (while the window is focused) and Input Monitoring (while it is minimized or another app is in front). Without Input Monitoring the app runs normally but is silent unless its window has focus. Because the app is ad-hoc signed, macOS can keep showing the permissions as on after you install a new build while they have stopped working; remove and re-add MechvibesDX in both lists, or run
tccutil reset ListenEvent com.hainguyents13.mechvibesdxandtccutil reset Accessibility com.hainguyents13.mechvibesdx. The README,README-macos.txtand the troubleshooting section now say so. - The macOS installer's name no longer says "experimental". The DMG is now named
mechvibes-dx-<version>-macos-<arch>.dmg, and its line in the release notes no longer calls it experimental or untested: it just says the app is ad-hoc signed, not notarized, and how to open it past Gatekeeper.
Fixed
- The Reset button under Logo and Background now works. Pressing it appeared to do nothing and left the old colours in place. The panels kept their own copy of your settings and quietly wrote it back over anything you changed, which also made individual colour changes fail to stick.
- Turning on background customization no longer leaves the background unchanged. With no colour picked yet, the app wrote an empty style rule that browsers discard, so the setting looked active while nothing happened. It now starts from your theme's colour. Choosing "Use image" before picking a file also falls back to the colour instead of blanking the background.
- macOS: the app no longer crashes on the first keystroke. On recent macOS releases (Sonoma, Sequoia and later) the keyboard listener asked the system for the typed character from a background thread, which macOS only allows on the main thread, so the whole app was killed the moment you pressed a key. Typing now works while the window is focused and while it is minimized.
- macOS: the keyboard listener for the focused window no longer errors out when Accessibility permission is missing. It used to run a startup check that always asked macOS for Accessibility access with a prompt, and stopped with an error if access had not been granted. It now checks first without prompting, asks at most once if access is missing, and if it is still missing logs that and leaves that listener off. Turn Accessibility on as described in the README to bring it back.
- macOS: "Start at login" now actually works. The setting was saved but did nothing, and the app reset it to off on every launch because it could not see any login item. MechvibesDX now registers itself as a real login item, so it appears under System Settings > General > Login Items, where you can also remove it. This needs macOS 13 or later and the app installed in
/Applications. If macOS asks you to allow it, the app opens that settings page for you, and if registering fails the switch turns itself back off instead of staying on for a login item that does not exist. - macOS: "Start minimized to tray" now takes effect. It was ignored because of the reset above. It also no longer relies on a launch flag: it is read from your saved settings, and those are now written to disk the moment you flip either switch, so they survive a logout or reboot right after you change them. This applies on every platform. If both switches are on, opening the app by hand also starts it hidden, as it already did on Windows.
- macOS: "Show MechvibesDX" in the menu bar now brings the window to the front. After the app started minimized (for example from the login item), choosing it put the window on screen but behind whatever app you were using, so it looked like nothing happened. The app is now activated as well, and a window you had minimized to the Dock is restored. Windows and Linux are unchanged.
For developers
- A release now comes from the same run that built it.
.github/workflows/ci.ymlreplacesrelease.ymland is the only build workflow: a matrix (Linux, Windows and macOS, so macOS is checked on every pull request) that runsscripts/ci-check.sh --release, then each OS's packaging script. On a pull request intomainit only verifies and uploads nothing; on a push tomain(or manual dispatch) the packages are kept as artifacts of the run. Tagging a commit does not start a second run, so the commit is built once and the three packages and the draft release are never split across two runs: when the builds finish, aFind release tagjob asks the remote whether av*tag points at the built commit, and if one does, the same run extracts the release notes and drafts the release from those packages. The tag can be pushed with the commit or while the builds are running; if it arrives after the run has finished, re-run that job and nothing is rebuilt. The release is refused if the tag does not matchCargo.toml's version or already has a release (draft or published). A later push no longer cancels a commit's run (only a pull request cancels its own superseded runs), so a release cannot be killed halfway through and no commit is skipped. The workflow only installs what a script cannot (the cache, the OS's system libraries,cargo-deb, Inno Setup); the Linux library list lives in one shared action, and onlymainsaves the cache. Each script verifies what it built: the AppImage and DMG are unpacked or mounted and compared with the source tree, and the Windows installer's name is checked against the auto-updater's filter. scripts/lib/common.shgainsresolve_release_tag, which also runs locally: it prints the release tag the remote has for a commit.- The scripts check that Rust is at least the
rust-versioninCargo.toml.scripts/ci-check.shand the packaging scripts fail up front with a clear message if the active Rust is older than that floor (1.88), instead of failing part-way through a build; any newer Rust passes. An old Rust gets a hint to runrustup update stable, and aCargo.tomlwith norust-versionfails with a clear message. rdevis vendored inpatches/rdevand wired in through[patch.crates-io], because rdev 0.5.3 asks macOS for the typed character from the wrong thread (the crash fixed above). Only the macOS keyboard code differs from upstream. Drop the patch once rdev publishes a release with the fix.- Building and running from source now works out of the box.
cargo buildcopies the built-in sound packs next to the binary (target/<profile>/soundpacks), so./target/release/mechvibes-dxandcargo runplay sound instead of loading zero packs. Nothing is deleted and a copy failure never fails the build. - The minimum supported Rust is now 1.88.0, declared as
rust-versioninCargo.toml, so an older compiler fails with a clear message and any newer Rust keeps working..mise.tomlpins the matchingdioxus-cli0.7.10. - The packaging scripts build for you.
build-macos-app.shandbuild-linux-appimage.shnow runcargo build --release --lockedfirst, andbuild-windows-installer.ps1builds with--locked. Each takes--skip-build(-SkipBuildon Windows) to reuse an existing binary, in which case it runscargo check --lockedinstead, so a Rust older thanrust-versionor a staleCargo.lockfails at the start. With the flag they also refuse a binary older than the sources it is built from, so a stale binary is never packaged under a new version. CI no longer needs the flag: each leg runs the script, which builds, packages and checks its own output. build-linux-appimage.shnow also builds the.debfrom the same binary (--no-debskips it on a machine withoutcargo-deb).- A release now needs every platform to build. A failed Linux or macOS job used to be tolerated; it now stops the release rather than shipping without that platform's asset.
Downloads
- Windows:
MechvibesDX-<version>-Setup-x64.exe, the installer and the only asset the in-app updater uses. - Linux (Debian/Ubuntu):
.deb. Install withsudo dpkg -i. It does not add you to theinputgroup; runsudo usermod -a -G input $USERand log out/in, or key events won't be seen. - Linux (any distro):
.AppImageis portable, with no install step. Runchmod +xon it first, then launch it. Theinputgroup requirement is the same as the.deband nothing sets it up for you:sudo usermod -a -G input $USER, then log out and back in, or key events won't be seen. - macOS (Apple Silicon):
.dmg. Open it and drag MechvibesDX to Applications. Ad-hoc signed but not notarized, so Gatekeeper blocks a normal double-click: right-click the app → Open → confirm, once. SeeREADME-macos.txt.
What's Changed
- fix(customize): make logo and background reset actually revert by @hainguyents13 in #100
- fix(macos): avoid repeated Accessibility permission prompts by @LuisJann in #92
- fix(macos): vendor rdev 0.5.3 with Sequoia main-queue dispatch fix by @thisisjsimon in #90
- chore(toolchain): declare the minimum Rust version instead of pinning it by @hainguyents13 in #102
- Start at bootup fix by @vraravam in #97
- Ci matrix scripts by @vraravam in #98
- chore(ci): tidy the release notes and the Discord announcement by @hainguyents13 in #103
New Contributors
- @LuisJann made their first contribution in #92
- @thisisjsimon made their first contribution in #90
- @vraravam made their first contribution in #97
Full Changelog: v0.8.2...v0.8.3