WebCodecs works in Chrome 94+, Edge 94+, Firefox 130+, Opera 80+, Samsung Internet 17+, and Safari 26.0+. Learn the API, codecs, and quirks.

Prince Dewani
May 1, 2026
WebCodecs is a W3C JavaScript API that gives web pages low-level access to the browser's audio and video encoders and decoders. It works in Chrome 94+, Edge 94+, Opera 80+, Firefox 130+ on desktop, Samsung Internet 17+, and Safari 26.0+, while Safari 16.4 through 18.7 supported only video and Internet Explorer never added it.
This guide covers what WebCodecs is, which browsers support it, its key features, common use cases, how to detect support, and known issues.
WebCodecs is a W3C JavaScript API that exposes the browser's built-in audio and video codecs to web pages through five main classes: VideoEncoder, VideoDecoder, AudioEncoder, AudioDecoder, and ImageDecoder. The Media Working Group at the W3C edits the spec, and the API hands raw frames and chunks to the page without dictating any codec list.
WebCodecs is fully supported in Chrome 94+, Edge 94+, Firefox 130+ on desktop, Opera 80+, Samsung Internet 17+, and Safari 26.0+ on macOS, iOS, and iPadOS. Safari 16.4 through 18.7 ships only the video interfaces, and Internet Explorer never added support.
Chrome supports the full WebCodecs API from Chrome 94 on Windows, macOS, Linux, and ChromeOS. Chrome for Android shipped full support from Chrome 147. Chrome 4 through 93 did not support WebCodecs at all. Hardware acceleration kicks in automatically when the system codec is GPU-backed, and the browser falls back to a software decoder otherwise.
Microsoft Edge supports the full WebCodecs API from Edge 94 on Windows, macOS, and Linux, since Edge tracks the Chromium engine. Pre-Chromium EdgeHTML versions 12 through 93 never added WebCodecs. Edge for Android also exposes the API, since the mobile build tracks Chromium for Android.
Firefox supports the full WebCodecs API from Firefox 130 on Windows, macOS, and Linux desktop. Firefox 2 through 129 did not support WebCodecs. Firefox for Android does not support the API in any version, so WebCodecs is desktop-only on Mozilla browsers. Some Linux configurations need the media.ffvpx.enabled flag in about:config for hardware codec paths.
Safari ships full WebCodecs support from Safari 26.0 on macOS, iOS, and iPadOS. Safari 16.4 through 18.7 added a partial implementation with only the video interfaces (VideoDecoder, VideoEncoder, EncodedVideoChunk, and VideoFrame) and no audio or image classes. Safari 3.1 through 16.3 did not support WebCodecs at all, so iPhone and iPad users on those builds need a fallback path.
Opera supports the full WebCodecs API from Opera 80 on Windows, macOS, and Linux, in line with the matching Chromium release. Opera 9 through 79 did not support WebCodecs. Opera Mini does not expose WebCodecs in any version, since the proxy mode strips most modern web platform APIs before pages reach the device.
Samsung Internet supports the full WebCodecs API from Samsung Internet 17.0 on Galaxy phones and tablets, since the browser tracks Chromium. Samsung Internet 4.0 through 16.0 did not support WebCodecs. The API is on by default, so Galaxy users do not need to flip a setting in the Samsung Internet app.
Chrome for Android supports the full WebCodecs API from Chrome 147. Earlier Chrome for Android builds and the legacy stock Android Browser based on WebView 2.x through 4.x did not support WebCodecs. Firefox for Android does not support the API, so a Chromium-based browser is required for any WebCodecs work on Android.
Internet Explorer never shipped WebCodecs in any version. The API depends on Chromium media plumbing that the Trident engine never had. Microsoft has retired Internet Explorer 11, so any IE-targeted apps that need codec access have to migrate to Chromium-based Edge or use a WebAssembly fallback like FFmpeg.wasm.
Note: WebCodecs breaks across Safari 16.4 to 18.7 and Firefox for Android. Test it on real browsers and OS with TestMu AI. Try TestMu AI free!
WebCodecs ships a small set of low-level primitives instead of a high-level player. The features below are the ones developers actually pull in when building media tools.
WebCodecs powers media work that used to require Flash, native apps, or huge WebAssembly bundles. Several production apps already lean on it.
You feature-detect WebCodecs by checking the global VideoDecoder constructor, then ask isConfigSupported() whether the codec you actually need is decodable in this build.
The API only exposes constructors when the page runs in a secure context (HTTPS or localhost). On Safari 16.4 through 18.7, AudioDecoder and ImageDecoder are undefined while VideoDecoder works, so guard each interface separately.
Paste this snippet into the DevTools console of any browser and you will see which interfaces are present and whether the requested codec is decodable.
// Paste this into the DevTools console to see which WebCodecs interfaces and codecs the browser supports.
if ("VideoDecoder" in window) {
console.log("VideoDecoder is available.");
const probes = [
{ codec: "avc1.42E01E", label: "H.264 baseline" },
{ codec: "vp09.00.10.08", label: "VP9 profile 0" },
{ codec: "av01.0.04M.08", label: "AV1 main profile" },
{ codec: "hvc1.1.6.L93.B0", label: "HEVC main profile" },
];
Promise.all(
probes.map(async (p) => {
const result = await VideoDecoder.isConfigSupported({ codec: p.codec });
return { ...p, supported: !!result.supported };
})
).then((rows) => console.table(rows));
} else {
console.log("VideoDecoder is not available in this browser.");
}
console.log("AudioDecoder is", "AudioDecoder" in window ? "available" : "missing");
console.log("ImageDecoder is", "ImageDecoder" in window ? "available" : "missing");If isConfigSupported returns supported: false, the browser shipped the constructor but the underlying codec is missing, often because of OS-level codec licensing. Fall back to a polyfill or a WebAssembly decoder for those visitors.
WebCodecs gives you raw codec access but skips the parts that make a player work end-to-end, so the painful edges land on container muxing, codec licensing, and the long Safari partial-support window.
In my experience, the muxing gap costs more time than the codec work itself. Building a WebCodecs export path that hits all browsers means shipping mp4-muxer for the MP4 case, the WebM Muxer library for VP9 or AV1 in WebM, and a MediaRecorder fallback on Safari 16.4 to 18.7 where AudioEncoder is undefined. Plan two days for the muxer plumbing, not the encode loop.
All WebCodecs version numbers and platform notes in this guide come from these primary sources:
Did you find this page helpful?
More Related Hubs
TestMu AI forEnterprise
Get access to solutions built on Enterprise
grade security, privacy, & compliance