NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Packagist · #47 most downloaded on Packagist
Library that provides collection, processing, and rendering functionality for PHP code coverage information.
Last release 5 days ago
03 Oct 2026
Ships fairly regularly
a new release about every 2 weeks
Some releases are documented
notes for 17 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
14 years old
256 releases · first in 2012
CodeCoverage::merge() copies all tests merged so far on every call, which makes merging the code coverage of many processes quadratic
CodeCoverage::merge() copies all tests merged so far on every call, which makes merging the code coverage of many processes quadraticSebastianBergmann\CodeCoverage\Report\Facade::renderJsonl() writes meta.json , coverage.jsonl , and tests.jsonl to a directory
SebastianBergmann\CodeCoverage\Report\Facade::renderJsonl() writes meta.json, coverage.jsonl, and tests.jsonl to a directory
meta.json reports the schema version, the generator, the time of generation, the source root, whether branch coverage was collected, and the number of files, executable lines, and executed linescoverage.jsonl reports one JSON object per line, one for each source file that has executable code: its path relative to the source root, its number of executable and executed lines, its executablecovered, partial, or uncovered, and, when it is partial, its executable lines that were not executedpartialtests.jsonl reports one JSON object per line, one for each test that executed at least one line: the identifier of the test, and per source file the lines that the test executed"45-52", single line numbers as "77"/ on all platforms, so that the same coverage data yields byte-identical outputenableCollectionOfDataNotFilteredUsingTargets() and dataNotFilteredUsingTargets() to allow collection of code coverage data that is not filtered using code coverage targetsOne column per quarter.
The serialization format for .cov files was bumped from version 3 to version 4; files serialized with previous versions cannot be loaded or merged any
.cov files was bumped from version 3 to version 4; files serialized with previous versions cannot be loaded or merged any moreThe summary of the text report was misaligned when path and branch coverage was reported
Fixed #1314 : Long-form property hook bodies reported as having full line coverage regardless of test coverage
No branch coverage was collected when Xdebug was used and branch coverage was requested without path coverage ( Granularity::LineAndBranch ) (Xdebug w
Granularity::LineAndBranch) (Xdebug was started without XDEBUG_CC_BRANCH_CHECK and only line coverage was collected)The test size filter of the HTML report now disables the buttons for test sizes that have no coverage data
Record how often a test executed a line or traversed a branch or path (the <covered> elements of the XML report now have a count attribute; drivers th
<covered> elements of the XML report now have a count attribute; drivers that do not collect hit counts report 1)Total row--phpunit-* to --coverage-*; custom CSS files that use these, or that use Bootstrap's --bs-* custom properties, need to be updatedSebastianBergmann\CodeCoverage\Report\Html\Colors::default() now uses #eef1f5 and #22272e for the breadcrumb colors instead of var(--bs-gray-200) and var(--bs-gray-800).cov files was bumped from version 1 to version 2; files serialized with previous versions cannot be loaded or merged any moreSource files were parsed repeatedly instead of read from the static analysis result cache, which made runs with path coverage enabled appear to hang
Fixed #1240 : Dark-mode HTML report: Warning and Danger backgrounds are indistinguishable for colorblind users #1244 : Do not build code unit map when
Fixed #1230 : Short-form property hook bodies wrongly classified as executable
RawCodeCoverageData::fromLineAndBranchCoverage()
RawCodeCoverageData::fromLineAndBranchCoverage()SebastianBergmann\CodeCoverage\Driver\Granularity enumeration with Line , LineAndBranch , and LineBranchAndPath cases
SebastianBergmann\CodeCoverage\Driver\Granularity enumeration with Line, LineAndBranch, and LineBranchAndPath casesSebastianBergmann\CodeCoverage\Driver\Selector::driver(Filter, Granularity) for selecting a driver by required granularitySebastianBergmann\CodeCoverage\NoSupportedDriverAvailableException thrown when no driver supports the requested granularityMerger::merge() now accepts any kind of iterableBranches: and Paths: lines on the presence of the corresponding data independentlySebastianBergmann\CodeCoverage\Driver\Selector::forLineCoverage(), use Selector::select() with Granularity::Line insteadSebastianBergmann\CodeCoverage\Driver\Selector::forLineAndPathCoverage(), use Selector::select() with Granularity::LineBranchAndPath insteadSebastianBergmann\CodeCoverage\CodeCoverage::enableBranchAndPathCoverage(), use Selector::select() with Granularity::LineBranchAndPath insteadSebastianBergmann\CodeCoverage\CodeCoverage::disableBranchAndPathCoverage(), use Selector::select() with Granularity::Line insteadSebastianBergmann\CodeCoverage\CodeCoverage::collectsBranchAndPathCoverage()SebastianBergmann\CodeCoverage\BranchAndPathCoverageNotSupportedException, replaced by BranchCoverageNotSupportedException and PathCoverageNotSupportedExceptionFixed #1212 : Filenames in HTML report are not escaped
Fixed #1160 : Ternary inside array spread: else-arm's line is falsely reported as not covered
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
CodeCoverage::merge() copies all tests merged so far on every call, which makes merging the code coverage of many processes quadratic
CodeCoverage::merge() copies all tests merged so far on every call, which makes merging the code coverage of many processes quadraticFixed #1212 : Filenames in HTML report are not escaped
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →