CLI tool
ytdl-org/youtube-dl avatar
ytdl-org/youtube-dl

youtube-dl: Command-Line Video Downloader for YouTube and Hundreds of Other Sites

Project brief: Command-line program to download videos from YouTube.com and other video sites.

141,397 stars10,657 forksPythonUnlicense

At a glance

What is it?
youtube-dl is a public-domain Python command-line program for downloading videos from YouTube and other video platforms. It requires Python 2.6, 2.7, or 3.2 or later, runs on Unix, Windows, and macOS, and carries no license restrictions. The last release was 2021.12.17 and the last push to the repository was on 2026-02-19, with no active release cycle.
Who is it for?
Developers who need a lightweight, dependency-minimal command-line video downloader can still use youtube-dl for sites where it works, since the Unlicense terms place no restriction on use or modification. Teams who need active maintenance, regular extractor updates, and ongoing site compatibility should use yt-dlp instead: it is a maintained fork with a similar interface.
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?
Activity is slowing. The repository last received commits 7 months 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 29, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What youtube-dl Does and What Sites It Supports

youtube-dl is a command-line program that downloads videos from YouTube and a range of other video platforms. The README describes it as a general-purpose video downloader: it supports hundreds of sites through a set of extractors, each targeting a specific platform. Running `youtube-dl --list-extractors` prints the names of all supported extractors in the installed version.

The program is written in Python and requires version 2.6, 2.7, or 3.2 or later. The README describes it as not platform specific, working on Unix systems, Windows, and macOS. It is released to the public domain under the Unlicense, meaning anyone can modify it, redistribute it, or use it without any license conditions.

The tool also handles playlists, with options to list playlist items without downloading them (`--flat-playlist`) or to skip failed downloads and continue the rest of a playlist (`-i, --ignore-errors`). The basic invocation is `youtube-dl [OPTIONS] URL [URL...]`, accepting one or more URLs at once.

Installing youtube-dl on Unix, macOS, and Windows

The README provides multiple installation paths. For Unix users (Linux, macOS, and other Unix systems), the simplest is a direct download using curl:

bash
sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl
sudo chmod a+rx /usr/local/bin/youtube-dl

If curl is not available, wget works in its place with similar syntax. Both commands download the latest version to /usr/local/bin and mark it executable.

For installation via pip:

bash
sudo -H pip install --upgrade youtube-dl

This also updates an existing installation. On macOS, Homebrew is supported:

bash
brew install youtube-dl

Or via MacPorts:

bash
sudo port install youtube-dl

Windows users can download a youtube-dl.exe file and place it on their PATH, excluding the System32 directory. The setup.py in the repository also supports building a standalone Windows executable using py2exe.

After installation, self-updating is available via `-U` or `--update`, which requires sufficient permissions and may need sudo on Unix systems.

Core Usage: Downloading, Updating, and Configuring

The README shows the basic invocation syntax:

bash
youtube-dl [OPTIONS] URL [URL...]

One or more video URLs can be passed as positional arguments. Configuration can be stored in a configuration file. On Linux and macOS, youtube-dl reads `~/.config/youtube-dl/config`. On Windows, it reads `%APPDATA%/youtube-dl/config.txt`. The `--config-location` flag accepts a custom path. Passing `--ignore-config` skips the config file entirely.

The `--list-extractors` flag prints all recognized site names, and `--extractor-descriptions` includes a description for each. The `--default-search PREFIX` option sets a prefix for unqualified search terms, so the tool can perform site searches rather than direct URL downloads. The `--mark-watched` option marks videos as watched on YouTube after downloading, while `--no-mark-watched` suppresses that behavior.

The README shows a comprehensive set of options including format selection, output templates, video selection for playlists, download rate limiting, and authentication for sites that require login. These options are documented in the README's OPTIONS section.

Network Options and Geo-Restriction Bypass

youtube-dl includes several network configuration options. Proxy support covers HTTP, HTTPS, and SOCKS proxies, set with `--proxy URL`. Passing an empty string `--proxy ""` forces a direct connection even if a proxy is set elsewhere. The `--socket-timeout SECONDS` option controls how long to wait before giving up on a connection. Client-side IP binding is available via `--source-address IP`.

