byrencheema/airstats

A menu bar system monitor for macOS. CPU, memory, GPU, network, disk, battery and thermals at 0.046% CPU.

296

stars

134

commits

Swift

primary language

Sep 3, 2026

updated

airstats.app
appkit
macos
menu-bar
swift
swiftui
system-monitor

README

AirStats

An ultra lightweight macOS system monitor.


AirStats is a system monitor for the Mac menu bar. It reads CPU, memory, GPU, network, disk, battery, temperature, process and host statistics from the kernel and shows them in three places: the menu bar itself, a panel that drops down when you click the status item, and a desktop widget you can leave on screen.

It is built to be genuinely light. A menu bar monitor runs all day, every day, so AirStats holds a few megabytes and a fraction of a percent of one core rather than the tens of megabytes its peers take. It has no Dock icon, and reads the system through Mach, IOKit, sysctl and CoreWLAN.

Requirements

  • macOS 14 or later
  • Apple silicon

Install

Download it from airstats.app, open the dmg and drag the app to Applications. It is signed and notarized, so it opens with no warning.

Or with Homebrew:

brew install --cask byrencheema/tap/airstats

AirStats updates itself with Sparkle. It asks airstats.app once a week whether a newer version exists, and installs one only when you say so. Both of those can be turned off in General settings.

Build from source

You need the Swift 6 toolchain that ships with Xcode 16.

Scripts/build.sh release
cp -R .build/arm64-apple-macosx/release/AirStats.app /Applications/
open /Applications/AirStats.app

Scripts/build.sh wraps the SwiftPM binary in a .app bundle, copies Sparkle.framework into Contents/Frameworks, and signs it ad hoc. macOS grants a status item only to a signed bundle with LSUIElement set. Run the script with no argument for a debug build.

An ad-hoc signature is enough to run a build you made yourself, and not enough to travel: macOS refuses an ad-hoc bundle that arrived over the internet. Scripts/release.sh is what produces the download above, signing with a Developer ID certificate and stapling Apple's notarization ticket to the .dmg.

Source layout

PathWhat lives there
Sources/AirStatKitCollectors, the sampling engine, settings, formatting. No UI.
Sources/AirStatUIMenu bar drawing, panel, desktop widget, settings window, charts, design system.
Sources/AirStatsThe executable, app delegate, and the probe and render commands.
Tests/AirStatKitTestsContract tests for the collectors, plus settings and formatting.
Scripts/build.shBuilds the binary and assembles the .app.
Scripts/release.shSigns, notarizes and packages the .dmg that ships.
Scripts/appcast.pyWrites a release into the appcast Sparkle reads.
Scripts/benchmark.pySamples the menu bar monitors on your Mac over one shared window.

AirStatKit never imports SwiftUI or AppKit, which is what lets the tests and the probe run in a windowless process.

Contributing

CONTRIBUTING.md has the checks to run before a pull request and the house rules.

License

MIT. See LICENSE.

Contributors

byrencheema

134 commits

byrencheema/airstats

A menu bar system monitor for macOS. CPU, memory, GPU, network, disk, battery and thermals at 0.046% CPU.

296

stars

134

commits

Swift

primary language

Sep 3, 2026

updated

airstats.app
appkit
macos
menu-bar
swift
swiftui
system-monitor

README

AirStats

An ultra lightweight macOS system monitor.


AirStats is a system monitor for the Mac menu bar. It reads CPU, memory, GPU, network, disk, battery, temperature, process and host statistics from the kernel and shows them in three places: the menu bar itself, a panel that drops down when you click the status item, and a desktop widget you can leave on screen.

It is built to be genuinely light. A menu bar monitor runs all day, every day, so AirStats holds a few megabytes and a fraction of a percent of one core rather than the tens of megabytes its peers take. It has no Dock icon, and reads the system through Mach, IOKit, sysctl and CoreWLAN.

Requirements

  • macOS 14 or later
  • Apple silicon

Install

Download it from airstats.app, open the dmg and drag the app to Applications. It is signed and notarized, so it opens with no warning.

Or with Homebrew:

brew install --cask byrencheema/tap/airstats

AirStats updates itself with Sparkle. It asks airstats.app once a week whether a newer version exists, and installs one only when you say so. Both of those can be turned off in General settings.

Build from source

You need the Swift 6 toolchain that ships with Xcode 16.

Scripts/build.sh release
cp -R .build/arm64-apple-macosx/release/AirStats.app /Applications/
open /Applications/AirStats.app

Scripts/build.sh wraps the SwiftPM binary in a .app bundle, copies Sparkle.framework into Contents/Frameworks, and signs it ad hoc. macOS grants a status item only to a signed bundle with LSUIElement set. Run the script with no argument for a debug build.

An ad-hoc signature is enough to run a build you made yourself, and not enough to travel: macOS refuses an ad-hoc bundle that arrived over the internet. Scripts/release.sh is what produces the download above, signing with a Developer ID certificate and stapling Apple's notarization ticket to the .dmg.

Source layout

PathWhat lives there
Sources/AirStatKitCollectors, the sampling engine, settings, formatting. No UI.
Sources/AirStatUIMenu bar drawing, panel, desktop widget, settings window, charts, design system.
Sources/AirStatsThe executable, app delegate, and the probe and render commands.
Tests/AirStatKitTestsContract tests for the collectors, plus settings and formatting.
Scripts/build.shBuilds the binary and assembles the .app.
Scripts/release.shSigns, notarizes and packages the .dmg that ships.
Scripts/appcast.pyWrites a release into the appcast Sparkle reads.
Scripts/benchmark.pySamples the menu bar monitors on your Mac over one shared window.

AirStatKit never imports SwiftUI or AppKit, which is what lets the tests and the probe run in a windowless process.

Contributing

CONTRIBUTING.md has the checks to run before a pull request and the house rules.

License

MIT. See LICENSE.

Contributors

byrencheema

134 commits

Languages

Swift

97.1%

Python

1.8%

Shell

1.1%