Releases: streamlink/streamlink
Streamlink 8.3.0
- Added: support for choosing the
--interfaceby name on non-Windows systems, with optional prefixes, similar to curl (#6862) - Added: support for also checking stream segments in
HLSStream.parse_variant_playlist()by settingcheck_streams="segments"(#6878) - Fixed: stdout/stderr streams in
ProcessOutputnot being fully line-buffered (#6868) - Updated plugins:
📦 Download and Installation
Please see the installation instructions for a list of available install methods and packages on the supported operating systems.
⚙️ Configuration and Usage
Please see the CLI documentation for how to configure and use Streamlink.
❤️ Support
If you think that Streamlink is useful and if you want to keep the project alive, then please consider supporting its maintainers by sending a small and optionally recurring tip via the available options.
Your support is very much appreciated, thank you!
🙏 Contributors
- 26: @bastimeyer
- 1: @espressogit
- 1: @streamlinkbot
🗒️ Full changelog
Test Account <216888017+espressogit@users.noreply.github.com> (1):
plugins.soop: migrate to sooplive.com
bastimeyer <mail@bastimeyer.de> (26):
cli.output.http: fix typing issues
docs: temporarily downgrade Sphinx to 8.x
session.http: support SO_BINDTODEVICE on *nix
tests: await HLS thread termination in more tests
tests: check CLI streamrunner logrecord threadName
tests: add test ID to HLSStream thread names
utils.processoutput: fix line-buffered output
docs: fix header icon sizes on install page
chore: set ty-specific type ignore comments
webbrowser: set py310 TemporaryDirectory kwargs
plugin.api.websocket: block double reconnect calls
plugins.nicolive: WS reconnect on HLS key failure
compat: rewrite charset_normalizer/chardet imports
stream.hls: fix iter_lines() type in M3U8Parser
plugins.radiko: fix HTTPSession.headers override
stream.hls: update check_streams param
tools: bump ruff to 0.15.9
tools: bump mypy to 1.20.0
chore: update and clean up .gitignore
tools: add ty 0.0.28 to "typing" dependency group
ci.github: add "ty check" step to typing job
docs: add "ty check" to developing page
ci.github: bump codecov-action to v6
script: add interface/proxy to test-plugin-urls.py
plugins.cdnbg: rewrite and fix plugin
plugins.telefe: rewrite plugin
streamlinkbot <streamlinkbot@users.noreply.github.com> (1):
session.http_useragents: update useragents
Streamlink 8.2.1
- Changed: HLS stream names using the "pixels" format to include framerate data, if available (#6848)
- Deprecated: imports of re-exported attributes from
streamlink.stream(#6821) - Fixed: plugin-related typing issues and missing typing annotations (#6822)
- Updated plugins:
📦 Download and Installation
Please see the installation instructions for a list of available install methods and packages on the supported operating systems.
⚙️ Configuration and Usage
Please see the CLI documentation for how to configure and use Streamlink.
❤️ Support
If you think that Streamlink is useful and if you want to keep the project alive, then please consider supporting its maintainers by sending a small and optionally recurring tip via the available options.
Your support is very much appreciated, thank you!
🙏 Contributors
- 45: @bastimeyer
- 1: @GiviMAD
- 1: @drticcz
- 1: @streamlinkbot
🗒️ Full changelog
Miguel Álvarez <miguelwork92@gmail.com> (1):
plugins.pluto: use v2 streams
Steinar H. Gunderson <steinar+git@gunderson.no> (1):
plugins.nrk: identify as tv-player v9
bastimeyer <mail@bastimeyer.de> (45):
stream: deprecate package exports
plugins: fix stream imports
plugin: add missing stream_weight typing info
plugins: fix stream_weight signatures and typing
plugin: add _get_streams() typing info
plugin: turn _get_streams() into an abstractmethod
plugin: add streams() typing info
plugin: add missing typing info
cli.output: fix file typing
logger: add getLogger(name) -> StreamlinkLogger
logger: replace all logging.getLogger() calls
tests: add logger class test for plugins
plugins: fix str typing issues
plugins: fix regex match typing issues
plugins.ustreamtv: fix typing
plugins.wwenetwork: fix typing and update matcher
plugins.oneplusone: pass through HLSStream arg
plugins.openrectv: fix login validation schema
plugins.filmon: fix HTTP error handling
plugins.mjunoon: fix typing
plugins.streann: fix typing
plugins.twitch: fix typing
tests.utils: monkeypatch detect_encoding
tools: bump ruff to 0.15.2 and fix issues
ci.github: get run-urls of preview-builds
chore: fix minor typing issues
ci.github: read html_url in preview-build workflow
docs: fix streamlink.stream API docs
plugins.twitch: switch to usher v2 endpoints
chore: add "UP" rules to ruff config
chore: fix UP035
chore: fix UP037
chore: fix UP028
chore: fix UP034
chore: fix UP041
chore: fix UP024
chore: fix UP006 and UP007
chore: fix UP030 and UP032
session.http_useragents: add version tuples
plugins.twitch: fix stream names on usher v2
stream.hls: set framerate attribute on StreamInfo
stream.hls: add framerate to pixels name if gt 30
chore: pass msg args to log.trace() calls
chore: pass msg args to log calls with obj repr
plugins.youtube: bump API clientVersion
drticcz <polak.jn@gmail.com> (1):
plugins.ceskatelevize: fix sports streams
streamlinkbot <streamlinkbot@users.noreply.github.com> (1):
session.http_useragents: update useragents
Streamlink 8.2.0
- Added:
--http-cookies-fileCLI argument andhttp-cookies-filessession option (#6796) - Changed:
PluginErrorto also be raised when setting a plugin'surlattribute to a value that doesn't match any of its URL matchers, not just when initializing the plugin class (#6810) - Deprecated: imports of re-exported module attributes from
streamlink.utils(#6819) - Fixed:
LogRecordmissing the function name and stack info (#6788) - Fixed: custom network interface being reset when disabling Diffie-Hellman key exchange (#6795)
- Fixed: broken logic when unsetting ipv4/ipv6 session options (#6795)
- Fixed: edge case when trying to detect the text encoding of certain kinds of HTML responses (#6802)
- Fixed: missing representation not being handled when polling dynamic DASH manifests (#6807)
- Updated plugins:
- dailymotion: disabled TLS session tickets, fixing 403 HLS playlist responses on Python builds with an older version of OpenSSL (#6816)
- Docs: bumped dependencies with support for Sphinx 9 (#6783)
- Docs: added rules for AI-assisted contributions (#6782)
- Build: added
typing-extensionsas a runtime dependency on Python 3.10, as it was already a transitive runtime dependency (viaexceptiongroup) that was used as a fallback import since 8.1.0 (#6813)
📦 Download and Installation
Please see the installation instructions for a list of available install methods and packages on the supported operating systems.
⚙️ Configuration and Usage
Please see the CLI documentation for how to configure and use Streamlink.
❤️ Support
If you think that Streamlink is useful and if you want to keep the project alive, then please consider supporting its maintainers by sending a small and optionally recurring tip via the available options.
Your support is very much appreciated, thank you!
🙏 Contributors
- 48: @bastimeyer
- 1: @streamlinkbot
🗒️ Full changelog
bastimeyer <mail@bastimeyer.de> (48):
docs: add support for Sphinx 9
ci.github: fix mypy docs step
ci.github: force py 3.12 on mypy docs step
logger: fix LogRecord func+sinfo init args
docs: add section about AI-assisted contributions
ci.github: replace if always() with !cancelled()
session.http: refactor interface session option
session.http: refactor ipv4/ipv6 session options
session.http: refactor disable-dh session option
session.http: fix lost interface on TLSNoDHAdapter
session.http: fix ipv4/ipv6 option unset logic
session.http: add --http-cookies-file
cli: wrap setup_session_options() exceptions
ci.github: also test build/docs on push
session.http: fix typing
session.options: refactor and fix typing
session.plugins: fix typing
session.session: rm unneeded type ignore comment
chore: fix typing issues in setup.py
chore: fix typing issues in build_backend
chore: fix typing issues in Sphinx extensions
chore: fix typing issues in scripts
webbrowser.cdp.client: mutable response_headers
utils.parse: fix unsuccessful encoding detections
utils.args: fix ge/gt/le/lt typing in num class
utils: fix minor typing issues
tests.stream: refactor ffmpegmux tests
cli.argparser: fix typing of ArgumentParser fixes
cli.output.player: fix PlayerArgsMeta typing
cli.console: fix typing
cli: fix minor typing issues
tests.stream: fix thread termination
tests: fix various minor typing issues
tests.utils: refactor dataclass tests
stream.dash: fix typing in manifest module
stream.dash: fix missing repr in worker's reload()
webbrowser.cdp: add CDPEvent base class
webbrowser.cdp: fix typing
plugin: move match check to url setter, fix typing
plugin.api: fix WebsocketClient typing
logger: fix typing
build: add typing-extensions runtime dep on py310
chore: remove error handling for typing imports
chore: minor typing fixes
utils.args: remove unneeded comparison protocols
tools: bump ruff to 0.15.0
plugins.dailymotion: disable TLS session ticket
utils: deprecate package exports
streamlinkbot <streamlinkbot@users.noreply.github.com> (1):
session.http_useragents: update useragents
Streamlink 8.1.2
- Fixed: warnings when parsing HLS playlists with private-use language subtags (#6780)
- Updated plugins:
- youtube: fixed live streams (#6777)
📦 Download and Installation
Please see the installation instructions for a list of available install methods and packages on the supported operating systems.
⚙️ Configuration and Usage
Please see the CLI documentation for how to configure and use Streamlink.
❤️ Support
If you think that Streamlink is useful and if you want to keep the project alive, then please consider supporting its maintainers by sending a small and optionally recurring tip via the available options.
Your support is very much appreciated, thank you!
🙏 Contributors
- 2: @bastimeyer
🗒️ Full changelog
bastimeyer <mail@bastimeyer.de> (2):
plugins.youtube: fix live streams
stream.hls: rm warning on private language subtags
Streamlink 8.1.1
- Fixed:
--stream-segmented-queue-deadlinenot being applied correctly to the Streamlink session options (#6758) - Changed:
--hls-segment-ignore-namesto not hardcode.tsHLS segment file name extensions (#6747) - Updated plugins:
- Build: removed unneeded
wheeldependency frombuild-system.requiresand thebuilddependency group (#6754)
📦 Download and Installation
Please see the installation instructions for a list of available install methods and packages on the supported operating systems.
⚙️ Configuration and Usage
Please see the CLI documentation for how to configure and use Streamlink.
❤️ Support
If you think that Streamlink is useful and if you want to keep the project alive, then please consider supporting its maintainers by sending a small and optionally recurring tip via the available options.
Your support is very much appreciated, thank you!
🙏 Contributors
- 26: @bastimeyer
- 1: @qwer-lives
- 1: @streamlinkbot
- 1: @yayokorea
🗒️ Full changelog
bastimeyer <mail@bastimeyer.de> (26):
tools: bump mypy to 1.19.1
tools: bump ruff to 0.14.10 and fix issues
chore: fix setuptools typing issues
build: remove wheel from build-system.requires
build: remove wheel from build dependency group
chore: fix setuptools typing issues again
cli: fix --stream-segmented-queue-deadline option
ci.github: bump actions/checkout to v6
ci.github: bump actions/setup-python to v6
ci.github: bump python-version to 3.14
ci.github: bump codecov/codecov-action to v5
ci.github: bump actions/upload-artifact to v6
ci.github: bump actions/download-artifact to v7
ci.github: bump peter-evans/create-pull-request
2026
ci.github: always run all lint steps
plugins.pluto: fix urlmatchers
plugins.pluto: rewrite ad detection
tools: bump ruff to 0.14.11 and fix issues
chore: reformat streamlink init module
stream.dash: fix DASHStreamWriter.write signature
validate: fix callable validation
validate: fix length validator
validate: fix various parse validators
tests: fix typing in validate package tests
plugins.dailymotion: fix 403 HLS playlist response
qwer-lives <jordigonzalezminombre@gmail.com> (1):
stream.hls: remove .ts ext from ignore_names regex
streamlinkbot <streamlinkbot@users.noreply.github.com> (1):
session.http_useragents: update useragents
yayo <jiwoowatch@gmail.com> (1):
plugins.soop: fix return_type for lg_cdn
Streamlink 8.1.0
- Deprecated:
--hls-segment-queue-thresholdin favor of--stream-segmented-queue-deadline(#6734) - Improved: debug logging of segmented streams (#6730)
- Updated plugins:
- twitch: fixed clips GQL API query (#6744)
- Tests: removed accidental
pytest_covdependency when running tests (#6727)
📦 Download and Installation
Please see the installation instructions for a list of available install methods and packages on the supported operating systems.
⚙️ Configuration and Usage
Please see the CLI documentation for how to configure and use Streamlink.
❤️ Support
If you think that Streamlink is useful and if you want to keep the project alive, then please consider supporting its maintainers by sending a small and optionally recurring tip via the available options.
Your support is very much appreciated, thank you!
🙏 Contributors
- 18: @bastimeyer
- 1: @streamlinkbot
🗒️ Full changelog
bastimeyer <mail@bastimeyer.de> (18):
tests: only load pytest_cov plugin in CI runners
stream.hls: turn NamedTuples into dataclasses
stream.segmented: hide repr of some segment attrs
utils: add FormattedDataclass meta class
stream.segmented: log queued segment in base class
plugins.twitch: fix redundant ad trace logging
stream.segmented: log fileext Segment property
tools: bump ruff to 0.14.6
stream.hls: refactor queue deadline logic
stream.hls: rename --hls-segment-queue-threshold
stream.segmented: move check_queue_deadline()
stream.segmented: fix _queue_last attr init
stream.segmented: send queued status to generator
stream.hls: refactor wait_and_reload()
tools: bump mypy to 1.19.0
tools: bump ruff to 0.14.7 and fix issues
stream.dash: improve representation lookup
plugins.twitch: fix clips GQL persisted query
streamlinkbot <streamlinkbot@users.noreply.github.com> (1):
session.http_useragents: update useragents
Streamlink 8.0.0
- BREAKING: dropped support for EOL Python 3.9 (#6674)
- BREAKING/API: removed deprecated
url_masterfromHLSStream/MuxedHLSStream(#6688) - BREAKING/dependencies: bumped version requirement of
urllib3to>=2.0.0(#6686) - Added:
--stream-segmented-durationin favor of--hls-duration(now deprecated), which affects HLS, DASH and other segmented stream types (#6705) - Added:
durationparameter todash://streams (DASHStream) (#6705) - Added:
--ffmpeg-validation-timeoutfor being able to increase the time for validating the FFmpeg executable (--ffmpeg-ffmpeg) (#6716) - Added: Flatpak player detection for VLC and mpv (#6717, #6723)
- Refactored: parts of the internal
SegmentedStream,HLSStreamandDASHStreamimplementations (WIP) (#6696, #6707, #6709) - Updated plugins:
- aloula: fixed livestream schema (#6662)
- btv: rewritten and fixed plugin (#6691)
- chzzk: added support for in-progress VODs via live-rewind streams (#6675)
- dlive: fixed streams expiring after 5 minutes (#6695)
- goodgame: updated matches, switched API endpoints (#6714)
- nhkworld: removed plugin (#6677)
- rtve: fixed validation schema (#6701)
- twitch: fixed access token acquirement and various persisted GraphQL query IDs (#6720, #6721)
- twitch: added
--twitch-supported-codecsfor access to higher quality streams (#5769)
- Dependencies: dropped optional
zstandarddependency on Python 3.14 and above (#6683) - Tests: bumped version requirement of
pytestto>=8.4.0(#6612) - Docs: refactored docs config and custom Sphinx extensions, added
makeoptions for disabling various components for offline building (#6668, #6669) - Docs: fixed compatibility with
docutils==0.22.2(#6699)
📦 Download and Installation
Please see the installation instructions for a list of available install methods and packages on the supported operating systems.
⚙️ Configuration and Usage
Please see the CLI documentation for how to configure and use Streamlink.
❤️ Support
If you think that Streamlink is useful and if you want to keep the project alive, then please consider supporting its maintainers by sending a small and optionally recurring tip via the available options.
Your support is very much appreciated, thank you!
🙏 Contributors
- 68: @bastimeyer
- 2: @streamlinkbot
- 1: @amurzeau
- 1: @oliviernes
- 1: @rishubil
🗒️ Full changelog
Alexis Murzeau <amubtdx@gmail.com> (1):
docs: fix compatibility with docutils==0.22.2
Nesswit <rishubil@gmail.com> (1):
plugins.chzzk: live-rewind for in-progress VODs
bastimeyer <mail@bastimeyer.de> (68):
tools: bump ruff to 0.13.0
chore: add "TC" rules to ruff config
tools: bump mypy to 1.18.1
session: fix HTTPSession typing
plugins.aloula: fix livestream schema
docs: reformat and clean up Sphinx's conf.py
docs: move custom extensions to docs/sphinxext
docs: remove ignored linting rules and fix issues
docs: bump furo to 2025.09.25
docs: add NO_ACKNOWLEDGEMENTS make option
docs: add NO_INTERSPHINX make option
docs: add NO_GITHUB_BUTTONS make option
docs: reformat acknowledgements section
docs: add JetBrains link to acknowledgements
tools: bump ruff to 0.13.2 and fix issues
tools: bump mypy to 1.18.2
stream.segmented: fix typing of writer queue
plugins.nhkworld: remove plugin
ci.github: remove -dev suffix from py314 runners
docs: use neutral example input URLs
tools: bump ruff to 0.14.1
ci.github: pycryptodome wheels on cp314-cp314t
plugins.btv: rewrite and fix plugin
plugins.dlive: refresh signed HLS playlist URL
cli: disable colored CLI usage text output
session.http: turn valid req args into a hashmap
stream.hls: refactor playlist reload
plugins.rtve: use xpath for data-setup attr
docs: replace debian bookworm with trixie
chore: drop support for Python 3.9
chore: fix typing issues after Python 3.9 drop
chore: fix linting issues after Python 3.9 drop
chore: drop static method dummy context bindings
cli: remove unneeded Path.resolve() workaround
utils.url: replace implicit URI scheme regex
chore: from typing import TypeAlias
stream.hls: remove deprecated url_master arg+attr
build: bump min version of urllib3 to 2.0.0
session.http: remove urllib3 1.x workaround
session.http: remove urllib3 1.x fallback import
session.http: remove urllib3 1.x pct enc override
tests.session.http: update percent encoding tests
build: skip urllib3[zstd] on py>=314
ci.github: drop zstandard temp-dep on cp314{,t}
tests: req pytest>=8.4.0, load plugins explicitly
ci.github: print pytest config in test runners
stream.segmented: count duration in worker
stream.segmented: add --stream-segmented-duration
stream.dash: add duration parameter
plugins.twitch: set ad segment duration to zero
stream.hls: move sequence counter to base class
stream.segmented: refactor sequence gap warning
stream.dash: use worker sequence, check gaps
stream.segmented: move check_sequence_gap()
stream.segmented: kw_only dataclasses
stream.segmented: move init+discontinuity attrs
stream.file: switch to pathlib
ci.github: use upstream brotli wheel on cp314
plugins.goodgame: fix plugin
plugins.twitch: new access_token GQL query
plugins.twitch: fix live stream and VOD metadata
plugins.twitch: fix clips metadata
cli.output.player: refactor PlayerArgs factory
cli.output.player: add flatpak detection
plugins.twitch: add --twitch-supported-codecs
stream.hls: warn on playlist_sequence access
docs: add flatpak section to players page
stream: fix HLS and DASH docstrings
oliviernes <olivier.nesme@gmail.com> (1):
cli: add --ffmpeg-validation-timeout option
streamlinkbot <streamlinkbot@users.noreply.github.com> (2):
session.http_useragents: update useragents
session.http_useragents: update useragents
Streamlink 7.6.0
- Added: official support for Python 3.14 (#6617)
- Added:
--skipfor stopping on existing file outputs without user prompts (#6633) - Added:
CDPClientSession.{apply,retrieve}_cookies()for copying cookies between Streamlink's HTTP session and the web browser (#6650) - Updated plugins:
- Docs: fixed compatibility with
docutils>=0.22(transitive dependency) (#6625)
📦 Download and Installation
Please see the installation instructions for a list of available install methods and packages on the supported operating systems.
⚙️ Configuration and Usage
Please see the CLI documentation for how to configure and use Streamlink.
❤️ Support
If you think that Streamlink is useful and if you want to keep the project alive, then please consider supporting its maintainers by sending a small and optionally recurring tip via the available options.
Your support is very much appreciated, thank you!
🙏 Contributors
- 28: @bastimeyer
- 2: @streamlinkbot
- 1: @lbrooney
- 1: @rishubil
🗒️ Full changelog
Liam Rooney <80072393+lbrooney@users.noreply.github.com> (1):
plugins.kick: add --kick-low-latency
Nesswit <rishubil@gmail.com> (1):
plugins.chzzk: add live playback
bastimeyer <mail@bastimeyer.de> (28):
plugins.lrt: rewrite and fix stream URL schema
tools: add back faster-cache mypy extra
tools: bump mypy to 1.17.0 and fix issues
tools: bump ruff to 0.12.3
plugins.indihometv: remove plugin
build: add Python 3.14 to package classifiers
tools: bump ruff to 0.12.5 and fix issues
docs: bump furo to 2025.07.19
tools: bump ruff to 0.12.7
tools: bump mypy to 1.17.1
docs: fix compatibility with docutils==0.22
cli: replace sys.exit() calls
cli: replace parser.error() call
plugins.mediaklikk: fix player data regex
cli: add --skip
plugins.lrt: fix channels schema
docs: add note about AUR mirror on GitHub
plugins.vkvideo: refactor, add VOD support
plugins.vkvideolive: rename vkvideo to vkvideolive
plugins.vkvideolive: add missing VOD qualities
tools: bump ruff to 0.12.11
chore: add "PTH" rules to ruff config
build: refactor setup.py
docs: add note about revoking Twitch OAuth tokens
webbrowser.cdp.client: apply/retrieve cookies
plugins.kick: use retrieve_cookies()
webbrowser.cdp.devtools: update to v0.0.1510116
webbrowser.cdp.client: fix page.navigate ret type
streamlinkbot <streamlinkbot@users.noreply.github.com> (2):
session.http_useragents: update useragents
session.http_useragents: update useragents
Streamlink 7.5.0
- Added:
--no-plugin-sideloadingfor disabling plugin sideloading from the default location (#6602) - Added:
--no-plugin-cachefor disabling cache file I/O of the plugin key-value store (#6602) - Improved: cache file I/O of the plugin key-value store (#6568)
- Changed: default log format on the
trace/alllog level, with included thread name (#6557) - Fixed: missing thread names for various segmented and muxed streams (#6556)
- Fixed: pipe write error log messages when muxing streams (#6558)
- Updated plugins:
- aloula: updated plugin matchers to support new URLs (#6572)
- goodgame: fixed HLS stream URLs (#6585)
- mitele: removed plugin (#6586)
- nowtvtr: restored plugin (#6560)
- twitcasting: updated plugin to filter out preroll ads (#6601)
- twitch: changed plugin to always filter out ads, deprecated
--twitch-disable-ads(#6579) - twitch: forced default User-Agent on access token API request (#6578)
- twitch: fixed clips validation schema (#6570)
- Docs: rearranged CLI arguments that are related to the plugin system (#6602)
- Build: removed
{dev,docs}-requirements.txtin favor of PEP 735 (#6596) - Build: bumped
lxmlrequirement to>=4.6.4,<7(lxml>=6now supports free-threaded mode) (#6587) - Tests: fixed test failures on Python 3.14.0b3 (#6589)
- Tests: fixed test failures in free-threaded mode (#6591, #6595)
📦 Download and Installation
Please see the installation instructions for a list of available install methods and packages on the supported operating systems.
⚙️ Configuration and Usage
Please see the CLI documentation for how to configure and use Streamlink.
❤️ Support
If you think that Streamlink is useful and if you want to keep the project alive, then please consider supporting its maintainers by sending a small and optionally recurring tip via the available options.
Your support is very much appreciated, thank you!
🙏 Contributors
- 46: @bastimeyer
- 1: @Hakkin
- 1: @streamlinkbot
🗒️ Full changelog
Hakkin Lain <hakkin@github> (1):
plugins.twitcasting: filter preroll segments
bastimeyer <mail@bastimeyer.de> (46):
ci.github: bump create-pull-request action
stream.ffmpegmux: make TSubstreams covariant
stream.hls: make MuxedHLSStream generic
stream.hls: return Self in parse_variant_playlist
stream: set specific names for each thread
cli: add thread name to trace logging format
stream.ffmpegmux: ign pipe write err on stream end
ci.github: temporarily disable py314 Linux runner
plugins.nowtvtr: restore plugin
cli: push console.close() to the atexit stack
tools: bump ruff to 0.12.0
tools: bump mypy to 1.16.1
plugins.twitch: fix clips validation schema
plugins.aloula: add aloula.sba.sa to URL matcher
tests.cli: require metavar for args with values
cli: add metavar to --fs-safe-rules
session.http: export and use DEFAULT user-agent
plugins.twitch: use default UA on access-token req
plugins.goodgame: fix plugin
plugins.mitele: remove plugin
build: bump lxml to >=4.6.4,<7
cache: rewrite and improve cache file I/O
cache: make get(), set() and get_all() thread-safe
chore: clarify debug/trace log in issue forms
chore: update issue form headers+footers
ci.github: add py314 Linux+Windows test runners
tests: fix pluginargument decorator test
tools: bump ruff to 0.12.1
tests: fix cache atomicity test
tests: fix test_schedule_save in Cache tests
buffers: set/clear event_free first
tests: make buffer reader/writer threads daemonic
tools: remove faster-cache mypy extra
ci.github: add free-threaded test runners
ci.github: add script for temp dep wheel installs
build: replace *-requirements.txt with PEP-735
ci.github: bump python in workflows to 3.13
ci.readthedocs: bump python to 3.13
cli: add --no-plugin-sideloading
plugin: add --no-plugin-cache
tests: improve assertion in argparser tests
cli: group options related to the plugin system
plugins.twitch: always filter out ads
docs: rewrite Twitch plugin docs page
plugins.twitch: remove ad daterange by attr check
plugins.twitch: add ad daterange/segment trace log
streamlinkbot <streamlinkbot@users.noreply.github.com> (1):
session.http_useragents: update useragents
Streamlink 7.4.0
- Added:
encodingkeyword to all HTTP request methods to override the response content encoding (#6544) - Added: debug log message for the available DASH periods (id or index) (#6521)
- Fixed:
LookupErrorwhen selecting an invalid DASH period (#6518) - Updated plugins:
- blasttv: new plugin (#6547)
- kick: fixed 403 API responses by solving the JS challenge using the webbrowser API (#6500)
- nicolive: fixed plugin metadata by forcing UTF-8 encoding (#6544)
- picarto: fixed validation schema and fixed multi-stream selection (#6512)
- tvp: rewritten and fixed plugin (#6535)
- twitcasting: fixed plugin by switching to new websocket+HLS streams (#6540)
- vtvgo: removed plugin (#6516)
- Tests: fixed py314 test failures (#6527)
- Tests: fixed some HLS tests failing in rare cases (#6536)
📦 Download and Installation
Please see the installation instructions for a list of available install methods and packages on the supported operating systems.
⚙️ Configuration and Usage
Please see the CLI documentation for how to configure and use Streamlink.
❤️ Support
If you think that Streamlink is useful and if you want to keep the project alive, then please consider supporting its maintainers by sending a small and optionally recurring tip via the available options.
Your support is very much appreciated, thank you!
🙏 Contributors
- 24: @bastimeyer
- 3: @streamlinkbot
- 1: @Lense
🗒️ Full changelog
Lense <git@lense.su> (1):
plugins.blasttv: new plugin
bastimeyer <mail@bastimeyer.de> (23):
plugins.kick: solve JS challenge
plugins.picarto: fix schema and multi-streams
plugins.vtvgo: remove plugin
tools: bump ruff to 0.11.8
stream.dash: fix LookupError on period selection
stream.dash: log available periods
tests: fix file I/O in tests.resources
tests: fix importlib loader changes in py314
ci.github: remove duplicate opt dep install step
ci.github: add py314 Linux runner
tools: bump ruff to 0.11.9
docs: add MSYS2 to packages list
docs: remove package maintainers list
tests: fix flaky HLS test
tests: update lxml validation error messages
plugins.tvp: rewrite and fix plugin
session.http: add encoding arg to request methods
plugins.nicolive: force utf-8 encoding
tools: bump ruff to 0.11.12
tools: bump mypy to 1.16.0 and fix issues
plugins.twitcasting: switch to llfmp4 and tc-hls
build: fix linting issues in build-and-sign.sh
build: set signing key expiration to 2027-06-07
streamlinkbot <streamlinkbot@users.noreply.github.com> (3):
session.http_useragents: update useragents
session.http_useragents: update useragents
session.http_useragents: update useragents