Repository navigation
yt-dlp-master, yt-dlp-nightly: Add notes and update suggest - #3112
404NetworkError wants to merge 2 commits into
Conversation
Summary by CodeRabbit
WalkthroughThe yt-dlp master and nightly manifests now describe the JavaScript runtime requirement, Deno as the default, and runtime override options. Both manifests also suggest six JavaScript runtime packages. ChangesJavaScript runtime guidance
Priority: ⬇️ Low Merge Risk: 🔵 Low · up to
|
There was a problem hiding this comment.
Actionable comments posted: 4
ℹ️ Review info
⚙️ Run configuration
- Source mode: Auto
- Repository: Unavailable
- Branch: Unavailable
- File: No configuration file from this repository applied
- Commit: Unavailable
- Layers: Organization UI
- Review profile: CHILL
- Plan: Advanced
- Run ID:
e0eb9bc4-1cb5-419d-b214-1242ddb78071
📒 Files selected for processing: 2
bucket/yt-dlp-master.jsonbucket/yt-dlp-nightly.json
Included review availability: This review used your included allowance. Your plan provides up to 2 included reviews per hour; 1 remain after this review.
| "homepage": "https://github.com/yt-dlp/yt-dlp-master-builds", | ||
| "notes": [ | ||
| "Requires a JavaScript runtime for full functionality (e.g., deno, node, bun).", | ||
| "By default yt-dlp prefers 'deno' — use `--js-runtimes <runtime>` as an argument, or edit `yt-dlp.conf` to override." |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
🔎 Supported by static analysis
🏁 Script executed:
git diff --no-ext-diff 13bfedb05494a7a77196bfd197931316990048cc 395467b9b9bcfb943b263698beda351712a52954 -- bucket/yt-dlp-master.json
sed -n '1,30p' bucket/yt-dlp-master.jsonRepository: ScoopInstaller/Versions
Length of output: 2349
🌐 Web query:
yt-dlp options.py js-runtimes no-js-runtimes default deno runtime priority
💡 Result:
<source_evidence>
<source kind="search">
<title>yt-dlp/yt_dlp/options.py at master · yt-dlp/yt-dlp · GitHub</title>
<location>https://github.com/yt-dlp/yt-dlp/blob/master/yt_dlp/options.py</location>
<excerpt>citeturn0search1 [wordlim: 200] Crawled: 3 weeks ago; In order to use a lower priority runtime when "deno" is available, ' '--no-js-runtimes needs to be passed before enabling other runtimes')) general.add_option( '--no-js-runtimes', dest='js_runtimes', action='store_const', const=[], help='Clear JavaScript runtimes to enable, including defaults and those provided by previous --js-runtimes') general.add_option( '--remote-components', metavar='COMPONENT', dest='remote_components', action='callback', callback=_list_from_options_callback, type='str', callback_kwargs={'delim': None}, default=[], help=( 'Remote components to allow yt-dlp to fetch when required. ... ' 'Supported values: ejs:npm (external JavaScript components from npm), ' 'ejs:github (external JavaScript components from yt-dlp-ejs GitHub).
</excerpt>
</source>
<source kind="search">
<title>js runtimes always defaults to deno and ignores --js-runtimes flag in nightly · Issue #14867 · yt-dlp/yt-dlp · GitHub</title>
<location>GitHub issue 14867 in yt-dlp/yt-dlp (link omitted to avoid creating a cross-reference)</location>
<excerpt>citeturn0search0 [wordlim: 200] Published: last year; Crawled: last week; --no-js-runtimes Clear JavaScript runtimes to enable, ... Only after I used `yt-dlp -v --js-runtimes quickjs` "quickjs" showed up. ... to join this conversation on GitHub.
# js runtimes always defaults to deno and ignores --js-runtimes flag in nightly #14867
New issue
Copy link
New issue
Copy link
Closed
Closed
js runtimes always defaults to deno and ignores --js-runtimes flag in nightly#14867
Copy link
Labels
ejs/jscRelated to the JS Challenge framework and/or EJS libraryRelated to the JS Challenge framework and/or EJS libraryquestionQuestionQuestion
## Description
santarl
opened on Nov 1, 2025
Issue body actions
### Checklist
* [Input] I'm reporting a bug unrelated to a specific site
* [Input] I've verified that I have updated yt-dlp to nightly or master (update instructions)
* [Input] I've searched known issues, the FAQ, and the bugtracker for similar issues including closed ones. DO NOT post duplicates
* [Input] I've read the policy against AI/LLM contributions and understand I may be blocked from the repository if it is violated
### Provide a description that is worded well enough to be understood
If deno is installed, the --js-runtimes flag is comepletely ignored and always defaults to deno.
only uninstalling deno/ removing it from path lets me choose between other runtimes.
yt-dlp_log.txt
### Provide verbose output that clearly demonstrates the problem
* [Input] Run your yt-dlp command with -vU flag added (`yt-dlp -vU <your command line>`)
* [Input] If using API, add `'verbose': True` to `YoutubeDL` params instead
* [Input] Copy the WHOLE output (starting with `[debug] Command-line config`) and insert it below
### Complete Verbose Output
> yt-dlp -vU "https://www.youtube.com/watch?v=-DUhb_RkEd4" -F --js-runtimes=bun
[debug] Command-line config: ['-vU', 'https://www.youtube.com/watch?v=-DUhb_RkEd4', '-F', '--js-runtimes=bun']
[debug] User config "C:\Users\lain/.config\yt-dlp\config.txt": ['--mark-watched', '--write-auto-subs', '--write-subs']
## Activity
1. santarl
added
bugBug that is not site-specificBug that is not site-specific
triageUntriaged issueUntriaged issue
on Nov 1, 2025
2. santarl
changed the title ~~[-]preferred js runtime flag --js-runtimes is always ignored and defaults to deno even if something else is specified[/-]~~ [+][Bug] js runtime always defaults to deno and ignores --js-runtime flag in nightly[/+] on Nov 1, 2025
3. santarl
changed the title ~~[-][Bug] js runtime always defaults to deno and ignores --js-runtime flag in nightly[/-]~~ [+][Bug] js runtimes always defaults to deno and ignores --js-runtimes flag in nightly[/+] on Nov 1, 2025
4. ### Grub4K commented on Nov 1, 2025
Grub4K
on Nov 1, 2025
Member
More actions
you want `--no-js-runtimes --js-runtimes bun`
👍React with 👍3 Reacted by snta, Adifagos and Atsushi2965
5. Grub4K
added
questionQuestionQuestion
and removed
bugBug that is not site-specificBug that is not site-specific
triageUntriaged issueUntriaged issue
on Nov 1, 2025
6. ### bashonly commented on Nov 1, 2025
bashonly
on Nov 1, 2025
Member
More actions
To expand on the above solution: Deno always has highest priority, so if it is left enabled, it will be chosen. You need to pass `--no-js-runtimes` first in order to clear the enable list.
`--js-runtimes RUNTIME[:PATH] Additional JavaScript runtime to enable,
with an optional path to the runtime
location. This option can be used multiple
times to enable multiple runtimes. Supported
runtimes: deno, node, bun, quickjs. By
default, o…[truncated]</excerpt>
</source>
<source kind="search">
<title>GitHub - yt-dlp/yt-dlp at nocodeopensource.io · GitHub</title>
<location>https://github.com/yt-dlp/yt-dlp?ref=nocodeopensource.io</location>
<excerpt>citeturn0search2 [wordlim: 200] Crawled: last week; A JavaScript runtime/engine like deno (recommended), node.js, bun, or QuickJS is also required to run yt-dlp-ejs. ... --no-js-runtimes Clear JavaScript runtimes to enable,
</excerpt>
</source>
<source kind="search">
<title>YouTube downloads stuck in infinite 403 loop due to SABR streaming when no JS runtime is available · Issue #15675 · yt-dlp/yt-dlp · GitHub</title>
<location>GitHub issue 15675 in yt-dlp/yt-dlp (link omitted to avoid creating a cross-reference)</location>
<excerpt>citeturn0search3 [wordlim: 200] Published: 9 months ago; Crawled: 6 days ago; [ERR] WARNING: [youtube] No supported JavaScript runtime could be found.Only deno is enabled by default; to use another runtime add --js-runtimes RUNTIME[:PATH] to your command/config. ... See https://github.com/yt-dlp/yt-dlp/wiki/EJS for details on installing one
</excerpt>
</source>
<source kind="search">
<title>[YouTube] Intermittent "HTTP Error 403: Forbidden" when downloading videos · Issue #17395 · yt-dlp/yt-dlp · GitHub</title>
<location>GitHub issue 17395 in yt-dlp/yt-dlp (link omitted to avoid creating a cross-reference)</location>
<excerpt>citeturn0search4 [wordlim: 200] Published: 2 months ago; Crawled: last week; [debug] System config "/etc/yt-dlp.conf": ['--no-js-runtimes', '--js-runtimes', 'node', '--live-from-start', '--no-playlist', '--concurrent-fragments', '4', '--output', '%(channel)s - %(upload_date>%Y-%m-%d)s - %(title)s.%(ext)s', '--output', 'subtitle:Subtitles/%(id)s.%(ext)s', '--output', 'thumbnail:Thumbnails/%(id)s.%(ext)s', '--windows-filenames', '--force-overwrites', '--write-thumbnail', '--write-subs', '--write-auto-subs', '--sub-format', 'vtt', '--sub-langs', '.*-orig', '--embed-subs', '--embed-thumbnail', '--embed-metadata', '--embed-chapters', '--extractor-args', 'youtube:player-client=mweb', '-t', 'sleep', '--force-ipv4', '--verbose']
</excerpt>
</source>
<omitted_sources count="33">Additional source records were omitted from this bounded result.</omitted_sources>
</source_evidence>
Citations:
- 1: https://github.com/yt-dlp/yt-dlp/blob/master/yt_dlp/options.py?utm_source=openai
Document the flag sequence for selecting a non-default runtime.
--js-runtimes <runtime> adds a runtime. It does not disable the default deno, which has the highest priority. If Deno is installed, --js-runtimes node can still select Deno. To select another runtime, clear the list first with --no-js-runtimes.
Suggested wording
--- "a/bucket/yt-dlp-master.json"
+++ "b/bucket/yt-dlp-master.json"
@@ -4,7 +4,7 @@
"homepage": "https://github.com/yt-dlp/yt-dlp-master-builds",
"notes": [
"Requires a JavaScript runtime for full functionality (e.g., deno, node, bun).",
- "By default yt-dlp prefers 'deno' — use `--js-runtimes <runtime>` as an argument, or edit `yt-dlp.conf` to override."
+ "By default yt-dlp prefers 'deno' — use `--no-js-runtimes --js-runtimes <runtime>` to select another runtime, or set the same options in `yt-dlp.conf`."
],
"license": "Freeware",
"suggest": {📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| "By default yt-dlp prefers 'deno' — use `--js-runtimes <runtime>` as an argument, or edit `yt-dlp.conf` to override." | |
| "By default yt-dlp prefers 'deno' — use `--no-js-runtimes --js-runtimes <runtime>` to select another runtime, or set the same options in `yt-dlp.conf`." |
| "nodejs", | ||
| "nodejs-lts", | ||
| "versions/nodejs22", | ||
| "bun", |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
🔎 Supported by static analysis
🏁 Script executed:
git diff --no-ext-diff 13bfedb05494a7a77196bfd197931316990048cc 395467b9b9bcfb943b263698beda351712a52954 -- bucket/yt-dlp-master.json
sed -n '10,22p' bucket/yt-dlp-master.jsonRepository: ScoopInstaller/Versions
Length of output: 1426
🌐 Web query:
ScoopInstaller Main bun.json 1.4.3 yt-dlp Bun 1.3.14 unsupported versions/bun1.3
💡 Result:
<source_evidence>
<source kind="open_page">
<title></title>
<location>https://raw.githubusercontent.com/ScoopInstaller/Main/master/bucket/bun.json</location>
<excerpt>citeturn1view0 [wordlim: 200] Crawled: today; Content type: text/plain; Source: open({"ref_id":"https://raw.githubusercontent.com/ScoopInstaller/Main/master/bucket/bun.json","lineno":null}); Total lines: 95
L0: {
L1: "version": "1.4.4",
L2: "description": "Incredibly fast JavaScript runtime, bundler, transpiler and package manager - all in one.",
L3: "homepage": "https://bun.sh/",
L4: "license": "MIT",
L5: "notes": "For the last release built on the original Zig codebase, use `versions/bun1.3`.",
L6: "suggest": {
L7: "vcredist": "extras/vcredist2022"
L8: },
L9: "architecture": {
L10: "64bit": {
L11: "url": [
L12: "https://github.com/oven-sh/bun/releases/download/bun-v1.4.4/bun-windows-x64.zip",
L13: "https://github.com/oven-sh/bun/releases/download/bun-v1.4.4/bun-windows-x64-baseline.zip"
L14: ],
L15: "hash": [
L16: "cd2c0fccc78f3ede1f50ca827a15f063eda13d4d150a3d0674f4f6e323d864a5",
L17: "0f20ce6674d4f2dbcc8c5d59fdf99f7ba45f8c3b367e0f5781cbfa30a1c78d99"
L18: ]
L19: },
L20: "arm64": {
L21: "url": "https://github.com/oven-sh/bun/releases/download/bun-v1.4.4/bun-windows-aarch64.zip",
L22: "hash": "2d57a0eec0cb44d95c918c3f9734f60455a1306ae5085d76fc68f44e3ee30d09"
L23: }
L24: },
L25: "pre_install": [
L26: "# Migrate legacy Bun data if it exists and the new persist directory doesn't exist",
L27: "$legacy_bun = Join-Path -Path $env:USERPROFILE -ChildPath '.bun'",
L28: "if ((Test-Path $legacy_bun) -and -not (Test-Path $persist_dir)) {",
L29: " Write-Host \"Migrating legacy Bun data from '$legacy_bun' to '$persist_dir'.\" -ForegroundColor Yellow",
L30: " Move-Item $legacy_bun $persist_dir -Force",
L31: "} elseif ((Test-Path $legacy_bun) -and (Test-Path $persist_dir)) {",
L32: " Write-Host \"Found both '$legacy_bun' and '$persist_dir'. Skipping auto-migration; please migrate manually if needed.\" -ForegroundColor Yellow",
L33: "}",
L34: "",
L35: "# Extract the appropriate binary based on architecture and CPU features",
L36: "if ($architecture -eq 'arm64') {",
L37: " $target = 'bun-windows-aarch64'",
L38: "} else {",
L39: " $avx2 = Start-Job -ScriptBlock {",
L40: " Add-Type -MemberDefinition '[DllImport(\"kernel32.dll\")] public static extern bool IsProcessorFeaturePresent(int ProcessorFeature);' -Name Kernel32 -Namespace Win32",
L41: " return [Win32.Kernel32]::IsProcessorFeaturePresent(40)",
L42: " } | Receive-Job -Wait -AutoRemoveJob",
L43: " $target = 'bun-windows-x64'",
L44: " if (-not $avx2) {",
L45: " $target += '-baseline'",
L46: " }",
L47: "}",
L48: "Move-Item \"$dir\\$target\\bun.exe\" \"$dir\\bun.exe\"",
L49: "Remove-Item \"$dir\\bun-windows-*\" -Recurse"
L50: ],
L51: "installer": {
L52: "script": "Add-Path -Path \"$persist_dir\\bin\" -Global:$global -Force"
L53: },
L54: "env_set": {
L55: "BUN_INSTALL": …[truncated]</excerpt>
</source>
<source kind="open_page">
<title></title>
<location>https://raw.githubusercontent.com/ScoopInstaller/Main/master/bucket/yt-dlp.json</location>
<excerpt>citeturn1view1 [wordlim: 200] Crawled: today; Content type: text/plain; Source: open({"ref_id":"https://raw.githubusercontent.com/ScoopInstaller/Main/master/bucket/yt-dlp.json","lineno":null}); Total lines: 61
L0: {
L1: "version": "2026.10.21",
L2: "description": "A youtube-dl fork with additional features and fixes.",
L3: "homepage": "https://discord.gg/H5MNcFW63r",
L4: "notes": [
L5: "Requires a JavaScript runtime for full functionality (e.g., deno, node, bun).",
L6: "By default yt-dlp prefers 'deno' — use `--js-runtimes <runtime>` as an argument, or edit `yt-dlp.conf` to override."
L7: ],
L8: "license": "Unlicense",
L9: "suggest": {
L10: "js-runtime": [
L11: "deno",
L12: "nodejs",
L13: "nodejs-lts",
L14: "versions/nodejs22",
L15: "bun",
L16: "quickjs"
L17: ],
L18: "ffmpeg": "ffmpeg"
L19: },
L20: "architecture": {
L21: "64bit": {
L22: "url": "https://github.com/yt-dlp/yt-dlp/releases/download/2026.10.21/yt-dlp.exe",
L23: "hash": "33121d192d706e62f684a06f80918e3f3a8ba52ac3a65213b6951c39c7d9f555"
L24: },
L25: "32bit": {
L26: "url": "https://github.com/yt-dlp/yt-dlp/releases/download/2026.10.21/yt-dlp_x86.exe#/yt-dlp.exe",
L27: "hash": "7ce38c77db13db50c64e656b1056a0448e6c38ec0f0ccf28e30dd5271c008850"
L28: },
L29: "arm64": {
L30: "url": "https://github.com/yt-dlp/yt-dlp/releases/download/2026.10.21/yt-dlp_arm64.exe#/yt-dlp.exe",
L31: "hash": "1380a9f105302764e6a5d383c2f07238ae242f0f4fbf3414aea00e56619a79b3"
L32: }
L33: },
L34: "bin": "yt-dlp.exe",
L35: "pre_install": "if (-not (Test-Path \"$persist_dir\\yt-dlp.conf\")) { New-Item \"$dir\\yt-dlp.conf\" -ItemType file | Out-Null }",
L36: "persist": [
L37: "yt-dlp.conf",
L38: "ytdlp_plugins",
L39: "yt-dlp-plugins"
L40: ],
L41: "checkver": {
L42: "github": "https://github.com/yt-dlp/yt-dlp"
L43: },
L44: "autoupdate": {
L45: "architecture": {
L46: "64bit": {
L47: "url": "https://github.com/yt-dlp/yt-dlp/releases/download/$version/yt-dlp.exe"
L48: },
L49: "32bit": {
L50: "url": "https://github.com/yt-dlp/yt-dlp/releases/download/$version/yt-dlp_x86.exe#/yt-dlp.exe"
L51: },
L52: "arm64": {
L53: "url": "https://github.com/yt-dlp/yt-dlp/releases/download/$version/yt-dlp_arm64.exe#/yt-dlp.exe"
L54: }
L55: },
L56: "hash": {
L57: "url": "$baseurl/SHA2-256SUMS"
L58: }
L59: }
L60: }
</excerpt>
</source>
<source kind="search">
<title>[Announcement] Bun support is now limited and deprecated · Issue #16766 · yt-dlp/yt-dlp · GitHub</title>
<location>GitHub issue 16766 in yt-dlp/yt-dlp (link omitted to avoid creating a cross-reference)</location>
<excerpt>citeturn0search0 [wordlim: 200] Published: 5 months ago; Crawled: last month; As of the next yt-dlp and/or ejs release, only Bun versions `1.2.11` through `1.3.14` will be supported.
# [Announcement] Bun support is now limited and deprecated #16766
New issue
Copy link
New issue
Copy link
Closed
#16786
Closed
[Announcement] Bun support is now limited and deprecated#16766
#16786
Copy link
Labels
discussion/announcementejs/jscRelated to the JS Challenge framework and/or EJS libraryRelated to the JS Challenge framework and/or EJS library
## Description
bashonly
opened on May 20, 2026
Issue body actions
Due to foreseeable compatibility and security issues, yt-dlp's support for Bun as an `ejs`-compatible JavaScript runtime is being both limited and deprecated.
As of the next yt-dlp and/or ejs release, only Bun versions `1.2.11` through `1.3.14` will be supported. The rationale for this change is twofold:
1. The minimum required version is being raised from `1.0.31` to `1.2.11` because building the `ejs` package with a version earlier than `1.2.0` results in the ejs lockfile being ignored, which is a significant security concern for users when considering all of the recent npm supply chain attacks. Additionally, the support floor is being bumped to `1.2.11` instead of `1.2.0` because the `ejs` test suite cannot be run with versions of Bun earlier than `1.2.11`.
2. Bun was recently rewritten in Rust using Claude, and its development seems to have taken a turn towards being fully vibe-coded. This is alarming and disappointing for a number of reasons, and frankly it seems like a future headache that we'd prefer to avoid. We are adding a support ceiling of version `1.3.14`, as that is the last release built from the original zig codebase.
Bun support will also be deprecated. This means that while yt-dlp will continue to support this narrower range of Bun versions for as long as they're able to meet the needs of yt-dlp and ejs, we reserve the right to completely drop support for Bun should it at any point become too burdensome to maintain.
* * *
See the EJS wiki article for more information about supported JavaScript runtimes.
Pinned by bashonly
Pinned comment options
bashonlyon May 24, 2026
Support for `bun>1.3.14` has now been dropped. yt-dlp will allow the user to bring a newer version of bun, but doing so will trigger a warning that informs the user their version is unsupported and directs them not to open a bug report. Any such bug reports will be ignored and closed. If you believe you've encountered an actual yt-dlp/ejs bug that should be brought to our attention, then reproduce the issue using a supported JS runtime/version.
This announcement thread was created solely to communicate with users of yt-dlp's bun integration: to communicate the upcoming changes to them, and so they could communicate feedback to us. (Note that this issue was created inbetween the similar node …</excerpt>
</source>
<source kind="search">
<title>GitHub - ScoopInstaller/Main: 📦 The default bucket for Scoop. · GitHub</title>
<location>https://github.com/ScoopInstaller/Main</location>
<excerpt>citeturn0search1 [wordlim: 200] Crawled: today; # Scoop MainCore manifests for Scoop, the Windows command-line installer.
# Scoop Main
Core manifests for Scoop, the Windows command-line installer. For manifests that fit the Main criteria.
## How do I install these manifests?
Just do `scoop install <manifest>`. This is the default bucket for Scoop and is added by default.
## How do I contribute new manifests?
To make a new manifest contribution, please read the Contributing Guide.</excerpt>
</source>
<source kind="search">
<title>yt-dlp/yt_dlp/extractor/youtube/jsc/_builtin/bun.py at master · yt-dlp/yt-dlp · GitHub</title>
<location>https://github.com/yt-dlp/yt-dlp/blob/master/yt_dlp/extractor/youtube/jsc/_builtin/bun.py</location>
<excerpt>citeturn0search2 [wordlim: 200] Crawled: 2 months ago; 4. /youtube ... _BUN_MAX_SUPPORTED_VERSION = (1, 3, 14)_BUN_DEPRECATION_URL = 'GitHub issue 16766 in yt-dlp/yt-dlp (link omitted to avoid creating a cross-reference)'
from yt_dlp.extractor.youtube.pot.provider import provider_bug_report_message
from yt_dlp.utils import Popen
from yt_dlp.utils.networking import HTTPHeaderDict, clean_proxies
# KNOWN ISSUES:
# - If node_modules is present and includes a requested lib, the version we request is ignored
# and whatever installed in node_modules is used.
# - No way to ignore existing node_modules, lock files, etc.
# - No sandboxing options available
# - Cannot detect if npm packages are cached without potentially downloading them.
# `--no-install` appears to disable the cache.
# - npm auto-install may fail with an integrity error when using HTTP proxies
# - npm auto-install HTTP proxy support may be limited on older Bun versions
# - Cannot disable the transpiler / specify lang for stdin
@register_provider
class BunJCP(EJSBaseJCP, BuiltinIEContentProvider):
PROVIDER_NAME = 'bun'
JS_RUNTIME_NAME = 'bun'
BUN_NPM_LIB_FILENAME = 'yt.solver.bun.lib.js'
SUPPORTED_PROXY_SCHEMES = ['http', 'https']
_BUN_MAX_SUPPORTED_VERSION = (1, 3, 14)
_BUN_DEPRECATION_URL = 'GitHub issue 16766 in yt-dlp/yt-dlp (link omitted to avoid creating a cross-reference)'
def _iter_script_sources(self):
yield from super()._iter_script_sources()
yield ScriptSource.BUILTIN, self._bun_npm_source
def _bun_npm_source(self, script_type: ScriptType, /):
if script_type != ScriptType.LIB:
return None
if 'ejs:npm' not in self.ie.get_param('remote_components', []):
return self._skip_component('ejs:npm')
# Check to see if the environment proxies are compatible with Bun npm source
if unsupported_scheme := self._check_env_proxies(self._get_env_options()):
self.logger.warning(
f'Bun NPM package downloads only support HTTP/HTTPS proxies; skipping remote NPM package downloads. '
f'Provide another distribution of the challenge solver script or use '
f'another JS runtime that supports "{unsupported_scheme}" proxies. '
f'For more information and alternatives, refer to {_EJS_WIKI_URL}')
return None
# Bun-specific lib scripts that uses Bun autoimport
# https://bun.com/docs/runtime/autoimport
error_hook = lambda e: self.logger.warning(
val = request_proxies.get(key)
if val is not None:
options[env] = val
if self.ie.get_param('nocheckcertificate'):
options['NODE_TLS_REJECT_UNAUTHORIZED'] = '0'
# Disable Bun transpiler cache
options['BUN_RUNTIME_TRANSPILER_CACHE_PATH'] = '0'
# Prevent segfault: GitHub issue 22901 in oven-sh/bun (link omitted to avoid creating a cross-reference)
options.pop('JSC_useJIT', None)
if self.ejs_setting('jitless', ['false']) != ['false']:
options['BUN_JSC_useJIT'] = '0'
return options
def _run_js_runtime(self, stdin: str, /) -> str:
is_unsupported_version = self.runtime_info.version_tuple > self._BUN_MAX_SUPPORTED_VERSION
if is_unsupported_version:
self.logger.warning(
f'bun version {".".join(map(str, self.runtime_info.version_tuple))} is not supported! '
f'{".".join(map(str, self._BUN_MAX_SUPPORTED_VERSION))} is the last supported bun version. '
f'{self.ie._downloader._format_err("DO NOT", self.ie._downloader.Styles.ERROR)} '
f'open a bug report even if you encounter any errors!',
once=True)
else:
self.logger.info(
f'bun support has been deprecated. See {self._BUN_DEPRECATION_URL} for details',
once=True)
# https://bun.com/docs/cli/run
options = ['--no-addons', '--prefer-offline']
if self._lib_script.variant == ScriptVariant.BUN_NPM:
# Enable auto-install even if node_modules is p…[truncated]</excerpt>
</source>
<omitted_sources count="28">Additional source records were omitted from this bounded result.</omitted_sources>
</source_evidence>
Citations:
- 1: https://raw.githubusercontent.com/ScoopInstaller/Main/master/bucket/bun.json
- 2: GitHub issue 16766 in yt-dlp/yt-dlp (link omitted to avoid creating a cross-reference)
- 3: https://raw.githubusercontent.com/ScoopInstaller/Main/master/bucket/yt-dlp.json
🏁 Script executed:
set -eu
printf '%s\n' '--- reviewed manifest ---'
nl -ba bucket/yt-dlp-master.json | sed -n '10,22p'
printf '%s\n' '--- bun1.3 paths ---'
git ls-tree -r --name-only 395467b9b9bcfb943b263698beda351712a52954 -- '*bun1.3*' '*bun-1.3*' || true
printf '%s\n' '--- bun1.3 manifest ---'
if git cat-file -e 395467b9b9bcfb943b263698beda351712a52954:bucket/versions/bun1.3.json 2>/dev/null; then
git show 395467b9b9bcfb943b263698beda351712a52954:bucket/versions/bun1.3.json | nl -ba
else
printf '%s\n' 'bucket/versions/bun1.3.json not present at reviewed head'
fiRepository: ScoopInstaller/Versions
Length of output: 715
Remove the unsupported Bun suggestion.
The unversioned bun manifest installs Bun 1.4.4, while yt-dlp supports Bun only through 1.3.14. The suggested versions/bun1.3 manifest is not present at the reviewed head, so remove bun instead.
Suggested fix
--- "a/bucket/yt-dlp-master.json"
+++ "b/bucket/yt-dlp-master.json"
@@ -13,7 +13,6 @@
"nodejs",
"nodejs-lts",
"versions/nodejs22",
- "bun",
"quickjs"
],
"ffmpeg": [📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| "bun", |
| "homepage": "https://github.com/yt-dlp/yt-dlp-nightly-builds", | ||
| "notes": [ | ||
| "Requires a JavaScript runtime for full functionality (e.g., deno, node, bun).", | ||
| "By default yt-dlp prefers 'deno' — use `--js-runtimes <runtime>` as an argument, or edit `yt-dlp.conf` to override." |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
🔎 Supported by static analysis
🏁 Script executed:
git diff --no-ext-diff 13bfedb05494a7a77196bfd197931316990048cc 395467b9b9bcfb943b263698beda351712a52954 -- bucket/yt-dlp-nightly.json
sed -n '1,30p' bucket/yt-dlp-nightly.jsonRepository: ScoopInstaller/Versions
Length of output: 2359
🌐 Web query:
yt-dlp options.py js-runtimes no-js-runtimes default deno runtime priority
💡 Result:
<source_evidence>
<source kind="search">
<title>yt-dlp/yt_dlp/options.py at master · yt-dlp/yt-dlp · GitHub</title>
<location>https://github.com/yt-dlp/yt-dlp/blob/master/yt_dlp/options.py</location>
<excerpt>citeturn0search0 [wordlim: 200] Crawled: 3 weeks ago; In order to use a lower priority runtime when "deno" is available, ' '--no-js-runtimes needs to be passed before enabling other runtimes')) general.add_option( '--no-js-runtimes', dest='js_runtimes', action='store_const', const=[], help='Clear JavaScript runtimes to enable, including defaults and those provided by previous --js-runtimes') general.add_option( '--remote-components', metavar='COMPONENT', dest='remote_components', action='callback', callback=_list_from_options_callback, type='str', callback_kwargs={'delim': None}, default=[], help=( 'Remote components to allow yt-dlp to fetch when required. ... ' 'Supported values: ejs:npm (external JavaScript components from npm), ' 'ejs:github (external JavaScript components from yt-dlp-ejs GitHub).
' 'This option can be used multiple times to enable multiple runtimes. ' 'Supported runtimes are (in order of priority, from highest to lowest): deno, node, quickjs, bun. ' 'Only "deno" is enabled by default. The highest priority runtime that is both enabled and ' 'available will be used. In order to use a lower priority runtime when "deno" is available, ' '--no-js-runtimes needs to be passed before enabling other runtimes')) general.add_option( '--no-js-runtimes', dest='js_runtimes', action='store_const', const=[], help='Clear JavaScript runtimes to enable, including defaults and those provided by previous --js-runtimes') general.add_option( '--remote-components', metavar='COMPONENT', dest='remote_components', action='callback', callback=_list_from_options_callback, type='str', callback_kwargs={'delim': None}, default=[], help=( 'Remote components to allow yt-dlp to fetch when required. ' 'This option is currently not needed if you are using an official executable ' 'or have the requisite version of the yt-dlp-ejs package installed. general.add_option(
'--no-plugin-dirs',
dest='plugin_dirs', action='store_const', const=[],
help='Clear plugin directories to search, including defaults and those provided by previous --plugin-dirs')
general.add_option(
'--js-runtimes',
metavar='RUNTIME[:PATH]',
dest='js_runtimes',
action='callback',
callback=_list_from_options_callback,
type='str',
callback_kwargs={'delim': None},
default=['deno'],
help=(
'Additional JavaScript runtime to enable, with an optional location for the runtime '
'(either the path to the binary or its containing directory). '
'This option can be used multiple times to enable multiple runtimes. '
'Supported runtimes are (in order of priority, from highest to lowest): deno, node, quickjs, bun. '
'Only "deno" is enabled by default. The highest priority runtime that is both enabled and '
'available will be used. In order to use a lower priority runtime when "deno" is available, '
'--no-js-runtimes needs to be passed before enabling other runtimes'))
general.add_option(
'--no-js-runtimes',
dest='js_runtimes', action='store_const', const=[],
help='Clear JavaScript runtimes to enable, including defaults and those provided by previous --js-runtimes')
general.add_option(
'--remote-components',
metavar='COMPONENT',
dest='remote_components',
action='callback',
callback=_list_from_options_callback,
type='str',
callback_kwargs={'delim': None},
default=[],
help=(
'Remote components to allow yt-dlp to fetch when required. '
'This option is currently not needed if you are using an official executable '
…[truncated]</excerpt>
</source>
<source kind="search">
<title>js runtimes always defaults to deno and ignores --js-runtimes flag in nightly · Issue #14867 · yt-dlp/yt-dlp · GitHub</title>
<location>GitHub issue 14867 in yt-dlp/yt-dlp (link omitted to avoid creating a cross-reference)</location>
<excerpt>citeturn0search1 [wordlim: 200] Published: last year; Crawled: last week; > yt-dlp -vU "https://www.youtube.com/watch? ... --no-js-runtimes Clear JavaScript runtimes to enable, ... Also `yt-dlp -v` doesn't list all available runtimes by default, only deno. ... Hypothetically, any character can be found in a path, so nothing would work as a delimiter between runtimes if we tried to have the option accept a list of runtimes. ... to join this conversation on GitHub.
## Activity
1. santarl
added
bugBug that is not site-specificBug that is not site-specific
triageUntriaged issueUntriaged issue
on Nov 1, 2025
2. santarl
changed the title ~~[-]preferred js runtime flag --js-runtimes is always ignored and defaults to deno even if something else is specified[/-]~~ [+][Bug] js runtime always defaults to deno and ignores --js-runtime flag in nightly[/+] on Nov 1, 2025
3. santarl
changed the title ~~[-][Bug] js runtime always defaults to deno and ignores --js-runtime flag in nightly[/-]~~ [+][Bug] js runtimes always defaults to deno and ignores --js-runtimes flag in nightly[/+] on Nov 1, 2025
4. ### Grub4K commented on Nov 1, 2025
Grub4K
on Nov 1, 2025
Member
More actions
you want `--no-js-runtimes --js-runtimes bun`
👍React with 👍3 Reacted by snta, Adifagos and Atsushi2965
5. Grub4K
added
questionQuestionQuestion
and removed
bugBug that is not site-specificBug that is not site-specific
triageUntriaged issueUntriaged issue
on Nov 1, 2025
6. ### bashonly commented on Nov 1, 2025
bashonly
on Nov 1, 2025
Member
More actions
To expand on the above solution: Deno always has highest priority, so if it is left enabled, it will be chosen. You need to pass `--no-js-runtimes` first in order to clear the enable list.
`--js-runtimes RUNTIME[:PATH] Additional JavaScript runtime to enable,
with an optional path to the runtime
location. This option can be used multiple
times to enable multiple runtimes. Supported
runtimes: deno, node, bun, quickjs. By
default, only "deno" runtime is enabled.
--no-js-runtimes Clear JavaScript runtimes to enable,
including defaults and those provided by
previous --js-runtimes
`
with an optional location for the runtime
(either the path to the binary or its
containing directory). This option can be
used multiple times to enable multiple
runtimes. Supported runtimes are (in order
of priority, from highest to lowest): deno,
node, quickjs, bun. Only "deno" is enabled
by default. The highest priority runtime
that is both enabled and available will be
used. In order to use a lower priority
runtime when "deno" is available, --no-js-
runtimes needs to be passed before enabling
other runtimes
--no-js-runtimes Clear JavaScript runtimes to enable,
including defaults and those provided by
previous --js-runtimes
`
15. bashonly
added
ejs/jscRelated to the JS Challenge framework and/or EJS libraryRelated to the JS Challenge framework and/or EJS library
on Apr 1, 2026
to join this conversation on GitHub. Already have an account? Sign in to comment
</excerpt>
</source>
<source kind="search">
<title>How do I tell yt-dlp which js-runtimes to use from within python? · Issue #15466 · yt-dlp/yt-dlp · GitHub</title>
<location>GitHub issue 15466 in yt-dlp/yt-dlp (link omitted to avoid creating a cross-reference)</location>
<excerpt>citeturn0search2 [wordlim: 200] Published: 9 months ago; Crawled: 5 days ago; See https://github.com/yt-dlp/yt-dlp/wiki/EJS for details on installing one ... [debug] params: {'format': 'bestaudio/best', 'default_search': 'auto', 'playliststart': 0, 'limit_rate': '250K', 'rm_cache_dir': True, 'extract_flat': False, 'playlistend': 50, 'nocheckcertificate': True, 'ignore_no_formats_error': True, 'cookies': './cookies.txt', 'http_headers': {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'en-US,en;q=0.9', 'Sec-Fetch-Mode': 'navigate'}, 'verbose': True, 'js_runtimes': {'deno': {}}, 'remote_components': set(), 'compat_opts': set()}
### Provide verbose output that clearly demonstrates the problem
* [Input] Run your yt-dlp command with -vU flag added (`yt-dlp -vU <your command line>`)
* [Input] If using API, add `'verbose': True` to `YoutubeDL` params instead
* [Input] Copy the WHOLE output (starting with `[debug] Command-line config`) and insert it below
### Complete Verbose Output
WARNING: [youtube] No supported JavaScript runtime could be found. Only deno is enabled by default; to use another runtime add --js-runtimes RUNTIME[:PATH] to your command/config. YouTube extraction without a JS runtime has been deprecated, and some formats may be missing. See https://github.com/yt-dlp/yt-dlp/wiki/EJS for details on installing one
WARNING: [youtube] 9aTg2tT4axc: Some web_safari client https formats have been skipped as they are missing a url. YouTube is forcing SABR streaming for this client. See https://github.com/yt-dlp/yt-dlp/issues/12482 for more details
WARNING: [youtube] 9aTg2tT4axc: Some web client https formats have been skipped as they are missing a url. Only deno is enabled by default; to use another runtime add --js-runtimes RUNTIME[:PATH] to your command/config. YouTube extraction without a JS runtime has been deprecated, and some formats may be missing. See https://github.com/yt-dlp/yt-dlp/wiki/EJS for details on installing one
[debug] [youtube] Forcing "main" player JS variant for player 50cc0679
original url = /s/player/50cc0679/player_es6.vflset/en_US/base.js
[youtube] 9aTg2tT4axc: Downloading android sdkless player API JSON
[youtube] 9aTg2tT4axc: Downloading web safari player API JSON
[debug] [youtube] 9aTg2tT4axc: Detected a 15s ad skippable after 5s for web_safari
WARNING: [youtube] 9aTg2tT4axc: Some web_safari client https formats have been skipped as they are missing a url. YouTube is forcing SABR streaming for this client. See https://github.com/yt-dlp/yt-dlp/issues/12482 for more details
[youtube] 9aTg2tT4axc: Downloading m3u8 information
[debug] [youtube] 9aTg2tT4axc: Detected experiment to bind GVS PO Token to video id.
WARNING: [youtube] 9aTg2tT4axc: Some web client https formats have been skipped as they are missing a url. YouTube is forcing SABR streaming for this client. See https://github.com/yt-dlp/yt-dlp/issues/12482 for more details
Starting Player Process for Guild random stuff
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec, channels, acodec, lang, proto, size, br, asr, vext, aext, hasaud, id
</excerpt>
</source>
<source kind="search">
<title>n challenge solving failed: Some formats may be missing. · Issue #16694 · yt-dlp/yt-dlp · GitHub</title>
<location>GitHub issue 16694 in yt-dlp/yt-dlp (link omitted to avoid creating a cross-reference)</location>
<excerpt>citeturn0search3 [wordlim: 200] Published: 5 months ago; Crawled: last week; WARNING: [youtube] No supported JavaScript runtime could be found.Only deno is enabled by default; to use another runtime add --js-runtimes RUNTIME[:PATH] to your command/config. ... See https://github.com/yt-dlp/yt-dlp/wiki/EJS for details on installing one
2. ### rdamas commented on May 11, 2026
rdamas
on May 11, 2026
Contributor
More actions
Try again with `deno` or any other supported JS runtime installed, as suggested by the WARNING yt-dlp printed out:
WARNING: [youtube] No supported JavaScript runtime could be found. Only deno is enabled by default; to use another runtime add --js-runtimes RUNTIME[:PATH] to your command/config. YouTube extraction without a JS runtime has been deprecated, and some formats may be missing. See https://github.com/yt-dlp/yt-dlp/wiki/EJS for details on installing one
`yt-dlp` needs the JS runtime to solve the challenge.
👍React with 👍2 Reacted by nicolaasjan and mzso
3. bashonly
added
questionQuestionQuestion
and removed
site-bugIssue with a specific websiteIssue with a specific website
triageUntriaged issueUntriaged issue
on May 12, 2026
4. bashonly
closed this as completedon May 12, 2026
to join this conversation on GitHub. Already have an account? Sign in to comment</excerpt>
</source>
<source kind="search">
<title>yt-dlp can't find my Node installation no matter what I do · Issue #16305 · yt-dlp/yt-dlp · GitHub</title>
<location>GitHub issue 16305 in yt-dlp/yt-dlp (link omitted to avoid creating a cross-reference)</location>
<excerpt>citeturn0search4 [wordlim: 200] Published: 7 months ago; Crawled: last week; It acts like yt-dlp is ignoring its own command line option. ... Only deno is enabled by default; to use another runtime add --js-runtimes RUNTIME[:PATH] to your command/config. ... See https://github.com/yt-dlp/yt-dlp/wiki/EJS for details on installing one.
</excerpt>
</source>
<omitted_sources count="31">Additional source records were omitted from this bounded result.</omitted_sources>
</source_evidence>
Citations:
- 1: https://github.com/yt-dlp/yt-dlp/blob/master/yt_dlp/options.py?utm_source=openai
Document the flag sequence that selects a non-default runtime.
--js-runtimes <runtime> adds a runtime. It does not remove the default deno, which has higher priority when available. Use --no-js-runtimes --js-runtimes <runtime> to select only the requested runtime.
Suggested fix
--- "a/bucket/yt-dlp-nightly.json"
+++ "b/bucket/yt-dlp-nightly.json"
@@ -4,7 +4,7 @@
"homepage": "https://github.com/yt-dlp/yt-dlp-nightly-builds",
"notes": [
"Requires a JavaScript runtime for full functionality (e.g., deno, node, bun).",
- "By default yt-dlp prefers 'deno' — use `--js-runtimes <runtime>` as an argument, or edit `yt-dlp.conf` to override."
+ "By default yt-dlp enables and prefers 'deno'. To select another runtime, use `--no-js-runtimes --js-runtimes <runtime>` as an argument, or set these options in `yt-dlp.conf`."
],
"license": "Freeware",
"suggest": {📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| "By default yt-dlp prefers 'deno' — use `--js-runtimes <runtime>` as an argument, or edit `yt-dlp.conf` to override." | |
| "By default yt-dlp enables and prefers 'deno'. To select another runtime, use `--no-js-runtimes --js-runtimes <runtime>` as an argument, or set these options in `yt-dlp.conf`." |
| "nodejs", | ||
| "nodejs-lts", | ||
| "versions/nodejs22", | ||
| "bun", |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Remove the unsupported Bun suggestion.
The unversioned bun package can install a Bun release newer than yt-dlp’s supported maximum of 1.3.14. The reviewed tree has no versions/bun1.3 manifest, so remove this entry.
Suggested fix
--- "a/bucket/yt-dlp-nightly.json"
+++ "b/bucket/yt-dlp-nightly.json"
@@ -13,7 +13,6 @@
"nodejs",
"nodejs-lts",
"versions/nodejs22",
- "bun",
"quickjs"
],
"ffmpeg": [📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| "bun", |
<manifest-name[@version]|chore>: <general summary of the pull request>Matches latest
yt-dlpmanifest