Skip to content
Reference Guide

What Vitals measures, and what each number means.

A system monitor is only useful if you know what to do with the readings. This page walks through every section of Vitals — what it measures, where the number actually comes from, what counts as normal, and the point at which it's worth acting on. No jargon left undefined.

01The four ways to read Vitals

Vitals shows the same data at four depths. Which one you use depends on how much you want to know right now.

LayerWhat it showsBest for
Menu barJust the Vitals mark by default. Optionally live CPU, GPU, RAM and network readouts with mini-graphs, in the order you choose.Ambient awareness — you notice a spike without looking for it.
PopoverClick the menu-bar icon for a one-screen snapshot: load, memory, disk, network, temperature, battery."Why is the fan on?" answered in two seconds.
Desktop widgetA floating always-on-top panel refreshed every second. Drag it anywhere; compact or full layout.Watching a long build, render or model run without switching windows.
Dashboard windowSeven monitor pages plus History and Reports — every card described below.Actually diagnosing something.

The menu bar, popover and desktop widget are free forever. The dashboard pages below are Pro, and every one of them is open during your first 14 days.

02Overview & the health score

One page that answers "is anything wrong right now?" — and, when something is, names it instead of making you hunt.

How the 0–100 health score is calculated

The score is not a vibe. It's the plain average of the components below that apply to your Mac — a desktop has no battery component, and SSD endurance only appears when your drive reports an estimate. Each component is scored 0–100 on its own, then averaged.

ComponentHow it scoresWhat drags it down
Thermals100 when macOS reports a nominal thermal state, 78 fair, 45 serious, 15 critical.Sustained heavy load, a blocked vent, a hot room, or a charger and an external display together.
Memory100 at normal memory pressure, 60 at warning, 30 at critical.Too many apps for the RAM you have, a leaking app, or a model loaded that doesn't fit.
DiskFree space on your fullest local volume, not just the startup disk. 20% free or more scores 100 and it falls linearly from there.A nearly-full external SSD counts here too — and Vitals names the drive when it's the problem.
BatteryLaptops only. 100% design capacity scores 100, 75% scores 50, and 50% or below scores 0.Age and cycle count. This one only ever moves slowly.
SSD life100 minus the estimated share of write endurance used, when your drive reports one.Years of heavy writes. Most Macs never get near the limit.
Reading it: 80 and above is healthy (green), 55–79 is fair (amber), below 55 needs attention (red). Because it's an average, one red component on a Mac with five of them still leaves you around 80 — so read the component bars, not just the ring. That's exactly why they're listed underneath it.

The rest of the Overview page

Storage and memory at a glance, processor load split into user versus system time, graphics load with VRAM in use, and live network throughput. It's the popover's information with room to breathe.

03Performance

CPU, GPU, memory, processes and heat. This is the page you open when something feels slow.

Processor host_processor_info

Total load, split into user (your apps doing work) and system (the kernel doing work on their behalf — file I/O, networking, memory management).

What to look for: high user time is normal for a build or a render. Persistently high system time with little user time usually means heavy disk or network activity, not a busy app.

Memory & memory pressure vm_statistics64

"Used" is how much of your RAM holds something. Memory pressure is the number that actually matters, and it is not the same thing. macOS deliberately fills unused RAM with cached file data — high usage with normal pressure means your Mac is working efficiently, not struggling.

Normal: business as usual, even at 90% used. Warning: macOS is compressing memory to keep up — you may notice app switching getting sticky. Critical: it's swapping to disk; close something or the whole machine will crawl.

Per-core clusters hw.perflevelN

Apple Silicon cores are not interchangeable. Vitals reads the tier names macOS itself publishes rather than guessing from the core count, so each core is labelled with the tier it actually belongs to — Performance and Efficiency on M1 through M4, and the third tier that M5-generation chips introduced where present.

What to look for: background work pinned to Efficiency cores is macOS doing its job well. Efficiency cores saturated while Performance cores idle usually means a background process is stuck in a loop.

Graphics & VRAM IOKit

GPU load, plus how much of your unified memory is currently committed to the GPU. On Apple Silicon there is no separate video RAM — the GPU and CPU share the same pool, which is exactly why local AI models can starve the rest of the system.

Top processes & top memory

The heaviest processes by CPU and by memory, live. Each row can be acted on directly rather than sending you to Activity Monitor.

Memory growth

Watches individual processes for memory that climbs and never comes back down — the signature of a leak. A browser growing over an afternoon is normal; a menu-bar utility doing it is not.

Temperatures & fan SMC

