# performancemonitor **Repository Path**: nurmemet123/performancemonitor ## Basic Information - **Project Name**: performancemonitor - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-11 - **Last Updated**: 2026-08-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Performance Monitor 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. More at **[perfmon.knhome.nl](https://perfmon.knhome.nl)**. [![CI](https://github.com/inequitas/performancemonitor/actions/workflows/ci.yml/badge.svg)](https://github.com/inequitas/performancemonitor/actions/workflows/ci.yml) ![macOS](https://img.shields.io/badge/macOS-14%2B-blue) ![Swift](https://img.shields.io/badge/Swift-5.10-orange) ![Version](https://img.shields.io/badge/version-1.2.0-lightgrey) ![License](https://img.shields.io/badge/license-MIT-green) [![Sponsor](https://img.shields.io/badge/%E2%9D%A4-Sponsor-ea4aaa)](https://github.com/sponsors/inequitas)

Performance Monitor in use: live metrics in the menu bar, the overview popover with CPU, memory, disk, thermal, GPU, battery, network and Bluetooth cards, and the CPU detail window with per-core usage and top processes

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.2.0 - **Per-component power draw**: CPU, GPU, Neural Engine and memory wattage read separately, on top of the total system power that 1.1.0 added - **Per-process disk I/O**: a "Top Disk Usage" list in the Disk window, for processes running under your own user account - **Guided tour**: a five-step walkthrough on first launch, with a live preview of the menu bar. Reachable again from Settings → About - **Steadier menu bar**: fixed-width values so items stop jittering, plus a compact mode that combines every metric into one item - **Lighter again**: closed windows now tear their content down instead of quietly carrying on. A detail window that had been opened once kept re-rendering for the rest of the session That last one is worth more than a bullet point: [what a system monitor costs](https://perfmon.knhome.nl/benchmark.html) is the write-up of how it was measured, what it turned out to be, and the two ways I measured it wrong first. See [CHANGELOG.md](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 ```bash 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](https://github.com/inequitas/performancemonitor/releases) 2. Unzip and drag to `/Applications` 3. Launch, and 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+. ```bash 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 telemetry, no analytics, no account. Every measurement is taken and displayed on your own machine. The app makes exactly three network requests: an update check against GitHub, an optional public-IP lookup you can switch off, and a latency probe to a host you pick in Settings. The [privacy policy](https://perfmon.knhome.nl/privacy.html) names all three. --- ## 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](https://github.com/sponsors/inequitas) or [buying a coffee on Ko-fi](https://ko-fi.com/inequitas); 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](SUPPORTERS.md). ## License [MIT](LICENSE) --- ### 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, which 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