yt-dlp: The Command-Line Downloader That Outgrew Its Fork
A feature-rich command-line audio/video downloader
At a glance
- What is it?
- yt-dlp is a Python-based command-line downloader for thousands of sites, forked from youtube-dl. It adds aggressive format sorting, SponsorBlock, and plugin support, but its reliance on site-specific extractors means constant maintenance is the real cost.
- Who is it for?
- Adopt yt-dlp if you need a reliable, scriptable downloader for many sites and you are comfortable updating it frequently. Do not adopt it if you want a stable tool that works forever without maintenance, because site changes will break extractors.
- Can I use it commercially?
- Yes. Unlicense is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 16 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What yt-dlp Actually Solves
yt-dlp solves the problem of downloading media from sites that do not offer a direct download button. It is a command-line tool that handles video and audio extraction from thousands of sites, as the README states. The intended user is someone who scripts downloads, archives content, or needs media in a specific format without a browser. It is not for casual users who want a GUI. The project is a fork of youtube-dl, itself based on the inactive youtube-dlc. That lineage matters: it inherits a design where each site has a dedicated extractor, and the core value is the breadth of those extractors.
The Mechanism: Extractors, Format Sorting, and Post-Processing
The architecture is visible from the README's table of contents. yt-dlp does not download a page and parse it generically. Instead, each supported site has an extractor that knows the site's internal API or page structure. The tool then uses a format selection system to choose which stream to grab. The README lists format selection as a major section, with filtering and sorting options. That means you can ask for the best quality under a size limit, or prefer a specific codec. After download, post-processing can remux, embed metadata, or add thumbnails. There is also a SponsorBlock integration, which can skip sponsored segments in videos. The whole flow is driven by command-line options, and the README documents dozens of them, from network options to geo-restriction workarounds.
Getting It Running: Binaries, pip, and Update Paths
Installation is straightforward. The README lists three recommended binaries: a platform-independent zipimport binary for Linux and BSD, a standalone x64 executable for Windows 8 and later, and a universal macOS executable for 10.15 and later. For Linux, the zipimport binary needs Python installed. There are also standalone Linux binaries for glibc and musl, plus ARM variants. Windows users get a 32-bit and an ARM64 option as well. If you prefer a package manager, pip works, and the project is on PyPI. The README points to a wiki for detailed instructions. One important detail: some release files are marked "no auto-update." That means the unpackaged zip files do not self-update, so you must manually replace them. The main binaries, however, support self-update via a command, which is useful given how often sites change.
The Real Limitation: Extractors Break, and You Must Update
The biggest limitation is not a missing feature. It is the maintenance burden. yt-dlp depends on extractors that match a site's current HTML or API. When a site changes its layout, the extractor breaks. The project's release history shows a release every few weeks: 2026.08.19, 2026.07.04, 2026.06.09. That cadence is a direct consequence of sites changing. If you download a binary and never update it, it will eventually fail for popular sites. This is not a bug; it is the nature of the approach. The README even includes a section on extractor arguments, which let you pass site-specific parameters. That is a workaround for sites that need tweaks, but it does not remove the need to track upstream changes. For archival use, you must plan for regular updates.
Alternatives: youtube-dl and the Trade-Off in Maintenance
The obvious alternative is youtube-dl, the project yt-dlp forked from. youtube-dl has the same extractor-based design, but it is maintained by a different group and has a slower release cycle. The difference is in default behavior and features. yt-dlp's README has a section titled "Changes from youtube-dl" that lists new features and differences in default behavior. For example, yt-dlp likely sorts formats differently and includes SponsorBlock by default. If you need a tool that changes less often, youtube-dl might feel more stable. But that stability comes at the cost of fewer fixes and features. Another alternative is a site-specific tool like gallery-dl, but that focuses on image sites and does not have the same video format handling. The choice is between a fast-moving fork and a slower original. For most users, yt-dlp is the better bet, but you should know what you are giving up.
Configuration and Extensibility: netrc, Output Templates, and Plugins
The README shows that yt-dlp is not just a single command. It supports configuration files, including netrc for authentication. That is useful for sites that require login. The output template system lets you control filenames with variables, which is essential for scripting. You can embed metadata after download, and the README documents modifier commands for that. Plugins are a first-class feature: there is a section for installing and developing plugins. That means you can add your own extractors or post-processors without forking the project. The embeddability is also documented, with examples for using yt-dlp as a Python library. This makes it a viable component in a larger application. These features are not just extras; they are what separate yt-dlp from a simple curl wrapper.
Licence and Maintenance Cost
yt-dlp is released under the Unlicense, which means it is public domain. The README states this in the license badge. That has practical implications: you can use it in commercial projects without attribution, and you can modify it freely. There is no copyleft obligation. However, the maintenance cost is real. Because the tool is a moving target, you must track releases. The project provides an auto-update mechanism for the main binaries, which reduces the cost. But if you embed yt-dlp as a library, you are responsible for updating the dependency in your own code. The README's embedding examples show how to call it from Python, but they do not solve version pinning. The release notes, if you read them, will show frequent fixes for broken extractors. That is the price of supporting thousands of sites. For a small script, the cost is acceptable. For a long-term archival system, budget time for regular updates.
Editorial conclusion
Adopt yt-dlp if you need a reliable, scriptable downloader for many sites and you are comfortable updating it frequently. Do not adopt it if you want a stable tool that works forever without maintenance, because site changes will break extractors. Before relying on it, verify that the specific sites you care about are in the supported list and test the extractor arguments for any site that behaves oddly. The project's own release cadence is the clearest signal: if you cannot accept weekly or monthly updates, this tool is not for you.
Community notes