Skip to content

jackson-storm/DynamicNotch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

346 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

DynamicNotch logo

DynamicNotch

Turn the MacBook notch into a living native surface.

DynamicNotch is a native macOS app for notched MacBooks that turns the notch into a live system surface for media, downloads, AirDrop, timers, screen recording, connectivity events, lock-screen transitions, and custom hardware HUDs.

Join the Telegram channel Open the DynamicNotch website Send an email about DynamicNotch Contact me on Telegram

GitHub downloads Latest release macOS 14.6 or later SwiftUI and AppKit Swift 5 License

DynamicNotch preview

✨ Why DynamicNotch

DynamicNotch treats the MacBook notch like a compact native surface instead of a static cutout. It stays close to the hardware shape until something important happens, then expands with queue-driven presentation, gesture support, and system-aware feature routing.

The app is built with SwiftUI and AppKit, so the notch window, settings UI, and event handling feel like part of macOS rather than a web-style overlay.

The difference between this project and others is that it is built on its own engine, and not taken from other ready-made repositories. It completely copies the logic, animations, and behavior of a real Dynamic Island on an iPhone, unlike other projects.

The main goal is to make the project as native as possible, both in terms of design and interaction.

πŸš€ Highlights

  • 🎡 Live Activities: Now Playing (media control, album artwork, audio visualizer), Downloads progress, AirDrop, Timer, Screen Recording indicator, Focus mode, Personal Hotspot, and Lock Screen media/live activity surfaces.
  • 🏝️ Dynamic Island (Floating Capsule): Automatic support for devices without a physical hardware notch (e.g. non-notched MacBooks, iMac, Mac mini, or external monitors). Transitions to a floating capsule shape (DynamicIslandShape) when topInset == 0, utilizing dynamic, smooth corner radius transitions.
  • ⚑ Temporary Alerts: Interactive HUD status for battery charging, low/full battery, Bluetooth connections, Wi-Fi, VPN, Focus-off toggling, and notch size modification settings feedback.
  • 🎚️ Native HUD Replacements: Beautiful, hardware-inspired HUD overlays for System Volume, Screen Brightness, and Keyboard Backlight.
  • πŸ“œ Chained Lyrics Provider: A dual-provider API engine (CompositeLyricsProvider) combining synchronized LRCLIB karaoke lyrics and static Lyrics.ovh database query fallback.
  • πŸ–±οΈ Gestures & Swipe Controls: Native interactive gestures including mouse drag, trackpad swipes, vertical swipe-to-dismiss/restore, and horizontal trackpad/mouse scroll-to-dismiss.
  • 🎨 Deep Customization: Personalization options for base notch width/height, stroke options, background styling, animation presets, custom screen/display selection, and fullscreen spaces handling.
  • βš™οΈ Refined Animations: Multi-preset transitions system with separate, dedicated transition tuning parameter closeLiveActivityCompactContentTransition to control the exact speed of content insertion when returning to compact mode.

🎬 Preview

LightBackgroundDemo.mp4
DarkBackgroundDemo.mp4

The demos show how the notch behaves on light and dark backgrounds. The outline can be disabled in Settings.

πŸ“¦ Installation

  1. Download the latest DMG from the Releases page.
  2. Drag DynamicNotch into Applications.
  3. Launch the app.
  4. Grant the permissions needed for the features you want to use.
  5. If macOS blocks the first launch, allow it from System Settings > Privacy & Security.

βœ… Requirements

  • macOS 14.6 or later
  • Works on both notched MacBooks and non-notched displays (automatically rendering as a floating Dynamic Island capsule)
  • Feature-specific permissions as needed:
    • Accessibility for custom HUD interception and some system-level interactions
    • Bluetooth access for accessory status updates
    • Screen Recording access for audio-reactive Now Playing visualization where macOS requires it
    • Media/Now Playing access where macOS requires it

πŸ› οΈ Build From Source

git clone https://github.com/jackson-storm/DynamicNotch.git
cd DynamicNotch
open DynamicNotch.xcodeproj

Then run the DynamicNotch scheme from Xcode. Swift Package Manager dependencies are resolved by the project.

πŸ—‚οΈ Repository Layout

DynamicNotch/
β”œβ”€β”€ Application/        # App entry point, app delegate, window setup, and settings shell
β”œβ”€β”€ Core/               # Shared models, protocols, services, and infrastructure
β”œβ”€β”€ Features/
β”‚   β”œβ”€β”€ Battery/
β”‚   β”œβ”€β”€ Bluetooth/
β”‚   β”œβ”€β”€ Download/
β”‚   β”œβ”€β”€ DragAndDrop/
β”‚   β”œβ”€β”€ Focus/
β”‚   β”œβ”€β”€ HUD/
β”‚   β”œβ”€β”€ LockScreen/
β”‚   β”œβ”€β”€ Network/
β”‚   β”œβ”€β”€ Notch/
β”‚   β”œβ”€β”€ NowPlaying/
β”‚   β”œβ”€β”€ Onboarding/
β”‚   β”œβ”€β”€ ScreenRecording/
β”‚   β”œβ”€β”€ Settings/
β”‚   └── Timer/
β”œβ”€β”€ Resources/          # Assets, localization, bundled media
└── Shared/             # Shared UI, helpers, and extensions

DynamicNotchTests/
β”œβ”€β”€ Features/
β”œβ”€β”€ Shared/
└── TestSupport/

DynamicNotchUITest/
└── DynamicNotchUITest.swift

πŸ—οΈ Architecture at a Glance

  • AppContainer composes services, monitors, feature view models, coordinators, and window managers.
  • AppDelegate manages app lifecycle, floating overlay window setup, workspace observers, and lock-screen handoff.
  • NotchEngine owns the queue-driven notch presentation state machine for live activities, temporary alerts, transitions, and restore flows.
  • NotchViewModel is the SwiftUI-facing layer for geometry, gestures, interactive resize, and engine-backed presentation state.
  • NotchEventCoordinator routes system events while feature-specific handlers translate them into notch content.
  • SettingsViewModel acts as a facade over dedicated settings stores for application, media/files, connectivity, battery, HUD, and lock-screen behavior.
  • Feature view models provide domain state for battery, Bluetooth, downloads, network, now playing, screen recording, timer, AirDrop, and lock screen.
  • Fullscreen hiding keeps the overlay window alive and hides notch activities until the user leaves fullscreen, so active features can restore cleanly.

🧰 Tech Stack

  • SwiftUI for notch content and settings UI
  • AppKit for windows, input handling, and macOS integration
  • Combine for feature and settings streams
  • Lottie for animation assets

🌍 Localization

The project currently includes localized app content for:

  • System language fallback
  • English
  • Russian
  • Spanish
  • Simplified Chinese

πŸ“„ License

DynamicNotch is released under the GNU General Public License v3.0. See LICENSE for details.