CLI tool
Chlience/yt-dlp-tauri avatar
Chlience/yt-dlp-tauri

yt-dlp-tauri: a Windows desktop front end that manages its own yt-dlp toolchain

A minimal Windows desktop downloader powered by yt-dlp and Tauri 2. / 基于 yt-dlp 和 Tauri 2 的轻量 Windows 桌面下载器。

419 stars27 forksJavaScriptGPL-3.0

At a glance

What is it?
yt-dlp-tauri wraps yt-dlp in a Tauri 2 desktop app for Windows, with app-managed or local tool binaries. The interesting part is the toolchain pipeline, not the download button.
Who is it for?
Adopt yt-dlp-tauri if you are on Windows 10 or 11 x64, want a fixed-size desktop window instead of a terminal, and would rather let the app install and verify yt-dlp, ffmpeg, ffprobe and deno than manage them yourself. Skip it if you are not on Windows x64, if you need a hosted or multi-user downloader, or if you want a plugin ecosystem.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 3 days ago.
What is it written in?
Mainly JavaScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 30, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The problem is not downloading, it is keeping yt-dlp current

Anyone who has used yt-dlp from a terminal knows the failure pattern. A site changes something, extraction breaks, and the fix is a new yt-dlp binary. If you installed it through a package manager, you wait. If you downloaded a release asset by hand, you now have a folder of dated executables and no memory of which one is active. yt-dlp-tauri takes that maintenance loop and moves it into the app. The README describes the project as a minimal Windows desktop downloader powered by yt-dlp and Tauri 2, and the feature list leads with metadata parsing and quality selection, but the toolchain section is where the design effort went. The app resolves a stable toolchain from project-controlled immutable GitHub Release assets, stages and verifies every tool before atomic activation, and preserves the active revision when an update fails. That last clause matters: a failed tool update should not leave you with a half-installed ffmpeg and a broken download button.

The audience is narrow and the README says so. It is desktop-first and local-first, not a hosted service, and it has no multi-user accounts. If you want a web UI that several people hit, this is the wrong shape. If you want one window on one machine where the toolchain is somebody else's problem, that is the target.

Rust backend, TypeScript front end, and a resolver that runs once a week

The stack is Tauri 2 with a Rust backend and a Vanilla TypeScript front end built by Vite. The UI is described as a fixed-size product-style desktop interface, which is a deliberate constraint rather than an oversight: a fixed window removes responsive layout work from a project whose real complexity lives elsewhere. The front end uses @tauri-apps/api, @tauri-apps/plugin-dialog and @tauri-apps/plugin-opener, so file and folder selection goes through Tauri's dialog plugin rather than a custom picker.

The toolchain pipeline is the part worth reading twice. A Toolchain Discovery workflow resolves yt-dlp, Deno, FFmpeg and FFprobe once per week and maintains one reviewed bot/toolchain-weekly pull request. A separate Toolchain Freshness workflow checks released source URLs daily and opens an emergency pull request for an affected source. Both require human review before merge. Merged changes pass native validation before publication to a separate yt-dlp-tauri-toolchain archive, and the app follows the toolchain-stable channel. The separation is intentional: TOOLCHAIN_CHANGELOG.md records tool revisions independently from application releases, so a yt-dlp bump does not require an app version bump.

Four files carry the state. toolchain-policy.json holds reviewed upstream sources, version-selection rules, targets and allowed hosts. toolchain-lock.json holds generated upstream identity, immutable archive descriptors and SHA-256 hashes for archives and executables. src-tauri/tools-manifest.json holds the generated runtime revision, project-controlled archive URLs, target names and executable hashes. The resolver generates the lock, the runtime manifest and the changelog together, which means the three cannot drift apart silently. Source and selection changes belong in toolchain-policy.json, not in the generated files.

Installing yt-dlp-tauri and running a first download

The README is explicit that real app builds belong on Windows. WSL can run many checks, but release installers should be built on Windows or by the GitHub Actions release workflow. Prerequisites are Windows 10 or 11 x64 with the WebView2 Runtime, Node.js 24 or newer, Rust stable with the platform toolchain, and PowerShell 5 or newer.

Install the Node dependencies from the repository root:

bash
npm ci

There is an optional step that restores the pinned win-x64 toolchain into the checkout. The README notes this is optional for normal app use, because the app can install tools itself.

powershell
.\scripts\download-tools.ps1

If you skip that script and tools are missing, open the app, go to Settings, and click Install tools. That path uses the app-managed revision rather than a checkout-local copy.

To run the desktop app in development:

powershell
npm run tauri dev

To build the installer:

powershell
npm run tauri build

The configured bundle target is nsis, and the README states build output is written under src-tauri\target\release\bundle\nsis\. After launching, the workflow is: paste a video URL from a site supported by yt-dlp, preview the metadata (title, thumbnail, duration, source URL, description, quality options), choose a quality, and download. Progress, speed, ETA and cancellation are shown live, and downloads default to %USERPROFILE%\Downloads\yt-dlp-tauri\. App state and logs live under %LOCALAPPDATA%\yt-dlp-tauri\state\ and %LOCALAPPDATA%\yt-dlp-tauri\logs\app.log. For authenticated sites, Settings accepts a Netscape cookies.txt file or a one-line browser Cookie header.

Local tool mode trades verification for whatever is already on your PATH

