Hover the notch and it springs open into a little island — now-playing with live artwork, a file shelf, your calendar, a clipboard history, and a mirror of the menu-bar items the notch hides. Leave, and it melts back into the bezel.
Hover → island. Leave → notch. While music plays, album art and an EQ flank the notch on their own — no hover needed.
Perch turns the dead space around the MacBook notch into a Dynamic-Island-style companion. It's a single borderless panel fused to the hardware notch that moves through four states — idle (invisible), minimal (a background activity peeks out), compact (a glanceable live activity), and expanded (the full interactive island) — with one spring family and a content-hugging shape that takes only the space each module needs.
It is app-agnostic: now-playing comes from the system's private MediaRemote feed (via a vendored perl bridge), so a YouTube tab in Safari shows up the same as Spotify.
Hover to expand, then switch with the icon rail flanking the notch — or swipe across it.
| Media | Now-playing for any app, live artwork, drag-to-seek |
| Shelf | Drag files onto the notch to stash them; drag out later, or AirDrop the lot |
| Clips | Rolling clipboard history — click any entry to put it back |
| Today | Remaining calendar events with countdown pills, plus a focus session |
| Do | Launch your Apple Shortcuts from the island |
| Cam | A quick webcam mirror |
| Bar | Right-click to reveal every menu-bar item — including the ones the notch hides |
macOS silently stops drawing menu-bar icons that don't fit behind the notch. Perch
mirrors all of them — captured live with ScreenCaptureKit — and clicking a hidden
one opens it for real (an AXPress straight to the suppressed item).
- A focus session shows as an orange progress glow beneath the collapsed notch, and as a ring in the compact island.
- With music playing, the wings stay alive on the lock screen — the panel elevates to the window-shielding level the moment the screen locks, and drops back on unlock.
./scripts/run.shBuilds a signed Perch.app into ~/Applications and launches it. The script bakes in a
few hard-won requirements (see its comments): a real .app bundle and a stable signing
identity so macOS attributes Calendar / Camera / Automation / Screen-Recording prompts
to Perch — a bare binary gets silently denied or killed.
A capsule status-bar item provides Quit and a manual toggle. Works on notched
MacBooks (the island fuses with the hardware notch) and falls back to a synthetic pill
at the top-center on any other display.
- Universal now-playing. macOS gates the private MediaRemote framework behind an
entitlement since 15.4. Perch uses the mediaremote-adapter
approach —
/usr/bin/perlis an entitled platform binary that loads a tiny adapter framework and streams JSON now-playing diffs. Push, not poll; any app; artwork inline. AppleScript is the automatic fallback. - Lock-screen presence is two lines of public API —
canBecomeVisibleWithoutLoginplusCGShieldingWindowLevel()— with a watchdog so a dropped unlock notification can never strand the panel above everything. - Click-through honesty. The panel pre-grows once to its largest size so
module-to-module morphs never resize the window (panel resizes rebuild AppKit tracking
areas and fire phantom
mouseExitedevents). A flipped hit-test view passes clicks outside the live island hull straight through to the menu bar beneath. - Notch math is pure. Geometry takes screen metrics in and returns window rects out, so placement — including negative-origin multi-display setups — is unit-tested without touching AppKit.
swift test # 168 tests — geometry, phase machine, media-stream parsing, swipe accel, …A proof of concept, built to explore notch UX — then hardened across three rounds of
adversarial review. Now-playing uses ungive/mediaremote-adapter
(BSD-3-Clause), vendored under vendor/.



