Skip to content
gentpanPublic

About

轻量原生的 macOS 菜单栏系统监控:CPU、GPU、内存、网络、温度,支持风扇调速与防休眠。Swift 6 + SwiftUI,液态玻璃界面。

Topics

Resources

Stars

65 stars

Watchers

1 watching

Forks

Repository files navigation

OpenStats

OpenStats

Your Mac at a glance — CPU, GPU, memory, network and temperatures in the menu bar, with fan control, keep-awake, one-click cleanup, an app uninstaller and an IP cleanliness check.

Release Stars Last commit Commit activity CI macOS License

OpenStats is a macOS menu-bar app that shows what your Mac is doing right now — per-core CPU load, GPU, memory pressure, network speed, disk, battery, temperatures and fans — and lets you act on it: spin the fans up, keep the Mac awake with the lid closed, clear caches, fully uninstall apps and disable startup items. Network details also check how clean your public IP is — whether it is flagged as a VPN, proxy, data center or for abuse. Everything is read on your own Mac, and there is no telemetry. An account is optional: sign in with GitHub, Google or Apple to sync your preferences to other Macs; the cloud keeps only your email, name and the settings document. Beyond that, the only network traffic comes from features you can turn off: a public-IP and cleanliness lookup when you open network details, a ping probe to a target you choose, and a daily check for a new version.

Download · Website · Changelog · Architecture

English · 简体中文


Install

Download OpenStats 0.6.3 from the website (signed with a Developer ID certificate and notarized by Apple) — pick the build for your Mac's chip:

Chip Download
Apple silicon (M1, M2, M3, M4, M5) OpenStats-0.6.3-AppleSilicon.dmg
Intel OpenStats-0.6.3-Intel.dmg

Not sure? Apple menu › About This Mac says "Chip Apple M…" on Apple silicon and "Processor Intel…" on Intel. Homebrew picks the right build for you. Recent Homebrew refuses to load casks from an untrusted third-party tap, so trust it once first:

brew tap gentpan/tap
brew trust gentpan/tap
brew install --cask openstats

Requires macOS 14 (Sonoma) or later. Developed and tested mainly on Apple silicon; on Intel Macs, Apple Intelligence process explanations are unavailable, CPU cores are not split into performance and efficiency groups, and some power and frequency readings may be missing. The interface is in English and Simplified Chinese, following the system language by default; switch it in Settings → General → Language.

Recent updates

Latest release 0.6.3 (2026-10-09) · full changelog (kept in Chinese)

2026-10-09 · 0.6.3 · 3 fixed

Fixed

  • 合并显示时菜单栏的小标签颜色过淡:图标中带有彩色网速圆点时,CPU、内存等标签会直接画成灰色,在深色菜单栏上不容易看清。标签和网速箭头现在与数值使用同一种前景色,仍通过字号区分标签与读数。跟进 Issue #5。
  • 应用卸载的残留查找增强:读取应用真实名称、内嵌辅助组件的包名和签名中的应用组,按容器元数据识别 UUID 命名的沙盒数据;最近文档、CrashReporter、Sparkle、SentryCrash 和厂商目录内的应用子项也会检查。补上 VS Code、Insiders、Arc、Chrome 的明确数据位置。共享容器、按名称找到的 Sentry 数据和可能共用的辅助组件数据会标明并默认不勾选,厂商共享父目录始终保留。扫描及回收前重查路径,跳过符号链接重定向。参考 Pearcleaner 的查找思路,跟进 Issue #4。
  • 应用卸载有部分文件未能移到废纸篓时,只统计实际成功的项目与空间,保留失败项供重试;只有应用本体成功移除才清除程序坞图标和累计卸载次数。
2026-10-01 · 0.6.3 · 3 added · 2 changed