Per-sensor temperatures and fan speed in RPM, read from the System Management Controller. Vitals reads fan speed; it does not set it. Fan control is deliberately not implemented — writing SMC keys is a good way to cook a machine.

Thermal throttling

A timeline of when macOS stepped performance down to manage heat, with the busiest process named at the moment throttling began.

Why it matters: throttling is the difference between "my Mac is slow" and "my Mac is hot, and that is why it is slow." Those have completely different fixes.

04Local LLM

For running models on your own Mac. Everything here talks only to servers already running on your machine — nothing is uploaded, and no model is downloaded.

Detected runtimes

Vitals probes the default ports that Ollama, LM Studio, llama.cpp, vLLM, Jan, GPT4All, KoboldCpp and others ship with, over loopback. In the direct-download build it also reads the ports that running model-server processes are actually listening on, so a server moved to a custom port is still found. Ports that are obviously something else — SSH, web, databases, screen sharing — are never treated as a model server.

Build difference: custom-port discovery needs to inspect other processes' sockets, which the Mac App Store sandbox does not permit. The App Store build finds every server on a default port, which is nearly all of them. See section 10.

Tokens per second

A one-tap speed test that sends a fixed prompt and reports generation speed. Where the server reports its own timing — Ollama does — Vitals uses that number rather than wall-clock guessing, so it's comparable to what you'd read from the runtime directly.

Reading it: tokens/sec depends on the model's size and quantisation far more than on your Mac. Compare a model against itself across quantisations, or against the same model on a different machine — not a 7B against a 70B.

VRAM headroom & model fit

How much unified memory is free for a model right now, and whether a given model will fit before you load it. Headroom is not the same as total RAM — macOS, your apps and the window server all hold some.

Why it matters: a model that overflows available memory doesn't fail cleanly. It swaps, and generation speed collapses by an order of magnitude while everything else on the Mac stalls too.

Model watch, sessions & library

What's loaded right now, a log of recent model sessions, and the sizes of the model folders on disk across LM Studio, Ollama, Jan, GPT4All and the Hugging Face cache. Left a model resident after you finished with it? One tap unloads it and gives the memory back.

05Network

Connection quality, per-app traffic, and tools you run on demand.

Internet health TCP handshake to 1.1.1.1

Latency, jitter and packet loss, measured by timing a TCP handshake to Cloudflare's resolver every five seconds over a rolling 40-probe window. A probe that times out counts as a drop. No data is sent in the handshake, and it runs only when Pro is unlocked.

Reading it: for calls and games, jitter matters more than latency. A steady 60 ms feels better than an average of 30 ms that swings between 10 and 200. Drops in the window are what turn into "you're breaking up".

Speed test macOS networkQuality · Apple servers

Download and upload throughput plus a ping figure, measured by the speed-test tool built into macOS against Apple's servers (it keeps up with gigabit connections), and it notes whether the test ran over Ethernet or Wi-Fi. If that tool isn't available, Vitals falls back to a few small transfers with Cloudflare's public speed endpoint, averaged so one unlucky transfer can't set the number. Runs only when you press it.

DNS benchmark

Times name resolution against several public resolvers — Cloudflare, Google and others — plus whatever your router hands you. Slow DNS feels exactly like a slow connection but isn't one, and it's often the cheapest thing to fix.

Wi-Fi link, scan & history

Your current signal and noise figures, the networks and channels around you, and a rolling history of link quality. The scan asks macOS for location access — not because Vitals wants your location, but because since Sonoma, Apple only reveals nearby network names, bands and channels to a location-authorised app. Vitals never reads, stores or sends the location itself.

Reading signal: Wi-Fi signal is in dBm and is negative. −50 is excellent, −70 is workable, −80 and below is where things start dropping. The gap between signal and noise is what actually determines throughput.

Ping & traceroute

Run against any host you type. Both run in-process on an unprivileged ICMP socket rather than shelling out to system binaries.

Network by app & data this month

Which applications are moving data right now, running totals for today, and a monthly counter for capped or metered connections.

06Storage

Disks, backups, and space you can get back.

Disk health

Drive type and capacity on every build. In the direct-download build this also includes S.M.A.R.T. status and endurance readings from the drive's own controller — the App Store sandbox blocks the device-level access those require.

Disk writes & SSD wear

A running total of bytes written and an endurance estimate derived from it. Direct-download build only, for the same reason.

Perspective: modern Mac SSDs are rated for hundreds of terabytes written. Normal use gets nowhere near that. This is a number to watch over years, not weeks.

Disk activity by app

