---
title: "DroppyKitSurfaceBridge, DroppyKit"
description: "Where DroppyPanelSurface gets the host&#x27;s own surface."
canonical: "https://getdroppy.app/docs/droppykit/api/droppy-kit-surface-bridge"
last-updated: "2026-09-09"
---

# DroppyKitSurfaceBridge

Where DroppyPanelSurface gets the host's own surface.

`enum DroppyKitSurfaceBridge`

Same shape and same reasoning as [`DroppyKitThemeBridge`](https://getdroppy.app/docs/droppykit/api/droppy-kit-theme-bridge): the first installation wins, so a droplet loaded after launch cannot replace it.

## Type properties

### nowPlayingPlayer

`@MainActor static var nowPlayingPlayer: DroppyNowPlayingPlayerProvider? { get }`

The host's floating player. `nil` outside Droppy.

### panelActivationProvider

`@MainActor static var panelActivationProvider: ((NSWindow, NSRunningApplication?) -> DroppyPanelActivation)? { get }`

The host's activation for a droplet's panel. `nil` outside Droppy.

### panelSurfaceProvider

`@MainActor static var panelSurfaceProvider: ((CGFloat) -> AnyView)? { get }`

The host's launcher surface for a corner radius. `nil` outside Droppy.

### settingsToolbarPillProvider

`@MainActor static var settingsToolbarPillProvider: ((AnyView) -> AnyView)? { get }`

The host's toolbar pill around a control. `nil` outside Droppy.

### settingsToolbarSearchProvider

`@MainActor static var settingsToolbarSearchProvider: ((Binding<String>, String) -> AnyView)? { get }`

The host's own toolbar search, for [`DropletSettingsToolbarSearchField`](https://getdroppy.app/docs/droppykit/api/droplet-settings-toolbar-search-field). `nil` outside Droppy.

### shortcutRecorderProvider

`@MainActor static var shortcutRecorderProvider: ((DroppyShortcutRecorder.Configuration) -> AnyView)? { get }`

The host's recorder for a configuration. `nil` outside Droppy.

## Type methods

### installConfirmationDialogProvider(_:)

`@discardableResult @MainActor static func installConfirmationDialogProvider(_ provider: @escaping (String, String, String, String) -> Bool) -> Bool`

Installs the host's confirmation presenter before loading droplets. First installation wins. The presenter must return `true` only for the explicit confirm action.

### installNowPlayingPlayer(_:)

`@discardableResult @MainActor static func installNowPlayingPlayer(_ provider: DroppyNowPlayingPlayerProvider) -> Bool`

Installs the host's floating player. **Host processes only**, once, at launch, before any droplet is loaded (DroppyKit 1.21.0).

- Returns: `true` when this call installed it, `false` when one was already installed and nothing changed.

### installPanelActivationProvider(_:)

`@discardableResult @MainActor static func installPanelActivationProvider(_ provider: @escaping (NSWindow, NSRunningApplication?) -> DroppyPanelActivation) -> Bool`

Installs the host's panel activation. **Host processes only**, once, at launch, before any droplet is loaded (DroppyKit 1.15.0).

- Returns: `true` when this call installed it, `false` when one was already installed and nothing changed.

### installPanelSurfaceProvider(_:)

`@discardableResult @MainActor static func installPanelSurfaceProvider(_ provider: @escaping (CGFloat) -> AnyView) -> Bool`

Installs the host's surface. **Host processes only**, once, at launch, before any droplet is loaded.

- Returns: `true` when this call installed it, `false` when one was already installed and nothing changed.

### installSettingsToolbarPillProvider(_:)

`@discardableResult @MainActor static func installSettingsToolbarPillProvider(_ provider: @escaping (AnyView) -> AnyView) -> Bool`

Installs the host's Settings toolbar pill. **Host processes only**, once, at launch, before any droplet is loaded (DroppyKit 1.18.0).

- Returns: `true` when this call installed it, `false` when one was already installed and nothing changed.

### installSettingsToolbarSearchProvider(_:)

`@discardableResult @MainActor static func installSettingsToolbarSearchProvider(_ provider: @escaping (Binding<String>, String) -> AnyView) -> Bool`

Installs the host's Settings toolbar search: given the page's text and its prompt, the view that makes the host show its native search for them. **Host processes only**, once, at launch, before any droplet is loaded.

- Returns: `true` when this call installed it, `false` when one was already installed and nothing changed.

### installShortcutRecorderProvider(_:)

`@discardableResult @MainActor static func installShortcutRecorderProvider(_ provider: @escaping (DroppyShortcutRecorder.Configuration) -> AnyView) -> Bool`

Installs the host's recorder. **Host processes only**, once, at launch, before any droplet is loaded (DroppyKit 1.14.0).

- Returns: `true` when this call installed it, `false` when one was already installed and nothing changed.
