Skip to content

Releases: coveragepy/coveragepy

7.13.5

17 Mar 10:41
7.13.5

Choose a tag to compare

Version 7.13.5 — 2026-03-17

  • Fix: issue 2138 describes a memory leak that happened when repeatedly using the Coverage API with in-memory data. This is now fixed.
  • Fix: the markdown-formatted coverage report didn’t fully escape special characters in file paths (issue 2141). This would be very unlikely to cause a problem, but now it’s done properly, thanks to Ellie Ayla.
  • Fix: the C extension wouldn’t build on VS2019, but now it does (issue 2145).

➡️  PyPI page: coverage 7.13.5.
➡️  To install: python3 -m pip install coverage==7.13.5

7.13.4

09 Feb 13:03
7.13.4

Choose a tag to compare

Version 7.13.4 — 2026-02-09

  • Fix: the third-party code fix in 7.13.3 required examining the parent directories where coverage was run. In the unusual situation that one of the parent directories is unreadable, a PermissionError would occur, as described in issue 2129. This is now fixed.
  • Fix: in test suites that change sys.path, coverage.py could fail with “RuntimeError: Set changed size during iteration” as described and fixed in pull 2130. Thanks, Noah Fatsi.
  • We now publish ppc64le wheels, thanks to Pankhudi Jain.

➡️  PyPI page: coverage 7.13.4.
➡️  To install: python3 -m pip install coverage==7.13.4

7.13.3

03 Feb 14:03
7.13.3

Choose a tag to compare

Version 7.13.3 — 2026-02-03

  • Fix: in some situations, third-party code was measured when it shouldn’t have been, slowing down test execution. This happened with layered virtual environments such as uv sometimes makes. The problem is fixed, closing issue 2082. Now any directory on sys.path that is inside a virtualenv is considered third-party code.

➡️  PyPI page: coverage 7.13.3.
➡️  To install: python3 -m pip install coverage==7.13.3

7.13.2

25 Jan 13:00
7.13.2

Choose a tag to compare

Version 7.13.2 — 2026-01-25

  • Fix: when Python is installed via symlinks, for example with Homebrew, the standard library files could be incorrectly included in coverage reports. This is now fixed, closing issue 2115.
  • Fix: if a data file is created with no read permissions, the combine step would fail completely. Now a warning is issued and the file is skipped. Closes issue 2117.

➡️  PyPI page: coverage 7.13.2.
➡️  To install: python3 -m pip install coverage==7.13.2

7.13.1

28 Dec 15:46
7.13.1

Choose a tag to compare

Version 7.13.1 — 2025-12-28

  • Added: the JSON report now includes a "start_line" key for function and class regions, indicating the first line of the region in the source. Closes issue 2110.
  • Added: The debug data command now takes file names as arguments on the command line, so you can inspect specific data files without needing to set the COVERAGE_FILE environment variable.
  • Fix: the JSON report used to report module docstrings as executed lines, which no other report did, as described in issue 2105. This is now fixed, thanks to Jianrong Zhao.
  • Fix: coverage.py uses a more disciplined approach to detecting where third-party code is installed, and avoids measuring it. This shouldn’t change any behavior. If you find that it does, please get in touch.
  • Performance: data files that will be combined now record their hash as part of the file name. This lets us skip duplicate data more quickly, speeding the combining step.
  • Docs: added a section explaining more about what is considered a missing branch and how it is reported: Examples of missing branches, as requested in issue 1597. Thanks to Ayisha Mohammed.
  • Tests: the test suite misunderstood what core was being tested if COVERAGE_CORE wasn’t set on 3.14+. This is now fixed, closing issue 2109.

➡️  PyPI page: coverage 7.13.1.
➡️  To install: python3 -m pip install coverage==7.13.1

7.13.0

08 Dec 13:20
7.13.0

Choose a tag to compare

Version 7.13.0 — 2025-12-08

  • Feature: coverage.py now supports .coveragerc.toml configuration files. These files use TOML syntax and take priority over pyproject.toml but lower priority than .coveragerc files. Closes issue 1643 thanks to Olena Yefymenko.
  • Fix: we now include a permanent .pth file which is installed with the code, fixing issue 2084. In 7.12.1b1 this was done incorrectly: it didn’t work when using the source wheel (py3-none-any). This is now fixed. Thanks, Henry Schreiner.
  • Deprecated: when coverage.py is installed, it creates three command entry points: coverage, coverage3, and coverage-3.10 (if installed for Python 3.10). The second and third of these are not needed and will eventually be removed. They still work for now, but print a message about their deprecation.

➡️  PyPI page: coverage 7.13.0.
➡️  To install: python3 -m pip install coverage==7.13.0

7.12.1b1

30 Nov 21:05
7.12.1b1

Choose a tag to compare

7.12.1b1 Pre-release
Pre-release

Version 7.12.1b1 — 2025-11-30

  • Fix: coverage.py now includes a permanent .pth file in the distribution which is installed with the code. This fixes issue 2084: failure to patch for subprocess measurement when site-packages is not writable.

➡️  PyPI page: coverage 7.12.1b1.
➡️  To install: python3 -m pip install coverage==7.12.1b1

7.12.0

18 Nov 11:37
7.12.0

Choose a tag to compare

Version 7.12.0 — 2025-11-18

  • The HTML report now shows separate coverage totals for statements and branches, as well as the usual combined coverage percentage. Thanks to Ryuta Otsuka for the discussion and the implementation.
  • The JSON report now includes separate coverage totals for statements and branches, thanks to Ryuta Otsuka.
  • Fix: except* clauses were not handled properly under the “sysmon” measurement core, causing KeyError exceptions as described in issue 2086. This is now fixed.
  • Fix: we now defend against aggressive mocking of open() that could cause errors inside coverage.py. An example of a failure is in issue 2083.
  • Fix: in unusual cases where a test suite intentionally exhausts the system’s file descriptors to test handling errors in open(), coverage.py would fail when trying to open source files, as described in issue 2091. This is now fixed.
  • A small tweak to the HTML report: file paths now use thin spaces around slashes to make them easier to read.

➡️  PyPI page: coverage 7.12.0.
➡️  To install: python3 -m pip install coverage==7.12.0

7.11.3

10 Nov 00:13
7.11.3

Choose a tag to compare

Version 7.11.3 — 2025-11-09

  • Fix: the 7.11.1 changes meant that conflicts between a requested measurement core and other settings would raise an error. This was a breaking change from previous behavior, as reported in issue 2076 and issue 2078.

    The previous behavior has been restored: when the requested core conflicts with other settings, another core is used instead, and a warning is issued.

  • For contributors: the repo has moved from Ned’s nedbat GitHub account to the coveragepy GitHub organization. The default branch has changed from master to main.

➡️  PyPI page: coverage 7.11.3.
➡️  To install: python3 -m pip install coverage==7.11.3

7.11.2

08 Nov 20:26
7.11.2

Choose a tag to compare

Version 7.11.2 — 2025-11-08

  • Fix: using the “sysmon” measurement core in 7.11.1, if Python code was claimed to come from a non-Python file, a NotPython exception could be raised. This could happen for example with Jinja templates compiled to Python, as reported in issue 2077. This is now fixed.
  • Doc: corrected the first entry in the 7.11.1 changelog.

➡️  PyPI page: coverage 7.11.2.
➡️  To install: python3 -m pip install coverage==7.11.2