Skip to content

Browser Support

Requirements

Vide requires ES2022 and the <video> element. All modern browsers are supported.

Compatibility Matrix

FeatureChromeFirefoxSafariEdgeiOS SafariAndroid Chrome
Core player94+93+15.4+94+15.4+94+
HLS (via hls.js)94+93+native94+native94+
DASH (via dashjs)94+93+94+94+
DRM: Widevineyesyesyesyes
DRM: FairPlayyesyes
DRM: PlayReadyyes
DRM: ClearKeyyesyesyesyesyesyes
UI components94+93+15.4+94+15.4+94+
Fullscreen APIyesyesyesyeslimitedyes
Picture-in-Pictureyesyesyesyesyes

Version numbers reflect ES2022 support baseline. Older browsers may work but are not tested.

Safari & HLS

Safari plays HLS natively without hls.js. The HLS plugin detects this automatically via canPlayType("application/vnd.apple.mpegurl"). If hls.js is not installed, Safari will still play HLS — but other browsers won't.

Safari & DASH

Safari does not support MSE (Media Source Extensions) on iOS, so DASH playback is unavailable. Use HLS for Apple devices.

iOS Safari

Inline Playback

iOS Safari plays video fullscreen by default. Add playsinline to your <video> element for inline playback:

html
<video playsinline></video>

Vide does not add this attribute automatically — it follows the "delegate, don't wrap" principle.

Autoplay

iOS Safari blocks autoplay unless the video is muted:

ts
player.play().catch(() => {
  player.muted = true;
  player.play();
});

The VAST and VMAP plugins handle this automatically.

Fullscreen

iOS Safari does not support the standard Fullscreen API on arbitrary elements. The UI plugin falls back to:

  1. Element.requestFullscreen() (standard)
  2. Element.webkitRequestFullscreen() (older WebKit)
  3. HTMLVideoElement.webkitEnterFullscreen() (iOS Safari — video only)

Source Changes

When changing <source> elements dynamically, call video.load() to apply. The Vide core handles this via the src setter.

DRM Key Systems

Each DRM key system is bound to specific browsers and platforms:

Key SystemBrowserNotes
WidevineChrome, Firefox, Edge, AndroidMost widely supported. Requires license server.
FairPlaySafari, iOS SafariRequires both license server and certificate URL.
PlayReadyEdge (Chromium)Microsoft ecosystem. Requires license server.
ClearKeyAll modern browsersW3C standard. Keys provided directly, no license server.

Use detectKeySystem() to check availability at runtime:

ts
import { detectKeySystem } from "@videts/vide/drm";

const keySystem = await detectKeySystem([
  { keySystem: "com.widevine.alpha" },
  { keySystem: "com.apple.fps.1_0" },
]);

See DRM plugin docs for full configuration.