Added

  • 菜单栏布局多一种“仅图标”:菜单栏只显示 OpenStats 标志,不画任何数值,点击弹出完整面板。原来要把所有显示项目都关掉才能只剩一个图标,而且显示的是通用的心电图符号;现在关掉所有项目时也显示 OpenStats 标志。仅图标模式下“整体风格”和“显示项目”暂不生效,已开启的项目会保留,切回其他布局后恢复。
  • “合并显示”和“仅图标”点开的是完整面板,指标、进程与常用工具集中在一页:顶部是健康评分与芯片、内存、系统、运行时间标签,下面两列卡片显示 CPU、GPU、内存、磁盘、网络、风扇(可直接切换自动 / 降温 / 强冷),再往下是电池、高占用进程,以及摄像头和麦克风是否正在使用、防休眠与清理入口、累计清理记录(已清理空间、已卸载应用、已优化次数)。顶部标签列出这台 Mac 上的全部项目,不再只列菜单栏里开启的。
  • 风扇从停转起步时显示“正在启动风扇…”。Apple 芯片的风扇固件从停转起步要先低速拖转约 5 秒,期间转速读数一直是 0,之前看起来像是点了降温没反应。

Changed

  • “合并为一个”改名为“合并显示”。
  • 仪表盘的芯片、内存、系统、运行时间、机型标签始终排成一行,放不下时依次省去机型、把运行时间缩成最大单位。
2026-09-24 · 0.6.3 · 2 added · 4 fixed

Added

  • 网络测速可以选线路:开着 Surge、Clash 等 VPN 或代理时,窗口顶部出现“直连 / 经 Surge”切换。直连绑定物理网卡、绕开代理,测的是本机宽带;经代理测的是代理线路。下载、上传与延迟都按选的线路走,每张卡片标出这次走的是哪条。
  • 国内分省三网延迟改用电信、联通、移动的标志,不再用“电 / 联 / 移”字块。

Fixed

  • 开着 VPN 时网络测速的延迟全是假的(零点几到十几毫秒):TCP 建连被本机代理当场应答,测到的只是本机到代理这一段,与节点远近无关。现在直连时绕开代理计时;经代理时改用同一条连接上的 HTTP 往返,每次都要等目标真的回应。国内三网节点只允许测建连,始终直连测,VPN 不让绕开时直接提示,不再给出假数字。远距离线路偶尔丢握手包,国内节点多测一次、超时放宽到 4 秒。
  • 本机宽带的延迟扣掉 Cloudflare 响应头里报的服务器处理时间,与 Cloudflare 官方测速的算法一致。
  • 测速后顶栏出现“本次用掉”时,标题“网络测速”被挤成竖排。
  • 绕开代理解析域名时,Cloudflare DoH 连不上就换 Google、阿里的 DoH,出口与分流窗口的原始出口归属地也因此更容易查到。

Activity

Commits per day over the last 26 weeks

Star history

At a glance

Main window dashboard, dark Main window dashboard, light

Where the numbers show

Menu bar

  • Eight styles, chosen once for every metric: two-line text, one-line text, icons, rings, pies, history bars, level meters and status dots. Any metric can be given its own style; Settings previews each one with sample data and says what the shape means.
  • Network speed in two rows with dots or arrows, or on one line — green for upload, blue for download, always with its unit (KB/s, MB/s, GB/s).
  • Small and consistent type: 7 pt labels over 10 pt figures, 11 pt on one line, 9 pt for network speed. Figures are fixed-width, so the bar does not jitter. Hover for every reading.

Menu bar

Detail popovers — each metric gets its own menu-bar item; click it for a narrow popover. Choose which sections each popover shows in Settings. Esc closes it.

  • CPU. Usage with a status and 30-second change, thermal headroom; a per-core heatmap; load by core type; queueing (load average per core, rising or falling); usage summed by app.
  • Memory. What is still available with a pressure timeline; a waterline bar; memory saved by compression and live swap I/O; usage summed by app.
  • Network. Traffic history; a connection-probe grid (green when reachable, red when not, last 60 pings); interface, Wi-Fi signal, VPN / proxy; local and public IPv4 / IPv6 with a flag, region and ASN; an IP cleanliness score with an F to A+ grade and risk flags (VPN, proxy, Tor, data center, abuse); DNS flush and one-click switching to Cloudflare, Google, Tencent, Alibaba Cloud or manual servers; per-process traffic.
  • Disk. Startup disk capacity as a segmented bar (used, purgeable, available); read / write speed with a 60-second history; SSD health; the apps reading and writing the most.
  • GPU, Temperature & fans. History, sensor groups, fan speeds and quick modes.
  • Battery. Charge level, time remaining, adapter wattage and battery temperature; a 24-hour charge curve; power draw; health and cycle count; the batteries of connected Bluetooth devices (AirPods, Magic Keyboard / Mouse / Trackpad). Macs without a battery show the Bluetooth devices only.

