See the unseen.
What's playing, how fast your internet is, what your battery is doing, how hot the chip is running, what you have spent on AI today — all of it a glance away. No account. No telemetry. Nothing about you ever leaves your Mac.
Install · What it shows · Why this one · Privacy & terms · Developers
Three states, and it is only ever in one of them. At rest it is invisible — a black shape exactly the size of your notch. When something is happening a slim strip appears beside it without you doing anything. Hover the notch and the whole panel drops down, below the menu bar, so it never covers your menus.
Swipe down on the notch to open it. Swipe sideways across the open panel to change track.
Now playing — anything that plays: Spotify, Apple Music, TV, Podcasts, Anghami, VLC, a browser tab. Title, artist, live position, a progress bar you can drag, and a volume slider. Album art comes from Spotify and Apple Music, and a video's thumbnail from your browser; anything else shows a placeholder tile.
Microphone — the moment any app opens your microphone, a live dot and a running timer appear beside the notch, with that app's own icon: FaceTime, Zoom, Teams, a browser call, a voice memo. It asks macOS one yes-or-no question — does this app have an input stream open — and never listens, records or transcribes. It holds no microphone permission of its own, and could not use one.
Internet — live upload and download, with the last half-minute graphed underneath.
Battery — level, time left, time to full, adapter wattage, Low Power Mode. Capped at 80% for its health? It counts down to that, not to a full charge it will never reach.
Processor and memory — how hard your Mac is working, in the same figures Activity Monitor shows.
Temperatures — the real Apple Silicon on-die sensors, not an estimate.
AI tokens — what you have spent today, across Claude Code, HashCortX and HashCerebrum.
Storage — how full the disk is, using the figure df and Disk Utility agree on.
Timer, downloads, AirPods charge, and live activities anything can post to.
Switch any of them off, drag to reorder, restyle each one. The panel is yours — and if you go too far, one button puts the look back, and another puts everything back.
Every app is read, not a list of supported ones. There is no hand-written support per player: macOS itself is asked what is playing, so a niche music app, a podcast player or something released next year shows its title, artist and position on day one, with no update from me.
One kind of network request, and only that one. Fetching a cover — from Spotify's own image servers or YouTube's thumbnail host, over HTTPS, size-capped, refused if a redirect would leave them. Each is a separate switch in Settings, so you can allow the one you use and refuse the other, or refuse both and the app makes no network requests at all. Nothing else in the app touches the network, and nothing about you is ever sent anywhere. You can watch it with Little Snitch in about ten seconds.
Nothing while your Mac is locked. The island leaves the screen the moment you lock it, and every indicator stops with it — not dimmed, not covered, gone. What the notch shows is a summary of your afternoon, and a locked Mac is exactly when somebody who is not you might be standing in front of it.
Nothing runs until you have been asked, and you can say no. On first launch the app has read nothing. A window lists what every indicator reads, and what it will never do, and not one of them starts until you accept — until then the app is in the same state as having everything switched off, not merely promising to be. Refusing quits and takes the settings file with it, so saying no leaves your Mac as it was.
Off means off. Switching an indicator off stops it reading, not just showing. A feature that is off opens no files, runs no subprocess, and can trigger none of the permission prompts.
One glance, then gone. Something that just happened outranks something merely still true. A finished job takes the strip for a few seconds and hands it back to the music.
Verified, not asserted. 530 automated checks run before every push — the parsers, the geometry, the privacy rules, and the arithmetic behind every readout. Every commit is signed.
$ swift run HashDIslandChecks
ok a feature that is off is never started
ok the optimistic "could be made free" figure is not used as free space
ok a cover that arrives after a skip is dropped
ok an app outside the standard folders is refused
ok the checks leave no preference domains behind
...
All checks passed.
- Download the disk image —
Hash.D.Island.1.1.0.dmg— from Releases and open it. Drag Hash D Island onto the Applications folder shown beside it, then eject the disk image. - First launch, macOS says it cannot verify the developer. Click Done, then open System Settings → Privacy & Security, scroll to the bottom, and click Open Anyway. Once only.
- Hover the notch. No Dock icon, no menu-bar item — the notch is the whole interface. The gear beside it opens settings.
Sometimes there is no Open Anyway button to click, or clicking it changes nothing. That is not a broken download. When a file arrives from the internet macOS attaches a hidden "quarantine" label to it, and for an app without a paid Apple certificate macOS will sometimes refuse it outright rather than offer you the choice.
One command removes that label:
xattr -dr com.apple.quarantine "/Applications/Hash D Island.app"Open Terminal (press ⌘Space, type Terminal, press Return), paste that line, press Return. It prints nothing — that means it worked. Now open the app normally.
Run it after the app is already in Applications. If you drag the app somewhere else afterwards, you do not need to run it again.
What that command 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/Hash D Island.app".
On Monterey, everything works except Open at Login, which needs macOS 13 — and the app says so plainly rather than failing quietly. Big Sur is out: some of the drawing this relies on does not exist there.
Any Apple Silicon Mac (M1 and later). Every macOS release gets every feature; the older ones simply do without a little polish the newer ones added — live numbers cross-fade instead of rolling like an odometer, and the settings scrollbar shows in the system's usual way. Nothing is missing, and nothing is slower.
Why the extra step? It reads system-wide Now Playing and the real temperature sensors, which need Apple interfaces the App Store does not allow — so it ships straight from here. Everything it reads is spelled out in SECURITY.md.
No notch? It still works. The island is drawn against the top bezel and made exactly as tall as your menu bar, so it fills the one part macOS never uses — the middle, between the app menus on the left and the status icons on the right. Nudge its position and size per display in Settings.
No accounts. No analytics. No telemetry. No servers. The app writes no files — its only stored state is its own settings.
On a new install, Hash D Island has read nothing. Before a single indicator starts, a window names what each one reads and what it will never do, and nothing begins until you accept.
That is stricter than a notice with an OK button. Until you answer, every feature is stopped rather than started, so the app is in the same state as having everything switched off — no file is opened, no command is run, and none of the requests below can even be triggered.
And there are two answers, not one. Refuse and quit closes the app and removes its settings file, so a Mac that said no is left exactly as it was found. Open it again and it asks again. A window that offers a single button is not asking permission; it is standing in the doorway.
Once it is running, every indicator can be switched off — and switching one off stops it reading, not just showing.
Each one, when it appears, and — the question usually left out — what you lose by refusing.
| Permission | When you're asked | What for | If you refuse |
|---|---|---|---|
| Control Spotify / Apple Music | First time you press play, pause or skip on one of their tracks | Once either app is paused it hands back the system's media session, and only its own controls can restart it | Those buttons stop working for those two apps. Every other player is unaffected |
| Control your browser | Only on older systems, and only if a web video is playing with no picture found yet | To read the playing tab's address so its thumbnail can be shown. The tab list never leaves the helper — only the one picture address returns | A web video shows a plain tile instead of a thumbnail |
| Your Downloads folder | First time the download notice looks there | To read file names, so the notch can say when a download finishes | No download notice. Everything else is unaffected — or switch Downloads off and it never looks |
| Notifications | First time you start a timer | To post a banner when the timer ends | The timer still chimes and still shows "Time's up" at the notch |
| Accessibility | Only if you switch on "Control video in your browser" yourself. Off until you do | Pressing the keyboard's play/next/previous keys is the only way to reach a browser video, and macOS gates those three keys behind this | Media buttons still work for Spotify and Apple Music |
Screen Recording, Input Monitoring and Full Disk Access are never requested under any setting. If macOS ever shows you one of these in this app's name, something is wrong — don't grant it.
It also holds no microphone permission and could not use one. The microphone indicator asks macOS a yes-or-no question — does this app have an input stream open — and nothing is ever listened to, recorded or transcribed.
Fetching the cover for what's playing: HTTPS only, restricted to the image servers of the two services that can be reached at all — Spotify and YouTube — size-capped, and refused if a redirect would lead elsewhere. Each is its own switch under Settings → General → Cover art; turn one off and its host is refused by the downloader itself, not merely hidden, and with both off the app makes no network requests at all. It uses a throwaway session, so not even an image cache lands on disk. Nothing else in the app touches the network, and nothing about you is ever sent anywhere. Watch it with Little Snitch in about ten seconds.
Hash D Island is free software under the GNU General Public License v3 or later. Use it for anything, read all of it, change it, pass it on — anything you distribute built on it stays free too, with its source available.
It comes with no warranty of any kind, and you run it at your own risk; the author is not liable for any loss or damage arising from its use (sections 15 and 16 of the licence). The readings are for information only — don't rely on them where being wrong would be dangerous or costly.
There is no account, no server and no collection, so there is nothing for anyone to hand over, sell, lose, or be compelled to produce. That is a property of how it is built rather than a promise about behaviour, and you can confirm it by reading the source.
Apple, Spotify, YouTube and every other product named here belong to their owners, are named only to say what works with what, and none of them endorse or are connected with this app.
Four steps, and this is every trace: switch Open at Login off and quit; drag the app to the Trash; delete ~/.hashdisland; run defaults delete com.hashdisland.app. No launch agents, no caches, no receipts.
Every value it reads, both private Apple interfaces it uses, and the full detail: SECURITY.md. Every claim there is checkable by reading the source and pinned by the checks.
Let the notch tell you the moment a tool is done — a checkmark landing on the notch, then gone.
./scripts/install-claude-hooks.shThe island lights up when Claude Code finishes a reply, or is waiting for your permission — click that one and the waiting window comes to the front. HashCortX and HashCerebrum are built in.
Setup, and the local feed any script or Shortcut can write to: docs/ACTIVITIES.md.
A Swift package. Builds and runs with the Command Line Tools alone — no full Xcode.
swift build # compile
swift run HashDIsland # launch the overlay
swift run HashDIslandChecks # run the checks
./scripts/build_app.sh # assemble the .appEvery capability is a self-contained module. The core knows how to draw an island and how to talk to a feature through one protocol — it never knows what any feature does, so adding or removing one touches a single line:
flowchart LR
subgraph core["HashDIslandKit — the core"]
direction TB
G["NotchGeometry<br/><i>measures the hardware</i>"]
W["NotchWindow<br/><i>click-through overlay</i>"]
R["FeatureRegistry<br/><i>starts only what is on</i>"]
end
P(["NotchFeature<br/>one protocol"])
subgraph feat["Features — one module each"]
direction TB
M["Media"]
N["Network"]
B["Battery"]
E["…ten more"]
end
core --> P --> feat
// Sources/HashDIsland/FeatureManifest.swift — the only place features meet
static func enabledFeatures() -> [NotchFeature] {
FeatureRegistry.inDefaultOrder([
MediaFeature(), ActivitiesFeature(), DownloadsFeature(),
TimerFeature(), TokensFeature(), NetworkFeature(),
BatteryFeature(), AirPodsFeature(), CallFeature(),
ThermalFeature(), CPUFeature(), MemoryFeature(),
StorageFeature(),
])
}Architecture in full: docs/ARCHITECTURE.md.
GNU General Public License v3 · Copyright © 2026 Seif Hashish
Free to use, read, change and share. Anything you distribute built on it stays free too.