DynamicLakeKit
Build DynamicLake extensions with SwiftUI or DynamicLake plugins with JSON.
Overview
!DynamicLakeKit cover showing the framework icon and tagline.
DynamicLake lets apps and local tools add glanceable UI around the Mac notch or pill. The primary surface is a live activity: compact current status that stays visible while something is happening. A live activity can also provide a sneak peek: a small expanded preview for secondary detail or simple controls.
DynamicLake supports two ways to build those experiences:
| Type | Build With | Best For | | --- | --- | --- | | Extensions | SwiftUI, ExtensionKit, and DynamicLakeKit | Fully custom UI, companion apps, deep macOS integration, settings, and shared app state. | | Plugins | A .dynamiclakeplugin package and framed JSON messages | Scripts, AI agents, timers, build progress, local services, and small workflow integrations. |
Extensions are bundled inside a macOS app. The companion app opens, updates, and closes activities with DynamicLakeActivityCenter while the extension target renders SwiftUI scenes such as DynamicLakeLiveActivity and DynamicLakeSneakPeek.
Plugins are local executables launched by DynamicLake. A plugin sends create, update, and dismiss JSON commands over a local socket. DynamicLake renders those commands with predefined components such as text, icons, progress, buttons, timers, and status indicators.
Apps can also ship or install a plugin instead of an ExtensionKit extension, especially when the app only needs simple status UI. For app-to-DynamicLake integrations, prefer a SwiftUI extension when possible because it gives the app full UI control, typed state, settings scenes, and a clearer macOS integration model.
Creators can test an extension or plugin in DynamicLake Playground before using the full DynamicLake app. DynamicLake Playground is free and runs one extension or plugin at a time, which makes it useful for building and validating creator integrations.
Choose an extension when the creator needs full SwiftUI control. Choose a plugin when the creator needs fast distribution, simple UI, and language freedom.
Topics
Start Here
Build Extensions
Build Plugins
Shared Design
Deprecated
Extension Entry Points
DynamicLakeExtensionPointDynamicLakeExtensionSceneIDDynamicLakeExtensionInfoKeyDynamicLakeExtensionMetadataDynamicLakeExtensionDynamicLakeExtensionSceneDynamicLakeExtensionSceneBuilderDynamicLakeLiveActivityDynamicLakeExtraLiveActivityDynamicLakeSneakPeekDynamicLakeSettings
Activity State
DynamicLakeActivityCenterDynamicLakeActivityCommandDynamicLakeActivityIdentityDynamicLakeActivityStateReader
JSON Plugins
DynamicLakeJSONPluginProtocolDynamicLakeJSONPluginCommandDynamicLakeJSONPluginSurfacesDynamicLakeJSONPluginCompactSurfaceDynamicLakeJSONPluginSneakPeekSurfaceDynamicLakeJSONPluginComponentDynamicLakeJSONPluginCommandTypeDynamicLakeJSONPluginComponentTypeDynamicLakeJSONPluginButtonShapeDynamicLakeJSONPluginActionCallbackDynamicLakeJSONPluginResponse
Live Activity Configuration
DynamicLakeActivityDynamicLakeLiveActivityConfigurationLiveActivityPriorityLiveActivitySizeLiveActivityColorDynamicLakeLiveActivityStateDynamicLakeEmptyLiveActivityStateDynamicLakeLiveActivityViewProviderDynamicLakeLiveActivityContext
Live Activity Layout
LiveActivityGeometryLiveActivitySlotSideLiveActivitySlotInsetsLiveActivitySlotVisualLayoutLiveActivitySlotVisualFitLiveActivityScreenKindLiveActivitySlotLayoutLiveActivityCompactTextAccessoryLiveActivityCompactTextSlot
Sneak Peek Layout
DynamicLakeSneakPeekContextSneakPeekGeometrySneakPeekSlotSideSneakPeekSlotMetricsSneakPeekLayoutMetricsSneakPeekSlotLayoutSneakPeekSlotSizingSneakPeekSlotSneakPeekEmptySlotSneakPeekControlMetrics
Simulator
DynamicLakeLiveActivitySimulatorDynamicLakeLiveActivityCompactSimulatorDynamicLakeLiveActivitySneakPeekSimulatorDynamicLakeLiveActivitySimulatorModeDynamicLakeLiveActivitySimulatorShapeDynamicLakeNotchShape