CPU popover Disk popover Memory popover, dark

IP cleanliness check — see at a glance whether your public IP is clean: the CleanIP.io score with an F to A+ grade band, a risk score and the risk flags it hits (VPN, proxy, Tor, data center, abuse history and more); the IP address block marks native vs. broadcast and residential vs. data center with badges. IPv4 and IPv6 are checked separately, and results are cached on the Mac for 7 days unless the address changes or you refresh.

IP address and IP cleanliness, light IP address and IP cleanliness, dark

Main window — a sidebar with Dashboard, This Mac, History, CPU, GPU, Memory, Disk, Network, Temperature & fans, Battery, plus the Processes, Startup items, Keep awake, Clean and Uninstall tools; resizable in both directions. See Cleanup.

Ask Apple Intelligence about a process — right-click a process you don't recognise and the on-device model explains what it is, whether its usage looks normal and whether it is safe to quit. No third-party AI and no network; requires macOS 26 with Apple Intelligence turned on. Answers can be wrong — check before you quit anything.

White and blue in light mode, black and blue in dark mode — one look across windows and popovers, switched with one click or following the system.

Temperature & fans Keep awake

Fans and sleep

Fan mode What it does
Auto Hands the fans back to macOS
Cool Holds them at 60% between minimum and maximum speed
Max Full speed
Custom A slider, anywhere in the fan's range

In Custom, the fans are handed back to macOS the moment the CPU reaches the safety temperature (95 °C by default). Quitting OpenStats, or the app crashing, restores automatic control. Running with the lid closed switches itself off on battery below a floor you choose.

Both need system privileges, provided by a small helper registered with SMAppService and approved once in System Settings → General → Login Items. The helper offers a fixed set of operations — set a fan's target speed, return fans to auto, toggle pmset disablesleep, flush the DNS cache, purge memory — and never runs arbitrary commands. It checks the caller's code signature, restores fans and sleep when the app disconnects, and after an unclean exit restores them at the next boot.

Cleanup

  • What it scans. App caches, logs and crash reports, browser caches (Chrome, Edge, Brave, Arc, Firefox, Safari), Xcode DerivedData, simulator caches, the npm cache, Xcode archives, unfinished downloads, installers and the Trash.
  • Review first. Sizes by category, every rule expandable to its items, a second click to confirm. Caches and logs are deleted outright so the space comes back at once; downloads go to the Trash. One switch sends everything to the Trash instead.
  • Safety. Only allow-listed folders are ever touched. Keychains, password managers, VPNs, cookies and history are off limits. Caches of running apps are skipped, browsers must be quit first, and every item is checked again right before it goes. Each action is logged to ~/Library/Logs/OpenStats/cleanup.log.
  • Maintenance. Flush the DNS cache and purge memory — through the helper if it is installed, otherwise after a one-time administrator prompt.

Cleanup

