Skip to content

Releases

v1.1.5 — Wake stability

Choose a tag to compare

@fexxdev fexxdev released this 27 Aug 10:40

Fixed

  • Prevented a crash after macOS wake when thermal or workspace notifications arrive off the main actor.
  • Wake callbacks now reapply fan control on the main actor.

Added

  • Regression tests for thermal and screen-wake notifications delivered from a background queue.

The DMG is ad-hoc signed. On first launch, macOS may require right-clicking Mystral.app and choosing Open.

v1.1.4 — MANUAL REINSTALL REQUIRED

Choose a tag to compare

@fexxdev fexxdev released this 11 Aug 16:21

⚠️ MANUAL REINSTALL REQUIRED

This release must be installed manually. Download Mystral-1.1.4.dmg, replace Mystral.app in /Applications, and launch it. Do not use the in-app updater for this first installation.

This bootstrap step is required for users coming from the affected 1.1.1 build. After 1.1.4 is installed, future updates use the strict updater validation again.

Fixed

  • Restored strict validation for trusted Mystral GitHub release DMGs.
  • Validate the bundle identifier, APPL package type, newer version, and strict ad-hoc or Developer ID code signatures before replacement.
  • Keep asynchronous DMG mounting, cleanup, and timeout handling.

The DMG is ad-hoc signed. On first launch, macOS may require right-clicking Mystral.app and choosing Open.

v1.1.1

Choose a tag to compare

@fexxdev fexxdev released this 09 Jun 07:52

Quieter sleep (#2)

Fans no longer keep spinning at the last forced speed while the Mac is asleep. On system sleep the helper hands fan control back to macOS auto mode, so the firmware idles the fans during sleep; on wake your fan curve re-engages automatically.

No action needed — the in-app updater will offer this automatically.

Closes #2.

v1.1.0

Choose a tag to compare

@fexxdev fexxdev released this 01 Jun 08:16

⚡ Power monitoring

Mystral now reads and visualizes power draw — no extra permissions, no root.

Menu bar

  • New display modes: Icon + Power and Power Only (total system watts).

Live dropdown

  • Total system power plus a CPU / GPU breakdown.

Dashboard

  • New Power section between the temperature cards and the chart:
    • Total system watts with a stacked CPU / GPU / Other bar.
    • A Power — Last 5 Minutes chart (Total / CPU / GPU).

Total power comes from the SMC (PSTR); CPU/GPU come from the IOReport
"Energy Model". Other = total − CPU − GPU (RAM, display, SSD, etc.), since
the two sources measure different things.


Install: open the DMG, drag Mystral.app to Applications. First launch:
right-click → Open to bypass Gatekeeper (unsigned build).

v1.0.15

Choose a tag to compare

@fexxdev fexxdev released this 29 May 14:24

The fan helper now never stops — and only asks for your password once

Previously the background SMC helper was periodically terminated by macOS (launchd housekeeping reaped it every ~20–40 minutes), causing it to relaunch and prompt for your password again each time.

What changed

  • The helper is now installed as a launchd LaunchDaemon (KeepAlive). macOS keeps it alive indefinitely, it survives reboot, and you are asked for your password only once — at first install, never again.
  • Manual restarts and post-update binary reloads are now prompt-free.

Install

  1. Drag Mystral.app to Applications.
  2. Right-click → Open the first time (unsigned build, bypasses Gatekeeper).
  3. Enter your password once to install the fan helper. That's it.

Uninstall the helper

sudo launchctl bootout system/com.fexxdev.Mystral.helper
sudo rm /Library/LaunchDaemons/com.fexxdev.Mystral.helper.plist

Verified: the helper ran for a full hour on the same process with zero deaths and zero password prompts.

v1.0.14

Choose a tag to compare

@fexxdev fexxdev released this 25 May 09:27

Fixes

  • Fixed helper restart getting permanently stuck: Aligned staleness detection thresholds between the health check and restart logic (was 60s vs 120s, causing a dead zone where the app knew the helper was down but wouldn't restart it)
  • Added 12-hour automatic retry: After exhausting 3 restart attempts, the app now retries every 12 hours instead of giving up permanently
  • Added "Restart Helper" button: The error banner now includes a manual restart button instead of the misleading "Attempting to restart..." text

v1.0.13

Choose a tag to compare

@fexxdev fexxdev released this 20 May 15:30

What's Changed

Bug Fixes

  • Fix helper crash on macOS Tahoe: The SMC helper was crashing before reaching Swift code because the LLVM profiling runtime tried to write default.profraw to / (read-only root cwd). Fixed by setting LLVM_PROFILE_FILE=/dev/null and changing cwd to /tmp in the launch script.
  • Fix missing Sensors empty state icon: thermometer.slash doesn't exist as an SF Symbol — replaced with exclamationmark.triangle.

Improvements

  • Unified empty state styling: Dashboard, Sensors, and Fans views now use consistent vertical centering with ContentUnavailableView.
  • Better helper launch diagnostics: Launch script now logs binary path, UID, cwd, PID, and alive/dead status to /tmp/mystral-helper-launch.log.

Full Changelog: v1.0.12...v1.0.13

v1.0.12

Choose a tag to compare

@fexxdev fexxdev released this 19 May 14:42

In-App Auto-Updater

Updates can now be downloaded and installed directly from within the app — no more opening GitHub in the browser.

How it works

  1. Go to Settings → Updates → Check Now
  2. If an update is available, click Install Update
  3. The app downloads the DMG with a progress bar, installs, and relaunches automatically

Details

  • Real-time download progress with cancel support
  • Automatic DMG mount, version validation, and app replacement
  • Rollback if installation fails
  • Elevates via admin prompt only if the install directory requires it
  • Removes macOS quarantine attributes for seamless launch

v1.0.11

Choose a tag to compare

@fexxdev fexxdev released this 19 May 14:02

Fix: Prevent unnecessary password prompts during sleep/wake

The SMC helper was being killed and relaunched (triggering a password prompt) whenever its data file became temporarily stale — e.g. during display sleep, power nap, or system wake transitions.

Changes

  • Raise checkHelper staleness threshold from 10s to 120s for alive processes with matching version
  • Add PID liveness check in SMCProxyService before declaring helper dead
  • Tolerate up to 60s of stale data if helper process is still alive
  • Ignore SIGHUP in helper process to prevent unexpected termination
  • Launch helper with nohup for additional signal isolation
  • Observe screensDidWakeNotification for display wake grace periods

1.0.10

Choose a tag to compare

@fexxdev fexxdev released this 17 May 18:00

What's New

Accurate Chip Detection

  • Fixed wrong chip identification — Mystral now reads the chip name directly from the OS (machdep.cpu.brand_string sysctl) instead of guessing from SMC sensor counts. All Apple Silicon chips (M1, M1 Pro, M1 Max, M2, M3, M4, etc.) are now correctly identified.
  • Robust CPU core counting — CPU core sensor detection is now prefix-based, so new or unmapped sensor keys are always counted correctly.
  • Improved diagnostic export — SMC export now includes hw.model identifier and sysctl chip name, making it easier to debug hardware-specific issues.

Full Changelog

v1.0.9...v1.0.10