ZOYKUHot Board

slawek19926/vitalsDokumentasi

Native open-source system monitor for macOS — Apple Silicon, SMC sensors, processes, disks, network and system health.

Pemberitahuan Bahasa:Dokumentasi lokal tidak tersedia. Menampilkan versi bahasa Inggris asli resmi.
Instalasi Cepat
git clone https://github.com/slawek19926/vitals.git

Vitals

A native, open-source system monitor for macOS and Apple Silicon

CPU, GPU, Neural Engine, SMC, processes, disks, network, SMART, benchmarks and system health — in one fast native app.

No Electron. No telemetry. No third-party dependencies.

Download latest release Star Vitals Support Vitals

Support Vitals: donations go toward the Apple Developer Program membership needed for signed and notarized releases, a smoother privileged-helper installation, and future Homebrew distribution.

Latest release Downloads GitHub stars macOS 13+ Swift 5.9 AppKit Apple silicon Zero dependencies GPLv3 Support

English · Polski

Why Vitals? It goes deeper than Activity Monitor: P/E clusters, GPU and Neural Engine, available SMC readings, per-disk and per-interface monitoring, SMART, process energy, benchmarks and system-health diagnostics — without sending your data off the Mac.

Summary: CPU, GPU, temperature and RAM meters, CPU overview with kernel time, top 15 processes and a memory graph

Performance: device list and per-core graphs
Performance — every core, disk and interface on its own
Disk space: directory treemap and a file type ring
Disk space — treemap with drill-down and zoom
Processes: tree with CPU, memory and energy columns
Processes — PPID tree, energy, wakeups, signals
Power and sensors: SMC sensor tree
Power & sensors — the whole SMC with min/max
Apple Silicon: P and E core clusters with graphs
Apple Silicon — P/E clusters, GPU, Neural Engine
System health: list of checks and an alert log
System health — checks, alerts, event log

What it does

Summary CPU / GPU / temperature / RAM meters, system power from SMC, top 15 processes and tiles for network, disks and power. The graphs respond to the mouse: hovering rewinds the process list to that moment, dragging averages a range.
Performance A separate entry for every device: P/E cores, memory, GPU, Neural Engine, each physical disk (type, architecture — NVMe / USB / SATA / card reader — and SMART) and each network interface (Wi-Fi with SSID, Ethernet, hotspot, Bluetooth PAN, VPN tunnel with the profile name).
Processes A PPID tree with app icons, columns for CPU / memory / threads / disk R-W / energy impact / wakeups, quitting and signals, priority (nice), process sampling, exited processes highlighted for 8 s.
Power & sensors Measured SMC temperatures and fan speeds, confirmed power-rail readings (power, voltage and current), battery values and subsystem power. Configuration, setpoints and opaque SMC keys are excluded; macOS does not expose every hardware sensor.
Apple Silicon P/E clusters with a graph per core, GPU (device / renderer / tiler), Neural Engine, media engine with the codec list.
Disk space Fast scanning through getattrlistbulk (in parallel), a treemap with drill-down and zoom, a file category ring, largest folders and files, moving items to the Trash.
System health Checks for free space, SMART, battery, thermals, memory, load, zombie processes and security (SIP, FileVault, Gatekeeper, firewall) with an event log.
Alerts Thresholds for temperature, CPU, swap, free space, battery and a single process — with macOS notifications.
Benchmarks Selectable tests: CPU (single core / all cores), memory bandwidth, sequential disk write and read, GPU compute in Metal. Result history and CSV export.
Panels and menu bar Floating desktop panels (CPU, memory, GPU, temperature, network, disks, power) with a live graph, dragging and adjustable opacity. Compact menu bar items show values; network rates can use one or two rows. Left-click opens a simple or advanced panel with values, graphs or both and details for that metric.
And the rest launchd services with actions, users with their processes, TCP/UDP connections grouped by app and destination (expand a destination to inspect its sockets and local ports; socket view and remote/listening/local filters), Bluetooth with connected/paired devices and on-demand nearby BLE scanning, startup items, installed apps, drivers and kernel extensions, system and hardware information.

On top of that: Polish, English and Simplified Chinese switched on the fly (no restart), launch at login and background operation (closing the window leaves the app in the menu bar and slows sampling down), light / dark / monochrome phosphor themes, configurable columns in every table, measurement history exported to CSV.

See the changelog for release details (English first, then Polish).

Install

Download Vitals-<version>.zip from the releases, unpack it and move Vitals.app to /Applications.

The app checks for updates on its own (once a day, and on demand from Vitals → Check for Updates…). A new version is downloaded only after you agree, and before installing it the signature, team identifier and bundle identifier are verified.

Privileges

macOS exposes CPU and memory of other users' processes, as well as the CPU / GPU / Neural Engine energy counters, only to processes with administrator privileges. Without them some fields show “No access”. There are two ways around it:

  • Privileged helper (recommended) — one authorization, then no prompts at launch.
  • Restart as administrator — a password every time you start the app.
How to enable the helper and what it does

The bundle ships a daemon called online.equishow.vitals.helper. The app first tries SMAppService (approval in Login Items); when macOS rejects a daemon signed with a personal team certificate, it falls back to SMJobBless: a single authorization installs the helper into /Library/PrivilegedHelperTools. Over XPC the helper provides the full process list, power readings (powermetrics) and launchd service actions. Enable it in Settings → Helper and privileges → “Enable helper…”, disable it with the same button (which removes the plist and the binary).

The helper accepts only the matching signed app running as root or a member of the macOS administrator group. Standard user accounts cannot access the helper even if another administrator installed it. Service and process-priority changes recheck the caller identity on each request.

