HashNotch turns the MacBook notch into a live display — what is playing, your internet speed and which programs used your data, battery, temperatures, memory, storage, timers, AI token spend, and alerts from your AI coding tools. Native Swift. No account, no telemetry, no network access except album artwork. Free, and GPL v3.
1.4.0 is seventeen commits after 1.3.1, and it is about three things your Mac has never told you: who is watching you, what you missed, and what you actually got done.
Your camera, not just your microphone
The moment any app opens your camera, the island says so — with a running timer, and the app's own icon when it can name one. When something holds both, it is one row and not two, because a video call is one thing happening. A microphone symbol, a camera symbol, or both, so a glance tells you whether you are heard, seen, or both.
They are drawn in the colours macOS itself uses: orange for the microphone, green for the camera. The dots in your menu bar and the marks in the notch now say the same thing in the same language.
And it names the app you are actually in. During a meeting in Safari the readout used to say "Safari Graphics and Media" beside an empty square. That is a real process, and it is not one anybody has heard of — which is the worst thing this particular readout can do. A browser does not open your microphone in the process you can see, so every holder is now traced back to the app it belongs to.
Two things it will not do. A camera cannot be traced to an app — macOS publishes no way to ask — so a camera on its own is shown as live and named as nothing, rather than blamed on whichever app seems likely. And it reports that an app holds your microphone, which is not the same as you being heard: plenty of apps, Google Meet among them, keep it open and mute in software.
It reads one yes-or-no per app and one per camera. It never listens, watches, records or transcribes, and holds no microphone or camera permission of its own.
What happened while you were away
Shut the lid, come back, and one line appears for a few seconds before folding away:
Away 47 min · 1.2 GB used · battery −14%
Every other readout in the app answers what is true right now. This is the only one that answers what you missed — and nothing on macOS answers it at all. You close the lid, come back to a warm laptop and a flat battery, and the machine says nothing about the two hours it spent alone.
It reads nothing new to do it. Every figure was already being kept by another indicator; this subtracts two moments of them. An indicator you have switched off takes no part.
It is deliberately hard to trigger. Under five minutes away, or nothing that moved by enough to matter, and it stays quiet — a line that greets every unlock is wallpaper within a day.
A focus timer that does not flatter you
A stretch of work, a short rest, a longer one every few rounds, counted down in the notch with the edge lit while you are meant to be working. You set the lengths. A stretch survives the screen sleeping and the app quitting, and the alert is handed to the system so it lands on time even with the display off — which matters, because the whole point is that you are not looking at the screen.
Underneath it, one sentence:
You focused 9 hr 20 min in the last 7 days.
Every timer of this kind is self-reported. You start it, you forget to stop it, and the number at the end of the week is a guess. This app already knew when your screen went away — so a stretch you walked out of ends when you left, counts only the time it actually served, and never counts as finished.
It keeps seven days so that sentence has something to add up. A date and two numbers a day, never what you were working on. Delete all of it in one press in Settings. Nothing about your day is ever sent anywhere.
Macs without a notch
The island was hanging over your wallpaper. On a Mac with no notch it is drawn exactly as tall as your menu bar — but a minimum height left over from the very first version made it three or four points taller than that, every time. On a notched Mac the minimum never applied, so it could not be seen on the hardware the app is built on. It applied on every Mac without one, permanently.
The Position page also told you the island "sits just below the menu bar instead of covering it", which stopped being true a release ago. It asks the measurement where the island is now, so the two cannot drift apart again.
Also in this release
- A reading running high looks different from one that is not. The warning colour sat 6.7 ΔE from the accent the app starts on — one colour, on a thin bar, at a glance. A disk at 74% and a disk at 76% were indistinguishable.
- The small marks beside each heading are drawn at the weights they were designed at. The lighter weight for lines inside a shape was written into six of them and reached the screen in none.
- The settings window fits its tabs. Adding a page made every label narrower and quietly truncated "Appearance".
Install
- Download
HashNotch-1.4.0.dmgbelow and open it. Drag HashNotch onto Applications, then eject the disk image. - Open it from Applications.
Requirements: macOS 12 or newer, Apple Silicon or Intel.
If macOS refuses to open it
The app is not signed with a paid Apple certificate, so macOS may block it outright instead of offering "Open Anyway". Run this once, in Terminal:
xattr -dr com.apple.quarantine "/Applications/HashNotch.app"
What that actually does, because you should never paste something into a terminal on trust alone: xattr reads and edits the hidden labels macOS attaches to files. com.apple.quarantine is the one meaning "this was downloaded". The -d deletes that one label and -r applies it through the app's folder. It touches nothing else on your Mac, needs no password, and affects only this one app. You can see the label before removing it with xattr "/Applications/HashNotch.app".
Check you got the file I built
shasum -a 256 ~/Downloads/HashNotch-1.4.0.dmg
Should print:
d909999c4f24d1cc55deaad7289f017cecf41c8d1b90c3e6e87a8df27e8dc658
This is how you know the download was not tampered with in transit. If the line you get does not match this one character for character, do not open it.
1,058 automated checks run on a clean machine on every push — the parsers, the geometry, the privacy rules, and the arithmetic behind every readout. Every commit is signed. On a new install the app has read nothing: a window names what each indicator reads and what it will never do, and nothing starts until you accept.
Everything it reads is spelled out in SECURITY.md. The full list of changes is in CHANGELOG.md.