Skip to content

NorthwoodsCommunityChurch/mac-fan-control

Repository files navigation

Minimum Fan Control

A lightweight macOS menu bar app that adds a bias slider for fan speed — raises the minimum fan RPM while letting macOS automatic thermal control continue above that floor.

Features

  • Bias slider — set a minimum fan speed floor from 0% (system default) to 100% (max RPM)
  • Thermal safety — automatic ramp-up curve keeps fans higher when CPU gets hot, regardless of slider position
  • Live monitoring — real-time CPU temperature and per-fan RPM readings in the menu bar popover
  • Sleep/wake aware — automatically re-applies fan settings after waking from sleep
  • Auto-updates — built-in Sparkle updater checks for new versions
  • Clean uninstall — resets fans to defaults when quitting or uninstalling the helper

Requirements

  • macOS 14.0 (Sonoma) or later
  • Apple Silicon Mac (ARM64)
  • Administrator password (for installing the privileged helper)

Installation

  1. Download the latest .zip from Releases
  2. Extract the zip
  3. Move Minimum Fan Control.app to your Applications folder
  4. Try to open it — macOS will block it the first time
  5. Go to System Settings → Privacy & Security and click "Open Anyway"
  6. The app will appear in your menu bar with a fan icon
  7. Click the fan icon and click Install Helper — enter your admin password when prompted

Usage

  1. Click the fan icon in your menu bar to open the popover
  2. The popover shows CPU temperature and current RPM for each fan
  3. Drag the Fan Bias slider to set your desired minimum fan speed:
    • 0% — system defaults (automatic control only)
    • 50% — fans run at least halfway between min and max RPM
    • 100% — fans at maximum speed
  4. The thermal safety curve will push fans even higher if CPU temperature rises above 60°C

Architecture

Two binaries work together:

  • Minimum Fan Control.app — SwiftUI menu bar app (runs as your user)
  • MinFanHelper — privileged daemon (runs as root, required for SMC write access)

The app communicates with the helper via HTTP on localhost:27015. The helper is installed to /Library/PrivilegedHelperTools/ and persists across reboots via launchd.

Building from Source

git clone https://github.com/NorthwoodsCommunityChurch/mac-fan-control.git
cd mac-fan-control
./build.sh

The build script compiles both targets with SPM, creates the .app bundle, bundles the Sparkle framework, signs everything, and launches the app.

Project Structure

Mac Fan Control/
├── Package.swift                    # SPM manifest (3 targets)
├── build.sh                         # Build, bundle, sign, launch
├── Resources/
│   ├── Info.plist                   # App bundle metadata + Sparkle config
│   ├── AppIcon.icns                 # App icon
│   └── com.northwoods.minfanhelper.plist  # Launchd daemon config
├── Sources/
│   ├── Shared/                      # Shared between app and helper
│   │   ├── SMCKit.swift             # IOKit SMC read/write
│   │   └── FanTypes.swift           # Codable models for HTTP API
│   ├── App/                         # Menu bar app
│   │   ├── MinimumFanControlApp.swift   # @main, MenuBarExtra, Sparkle
│   │   ├── MenuBarView.swift        # SwiftUI popover UI
│   │   ├── HelperInstaller.swift    # Install/uninstall via admin dialog
│   │   └── HelperClient.swift       # HTTP client for helper
│   └── Helper/                      # Privileged daemon
│       ├── HelperMain.swift         # Daemon entry point, sleep/wake
│       ├── SMCFanController.swift   # Fan control + thermal curve
│       └── HTTPServer.swift         # NWListener HTTP server
├── SECURITY.md                      # Security review findings
├── CREDITS.md                       # Third-party credits
└── LICENSE                          # MIT License

Security

This app includes a privileged root daemon. See SECURITY.md for the full security review.

Key points:

  • The helper daemon runs as root (required for SMC write access on Apple Silicon)
  • The HTTP API is bound to localhost only (acceptLocalOnly = true)
  • Bias values are validated to 0-100 range
  • Thermal safety curve prevents dangerous fan settings

License

MIT License — Copyright (c) 2026 Northwoods Community Church

Credits

See CREDITS.md for third-party frameworks and inspiration.

About

macOS menu bar app that adds a bias slider for fan speed control on Apple Silicon

Topics

Resources

License

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors