Small Kotlin Multiplatform tool (Compose Desktop + CLI) to download YouTube videos and playlists.
- Desktop app (Compose Desktop) and CLI
- Shared Kotlin Multiplatform core (domain/data/engine/parser)
- Downloads YouTube videos and playlists using a fast, native Kotlin (ktor) engine by default
- Optionally supports
yt-dlpas a fallback/secondary mode if the native engine fails due to YouTube changes - Audio extraction and media conversion require
ffmpeg(mandatory for all modes)
Prebuilt binaries are available on the GitHub Releases page.
- macOS:
.dmg - Windows:
.msi - Linux:
.deb
- Download the appropriate file for your operating system.
- Install it:
- macOS: open the
.dmgand drag the app to Applications. - Windows: run the
.msiand follow the setup wizard. - Linux: install the
.debwith your package manager.
- macOS: open the
- Launch the app and start downloading.
The app works without yt-dlp. If you install it, you can enable the yt-dlp engine in Settings as a fallback if the default engine fails.
Note: ffmpeg is required for all downloads and features, regardless of the engine you use.
# Install what you need
brew update
brew install yt-dlp ffmpegNote for macOS users: If you see a warning that the app "cannot be opened because Apple cannot check it for malicious software":
- Right‑click the app → Open → Open (bypasses the warning once), or
- Go to System Settings → Privacy & Security → "Open Anyway" (after attempting to open the app).
python3 -m pip install -U yt-dlp
which yt-dlpUse one of the common package managers.
# Scoop (user install)
scoop install yt-dlp ffmpeg# Chocolatey (admin)
choco install yt-dlp ffmpeg# Install what you need
sudo apt update
sudo apt install -y ffmpeg
# yt-dlp via pip (optional) or your distro package
python3 -m pip install -U yt-dlp- Use the native package manager (dnf, pacman, zypper) to install
ffmpegif available. - Install
yt-dlpviapipor your distro's package if provided.
You can use system yt-dlp/ffmpeg or point the app to custom binaries in Settings. If you do not install yt-dlp, the app will use the built-in engine.
- Run the desktop app:
./gradlew :desktop-app:run- Accept the disclaimer, paste a video or playlist URL, choose quality/format, and download.
./gradlew :cli:run --args="--url https://www.youtube.com/watch?v=... --format mp3"Preview a playlist:
./gradlew :cli:run --args="--url https://www.youtube.com/playlist?list=... --playlist"./gradlew clean buildRun the packaging tasks on the matching OS to generate native installers/binaries.
./gradlew :desktop-app:packageDmg./gradlew :desktop-app:packageWindowsInstaller./gradlew :desktop-app:packageLinuxAppImage
# or packageLinuxDeb / packageLinuxTar depending on your nativeDistributions config- Default download folder:
~/Downloads/YouTubeDownloader
- Configure paths in the Settings dialog in the desktop app or pass CLI flags
--yt-dlp-path/--ffmpeg-path.
See CONTRIBUTING.md for development, testing, and PR guidance.
- Do not commit API keys or secrets. The project accepts an optional innertube API key via configuration; prefer environment variables or CI secrets.
This project is licensed under the Apache License 2.0 — see LICENSE.
