a-shell icon indicating copy to clipboard operation
a-shell copied to clipboard

yt-dlp and Deno support in the app

Open hibliotheque opened this issue 4 months ago • 8 comments

I understand that iOS does not allow Javascript engines other than their own, but since there is a JITless version of Deno and yt-dlp is pushing for its use, are there any plans regarding Deno support?

I tried installing Deno using curl but it says it requires 7zip or unzip to be installed. I tried downloading zip from the pkg install command and unzip was downloaded and I installed 7zip using curl but Deno could still not be installed. I have unzip.wasm3 installed in the bin folder and it still does not work. Using pip install deno doesn't work and gives an error as well. Sorry if there is already a solution for this, I am not technologically inclined and could not find it.

hibliotheque avatar Oct 23 '25 00:10 hibliotheque

Note for my own reference: building instructions are here: https://github.com/denoland/deno/blob/main/.github/CONTRIBUTING.md#building-from-source Deno requires V8 to be built from source, and both are written in Rust, so there will be tons of issues about memory management since iOS does not have fork and exec. Unless we can run Deno in an extension, but these are currently unavailable.

To answer your questions: you can only install non-binary commands inside a-Shell. iOS has both legal and technical restrictions that prevent users from executing binaries they downloaded. Deno instructions are about downloading binaries, which will work on standard Unix, but not with the safety measures in iOS.

holzschu avatar Oct 23 '25 06:10 holzschu

I use this as javascript runtime

https://github.com/grqz/yt-dlp-apple-webkit-jsi

Idk how you install yt-dlp but maybe you need install yt-dlp-ejs too

pip install yt-dlp-ejs

daywalk3r666 avatar Nov 13 '25 09:11 daywalk3r666

Can you give some more detail about how you achieve this? Installing it via pip or manually it’s not detected by yt-dlp (either download or pip install)

And running with a js runtime flag pointing to the folder with the zip it’s unsupported.

The repo only shows instructions to install but doesn’t give much beyond that for use.

yt-dlp --js-runtimes yt-dlp-plugins/ 
WARNING: Ignoring unsupported JavaScript runtime(s): yt-dlp-plugins/. Supported runtimes: deno, node, bun, quickjs.

Usage: yt-dlp [OPTIONS] URL [URL...]

yt-dlp: error: You must provide at least one URL.
Type yt-dlp --help to see a list of all options.

Etsum avatar Nov 13 '25 23:11 Etsum

First update yt-dlp to 12.11.2025. then install yt-dlp-ejs via pip pip install yt-dlp-ejs Now install python3 -m pip install -U yt-dlp-apple-webkit-jsi

daywalk3r666 avatar Nov 14 '25 05:11 daywalk3r666

Thank you for the help. Running on both iPhone and iPad yt-dlp does not detect the options.

Maybe this isn’t an a-shell issue as it’s to do with js runtime. Looking at the package I’m not clear if yt-dlp-apple-webkit-jsi is meant as a solution for step 1 or step 2 of the ejs wiki page

Setup steps

  1. Install a supported JavaScript runtime
  2. Install EJS challenge solver scripts

Or maybe it is an issue with the yt-dlp-apple-webkit-jsi as I don’t see the line from their docs in the output of yt-dlp -v

package install verification from yt-dlp-apple-webkit-jsi [debug] [youtube] [jsc] JS Challenge Providers: bun (unavailable), deno (unavailable), jsinterp (unavailable), node (unavailable), apple-webkit-jsi-0.0.8 (external)

Shortened output following install steps above (same result if using release download or pip)

[~/Documents]$ python3 -m pip install --user yt-dlp[default]
Collecting yt-dlp[default]
  Downloading yt_dlp-2025.11.12-py3-none-any.whl.metadata (180 kB)
  ...
Installing collected packages: brotli, yt-dlp-ejs, yt-dlp, websockets, mutagen
Successfully installed brotli-1.2.0 mutagen-1.47.0 websockets-15.0.1 yt-dlp-2025.11.12 yt-dlp-ejs-0.3.1

[~/Documents]$ python3 -m pip install --user yt-dlp-apple-webkit-jsi
Collecting yt-dlp-apple-webkit-jsi
  Downloading yt_dlp_apple_webkit_jsi-0.1.1-py3-none-any.whl.metadata (2.3 kB)
Downloading yt_dlp_apple_webkit_jsi-0.1.1-py3-none-any.whl (32 kB)
Installing collected packages: yt-dlp-apple-webkit-jsi
Successfully installed yt-dlp-apple-webkit-jsi-0.1.1

