Status Trio
Status Trio는 macOS 메뉴바 앱으로 Wi‑Fi·배터리·볼륨을 하나의 아이콘에 통합합니다
Free, open-source Mac fan control for the menu bar. Monitor temperatures, set fan curves — Apple Silicon & Intel.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A free, open-source Mac fan control app for the menu bar. Monitor temperatures and fan speeds, set a fixed RPM, or create temperature-based fan curves.
FanBar supports macOS 11 Big Sur and later on compatible Apple Silicon and Intel Macs that expose readable AppleSMC fan data. It keeps everyday use safe and quiet with macOS automatic management, while making manual control available only after the signed control service is approved.
FanBar is a free, open-source native macOS menu-bar app for monitoring CPU/GPU/SSD/battery temperatures and fan RPM. It keeps normal cooling under macOS automatic management, then offers bounded manual control only after you explicitly approve the signed helper.
The official site publishes a concise llms.txt for answer engines and agents that need authoritative product facts.
English interface in light and dark appearance. Switch to Simplified Chinese, Traditional Chinese, Japanese, Russian, or French from Settings → General → Interface language without restarting.
On a Mac with two fans, each fan gets its own speed, status and range side by side. This capture is from a MacBook Pro (M2 Max) running Balanced.
Cooling gives each panel preset its own editable temperature→RPM curve.
Appearance chooses the menu bar icon and what the status item shows, previewed live in a simulated menu bar.
General includes local device compatibility checks, control-service status, automatic restore, notifications, language, login, updates, and command-line and Raycast setup. Log records temperatures and fan speeds to CSV. Longer settings panes scroll.
fanbar command-line tool reads status and temperatures, switches presets, sets a fixed RPM, or hands the fans back to macOS from Terminal or scripts, with --json output for automation. Install it from Settings → General → Command Line & Automation, where you can also set up Raycast Script Commands.~/Library/Application Support/FanBar/Logs, starting a new file on launch, at midnight, or never.The latest notarized build is on the GitHub Releases page:
| Chip | File |
|---|---|
| Apple Silicon | FanBar-<version>-arm64.dmg |
| Intel | FanBar-<version>-x86_64.dmg |
| Universal (Sparkle updates use this) | FanBar-<version>.dmg |
With Homebrew installed, add this repository as a tap and install:
brew tap helson-lin/fanbar https://github.com/helson-lin/FanBar.git
brew install --cask helson-lin/fanbar/fanbar
The cask installs the signed, notarized universal app for Apple Silicon and Intel
into /Applications. Launch FanBar and approve its control service to enable fan
control. If you already installed FanBar manually, quit it and move the existing
/Applications/FanBar.app to the Trash before installing through Homebrew.
FanBar can update itself through Sparkle. To upgrade explicitly with Homebrew:
brew update
brew upgrade --cask helson-lin/fanbar/fanbar
To uninstall, quit FanBar first, then run:
brew uninstall --cask helson-lin/fanbar/fanbar
Add --zap to also remove saved preferences and caches. Homebrew may request an
administrator password to unload the fan-control service.
[!WARNING] AppleSMC is an undocumented hardware interface. Lowering fan speed can increase temperature; sustained high speed can increase noise, power use, and mechanical wear. Use manual control only when you understand the trade-offs, and prefer Automatic or Smart cooling for normal use.
Fixed RPM and panel presets can restore macOS control after 15 minutes, 30 minutes, or one hour.
On macOS 14 or later, open the Notification Center widget editor and add FanBar. The widget displays the latest snapshot published by the main app; WidgetKit controls refresh timing, so use the menu-bar popover when you need second-level telemetry.
Install fanbar from Settings → General → Command Line & Automation → Command-line tool → Install…. It links /usr/local/bin/fanbar to the tool inside the app, so it updates with FanBar.
fanbar status # mode, preset, fans, temperatures
fanbar preset set performance
fanbar mode fixed 3000 --hold # keep it until you change it
fanbar mode auto # hand the fans back to macOS
Without --hold, macOS control comes back after the restore timer set in Settings. Add --json for machine-readable output. If FanBar isn't running, the command opens it in the background; switching modes needs the approved control service.
For Raycast, click Set Up in Raycast… in the same section, then add the script folder once in Raycast (Settings → Extensions → + → Add Script Directory). You get commands to switch presets, set a fixed RPM, return to Automatic, and see CPU, GPU, and SSD temperatures in root search.
Full reference: docs/cli.md.
Open Settings → General → Interface language and choose:
The setting is shared by the menu-bar popover, settings window, onboarding flow, status messages, helper errors, and the desktop widget.
Contributing · Code of Conduct · Support · Security policy
Please report suspected vulnerabilities through the private channel in the security policy. Bug reports, feature requests, and usage questions use the public issue forms below.
Before submitting, search existing issues. Then choose an issue form for a bug, feature request, or usage question. Bug reports should include the FanBar version, macOS version, Mac model, and steps to reproduce. Please remove personal information from screenshots and logs.
Clone the repository, then build a local app bundle:
zsh scripts/generate-icons.sh
FANBAR_ALLOW_ADHOC=1 FANBAR_SIGN_IDENTITY=- zsh scripts/package-app.sh
open dist/FanBar.app
FANBAR_ALLOW_ADHOC=1 FANBAR_SIGN_IDENTITY=- creates a verification-only ad-hoc package. Its privileged helper cannot authenticate, so use a real signing identity for fan-control testing or distribution. See CONTRIBUTING.md for setup and validation.
FANBAR_ALLOW_ADHOC=1 FANBAR_SIGN_IDENTITY=- zsh scripts/build-dmg.sh
The default output is dist/FanBar-<version>.dmg. To build a specific architecture:
FANBAR_ARCHS=arm64 FANBAR_APP_OUTPUT=dist/FanBar-arm64.app \
FANBAR_ALLOW_ADHOC=1 FANBAR_SIGN_IDENTITY=- zsh scripts/package-app.sh
FANBAR_SIGN_IDENTITY=- FANBAR_DMG_OUTPUT=dist/FanBar-arm64.dmg zsh scripts/build-dmg.sh dist/FanBar-arm64.app
FANBAR_ARCHS=x86_64 FANBAR_APP_OUTPUT=dist/FanBar-x86_64.app \
FANBAR_ALLOW_ADHOC=1 FANBAR_SIGN_IDENTITY=- zsh scripts/package-app.sh
FANBAR_SIGN_IDENTITY=- FANBAR_DMG_OUTPUT=dist/FanBar-x86_64.dmg zsh scripts/build-dmg.sh dist/FanBar-x86_64.app
Verify a DMG's signature, architecture, and installation structure with:
zsh scripts/test-dmg.sh dist/FanBar-0.6.3.dmg
FanBar separates the UI from privileged writes:
FanBar.app → privileged XPC → FanBarHelper (root) → AppleSMC
The helper does not expose arbitrary SMC writes. It only supports reading fans, setting a bounded target/preset/fraction, and restoring automatic control. macOS 13 and later use SMAppService; macOS 11–12 use a compatible launchd registration path.
Pull requests must pass lint, format, zero-warning build, tests and diff coverage; see docs/code-quality.md.
FanBar uses Sparkle 2 for online updates. The stable feed is the appcast.xml
asset in the latest GitHub Release. Every update must pass Developer ID,
notarization, and FanBar's independent EdDSA signature verification.
Store Apple notarization credentials once on the release Mac:
xcrun notarytool store-credentials FanBar-notary \
--apple-id "your Apple ID" \
--team-id "64S5F787T9"
After committing an updated CFBundleShortVersionString and increasing
CFBundleVersion on main, publish locally with:
gh auth login -h github.com
FANBAR_NOTARY_PROFILE=FanBar-notary zsh scripts/release-local.sh
The local release command requires a clean main checkout and performs the
universal2 build plus separate arm64 and x86_64 DMGs, signing,
notarization, DMG verification, checksums, signed appcast, Git tag, and
GitHub Release upload. Existing releases are preserved by default; use
--replace-assets only for an intentional retry.
The Sparkle private key is stored in the login Keychain under the FanBar
account. Do not regenerate it after the first release because installed clients
must keep trusting the same public key. CI releases also require the exported
private key in the SPARKLE_PRIVATE_KEY GitHub Actions secret.
GitHub Actions validates universal2 builds on pushes and pull requests. Local
publishing is the default. To opt into tag-triggered CI publishing, set the
repository variable FANBAR_PUBLISH_FROM_CI=true and configure
SPARKLE_PRIVATE_KEY plus the other release secrets. Do not enable CI publishing
while using the local release command.
When CI publishing is enabled, push a tag matching the app version:
git tag -a v0.6.3 -m "FanBar 0.6.3"
git push origin v0.6.3
When CI publishes a release, the homebrew job in macos-release.yml pins the
cask to it and opens a chore/homebrew-cask-<version> PR; merge it once the
checks pass. After a local release, or to pin another tag, run the script and
submit the cask change in a PR yourself:
python3 scripts/update-homebrew-cask.py # Latest stable release
# Or: python3 scripts/update-homebrew-cask.py v0.6.3
The script requires Python 3 and an authenticated gh CLI. It rejects drafts,
prereleases, and releases missing the universal DMG. Merge Casks/fanbar.rb into
main to make the new version available through brew update. The Homebrew CI
workflow checks cask style, the download checksum, installation, and removal.
Copyright © 2024–2026 Jarin He. FanBar's source code is licensed under the GNU General Public License v3.0.
You may use, modify, and redistribute FanBar—including commercially—as long as you comply with the GPL-3.0: keep the copyright and license notices, and release the source of any distributed modified version under the same license.
Name and icon are excluded. The "FanBar" name and the FanBar icon/logo are not covered by the GPL-3.0 license. If you distribute a modified version, you must rename it and replace the icon so it cannot be confused with the official FanBar.
The Apple Silicon control sequence references the MIT-licensed agoodkind/macos-smc-fan. See THIRD_PARTY_NOTICES.md for complete third-party attribution.
Thanks to these people for reporting bugs and helping make FanBar better:
Open Settings → General → Device Compatibility to check individual temperature sensors, fan readings, and control-service/request states. Onboarding and cooling attention states lead to the same view.
Checks stay on this Mac: they do not contact a server, install the service, or change fan speeds. Missing readings and failed attempts do not establish incompatibility. Service readiness and accepted requests do not verify physical RPM; request evidence is session-only.
The bundled catalog matches model and OS/app/helper versions locally. It currently contains no formally verified records and says so explicitly. Reports can be previewed and saved as JSON offline. Optional reporting to https://report.getfanbar.com requires explicit consent; raw reports are private unless the user chooses publication after review. Independent withdrawal credentials are saved in this Mac’s Keychain before sending. The closed report schema excludes serials, unique device identifiers, users, paths, processes, and temperature history.
The open-source Workers + D1 service, public matrix, review interface, upload schema and processing rules live in services/compatibility and contracts.