Analysis updated 2026-06-24
Control Mac fan speeds from the menu bar instead of relying on firmware defaults
Study a clean split between an unprivileged Swift UI and a privileged C daemon
Install a fan controller on a noisy Apple Silicon Mac via Homebrew
Read live SMC temperatures through IOKit without needing root
| hoobnn/fanfan | bleeeet/termipet | pylogmon/istart | |
|---|---|---|---|
| Stars | 33 | 33 | 31 |
| Language | Swift | Swift | Swift |
| Setup difficulty | easy | easy | moderate |
| Complexity | 3/5 | 3/5 | 2/5 |
| Audience | developer | developer | general |
Figures from each repo's GitHub metadata at analysis time.
Needs macOS 26 or newer and one admin password prompt on first launch to install the LaunchDaemon.
fanfan is a small macOS menu bar app that lets the user control the fan speeds on their Mac. The repository is written in Swift and ships under the MIT license. The README notes it is a fork of solofan, with credit to the original team. The architecture is the interesting part. Writing fan speeds on macOS requires root because it pokes the System Management Controller. Rather than running the whole user interface as root, fanfan installs a small C LaunchDaemon called fanfan-smcd that owns the SMC handle. The app itself stays unprivileged. The two pieces talk over a Unix socket using only three commands: PING to check the daemon is alive, SET to write a fan speed, and AUTO to hand control back to the firmware default. Temperature readings go through IOKit directly from the app, since reading sensors does not need root. Installation is offered in three ways. The Homebrew route is brew tap hoobnn/tap followed by brew install --cask fanfan. A DMG is available on the GitHub releases page. There is also a curl-piped-to-bash install script at scripts/install.sh in the repository. The README says only one password prompt appears on first launch, which is the moment the LaunchDaemon is set up. The project requires macOS 26 or newer, and runs on both Apple Silicon and Intel Macs. Swift 6 is listed as the build language. The README is short overall and points to a Chinese translation at README.zh.md for users who prefer that. There are no instructions for building from source in the README, and no command-line interface is described. The app is presented as a menu-bar utility, with the daemon doing the privileged work behind it.
A macOS menu bar app that controls Mac fan speeds via a small privileged LaunchDaemon, keeping the UI unprivileged and talking to the SMC over a Unix socket.
Mainly Swift. The stack also includes Swift, C, macOS.
MIT license: use, modify, and redistribute freely including for commercial use, as long as you keep the copyright notice.
Setup difficulty is rated easy, with roughly 5min to a first successful run.
Mainly developer.
This repo across BitVibe Labs
Verify against the repo before relying on details.