Uninstaller and startup items

  • Uninstall apps: lists third-party apps in Applications with their size. Pick one or drop an app in, and OpenStats finds what it left in your Library — app data, caches, preferences, sandbox containers, saved window state, logs, web data and login items — each of which you can untick. It also checks bundled helper identifiers, UUID container metadata, signed application groups and known app-specific data paths. Potentially shared data is left unchecked. Confirming moves selected items to the Trash (restorable); the Dock icon is removed only after the app is successfully moved. Built-in and Apple apps are not listed, and running apps must be quit first.
  • Startup items: lists LaunchAgents for the current user and all users, plus system LaunchDaemons, with the owning app, executable, whether it runs at login or is kept alive, and whether it is running, loaded or disabled. Your own items can be disabled or re-enabled in place (recorded in launchd's disabled list and unloaded, no files deleted); the rest are read-only, with a shortcut to the system Login Items settings.

Startup items

Your data

Metrics come from the kernel (host_processor_info, host_statistics64, sysctl), IOKit and the SMC on your own Mac. Preferences live in the app's user defaults and contain nothing personal. There is no analytics and no telemetry.

Every feature that touches the network can be turned off — the first two in Settings → Network, the update check in Settings → About:

  • Public IP: when you open network details, one request to Cloudflare 1.1.1.1 (ipify as fallback) for your public address, cached for 10 minutes. Location, ASN, network type and the cleanliness score come from cleanip.io, queried directly from each Mac with nothing but the public address and never through our servers; a result is kept for a week unless the address changes or you refresh.
  • Connection probe: an ICMP ping to the target you pick (Cloudflare, Google, Alibaba Cloud, Tencent or your router) once a second while network details are open (every 10 seconds in the background), only while the network item is in the menu bar or network details are open.
  • Update check: at launch and once a day, the app reads a version manifest from getopenstats.com — the manifest only. When a new version is out it asks; nothing installs without your click.

An account is optional and only syncs preferences after you sign in; it never carries monitoring data.

Process explanations run entirely on device through Apple Intelligence; process details never leave the Mac.

Build & run

Requires macOS 14+, Xcode 26 or later (CommandLineTools alone lacks the SwiftUI macro plugins) and XcodeGen.

brew install xcodegen
make run                  # generate the project, build Debug and launch
make install              # build Release, install into /Applications and launch
make test                 # unit tests: metrics, SMC decoding, cleanup safety
make open                 # generate the project and open it in Xcode

The app is a menu-bar agent, so there is little to screenshot. Render the surfaces with live data instead:

build/DerivedData/Build/Products/Debug/OpenStats.app/Contents/MacOS/OpenStats --snapshot ./snapshots

To measure the panel while it is open, launch with --show-panel, which opens the panel and pins it.

After editing CHANGELOG.md, run python3 Scripts/sync_changelog.py to refresh the recent updates above and the activity chart.

Distribution

Developer ID only, not the App Store — the sandbox forbids talking to the SMC, reading other apps' caches and installing a privileged helper, which is most of the feature set.

What you have What others get
Nothing Ad-hoc signature — runs on your Mac only. Others see "OpenStats is damaged".
Developer ID certificate Hardened runtime. Others see "Apple cannot check it for malicious software".
Certificate + notarization Gatekeeper accepts it — the normal "downloaded from the internet" prompt.

make build and make install sign with the first Developer ID Application certificate in the keychain and fall back to ad-hoc without one. The helper reads its own team at run time and accepts only callers signed by the same team.

make release                          # sign, notarize, staple, build the DMG and a Homebrew cask
NOTARY_PROFILE=OpenStats make release # use another notarytool keychain profile
SKIP_NOTARIZE=1 make release          # an unnotarized DMG for testing on this Mac only

Scripts/release.sh refuses to produce a DMG that Gatekeeper would still reject.

Architecture

  • Packages/OpenStatsKit/Sources/SMC — SMC reads and writes, fan control, temperature sensor discovery.
  • Packages/OpenStatsKit/Sources/Metrics — samplers for CPU, memory, network, GPU, disk, battery, processes and sensors, and MetricsHub, which samples only what is on screen.
  • Packages/OpenStatsKit/Sources/Cleaner — cleanup rules, the safety guard, scanning and cleaning.
  • Packages/OpenStatsKit/Sources/HelperShared — the XPC protocol and maintenance commands.
  • Packages/OpenStatsKit/Sources/OpenStatsUI — design tokens, the panel, settings and the menu-bar renderer.
  • Helper/ — the privileged helper and its launchd plist. App/ — the entry point.

More in ARCHITECTURE.md. Every change to the app is logged, dated, in CHANGELOG.md.

Acknowledgements

OpenStats builds on these open-source projects. Thank you.

Project Author License What OpenStats took
Stats Serhiy Mytrovtsiy MIT SMC access, the Apple Silicon fan unlock sequence and the menu-bar mini widget metrics
Mole tw93 GPL-3.0 Which folders are worth cleaning and which must never be touched; the cleaner is an independent Swift implementation and contains no Mole code
QuotaBar GiantAccel, LLC MIT This README's layout, the changelog sync and the activity chart

Details in ThirdPartyNotices.md.

OpenStats is an independent third-party app. It is not affiliated with, endorsed by, or sponsored by Apple or any other company it mentions. Their names and logos belong to their respective owners.

License

MIT — see LICENSE.

About

轻量原生的 macOS 菜单栏系统监控:CPU、GPU、内存、网络、温度,支持风扇调速与防休眠。Swift 6 + SwiftUI,液态玻璃界面。

Topics

Resources

Stars

65 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages