Pinned Pinned Coming to the Mac App Store
The Pinned app icon: a white download arrow beside an amber upload arrow.

Your real speed, up and down, in the menu bar.

Pinned reads the byte counters your Mac already keeps and turns them into a live download and upload readout. It watches whatever connection is actually carrying your traffic, and follows you from Wi-Fi to Ethernet to a phone hotspot on its own.

Coming to the Mac App Store

Not submitted yet. Follow the build at bhd.om.

Other menu bar monitors measure ten things and show you a dashboard. Pinned measures one thing and finishes the job.

Fig. 1  /  the readout

22 pt bar

The status item is drawn at a guaranteed fixed width. Measured identical from 0 B/s to 1.4 Gbps, so it never jitters and never shoves the items beside it along the bar.

1 s
Sample interval, with timer tolerance so the wakeup can be coalesced
64-bit
Kernel byte counters, so they do not wrap and lie on a fast link
0
Sockets opened to measure throughput. There is no speed test
0.1%
CPU while sampling once a second, measured on Apple silicon

What it measures

It counts what already moved. It does not go and fetch anything.

macOS keeps a running byte count for every network interface on your Mac. Pinned asks the kernel for that list once a second, through sysctl(NET_RT_IFLIST2), and reports the difference between one reading and the next. That difference is your speed. That is the entire measurement.

Those particular counters are 64-bit. The easier interface to reach for hands back 32-bit counters, which wrap every 4.29 GB. On a fast link that can be a few minutes, and every wrap would land on screen as a nonsense spike.

Pinned opens no sockets of its own to do this. No probe, no test file, no server at the other end, nothing added to the very traffic it is trying to describe.

Which interface it reads follows the system default route, re-checked on every tick. Unplug Ethernet and the readout is on Wi-Fi. Tether to a phone and it is on the phone. There is nothing to configure, and a reading it cannot trust is reported as zero rather than guessed at.

Signal path

1
Kernel counters
Per-interface bytes in and out, 64-bit, already maintained by macOS
2
One reading a second
sysctl(NET_RT_IFLIST2), no elevated privileges required
3
Difference
This reading minus the last one, over the elapsed time
4
The readout
Down and up, in the menu bar, at a fixed width

Follows the default route

Wi-Fi Ethernet Hotspot VPN tunnel

Specification

Everything it does, and nothing it does not.

01
Menu barThe part you see all day
Layout
One row or two.
Icon style
Arrows, triangles, dots, letters, or no icon at all.
Directions
Download only, upload only, or both.
Typography
Units on or off. Font size to taste.
Colour
Monochrome, or your own colours per direction.
Sparkline
Optional, inline, beside the numbers.
Idle
Dims when nothing is moving, so a quiet Mac looks quiet.
Width
Guaranteed fixed. The item never jitters as the rate crosses a unit boundary, and never pushes your other menu bar items around.
02
PanelOne click away
Live
Current download and upload rate.
Chart
An opposed area chart: download above the line, upload below. Linear, logarithmic, or a fixed maximum.
Totals
This session, and the current period.
Quality
Latency, jitter and packet loss.
Interface
MAC address, MTU, link speed, IPv4, IPv6 and DNS.
Wi-Fi
SSID, BSSID, RSSI, noise, channel, band, width, security and PHY mode.
Download Upload
Linear, auto peak
03
AlertsOnly when it matters

Notify me when a value crosses a threshold and stays there for a duration I choose. A one-second dip is not an event.

Watchable
Download speed, upload speed, latency, or how much of your data cap is used.
Also
Connection lost.
Condition
Above or below a threshold, held for a duration you set.
Cooldown
Every rule has one, so a flapping link cannot spam you.
04
Data usageReal calendar boundaries
Session
Since the app started, or since you last reset it.
Period
Daily, weekly or monthly totals.
Rollover
On the real boundary, not a rolling window counted back from now.
05
UnitsBoth camps are served
Unit
Bytes or bits. MB/s or Mbps.
Base
1000 or 1024. Network convention or storage convention, your choice.

Light on your Mac

A monitor that costs you something is a bad trade.

0.1% CPU
While sampling once a second
35MB
Memory in use

Both figures are measurements, not targets. Taken on an Apple silicon Mac running macOS 26, with Pinned sampling once a second. Your own numbers will move a little with your settings and your hardware.

Privacy

Nothing leaves your Mac, and there is no small print under that sentence.

A network monitor sits in a position of unusual trust. Here is exactly what Pinned is allowed to do.

Sandboxed
Pinned runs inside the macOS App Sandbox. The throughput counters need no elevated privilege at all: reading them is an ordinary kernel query.
No admin password
No background helper, no root daemon, no kernel extension, nothing installed outside the app itself. Drag it to the Trash and it is gone.
No telemetry
No analytics, no crash reporting service, no usage counting, no account. Pinned does not report on you, because it does not report at all.
Public IP lookup is off
Off by default, and the only feature that would contact anything outside your Mac. Leave it off and Pinned makes no outbound request at all. Turn it on and it fetches one thing, your public address, at a refresh interval you pick.
Location, only for the name
macOS withholds the name of your Wi-Fi network from any app without location access. So if you want the SSID in the details panel, Pinned has to ask. That is the only reason it ever asks, nothing is stored or sent, and if you decline, every rate, total, chart and interface detail still works.

Requirements

macOS 13 or later
Apple silicon and Intel