A Droplet is an extension that lives inside Droppy. It draws on the same surfaces Droppy's own features do — the notch, the shelf, the lock screen — and it is written in SwiftUI, against this SDK.
Droplets are native code running in Droppy's process, so the Store is review-and-sign: you build against DroppyKit, open a merge request on the Store repository (gitlab.com/droppyformac1/droplets, one folder per droplet), and the merged commit is built, signed and published by its pipeline. No droplet ships without someone having read it. By default, Droppy runs an unsigned one, such as the droplet you are building, after the person whose Mac it is approves that exact build, and asks them again each time Droppy opens. Don't ask again for local droplets turns off these questions for all local builds, including new and changed ones. Turn Ask before running local droplets back on in Settings, Store, Local droplets to restore the questions. Bundle validity checks still apply.
The surfaces you can build
| Surface | What it is | Protocol |
|---|---|---|
| Shelf widget | A card on the expanded shelf, alone or sharing the row | ShelfWidgetProviding |
| Live activity | A compact row beside the notch, plus its expanded detail | LiveActivityProviding |
| Expanded surface | A takeover on the notch, for something that needs the room | ExpandedSurfaceProviding |
| Settings pane | Your droplet's own page inside Droppy's Settings | SettingsPaneProviding |
| HUD | A transient message on the notch | HUDPresenting |
| Lock screen row | One line on Droppy's lock surface | LockScreenStatusProviding |
| Menu bar extra | A tile in Droppy's Command Center, the panel under its menu bar icon | MenuBarExtraProviding |
| URLs | droppy://droplet/<id>/…, the reply channel for an app you drive | DropletURLHandling |
| Tools for AI apps | Actions Claude, Cursor or Codex can run through Droppy's MCP server | MCPToolProviding |
You pick the ones you need. A droplet that only draws a shelf widget is a perfectly good droplet.
What a droplet is made of
- A Swift package that builds a dynamic library and links DroppyKit.
- A
droplet.jsonmanifest — seeDropletManifest— naming the droplet, the surfaces it provides, the capabilities it needs, and who made it. - An Icon Composer document named in
icon. Jordy designs it for every Store droplet; your package carries a placeholder. See The icon. - A creator avatar, also required, which is the round mark beside your droplet's name in the Store. See
DropletCreatorAvatar.
Trying it without installing anything
DroppyKitHarness opens your droplet in Droppy's Settings panel — the real one, built from the app's own source — with a page per surface, a switch per capability, and a running list of everything your droplet asks the host to do. It never touches the system, so it runs happily alongside Droppy itself.
import DroppyKit
import DroppyKitHarness
@main
struct WorldClockHarness: DropletHarnessApp {
static func makeDroplet() -> any Droplet { WorldClockDroplet() }
}Building it with a coding agent
Most droplets will be written with Claude Code, Codex or Cursor at the keyboard, and the SDK is built for that. Every scaffold carries the brief an agent reads before it starts, and the DroppyKit MCP server hands it the whole loop as tools: the build, the checks, pictures of every surface it can look at, a JSON verdict, and an install into Droppy Playground that says whether the bundle loaded. See Build with a coding agent.
Start here
Building a droplet
- The manifest
- Design guidelines
- Good citizen
- Shelf widgets
- Live activities
- Expanded surfaces
- Settings panes
- Launchers
- Tools for AI apps
- RepositoryUpdates
- Host support
Artwork
Testing
Publishing
Entry point
DropletDropletPrincipalDropletIDDropletHostDropletURLHandlingDropletURLRequest
Manifest
Host services
DropletPreferencesServiceDropletEnvironmentServiceDropletHUDServiceDropletShelfServiceDropletLiveActivityServiceDropletNotchSurfaceServiceDropletShortcutsServiceDropletWorkspaceServiceDropletFeedbackServiceDropletPermissionsServiceDropletInstallStateServiceDropletLogServiceDropletLauncherService
Design system
DroppySpacingDroppyRadiusDroppyOpacityAdaptiveColorsDroppyAnimationDroppyTransitionDroppyLiveActivityMetricsDroppyWashCircleButtonStyleDroppyWashPillButtonStyleDroppyWashToneDropletSettingsPaneDropletSettingsSectionDropletSettingsCardDropletControlRowDropletToggleRowDropletStackedRowDropletSliderRow