# Architecture Internal structure of the Player API. ## Overview ``` createPlayer() config: presets.website | { features: [...] } │ filters by feature.type │ ┌───────────────┴───────────────┐ ▼ ▼ ┌────────────────────────┐ ┌────────────────────────┐ │ createStore() │ │ createStore() │ │ type: 'media' │ │ type: 'player' │ └────────────────────────┘ └────────────────────────┘ │ │ ▼ ▼ ┌────────────────────────┐ ┌────────────────────────┐ │ Media Store │◄─────│ Player Store │ │ target: MediaTarget │ │ target: PlayerTarget │ │ │ │ │ │ state: paused, volume │ │ state: isFullscreen │ │ request: play, pause │ │ request: toggleFS │ └────────────────────────┘ └────────────────────────┘ │ getFeature(target.media, f) │ ┌───────────┴───────────┐ ▼ ▼ Read media state Call media requests (iOS fallback) (keyboard shortcuts) ``` **Key insight:** Player Store's target includes a media proxy. This enables coordination without tight coupling — feature authors use the same flat API as component authors. ## Two Stores ### Why Two Stores | Reason | Explanation | | --------------------- | --------------------------------------------------------------------------------------------------- | | **Different targets** | Media features target `MediaTarget`. Player features target `PlayerTarget`. | | **Attachment timing** | `