Releases: avi12/youtube-downloader
v2.4.3
Highlights
- Settings now apply instantly across YouTube pages - changing the video or audio container in the popup updates open watch pages, grid views, and playlist panels on the fly, no reload needed (fixes #13)
- The format you pick in the popup is now properly honored by the watch page download button - previously it could fall back to MKV regardless of your choice
- Changing the default download type (video / audio) in the popup also updates any open download panel live
Full changelog: v2.4.2...v2.4.3
v2.4.2
Highlights
- FFmpeg hardening — response to the June 2026 disclosure of 21 FFmpeg vulnerabilities (CVE-2026-39210…39218 and friends). Every FFmpeg input now pins its container format explicitly instead of letting FFmpeg auto-probe, so downloaded bytes can never be routed into demuxers the extension never feeds intentionally (MPEG-TS, AVI, CAF — the file-parsing components affected by the disclosure). The network-facing vulnerabilities (RTSP/RTP/RTMP/DASH, including the headline AV1-RTP RCE) were never reachable: the extension only ever passes in-memory files to FFmpeg, never URLs, and everything runs inside the browser's WASM sandbox. No patched FFmpeg core exists upstream yet; this closes the realistic attack path in the meantime.
- Leaner dependencies — dropped the unused legacy
@ffmpeg/core-stpackage.
Full changelog: v2.4.1...v2.4.2
v2.4.1
Highlights
- Resilient downloads — transient failures now auto-retry the whole download pipeline with backoff instead of silently stopping, and videos YouTube reports as removed/private/region-blocked now show a clear "Unavailable" state instead of failing quietly.
- Firefox settings dropdowns fixed — the settings pickers (video/audio container, quality, language) now anchor to their button, scroll when the list is long, and flip above when the trigger sits low in the popup — matching Chrome. The audio "Custom language" picker now uses the same dropdown component as the rest of the UI (previously a plain
<select>). - Analytics — anonymous telemetry now records the extension version and the browser UI language, alongside the existing browser/OS. Still no video IDs, URLs, titles, or identity data.
Internal: clearer credential module names and a new CONTRIBUTING guide.
Full changelog: v2.4.0...v2.4.1
v2.4.0
Highlights
- More reliable downloads — PO-token generation now retries on transient failures, fixing the intermittent "no integrity token" 403 that aborted some downloads.
- Recent downloads are cached — finished files stay cached for 10 minutes (the timer resets while the popup is open) for instant re-download, and the cache evicts the oldest entries when the disk is tight without ever blocking the real save.
- Determinate processing — the progress ring climbs through a real percentage during muxing instead of sitting at an indeterminate 70%.
- Green completed state — grid and playlist download buttons turn green when done, matching the watch page.
- Unavailable videos — show a disabled error state instead of a dead button.
- Cleaner and quieter — zero service-worker errors when reloading a YouTube page, FFmpeg log spam no longer floods the extension errors panel, and a Trusted Types (jitless zod) fix stops YouTube's CSP from blocking the extension.
- Anonymous usage analytics — GA4 Measurement Protocol active-user and uninstall tracking, with no host permissions and no video data ever sent.
Install
- Chrome / Edge / Opera —
youtube-downloader-2.4.0-chrome.crx - Firefox —
youtube-downloader-2.4.0-firefox.xpi
Existing installs auto-update.
Full changelog: v2.3.2...v2.4.0
v2.3.2
What's changed
Bug fixes
- Downloads stopping mid-progress on Linux Chrome — Zod validation now guards player response, videoData, DownloadRequest and caption schemas so malformed data is rejected cleanly instead of corrupting the pipeline (6f7f5e58)
- Cancel button not aborting downloads — panel cancel was routed through a cross-world messenger that drops same-world events; now goes directly to the background (e107d483)
- Global quality option changing local panel quality during a download — video format tracker now freezes while a download is in progress (c56b3f01)
- Local panel options updating from global changes mid-download — panel options lock on download start and only resume tracking global changes after completion (ffeecf38)
Refactoring
- All cancel actions now route through a single
performCancelDownloadpath regardless of origin (popup, panel, playlist, grid)
Commit range
v2.3.0
Highlights
- Enhanced bitrate toggle - filter Premium-only video variants when off
- Floating popover dropdowns for settings
- Off-watch page downloads now route via iframe fallback instead of silently no-oping
- Fix
DataCloneErroron panel open caused bysabrConfigin DownloadRequest - Fix "Download again" disappearing after a successful download
Full changelog: v2.2.2...v2.3.0
Version 2.2.2
Cover art for every audio download
Previously the in-page Download button on a non-music YouTube video produced an audio file with no embedded thumbnail. Two interlocking bugs caused this:
- The audio pipeline only routed through the cover-art-embedding code path when
metadata.isMusic === true— non-music videos were silently skipped. - For users who had Format set to Auto (the default), the audio output container resolved to WebM. WebM physically cannot carry attached pictures, so even if the cover-art path had run, FFmpeg would have rejected it.
This release routes any audio download with a metadata.thumbnailUrl through the embed-metadata pipeline, and coerces the Auto-mode audio target away from WebM to .m4a so the thumbnail actually fits in the container.
Fixes
fix(audio): embed thumbnail as cover art for non-music audio downloadsfix(audio): default audio downloads to.m4aso cover art can be embeddedpopup(a11y):dir=\"auto\"on video title and channel name for RTL language support
Internals
lint(eslint): forbid thevoidoperator outside statement positionchore: drop unuseddispatchToOffscreen; suppress IDE warning on Chrome's Omaha namespace literal
Install
Auto-update rolls this out to existing 2.2.0 installs on the next poll. For a fresh install grab .crx (Chromium) or .xpi (Firefox) below — see the v2.2.0 notes for the one-time install steps.
Skipped 2.2.1 — that version slot was burned during pre-release verification.
Version 2.2.0
First public release since v1.0.5 (2022). Total rewrite of the extension.
Highlights
New architecture
- Full MV3 migration on Chrome and Firefox
- Built on WXT + Svelte 5 + TypeScript
- Self-hosted auto-update —
.crx/.xpiartifacts here roll out automatically to installed copies on every browser's poll cycle
Revamped popup
- THIS TAB / OTHER TABS / Recent sections with sticky headers
- Per-download progress card, ETA, byte readout
- Recent downloads list with one-click re-mux / re-transcode and Change Format dialog
- Click thumbnail or title to jump back to the source tab
In-page download UI
- Download button injected on every YouTube watch page with format and quality picker
- Per-playlist panel on the homepage and on playlist pages
- Live progress ring + cancel/restart
Download capabilities
- SABR adaptive-streaming bypass on Chrome (direct) and Firefox (via ANDROID_VR InnerTube client)
- Iframe-scrub fallback for IP-rate-limited videos
- Per-video format and quality selection
- Multi-track audio (dub languages) and embedded subtitles
- YouTube Music cover-art embedding for music tracks
- Playlist downloads as individual files or ZIP bundles
- In-browser mux and transcode via FFmpeg-WASM (no external tooling)
Linux compatibility
- Multipass VM workflow for reproducing Linux-only Chrome bugs
- Fix for issue #11 (
tabId < 0on Linux Chrome dropdown / panel)
Install
See README for one-click .crx (Chromium) or .xpi (Firefox) install. Auto-update kicks in from this release onward — future versions roll out without user action.
Version 2.1.0
What's new
Bug fixes
- Fixed crash on Linux Chrome -
sendMessageno longer throws whentabIdis-1(e.g. from extension pages or offscreen documents) - closes #11 - Panel dropdowns - audio dropdown hidden when only one language; caption dropdown hides the redundant "Auto" entry when it's the only option; audio Quality and Format stay in sync
- Playlist handler - ZIP completion now correctly tracks the
playlistIdtab - Mux - YT Music thumbnail embedded correctly when audio is transcoded
New features
- Homepage playlist grid - per-card download panel on the YouTube homepage feed; ad cards skipped; playlist lockups handled gracefully
- Playlist fetch - video list resolved via
initialData+ continuation API for full playlist support - Firefox dev reload - dev server reloads Firefox YouTube tabs alongside Chrome on rebuild
Developer
- Multipass Linux VM workflow (
pnpm install:hyperv-multipass/pnpm setup:linux-vm/pnpm dev:linux) for reproducing Chrome-on-Linux bugs on Windows - Bumped
@webext-core/messagingto v3
Version 2.0.0
What's new
Complete revamp - see the full changelog for details.
Highlights
- SABR adaptive streaming - downloads via YouTube's internal protobuf streaming protocol with CDN fallback and byte-range resume
- Background service worker - downloads survive tab close; auto-retry on network restore
- Multi-track audio and captions - original + all dubs, ASR and auto-translated captions embedded as subtitle streams
- Expanded format support - MOV, AVI, WAV, AIFF, MP3, M4A, FLAC, OGG, Opus alongside the existing containers
- Playlist batch downloads - per-video checkboxes, ZIP archive with custom filename, video quality selector, stop-all
- Popup download manager - active downloads per tab, recent downloads with 10-min retention and re-download button
- YouTube Music - canonical metadata (title, artist, album) and cover art embedded via FFmpeg
- Estimated file size in the download button, including captions
- WXT + Svelte 5 migration