# v10.0.0-rc.2

Released 2026-09-09. Contains breaking changes.

[Compare changes on GitHub](https://github.com/videojs/v10/compare/@videojs/core@10.0.0-rc.1...@videojs/core@10.0.0-rc.2)

> **Note**
>
> Pardon the fast follow, with breaking changes. We cut rc.1 just a bit too early. [Check that changelog out](https://videojs.org/changelog/10.0.0-rc.1/) for additional major changes. But this time for real, [we’re excited to announce the Release Candidate of Video.js v10!](https://videojs.org/blog/videojs-v10-release-candidate/)

Posters and timeline previews now have room for the layers your player needs, while the surrounding controls behave more reliably as media loads.

## Breaking changes

- **React posters use compound parts** ([#2563](https://github.com/videojs/v10/pull/2563)). Replace `<Poster />` with `<Poster.Root><Poster.Image /></Poster.Root>`. Move image styling to `media-poster-image`; keep visibility and loading styles on `media-poster`.
- **React thumbnails use compound parts** ([#2566](https://github.com/videojs/v10/pull/2566)). Replace `<Thumbnail time={time} />` with `<Thumbnail.Root time={time}><Thumbnail.Image /></Thumbnail.Root>`, and replace `ThumbnailProps` with `ThumbnailRootProps` and `ThumbnailImageProps`.
- **React slider thumbnails use compound parts** ([#2568](https://github.com/videojs/v10/pull/2568)). Replace `<Slider.Thumbnail />` with `<Slider.Thumbnail.Root><Slider.Thumbnail.Image /></Slider.Thumbnail.Root>`. Rename `SliderThumbnailProps` to `SliderThumbnailRootProps`, and pass image props to `Slider.Thumbnail.Image`.
- **HTML thumbnails adopt their image child** ([#2572](https://github.com/videojs/v10/pull/2572)). For custom thumbnail markup, provide a native `<img>` inside `<media-thumbnail>` or `<media-slider-thumbnail>`; the thumbnail root now controls that image’s `src` and `srcset`. Without a child, style the fallback through `::part(image)`.

## Composable previews

Poster, thumbnail, and slider thumbnail surfaces now separate state from the controlled image. That gives you a stable root for loading state and sizing, plus a place for overlays, blur previews, and other sibling layers. React uses `Root` and `Image` parts, while HTML poster and thumbnail elements adopt an optional light-DOM image and otherwise render a fallback image ([breaking changes](#breaking-changes), [#2563](https://github.com/videojs/v10/pull/2563), [#2566](https://github.com/videojs/v10/pull/2566), [#2568](https://github.com/videojs/v10/pull/2568), [#2572](https://github.com/videojs/v10/pull/2572)).

See the Poster reference for [HTML](https://videojs.org/docs/framework/html/reference/components/poster/) and [React](https://videojs.org/docs/framework/react/reference/components/poster/), Thumbnail for [HTML](https://videojs.org/docs/framework/html/reference/components/thumbnail/) and [React](https://videojs.org/docs/framework/react/reference/components/thumbnail/), and timeline previews for [HTML](https://videojs.org/docs/framework/html/guides/thumbnails/) and [React](https://videojs.org/docs/framework/react/guides/thumbnails/). The guide now explains which thumbnail props the slider supplies and which you provide ([#2681](https://github.com/videojs/v10/pull/2681)).

## Controls and skins

Before media metadata is available, time-dependent controls now show their unavailable state instead of offering a misleading zero-duration timeline: seeking, live-edge seeking, the time slider, and picture-in-picture wait until they have a usable range ([#2525](https://github.com/videojs/v10/pull/2525)). Held slider keys now advance steadily, stay in range, and keep controls visible for the full press ([#2553](https://github.com/videojs/v10/pull/2553)). Read the Time reference for [HTML](https://videojs.org/docs/framework/html/reference/components/time/) and [React](https://videojs.org/docs/framework/react/reference/components/time/), and LiveButton for [HTML](https://videojs.org/docs/framework/html/reference/components/live-button/) and [React](https://videojs.org/docs/framework/react/reference/components/live-button/) ([#2680](https://github.com/videojs/v10/pull/2680)).

The shared skins also tighten narrow-player spacing, keep video controls above captions, and size seek previews responsively ([#2558](https://github.com/videojs/v10/pull/2558)). A finite clipping radius avoids a Safari `clip-path` bug ([#2679](https://github.com/videojs/v10/pull/2679)), and Safari now applies poster and slider-thumbnail styling correctly when those elements host or slot Shadow DOM content ([#2693](https://github.com/videojs/v10/pull/2693)).

## Documentation updates

The docs now cover always-visible controls in the [HTML](https://videojs.org/docs/framework/html/guides/controls/) and [React](https://videojs.org/docs/framework/react/guides/controls/) guides, compound React radio-group parts, container-scoped error-dialog modality, and playback-adapter terminology in React hooks ([#2687](https://github.com/videojs/v10/pull/2687), [#2688](https://github.com/videojs/v10/pull/2688), [#2686](https://github.com/videojs/v10/pull/2686), [#2685](https://github.com/videojs/v10/pull/2685)).

---

Full changelog: https://videojs.org/changelog/llms.txt
All documentation: https://videojs.org/llms.txt
