---
title: "DroppyKitMotionBridge, DroppyKit"
description: "Host-installed motion hooks."
canonical: "https://getdroppy.app/docs/droppykit/api/droppy-kit-motion-bridge"
last-updated: "2026-09-09"
---

# DroppyKitMotionBridge

Host-installed motion hooks.

`enum DroppyKitMotionBridge`

Supplies the host's current state, opening and closing animations, including its shelf size, speed and accessibility preferences.

Like [`DroppyKitThemeBridge`](https://getdroppy.app/docs/droppykit/api/droppy-kit-theme-bridge), the first installation wins. The lock protects provider registration; preset reads retain the animation API's UI-thread requirement and invoke the provider on the caller's thread.

## Cases

### DroppyKitMotionBridge.Preset.state

`case state`

### DroppyKitMotionBridge.Preset.notchOpen

`case notchOpen`

### DroppyKitMotionBridge.Preset.notchClose

`case notchClose`

## Type properties

### isProviderInstalled

`static var isProviderInstalled: Bool { get }`

Whether a host installed a motion provider. `false` is the normal state outside Droppy (previews, the harness), where the bridged presets use their standalone formulas.

## Type methods

### installProvider(_:)

`@discardableResult static func installProvider(_ provider: @escaping @Sendable (Preset) -> Animation) -> Bool`

Installs the host's motion provider. **Host processes only.**

The provider is called on every bridged preset read and must resolve the host's current animation fresh each time. Caching a value here would freeze a curve the user can still change. The first call wins and later calls are ignored.

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