When a newer Vitals version starts, it automatically checks the active helper and updates an older version. It preserves the installation method (SMJobBless or SMAppService) and verifies the running version over XPC. macOS may request your password or approval in Login Items again. After cancellation or an error, automatic installation is not retried in the same session; use “Update helper…” in Settings to retry. A disabled helper is not automatically installed, and a newer helper is not downgraded.

Building the helper requires an Apple Development certificate (a free Apple ID is enough) — the SMAuthorizedClients / SMPrivilegedExecutables rules are generated from the certificate's OU at build time:

  1. Xcode → Settings… → Accounts → “+” → sign in with your Apple ID.
  2. Personal Team → Manage Certificates… → “+” → Apple Development.
  3. security find-identity -v -p codesigning prints e.g. "Apple Development: Jane Doe (ABCDE12345)".
  4. CODESIGN_IDENTITY="Apple Development: Jane Doe (ABCDE12345)" ./build.sh

If security find-identity -v reports “0 valid identities”, the Apple WWDR G3 intermediate certificate is missing: curl -O https://www.apple.com/certificateauthority/AppleWWDRCAG3.cer && security import AppleWWDRCAG3.cer -k ~/Library/Keychains/login.keychain-db

Without a certificate the bundle gets an ad-hoc signature: the app runs, but the helper cannot be installed.

A note on energy counters: on macOS 26/27 the IOReport “Energy Model” is frozen for everything except Apple's own tools, root included — so without the helper the CPU / GPU / ANE power fields show “—”. System and charger power comes from SMC and always works. With the helper the app reads powermetrics and shows power plus the real P/E cluster and GPU clocks.

Building from source

Requires Xcode 15+ (Swift 5.9+). No external dependencies.

git clone https://github.com/slawek19926/Vitals.git
cd Vitals
./build.sh                                   # release → build/Vitals.app
open build/Vitals.app

Signed build (required for the helper) and publishing a GitHub release:

CODESIGN_IDENTITY="Apple Development: Jane Doe (TEAMID)" ./build.sh
CODESIGN_IDENTITY="Apple Development: Jane Doe (TEAMID)" ./release.sh --publish --notes "What changed"

Run regression tests with swift test, including from a clean checkout without packaging the app first. Tests cover XPC, process action safety, updates, command execution, measurement freshness and file operations. See the review and verification notes (Polish).

open Package.swift opens the project in Xcode (scheme Vitals). Breakpoints work both in Swift and in the C++ under Sources/SysCore.

To package an already built, signed app as a drag-and-drop installer, run CODESIGN_IDENTITY="Apple Development: Jane Doe (TEAMID)" ./dmg.sh. It creates build/Vitals-<version>.dmg and a SHA-256 checksum, verifies the app inside the mounted image, and leaves the app version unchanged. The DMG contains Vitals.app and a shortcut to /Applications. Keep the ZIP asset when publishing releases: the in-app updater uses ZIP archives.

How it works

Sources/SysCore    C++17: libproc / sysctl / Mach (processes, CPU, memory), IOKit (disks, battery,
                   GPU, ANE), AppleSMC (temperatures, power), IOReport (energy). Plain C API.
Sources/App        Swift + AppKit: Monitor (background sampling), Theme (palettes), L10n
                   (translations), SystemHealth, Alerts, HistoryExport, Updater, Views/, Controllers/.
Sources/Helper     The privileged helper (XPC), Sources/HelperKit – shared protocol and version.

Sampling runs on its own background queue (10 times per second for cheap reads by default, less often for SMC and XPC), graphs are drawn by Core Animation, and pages refresh only while visible — which is why the app uses a fraction of a core instead of heating one up.

Resources/Version.config holds MAJOR.MINOR.PATCH.BUILD; the build number is bumped by every ./build.sh and lands in Info.plist, the About window and release tags.

Privacy

The app sends no data anywhere. Its only network request asks the GitHub API for the latest release — and that can be turned off in Settings.

Support

Vitals is free and will stay free. What I am collecting for is one specific thing: an Apple Developer Program membership, $99 a year.

Without it, releases are signed with a development certificate, so macOS greets them with “Apple cannot verify this app is free of malware”, and the privileged helper only installs in a build made from source. With the membership you get:

  • signed and notarized releases that open with one click, with no warnings and no xattr tricks,
  • a helper that works straight from the downloaded package — full process data and power counters without a password at every launch,
  • installation through brew install --cask vitals, since Homebrew does not accept packages without notarization.

Every contribution goes to that and nothing else. Once a year is covered, I buy the membership and publish a notarized release; anything extra funds the next year.

Ko-fi

Not in the mood to donate? A star on the repository, a bug report or a word to a friend helps too — with reach rather than money, but it helps.

License

© 2026 Sławomir Sendra. The code is available under the GNU GPL v3.

  • You may use, study, modify and redistribute it — including in your own projects.
  • If you distribute your own version, you must publish its full source under the same license. A closed, commercial product built on this code is not allowed.
  • Copyright stays with the author, who is the only one able to release Vitals under different terms (for example a paid edition, or distribution through the Mac App Store, where the GPL does not apply).
  • The Vitals name, the icon and the signing certificate are not covered by the code license. A fork has to use its own name and its own signature; the update channel accepts only bundles with a matching team identifier.

Want the code under terms other than the GPL? Write to the author.


Built with Swift and C++ for macOS on Apple silicon.
Mirror dokumentasi diarsipkan dari repositori resmi GitHub · Kunjungi di GitHub
Tanggal snapshot: 2026-11-09