Skip to content

Capabilities

This page documents runtime capability literals projected through the adapter boundary.

Capabilities are runtime projections, not static feature flags baked into the package.

Capability is derived from CAPABILITIES:

const CAPABILITIES = [
'play',
'pause',
'stop',
'seek',
'skip-next',
'skip-previous',
] as const;
type Capability = (typeof CAPABILITIES)[number];
  • play: start or resume playback.
  • pause: pause active playback.
  • stop: stop playback.
  • seek: move playback to a target position.
  • skip-next: move to the next queue item.
  • skip-previous: move to the previous queue item.

CAPABILITIES are runtime projections at the moment they are reported. They are not permanent guarantees across the full session and can change with queue, track, transport, or platform conditions.

  • Build UI controls from the latest supported capability projection, not from assumptions about a platform.
  • Keep capability decisions separate from snapshot rendering concerns: capabilities express allowed operations, snapshots express current playback/queue state.
  • Re-evaluate support over time; projection can change as runtime context changes.
  • The literal list defines valid capability identifiers, not an SLA that every runtime always supports every literal.
  • The contract does not define permanence windows (for example, “once supported, always supported”).
  • Capability literals do not by themselves define command success, retries, or timing behavior.
  • Treating CAPABILITIES as a startup-only static config.
  • Inferring seek support only from timeline fields like duration instead of runtime capability projection.
  • Hiding controls forever after one unsupported read, without re-reading current capabilities.
  • Coupling UI state directly to transport assumptions that are not represented in supported.