Settings can switch the whole toolchain between Managed and Local. In Local mode the app searches the current process PATH for yt-dlp.exe, deno.exe, and one directory containing both ffmpeg.exe and ffprobe.exe. If a tool lives outside PATH, the path controls accept an absolute yt-dlp executable, an FFmpeg directory, or a Deno executable. Use PATH clears those overrides and resolves everything from PATH again.

The verification story is weaker here, and the README does not pretend otherwise. Local tools are checked by running their version commands and the same deterministic media compatibility fixture used for managed revisions. The app does not pin hashes, does not install updates, and does not replace local executables. Local programs run with the user's permissions, and the selected yt-dlp executable receives video URLs and the selected Cookie file. That is a real trust boundary: pointing the app at an arbitrary yt-dlp.exe means handing that binary your URLs and your cookies. The README's own guidance is to configure only trusted binaries. If you cannot say where a yt-dlp.exe came from, use Managed mode.

The other limitation is scope. The supported tool target is win-x64, and tool binaries are not committed to the repository. There is no macOS or Linux build described, no hosted mode, and no multi-user account model. If your team is mixed-platform, this app covers one of those platforms.

How it differs from a terminal wrapper or a full GUI downloader

The obvious alternative is running yt-dlp directly, and for many people it stays the better choice. A shell alias plus yt-dlp -U gives you the same freshness guarantee with none of the packaging. What you give up is the metadata preview, the quality picker, the progress panel, and the atomic activation logic that keeps a failed update from breaking your working setup. If you already have a yt-dlp update habit and you are comfortable with flags, the desktop layer is overhead.

The other comparison is against GUI downloaders that bundle their own binaries inside the installer. That approach is simpler for the user and worse for maintenance: the bundled yt-dlp is only as new as the last app release. yt-dlp-tauri decouples the two, which is why TOOLCHAIN_CHANGELOG.md exists as a separate file from CHANGELOG.md. The cost of that decoupling is the resolver machinery and the weekly bot pull request, which is a lot of process for a personal downloader. Whether that trade is worth it depends on how often your target sites break. The README does not document a rollback command for the app itself, only that a failed tool update preserves the active revision.

Licence and the maintenance bill

The project is GPL-3.0-only, stated in package.json and in the LICENSE file. That matters if you plan to redistribute a modified build: GPL-3.0 carries source-availability obligations that permissive licences do not. It does not restrict running the app for yourself. The repository also carries THIRD-PARTY-NOTICES.md and a third-party/ directory, which is where the bundled or referenced component notices live. This is a description of what the files say, not legal advice; if you are shipping this inside a product, read the licence text and the notices yourself.

Maintenance cost splits in two. The app itself last received a push on 2026-09-14, and the most recent release listed is v0.1.13 from 2026-07-14. The toolchain moves on its own schedule through the weekly and daily workflows, so a quiet app repository does not mean a stale yt-dlp. The recurring cost is upstream: the resolver depends on project-controlled immutable GitHub Release assets, and the daily freshness workflow exists precisely because released source URLs can change underneath you. If you fork this, you inherit the resolver, the policy file and the review step. The README states that both workflows require human review before merge, which means somebody has to be that human.

Editorial conclusion

Adopt yt-dlp-tauri if you are on Windows 10 or 11 x64, want a fixed-size desktop window instead of a terminal, and would rather let the app install and verify yt-dlp, ffmpeg, ffprobe and deno than manage them yourself. Skip it if you are not on Windows x64, if you need a hosted or multi-user downloader, or if you want a plugin ecosystem. Before installing, read toolchain-policy.json to see which upstream hosts the resolver is allowed to fetch from, and check whether the toolchain-lock.json hashes match the revision you intend to run.

Frequently asked questions

What is yt-dlp-tauri?

It is a small Windows desktop app for downloading videos with yt-dlp without writing command-line options by hand. You paste a URL, preview metadata, choose a quality, and download an MP4-friendly file from a fixed-size desktop UI.

How do I install yt-dlp-tauri?

On Windows 10 or 11 x64 with WebView2, Node.js 24 or newer and Rust stable, run npm ci from the repository root, then npm run tauri dev to run it or npm run tauri build to produce an NSIS installer under src-tauri\target\release\bundle\nsis\. If tools are missing, the README says to open Settings and click Install tools.

Does yt-dlp-tauri manage yt-dlp updates itself?

Yes, in Managed mode. The app installs, updates, reinstalls and verifies complete app-managed toolchain revisions from Settings, resolving the stable toolchain from project-controlled immutable GitHub Release assets and staging and verifying each tool before atomic activation.

Can yt-dlp-tauri use my existing yt-dlp and ffmpeg installs?

Yes. Local mode searches the current process PATH for yt-dlp.exe and deno.exe plus one directory holding both ffmpeg.exe and ffprobe.exe, and the path controls can point at absolute locations. The app does not pin hashes or replace local executables, and the selected yt-dlp receives your URLs and Cookie file, so only trusted binaries should be configured.

What licence is yt-dlp-tauri under?

GPL-3.0-only, as declared in package.json and the LICENSE file. The repository also includes THIRD-PARTY-NOTICES.md and a third-party/ directory for component notices.

Official sources

  1. Chlience/yt-dlp-tauri on GitHub
  2. Issues
  3. License: GPL-3.0
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/chlience-yt-dlp-tauri.svg)](https://hysenlabs.com/projects/chlience-yt-dlp-tauri)