GitHub
06/15/2026, 6:00 PM26.1.0
Highlights
Given how long this release took, it's pretty thicc with nice things all over the board! Apologies for the long release cycle; it's been a victim of the slopocalypse and me trying to navigate my way thru the new normal. Extra big thanks to my sponsors for not abandoning me in these unironically trying times. ❤️
Full changelog below!
Special Thanks
This release would not be possible without my generous sponsors! Thank you to all of you making sustainable maintenance possible! If you would like to join them, go to https://github.com/sponsors/hynek and check out the sweet perks!
Above and Beyond
Variomedia AG (@variomedia), Tidelift (@tidelift), Kraken Tech (@kraken-tech), Klaviyo (@klaviyo), Privacy Solutions GmbH (@privacy-solutions), FilePreviews (@filepreviews), Ecosystems (@ecosyste-ms), TestMu AI Open Source Office (Formerly LambdaTest) (@LambdaTest-Inc), GitHub (@github), Doist (@Doist), Daniel Fortunov (@asqui), and Kevin P. Fleming (@kpfleming).
Maintenance Sustainers
Buttondown (@buttondown), Christopher Dignam (@chdsbd), Magnus Watn (@magnuswatn), David Cramer (@dcramer), Rivo Laks (@rivol), Polar (@polarsource), Mike Fiedler (@miketheman), Duncan Hill (@cricalix), Colin Marquardt (@cmarqu), Pieter Swinkels (@swinkels), Nick Libertini (@libertininick), Brian M. Dennis (@crossjam), Al Sweigart (@asweigart), Celebrity News AG (@celebritynewsag), The Westervelt Company (@westerveltco), Sławomir Ehlert (@slafs), Mostafa Khalil (@khadrawy), Filip Mularczyk (@mukiblejlok), Thomas Klinger (@thmsklngr), Andreas Poehlmann (@ap--), August Trapper Bigelow (@atbigelow), Carlton Gibson (@carltongibson), and Roboflow (@roboflow).
Full Changelog
Removed
• Python 3.8 and 3.9 support.
Deprecated
• Support for better-exceptions is deprecated and will be removed within a year. Use our Rich integration or copy-paste the one line of code you need. #802
Added
• Python 3.15 support. #813
•for Rich-based monochrome exception rendering and add support for it throughoutstructlog.dev.rich_monochrome_tracebackwhen the user asks for no colors. #794structlog.dev.ConsoleRenderer
•now has astructlog.BytesLoggerattribute which allows you to use it with thenameprocessor without using the standard library integration. #786structlog.stdlib.add_logger_name()
•now supportsstructlog.processors.CallsiteParameterAdderthat adds the qualified import name of the module of the callsite, orCallsiteParameter.QUAL_MODULEif the module is the entry point. This is only available for structlog-originated events since the standard library has no equivalent (except for the convention of setting the logger's name to__main__). #812__name__
•now hasstructlog.stdlib.BoundLoggerandis_enabled_for()methods that are snake_case aliases for itsget_effective_level()andisEnabledFor()methods. This makes it more compatible with the nativegetEffectiveLevel(), so you can swap configurations without changing your call sites. #818structlog.typing.FilteringBoundLogger
Changed
•... (truncated) Changelog Sourced from structlog's changelog.does not warn anymore when thestructlog.dev.ConsoleRendererkey has a rendered value despite having a fancy formatter configured. #790exception
26.1.0 - 2026-06-06
Removed
• Python 3.8 and 3.9 support.
Deprecated
• Support for better-exceptions is deprecated and will be removed within a year. Use our Rich integration or copy-paste the one line of code you need.#802
Added
• Python 3.15 support.#813
•for Rich-based monochrome exception rendering and add support for it throughoutstructlog.dev.rich_monochrome_tracebackwhen the user asks for no colors.#794structlog.dev.ConsoleRenderer
•now has astructlog.BytesLoggerattribute which allows you to use it with thenameprocessor without using the standard library integration.#786structlog.stdlib.add_logger_name()
•now supportsstructlog.processors.CallsiteParameterAdderthat adds the qualified import name of the module of the callsite, orCallsiteParameter.QUAL_MODULEif the module is the entry point. This is only available for structlog-originated events since the standard library has no equivalent (except for the convention of setting the logger's name to__main__).#812__name__
•meltano/meltanonow hasstructlog.stdlib.BoundLoggerandis_enabled_for()methods that are snake_case aliases for itsget_effective_level()andisEnabledFor()methods. This makes it more compatible with the nativegetEffectiveLevel(), so you can swap configurations without changing your call sites.<https://redirect.github.com/hynek/structlog/pull/818|#818…structlog.typing.FilteringBoundLogger
GitHub
06/15/2026, 6:44 PM