github hainguyents13/mechvibes-dx v0.8.3

6 hours ago

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.mechvibesdx and tccutil reset Accessibility com.hainguyents13.mechvibesdx. The README, README-macos.txt and 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.yml replaces release.yml and is the only build workflow: a matrix (Linux, Windows and macOS, so macOS is checked on every pull request) that runs scripts/ci-check.sh --release, then each OS's packaging script. On a pull request into main it only verifies and uploads nothing; on a push to main (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, a Find release tag job asks the remote whether a v* 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 match Cargo.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 only main saves 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.sh gains resolve_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-version in Cargo.toml. scripts/ci-check.sh and 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 run rustup update stable, and a Cargo.toml with no rust-version fails with a clear message.
  • rdev is vendored in patches/rdev and 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 build copies the built-in sound packs next to the binary (target/<profile>/soundpacks), so ./target/release/mechvibes-dx and cargo run play 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-version in Cargo.toml, so an older compiler fails with a clear message and any newer Rust keeps working. .mise.toml pins the matching dioxus-cli 0.7.10.
  • The packaging scripts build for you. build-macos-app.sh and build-linux-appimage.sh now run cargo build --release --locked first, and build-windows-installer.ps1 builds with --locked. Each takes --skip-build (-SkipBuild on Windows) to reuse an existing binary, in which case it runs cargo check --locked instead, so a Rust older than rust-version or a stale Cargo.lock fails 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.sh now also builds the .deb from the same binary (--no-deb skips it on a machine without cargo-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 with sudo dpkg -i. It does not add you to the input group; run sudo usermod -a -G input $USER and log out/in, or key events won't be seen.
  • Linux (any distro): .AppImage is portable, with no install step. Run chmod +x on it first, then launch it. The input group requirement is the same as the .deb and 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. See README-macos.txt.

What's Changed

New Contributors

Full Changelog: v0.8.2...v0.8.3

Don't miss a new mechvibes-dx release

NewReleases is sending notifications on new releases.