Skip to content
← All work

Native macOS · Open source · Shipped

NotchKo

A Dynamic Island for the MacBook notch. Event-driven, down to idle.

Role
Solo developer
Year
2026
Stack
Swift · SwiftUI · AppKit · Combine · Core Animation
NotchKo overview with music, devices, and file shelf

Overview

A native macOS app that turns the notch into a panel for music, files, clocks, devices, image tools, a teleprompter, and a mirror.

Built around an event-driven architecture: 0% CPU while idle and around 30 MB of memory. Timings use wall-clock anchors, and the collapsed equalizer runs through Core Animation rather than a main-thread timer.

Why I built it

The notch is useful space, but the apps I tried kept doing work in the background. NotchKo keeps music, temporary files, timers, connected-device details, image tools, a teleprompter, and a mirror within reach while behaving like a quiet system utility when closed.

Zero-work idle architecture

Spotify, charging, Bluetooth, and timers push notifications into the app; nothing polls. Elapsed and remaining times are derived from wall-clock anchors, so closing the notch stops all timer work. The collapsed equalizer runs as a Core Animation loop in the system render server: I measured about 9% WindowServer usage while music plays and 0% from NotchKo itself.

Native systems engineering

The app uses public macOS APIs only. Spotify integration relies on its scripting interface and playback-change broadcast, while panels are keyed by CGDirectDisplayID so they survive resolution and display changes. It ships as a Swift Package with a custom bundling and code-signing script rather than an Xcode project.

The essentials around the notch

Hovering the notch opens a compact control surface for current playback, connected devices, battery state, parked files, clocks, and utilities without creating a normal app window.

Music, battery and devices, and the shelf at a glance.
Music, battery and devices, and the shelf at a glance.

Useful even when it is closed

The pill keeps album art and a dominant-colour equalizer visible during playback. The animation is handed to Core Animation instead of keeping the app's main thread awake.

Collapsed while music plays.
Collapsed while music plays.

Spotify controls without polling

Now Playing includes artwork, seeking, shuffle, repeat, play controls, and Spotify's own volume. Playback changes arrive through Spotify's public scripting interface and broadcast notifications.

Now Playing with scrubbing, shuffle, repeat, and Spotify volume.
Now Playing with scrubbing, shuffle, repeat, and Spotify volume.

Park files at the top of the screen

Any file can be dropped onto the notch, including macOS screenshot thumbnails that still exist as file promises. Files support multi-select, grouped drag-out, Quick Look, and an AirDrop drop zone.

File shelf with AirDrop and Quick Look.
File shelf with AirDrop and Quick Look.

Timers that stop working when hidden

The clock combines a stopwatch with a flexible timer: drag the digits or type values such as 1h20m. Countdown state comes from wall-clock anchors, so the closed pill can show accurate time without a running timer loop.

Stopwatch and a timer set by typing or dragging.
Stopwatch and a timer set by typing or dragging.

Hardware status in one glance

The devices panel surfaces AirPods left, right, and case battery, charger wattage, Mac battery health and time remaining, Bluetooth accessories, and external displays.

Connected devices with per-bud battery information.
Connected devices with per-bud battery information.

Small image jobs without another app

Shelf images can run OCR to the clipboard, remove the foreground into a transparent PNG, convert formats, or compress toward a selected target between 200 KB and 5 MB.

Convert, compress to a target size, and cut out subjects.
Convert, compress to a target size, and cut out subjects.

Keep the script close to the lens

The notch widens into a low reading strip with auto-scroll, speed, text-size, and mirror controls. Its extra-wide screenshot keeps its natural aspect ratio in this gallery.

A wide reading strip directly beneath the camera.
A wide reading strip directly beneath the camera.

A camera check where you are already looking

The mirror opens directly below the camera for a fast framing check and includes a source picker when more than one camera is available.

Live mirror for a quick self-check.
Live mirror for a quick self-check.

Present at login, invisible in the Dock

NotchKo runs as a background agent with no Dock icon or normal window. A brief greeting confirms it is ready, then the utility stays out of the way until the notch is hovered or opened by hotkey.

A lightweight greeting when NotchKo starts at login.
A lightweight greeting when NotchKo starts at login.
← Back to the collection
EXPERIENCE / CONTRIBUTION
GABAY / A QUICK LOOK
A little context, before you explore.