Skip to content

Repository files navigation

FanWise app icon

FanWise

한국어

FanWise is an open-source menu bar app and CLI for monitoring temperatures and controlling fans on Apple Silicon Macs. Read-only monitoring works without elevated privileges. Fan changes are handled by a narrow root daemon with automatic recovery safeguards.

Warning

FanWise is experimental hardware-control software. The privileged write path has been tested on one Mac17,8 (M5 Pro), but not on every supported Mac. Read Hardware support and Safety before enabling fan control.

Screenshots

FanWise menu bar popover showing fans, temperatures, and macOS thermal pressure

Menu bar monitoring with fan, temperature, and thermal-pressure status

FanWise thermal details window with grouped sensors and live readings FanWise fan curve editor with control points and behavior settings
Searchable thermal details Editable multi-point fan curve

Features

  • Menu bar temperatures, fan RPM or percentage, battery health, and macOS thermal pressure
  • Searchable sensor details with CPU, GPU, storage, power, package, and battery grouping
  • Automatic, preset, fixed-speed, and editable fan-curve controls
  • Per-fan curve trims on Macs with multiple fans
  • Temperature alerts, thermal-pressure notifications, history, and CSV recording
  • Optional thermal calibration for generating a machine-specific starting curve
  • English and Korean interface
  • Launch at login through SMAppService
  • CLI status, watch, diagnostics, discovery, control, calibration, install, and uninstall commands

FanWise never reapplies a saved curve merely because the app launches. A normal launch, login, quit, or crash leaves fan control with macOS until you explicitly start an override.

Requirements

  • Apple Silicon Mac; Intel Macs are not supported
  • macOS 14 or later
  • Swift toolchain from Xcode or Apple Command Line Tools
  • Administrator authentication only when installing or removing fan control

The project currently ships as source and produces an ad-hoc-signed, non-notarized local app bundle.

Build and run

git clone https://github.com/hanbinnoh/fanwise.git
cd fanwise
swift build -c release
CONFIGURATION=arm64-apple-macosx/release ./Scripts/make-app-bundle.sh
open .build/arm64-apple-macosx/release/FanWise.app

The app can monitor supported sensors immediately. To enable fan changes, open the popover and choose Enable Fan Control…. FanWise shows the files it will install, asks for administrator authentication once, and verifies that the daemon is reachable before enabling controls.

The generated bundle contains the app, daemon, and CLI. Move FanWise.app to a stable location such as /Applications before relying on Open FanWise at login.

Gatekeeper

A locally built bundle normally opens without quarantine. A bundle downloaded over the network may be blocked because FanWise is not notarized. After verifying the source or archive, use System Settings → Privacy & Security → Open Anyway.

If macOS does not offer that action, remove quarantine from this bundle only:

xattr -dr com.apple.quarantine /Applications/FanWise.app

Do not disable Gatekeeper globally.

Using the app

The popover provides live readings and four quick choices:

  • Silent (System) returns control to macOS.
  • Balanced, Performance, and Fast Cool apply built-in curves.
  • Customize Fan Curve… opens the curve editor.
  • Thermal Details shows grouped sensors, battery health, pressure history, and recording.

The curve editor supports 2–12 points, selectable CPU/GPU control sources, interpolation, deadband, response smoothing, and per-fan trims. Only responsive, evidence-backed CPU and GPU readings may drive a curve. Storage, memory, power, battery, and unidentified readings are display-only for fan policy.

Settings also controls the menu bar layout, units, alerts, interface language, fan-control installation, and launch at login. Launch at login starts monitoring and enabled alerts; it does not apply a fan curve.

CLI

Release binaries are written under .build/arm64-apple-macosx/release/; .build/release is a convenient symlink for ordinary commands.

# Read-only status and diagnostics
.build/release/fanwise status
.build/release/fanwise status --json
.build/release/fanwise watch --ndjson --interval 5
.build/release/fanwise doctor
.build/release/fanwise discover

# Foreground-held manual control
.build/release/fanwise control --fan 0 --rpm 2800

# Explicitly acknowledged calibration
.build/release/fanwise calibrate --i-understand-the-mac-will-get-hot

control keeps one exclusive lease and sends heartbeats while attached to the terminal. Press Return, Ctrl-D, or Ctrl-C to release the lease and return all fans to automatic mode.

If the daemon socket is absent, read-only commands fall back to direct AppleSMC reads. Authentication failures, timeouts, and invalid daemon replies fail closed rather than bypassing the daemon.

CLI daemon installation

Most users should install fan control from the app. For development or scripting, use the real architecture path because the installer rejects source paths containing symlink components:

FANWISE_REL="$PWD/.build/arm64-apple-macosx/release"
sudo "$FANWISE_REL/fanwise" install \
  --daemon "$FANWISE_REL/FanWiseDaemon" \
  --user "$(id -un)"

This installs:

  • /usr/local/libexec/fanwise-daemon
  • /Library/LaunchDaemons/com.fanwise.daemon.plist

The installer validates the user, group, source ownership, permissions, service startup, and authenticated readiness response before reporting success.

Safety

Apple automatic fan control is FanWise's baseline and recovery state.

  • One controller holds one exclusive lease; stale or missing heartbeats reset every fan to automatic.
  • Multi-fan updates are treated as one operation. A failed or unverified write releases the whole override.
  • Losing the selected CPU/GPU sensor or fan status cancels the curve.
  • Daemon startup, shutdown, wake, errors, and uninstall reconcile all fans to automatic mode.
  • By default, a live curve is suspended at 90°C and may resume only after both compute areas remain below 84°C for one continuous minute.
  • Calibration is opt-in, stops at 90°C, and restores automatic mode on success, failure, or cancellation.

The curve editor offers an advanced opt-out for the 90°C temperature return. It does not disable write-verification, sensor-loss, heartbeat, or daemon fail-safes.

Security model

Read-only monitoring does not need the daemon. Privileged fan changes use a Unix-domain socket with operating-system peer-UID authentication before request decoding. The daemon accepts a typed command set rather than arbitrary SMC writes, and its socket is limited to root and the GUI user selected at installation.

Because this source build is not Developer ID signed, peer authentication proves the local Unix user, not the identity of a particular application. Another process already running as the configured user remains a residual risk.

Hardware support

Hardware Status
Apple Silicon M5+ direct mode-key path Implemented and tested on one Mac17,8 (M5 Pro, two fans)
Apple Silicon M1–M4 Ftst unlock path Implemented and unit-tested; hardware write path unverified
Intel Macs Unsupported

Testing on one machine does not establish safe fan-write behavior for every model. If you test a new model, record the model identifier, fan count, absolute readings, control conditions, and confirmed return to automatic mode.

Uninstall

Use Settings → Fan control → Remove…, or run:

sudo .build/release/fanwise uninstall

Normal uninstall first asks the running daemon to reset every fan and verifies automatic mode. If verification fails, it leaves the daemon installed so recovery can be retried.

Development

Run the complete test wrapper and provenance check:

./Scripts/run-tests.sh
swift build -c release
./Scripts/check-provenance.sh

The wrapper supports environments with Apple Command Line Tools but no full Xcode installation by supplying the paths required by swift-testing.

License and provenance

FanWise is licensed under the MIT License. Third-party notices are in THIRD_PARTY_NOTICES.md, and source-level attribution is recorded in PROVENANCE.md.

About

FanWise: Apple Silicon menu bar fan monitoring and control

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages