Skip to content

BiSemaphore/notchify

Repository files navigation

notchify

A small developer toolbox that lives in your Mac's camera notch. It stays invisible until you need it, then drops a clean panel down from the notch when you hover. Everything runs on your machine.

Built by Binary Semaphore.

What it does

Idle. Nothing. The notch looks like a normal notch.

Hover. Move your cursor to the notch and a panel drops down with tabs for Shelf, Clipboard, Format, Tools, and Camera. Move away and it tucks back up. The panel follows your system appearance — light or dark. You can also toggle it with a global hotkey (default ⌥⌘N), set in Settings.

There is no dock icon and no menu bar icon (LSUIElement = true). You open Settings from the gear in the panel, or by right-clicking it.

Features

Shelf

A holding spot for files. Drag a file onto the notch to stash it, then drag it back out into any app later (Finder, Mail, Slack, WhatsApp, and so on). The shelf survives restarts. Hover a file to remove it, or clear the whole shelf at once.

Clipboard

Your recent copies, newest first. A search box narrows the list by text, and a filter row lets you jump to just Links, Colors, Code, or Text. Click any item to copy it back to the clipboard. In Settings you can set how many items to keep (50 / 100 / 500 / unlimited) and optionally have the history persist across restarts — that's off by default, stays on your Mac, and can be cleared at any time.

Format

Paste text and transform it in place: pretty-print or minify JSON, Base64 encode/decode, or URL encode/decode. Copy the result back with one click.

Tools

Small things you reach for while building:

  • Color picker. Sample any pixel on screen and copy the hex.
  • Generators. One click to copy a UUID, an ISO 8601 timestamp, a Unix epoch, a random hex string, or a line of lorem ipsum.
  • Port peek. Type a port to see what's listening on it, and kill the process if you need the port back.

Camera

An optional front-camera mirror for a quick check before a call. Off by default, and it only asks for camera access the first time you open it.

Settings

Opened from the gear in the panel footer, a standard macOS window. Toggle each tab on or off, set launch at login, choose the global toggle hotkey, tune the hover behavior (expand on hover, keep pinned, auto-collapse delay), and set clipboard history options.

Privacy

Everything runs on your machine. The only permission notchify ever requests is the camera, and only when you open the Camera tab. Nothing leaves your Mac.

Requirements

  • macOS 14 (Sonoma) or later
  • Xcode 16 or later to build from source

Install

From a release

Pre-built apps are published on the Releases page. Download the .zip, unzip it, and drag notchify.app into /Applications. Then launch it and hover your notch.

Note: early releases are not yet signed with an Apple Developer ID. On first launch macOS may say the app "cannot be checked for malicious software." Right-click the app and choose Open, then Open again, to run it. Signing + notarization (in CI) and in-app auto-update (via Sparkle) are planned once a Developer ID is in place.

From source

  1. Open notchify.xcodeproj in Xcode 16.
  2. Select the notchify scheme, target My Mac.
  3. Build and run (⌘R). The app has no dock icon, so hover your notch to find it.
  4. To quit, right-click the panel and choose Quit notchify.

Or from the command line:

xcodebuild -project notchify.xcodeproj -scheme notchify -destination 'platform=macOS' build

notchify runs without the App Sandbox, because it shells out to system tools (like lsof for port peek) and reads the screen for the color picker. That means it is distributed directly, not through the Mac App Store.

Releases

Versioned releases and their changelogs live on the Releases page, and are summarized in CHANGELOG.md. Versions follow MAJOR.MINOR.PATCH.

Architecture

The project uses an Xcode 16 file-system-synchronized group, so every .swift file under notchify/ is compiled into the target automatically. Source is grouped by role:

notchify/
├── App/        app entry, window manager
├── Views/      overlay panel, tools pane, settings window
├── Services/   camera capture, port peek
├── Monitors/   clipboard history
└── Models/     settings, clipboard type detection, file shelf state
File Responsibility
App/NotchWindowManager.swift NSWindow lifecycle, cursor tracking, expand/collapse, panel geometry
App/HotKeyManager.swift Global toggle hotkey via Carbon RegisterEventHotKey (no Accessibility permission)
App/notchifyApp.swift App entry, accessory-app setup, Settings window
Views/NotchOverlayView.swift The panel: tab bar, Shelf, Clipboard (search + filter), file drag-out, footer, theme colors
Views/FormatPane.swift Format pane and pure JSON / Base64 / URL transforms
Views/DevToolsView.swift Tools pane (color picker, generators, port peek) and Camera pane
Views/HotKeyRecorder.swift Carbon ⇄ Cocoa hotkey mapping and the Settings key recorder
Views/ContentView.swift Settings window
Monitors/ClipboardMonitor.swift NSPasteboard polling, de-duplicated history, configurable limit, opt-in persistence
Models/ClipboardKind.swift Classifies a copied string as link / color / code / number / text
Models/FileShelfStore.swift File shelf state, persisted to UserDefaults
Models/NotchSettings.swift UserDefaults-backed ObservableObject singleton
Services/PortPeekService.swift Runs lsof / kill for the port tool
Services/CameraMirrorService.swift, Widgets/CameraPreviewView.swift Optional camera preview

Notes

  • File drag-out uses NSFilePromiseProvider, the AppKit mechanism for dragging a file out of an app. It works with Finder, Mail, and Chromium-based apps (Slack, WhatsApp, VS Code) that reject a plain URL.
  • Color picker uses the public NSColorSampler.

License

MIT. See LICENSE.

Not affiliated with Apple.

About

A small developer toolbox that lives in your Mac's camera notch. By Binary Semaphore.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages