A native macOS notch app inspired by Boring Notch, built with Dynamic Island–style interactions: a compact pill that lives flush with the physical notch and morphs into an expanded panel on hover.
Open the DMG, drag NotchIsland into Applications, then launch it. Since it isn't notarized, the first launch needs a right-click → Open (macOS will otherwise refuse to run an app from an unidentified developer).
- Dynamic Island–style morphing — idle pill → compact indicator → expanded panel, animated with a spring, fully click-through everywhere except the visible shape (so it never blocks clicks on apps underneath it).
- Now Playing — shows title/artist/artwork and play/pause/next/previous controls for whatever's playing in your browser (via a companion browser extension, see below), with multi-activity stacking when more than one thing is active.
- Battery alerts — a brief HUD-style bubble on charger plug/unplug.
- File shelf — drag files onto the expanded panel to hold them, then drag them back out into Finder or another app later.
- Clipboard history — recent copies, click to copy back, clear anytime.
- Volume/brightness HUD — shows a matching bar in the notch when you press those keys (alongside macOS's own, not a replacement — see Limitations).
- Wi-Fi toggle — quick on/off from the expanded panel.
This macOS version blocks the private MediaRemote framework (the API every "now playing" menu bar app relies on) for any process that isn't Apple-signed — confirmed by testing a byte-for-byte-identical compiled binary against Apple's own swift interpreter tool. Since there's no way around that without an Apple-internal entitlement, media info instead comes from the page's own public Media Session API via a small companion browser extension that posts to a local server the app runs on 127.0.0.1:47624.
- Open
chrome://extensions - Enable Developer mode (top right)
- Click Load unpacked, select the
BrowserExtension/folder in this repo - Play something — the notch should pick it up within a couple seconds
Requires Xcode Command Line Tools (Swift 5.10+ toolchain) — no full Xcode install needed.
As a proper .app (universal binary — Apple Silicon + Intel):
./Scripts/build_app.sh
cp -R .build/NotchIsland.app /Applications/
open /Applications/NotchIsland.appThe build is unsigned/unnotarized, so the very first launch needs a right-click → Open, or run xattr -cr /Applications/NotchIsland.app first.
For quick local iteration (single-arch debug build, no bundle):
swift build
.build/debug/NotchIslandEither way it runs as a background accessory app (no Dock icon). To stop it: pkill -f NotchIsland.
- Media only works in the browser, not Music.app/Spotify — see above for why (MediaRemote read access is blocked; app-specific control still works via simulated media-key presses).
- Volume/brightness HUD is additive, not a replacement — hiding macOS's native OSD requires Accessibility permission for a blocking event tap, which this project deliberately avoids for now.
- Wi-Fi toggle only — Bluetooth has no public toggle API (would need the third-party
blueutilCLI), and Do Not Disturb/Focus modes have no reliable programmatic toggle on modern macOS. - Notch geometry is read from
NSScreen.auxiliaryTopLeftArea/auxiliaryTopRightArea, so it should size and position correctly on any notched MacBook (14"/16" MacBook Pro, MacBook Air M2+) automatically. Non-notched Macs (older MacBooks, external displays, desktops) fall back to a small virtual island centered at the top of the screen instead of failing outright.
Sources/NotchIsland/App/—NSPanel-based overlay window, positioned once at a fixed frame under the notch; hover detection polls cursor position at ~12Hz (not a global event monitor) to keep CPU/battery usage low.Sources/NotchIsland/Services/— media (local HTTP server), battery (IOKit), clipboard (pasteboard polling), Wi-Fi (networksetup), file shelf, volume/brightness key observation.Sources/NotchIsland/Views/— SwiftUI views for each state (idle/compact/expanded/alert) and each activity kind.BrowserExtension/— Manifest V3 extension bridging page media info to the local server.
- Nothing is collected, stored remotely, or sent anywhere. No accounts, no analytics, no telemetry. Everything below runs entirely on your own Mac.
- Clipboard history is in-memory only — never written to disk, gone on quit, and clearable anytime. It also checks for the nspasteboard.org
ConcealedType/TransientType/AutoGeneratedTypemarkers that password managers like 1Password and Bitwarden tag their copies with, and skips recording those — the same convention respected clipboard managers (Alfred, Raycast, Paste) follow. - The local media server binds to loopback only (
requiredInterfaceType = .loopbackon theNWListener), not just "port 47624" — meaning it's unreachable from other devices on the same Wi-Fi/LAN, only from processes on the same Mac. (An earlier version of this server didn't set that explicitly and technically listened on all interfaces; verified fixed by confirming a request from the Mac's own LAN IP is refused while127.0.0.1still works.) - File shelf only references file paths — files aren't copied, duplicated, or uploaded anywhere; dragging one out just hands the original file reference to whatever it's dropped on.
- No elevated permissions are requested anywhere. Media key observation, Wi-Fi toggling, and volume reading all use plain public APIs/CLIs (
NSEventsystem-defined events,networksetup,osascript) that don't require Accessibility, Input Monitoring, or Full Disk Access — deliberately, since a background app asking for those would itself be a bigger trust question. See Limitations for what that trade-off costs feature-wise. - It's all open source — every claim above is verifiable by reading the code in
Sources/NotchIsland/Services/.
MIT — see LICENSE.