[~/Documents]$ yt-dlp -v
[debug] Command-line config: ['-v']
[debug] Encodings: locale UTF-8, fs utf-8, pref UTF-8, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version [email protected] from yt-dlp/yt-dlp [335653be8] (pip)
[debug] Python 3.13.1+ (CPython iPad8,8 64bit) - iPadOS-18.6.2-iPad8,8-arm64-64bit (OpenSSL 1.1.1i  8 Dec 2020)
[debug] exe versions: ffmpeg n7.0-2875-g991ecfec60 (setts), ffprobe n7.0-2875-g991ecfec60, phantomjs broken, rtmpdump broken
[debug] Optional libraries: Cryptodome-3.23.0, certifi-2025.10.05, mutagen-1.47.0, requests-2.32.5, sqlite3-3.43.2, urllib3-2.5.0, websockets-15.0.1, yt_dlp_ejs-0.3.1
[debug] JS runtimes: none
[debug] Proxy map: {}
[debug] Request Handlers: urllib, requests, websockets
[debug] Plugin directories: /var/mobile/Containers/Data/Application/AC5F5128-F78C-4809-94BD-C61E38320DEA/Library/lib/python3.13/site-packages/yt_dlp_plugins
[debug] Loaded 1844 extractors

Usage: yt-dlp [OPTIONS] URL [URL...]

yt-dlp: error: You must provide at least one URL.
Type yt-dlp --help to see a list of all options.

Etsum avatar Nov 14 '25 09:11 Etsum

The way that I got it to work is by using curl.

So I followed the instructions on the yt-dlp subreddit (https://www.reddit.com/r/youtubedl/wiki/howdoiinstallytdlpinashellonios)

Then in the bin folder in a-shell (where the yt-dlp file is) i made a folder titled yt-dlp-plugins.

Then I open a-shell and run this command curl -L https://github.com/grqz/yt-dlp-apple-webkit-jsi/releases/latest/download/yt-dlp-apple-webkit-jsi.zip -O > ~/Documents/bin/yt-dlp-plugins and it works.

hibliotheque avatar Nov 14 '25 09:11 hibliotheque

You must use yt-dlp -v „youtubelink“ If you see „apple-webkit-jsi-0.1.1 (external) “ then its working

Image

daywalk3r666 avatar Nov 14 '25 14:11 daywalk3r666

Thank you

Including a link was what was needed

I didn’t need to change from pip to direct download.

...
[debug] JS runtimes: none
[debug] Proxy map: {}
[debug] Request Handlers: urllib, requests, websockets
[debug] Plugin directories: /var/mobile/Containers/Data/Application/4FDC6551-FC94-4EBE-A5F0-3CEFB9BC89AE/Library/Preferences/yt-dlp/plugins/yt-dlp-apple-webkit-jsi.zip/yt_dlp_plugins, /private/var/mobile/Containers/Data/Application/4FDC6551-FC94-4EBE-A5F0-3CEFB9BC89AE/Documents/yt-dlp-plugins/yt-dlp-apple-webkit-jsi.zip/yt_dlp_plugins, /var/mobile/Containers/Data/Application/4FDC6551-FC94-4EBE-A5F0-3CEFB9BC89AE/Library/lib/python3.13/site-packages/yt_dlp_plugins
[debug] Loaded 1844 extractors
[debug] [youtube] [pot] PO Token Providers: none
[debug] [youtube] [pot] PO Token Cache Providers: memory
[debug] [youtube] [pot] PO Token Cache Spec Providers: webpo
[debug] [youtube] [jsc] JS Challenge Providers: bun (unavailable), deno (unavailable), node (unavailable), quickjs (unavailable), apple-webkit-jsi-0.1.1 (external)
...
[youtube] [jsc:apple-webkit-jsi] Solving JS challenges using apple-webkit-jsi
[debug] [youtube] [jsc:apple-webkit-jsi] Using challenge solver lib script v0.3.1 (source: python package, variant: minified)
[debug] [youtube] [jsc:apple-webkit-jsi] Using challenge solver core script v0.3.1 (source: python package, variant: minified)
[youtube] [jsc:apple-webkit-jsi] Constructing webview
[debug] [youtube] [jsc:apple-webkit-jsi] not running on main thread
[youtube] [jsc:apple-webkit-jsi] Webview constructed
...

Etsum avatar Nov 14 '25 20:11 Etsum

The way that I got it to work is by using curl.

So I followed the instructions on the yt-dlp subreddit (https://www.reddit.com/r/youtubedl/wiki/howdoiinstallytdlpinashellonios)

Then in the bin folder in a-shell (where the yt-dlp file is) i made a folder titled yt-dlp-plugins.

Then I open a-shell and run this command curl -L https://github.com/grqz/yt-dlp-apple-webkit-jsi/releases/latest/download/yt-dlp-apple-webkit-jsi.zip -O > ~/Documents/bin/yt-dlp-plugins and it works.

[youtube] [jsc:apple-webkit-jsi] Solving JS challenges using apple-webkit-jsi [youtube] [jsc:apple-webkit-jsi] Constructing webview [youtube] [jsc:apple-webkit-jsi] Webview constructed [youtube] [jsc:apple-webkit-jsi] Solving JS challenges using apple-webkit-jsi

Thanks. Up until this point I was using python YT-DLP which was a struggle to work out how to use a JS engine to install for YT-dlp solving and I'd never even used the iOS binary in the guide despite spending my life on Reddit and being subbed to the YTDL sub also, so thanks for that guide to the author too.

gaussey avatar Dec 17 '25 02:12 gaussey