dash.js
dash.js is the open-source JavaScript reference player for MPEG-DASH, maintained by the DASH Industry Forum. dash.js uses Media Source Extensions to play DASH streams in web browsers, choosing quality levels automatically as network speed changes. It supports DRM through Encrypted Media Extensions, captions and low-latency DASH.
Why it matters
dash.js gives teams a free, standards-faithful way to play DASH in browsers, including DRM-protected streams. Because it is the reference implementation, it is also the tool used to check whether a stream follows the standard, which cuts debugging time before launch.
How it works
- The player loads the MPD manifest and reads available tracks and quality levels.
- It requests segments over HTTP and appends them to the browser through Media Source Extensions.
- Its ABR rules choose the quality of each next segment based on throughput and buffer.
- For DRM content, it requests licenses through Encrypted Media Extensions.
dash.js vs Shaka Player: which should I use?
Both play DASH well. dash.js is the DASH Industry Forum's reference player and is ideal for standards testing and DASH-only projects. Shaka Player supports both DASH and HLS, plus offline storage, so it suits teams that need one engine for both formats. Neither includes a full branded interface out of the box.
Does dash.js play HLS?
No, dash.js is built for MPEG-DASH only. To play HLS in the browser, use hls.js, Shaka Player or Video.js, or rely on native HLS support in Safari. Services that publish both formats often choose a player that handles both to avoid maintaining two engines.
Where it's used
OTT services and broadcasters that publish DASH use dash.js in their web apps to play DRM-protected streams, and test with it as the reference player before launch.
By the numbers
- dash.js is described by its maintainers as a reference client for MPEG-DASH playback and is released under the BSD license. (dash.js on GitHub)


