KoalaPull is a native desktop download manager for yt-dlp. It downloads videos, audio, playlists, subtitles, and metadata from hundreds of sites with a desktop UI instead of terminal commands.
- Zero-config setup: automatically downloads and configures
yt-dlpandffmpegon first run. - Hardened dependency updates: downloads are size-limited, integrity-checked, archive-validated, and atomically replaced.
- Direct engine updates: update or re-install
yt-dlpandffmpegfrom the Settings tab. - Cross-platform UI: built with Go, React, and Wails for macOS, Windows, and Linux.
- Metadata preview: inspect thumbnails, uploader data, duration, and formats before downloading.
- Queue and presets: parallel downloads, presets, subtitle options, and history built in.
- Privacy-first: local-first workflow, no telemetry, no tracking, no external CDN requirement.
Download the latest release from:
Current packaged targets:
- macOS arm64
- macOS amd64
- Windows amd64
- Linux amd64
Requirements:
- Go 1.26.4 or newer
- Node.js 22 or newer
- Wails CLI v2.12.0 or newer
- Linux only:
libgtk-3-dev,libwebkit2gtk-4.1-dev,pkg-config
Build and run locally:
go install github.com/wailsapp/wails/v2/cmd/wails@v2.12.0
git clone https://github.com/Shik3i/KoalaPull.git
cd KoalaPull
wails devProduction build:
wails build -clean -ldflags "-X main.AppVersion=$(git describe --tags --always --dirty)"KoalaPull stores downloaded engine binaries here:
- Linux:
~/.config/KoalaPull/bin/ - macOS:
~/Library/Application Support/KoalaPull/bin/ - Windows:
%APPDATA%/KoalaPull/bin/
Downloaded tools:
yt-dlpffmpeg
When KoalaPull downloads or updates yt-dlp and ffmpeg, it now uses this flow:
- Download into temporary files with hard size limits.
- Verify integrity before install:
yt-dlp: SHA-256 checksum verification.ffmpegon Windows/Linux: upstream SHA-256 checksum verification.ffmpegon macOS: detached signature verification against the embedded Evermeet signing key.
- Validate archive member paths and extract only the expected binaries with bounded extraction.
- Replace old binaries atomically so failed updates do not leave half-written executables behind.
- On Windows, keep
ffmpeg.exeandffprobe.exetogether.
Result:
- broken downloads are rejected
- oversized downloads are rejected
- archive traversal is blocked
- partial installs should not replace working binaries
There is now one canonical verifier:
scripts/verify.mjs
Launchers:
- Unix:
./scripts/verify.sh - Windows:
.\scripts\verify.bat
The verifier runs:
frontend:npm ci --include=optionalfrontend:npm run testfrontend:npx tsc --noEmitfrontend:npm run buildfrontend:npm audit --audit-level=moderate- repository root:
npm ci --include=optionalfor website tooling website:node --test- Go tests:
go test -count=1 ./... - Go race tests:
go test -race -count=1 ./... go vet ./...govulncheckactionlintfor workflow validation
KoalaPull/
|- app.go
|- app_test.go
|- dependency_security.go
|- process_other.go
|- process_windows.go
|- process_output.go
|- replace_other.go
|- replace_windows.go
|- scripts/
| |- verify.mjs
| |- verify.sh
| |- verify.bat
|- frontend/
|- website/
|- build/
|- docs/
`- wails.json
See CONTRIBUTING.md.
MIT. See LICENSE.