Caliper
Open source Built in Swift, for macOS

Glance at it, forget it,
until something is wrong.

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.

Push the CPU past a threshold

Monochrome, tinted by macOS like its own menu bar items. This is what Caliper looks like almost all of the time.

What it does

An instrument, not a dashboard

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.

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.

Nine ways to draw a number

Numbers, line and area graphs, histograms, donuts, dials, bars, a core matrix and stacked rates — with captions, SF Symbols, spacers and dividers between them.

Colour only when it matters

Monochrome until a reading crosses a threshold you set. Then orange or red, underlined too, and a notification once it has lasted 30 seconds.

Glance, then look

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.

On the desktop, too

Any widget can live on the wallpaper instead, larger so it reads across a room, above your windows or just behind them.

Share a widget as a file

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.

Sensors most apps miss

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.

Light on the Mac it measures

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.

Tells nobody

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.

A closer look

Three things worth the tour

Numbers that do not dance

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.

  • A missing sensor shows an en dash at full width, never a zero that lies about the hardware.
  • Percentages never auto-scale, so 5% always looks like 5%.
  • Donuts, dials and bars refuse a metric with no maximum, and the editor says why.
text.value
graph · line
graph · area
graph.histogram
gauge.donut
gauge.arc
gauge.bar
matrix.cores
text.dual-rate

Nothing lands in your menu bar unseen

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.

  • A metric you lack keeps its cell and shows a dash, so the layout holds its shape.
  • A file too big to be a widget is refused with the reason, before anything is drawn.
  • Paste it, open it, drop it on the editor or double-click it in Finder.
$ 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

Temperatures that mean something

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.

  • Fans come from the SMC, read-only for good: nothing here can change a fan's speed.
  • Power in watts for the CPU, GPU, Neural Engine and memory, and GPU load.
  • A macOS update that moves an interface removes those metrics — it never leaves a row of permanent dashes.
$ 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
Measured, not promised

What it costs, including where it falls short

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.

WhatMeasuredBudget
Memory, resident16.4 MB30 MBwithin
CPU, the sampling and drawing pipeline0.10%0.3%within
CPU, a menu bar item that redraws every second0.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.

Privacy

It reads your Mac and tells nobody

Not a setting to find and switch off. The telemetry was never written.

  • Everything it measuresStays on this Mac, in memory, for the graphs — load, memory, temperatures, the busiest processes. Gone when the app quits.
  • Your widgetsWritten to one file in Application Support, and nowhere else. They leave only when you export or copy one.
  • The update checkOnce a day, to GitHub: the same request from every copy, with nothing about your Mac in it. One menu item switches it off.
  • Everything elseThere is nothing else. No analytics, no crash reporting, no account, and no server of Caliper’s own to send anything to.

Put an instrument in your menu bar

Install it, keep the default widget or build your own, and read the docs when you want the parts that are not obvious.