Skip to content

fix(deps): update pypi group - #123

Open
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/pypi
Open

renovate[bot] wants to merge 1 commit into
mainfrom
renovate/pypi

Conversation

@renovate

@renovate renovate Bot commented Jun 19, 2026 •

Copy link
Copy Markdown
Contributor

Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Change Age Confidence
certifi 2026.6.17 → 2026.10.23 age confidence
chardet (changelog) 7.4.3 → 7.7.0 age confidence
idna (changelog) 3.18 → 3.20 age confidence
poetry-core 2.4.1 → 2.5.0 age confidence
pytest (changelog) 9.1.0 → 9.2.0 age confidence
urllib3 (changelog) 2.7.0 → 2.8.0 age confidence

Release Notes

certifi/python-certifi (certifi)

v2026.10.23

Compare Source

v2026.10.19

Compare Source

v2026.10.18

Compare Source

v2026.7.22

Compare Source

chardet/chardet (chardet)

v7.7.0

Compare Source

Big release: raising max_bytes to cover a huge input no longer makes detect() slow, every answer now decodes the window it was detected from, and markup declarations are read the way browsers read them. A lot of this came from new contributors, so thank you all!

Performance

  • Raising max_bytes on large inputs no longer gets slow. On compiled wheels, detect(data, max_bytes=len(data)) on 272 MiB takes about 0.2s for cp1252 and 0.5s for Shift_JIS, down from several seconds. UTF-8 validation and a final decode of the winner still read the whole window, and the other stages stop at a 256 KiB evidence cap (ADR-0006). The default 200 KB cap is still the fastest path, and default calls are unchanged.
  • The pure-Python wheel on CPython scores bigram models through operator.itemgetter instead of a Python loop, making detect() about 1.25x faster and detect_all() about 1.35x faster. (#​404, thanks @​deadstrobe5)
  • Fixed three scans that went quadratic on hostile input: the UTF-7 + scan on line-wrapped base64 (128 KiB went from 5.4s to 1.2ms), unclosed <meta and <?xml tags in the markup scan, and the EBCDIC charset-declaration regex. (#​403, thanks @​Samin061)

Bug Fixes

  • Every answer now decodes the examined window under the name you get back. BOMs, BOM-less UTF-16/32 null patterns, ISO-2022/HZ escapes, and <meta charset> declarations used to be trusted without decoding the rest of the window, so a confident answer could still raise further in. The 5.x/6.x display names (EUC-JP, SHIFT_JIS, Big5, ISO-2022-JP) are only used when those narrower codecs decode it too. (#​394 and #​396, thanks @​Samin061)
  • Markup declarations follow the WHATWG prescan: declarations inside comments are ignored, a charset= inside another attribute (like a refresh URL) no longer beats a real <meta charset>, quoted or spaced content charsets work, and an ASCII page declaring utf-16le no longer comes back as UTF-16-LE. (#​389 and #​398, thanks @​SashaMIT and @​xiehuanyi)
  • PEP 263 cookies resolve the way tokenize.detect_encoding resolves them, including only counting a line-2 cookie when line 1 is blank or a comment. (#​391, thanks @​xiehuanyi)
  • Fixed BOM-bearing UTF-32 coming back as UTF-16 when max_bytes cuts a code unit. (#​405, thanks @​AryanRG)
  • Fixed language labels on Unicode text tilting toward accent-heavy languages, so a French paragraph with a few accents no longer comes back as Hungarian. Mislabels on the test corpus's Unicode files dropped from 140 to 104.
  • Fixed a mostly-ASCII Windows-1252 file with a single Ö detecting as HP-Roman8, and English with a lone É detecting as MacRoman. (#​383, thanks @​aadsm)
  • Fixed null-separated records like find -print0 output coming back as UTF-16-LE with Chinese as the language.
  • prefer_superset=True no longer swaps in a code page that can't decode the data, and now respects include_encodings/exclude_encodings. (#​393, thanks @​00200200)
  • chardetect and UniversalDetector no longer mistake input cut exactly at the byte cap for the whole stream. (#​392, thanks @​00200200)
  • lookup_encoding's cache is capped at 1024 entries, since charset names come from untrusted markup. (#​390, thanks @​Samin061)
  • Plus smaller fixes to detect_all() ranking, EBCDIC XML MIME types, and the deprecated chardet.equivalences shim. The changelog has the full list.

Improvements

  • New -m/--mime-type flag for chardetect shows the MIME type next to the encoding, like file -i. (#​384, thanks @​smi11 for the request)
  • Visual-order Hebrew is now detected, and cp864 Arabic is trained on contextually shaped text in visual order, the way real cp864 systems stored it.
  • EncodingInfo.is_multibyte is now is_multibyte_cjk. The old name still works with a DeprecationWarning and goes away in 8.0.
  • pipeline/markup.py is now compiled by mypyc (15 modules total), and CI enforces 100% test coverage.

Full Changelog: chardet/chardet@7.6.0...7.7.0

v7.6.0

Compare Source

Big release: a Cython scoring kernel joins mypyc in compiled wheels, every model retrained on a deduplicated corpus, UTF-7 fixed in both directions, and a guarantee that detect() never returns an encoding that can't decode your complete input.

Performance

  • Compiled wheels now score bigram profiles through a small Cython kernel alongside mypyc, and the pair is 4.7x faster than the pure wheel on CPython 3.14. _kernel.py stays plain Python (PyPy and pure wheels run it interpreted, unchanged), and detection output is bit-identical. The kernel declares itself safe without the GIL, so free-threaded CPython scales instead of silently re-enabling the GIL on import: 3.14t runs the whole suite in ~340ms across 8 threads, the fastest configuration measured. Compiled builds now need both hooks: HATCH_BUILD_HOOK_ENABLE_MYPYC=true HATCH_BUILD_HOOK_ENABLE_CUSTOM=true.
  • Added support for CPython 3.15, including the free-threaded build. No code changes were needed.

Bug Fixes

  • detect() no longer returns an encoding that cannot decode the input it was given (#​380, thanks @​yarikoptic). When the whole input has been examined and the winner's only multi-byte evidence is an incomplete trailing sequence, the best candidate that decodes the input completely wins instead. Genuinely truncated data keeps its answer.
  • Fixed delimited ASCII data like |NAME,+LAY| misdetecting as UTF-7 (#​371 follow-up, thanks @​agreenburg). The whole buffer must now actually decode as UTF-7, and a lone shifted character must land in a plausible script range.
  • Signed UTF-7 no longer reads as ASCII: the BOM stage recognizes the four UTF-7 signature prefixes when the rest of the buffer decodes as UTF-7.
  • Fixed short apostrophe-heavy English being labeled Scottish Gaelic or Breton: a rare-language label on an input under 128 bytes now needs a 0.03 lead over the best mainstream language (ADR-0005).
  • Fixed Hungarian text losing to a Czech reading in confusion rescoring; tied pairs are compared only under language models both encodings have.
  • Fixed space-padded text matching a degenerate Serbian model at high confidence; statistical scoring now skips repeated-whitespace bigrams. This also fixes windows-1251 logs misdetecting as windows-1250 (#​379).
  • Fixed EBCDIC text being invisible to the early pipeline stages, and the last two EBCDIC sibling misdetections.
  • Fixed training normalization gaps that starved ISO-8859-16 and the 26 pre-euro encodings at exactly their distinguishing bytes.

Improvements

  • Retrained every bigram model on a refreshed, deduplicated corpus with training provenance now recorded per model.
  • New ANSI-art model for cp437, trained on 16,621 text-mode art files from 16colo.rs.
  • Rare-language arbitration (ADR-0005): low-confidence statistical winners from languages with no documented legacy-encoding population yield to near-tied mainstream candidates.
  • Confusion-group resolution is context-aware: per-occurrence votes, word-shape demotions, art-model exemption.
  • Statistical dead heats no longer resolve by candidate enumeration order.
  • Training pipeline hardening after a cache-loss post-mortem.

Full Changelog: chardet/chardet@7.5.1...7.6.0

v7.5.1

Compare Source

Patch release: three detection fixes found while benchmarking against charset-normalizer's char-dataset.

Bug Fixes

  • Fixed markup-declared encodings being reported under a name that can't decode the input. A page declaring Shift_JIS but using CP932 extension characters (like ①) came back as SHIFT_JIS, which fails .decode() on those same bytes. Superset promotion (CP932, CP949) now always fires when the reported name can't decode the data but the superset can.
  • Fixed a lying charset declaration beating genuine UTF-8 content. A UTF-8 page declaring <meta charset="iso-8859-1"> came back as ISO-8859-1, which decodes to mojibake. Valid multi-byte UTF-8 now wins over a conflicting declaration.
  • Fixed BOM-less UTF-16 byte-order detection for pure-CJK text: short Chinese UTF-16 samples came back with reversed endianness at full confidence. Byte order is now chosen by decoding both ways and comparing text quality.

Full Changelog: chardet/chardet@7.5.0...7.5.1

v7.5.0

Compare Source

Accuracy and speed release: truncation-proof byte validity, statistical pruning worth ~2.9x, and half the peak memory.

Bug Fixes

  • Fixed multi-byte encodings being eliminated when the input ends in an incomplete character. Byte-validity filtering used a one-shot strict decode, which cannot tell a truncated tail from corrupt data, so a single dangling lead byte dropped every CJK candidate and the result came down to input-length parity. Also reachable on complete files through chardet's own max_bytes and _SCAN_LIMIT slicing. Validity checks now decode incrementally with final=False. (#​376, thanks @​aadsm)
  • Fixed compat_names (the default) leaking internal Python codec names for seven encodings (ISO-8859-2, ISO-8859-6, ISO-8859-13, Windows-1250, Windows-1256, Windows-1257, CP874). (#​374, thanks @​aadsm)
  • Fixed compat_names leaking the internal cp932 codec name; detect() now returns CP932. (#​375, thanks @​uttam12331)

Performance

  • Statistical scoring now skips single-byte models that provably can't beat the current runner-up, using per-model row-maximum tables. Results are bit-identical. Mean detection time dropped ~2.9x with mypyc, with the largest gains on legacy CJK (p99 from 9.5ms to 3.3ms).
  • Model tables are now bytes (native array indexing under mypyc) and the model blob is decompressed in chunks: peak process memory dropped from 53.9 to 27.4 MiB.
  • Confusion-group resolution and post-processing use bytes.translate prefilters instead of per-byte Python scans.

Improvements

  • prefer_superset=True is now documented as the recommended mode and will become the default in chardet 8.0. Callers that depend on subset names should start passing prefer_superset=False explicitly.
  • chardet.equivalences is now a deprecation shim: evaluation predicates moved to chardet.evaluation, output-name remapping to chardet.output_names. Removal in 8.0.
  • Internal pipeline reorganization: language fill, markup-superset promotion, and post-processing moved into their own modules. No behavior change.

Full Changelog: chardet/chardet@7.4.3...7.5.0

kjd/idna (idna)

v3.20

Compare Source

  • Update to Unicode 18.0.0.
  • Better enforcement of the domain length limit in the incremental
    codec.
  • Add support for Python 3.15.

v3.19

Compare Source

  • Restore the std3_rules option, which had no effect since changes
    to UTS #​46 processing in Unicode 16. Note that uts46_remap()
    defaults to enabling STD3 rules, so direct callers will see input
    containing non-LDH ASCII characters rejected again.
  • Performance improvements to UTS #​46 mapping, particularly for
    ASCII-only domains.
  • Test on free-threaded CPython with the GIL disabled and document
    thread safety.
  • Expose the Unicode version of the generated tables as
    idna.unicode_version, and show it in idna --version.
  • Add code, text, codepoint and position attributes to
    IDNAError so that the failed rule and the offending character can
    be identified without parsing the exception message.
  • The deprecated transitional argument to encode() and
    uts46_remap() is now completely ignored, and gives a deprecation warning
    for the latter.
  • Reject A-labels that are not the canonical Punycode encoding of
    their U-label.
  • Fix CONTEXTJ violations raising IDNAError instead of
    InvalidCodepointContext.
  • Consistently raise IDNAError for empty labels and non-ASCII bytes
    passed to label helper functions and the incremental codec.
  • Add property-based tests, extended fuzzing targets, coverage
    measurement, and CI checks that the data tables match the generator
    output.
  • Various code quality and tooling improvements.

Thanks to stefan6419846, LouieLuNZ, and Salvatore Corvaglia for
contributions to this release.

python-poetry/poetry-core (poetry-core)

v2.5.0

Compare Source

Added
  • Add Marker.apply() to partially evaluate a marker for a given environment (#​945).
  • Add Python 3.15 to the automatically generated classifiers (#​961).
Changed
  • Reject links with filenames containing path separators (#​974).
  • Update list of supported licenses (#​946,
    #​958,
    #​968).
  • Improve performance of creating links and determining file extensions (#​940,
    #​941).
  • Improve performance of version comparisons (#​951,
    #​952).
  • Improve performance of schema validation by caching compiled JSON schema validators (#​965).
Fixed
  • Fix an issue where a <V version constraint wrongly allowed pre-releases of V in some cases (#​939).
  • Fix an issue where version ranges with coincident bounds were not recognized as empty (#​939).
  • Fix an issue where the string representation of a version union did not describe the same constraint after being parsed again (#​939).
  • Fix an issue where the intersection of a version range with a local version resulted in a wrong constraint (#​949).
  • Fix an issue where the union of a version range and a public version did not include all local versions of the public version (#​950).
  • Fix an issue where the union of a public version and one of its local versions did not result in the public version (#​966).
  • Fix an issue where the difference between a public version and one of its local versions still allowed the local version, which could result in an infinite loop during dependency resolution (#​953).
  • Fix an issue where a version range that excluded some local versions of a public version was wrongly considered to allow all versions of the public version (#​959).
  • Fix an issue where a != <value> constraint was wrongly considered to allow all values of a <value> not in constraint (#​955).
  • Fix an issue where merging platform_release markers with incompatible constraint types failed (#​956).
  • Fix an issue where the string representation of a version range whose upper bound only consists of zeros raised an IndexError (#​964).
  • Fix an issue where formatting a Python constraint that only allows unknown Python versions raised an IndexError (#​971).
  • Fix an issue where marker values containing spaces could not be parsed (#​972).
  • Fix an issue where the upper bound of a ~= constraint was wrong for versions with more than three release segments (#​973).
  • Fix an issue where the filename of a link created from a Windows path was wrong (#​974).
Vendoring
pytest-dev/pytest (pytest)

v9.2.0

Compare Source

pytest 9.2.0 (2026-10-27)
Removals and backward incompatible breaking changes
  • #​14716: -c now raises a usage error for a path that does not exist, is a directory, or is in a format pytest has no loader for. Such paths were previously either ignored or reported as an unhandled FileNotFoundError.

  • #​8593: The indirect, ids and scope arguments of Metafunc.parametrize() <pytest.Metafunc.parametrize> -- and therefore of @pytest.mark.parametrize <pytest.mark.parametrize ref> -- are now keyword-only.

    Passing them positionally was a common source of confusing errors, e.g. parametrize("arg1", "arg2", [(1, 2)]) made the argvalues land in indirect and failed with indirect fixture '(1, 2)' doesn't exist; such mistakes now fail with an understandable TypeError. The type annotations have always declared these arguments as keyword-only.

  • #​993: Plugin import failures at startup are now reported and classified instead of escaping as a raw traceback with the accidental exit code 1:

    • a plugin that cannot be found -- via -p, pytest_plugins or PYTEST_PLUGINS -- exits with pytest.ExitCode USAGE_ERROR (4), like a conftest.py that fails to import;
    • a plugin that is found but raises while importing -- including a broken pytest11 entry point or a missing plugin dependency -- exits with pytest.ExitCode INTERNAL_ERROR (3), with the traceback preserved.

    pytest.main now returns these codes instead of raising ImportError. Also fixed an IndexError from pytest's own internals when the plugin raised an exception with no arguments.

Deprecations (removal in next major release)
  • #​14742: The private _pytest.python.CallSpec2 name has been renamed to CallSpec.
    The old CallSpec2 alias remains available for now and will be removed in pytest 10 or 11.

  • #​14755: Schedule yield_fixture decorator for removal in pytest 10 or 11.

  • #​14774: Similarly to the deprecation of class-scoped fixtures defined as instance methods in pytest 9.1,
    all higher-scoped fixtures (module, package, and session) defined
    as instance methods are now deprecated.

    They suffer from the same issue the original deprecation only fixed for
    class-scoped fixtures, see 10819 and 14011.

  • #​14808: Passing a non-string value to a string-typed ini option now emits a pytest.PytestRemovedIn10Warning. This affects [tool.pytest.ini_options] in pyproject.toml. In pytest 10 this will raise a TypeError, matching the behavior of the corresponding TOML config path.

  • #​7323: Passing bytes to TerminalReporter.write_line() is now deprecated, pass a str instead.

New features
  • #​14743: Full diff: now contains a legend explaining the + & - symbols in diff output.
  • #​2781: When strict_markers is enabled, marker names used in -m expressions are now validated against registered markers.
  • #​6881: Added the parametrize_long_str_id_strategy configuration option to control how long str/bytes parameter values are handled in auto-generated test IDs. Explicit IDs set via ids=[...] or pytest.param(..., id=...) are not affected. Available strategies: short (default, values over 100 chars fall back to argname+index), sha256 (SHA-256 hex digest), legacy (keep full value), and disallow (error requesting explicit IDs).
Improvements in existing functionality
  • #​10745: A RecursionError whose recursion origin cannot be located now shows only the
    first and last 10 stack frames, matching what pytest already did when locating
    the origin failed outright. Previously the full traceback -- often around a
    thousand near-identical frames -- was rendered, which was both slow and
    unreadable. Pass --full-trace to see every frame.

  • #​10745: The line numbers of a module's statements are now computed once per traceback
    instead of once per traceback entry, which noticeably speeds up rendering
    failures raised from large test modules.

  • #​11418: The cached rewritten modules in __pycache__ are now invalidated by a hash of
    the source instead of its modification time, using the checked-hash pyc format
    from 552.

    Timestamps make the cache useless wherever source files get fresh modification
    times, most notably in CI: a checkout gives every file a new mtime, so a
    restored cache is discarded in full and every test module is rewritten again.
    Hashing the source costs roughly 15 microseconds per file and makes the cache
    survive that.

    Existing timestamp based caches are ignored and rewritten once.

  • #​12624: The pytest_plugins variable and the PYTEST_PLUGINS environment variable now also accept entry point names of installed plugins (e.g. xdist), in addition to importable module names, matching the behavior of the -p command-line option.

    As part of this change, plugins specified by entry point name through these mechanisms are now also listed in the plugins: line of the terminal header (12615).

    Based on the original implementation by Marcel Telka in 12616.

  • #​12697: Warnings emitted while importing plugins through -p, PYTEST_PLUGINS, or entry point autoloading are now captured, filtered, and reported like other warnings.

  • #​12860: Assertion diffs for dict.items() and dict.keys() comparisons (>=, <=, >, <, ==) now show which items are missing, the same way set comparisons do.

  • #​13354: Node.get_closest_marker <_pytest.nodes.Node.get_closest_marker> now also accepts a ~pytest.MarkDecorator as its default, for example item.get_closest_marker("foo", pytest.mark.foo(1)), and returns the wrapped ~pytest.Mark.

    Previously the only way to build a default was to instantiate ~pytest.Mark directly, which is private and warns.

  • #​13369: Improved the error from pytest.RunResult.assert_outcomes when a plugin changes or removes pytest's standard terminal summary, and documented how to isolate output-changing plugins.

  • #​13431: Exposed pytest.ParameterSet as the type of the return value of pytest.param().
    This can be used in type annotations and isinstance checks.

  • #​13564: Issue a warning when fixtures are wrapped with a decorator that prevents
    correct discovery, including @classmethod above @pytest.fixture and
    @staticmethod above @pytest.fixture. Put @pytest.fixture above
    those decorators on test classes.

  • #​14164: Exposed pytest.Approx as the type of the return value of pytest.approx().
    This can be used in type annotations and isinstance checks.

  • #​14463: Assertion diffs for mappings now match up keys the way the compared mappings match them themselves.

    Key comparison goes through the mappings' key views instead of plain sets of their keys, so a mapping
    with its own notion of key equivalence, such as case-insensitive header mappings, no longer
    reports its common keys as missing on either side.

  • #​14523: Large assertion comparison diffs are now built lazily and capped to the
    truncation budget, so a huge diff is no longer formatted in full just to
    be truncated. As a consequence, the truncation footer no longer
    reports the exact number of hidden lines.

  • #​14687: The default fd-level output capturing (--capture=fd) now skips reading the capture buffer for tests which produce no output, reducing per-test overhead in large test suites.

  • #​14724: --no-summary now only applies directly to pytest's own summary.

    The flag no longer skips the pytest_terminal_summary hook, so third-party
    plugins (for example coverage) can still write their terminal summaries.

  • #​14751: parser.addini <pytest.Parser.addini> now also accepts type expressions for its type argument, in addition to the existing string tags: the plain Python types str, bool, int, float, a Literal of strings, and unions of these (for example int | str or int | Literal["auto"]).

  • #​14754: pytest.approx() now rejects infinite relative tolerances for datetime.timedelta values with a clear ValueError instead of raising OverflowError.

  • #​14791: The junit_family, junit_logging, junit_duration_report, console_output_style, empty_parameter_set_mark, assertion_text_diff_style and tmp_path_retention_policy configuration options are now registered with the set of values they accept: an invalid value now fails with a clean usage error instead of being silently ignored or crashing later, and pytest --help lists the accepted values.

    config.getini <pytest.Config.getini> now raises pytest.UsageError instead of TypeError or ValueError when the value read from the configuration file does not match the registered type, so a bad value is always reported as a short usage error message instead of an internal error traceback. Asking for an option name that was never registered still raises ValueError.

  • #​15006: pytest.approx now emits pytest.PytestApproxDecimalToleranceWarning when a rel or abs tolerance is given as a float that cannot be represented exactly for a ~decimal.Decimal comparison, since such a tolerance is widened to the float's exact binary value.

  • #​14675, #​14953, #​15153, #​15132: The truncation_limit_lines, truncation_limit_chars, max_warnings, verbosity_assertions, verbosity_test_cases, verbosity_subtests, tmp_path_retention_count, log_level, log_cli_level, log_file_level,log_auto_indent and faulthandler_timeout configuration options now accept native integer (and, for log_auto_indent, boolean) values in TOML configuration files, while still accepting strings for backward compatibility.
    log_file_mode now reports invalid values as a usage error.

  • #​15254: tmp_path and TempPathFactory.mktemp <pytest.TempPathFactory.mktemp> no longer list the whole base temporary directory on every call, which made sessions with many temporary directories quadratically slow. Numbers are now handed out from a per-prefix counter, skipping names that already exist.

  • #​4569: Node.add_marker <_pytest.nodes.Node.add_marker> now stores a ~pytest.Mark in node.keywords, matching what marks applied during collection store. Previously it stored a ~pytest.MarkDecorator.

  • #​9436: Avoided formatting tracebacks for tests marked with xfail(run=False).

Bug fixes
  • #​10128: Configured warning filters now apply to warnings emitted by pytest_configure hooks.

  • #​10210: pytest.approx now raises a TypeError for any nested container, not
    only for one of the same type as its parent. Previously approx([{"k": 1}])
    and approx({"k": [1]}) were accepted and then compared unequal to every
    value, silently ignoring the tolerance, while approx([[1]]) correctly
    reported that nesting is unsupported.

  • #​10644: monkeypatch.setattr() no longer leaves a new entry in the instance __dict__ when it patches an attribute that the instance inherits from its class.

    Previously undo() assigned the inherited value onto the instance, which shadowed the class attribute -- permanently freezing the result for descriptors that resolve dynamically.

  • #​1139: Fixed tracebacks showing ??? instead of source lines for code compiled with a filename relative to a directory other than the current working directory -- e.g. compiled Cython modules, when running pytest from a subdirectory of the project root.
    The source lookup now falls back to searching sys.path for such filenames, as the standard traceback module does.

  • #​11502: The rootdir is no longer derived from a configuration file that is not a regular file, such as --config-file=/dev/null.

  • #​11783: Plugins installed in editable mode (660) are marked for assertion rewriting again.

    Such installs do not record the package's Python files in the distribution metadata, so pytest found nothing to rewrite and assertions inside the plugin lost their introspection. The plugin's entry point is now used to locate the package in that case.

  • #​11933: pytest.warns no longer re-emits unmatched warnings with module="warnings", which caused module-based warning filters to be applied to the wrong warnings. Since warnings.WarningMessage does not record the module a warning was emitted with, re-emitted warnings now use the standard warnings.warn_explicit default of deriving the module from the warning's filename.

  • #​12175: ExceptionInfo.exconly(tryshort=True) <pytest.ExceptionInfo.exconly> now strips the AssertionError: prefix of failed assert statements for ~pytest.ExceptionInfo objects created by pytest.raises, and failures inside unittest.TestCase.subTest report the same short crash line as regular tests.

  • #​12223: The message attribute of <failure> and <error> elements in --junitxml reports is now shortened to whole lines within 500 characters. When something is dropped, it ends with a note pointing to the element text, which still holds the full report. Previously, very verbose assertion output (e.g. with -vv) produced attributes tens of thousands of characters long, which some XML parsers fail on.

  • #​12307: Fixed truncation of long collections (lists, dicts, sets, etc.) in the "message" part of failed assertions (as in assert condition, msg) when using -vv: the message now uses the same unlimited repr as the rest of the assertion output, instead of eliding collection elements with ....

  • #​12824: Custom command-line options now fail with a clear error when their implicit
    destination conflicts with an existing option, avoiding silent overrides of
    built-in options such as -k.

  • #​13292: Fixed a stale rewritten module being used when a test file is modified twice
    within the same second without changing its size -- the pyc header could only
    record whole-second timestamps. The cache is now keyed on a hash of the source.

  • #​14036: __tracebackhide__ is now respected in ExceptionGroup tracebacks, both for the group itself and for its sub-exceptions.

  • #​14189: Nested usage of caplog.filtering <pytest.LogCaptureFixture.filtering> no longer removes filters early if they were already present.

  • #​14412: Fixed incorrect timing information for subtests and parent tests when console_output_style = "times".

  • #​14445: Assertion rewriting no longer evaluates walrus operator (:=) expressions more than once, which reported results the test never computed when the expression had side effects.

    An operand evaluated before a later walrus is now reported with the value it actually saw, so assert value != identity(value := value.lower()) keeps Python's left-to-right order.

  • #​14552: Fixed stale co_filename values after a test module or directory is moved. Assertion-rewrite caches are reused when the source hash still matches, and in-memory code objects are pointed at the current path.

  • #​14586: Negative values passed to log_auto_indent now correctly fall back to no indentation, matching the documented behavior.

  • #​14619: Fixed a crash in pytest.mark.parametrize when a non-sequence value is passed for a parameter set. It now provides a clear error message during collection.

  • #​14635: Fixed fixture resolution failures when specifying multiple test paths on the command line that share common parent directories. Parametrized fixtures defined in a conftest.py could be silently dropped depending on the order of the specified paths.

  • #​14637: Pytest now correctly skips identical trailing characters in assertion text diffs even when the compared strings differ at the beginning.

  • #​14638: Top-level options in pytest.toml and .pytest.toml files now raise an error instead of being silently ignored when no [pytest] table is present.

  • #​14683: Fixed a regression in pytest 9.1 where a conftest.py located in the rootdir was no longer visible to tests and doctests collected from outside the rootdir (for example when passing a parent directory of the rootdir as a collection argument, or setting --rootdir to a subdirectory).

    As a result, fixtures defined in such a conftest -- including doctest_namespace injections -- were not available, causing errors such as NameError in doctests.

  • #​14700: Fixed an internal error on Python 3.12 when a doctest on a fixture-decorated function was skipped.

  • #​14705: TOML configuration files passed via -c now also read their configuration from the [pytest] table, the one pytest's own configuration files use. The [tool.pytest] and [tool.pytest.ini_options] tables such files were previously restricted to keep working; using both styles in one file is an error.

  • #​14828: Exception groups raised from another exception now print their cause chain only once in the traceback output.

  • #​14864: Fixed collection on Windows collecting the whole suite instead of the given path, on file systems which do not support file IDs (st_ino is 0 for every file, as seen for example on sshfs-win/WinFsp mounts).

  • #​14884: Cache.get(), Cache.set() and Cache.mkdir() now reject keys that resolve outside the cache directory, and --cache-show ignores glob matches outside it.

  • #​14909: Fixed MonkeyPatch.delattr <pytest.MonkeyPatch.delattr>, MonkeyPatch.setitem <pytest.MonkeyPatch.setitem> and MonkeyPatch.delitem <pytest.MonkeyPatch.delitem> recording a stale undo entry when the underlying mutation failed, which could cause spurious errors during teardown. The undo entry is now recorded only after the mutation succeeds, matching the behavior of MonkeyPatch.setattr <pytest.MonkeyPatch.setattr>.

  • #​14912: ~pytest.PytestWarning instances defined in _pytest.deprecated are no longer reused across warnings.warn calls, so warnings raised as errors (e.g. with -W error) no longer accumulate stale traceback frames from previous raises.

  • #​14942: Fixed a regression in 9.1.0 that made collection very slow (quadratic) when many fixtures are defined with the same name.
    This can happen particularly when many tests are defined in separate classes which inherit from a base class which defines fixtures (the fixtures are repeated per class).

  • #​15005: pytest.approx no longer treats finite ~decimal.Decimal values outside the float range (such as Decimal("1e400")) as infinite, which made in-tolerance comparisons fail.

  • #​15006: Restored the tolerance shown by pytest.approx for ~decimal.Decimal values, which since 9.0 displayed ??? for the default tolerance and reported the raw rel ratio instead of the absolute tolerance actually compared against.

  • #​15006: The failure message for pytest.approx comparisons of ~decimal.Decimal collections no longer reports Max absolute difference: -inf, or crashes for mappings, when the decimal.FloatOperation trap is set.

  • #​15006: pytest.approx no longer raises AttributeError when comparing numpy.ndarray instances with object dtype, such as arrays of ~decimal.Decimal.

  • #​15032: Help texts for command-line options and configuration options now keep their indentation
    and blank lines. Previously each line was stripped before wrapping, so a wrapped
    list item was indistinguishable from a new one and blank lines were dropped; configuration
    option help lost its line breaks entirely.

  • #​15043: Cache writes now emit pytest.PytestCacheWarning when writing or closing the cache file fails, consistent with errors opening the file.

  • #​15052: Fixed possible off-by-one line numbers in --fixtures and --fixtures-per-test output.

  • #​15145: With console_output_style set to times, durations just below a unit boundary are now shown in the next unit (e.g. 1.000ms instead of 1000.0us).

  • #​15172: Assertion diffs now pretty-print the built-in frozendict (Python 3.15+) across multiple lines, similarly to how dict is displayed.

  • #​4569: -k no longer matches attributes that end up in a test function's __dict__ without being meant as keywords, such as pytest's own pytestmark attribute and the bookkeeping left behind by functools.wraps and functools.lru_cache.

  • #​6750: Fix fixture argument discovery for custom collectors that pass bound methods to pytest.Function.

  • #​6997: XFAIL reports from teardown phases now include the phase in the short test
    summary.

  • #​7940: Fixed cleanup of temporary directories failing when subdirectories have their execute permission removed.

  • #​8321: Fixed exception chains being duplicated in the traceback output when an exception in the chain (__cause__/__context__) has no traceback of its own, and that exception is itself linked to further exceptions.

  • #​8914: Tests parametrized with higher-than-function scope are now reordered by
    parameter value rather than by parameter index, so that items using equal
    parameter values are grouped together and share a single fixture setup, even
    when they are parametrized by separate @pytest.mark.parametrize <pytest.mark.parametrize ref>
    calls. Previously, an expensive higher-scoped fixture could be set up and torn
    down repeatedly for the same parameter value.

    Unhashable parameter values (e.g. dicts) keep the previous index-based
    grouping behavior.

    As a consequence, the order in which parametrized tests run may change
    (fixture setup/teardown counts can only decrease, not increase).

  • #​9924: Fixed doctest option flags leaking between docstrings after a failure, skip, or expected failure.

Improved documentation
  • #​10721: Replaced setup.py usage with pyproject.toml in writing-plugins.
  • #​12658: Moved the fixture setup and finalizer hooks to the test running hooks section in the reference documentation.
  • #​12857: Documented how --confcutdir affects initial conftest.py discovery.
  • #​14157: Added the pytest-flakefighters plugin to the list of flaky test plugins in plugins.rst.
    Added flaky test papers published on the Test FLARE project to the list of flaky papers in plugins.rst.
  • #​15127: Added guidance on typing yield fixtures, including annotating fixture functions with their generator type and fixture consumers with the yielded value type.
  • #​15242: The installation instructions <installation> and install-package-with-pip now show how to install pytest into a virtual environment with venv and pip, uv or virtualenv, and explain the externally-managed-environment error.
  • #​4569: pytest --help, the -k reference entry and select-tests no longer describe -k as a Python expression matched against test names only; keyword expressions now shows marker names being matched as well. The examples that looked up a marker use Node.get_closest_marker <_pytest.nodes.Node.get_closest_marker> rather than item.keywords.
  • #​9614: Clarified that session.items and session.testscollected exclude deselected tests in the pytest_collection documentation.
Packaging updates and notes for downstreams
  • #​11680: Source archives of arbitrary commits -- the tarballs GitHub serves under
    /archive/, not just the ones for tags -- can now be built into an sdist or a
    wheel with a correct version. A .git_archival.txt file, expanded by git archive via export-subst, carries the describe output that
    setuptools-scm would otherwise have to ask git for.

    The archival file deliberately omits ref-names. Recording it would make the
    content of an archive -- and therefore its checksum -- change whenever a branch
    that points at the archived commit is moved afterwards, which is how the
    equivalent tarballs of tagged releases became unstable for other projects.
    Describe output alone depends only on the commit and on the tags reachable from
    it.

    The archival file is not shipped in the sdist -- an sdist carries its version
    in its metadata, and the template is only ever expanded by git archive.

    Building pytest from a git checkout now requires setuptools-scm >= 10.1.

  • #​9236: pluggy>=1.6 is now required.

    Older pluggy versions stopped running the remaining hook wrapper teardowns once an
    old-style hookwrapper raised in its own teardown. The logging plugin's wrapper was
    left suspended, and when it was finalised later it detached the handler that
    caplog of a subsequent test was recording through, so that test saw no records.

Contributor-facing changes
  • #​14813: Added a systematic coverage matrix for assertion rewriting.
  • #​14921: Added scripts/diff-assert-rewrite.py, which diffs the assert-rewritten form of a snippet between the plain source, this checkout and released pytest versions.
  • #​15190: Fixed the documentation build with Pluggy 1.7 by ignoring a reference to its undocumented DistFacade compatibility class.
Miscellaneous internal changes
  • #​13888: FixtureRequest.node <pytest.FixtureRequest.node> is now explicitly annotated as returning Any, so strict pyright no longer reports it as Unknown. The return type stays deliberately broad, see 13888.
  • #​14758: Internal node ids (the ::-separated strings identifying collected items, e.g. path/to/test_file.py::TestClass::test_method[param]) are now represented internally by a single structured ~_pytest.nodeid.NodeId dataclass instead of being repeatedly re-parsed as plain strings. The public nodeid: str attribute on nodes and reports is unchanged and remains fully backward compatible for plugins.

v9.1.1

Compare Source

pytest 9.1.1 (2026-06-19)
Bug fixes
  • #​14220: Fixed a logic bug in pytest.RaisesGroup which would might cause it to display incorrect "It matches FooError() which was paired with BarError" messages.
  • #​14591: Fixed a regression in pytest 9.1.0 which caused overriding a parametrized fixture with an indirect @​pytest.mark.parametrize to fail with "duplicate parametrization of '<fixture name>'".
  • #​14606: Fixed list-item typing errors from mypy in @pytest.mark.parametrize <pytest.mark.parametrize ref> argvalues parameter.
  • #​14608: Fixed a regression in pytest 9.1.0 where conftest.py files located in <invocation dir>/test* were no longer loaded

[!IMPORTANT]
✂ PR body was truncated to here.


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate Bot added the type/patch label Jun 19, 2026
@github-actions

Copy link
Copy Markdown
Contributor

🏷️ Test Badge Generation (Shields.io)

hilbert

BadgeSort Asana NFC Less Land Rover Skynet KeePassXC Renault DHL Pingdom LeetCode scikit-learn QIWI Web3.js YouTube Studio Qantas Last.fm Archive of Our Own NestJS JPEG Chakra UI Marko GNU Privacy Guard Ionic Adobe Lightroom Tesco

hsv

BadgeSort JPEG Archive of Our Own Qantas YouTube Studio Last.fm Web3.js scikit-learn QIWI LeetCode Renault DHL Pingdom KeePassXC Skynet Land Rover Chakra UI Marko GNU Privacy Guard Adobe Lightroom Tesco NFC Less Asana Ionic NestJS

step

BadgeSort Archive of Our Own Qantas YouTube Studio Last.fm Web3.js JPEG QIWI scikit-learn LeetCode DHL Renault Pingdom KeePassXC Land Rover Chakra UI Skynet NFC Asana Less Tesco GNU Privacy Guard Ionic Marko Adobe Lightroom NestJS

step_invert

BadgeSort Archive of Our Own Qantas YouTube Studio Last.fm Web3.js JPEG QIWI scikit-learn LeetCode Pingdom Renault DHL KeePassXC Skynet Chakra UI Land Rover NFC Asana Less Tesco GNU Privacy Guard Ionic Marko Adobe Lightroom NestJS

luminance

BadgeSort Archive of Our Own NFC Asana Less Qantas YouTube Studio Last.fm Land Rover Tesco NestJS GNU Privacy Guard Ionic Marko Chakra UI Web3.js JPEG Skynet Adobe Lightroom KeePassXC QIWI scikit-learn LeetCode DHL Renault Pingdom

@github-actions

Copy link
Copy Markdown
Contributor

🏷️ Test Badge Generation (Badgen.net)

hilbert

BadgeSort Asana NFC Less Land Rover Skynet KeePassXC Renault DHL Pingdom LeetCode scikit-learn QIWI Web3.js YouTube Studio Qantas Last.fm Archive of Our Own NestJS JPEG Chakra UI Marko GNU Privacy Guard Ionic Adobe Lightroom Tesco

@renovate renovate Bot changed the title chore(deps): update pypi group to 9.1.1 chore(deps): update pypi group Jun 22, 2026
@renovate renovate Bot changed the title chore(deps): update pypi group chore(deps): update pytest to 9.1.1 Jun 25, 2026
@renovate
renovate Bot force-pushed the renovate/pypi branch from fbb4b75 to 05662e9 Compare July 20, 2026 22:59
@github-actions

Copy link
Copy Markdown
Contributor

🏷️ Test Badge Generation (Shields.io)

hilbert

Mini Gutenberg Jordan BadgeSort Discogs Koa MSI Business GreenSock Power BI Qwiklabs DHL TaxBuzz Cloudera Auth0 eBay YouTube Studio Kyocera Veritas Lospec Android Roundcube F-Droid Ubiquiti Wallabag suckless Cloudsmith

hsv

Mini Gutenberg Jordan BadgeSort Discogs Lospec YouTube Studio Auth0 Cloudera TaxBuzz MSI Business DHL Power BI Qwiklabs GreenSock Android Roundcube suckless Cloudsmith F-Droid Wallabag Ubiquiti Koa Kyocera Veritas eBay

step

Mini Gutenberg Jordan BadgeSort Discogs YouTube Studio Auth0 Cloudera MSI Business TaxBuzz Lospec GreenSock Power BI Qwiklabs DHL Android Ubiquiti Wallabag suckless F-Droid Cloudsmith Roundcube Koa Kyocera Veritas eBay

step_invert

Mini Gutenberg Jordan BadgeSort Discogs YouTube Studio Auth0 Cloudera MSI Business TaxBuzz Lospec DHL Qwiklabs Power BI GreenSock Android Ubiquiti Wallabag suckless F-Droid Cloudsmith Roundcube Koa eBay Veritas Kyocera

luminance

Mini Gutenberg Jordan BadgeSort Discogs Koa Kyocera Veritas YouTube Studio Ubiquiti Wallabag eBay suckless F-Droid Cloudsmith Auth0 Cloudera MSI Business TaxBuzz Roundcube GreenSock Android Power BI Qwiklabs DHL Lospec

@github-actions

Copy link
Copy Markdown
Contributor

🏷️ Test Badge Generation (Badgen.net)

hilbert

Mini Gutenberg Jordan BadgeSort Discogs Koa MSI Business GreenSock Power BI Qwiklabs DHL TaxBuzz Cloudera Auth0 eBay YouTube Studio Kyocera Veritas Lospec Android Roundcube F-Droid Ubiquiti Wallabag suckless Cloudsmith

@renovate renovate Bot added the type/minor label Jul 22, 2026
@renovate
renovate Bot force-pushed the renovate/pypi branch from 05662e9 to 160dbda Compare July 22, 2026 07:09
@renovate renovate Bot changed the title chore(deps): update pytest to 9.1.1 fix(deps): update pypi group Jul 22, 2026
@github-actions

Copy link
Copy Markdown
Contributor

🏷️ Test Badge Generation (Shields.io)

hilbert

Tile Steam Infiniti Express BadgeSort Big Cartel Badgr Statuspage MongoDB Swagger Shell LabVIEW MoneyGram Koc RetroPie The Mighty Apple News Leanpub Gerrit Jellyfin Traefik Proxy GitBook iCloud Fing KiCad Alfred

hsv

Tile Steam Infiniti Express BadgeSort Big Cartel Gerrit Leanpub RetroPie Koc MoneyGram Shell LabVIEW Swagger MongoDB Traefik Proxy Jellyfin Fing iCloud GitBook Statuspage KiCad Badgr Alfred The Mighty Apple News

step

Tile Steam Infiniti Express BadgeSort Big Cartel RetroPie Koc MoneyGram Gerrit Leanpub Shell LabVIEW MongoDB Swagger Statuspage GitBook Fing Jellyfin iCloud Traefik Proxy Badgr KiCad Alfred The Mighty Apple News

step_invert

Tile Steam Infiniti Express BadgeSort Big Cartel RetroPie Koc MoneyGram Gerrit Leanpub LabVIEW Shell MongoDB Swagger Statuspage GitBook Fing Jellyfin iCloud Traefik Proxy KiCad Badgr Alfred Apple News The Mighty

luminance

Tile Steam Infiniti Express BadgeSort Big Cartel Statuspage Badgr RetroPie Alfred The Mighty KiCad Koc Apple News GitBook Fing Jellyfin iCloud MoneyGram Traefik Proxy MongoDB Swagger Shell LabVIEW Gerrit Leanpub

@github-actions

Copy link
Copy Markdown
Contributor

🏷️ Test Badge Generation (Badgen.net)

hilbert

Tile Steam Infiniti Express BadgeSort Big Cartel Badgr Statuspage MongoDB Swagger Shell LabVIEW MoneyGram Koc RetroPie The Mighty Apple News Leanpub Gerrit Jellyfin Traefik Proxy GitBook iCloud Fing KiCad Alfred

@renovate
renovate Bot force-pushed the renovate/pypi branch from 160dbda to 074841a Compare August 6, 2026 06:15
@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

🏷️ Test Badge Generation (Shields.io)

hilbert

Mini MDN Web Docs BadgeSort Power Apps Runkeeper Boehringer Ingelheim Xing Xbox GNU Bash Vitest Smashing Magazine Swift ThinkPad ReactiveX Gerrit Flood Fossil SCM BookStack DVC Albert Heijn pixiv Microsoft Azure JCB PlayStation Vita FontBase National Grid

hsv

Mini MDN Web Docs BadgeSort Gerrit ThinkPad Swift Smashing Magazine Vitest GNU Bash Xbox Xing DVC Albert Heijn Fossil SCM BookStack pixiv Microsoft Azure Boehringer Ingelheim JCB PlayStation Vita Flood Runkeeper National Grid FontBase Power Apps ReactiveX

step

Mini MDN Web Docs BadgeSort ThinkPad Swift Smashing Magazine Gerrit Vitest Xbox GNU Bash Runkeeper Boehringer Ingelheim PlayStation Vita JCB Xing Microsoft Azure BookStack Fossil SCM pixiv Flood Albert Heijn DVC National Grid FontBase Power Apps ReactiveX

step_invert

Mini MDN Web Docs BadgeSort ThinkPad Swift Smashing Magazine Gerrit Vitest Xbox GNU Bash Runkeeper Boehringer Ingelheim PlayStation Vita JCB Xing Microsoft Azure BookStack Fossil SCM pixiv Flood Albert Heijn DVC FontBase National Grid Power Apps ReactiveX

luminance

Mini MDN Web Docs BadgeSort National Grid Runkeeper FontBase Boehringer Ingelheim PlayStation Vita Power Apps JCB ReactiveX Xing ThinkPad Xbox Microsoft Azure BookStack Swift Fossil SCM pixiv Smashing Magazine Flood Albert Heijn DVC Vitest GNU Bash Gerrit

@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

🏷️ Test Badge Generation (Badgen.net)

hilbert

Mini MDN Web Docs BadgeSort Power Apps Runkeeper Boehringer Ingelheim Xing Xbox GNU Bash Vitest Smashing Magazine Swift ThinkPad ReactiveX Gerrit Flood Fossil SCM BookStack DVC Albert Heijn pixiv Microsoft Azure JCB PlayStation Vita FontBase National Grid

@github-actions

Copy link
Copy Markdown
Contributor

🏷️ Test Badge Generation (Shields.io)

hilbert

MacPaw BadgeSort Basecamp Prime Video Z-Wave haveibeenpwned JavaScript Dragonframe SparkFun Fastly F1 Ruby on Rails Ceph Itch.io Crayon NextBillion.ai SCP Foundation Stimulus Ajv Storyblok Abbott Lens Packer Chase Kali Linux BMW

hsv

MacPaw BadgeSort SCP Foundation Itch.io Ruby on Rails F1 Ceph SparkFun Crayon Dragonframe JavaScript Stimulus Storyblok Ajv haveibeenpwned Abbott Packer Basecamp Kali Linux BMW Lens Chase Prime Video Z-Wave NextBillion.ai Fastly

step

MacPaw BadgeSort Ruby on Rails F1 SparkFun Ceph Itch.io Crayon Dragonframe SCP Foundation JavaScript Storyblok Stimulus Basecamp Prime Video Z-Wave BMW haveibeenpwned Chase Abbott Kali Linux Lens Packer Ajv NextBillion.ai Fastly

step_invert

MacPaw BadgeSort Ruby on Rails F1 SparkFun Ceph Itch.io Crayon Dragonframe SCP Foundation JavaScript Stimulus Storyblok Basecamp Prime Video Z-Wave BMW haveibeenpwned Chase Abbott Kali Linux Lens Packer Ajv NextBillion.ai Fastly

luminance

MacPaw BadgeSort Basecamp Prime Video Ruby on Rails Z-Wave F1 BMW haveibeenpwned Fastly SparkFun Chase NextBillion.ai Abbott Kali Linux Ceph Lens Itch.io Packer Storyblok Crayon Dragonframe Ajv Stimulus JavaScript SCP Foundation

@github-actions

Copy link
Copy Markdown
Contributor

🏷️ Test Badge Generation (Badgen.net)

hilbert

MacPaw BadgeSort Basecamp Prime Video Z-Wave haveibeenpwned JavaScript Dragonframe SparkFun Fastly F1 Ruby on Rails Ceph Itch.io Crayon NextBillion.ai SCP Foundation Stimulus Ajv Storyblok Abbott Lens Packer Chase Kali Linux BMW

@github-actions

Copy link
Copy Markdown
Contributor

🏷️ Test Badge Generation (Shields.io)

hilbert

Discourse Uber BadgeSort Hyperledger Buffer Similarweb Fila CentOS Elastic Stack Power Virtual Agents Feedly SmugMug K3s Nim Chef Fandango ZDF Virgin MEGA SonarSource egghead ImageJ Kaggle Windows 11 PHP Epson

hsv

Discourse Uber BadgeSort Virgin ZDF Fandango egghead Chef K3s Nim SmugMug Feedly ImageJ Power Virtual Agents Elastic Stack Kaggle Windows 11 Similarweb Fila Hyperledger Epson PHP CentOS Buffer MEGA SonarSource

step

Discourse Uber BadgeSort Virgin Fandango ZDF Chef K3s egghead Nim Feedly SmugMug Fila Similarweb Epson Hyperledger Elastic Stack Power Virtual Agents Windows 11 Kaggle ImageJ CentOS PHP Buffer MEGA SonarSource

step_invert

Discourse Uber BadgeSort Virgin Fandango ZDF Chef K3s egghead Nim Feedly SmugMug Fila Similarweb Epson Hyperledger Elastic Stack Power Virtual Agents Windows 11 Kaggle ImageJ PHP CentOS SonarSource MEGA Buffer

luminance

Discourse Uber BadgeSort Fila Buffer Similarweb CentOS Epson Hyperledger Virgin Elastic Stack Power Virtual Agents MEGA SonarSource Windows 11 PHP Feedly Fandango ZDF Kaggle SmugMug ImageJ Chef K3s Nim egghead

@github-actions

Copy link
Copy Markdown
Contributor

🏷️ Test Badge Generation (Badgen.net)

hilbert

Discourse Uber BadgeSort Hyperledger Buffer Similarweb Fila CentOS Elastic Stack Power Virtual Agents Feedly SmugMug K3s Nim Chef Fandango ZDF Virgin MEGA SonarSource egghead ImageJ Kaggle Windows 11 PHP Epson

@github-actions

Copy link
Copy Markdown
Contributor

🏷️ Test Badge Generation (Shields.io)

hilbert

MediaTemple BadgeSort Hyperledger GitHub Pages Linux Foundation LOT Polish Airlines Neovim sharp Snapchat Corona Renderer Amazon Fire TV Trakt AMD CD Projekt CodeFactor CodersRank Krita Lydia Radar QuickTime Jira OpenFaaS k6 IVECO SSRN PyTorch Lightning

hsv

MediaTemple BadgeSort GitHub Pages Corona Renderer Amazon Fire TV Snapchat sharp Neovim CodersRank Krita Lydia Linux Foundation IVECO Radar SSRN Jira Hyperledger LOT Polish Airlines QuickTime OpenFaaS k6 PyTorch Lightning CodeFactor CD Projekt Trakt AMD

step

MediaTemple BadgeSort GitHub Pages Amazon Fire TV Corona Renderer sharp Snapchat Neovim Linux Foundation Hyperledger LOT Polish Airlines IVECO SSRN Jira QuickTime Radar Lydia Krita CodersRank PyTorch Lightning OpenFaaS k6 CD Projekt Trakt AMD CodeFactor

step_invert

MediaTemple BadgeSort GitHub Pages Amazon Fire TV Corona Renderer Snapchat sharp Neovim Linux Foundation Hyperledger LOT Polish Airlines IVECO SSRN Jira QuickTime Radar Lydia Krita CodersRank k6 OpenFaaS PyTorch Lightning CodeFactor Trakt AMD CD Projekt

luminance

MediaTemple BadgeSort GitHub Pages Linux Foundation Hyperledger LOT Polish Airlines IVECO CD Projekt SSRN Jira PyTorch Lightning Trakt AMD OpenFaaS QuickTime Radar Lydia Amazon Fire TV Corona Renderer k6 CodeFactor Neovim Krita CodersRank sharp Snapchat

@github-actions

Copy link
Copy Markdown
Contributor

🏷️ Test Badge Generation (Badgen.net)

hilbert

MediaTemple BadgeSort Hyperledger GitHub Pages Linux Foundation LOT Polish Airlines Neovim sharp Snapchat Corona Renderer Amazon Fire TV Trakt AMD CD Projekt CodeFactor CodersRank Krita Lydia Radar QuickTime Jira OpenFaaS k6 IVECO SSRN PyTorch Lightning

@github-actions

Copy link
Copy Markdown
Contributor

🏷️ Test Badge Generation (Shields.io)

hilbert

Jeep BadgeSort Monzo Gradle Qatar Airways WhiteSource HelloFresh Amazon EC2 EnterpriseDB Databricks Flipboard RTL McLaren Tesla DPD Quora WireGuard Power Pages Netlify Alipay Flickr Bugsnag Buefy Azure Functions WebMoney WebAuthn

hsv

Jeep BadgeSort Flipboard Tesla McLaren Quora Databricks EnterpriseDB Amazon EC2 HelloFresh Netlify Gradle Alipay WebMoney Azure Functions Flickr Monzo WhiteSource Bugsnag WebAuthn Power Pages Buefy Qatar Airways DPD RTL WireGuard

step

Jeep BadgeSort Tesla McLaren Quora Flipboard Databricks EnterpriseDB Amazon EC2 HelloFresh Netlify Monzo Gradle Azure Functions Flickr WebMoney Alipay WhiteSource WebAuthn Bugsnag Buefy Power Pages Qatar Airways WireGuard DPD RTL

step_invert

Jeep BadgeSort Tesla McLaren Quora Flipboard Databricks EnterpriseDB Amazon EC2 HelloFresh Netlify Monzo Gradle Azure Functions Flickr WebMoney Alipay Power Pages Buefy Bugsnag WebAuthn WhiteSource RTL DPD WireGuard Qatar Airways

luminance

Jeep BadgeSort WhiteSource Monzo Qatar Airways Gradle WebAuthn Tesla WireGuard DPD McLaren RTL Quora Azure Functions Flickr Bugsnag Flipboard WebMoney Databricks Buefy EnterpriseDB Alipay Netlify Power Pages Amazon EC2 HelloFresh

@github-actions

Copy link
Copy Markdown
Contributor

🏷️ Test Badge Generation (Badgen.net)

hilbert

Jeep BadgeSort Monzo Gradle Qatar Airways WhiteSource HelloFresh Amazon EC2 EnterpriseDB Databricks Flipboard RTL McLaren Tesla DPD Quora WireGuard Power Pages Netlify Alipay Flickr Bugsnag Buefy Azure Functions WebMoney WebAuthn

@github-actions

Copy link
Copy Markdown
Contributor

🏷️ Test Badge Generation (Shields.io)

hilbert

AngelList The North Face JR Group BadgeSort Progress Acer Firefox Browser Origin Unraid The Spriters Resource PrestaShop KashFlow JPEG Google Home Salt Project Headless UI HERE Speaker Deck Arch Linux Ulule Krita MUI Jira Kotlin OpenSearch Statuspal

hsv

AngelList The North Face JR Group BadgeSort JPEG The Spriters Resource Unraid Firefox Browser Origin Acer Progress Salt Project Speaker Deck HERE Headless UI Ulule Arch Linux Krita OpenSearch MUI Jira Google Home Statuspal Kotlin PrestaShop KashFlow

step

AngelList The North Face JR Group BadgeSort The Spriters Resource Unraid Origin JPEG Firefox Browser Acer Progress Speaker Deck HERE Salt Project Jira OpenSearch MUI Arch Linux Google Home Ulule Krita Headless UI Statuspal Kotlin PrestaShop KashFlow

step_invert

AngelList The North Face JR Group BadgeSort The Spriters Resource Unraid Origin JPEG Firefox Browser Acer Progress Salt Project HERE Speaker Deck Jira OpenSearch MUI Arch Linux Google Home Ulule Krita Headless UI Kotlin Statuspal KashFlow PrestaShop

luminance

AngelList The North Face JR Group BadgeSort PrestaShop Statuspal Jira OpenSearch The Spriters Resource Kotlin MUI KashFlow Speaker Deck Arch Linux Unraid Google Home HERE Ulule Origin JPEG Firefox Browser Krita Acer Salt Project Progress Headless UI

@github-actions

Copy link
Copy Markdown
Contributor

🏷️ Test Badge Generation (Badgen.net)

hilbert

AngelList The North Face JR Group BadgeSort Progress Acer Firefox Browser Origin Unraid The Spriters Resource PrestaShop KashFlow JPEG Google Home Salt Project Headless UI HERE Speaker Deck Arch Linux Ulule Krita MUI Jira Kotlin OpenSearch Statuspal

@github-actions

Copy link
Copy Markdown
Contributor

🏷️ Test Badge Generation (Shields.io)

hilbert

TeamCity Corsair BadgeSort Tails LOT Polish Airlines Tampermonkey ONLYOFFICE DLNA Guilded Netto CodeceptJS TELE5 Bower Koc Steelseries Qualys Republic of Gamers Wolfram Notepad++ Google Cloud Hexo webcomponents.org Dynamics 365 Stardock PlayStation 2 KaiOS

hsv

TeamCity Corsair BadgeSort ONLYOFFICE Qualys Koc Wolfram Bower Steelseries TELE5 Guilded CodeceptJS Netto DLNA Notepad++ Tampermonkey webcomponents.org Hexo Stardock PlayStation 2 Google Cloud Dynamics 365 LOT Polish Airlines Tails KaiOS Republic of Gamers

step

TeamCity Corsair BadgeSort Wolfram ONLYOFFICE Qualys Koc Steelseries Bower TELE5 Guilded Netto CodeceptJS DLNA Notepad++ PlayStation 2 LOT Polish Airlines Tampermonkey Stardock Dynamics 365 Hexo Google Cloud webcomponents.org Tails KaiOS Republic of Gamers

step_invert

TeamCity Corsair BadgeSort Wolfram ONLYOFFICE Qualys Koc Steelseries Bower TELE5 CodeceptJS Netto Guilded DLNA Notepad++ PlayStation 2 LOT Polish Airlines Tampermonkey Stardock Dynamics 365 Hexo Google Cloud webcomponents.org Tails KaiOS Republic of Gamers

luminance

TeamCity Corsair BadgeSort KaiOS PlayStation 2 LOT Polish Airlines Tampermonkey Stardock Republic of Gamers Wolfram Tails ONLYOFFICE Dynamics 365 Qualys Hexo Koc Steelseries Bower Google Cloud DLNA webcomponents.org TELE5 Guilded Notepad++ Netto CodeceptJS

@github-actions

Copy link
Copy Markdown
Contributor

🏷️ Test Badge Generation (Badgen.net)

hilbert

TeamCity Corsair BadgeSort Tails LOT Polish Airlines Tampermonkey ONLYOFFICE DLNA Guilded Netto CodeceptJS TELE5 Bower Koc Steelseries Qualys Republic of Gamers Wolfram Notepad++ Google Cloud Hexo webcomponents.org Dynamics 365 Stardock PlayStation 2 KaiOS

@github-actions

Copy link
Copy Markdown
Contributor

🏷️ Test Badge Generation (Shields.io)

hilbert

Nuke BadgeSort GitHub Rolls-Royce Maytag esbuild Reliance Industries Limited GoToMeeting cPanel POWERS Poly eBay Reebok Netflix Erlang Microsoft PowerPoint Metro Salt Project Apache OpenOffice Thumbtack 500px Battle.net Algolia HTML Academy Transport for London Heroku

hsv

Nuke BadgeSort GitHub Metro Reebok POWERS Microsoft PowerPoint Poly cPanel GoToMeeting Reliance Industries Limited esbuild Salt Project Thumbtack 500px Apache OpenOffice Battle.net Maytag Transport for London Algolia HTML Academy Heroku Rolls-Royce Erlang Netflix eBay

step

Nuke BadgeSort GitHub Reebok Microsoft PowerPoint Poly POWERS Metro cPanel GoToMeeting Reliance Industries Limited esbuild Salt Project Maytag Transport for London Apache OpenOffice Battle.net 500px Thumbtack Heroku HTML Academy Algolia Rolls-Royce Erlang Netflix eBay

step_invert

Nuke BadgeSort GitHub Reebok Microsoft PowerPoint Poly POWERS Metro cPanel GoToMeeting Reliance Industries Limited esbuild Salt Project Maytag Transport for London Apache OpenOffice Battle.net 500px Thumbtack Algolia HTML Academy Heroku Rolls-Royce eBay Netflix Erlang

luminance

Nuke BadgeSort GitHub Heroku Rolls-Royce Maytag HTML Academy Erlang Transport for London Netflix Reebok eBay Microsoft PowerPoint Poly POWERS Metro Apache OpenOffice Algolia Battle.net 500px Thumbtack cPanel GoToMeeting Salt Project Reliance Industries Limited esbuild

@github-actions

Copy link
Copy Markdown
Contributor

🏷️ Test Badge Generation (Badgen.net)

hilbert

Nuke BadgeSort GitHub Rolls-Royce Maytag esbuild Reliance Industries Limited GoToMeeting cPanel POWERS Poly eBay Reebok Netflix Erlang Microsoft PowerPoint Metro Salt Project Apache OpenOffice Thumbtack 500px Battle.net Algolia HTML Academy Transport for London Heroku

@github-actions

Copy link
Copy Markdown
Contributor

🏷️ Test Badge Generation (Shields.io)

hilbert

Adafruit Dolby ESPHome Apple TV Zara BadgeSort Zendesk NumPy MariaDB Foundation DeviantArt Envato HelloFresh GSK R3 SanDisk Pinterest N26 Vue.js Android KLM Sololearn Microsoft Outlook Mattermost Cirrus CI Backbone.js okcupid

hsv

Adafruit Dolby ESPHome Apple TV Zara BadgeSort GSK HelloFresh Envato DeviantArt Android Vue.js N26 Zendesk NumPy KLM Backbone.js Sololearn Microsoft Outlook Mattermost MariaDB Foundation Cirrus CI okcupid Pinterest SanDisk R3

step

Adafruit Dolby ESPHome Apple TV Zara BadgeSort GSK Envato HelloFresh N26 DeviantArt Vue.js Android NumPy Zendesk MariaDB Foundation Mattermost Backbone.js Microsoft Outlook KLM Sololearn okcupid Cirrus CI Pinterest SanDisk R3

step_invert

Adafruit Dolby ESPHome Apple TV Zara BadgeSort GSK HelloFresh Envato Android Vue.js DeviantArt N26 NumPy Zendesk MariaDB Foundation Mattermost Backbone.js Microsoft Outlook KLM Sololearn Cirrus CI okcupid R3 SanDisk Pinterest

luminance

Adafruit Dolby ESPHome Apple TV Zara BadgeSort okcupid NumPy Zendesk MariaDB Foundation Pinterest Mattermost SanDisk R3 Cirrus CI Backbone.js Microsoft Outlook KLM Sololearn GSK N26 DeviantArt Envato Vue.js Android HelloFresh

@github-actions

Copy link
Copy Markdown
Contributor

🏷️ Test Badge Generation (Badgen.net)

hilbert

Adafruit Dolby ESPHome Apple TV Zara BadgeSort Zendesk NumPy MariaDB Foundation DeviantArt Envato HelloFresh GSK R3 SanDisk Pinterest N26 Vue.js Android KLM Sololearn Microsoft Outlook Mattermost Cirrus CI Backbone.js okcupid

@github-actions

Copy link
Copy Markdown
Contributor

🏷️ Test Badge Generation (Shields.io)

hilbert

mdBook BadgeSort Directus Observable Asana Tampermonkey Passport ŠKODA ASDA Pingdom Fido Alliance Blogger WebdriverIO Fortinet Deutsche Bahn Auchan McAfee Nissan ProtonDB Adobe Dreamweaver Pytest Thunderbird Zerodha Webflow Plausible Analytics OpenCV

hsv

mdBook BadgeSort McAfee Deutsche Bahn Auchan Fortinet Blogger WebdriverIO Fido Alliance Pingdom ASDA ŠKODA Passport Tampermonkey Pytest Directus Thunderbird Zerodha Asana Observable Webflow Plausible Analytics OpenCV Adobe Dreamweaver ProtonDB Nissan

step

mdBook BadgeSort McAfee Auchan Deutsche Bahn Fortinet WebdriverIO Blogger Fido Alliance ASDA Pingdom ŠKODA Passport Directus Asana Tampermonkey Observable Thunderbird Zerodha Pytest OpenCV Webflow Plausible Analytics Adobe Dreamweaver Nissan ProtonDB

step_invert

mdBook BadgeSort McAfee Auchan Deutsche Bahn Fortinet WebdriverIO Blogger Fido Alliance Pingdom ASDA ŠKODA Passport Directus Asana Tampermonkey Observable Thunderbird Zerodha Pytest Plausible Analytics Webflow OpenCV Adobe Dreamweaver ProtonDB Nissan

luminance

mdBook BadgeSort Directus Asana Nissan Tampermonkey Observable McAfee ProtonDB Auchan Deutsche Bahn OpenCV Webflow Plausible Analytics Fortinet Thunderbird Zerodha WebdriverIO Blogger Pytest ŠKODA ASDA Adobe Dreamweaver Passport Fido Alliance Pingdom

@github-actions

Copy link
Copy Markdown
Contributor

🏷️ Test Badge Generation (Badgen.net)

hilbert

mdBook BadgeSort Directus Observable Asana Tampermonkey Passport ŠKODA ASDA Pingdom Fido Alliance Blogger WebdriverIO Fortinet Deutsche Bahn Auchan McAfee Nissan ProtonDB Adobe Dreamweaver Pytest Thunderbird Zerodha Webflow Plausible Analytics OpenCV

@github-actions

Copy link
Copy Markdown
Contributor

🏷️ Test Badge Generation (Shields.io)

hilbert

SpaceX BadgeSort Vapor freeCodeCamp Boehringer Ingelheim USPS Fur Affinity Cachet Qzone Openverse Cookiecutter Neutralinojs Origin Honda McLaren Power Pages Jetpack Compose D-Wave Systems Prime Zhihu Python Microsoft Visio Kofax Visual Studio Funimation Swiper

hsv

SpaceX BadgeSort Vapor McLaren Origin Neutralinojs Cookiecutter Qzone Openverse Cachet Prime D-Wave Systems Kofax Fur Affinity Python Zhihu Boehringer Ingelheim Jetpack Compose Microsoft Visio USPS freeCodeCamp Power Pages Swiper Visual Studio Funimation Honda

step

SpaceX BadgeSort Vapor McLaren Origin Neutralinojs Cookiecutter Cachet Qzone Openverse Boehringer Ingelheim Kofax Fur Affinity Microsoft Visio Python Zhihu D-Wave Systems Jetpack Compose Prime freeCodeCamp Funimation USPS Visual Studio Swiper Power Pages Honda

step_invert

SpaceX BadgeSort Vapor McLaren Origin Neutralinojs Openverse Qzone Cachet Cookiecutter Boehringer Ingelheim Kofax Fur Affinity Microsoft Visio Python Zhihu D-Wave Systems Jetpack Compose Prime Power Pages Swiper Visual Studio USPS Funimation freeCodeCamp Honda

luminance

SpaceX BadgeSort freeCodeCamp Vapor Funimation Boehringer Ingelheim USPS Honda McLaren Visual Studio Kofax Swiper Fur Affinity Microsoft Visio Python Zhihu D-Wave Systems Jetpack Compose Prime Origin Power Pages Neutralinojs Cookiecutter Cachet Qzone Openverse

@github-actions

Copy link
Copy Markdown
Contributor

🏷️ Test Badge Generation (Badgen.net)

hilbert

SpaceX BadgeSort Vapor freeCodeCamp Boehringer Ingelheim USPS Fur Affinity Cachet Qzone Openverse Cookiecutter Neutralinojs Origin Honda McLaren Power Pages Jetpack Compose D-Wave Systems Prime Zhihu Python Microsoft Visio Kofax Visual Studio Funimation Swiper

@github-actions

Copy link
Copy Markdown
Contributor

🏷️ Test Badge Generation (Shields.io)

hilbert

Audio-Technica Hyper BadgeSort stylelint Badgr OSMC Nodemon Bitcoin Replit Keep a Changelog Smashing Magazine Intermarche Riot Games Linkfire React Router Adobe XD Notepad++ homify Vue.js Boxy SVG Adobe Lightroom Internet Explorer Okta Semantic Web Ionos Starling Bank

hsv

Audio-Technica Hyper BadgeSort Keep a Changelog Smashing Magazine Replit Bitcoin Nodemon Notepad++ homify Vue.js stylelint OSMC Okta Adobe Lightroom Semantic Web Internet Explorer Boxy SVG Ionos Badgr Starling Bank Adobe XD Linkfire Intermarche Riot Games React Router

step

Audio-Technica Hyper BadgeSort Keep a Changelog Smashing Magazine Replit Bitcoin Nodemon Notepad++ Vue.js homify stylelint OSMC Ionos Semantic Web Internet Explorer Okta Boxy SVG Adobe Lightroom Badgr Starling Bank Adobe XD Intermarche Riot Games React Router Linkfire

step_invert

Audio-Technica Hyper BadgeSort Keep a Changelog Smashing Magazine Replit Bitcoin Nodemon Notepad++ homify Vue.js stylelint OSMC Ionos Semantic Web Internet Explorer Okta Boxy SVG Adobe Lightroom Starling Bank Badgr Adobe XD Linkfire React Router Riot Games Intermarche

luminance

Audio-Technica Hyper BadgeSort Badgr stylelint OSMC Ionos Intermarche Semantic Web Starling Bank Riot Games Internet Explorer React Router Okta Linkfire Keep a Changelog Boxy SVG Smashing Magazine Replit Adobe XD Adobe Lightroom Vue.js Bitcoin Nodemon homify Notepad++

@github-actions

Copy link
Copy Markdown
Contributor

🏷️ Test Badge Generation (Badgen.net)

hilbert

Audio-Technica Hyper BadgeSort stylelint Badgr OSMC Nodemon Bitcoin Replit Keep a Changelog Smashing Magazine Intermarche Riot Games Linkfire React Router Adobe XD Notepad++ homify Vue.js Boxy SVG Adobe Lightroom Internet Explorer Okta Semantic Web Ionos Starling Bank

@renovate renovate Bot removed the type/patch label Oct 27, 2026
@github-actions

Copy link
Copy Markdown
Contributor

🏷️ Test Badge Generation (Shields.io)

hilbert

CSS Modules BadgeSort Boots Confluence GIMP Duolingo Commerzbank DHL SVG Ferrari N.V. Hive Bugatti FileZilla uBlock Origin Polkadot Sass Home Assistant Community Store Google Photos Hasura Zhihu VK Testin gitignore.io Wikimedia Commons Semantic Web Ingress

hsv

CSS Modules BadgeSort uBlock Origin FileZilla Ferrari N.V. SVG GIMP Commerzbank DHL Duolingo Hasura Home Assistant Community Store Wikimedia Commons Testin Semantic Web Zhihu VK Google Photos Confluence gitignore.io Boots Ingress Polkadot Sass Bugatti Hive

step

CSS Modules BadgeSort uBlock Origin FileZilla GIMP Ferrari N.V. SVG DHL Commerzbank Duolingo Confluence Semantic Web gitignore.io Wikimedia Commons VK Testin Zhihu Google Photos Hasura Home Assistant Community Store Boots Ingress Bugatti Polkadot Hive Sass

step_invert

CSS Modules BadgeSort uBlock Origin FileZilla GIMP Ferrari N.V. SVG Commerzbank DHL Duolingo Confluence Semantic Web gitignore.io Wikimedia Commons VK Testin Zhihu Google Photos Hasura Home Assistant Community Store Ingress Boots Sass Hive Polkadot Bugatti

luminance

CSS Modules BadgeSort Boots uBlock Origin Confluence FileZilla Bugatti Polkadot Hive Semantic Web gitignore.io Wikimedia Commons Ingress GIMP Ferrari N.V. VK Testin Zhihu Google Photos Sass Hasura Duolingo Home Assistant Community Store SVG DHL Commerzbank

@github-actions

Copy link
Copy Markdown
Contributor

🏷️ Test Badge Generation (Badgen.net)

hilbert

CSS Modules BadgeSort Boots Confluence GIMP Duolingo Commerzbank DHL SVG Ferrari N.V. Hive Bugatti FileZilla uBlock Origin Polkadot Sass Home Assistant Community Store Google Photos Hasura Zhihu VK Testin gitignore.io Wikimedia Commons Semantic Web Ingress

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants