---
description: "Renames cast APIs to google-cast and remote-playback, unifies fullscreen and PiP on media capabilities, and adds live streaming support."
date: 2026-04-27
version: "10.0.0-beta.23"
prerelease: true
breaking: true
compareUrl: "https://github.com/videojs/v10/compare/@videojs/core@10.0.0-beta.22...@videojs/core@10.0.0-beta.23"
---

Beta.23 ships two breaking changes. First, the overloaded "cast" vocabulary splits into two concepts ([#1380](https://github.com/videojs/v10/pull/1380)): the Google Cast integration is now `google-cast`, and the generic W3C Remote Playback surface is now `remote-playback`. Update `CastableMediaMixin` to `GoogleCastMixin`, `castFeature` to `remotePlaybackFeature`, `selectCast` to `selectRemotePlayback`, and the state fields `castState`, `castAvailability`, and `toggleCast()` to `remotePlaybackState`, `remotePlaybackAvailability`, and `toggleRemotePlayback()`. The `CastButton` component and its `data-cast-state` attribute keep their names. The same PR keeps controls visible while the cast picker is open, hides buttons for unsupported features in the skins, and hides the cast button on non-Chromium browsers.

Second, fullscreen and picture-in-picture state moves onto the media capability interfaces ([#1469](https://github.com/videojs/v10/pull/1469)). `MediaFullscreenCapability` gains `isFullscreen` and `exitFullscreen`, `MediaPictureInPictureCapability` gains `isPictureInPicture` and `exitPictureInPicture`, and the presentation helpers `isFullscreenElement` and `isPictureInPictureElement` are renamed to `isFullscreen` and `isPictureInPicture`. If you call `exitFullscreen` directly, it now requires a `media` argument, and custom media hosts should implement the new getters and exit methods.

Live streaming is the headline feature work: HLS stream-type detection and live duration derived from the seekable window ([#1387](https://github.com/videojs/v10/pull/1387)), `liveEdgeStart` and `targetLiveWindow` properties modeled on the media-ui-extensions live-edge proposal ([#1445](https://github.com/videojs/v10/pull/1445)), and `live-video` and `live-audio` presets that drop seek and playback-rate UI for live sources ([#1399](https://github.com/videojs/v10/pull/1399)). Along the way, `streamTypeFeature` moved out of the base video and audio presets; opt in explicitly if you need stream-type state.

Elsewhere, React's `MediaGesture` and `MediaHotkey` become `Gesture` and `Hotkey` with deprecated aliases for the old names ([#1374](https://github.com/videojs/v10/pull/1374)), mux elements observe cast attributes ([#1386](https://github.com/videojs/v10/pull/1386)), `@videojs/html` re-exports reactive primitives from `@videojs/element` ([#1472](https://github.com/videojs/v10/pull/1472)), and the docs gain a how-to guide for building custom components ([#1008](https://github.com/videojs/v10/pull/1008)).
