yt-dlp and Deno support in the app
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.
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.
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
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.
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
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
- Install a supported JavaScript runtime
- 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.
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.
You must use yt-dlp -v „youtubelink“ If you see „apple-webkit-jsi-0.1.1 (external) “ then its working
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
...
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-pluginsand 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.