Skip to content

Releases: streamlink/streamlink

Streamlink 8.3.0

10 Apr 12:39

Choose a tag to compare

  • Added: support for choosing the --interface by 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 setting check_streams="segments" (#6878)
  • Fixed: stdout/stderr streams in ProcessOutput not being fully line-buffered (#6868)
  • Updated plugins:
    • cdnbg: rewritten and fixed plugin (#6890)
    • nicolive: added websocket reconnect attempts on HLS decryption key retrieval failure (#6871)
    • soop: migrated to sooplive.com (#6876)
    • telefe: rewritten and fixed plugin (#6891)

📦 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

🗒️ 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

05 Mar 12:54

Choose a tag to compare

  • 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:
    • ceskatelevize: fixed sports streams (#6826)
    • nrk: updated to tv-player v9 (#6841)
    • pluto: updated to v2 API (#6851)
    • twitch: switched to Usher v2 API endpoints (#6840, #6847)
    • youtube: updated API clientVersion (#6853)

📦 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

🗒️ 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

09 Feb 17:45

Choose a tag to compare

  • Added: --http-cookies-file CLI argument and http-cookies-files session option (#6796)
  • Changed: PluginError to also be raised when setting a plugin's url attribute 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: LogRecord missing 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-extensions as a runtime dependency on Python 3.10, as it was already a transitive runtime dependency (via exceptiongroup) 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

🗒️ 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

18 Jan 12:21

Choose a tag to compare

  • 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

🗒️ Full changelog

bastimeyer <mail@bastimeyer.de> (2):
      plugins.youtube: fix live streams
      stream.hls: rm warning on private language subtags

Streamlink 8.1.1

17 Jan 21:44

Choose a tag to compare

  • Fixed: --stream-segmented-queue-deadline not being applied correctly to the Streamlink session options (#6758)
  • Changed: --hls-segment-ignore-names to not hardcode .ts HLS segment file name extensions (#6747)
  • Updated plugins:
    • dailymotion: fixed 403 HLS playlist responses (#6773)
    • pluto: fixed url matchers and ad detection (#6767)
    • soop: fixed CDN mapping for ld_cdn based regions (#6749)
  • Build: removed unneeded wheel dependency from build-system.requires and the build dependency 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

🗒️ 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

14 Dec 18:07

Choose a tag to compare

  • Deprecated: --hls-segment-queue-threshold in 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_cov dependency 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

🗒️ 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

11 Nov 16:12

Choose a tag to compare

  • BREAKING: dropped support for EOL Python 3.9 (#6674)
  • BREAKING/API: removed deprecated url_master from HLSStream/MuxedHLSStream (#6688)
  • BREAKING/dependencies: bumped version requirement of urllib3 to >=2.0.0 (#6686)
  • Added: --stream-segmented-duration in favor of --hls-duration (now deprecated), which affects HLS, DASH and other segmented stream types (#6705)
  • Added: duration parameter to dash:// streams (DASHStream) (#6705)
  • Added: --ffmpeg-validation-timeout for 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, HLSStream and DASHStream implementations (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-codecs for access to higher quality streams (#5769)
  • Dependencies: dropped optional zstandard dependency on Python 3.14 and above (#6683)
  • Tests: bumped version requirement of pytest to >=8.4.0 (#6612)
  • Docs: refactored docs config and custom Sphinx extensions, added make options 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

🗒️ 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

08 Sep 17:20

Choose a tag to compare

  • Added: official support for Python 3.14 (#6617)
  • Added: --skip for 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:
    • chzzk: added support for live streams with a wider content availability window (#6652)
    • indihometv: removed plugin (#6615)
    • kick: added --kick-low-latency (#6605)
    • lrt: fixed plugin (#6608, #6637)
    • mediaklikk: fixed plugin (#6629)
    • vkvideo: renamed to vkvideolive, added VOD support (#6640, #6642)
  • 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

🗒️ 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

08 Jul 19:23

Choose a tag to compare

  • Added: --no-plugin-sideloading for disabling plugin sideloading from the default location (#6602)
  • Added: --no-plugin-cache for 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/all log 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.txt in favor of PEP 735 (#6596)
  • Build: bumped lxml requirement to >=4.6.4,<7 (lxml>=6 now 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

🗒️ 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

08 Jun 17:51

Choose a tag to compare

  • Added: encoding keyword 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: LookupError when 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

🗒️ 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