Alex Goodkind 20030a2a1c feat: added better fan control for M3/M4 Apple Silicon (#2924)
* Fix Ftst key handling for Apple Silicon fan control

* Update CFBundleVersion to 747 in Info.plist

Signed-off-by: Alex Goodkind <alex@goodkind.io>

* Update TeamId and SMC.Helper certificate identifier in Info.plist

Signed-off-by: Alex Goodkind <alex@goodkind.io>

* Add debug logging to SMC fan control functions

* Use writeWithRetry for Apple Silicon fan control writes and bump helper version to 1.0.3

* SMC fan control: serialize ops, Ftst timing, verification, logging

- Helper: serial queue for setFanMode/setFanSpeed/resetFanControl
- smc.swift: 3s wait after Ftst=1, longer mode retry (100ms), SMC result logging
- helpers: per-fan verification with cancel-on-supersede, clearer logs
- smc.swift: neutral write logs (no 'succeeded'), FAILED on error

* - Updated error handling in SMCHelper to suppress expected XPC errors (codes 4097 and 4099) during helper updates/restarts.
- Removed unnecessary debug print statement in ModeButtons for improved log clarity.

* Update version numbers in Info.plist files to 752 and change TeamId for SMC.Helper

* Add FanMode.auto3 and isAutomatic, re-add F%dMd write in automatic path, use isAutomatic in countManualFans; bump SMC Helper to 1.0.24

* Apple Silicon fan control: direct-first writes, strip diagnostic bloat

Try direct F%dMd=1 write before Ftst unlock (instant on M1, fallback
on M3/M4). Remove verification system, diagnostic prints, dead code.

* Apple Silicon fan control: direct-first writes

Try direct F%dMd=1 write before Ftst unlock (instant on M1,
fallback on M3/M4).

Bump helper to 1.0.2/3, Stats/Widgets to 751.

---------

Signed-off-by: Alex Goodkind <alex@goodkind.io>
2026-02-22 15:17:23 +01:00
2025-01-26 14:33:31 +01:00
2026-02-15 18:09:05 +01:00
2026-02-15 18:09:05 +01:00
2019-07-04 19:30:19 +02:00
2019-07-02 13:23:20 +02:00


Stats

Stats Stats

macOS system monitor in your menu bar

Installation

Manual

You can download the latest version here. This will download a file called Stats.dmg. Open it and move the app to the application folder.

Homebrew

To install it using Homebrew, open the Terminal app and type:

brew install stats

Legacy version

Legacy version for older systems could be found here.

Requirements

Stats is supported on the released macOS version starting from macOS 10.15 (Catalina).

Features

Stats is an application that allows you to monitor your macOS system.

  • CPU utilization
  • GPU utilization
  • Memory usage
  • Disk utilization
  • Network usage
  • Battery level
  • Fan's control (not maintained)
  • Sensors information (Temperature/Voltage/Power)
  • Bluetooth devices
  • Multiple time zone clock

FAQs

How do you change the order of the menu bar icons?

macOS decides the order of the menu bar items not Stats - it may change after the first reboot after installing Stats.

To change the order of any menu bar icon - macOS Mojave (version 10.14) and up.

  1. Hold down ⌘ (command key).
  2. Drag the icon to the desired position on the menu bar.
  3. Release ⌘ (command key)

How to reduce energy impact or CPU usage of Stats?

Stats tries to be efficient as it's possible. But reading some data periodically is not a cheap task. Each module has its own "price". So, if you want to reduce energy impact from the Stats you need to disable some Stats modules. The most inefficient modules are Sensors and Bluetooth. Disabling these modules could reduce CPU usage and power efficiency by up to 50% in some cases.

Fan control

Fan control is in legacy mode. It does not receive any updates or fixes. It's not dropped from the app just because in the old Macs it works pretty acceptable. I'm open to accepting fixed or improvements (via PR) for this feature in case someone would like to help with that. But have no option and time to provide support for this feature.

Sensors show incorrect CPU/GPU core count

CPU/GPU sensors are simply thermal zones (sensors) on the CPU/GPU. They have no relation to the number of cores or specific cores. For example, a CPU is typically divided into two clusters: efficiency and performance. Each cluster contains multiple temperature sensors, and Stats simply displays these sensors. However, "CPU Efficient Core 1" does not represent the temperature of a single efficient core—it only indicates one of the temperature sensors within the efficiency core cluster. Additionally, with each new SoC, Apple changes the sensor keys. As a result, it takes time to determine which SMC values correspond to the appropriate sensors. If anyone knows how to accurately match the sensors for Apple Silicon, please contact me.

App crash what to do?

First, ensure that you are using the latest version of Stats. There is a high chance that a fix preventing the crash has already been released. If you are already running the latest version, check the open issues. Only if none of the existing issues address your problem should you open a new issue.

Why my issue was closed without any response?

Most probably because it's a duplicated issue and there is an answer to the question, report, or proposition. Please use a search by closed issues to get an answer. So, if your issue was closed without any response, most probably it already has a response.

External API

Stats uses some external APIs, such as:

Both of these APIs are used to check for updates. Additionally, an external request is required to obtain the public IP address. I do not want to use any third-party providers for retrieving the public IP address, so I use my own server for this purpose.

If you have concerns about these requests, you have a few options:

  • propose a PR that allows these features to work without an external server
  • block both of these servers using any network filtering app (if you're reading this, you're likely using something like Little Snitch, so you can easily do this). In this case do not expect to receive any updates or see your public IP in the network module.

Supported languages

You can help by adding a new language or improving the existing translation.

License

MIT License

Description
No description provided
Readme MIT 58 MiB
Languages
Swift 91.8%
C++ 4%
Python 2.3%
C 1.1%
Objective-C 0.4%
Other 0.3%