Skip to main content
HLS Downloader is designed with privacy as a core principle. All processing happens locally in your browser, and no data is transmitted to external servers.

Privacy statement

From PRIVACY.md:
HLS Downloader respects your privacy. We do not collect usage data, host a server, or include analytics.

What this means

No data collection

The extension does not:
  • Track which websites you visit
  • Log which videos you download
  • Record your browsing history
  • Collect analytics or telemetry
  • Send usage statistics

No external servers

There are no backend services. The extension:
  • Does not connect to third-party APIs
  • Does not upload video content
  • Does not phone home for updates or tracking
  • Operates entirely within your browser

No analytics packages

The codebase contains:
  • No Google Analytics
  • No tracking pixels
  • No third-party monitoring tools
  • No crash reporting services
You can verify this by inspecting the source code at github.com/puemos/hls-downloader

How local processing works

Every step of the download process happens in your browser:

1. Stream detection

The extension monitors network requests using the browser’s webRequest API:
manifest.json
{
  "permissions": [
    "webRequest",
    "tabs"
  ]
}
When an HLS playlist (.m3u8) is detected:
  • The URL is captured locally
  • No external requests are made
  • The data stays in browser memory

2. Download and storage

Video and audio segments are:
  • Downloaded directly from the original source
  • Stored temporarily in IndexedDB (local browser database)
  • Never uploaded or transmitted elsewhere
The extension uses IndexedDB for temporary storage:
// Local storage only - no remote sync
const bucket = await IndexedDBFS.createBucket(
  bucketId,
  videoLength,
  audioLength
);
IndexedDB is a client-side storage API built into your browser. Data stored here:
  • Remains on your computer
  • Is not synced to cloud services
  • Is automatically cleaned up after merging

3. Video merging with ffmpeg.wasm

The merge process uses WebAssembly (ffmpeg.wasm):
  • FFmpeg runs entirely in your browser tab
  • No cloud encoding or processing
  • No file uploads required
ffmpeg.wasm is a WebAssembly port of the popular FFmpeg tool. It runs in a sandboxed environment with no network access.
From the README:
100% local merge with ffmpeg.wasm
A WebAssembly build of FFmpeg runs right inside your tab, muxing the chosen audio + video into a single MP4.
  • Nothing is uploaded, keeping your files private.

4. Final download

Once merging completes:
  • The browser creates a local Blob URL
  • Your browser’s download manager saves the file
  • Temporary data is cleaned from IndexedDB

Permissions explained

The extension requests several permissions. Here’s why each is needed:
PermissionPurposePrivacy impact
webRequestDetect HLS playlists in network trafficLocal monitoring only, no data sent
storageSave user preferencesStored locally in browser
unlimitedStorageHandle large video files in IndexedDBLocal storage only
downloadsTrigger browser download of merged videoUses browser’s built-in download
tabsIdentify which tab detected a streamLocal context only
http://*/*
https://*/*
Monitor requests on all sitesRequired to detect HLS on any page
offscreen (MV3)Create offscreen document for Blob URLsLocal document, no network access
While the extension requires broad permissions to function, no data leaves your device. All operations are local.

Source code transparency

HLS Downloader is fully open source under the MIT License:

Building from source

You can compile the extension yourself to ensure it matches the published version:
git clone https://github.com/puemos/hls-downloader.git
cd hls-downloader

# Install dependencies
corepack enable
corepack prepare [email protected] --activate
pnpm install --frozen-lockfile

# Build
pnpm run build

# Verify the output in dist/
See the README Development section for complete build instructions.

Data retention

The extension uses browser storage for:

Temporary data (automatically cleared)

  • Downloaded video/audio segments in IndexedDB
  • Blob URLs for merged files
  • Processing progress state
Retention: Cleared immediately after successful download

Persistent data (stored until you clear it)

  • User preferences (quality settings, UI state)
  • Extension configuration
Location: Browser’s local storage API
Control: Cleared when you:
  • Uninstall the extension
  • Clear browser data
  • Reset extension storage
Firefox:
  1. Open about:addons
  2. Find HLS Downloader
  3. Click “Remove” to uninstall (clears all data)
Chrome/Edge:
  1. Open chrome://extensions/ or edge://extensions/
  2. Find HLS Downloader
  3. Click “Remove” to uninstall (clears all data)
Alternatively, clear browser data:
  • Firefox: about:preferences#privacy → Clear Data
  • Chrome: chrome://settings/clearBrowserData

Third-party code

The extension uses these third-party libraries (all run locally):
  • ffmpeg.wasm - Video merging (no network access)
  • React - UI rendering (local only)
  • Redux - State management (local only)
Dependencies are locked with pnpm-lock.yaml to ensure reproducible builds.

Browser vendor policies

While HLS Downloader doesn’t collect data, browser vendors may:
  • Track extension installations (for store statistics)
  • Monitor crashes (through browser crash reporters)
  • Collect telemetry (if enabled in your browser settings)
These are browser-level behaviors outside the extension’s control.
To minimize browser telemetry, check your browser’s privacy settings. The extension itself adds no additional tracking.
Privacy and legality are separate concerns:
  • Privacy: The extension doesn’t collect or share your data
  • Legality: You’re responsible for ensuring you have rights to download content
From the disclaimer:
This extension is designed for downloading video content that you own or have authorization to access. It is prohibited to use this tool for downloading copyrighted content without permission. Users are solely responsible for their actions.

Questions or concerns?

If you have privacy questions:
  1. Review the source code directly
  2. Open an issue on GitHub
  3. Submit a pull request to improve privacy documentation

Build docs developers (and LLMs) love