Widgets, each its own item
Every widget is a separate menu bar item that macOS lets you drag into place — CPU at one end, network by the clock. Build as many as you want.
Caliper is a system monitor for the macOS menu bar. Build widgets from graphs, gauges and numbers, put them where you want them, and let them stay quiet — in the menu bar's own colours — until a reading crosses a line you set.
Free and open source. macOS 14 or later, signed and notarised, and it never sends anything about your Mac anywhere.
Monochrome, tinted by macOS like its own menu bar items. This is what Caliper looks like almost all of the time.
A dashboard wants to be looked at. An instrument is picked up, read, and put down again — so Caliper is built for the hours you are not reading it.
Every widget is a separate menu bar item that macOS lets you drag into place — CPU at one end, network by the clock. Build as many as you want.
Numbers, line and area graphs, histograms, donuts, dials, bars, a core matrix and stacked rates — with captions, SF Symbols, spacers and dividers between them.
Monochrome until a reading crosses a threshold you set. Then orange or red, underlined too, and a notification once it has lasted 30 seconds.
Click a cell and the detail panel opens on that cell — its history, the facts behind it, the busiest processes — and every other group one click away.
Any widget can live on the wallpaper instead, larger so it reads across a room, above your windows or just behind them.
A .caliperwidget is plain JSON. Open one and it is previewed against your own Mac first, with a plain report of anything this machine cannot show.
Temperatures, fan speeds, power in watts and GPU load on Apple silicon, from interfaces the App Store sandbox blocks — probed first, and hidden if missing.
One timer for the whole app, hardware read only for cells on screen, and sampling paused while the display sleeps or a widget is hidden.
No analytics, no crash reports, no account, no server. The one request it makes is a daily update check, and one switch turns that off.
Every cell reserves the width of the widest thing it could ever show, and digits are tabular. A reading going from 9% to 10% moves the digits inside the cell — it never shoves the rest of your menu bar sideways.
Open someone's widget and Caliper draws it against your live data — not a screenshot of their machine — next to a plain account of what this Mac cannot show.
$ caliper-bench inspect Workstation.caliperwidget Workstation -- 5 cells, at most 212pt wide by someone else 2 metrics unavailable, 1 cell could not be shown degraded: gpu.0.utilization is not available on this Mac degraded: sensor.thermal.cpu-die is not available on this Mac dropped: gauge.donut cannot show net.throughput.down, which has no fixed maximum
An M4 publishes 47 thermal sensors, and not one has a useful name. Caliper reads them all and gives you the four that mean the same thing on every Mac — with every raw sensor still there, in an Advanced group, for anyone who wants it.
$ make sensors Temperature (4) thermal.average 31.4° thermal.battery 29.0° thermal.peak 32.5° thermal.storage -- Temperature (Advanced) (47) thermal.sensor.pmu-tdie14 33.7° thermal.sensor.pmu2-tdev1 -- … Power (5) power.gpu.watts 0.2 W power.total.watts 0.2 W
A menu bar app runs all day, so its cost is a feature. These are measured on an Apple M4, running the built app with the default widget — and the budget is not moved to fit the measurement.
| What | Measured | Budget | |
|---|---|---|---|
| Memory, resident | 16.4 MB | 30 MB | within |
| CPU, the sampling and drawing pipeline | 0.10% | 0.3% | within |
| CPU, a menu bar item that redraws every second | 0.68% | 0.3% | over |
| A desktop widget, always on screen | +1.9 MB, +0.009% | — |
The one line over budget is macOS redrawing a status item's image — Caliper's own work is 57 microseconds of it. The route back under is known and written down, andWhat it costs has the whole account.
Not a setting to find and switch off. The telemetry was never written.
Install it, keep the default widget or build your own, and read the docs when you want the parts that are not obvious.