Free & Open Source • v2.1.3 • What's new

Play Any HLS / DASH Stream
Instantly in Your Browser

Play .m3u8 and .mpd links, including live streams, with keyboard shortcuts, subtitles, watch history and more.

No signup requiredZero adsLightweight & fast

What's new

See what changed in the latest M3U8/HLS Player with Custom Controls releases.

v2.1.0

  • Mobile playback

    Touch gestures, a phone-friendly player, and Firefox for Android support.

  • Custom shortcuts

    Choose the keys that control playback in a clearer shortcut editor.

  • Improved settings

    Light and dark themes with a cleaner layout for desktop and mobile.

v2.0.0

  • Stream detection

    Find streams playing on a page and open them from the toolbar popup.

  • Per-site headers

    Save request headers for streams that otherwise return 403 errors.

  • Live buffering while paused

    Keep up to 3 minutes buffered and resume where you paused.

Rebuilt from the ground up in TypeScript. Updating asks for a new permission, which is only used to send the per-site headers you save.

Read the full release notes

How It Works

Get started in seconds with just three simple steps.

01

Find a Stream

Copy any .m3u8 or .mpd URL, or turn on stream detection and pick one the page is playing from the toolbar popup.

02

Open or Click It

Paste the URL into the address bar, or just click a stream link. It opens in the player instead of downloading.

03

Watch Instantly

The extension automatically detects and plays the stream with full player controls, PIP mode, and keyboard shortcuts.

Try it now — install the extension first, then click the link below:

https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8

Powerful Features

Everything you need for HLS and DASH playback in the browser.

HLS & DASH Playback

Plays .m3u8 (hls.js) and .mpd (dash.js) streams, VOD and live, with controls built on media-chrome.

New

Stream Detection

Opt-in: lists the streams a page plays in the toolbar popup and opens them with the headers that page used.

New

Per-Site Headers

Save Referer, Origin or cookie headers per stream host for streams that return 403 outside their own site.

New

Live Stream Buffering

Live streams keep buffering while paused (3 minutes by default) and resume right where you left off.

DASH DRM (Widevine)

Enter a license URL, request headers and robustness level when an encrypted stream needs it. Chromium only.

Watch History & Resume

Pick up where you stopped. Pin, rename or clear entries, or turn history off entirely.

Subtitle Styling

Adjust subtitle size, color, background, font and edge style to suit any stream.

Opens Links Automatically

Click or navigate to a .m3u8/.mpd link and it opens in the player in a new tab instead of downloading.

YouTube-Like Shortcuts

Familiar keyboard controls for play/pause, seeking, volume, speed and more.

Picture-in-Picture

Float the video while browsing other tabs. Press p to enter and P to exit.

Frame Navigation

Step through video frame by frame using the comma and period keys.

Playback Speed

Adjust playback speed from 0.1× to 10× in 0.1× or 0.5× steps.

Keyboard Shortcuts

Press ? in the player to see all shortcuts

Space / kPlay / Pause
←Seek -10s
→Seek +10s
↑Volume up
↓Volume down
fFullscreen
mMute
pPIP mode

Installation

Get started with the M3U8/HLS Player in minutes.

Quick Install from Stores

The easiest way to install is through your browser's extension store:

Manual Installation

For development or to get the latest unreleased features:

Build from source (Node.js 22+)
bash
git clone https://github.com/bishaldahal/M3U8-HLS-Player-with-Custom-Controls.git
cd M3U8-HLS-Player-with-Custom-Controls
npm ci
npm run fetch:vendor   # pinned, hash-verified player libraries
npm run build          # outputs dist/chrome and dist/firefox

# Or download prebuilt zips from releases
# https://github.com/bishaldahal/M3U8-HLS-Player-with-Custom-Controls/releases

chrome

  1. 1Navigate to chrome://extensions
  2. 2Enable Developer Mode (toggle in top-right)
  3. 3Click 'Load unpacked' and select dist/chrome

edge

  1. 1Navigate to edge://extensions
  2. 2Enable Developer Mode (toggle at bottom)
  3. 3Click 'Load unpacked' and select dist/chrome

firefox

  1. 1Navigate to about:debugging#/runtime/this-firefox
  2. 2Click 'Load Temporary Add-on'
  3. 3Select dist/firefox/manifest.json

Built For Everyone

Whether you're streaming, developing, or testing — we've got you covered.

IPTV Users

Watch your favorite IPTV channels with enhanced controls, keyboard shortcuts, and picture-in-picture mode.

