Skip to content

Repository files navigation

Hash D Island on a MacBook: a live strip beside the notch showing what is playing, and the panel dropped below it with artwork, a progress bar and transport controls, a volume slider, internet speed with a graph, battery held at 80%, AI tokens counted today, processor, drive and battery temperatures, memory, CPU, a timer and storage.

Hash D Island

Hash made the Dynamic Island every Mac user deserves.

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.

macOS 12+ Apple Silicon Network: artwork only No telemetry 530 automated checks passing GNU General Public License v3

Install  ·  What it shows  ·  Why this one  ·  Privacy & terms  ·  Developers


◦ How it works

Three states: at rest the island is just the notch; when something is live a slim strip appears beside it; hovering the notch drops the full panel below the menu bar.

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.


◦ What it shows

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.


◦ Why this one

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.

◦ Install

  1. 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.
  2. 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.
  3. Hover the notch. No Dock icon, no menu-bar item — the notch is the whole interface. The gear beside it opens settings.

If the app still will not open

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".

Which macOS

Supported macOS releases: Tahoe 26 built and verified, Sequoia 15, Sonoma 14 and Ventura 13 fully supported, Monterey 12 supported except Open at Login, Big Sur 11 not supported.

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.


◦ Privacy, permissions and terms

No accounts. No analytics. No telemetry. No servers. The app writes no files — its only stored state is its own settings.

Nothing runs until you have been asked

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.

Every permission macOS may show you

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

What it never asks for

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.

The one network request

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.

Terms

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.

Removing it

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.


◦ When your AI tools finish

Let the notch tell you the moment a tool is done — a checkmark landing on the notch, then gone.

./scripts/install-claude-hooks.sh

The 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.


◦ For developers

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 .app

Every 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
Loading
// 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.

Release notes · Security & privacy · Architecture