{"id":98,"date":"2025-11-20T09:06:18","date_gmt":"2025-11-20T08:06:18","guid":{"rendered":"https:\/\/linuxundich.de\/en\/?p=98"},"modified":"2026-10-04T01:39:49","modified_gmt":"2026-10-03T23:39:49","slug":"yt-dlp-2025-11-12-youtube-downloads-on-linux-now-with-deno","status":"publish","type":"post","link":"https:\/\/linuxundich.de\/en\/yt-dlp-2025-11-12-youtube-downloads-on-linux-now-with-deno\/","title":{"rendered":"yt-dlp 2025.11.12: YouTube downloads on Linux now with Deno"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">A quick PSA for everyone who uses yt-dlp to save YouTube videos to their hard drive. It&#8217;s also for developers building alternative YouTube clients, though they&#8217;ll have the situation on their radar anyway. With the release of yt-dlp 2025.11.12, the program now needs a JavaScript runtime such as <a href=\"https:\/\/en.wikipedia.org\/wiki\/Deno_%28software%29\">Deno<\/a>. The reason behind this change is Google&#8217;s ever-growing enshittification of YouTube.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Background: YouTube and enshittification<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">YouTube rippers like yt-dlp and independent YouTube clients like <a href=\"https:\/\/newpipe.net\/\">NewPipe<\/a> are supposed to be blocked more aggressively in the future. The same goes for clones like <a href=\"https:\/\/github.com\/InfinityLoop1308\/PipePipe\">PipePipe<\/a>, which use yt-dlp under the hood. The reason is simple: free clients don&#8217;t show ads, and they often integrate features like <a href=\"https:\/\/sponsor.ajay.app\/\">SponsorBlock<\/a> right out of the box.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Technically, the yt-dlp block works through a JavaScript challenge that will require a browser or a client with a full-fledged JavaScript engine. The rudimentary JavaScript interpreter built into yt-dlp so far is no longer enough. The current version, yt-dlp 2025.11.12, can now work with Deno and other JS runtimes. For users, this doesn&#8217;t mean much extra effort:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>### Without Deno, yt-dlp prints a warning...\n$ &lt;strong&gt;yt-dlp https:\/\/www.youtube.com\/watch?v=dQw4w9WgXcQ&lt;\/strong&gt;\n&amp;#91;...]\nWARNING: &amp;#91;youtube] No supported JavaScript runtime could be found. 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. To silence this warning, you can use  --extractor-args &quot;youtube:player_client=default&quot;\n&amp;#91;...]\nWARNING: &amp;#91;youtube] dQw4w9WgXcQ: 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\n&amp;#91;youtube] dQw4w9WgXcQ: Downloading m3u8 information\nWARNING: &amp;#91;youtube] dQw4w9WgXcQ: 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\n&amp;#91;info] dQw4w9WgXcQ: Downloading 1 format(s): 401+251\n&amp;#91;...]<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>### Installing Deno through the package manager...\n$ &lt;strong&gt;sudo pacman -S deno&lt;\/strong&gt;<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>### Deno solves the JS challenge...\n$ &lt;strong&gt;yt-dlp https:\/\/www.youtube.com\/watch?v=dQw4w9WgXcQ&lt;\/strong&gt;\n&amp;#91;youtube] Extracting URL: https:\/\/www.youtube.com\/watch?v=dQw4w9WgXcQ\n&amp;#91;...]\n&amp;#91;youtube] &amp;#91;jsc:deno] Solving JS challenges using deno\n&amp;#91;...]\n&amp;#91;download] Destination: Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster) &amp;#91;dQw4w9WgXcQ].f251.webm\n&amp;#91;download] 100% of    3.27MiB in 00:00:00 at 9.59MiB\/s\n&amp;#91;Merger] Merging formats into &quot;Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster) &amp;#91;dQw4w9WgXcQ].webm&quot;\nDeleting original file Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster) &amp;#91;dQw4w9WgXcQ].f251.webm (pass -k to keep)\nDeleting original file Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster) &amp;#91;dQw4w9WgXcQ].f401.mp4 (pass -k to keep)<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Current Situation and Outlook<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In the future, package maintainers will most likely install Deno automatically as a dependency of yt-dlp. On Arch Linux that&#8217;s not the case yet, so you still have to add the package manually. Pacman makes that quick: a <code>pacman -S deno<\/code> is all it takes. It only costs you about 100 MB of disk space. On Ubuntu, though, Deno doesn&#8217;t seem to be in the repositories yet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Right now, many downloads still work without Deno or another full-fledged JavaScript engine, but Google will certainly keep tightening the screws. The stricter the technical hurdles get, the less reliable the existing workarounds will become, until they stop working altogether. In the medium term, you should assume that downloading YouTube videos with yt-dlp won&#8217;t be possible without Deno anymore.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6ac27bd265a73&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6ac27bd265a73\" class=\"wp-block-image wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/linuxundich.de\/wp-content\/uploads\/2025\/11\/ytdlp-deno-1280x756.png\" alt=\"yt-dlp downloads a video using the Deno JavaScript engine. The YouTube ripper picks up Deno automatically if it finds the engine on the system.\" style=\"width:100%\"\/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">yt-dlp downloads a video using the Deno JavaScript engine. The YouTube ripper picks up Deno automatically if it finds the engine on the system.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>PS:<\/strong> If you wonder how you can play videos and view images in a terminal window, take a look at mplayer with <a href=\"https:\/\/github.com\/cacalabs\/libcaca\">libcaca<\/a> and the image viewer <a href=\"https:\/\/github.com\/cslarsen\/jp2a\">jp2a<\/a>. Both tools are in the Arch repositories and surely in those of other distributions as well. They are definitely among the little joys of everyday Linux life. But what would the Linux world be without a bit of nerdy stuff?<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ &lt;strong&gt;mplayer -really-quiet -vo caca video.webm&lt;\/strong&gt;\n$ &lt;strong&gt;jp2a --colors bild.png&lt;\/strong&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The new yt-dlp release needs an external JavaScript engine like Deno to reliably extract YouTube videos. The reason is tighter technical measures on Google&#8217;s side.<\/p>\n","protected":false},"author":2,"featured_media":120,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"lui_source_id":45227,"lui_source_hash":"13477914ad1c88c4e7bf38558aad4c42c4af5785c722c4c0b701883b800e3ad4","lui_source_translated":"2026-10-03","lui_source_reviewed":true,"lui_via_url":"","lui_via_label":"","lui_source_url":"","lui_source_label":"","footnotes":""},"categories":[2],"tags":[],"class_list":["post-98","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gnu-linux"],"_links":{"self":[{"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/posts\/98","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/comments?post=98"}],"version-history":[{"count":1,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/posts\/98\/revisions"}],"predecessor-version":[{"id":121,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/posts\/98\/revisions\/121"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/media\/120"}],"wp:attachment":[{"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/media?parent=98"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/categories?post=98"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/tags?post=98"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}