Skip to content

inequitas/performancemonitor

Repository files navigation

Performance Monitor

perfmon.knhome.nl — A lightweight macOS menu bar app that gives you real-time system metrics at a glance — CPU, memory, network, disk, GPU, battery, and Bluetooth, all in a clean popover interface.

CI macOS Swift Version License Sponsor

Performance Monitor overview popover showing CPU, memory, disk, thermal, GPU, battery, network and Bluetooth cards

CPU detail window with per-core usage Network detail window with latency and throughput charts Thermal detail window with per-sensor temperatures

More screenshots (all detail views and settings) in screenshots/.


Requirements

  • Apple Silicon (M1 or later) — this build is arm64-only and will not run on Intel Macs
  • macOS 14 (Sonoma) or later

What's new in v1.0.0

  • Signed auto-updates — in-app updates are cryptographically verified (Ed25519) before installation
  • Beta channel — separate "Performance Monitor Beta" app for testing pre-releases alongside the stable app
  • Lighter footprint — process sampling only runs while visible; all system reads off the main thread
  • First-run onboarding, VoiceOver support, and local (never uploaded) crash reports

See CHANGELOG.md for the full version history.


Features

CPU

  • Overall usage percentage updated every second
  • Per-process breakdown (Top CPU) with usage normalized across all logical cores
  • Performance and Efficiency core counts (Apple Silicon)
  • Historical usage chart

Memory

  • Real-time breakdown: Used, Wired, Compressed, Free
  • Memory pressure indicator
  • Historical usage chart

Network

  • Live upload and download throughput
  • Butterfly chart in detail view: download up, upload down, shared scale with axis labels
  • VPN indicator: shield icon always visible — green (VPN on), blue (FortiClient), grey (off)
  • Connection type indicator: WiFi and/or Ethernet icon; primary connection is green, secondary is white
  • Local IP address (tap to copy)
  • Public IP address (tap to copy)
  • Wi-Fi SSID and signal strength in dBm with visual bar indicator
  • Historical speed chart

Disk

  • Read and write throughput per second
  • Free and total disk space
  • Historical I/O chart

GPU & Displays

  • Live GPU utilization % via IOAccelerator (same source as Activity Monitor)
  • Switchable card view: chart sparkline, ring gauge, or display info
  • Connected display names with native pixel resolutions and Retina badge
  • Quick link to Display Arrangement settings

Battery

  • Charge percentage and charging state
  • Time remaining / time to full
  • Battery health percentage and condition
  • Cycle count and design cycle count
  • Temperature, voltage, and amperage

Bluetooth

  • Connected and paired device list
  • Battery percentage per device:
    • AirPods — Left, Right, and Case shown separately
    • BLE devices (e.g. Logitech MX Master) — battery read via GATT Battery Service

Installation

Homebrew

brew install --cask inequitas/tap/performance-monitor

Gatekeeper note: The app is ad-hoc signed (no Apple Developer ID). On first launch, right-click the app → Open to bypass the unidentified developer warning.

Manual

  1. Download the latest Performance Monitor.app from Releases
  2. Unzip and drag to /Applications
  3. Launch — the app appears in your menu bar
  4. Grant Bluetooth permission when prompted to see Bluetooth device info

Gatekeeper note: The app is ad-hoc signed (no Apple Developer ID). On first launch, right-click the app → Open to bypass the unidentified developer warning.


Beta releases

Beta builds let early testers try upcoming changes before they reach the stable channel.

  • Workflow: new features are developed on the beta branch (branched from main). Beta builds are tagged vX.Y.Z-beta.N (e.g. v1.1.0-beta.1) and published as GitHub pre-releases. Stable releases are still tagged vX.Y.Z from main, as before.
  • Building a beta: bash build_app.sh --beta produces "Performance Monitor Beta" with its own bundle ID (com.performancemonitor.beta, so its settings are separate from the stable app) and a badged icon. scripts/release.sh X.Y.Z-beta.N --beta [--publish] builds, tags, and publishes it as a pre-release.
  • Update channel: each build embeds a PMUpdateChannel key (stable or beta) in its Info.plist. Stable installs only ever see stable releases (GitHub's "latest" endpoint never returns a pre-release). Beta installs check the full releases list and are offered the newest version — beta or stable — so a beta install eventually rolls onto the corresponding stable release once one ships. The channel is shown in Settings → Updates when running the beta build.

Building from Source

Requires an Apple Silicon Mac, Xcode Command Line Tools, and Swift 5.10+.

git clone https://github.com/inequitas/performancemonitor.git
cd performancemonitor
bash build_app.sh
open ".build/bundle/Performance Monitor.app"

The build script compiles a release binary, assembles the .app bundle (under the hidden .build/bundle/, so Spotlight doesn't index it), embeds the icon, injects the version from VERSION, and applies an ad-hoc code signature. Only the signed .zip for distribution is written to dist/. Pass --beta to build the beta-channel variant instead.


Permissions

Permission Why
Bluetooth Read paired device names and battery levels

No data is collected or transmitted. Everything runs locally.


Support

Performance Monitor is free and will stay free — no paywalled features, ever. If it saves you the price of a paid alternative, consider sponsoring on GitHub or buying a coffee on Ko-fi; it helps cover Apple's Developer Program fee so the app can be notarised. A ⭐ on the repo helps too. Supporters are listed in SUPPORTERS.md.

License

MIT


Menu Bar

  • Configurable metric: CPU, Memory, Network, or Disk
  • Two display styles: Sparkline (mini live chart + current value) or Text only
  • Sparkline shows the last 30 seconds of history, updated every second

Thermal & Fans

  • CPU, GPU, and Battery temperatures read from the SMC via IOKit — works across all Apple Silicon (M1–M4)
  • All three temperatures shown on the main overview card, colour-coded green → yellow → orange → red
  • Extended sensor detail in the Thermal view: individual CPU cores, GPU clusters, Trackpad, Storage, Memory, and System board sensors
  • Grouped rows with expandable chevrons — tap to see individual core or cluster readings
  • System group (Trackpad, WiFi/Airport proximity, Charger) shown expanded by default
  • Fan speeds (Left/Right) with min/max range, position bar, and intake airflow temperature
  • System thermal pressure level (Nominal → Critical)

Tech Stack

  • Swift / SwiftUI — UI and app lifecycle
  • IOKit — CPU, disk, battery, and HID device metrics
  • CoreWLAN — Wi-Fi signal strength
  • IOBluetooth — Paired Bluetooth device list
  • CoreBluetooth — BLE GATT Battery Service reads
  • Swift Package Manager — No Xcode project required

About

Lightweight, open-source macOS menu bar system monitor — CPU, memory, network, disk, GPU, temperatures, battery. No telemetry, Apple Silicon native.

Topics

Resources

License

Stars

1 star

Watchers

1 watching

Forks

Sponsor this project

Contributors