[Announcement] External JavaScript runtime now required for full YouTube support · Issue #15012 · yt-dlp/yt-dlp · GitHub

This is a follow-up to #14404, which announced that yt-dlp would soon An external JavaScript runtime (such as Deno) is required to fully support downloading from YouTube.

With the release of yt-dlp version 2025.11.12External JavaScript runtime support has arrived.

All users who wish to use yt-dlp with YouTube are strongly encouraged to install one of the supported JS runtimes.

The following JavaScript runtimes are currently supported (In order of recommendation, from strongest to weakest,

  1. Deno

  2. node

    • https://nodejs.org/
    • Minimum node versions supported by yt-dlp: 20.0.0
      • If using Node, the latest version (25+) is strongly recommended for security reasons
  3. quickjs

    • https://bellard.org/quickjs/
    • Minimum QuickJS versions supported by yt-dlp: 2023-12-9
      • If using QuickJS, version 2025-4-26 or later is strongly recommended for performance reasons
  4. quickjs-ng

  5. become

    • https://bun.com/
    • Minimum bun versions supported by yt-dlp: 1.0.31
      • If using bun, the latest version is strongly recommended

just pay attention deno Is enabled by default; All others are disabled by default for security reasons. See the EJS wiki page for more information.


except for The JavaScript runtime, yt-dlp, also requires the yt-dlp-ejs component to operate the JS runtime.

Comment: this component Already included in all official yt-dlp executables,
Similarly, if you have installed and upgraded the yt-dlp Python package default Excessive (yt-dlp[default], So you already have yt-dlp-ejs component,

If you installed yt-dlp in another way, please see section 2 of the EJS wiki page for more details.


Support for YouTube without JavaScript runtime is now considered “deprecated”. This still works to some extent; However, format availability will be limited, and in some cases severely limited (e.g. for logged-in users). Format availability without a JS runtime is expected to deteriorate over time, and would not be considered a “bug” but an inevitability for which there is no workaround. It is also expected that eventually, support for YouTube will not be possible at all without the JS runtime.


If you have any questions, please see the EJS wiki page, the previous announcement’s FAQ, and the readme before commenting or opening a new issue:


Notes for package maintainers

If you are maintaining a package downstream of yt-dlp, we provide the following guidance:

  • yt-dlp The repository, source tarball, PyPI source distribution, and built distribution (wheel) are still licensed under The Unlicensed (public domain); However, When yt-dlp-ejs The package has been created, it bundles code licensed under ISC and MIT. this is the primary reason yt-dlp-ejs Was split into a separate repository and PyPI package

  • If yt-dlp Packaged as a Python package in your repository, yt-dlp-ejs ideally will be packed separately

  • yt-dlp-ejs technically a optional Python dependency of yt-dlp, but YouTube support is declined without it

  • each edition of yt-dlp will be pinned to a specific version of yt-dlp-ejs and yt-dlp will reject any other yt-dlp-ejs version. Refer to yt-dlp pyproject.toml For pinned version

  • If your repository is a package yt-dlp Zipimport binary as instead of Python packageyou can use make yt-dlp-extra To make zip executable yt-dlp-ejs Involved. (will find makefile yt-dlp-ejs wheel in build subdirectories, or extracted build distributions yt_dlp_ejs subdirectory)

  • deno, nodejs, quickjs and/or bun should be optional dependency of yt-dlpBut still, without YouTube support it has been rejected One of them

  • Whereas yt-dlp-ejs And external JavaScript runtimes are currently only used with YouTube, their use of yt-dlp may be expanded in the future (and necessarily so).

If this guidance is insufficient, or if you are a developer integrating yt-dlp into your software and you have further questions, please open a new GitHub issue.



Leave a Comment