Multi-quality supportLive DVRChannel switching

Developers

Test and debug HLS streams during development without complex setup or external tools.

Quick URL testingError inspectionManifest debugging

Content Creators

Preview and quality-check your encoded streams before publishing to your audience.

Frame-by-frame analysisQuality comparisonPlayback speed control

QA & Media Teams

Validate media assets and streaming infrastructure with precise control over playback.

Detailed error logsBitrate monitoringSegment inspection

Live Streamers

Monitor your live broadcasts with low-latency playback and professional controls.

Low latency modeLive syncMulti-source testing

Enterprise Media

Enterprise-grade HLS playback for internal video platforms and media workflows.

DRM supportCustom brandingAudit logging

Why This Extension?

The features that make us different from other players.

Privacy First

No tracking, no analytics, no data collection. Your viewing habits stay private.

Lightning Fast

Optimized for performance with minimal memory footprint and instant playback.

Auditable Builds

Written in TypeScript and unit-tested. Player libraries ship unmodified and hash-verified, so builds are reproducible.

No Account Required

Start using immediately. No signup, no login, no subscription needed.

Customizable

Set default volume, speed, quality, subtitle style, live buffering and history behavior.

Keyboard First

Full keyboard navigation with YouTube-like shortcuts for power users.

Works on All Chromium Browsers

Compatible with all major Chromium-based browsers and Firefox

Chrome browser logo
Chrome
Edge browser logo
Edge
Firefox browser logo
Firefox
Brave browser logo
Brave
Opera browser logo
Opera
Vivaldi browser logo
Vivaldi

Usage

Learn how to use the player effectively.

Loading Streams

Open any .m3u8 or .mpd URL in the address bar or click a stream link. The extension supports both VOD and live manifests.

Keyboard Shortcuts

Press ? while the player is focused to toggle the shortcuts panel.

Space / kPlay / Pause
←Seek -10s
→Seek +10s
↑Volume up
↓Volume down
fFullscreen
mMute
pPIP mode
<Speed -0.1
>Speed +0.1
-Speed -0.5
+Speed +0.5
jSeek -5s
lSeek +5s
PExit PIP
,Prev frame
.Next frame
0-9Seek %
HomeStart
EndEnd
?Shortcuts
EscClose

Error States

Blocked Stream (403)

The host only serves the stream to its own site. The error explains why and offers a Site headers button to add a Referer/Origin for that host, or turn on stream detection and open it from the popup.

DRM Key-System Error

Encrypted DASH streams prompt for a Widevine license URL, optional headers and robustness level (Chromium only). You can remember them per host.

Auto-Recovery

Only fatal playback errors show an overlay; the player recovers from transient errors and buffer stalls.

Frequently Asked Questions

Quick answers to common questions about the extension.

Yes, completely free and open source! There are no premium features, no subscriptions, and no hidden costs. You can even contribute to the codebase on GitHub.

No. There is no analytics or tracking. Settings, watch history and any site headers you save stay in your browser's local extension storage. The extension only contacts the streams you open and any DRM license server you configure.

M3U8/HLS (via hls.js) and MPD/DASH (via dash.js), both VOD and live, with adaptive bitrate switching.

Some hosts only serve a stream to requests that look like they came from their own page. Turn on 'Detect streams on pages' (off by default), start the video on the site, then pick it from 'On this page' in the toolbar popup. Or save Referer/Origin headers for that host from Settings or the 'Site headers' button on the player error.

Widevine DASH streams are supported on Chromium browsers. When a key-system error occurs, the player asks for a license URL, optional request headers and robustness level, and can remember them per host. Other DRM schemes and HLS DRM are not supported.

The extension was rebuilt in TypeScript and adds opt-in stream detection, per-site request headers, live buffering while paused, and clearer error messages. Updating asks for the new declarativeNetRequest permission, which is used to send site headers from the player tab only. See the Changelog page for full release notes.

Yes! The extension works great for IPTV streams. Just paste your M3U8 channel URL and enjoy watching with all the advanced controls and keyboard shortcuts.

Yes. Subtitles embedded in the stream are supported, and you can style them (size, color, background, font and edge style) from Settings.

You can open an issue on our GitHub repository. We welcome bug reports, feature requests, and pull requests from the community.

Yes! Press 'p' to enter Picture-in-Picture and watch your stream while browsing other tabs. Press 'Shift+P' to exit.

Still have questions?

Check out our GitHub repository for more documentation and community support.

Ask on GitHub

Spread the Word

Help others discover this extension by sharing it with your network.