Streamlink: plugin-per-service stream piping into VLC by default
Streamlink is a CLI utility which pipes video streams from various services into a video player
At a glance
- What is it?
- Streamlink is a Python command-line tool and library that extracts streams from services such as Twitch and YouTube and hands them to a player, a file, or a metadata reader. What the repository root actually commits to is a plugin system, one quickstart command, a Python 3.10 floor, and no install command, only links to the install documentation.
- Who is it for?
- Streamlink fits people who already run Python 3.10 or newer, already have a player installed, and have one specific service in mind, and who will read the install and CLI docs to fill the gaps the README leaves open. It fits badly if you want a single bundled download, or a stated answer about which services work.
- Can I use it commercially?
- Yes. BSD-2-Clause 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 2 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 November 13, 2026, and from our analysis. They are not legal advice.
Star history
- streamlink/streamlink11,921 ★ · +140
| Repository | 2026-09-22 | 2026-11-13 |
|---|---|---|
| streamlink/streamlink | 11.8k | 11.9k |
140 Stars in the last 52 days, measured from the daily GitHub snapshot. Compare with other projects
Editorial analysis
The quickstart reduces Streamlink to two arguments
The quickstart is one line: `streamlink "STREAMURL" best`. Two arguments, a quoted stream address and a bare quality token, and the rest of the behavior is implied rather than stated. The project's own framing of itself is narrow and worth repeating accurately: a Python library and command-line interface which pipes streams from various services into a video player, with the stated aim of avoiding resource-heavy and unoptimized websites while still enjoying streamed content. That is an argument about page weight and site design, not a claim about bandwidth or picture quality. What the line also makes clear is the shape of the work. Nothing happens until you already hold a specific stream URL, and this file never defines what the second argument resolves to.
streamlink "STREAMURL" bestVLC is the default sink and the README names two other destinations
Playback defaults to VLC, and the file links straight to the VLC project rather than bundling anything, so the player is a program that has to already exist on your machine before a stream appears. The same paragraph names two other places the data can go: writing the stream to the filesystem, and reading stream metadata. That is the entire commitment about outputs made here, so any concrete flag, output filename template, or metadata field name has to be looked up in the CLI documentation rather than inferred from this page. The consequence for anyone planning a recording workflow is that the quickstart proves only that the tool connects. It does not tell you where a file lands, what it is named, or what a quality token picks, and those are the details a scheduled job depends on.
Service support is delegated entirely to the plugin list
Coverage is deliberately handed off. Streamlink is built on top of a plugin system which allows support for new services to be added easily, and exactly two services are named as popular and supported, Twitch and YouTube, followed by and many more. The complete roster lives on a separate plugins page. The question that matters most to a new user, does this work with my site, is therefore never answered in the repository root, and the answer can move as plugins come and go between releases. The practical consequence is that support is a property of the plugin list at the exact version you installed rather than a fixed feature of the tool. A script written against today's working URL can break on a later update without the core program changing at all.
The 2016 fork from Livestreamer still shapes what you find when you search
The history line is short but load-bearing: Streamlink was forked in 2016 from the abandoned Livestreamer project. Anyone arriving with an old answer, an old bug report, or an old configuration file is reading about a different codebase under a different name, and the command that code registered was not this one. The current entry point follows the fork, and setup.py registers it under the Streamlink name only. Beyond that single sentence, nothing in the file explains what carried across and what did not, so an inherited Livestreamer-era setup has to be checked against the current CLI documentation option by option. The project's own year for its origin is 2016, which is the date to filter older material on.
Installation is four documentation links and not one command
This is the largest hole in the file. The installation section contains no command of any kind. It asks you to look at the documentation and points at four destinations, a Windows page, a macOS page, a Linux and BSD page, and a page for the PyPI package and source code, and all four are anchors inside a single install document rather than four competing methods spelled out here. So the repository root cannot tell you whether a system package manager is involved, whether an isolated environment gets created for you, what a Windows build ships, or what the PyPI anchor installs by default. Open the page for your own platform and read it end to end. Treating the PyPI anchor as a stand-in for the other three leaves the dependency story, the update story, and the uninstall story entirely to guesswork.
The Python 3.10 floor is a hard exit, and the build steps off the default backend
The floor is declared in metadata and enforced in code. pyproject.toml sets `requires-python = ">=3.10"`, and the classifier list names Python 3.10, 3.11, 3.12, 3.13, 3.14, and 3.15 under a 3-only marker, with the project classified as Development Status :: 5 - Production/Stable. setup.py repeats the same requirement as a tuple and exits before doing anything else when the running interpreter is older, printing a boxed message that names a second cause, since a pip too old to understand the python_requires classifier lets the install start and you meet the error at this point instead. The build itself also steps off the stock backend:
[build-system]
requires = [
"setuptools >=77",
# The versioningit build-requirement gets removed from the source distribution,
# as the version string is already built into it (see the onbuild versioningit hook):
"versioningit >=2.0.0,<4", # disabled in sdist
]
# setuptools build-backend override
# https://setuptools.pypa.io/en/stable/build_meta.html
backend-path = ["build_backend"]
build-backend = "__init__"A backend path inside the repository and a module name in place of an installed backend mean the build front end has to support that indirection, and the version-computing requirement is dropped from the source distribution because the version string is already built into it.
Windows wheels register a second entry point under a different name
Two names ship, and which one you get depends on the wheel that was built. For an ordinary build setup.py registers a single console script. When the build targets Windows, the check accepts only the platform names win32, win-amd64, and cygwin, and a second entry point in the gui_scripts group is registered next to it, pointing at the same main function.
entry_points = {
"console_scripts": ["streamlink=streamlink_cli.main:main"],
}
if is_wheel_for_windows(sys.argv):
entry_points["gui_scripts"] = ["streamlinkw=streamlink_cli.main:main"]The consequence is a small asymmetry worth knowing before you type a command on Windows and find nothing happens. pyproject.toml lists version, entry points, and scripts as dynamic values, meaning the concrete names are assembled during the build rather than written where you would expect to read them.
No legality statement, no rollback procedure, no version pinning advice
Two questions that people genuinely ask get no answer anywhere in this file. The first is legal exposure, and the project makes no statement about the legality of capturing streams; the framing about avoiding resource-heavy and unoptimized websites is a comment on how those sites are built and says nothing about terms of service or the law where you live. The second is recovery. A changelog file sits at the repository root and the header links a changelog page, but no procedure is given for pinning, reverting, or rolling back a release, so a regression is yours to diagnose and undo. The release dates show the pace: 8.6.1 on 2026-09-16, 8.6.2 on 2026-10-07, and 8.6.3 on 2026-10-29. The most recent push to the default branch landed on 2026-11-01, so active work is not the problem here.
Editorial conclusion
Streamlink fits people who already run Python 3.10 or newer, already have a player installed, and have one specific service in mind, and who will read the install and CLI docs to fill the gaps the README leaves open. It fits badly if you want a single bundled download, or a stated answer about which services work. Before you commit, open the plugins page and look for your service, then pin a release instead of tracking master, because 8.6.1, 8.6.2 and 8.6.3 landed on 2026-09-16, 2026-10-07 and 2026-10-29 and the README gives no rollback procedure.
Frequently asked questions
What does Streamlink do?
It is a Python library and command-line interface that pipes streams from various services into a video player, so you can avoid resource-heavy and unoptimized websites while still enjoying streamed content.
how to use streamlink
The quickstart is a single command taking a quoted stream URL and a quality token: streamlink "STREAMURL" best. Everything past that lives in the CLI documentation the README links to.
how to use streamlink with vlc
VLC is the default playback target and is linked as an external player rather than bundled. The README also names writing the stream to the filesystem and reading stream metadata as alternative output methods.
how to install streamlink on mac
The README gives no installation commands at all. It links to a macOS section of the install documentation, alongside separate pages for Windows, Linux and BSD, and the PyPI package and source code.
Is Streamlink legal to use?
The README takes no position on legality. It describes the tool as a way to avoid resource-heavy and unoptimized websites, which is a statement about site design rather than about terms of service or the law.
Official sources
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.
[](https://hysenlabs.com/projects/streamlink-streamlink)Star history chart for your README
[](https://hysenlabs.com/projects/streamlink-streamlink)Was this useful?