Turn your MacBook notch into a living, glanceable productivity island.
macOS 14.0+ Swift 6.0 Self-test 161 passed 15 modules MIT License
Download · What it does · Build from source · Docs
MacNotch turns the dead space around your MacBook notch — or a virtual notch on an external display — into an expandable HUD. Hover to check playback, meetings, or timers. Drag files toward the camera to stash or AirDrop them.
When idle it fades pixel-for-pixel into the hardware bezel: no chrome, ~0% CPU, invisible until you summon it.
Warning
Pre-1.0. Alpha builds are unsigned. There is no notarized release yet, and a crash under sustained media use (rapid track changes across Spotify and Music at once) is fixed in code but not yet verified against the original reproduction. Expect rough edges and read the Road to Launch for what stands between here and 1.0.
Alpha DMGs live on the Releases page.
They are not signed or notarized, so macOS refuses to open them until you clear the quarantine flag yourself:
# after dragging MacNotch.app to Applications
xattr -dr com.apple.quarantine /Applications/MacNotch.appThat command is the price of an unsigned alpha, not a sign the download is broken. Prefer not to run it? Build from source — same app, no quarantine flag involved.
On first launch, MacNotch asks only for what the modules you enable actually need: Calendar for meeting countdowns, Automation for media control, Bluetooth for device battery. Decline any of them and that module goes quiet; the rest keep working. Nothing leaves your Mac either way.
15 modules, each independently enabled or disabled. A disabled module runs zero timers, observers, or listeners — it costs nothing.
- Glanceable audio HUD — album art, title marquee on hover, scrubbing, output device switcher (AirPlay/headphones).
- Flank live activities — meeting countdowns, Pomodoro timers, and audio visualizers in the narrow strips beside the camera housing.
- Drag-and-drop stash — drop files into the notch to hold them, drag them back out into Finder, Slack, Mail, or Xcode later.
- Instant drop actions — AirDrop, copy path, open with the default app, or save to a custom destination, all without a click.
- Calendar & meetings — next-meeting countdown with a one-click join for Zoom, Google Meet, Teams, and Webex.
- Pomodoro — work/break timers with inline duration tweaks in the notch.
- Notes & todos — debounced capture that flushes safely; todos sync with Reminders if you connect a list.
- Screen time & day progress — how much of the day is gone, and where it went.
- Modular tile grid — CPU, memory, disk, and network stats arranged how you like.
- Quick toggles — Night Shift, Keep Awake, Low Power Mode, mute.
- Profiles — dashboard layouts that switch on macOS Focus Mode or time of day.
- Translation HUD — inline translation via the native macOS APIs.
- Bluetooth manager — device battery and connect/disconnect from the notch.
Full per-module specs live in docs/03-modules/.
- Invisible until needed — pixel-matched to hardware black (
#000000), no background chrome. - Instant — hover expansion under 16 ms, ~0% idle CPU.
- Local-first — no analytics, no telemetry, no account. The only network calls any module can make are weather and album artwork.
- Modular — disabled means disabled: zero background work, enforced by a debug assertion that trips if a deactivated module leaves a timer or service subscription alive.
- Native Swift — Swift 6, SwiftUI, and AppKit, with exactly one third-party dependency (KeyboardShortcuts, for global hotkey recording).
Requirements: macOS 14.0 (Sonoma) or newer, Swift 6.0 toolchain (Xcode 15+).
git clone https://github.com/iprashantraj/DynamicNotch.git cd DynamicNotch swift build # build .build/debug/MacNotch --self-test # 161 assertions, should print 0 failed ./scripts/bundle-app.sh # package MacNotch.app with its Info.plist open dist/MacNotch.app # launch
Important
Launch the bundle (dist/MacNotch.app), not .build/debug/MacNotch directly. Bluetooth, camera, and Accessibility permissions are keyed to the bundle's Info.plist — a bare binary gets denied and crashes on the TCC prompt.
./scripts/bundle-app.sh --dmg also produces a distributable DMG. Version and build number come from the nearest git tag and the commit count.
MacNotch ships as a standalone AppKit bundle without XCTest, so the test suite runs inside the binary:
.build/debug/MacNotch --self-test
161 assertions across state-machine transitions, persistence quarantine, window geometry, profile rules, and storage debouncers. CI runs this on every push; the release workflow refuses to build a DMG if it fails.
Architecture specs and developer docs live in docs/:
- Vision & Principles — design philosophy and the rules the code follows.
- System Architecture — the
NSPanelwindow layer, event loops, module registry. - Live Activities — priority resolution for the status strip slots.
- Module Specs — one spec per module.
- Road to Launch — what's verified, what isn't, and what ships when.
Bug fixes, new modules, animation polish — all welcome. See CONTRIBUTING.md for setup, the code conventions, the module checklist, and what a good PR description contains.
The short version: swift build && .build/debug/MacNotch --self-test must be green, geometry and timing come from the design tokens rather than magic numbers, and if your change touches visible behavior, run it on a real Mac and say so in the PR.
MIT.