// the find
vidstack/player
UI components and hooks for building video/audio players on the web. Robust, customizable, and accessible. Modern alternative to JW Player and Video.js.
Vidstack is a headless-first media player library for the web, successor to Plyr and Vime. It ships both unstyled primitive components for building custom UIs and pre-built layouts, with first-class support for React, Vue, Svelte, Solid, and vanilla web components. Aimed at teams who need production-grade HLS/DASH playback with real accessibility without rolling their own from scratch.
The architecture is sound: a framework-agnostic core (`packages/vidstack`) with thin framework adapters on top, so the React bindings aren't a reimplementation — they're just wrappers. Accessibility is structural, not bolted on; ARIA live regions, keyboard shortcuts with configurable bindings, and caption rendering are all first-class citizens in the core. The signal-based state model (see `packages/vidstack/src/core/api/player-state.ts`) means UI components subscribe to exactly the state slices they need — no unnecessary re-renders. The Plyr layout shim is a genuine migration path, not a compatibility stub — it maps Plyr's slot/icon model properly so existing Plyr CSS mostly just works.
The npm badge points to a `@next` tag, and the README never says 'stable' — if you're adopting this for production today, you're betting on a release candidate. There's no SSR story documented; server-rendering a video player is always awkward, but with Next.js App Router and RSC in the mix, the lack of explicit guidance will cost you hours. The Remotion provider is interesting but lives in the React package with no equivalent in other framework adapters, making it feel like an afterthought. Test coverage is sparse for a library of this scope — a handful of unit tests scattered through the tree, no integration tests for the HLS or DASH provider paths where the real failure modes live.