IPv4 or IPv6 can be forced with `-4` (`--force-ipv4`) and `-6` (`--force-ipv6`) respectively. For geo-restricted content, `--geo-bypass` fakes the X-Forwarded-For HTTP header to bypass geographic restrictions. The `--geo-verification-proxy URL` option uses a separate proxy for IP verification without routing all traffic through it.

These options are relevant for users who need to download from behind a corporate proxy, from a restricted network, or from a location where certain content is geo-blocked.

Maintenance Status: No Release Since 2021

The most recent GitHub release is tagged 2021.12.17, dated 2021-12-16. The last push to the repository was on 2026-02-19. No releases have been made since December 2021, which means the extractor code, responsible for parsing each video platform's current HTML and API responses, has not been updated in over four years.

This matters because video platforms change their APIs, JavaScript, and page structure regularly. An extractor written in 2021 may fail against a platform's current output. The tool may still work for some sites and fail for others depending on whether those sites have changed their interface since the last update.

The Unlicense terms mean anyone can fork and update youtube-dl without restriction, which is how yt-dlp originated. The ytdl-org/youtube-dl repository itself has not had a maintenance release in the time since.

The repository includes CONTRIBUTING.md and developer instructions for those who want to write new extractors or fix existing ones. The setup.py, Makefile, and test/ directory are present for contributors who want to build and validate changes.

yt-dlp: The Fork with Current Extractor Support

yt-dlp is a separate project that started from the youtube-dl codebase. Unlike youtube-dl, it receives frequent extractor updates aligned with the changes that video platforms make to their APIs and page structure. The two share the same command-line interface, so commands that work with `youtube-dl` work with `yt-dlp` after replacing the command name.

Teams that depend on video downloads in automated pipelines and encounter broken extractors in youtube-dl typically switch to yt-dlp for this reason. The last release of youtube-dl was in 2021; yt-dlp has had many releases since then.

yt-dlp also adds features not present in the original, including improved cookie handling for authenticated downloads, additional format selection controls, and the ability to write output to external metadata files. For users whose workflows depend on specific youtube-dl command syntax, testing the equivalent yt-dlp command before migrating is advisable, since there are edge cases where behavior differs. For most straightforward downloads, the switch is transparent.

Editorial conclusion

Developers who need a lightweight, dependency-minimal command-line video downloader can still use youtube-dl for sites where it works, since the Unlicense terms place no restriction on use or modification. Teams who need active maintenance, regular extractor updates, and ongoing site compatibility should use yt-dlp instead: it is a maintained fork with a similar interface. Before deploying either tool in a production pipeline, verify that the specific site you need to download from has a working extractor by running `youtube-dl --list-extractors` against your current installation.

Frequently asked questions

Is YouTube-dl still working?

The tool may work for some sites but not others. The last release was 2021.12.17 and no extractor updates have been released since then. Sites that changed their APIs or page structure after December 2021 may cause failed downloads. yt-dlp is the actively maintained fork with current extractor support.

How do you install youtube-dl?

On Unix systems, run `sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl && sudo chmod a+rx /usr/local/bin/youtube-dl`. On macOS, `brew install youtube-dl` works via Homebrew. On any platform, `sudo -H pip install --upgrade youtube-dl` installs via pip.

What is the replacement for YouTube-dl?

yt-dlp is the most widely used alternative. Unlike youtube-dl, it receives regular extractor updates as video platforms change their APIs. The command-line interface is the same, so replacing `youtube-dl` with `yt-dlp` in most commands works without further changes.

Is YouTube-dl the same as yt-dlp?

No. yt-dlp started from the youtube-dl codebase and shares its command-line interface, but the two are separate projects. yt-dlp has received extractor updates and new features that youtube-dl has not received since its last release in 2021.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
For maintainers

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/ytdl-org-youtube-dl.svg)](https://hysenlabs.com/projects/ytdl-org-youtube-dl)
Community notes

Community notes