Which processes are reading and writing right now. The usual answer to "why is my Mac loud and idle" lives here — indexing, a backup, or a sync client.

Reclaim space

Measures what caches, developer build folders and similar reclaimable directories are costing you. Vitals only measures — it never deletes anything. On the sandboxed App Store build it asks once, through a standard macOS Open panel, for the folder it needs to size; it can read nothing outside what you grant, and never writes there.

Time Machine & disk speed test

When your last backup completed and whether it succeeded, plus an on-demand read/write throughput test for any volume — useful for telling a slow external enclosure from a slow drive.

07Energy & Power

Where your watts and your battery are going.

Power draw IOReport

Live system power in watts, read from Apple Silicon's own energy telemetry rather than estimated from CPU load.

Energy by app

Accumulated energy impact per application over your session, so a process that spikes briefly doesn't outrank one that has been quietly burning power for an hour.

Battery vampires

Catches a single app quietly pinning the CPU and draining your charge. Watches while you're on battery by default, or always, if you turn that on. Each one can be Tamed (deprioritised so it stops dominating), Frozen (suspended, and resumable later with nothing lost) or force quit.

Battery health & longevity

Current capacity against design capacity, cycle count, and habits that affect how the cell ages. This is the component that feeds the battery part of your health score.

Rough guide: Apple considers a battery healthy through 1,000 cycles at around 80% of original capacity. Below 80% you'll feel it; below 70% it's worth replacing.

Bluetooth battery

Charge levels for connected keyboards, mice, trackpads and headphones, next to your Mac's own.

08System

Uptime, sleep, startup, and the things that happened while you weren't looking.

Uptime & sleep · sleep blockers

Every sleep and wake, what the battery cost while the lid was closed, and — critically — what was still holding a wake lock at the moment it shut. This is the answer to the hot-backpack, empty-battery mystery.

Anomaly watch

Learns your Mac's normal ranges and flags genuine departures from them, rather than firing on every spike.

Camera & mic

Which application is using the camera or microphone, and when. Read locally; nothing about it leaves the Mac.

Startup items

What launches when you log in. The direct-download build additionally lists background launch agents and daemons; the App Store sandbox does not permit reading those directories.

Crashes & panics

Recent application crashes and kernel panics with a plain-English explanation of what actually happened. Direct-download build only — the sandbox has no access to the system diagnostic reports directory, and the App Store build says so rather than showing an empty list.

Benchmark a task & run recorder

Record what your Mac did during a specific job — a build, an export, a model run — so you can compare two runs properly instead of going on feel.

Alert history

Every threshold alert that has fired. Alerts can also push to your phone through a webhook you supply, such as an ntfy.sh topic. Leave the field empty and nothing is ever sent.

09History & Reports

Thirty days of every metric, and a weekly summary you can keep.

History is written to a plain JSON file in your user Library at ~/Library/Application Support/Vitals — local to your Mac, never synced to iCloud, never uploaded. You can open it, move it, or delete it; deleting it simply clears your charts. Reports summarise the week and export to CSV.

Why 30 days matters: most problems worth diagnosing are gradual. A battery that's fine today and fine tomorrow but 8% worse across a month, or memory pressure that creeps up each week, are invisible in a live readout and obvious in a chart.

10App Store build vs direct download

Same app, same price, same 14-day trial. Apple's App Sandbox blocks a handful of system-level reads, and Vitals says so in the interface rather than showing you a blank card or a wrong answer.

FeatureMac App StoreDirect download
Crashes & panicsNot availableFull
S.M.A.R.T. health & SSD wearDrive type & capacity onlyFull
Launch agents & daemonsLogin items onlyFull
Open-port listingNot availableFull
LLM servers on custom portsDefault ports onlyAny port
Reclaimable spaceExcludes Trash; asks once for folder accessFull
Everything else on this pageIdenticalIdentical
Which should you buy? If you want crash explanations, S.M.A.R.T. data or the full daemon list, take the direct download. If you'd rather have App Store updates and Apple ID restore, take that — you're giving up six readings out of several dozen. Pricing and unlock differences are covered in the Buying & License FAQ.
One note on network traffic: Vitals has no analytics and no servers of its own. The only connection it makes on its own is the Internet-health probe in section 5 — a TCP handshake to 1.1.1.1 every five seconds, carrying no data, and only while Pro is unlocked. Everything else on the network is a tool you press. The full accounting is in the Privacy Policy.

Now go read your own Mac.

Free to monitor forever. Every Pro page above is open for your first 14 days — no card, no account.

Get Vitals How it's built