Website review
This review may include AI-generated content and is not individually verified. Domain, certificate and other facts come from the observed data on this page.
What is Streamlink?
Streamlink is a free, open-source command-line utility that takes a video stream from a supported service and pipes it directly into a video player such as VLC or mpv, instead of playing it in a browser. Its stated purpose is to avoid resource-heavy, unoptimized websites while still letting you watch streamed content. The project is a maintained fork of the discontinued Livestreamer and is distributed under a Simplified BSD license.
What it actually does
- Extracts streams from services through a plugin system; the documentation names Twitch and YouTube among the popular supported services, with a full plugin list on its plugins page.
- Hands playback to your player. By default it opens streams in VLC. A typical command is
streamlink twitch.tv/CHANNEL best, which lists available qualities (fromaudio_only/worstup tobest) and opens the chosen one. - Exposes a Python API for developers who want direct access to stream data rather than the CLI.
Who it suits
- Viewers on weaker hardware who want a lightweight player instead of a busy web page—this is the core audience the tool is designed for.
- People who prefer keyboard-driven, scriptable workflows over clicking through a site.
- Developers building tools on top of stream data via the library API.
Trade-offs to weigh
It is a command-line tool, so there is a learning curve and no graphical interface; you also need a compatible player installed. Stream extraction depends on plugins, so support for a given service can vary or break when that service changes. If you mainly want a simple click-and-watch experience, a browser is easier; Streamlink pays off when you value low resource use, quality selection, and automation.
Next step
If you want to try it, check the User guide's installation section for your platform (Windows, macOS, Linux/BSD, or the PyPI package), then run the quickstart command above with a channel you follow and confirm VLC launches.
How do I install Streamlink on Windows, macOS, or Linux?
Streamlink installs differently on each platform: Windows has a standalone binary, macOS is easiest through Homebrew, and Linux varies by distribution or can use pipx. The project's own documentation lists Windows, macOS, Linux/BSD, PyPI, and source options, with a separate user guide for full instructions. All are free; Streamlink is Simplified BSD–licensed software.
Windows
Download the Windows binary from the official release page, unpack it, and run streamlink.exe from a terminal. There is no installer to step through, so keep the folder somewhere permanent and add it to your PATH if you want to call streamlink from any directory. VLC, the default player, should be installed first.
macOS
Homebrew is the least fussy route: brew install streamlink. If you prefer isolation or a specific version, use pipx install streamlink instead. Both avoid touching the system Python.
Linux and BSD
Check your distribution's package first (the docs have a package-availability section). If your distro lags behind, pipx install streamlink gives you the current release in its own environment. AppImages are also offered for a portable option.
| Situation | Best fit | Trade-off |
|---|---|---|
| Windows, no Python | Release binary | Manual PATH setup; update by re-downloading |
| macOS, Homebrew user | brew install streamlink |
Updates lag behind upstream releases |
| Any OS, want isolation | pipx install streamlink |
Requires Python and pipx |
| Linux, stable distro | Distro package | Often an older version |
| Developer embedding streams | PyPI library | You manage dependencies yourself |
Verify and try it
Run streamlink --version, then test with the documented example: streamlink twitch.tv/CHANNEL best. If streams open in VLC, the install is working. If the command isn't found, the binary folder or pipx bin directory isn't on your PATH — the most common first-run snag on Windows.
For developers, the same install provides the Python API, so no separate step is needed. The project's GitHub releases page and PyPI listing are the canonical places to confirm the current version before installing.
How can I play a Twitch or YouTube stream in VLC or mpv using Streamlink?
Use Streamlink's command line: give it a stream URL and a quality name, and it extracts the stream and opens it in your player. The default player is VLC, so streamlink twitch.tv/CHANNEL best finds the Twitch plugin, lists available qualities, and starts playback at the highest one. To use mpv instead, add --player mpv, or set it permanently in a configuration file so you do not repeat the flag.
Typical commands
- Twitch, best quality in VLC:
streamlink twitch.tv/CHANNEL best - Twitch in mpv:
streamlink --player mpv twitch.tv/CHANNEL best - A specific quality: replace
bestwith a listed name such as720p60oraudio_only - YouTube: same form, e.g.
streamlink "https://www.youtube.com/watch?v=ID" best
Run the command once without a quality (or check the "Available streams" line in the output) to see which names that particular stream offers; names differ between services and live versus recorded content. Quote URLs containing ? or & so your shell does not split them.
Who this suits
This is for people who want the stream in a lightweight player rather than a browser tab: lower memory and CPU use, keyboard-driven controls in mpv, or playback on a machine with a weak browser. It is less convenient if you rely on the website's chat, recommendations or account features, since those live in the browser, not the player. Streamlink's own documentation notes the project is a fork of the unmaintained Livestreamer and is free software under a Simplified BSD license.
Practical notes
- Authentication: some streams (subscriber-only Twitch content, for example) need credentials passed via
--twitch-oauth-tokenor similar plugin options; check the plugin's section in the documentation. - If playback fails, the likely causes are a stale plugin for a changed service, a missing player on your PATH, or a region-restricted stream.
- Developers who want the stream data directly can use the Python API instead of the CLI.
As a next step, read the Quickstart and the plugin-specific pages at Streamlink documentation, and install mpv from mpv or VLC from VideoLAN if neither is present.
How do I configure Streamlink's settings with a configuration file?
Streamlink reads options from a configuration file so you don't have to type the same flags on every run. Put one option per line in a plain-text file, written the same way you'd write it on the command line but without the leading streamlink command. For example, a file containing:
player=mpv
player-args=--fullscreen
hls-live-edge=2
sets mpv as the player, passes it a fullscreen flag, and changes the live-edge buffer for HLS streams. Then run streamlink twitch.tv/CHANNEL best and those settings apply.
Where the file goes
Streamlink looks in a default location per platform (on Linux and macOS typically under ~/.config/streamlink/config, on Windows under %APPDATA%\streamlink\config), and it also accepts an explicit --config FILE argument to point at any file. If you keep several setups—say, a lightweight one for a laptop and a high-quality one for a desktop—separate config files selected with --config are cleaner than editing one file back and forth.
What belongs in it
Good candidates are stable preferences: your preferred player and player arguments, default stream sorting, proxy settings, and per-plugin options. Stream-specific choices like a resolution are better left on the command line, since they change per session. Because the file is read before command-line flags, anything you pass on the command line overrides the file—useful for one-off exceptions.
A practical next step
Start small: create the file with just player=mpv (or vlc), run one stream, and confirm the player opens. Then add one option at a time, checking the command-line reference for exact option names, so a typo doesn't silently fall back to defaults. If a setting seems ignored, verify you're editing the file Streamlink actually reads for your platform, or pass --config explicitly to remove the doubt.
For installation paths and platform-specific defaults, the project's own guide at Streamlink documentation is the authoritative reference; player-specific flags belong in the documentation for mpv or VLC.
How can I use Streamlink's Python API to access stream data programmatically?
Start with the library API, not the CLI. Streamlink's own overview says it ships two parts—a command-line tool and a library API—and that the API exists for developers who want direct access to stream data. In practice you import Streamlink in Python, resolve a URL to a plugin, list the available streams, then open one as a stream object and read from it or hand it to your own player/processing pipeline. The CLI example in the docs shows the same flow conceptually: it finds a matching plugin for the URL, prints the available streams (audio-only, 160p through 1080p60), and opens the best one via HLS.
A practical scenario
Suppose you want a small script that checks whether a channel is live, records the best quality to disk, or feeds audio into a transcriber. The library route lets you do that without shelling out to a subprocess and parsing log lines. Your script decides the quality, the output file, and what happens on errors—Streamlink only supplies the stream data.
Decision criteria
- Use the CLI when you just want to watch in VLC or mpv, or schedule a simple recording. It already defaults to playing in VLC and handles plugin matching for you.
- Use the Python API when you need programmatic control: selecting streams by name, post-processing, serving to a custom player, or integrating into a larger app.
- Check plugin coverage first. Support comes from a plugin system, so a given service works only if a plugin exists. Confirm your target site is in the plugins list before designing around it.
Next step
Read the "library API" section of the User guide at Streamlink documentation for the exact classes and call signatures, and check the plugins page for your service. The project is free software under a Simplified BSD license, so you can inspect and adapt the source on GitHub if a plugin needs tweaking. For installing the package itself, PyPI lists the official distribution.
How do I add support for a new streaming service through Streamlink's plugin system?
Streamlink's plugin system is the mechanism for adding a new streaming service: you write a plugin that matches a service's URLs and resolves them to playable stream URLs, and the CLI or Python API then pipes those streams to a player. The documentation presents this as the project's core extension point, with plugins bundled for services such as Twitch and YouTube and a plugins page listing what ships by default. It does not, on the page shown, spell out the plugin-authoring steps, so treat the following as general guidance and check the plugin API reference in the user guide before writing code.
What a plugin has to do
A Streamlink plugin is a Python module that performs two jobs:
- URL matching. Declare which URLs belong to the service, so
streamlink <url> <quality>finds the right plugin automatically. The quickstart output shows this in action: the CLI reports "Found matching plugin twitch for URL twitch.tv/CHANNEL" before listing available qualities. - Stream resolution. Query the service and return the available streams with names and quality labels (the example lists
audio_only,160p (worst)through1080p60 (best)), so the user can pick one or acceptbest.
Because the CLI and the library API are separate parts of Streamlink, a plugin you write is usable both from the command line and from Python code that wants the stream data directly.
A practical path to a first plugin
- Read the plugin section of the user guide and the plugin API reference for the required base class, URL-matching rules and stream-return format.
- Start from an existing bundled plugin for a service with a similar streaming setup (HLS vs. DASH, token handling, geo-restrictions) rather than from scratch.
- Develop with plugin sideloading, which the table of contents lists, so you can iterate on your plugin without modifying an installed package.
- Test with a real URL:
streamlink <service-url> bestshould find your plugin, list qualities, and open the player (VLC by default) — or use--stream-url/the API if you want to inspect the resolved URL instead of playing it.
Decision criteria before you build
- Is a plugin the right layer? If the service already exposes a direct stream URL, a generic player or yt-dlp-style tool may be enough; a plugin earns its keep when URL matching, authentication or quality enumeration need service-specific logic.
- Maintenance cost. Service APIs and page structures change; a plugin is code you own and must fix when the service changes. Check whether an existing bundled plugin already covers the service before adding another.
- Distribution. Sideloaded plugins are local to your setup; contributing upstream means following the project's contribution process on GitHub, where the repository, issue tracker and discussions live.
For the exact API contract, the plugin authoring section of the Streamlink documentation is the authoritative next read; the overview page is the orientation, not the reference.
User reviews (0)