On this page
The best code coverage tools in 2026 are the one your language already ships (JaCoCo, coverage.py, Istanbul or c8, Go cover, llvm-cov, Coverlet, SimpleCov) to measure, Codecov, Coveralls, Qlty or SonarQube to track it in pull requests, and repowise to find which uncovered files are worth testing first. A single repository-wide percentage hides the shape of the gap, so the useful code coverage tools show per-file coverage, the coverage of the lines a change touches, and a trend.
The short list, as of October 2026:
- Per-language tools: measure coverage and write the report every platform reads.
- Codecov: hosted pull request comments, patch coverage and flags.
- Coveralls: a plain hosted dashboard with per-build history, priced per private repository.
- SonarQube: coverage as one metric inside quality gates, in the cloud or self-hosted.
- Qlty: coverage, linting and maintainability in one platform, with a free tier.
- repowise: ingests any report, gates patch coverage in CI, and ranks untested hotspots by churn and dependents.
We build repowise, so weigh our entry accordingly. The measurements we publish about it, with their methods, are on the benchmarks page.
How we evaluated
We compared each tool on what a team decides on, using vendor pricing pages fetched on 29 October 2026.
- Granularity: file level, line level, or only a project total.
- Change-level feedback: does it judge the lines a pull request changed, or only the whole repository?
- Risk context: can it tell a leaf utility from a heavily imported file that changes weekly?
- Where it runs and what it costs: hosted or self-hosted, and the list price.
Code coverage tools compared
| Tool | Kind | Per-file view | Patch coverage on PRs | Risk ranking (churn, dependents) | Hosting | Price (October 2026) |
|---|---|---|---|---|---|---|
| JaCoCo | Language tool (JVM) | HTML, XML, CSV | No | No | Local files | Free |
| coverage.py | Language tool (Python) | HTML, JSON, LCOV | No | No | Local files | Free |
| Istanbul / nyc and c8 | Language tool (JS, TS) | HTML, LCOV | No | No | Local files | Free |
| Go cover | Language tool (Go) | Profile, HTML | No | No | Local files | Free |
| llvm-cov and grcov | Language tool (C, C++, Rust) | HTML, LCOV | No | No | Local files | Free |
| Coverlet | Language tool (.NET) | Cobertura, LCOV | No | No | Local files | Free |
| SimpleCov | Language tool (Ruby) | HTML, JSON | No | No | Local files | Free |
| Codecov | Platform | Yes | Yes | No | Hosted | Free for one user; Team $5 per user per month (up to 10 users); Pro $12 per user per month |
| Coveralls | Platform | Yes | Build status checks | No | Hosted; on-prem on Enterprise | Free for open source; Starter $10 per month for one private repo; Org $50 per month for 10 |
| SonarQube | Platform | Yes | On new code | Partial | Cloud or SonarQube Server | Cloud free to 50k private LOC; Team from $34 per month for 100k LOC |
| Qlty | Platform | Yes | Yes | Hotspots on paid plans | Hosted | Free; Pro $20 and Enterprise $30 per contributor per month |
| repowise | Index and gate | Yes, with a line heatmap | repowise coverage check | Yes | Self-hosted CLI and dashboard; hosted | Open source (AGPL-3.0); hosted Free is two public repositories |
Scroll the table sideways to see every column.
Prices are list prices from each vendor's page on 29 October 2026 and change often. Codecov's Team plan is $5 per user per month billed monthly and $4 billed annually; we list the monthly price. I build repowise; every other tool is described the way its own documentation describes it.
Why aggregate coverage hides risk
A repository at 82% line coverage can still have one file at 12%, and if that file changes weekly, the headline number understates the risk. One percentage compresses the tree and cannot answer three practical questions: which files are undercovered, which of those still change, and whether coverage is rising or falling.
That is why the sections below judge tools on file-level detail, change-level gates and ranking, not on whether they print a number.
Per-language code coverage tools
Language tools measure coverage and write the report that every hosted platform consumes. They are free, run locally and need no account. All of them can emit LCOV or Cobertura, so you can swap the platform later without touching the test setup.
| Language | Tool | Command |
|---|---|---|
| Python | coverage.py, pytest-cov | pytest --cov=src --cov-branch --cov-report=lcov:coverage.lcov |
| JavaScript, TypeScript | c8 (V8 native), Istanbul/nyc (instrumentation) | c8 --reporter=lcov npm test |
| Java, Kotlin | JaCoCo | mvn verify with the jacoco-maven-plugin |
| Go | go test -coverprofile | go test -coverprofile=cover.out ./... |
| Rust | cargo llvm-cov, grcov | cargo llvm-cov --lcov --output-path lcov.info |
| C, C++ | llvm-cov, gcov | clang -fprofile-instr-generate -fcoverage-mapping |
| C# / .NET | Coverlet | dotnet test --collect:"XPlat Code Coverage" |
| Ruby | SimpleCov | SimpleCov.start at the top of spec_helper.rb |
Scroll the table sideways to see every column.
pytest-cov adds --cov-branch for branch coverage and --cov-context=test to record which test ran each line, which is what makes per-test selection possible later.
Pick them if you want no vendor dependency and files on disk. None gives a trend or a risk ranking on its own, so most teams pair one with a platform below.
Codecov
Codecov is the most common hosted answer for pull request coverage feedback. Its pull request comment shows head, patch and change coverage, so a reviewer sees what the change itself covered (Codecov docs). It also offers flags and components for monorepos, test analytics for flaky tests and bundle analysis for JavaScript.
Pricing as of October 2026, per codecov pricing: a free Developer plan for one user on private repositories, Team at $5 per user per month ($4 billed annually) for up to ten users, Pro at $12 per user per month, and a custom Enterprise plan.
Pick it if you want coverage comments in every pull request and a hosted dashboard with low setup.
Coveralls
Coveralls is a straightforward hosted dashboard that tracks coverage by build, subproject and source file. It merges reports from parallel CI jobs and shows history per repository (docs).
Pricing as of October 2026, per coveralls.io/pricing: free for open source; private repositories run $10 per month for one repository, $50 for ten, $100 for twenty, $200 for forty and $400 for unlimited, all with unlimited users; Enterprise is $35 per user per month hosted (40-seat minimum) or $25 on-prem.
Pick it if you want a plain coverage history for a few private repositories at a predictable price.
SonarQube
SonarQube treats coverage as one metric beside smells, reliability and security, and gates on it through quality gates. It imports reports from your test runner and applies the gate to new code, so a pull request can fail on the coverage of what it added (SonarQube docs).
Pricing as of October 2026, per sonarsource.com: SonarQube Cloud is free for private projects up to 50k lines, Team starts at $34 per month for up to 100k lines, and SonarQube Server editions are priced per instance by lines of code.
Pick it if you already run SonarQube and want coverage in the same gate as your other quality rules. See the SonarQube alternatives if you are weighing it.
Qlty
Qlty bundles code coverage with linting, maintainability and duplication, and its Free plan includes coverage. A contributor is anyone who pushed an analyzed commit, uploaded coverage or logged in during a rolling 30 days.
Pricing as of October 2026, per qlty.sh/pricing: Free at $0 with 1,000 analysis minutes a month, Pro at $20 per contributor per month (trends, hotspots, one year of history), Enterprise at $30 per contributor per month.
Pick it if you want one hosted tool for coverage and lint feedback and the free tier fits.
repowise
repowise reads the coverage report you already produce and adds the context a percentage lacks: how often a file changes, how many files depend on it, and which tests guard a change. It needs no LLM key and no network; ingesting a report is a parse and a database write.
pytest --cov --cov-report=lcov:coverage.lcov
repowise coverage add coverage.lcov
repowise health # untested hotspots now surface
repowise impacted-tests main...HEAD # the tests guarding this branch
repowise coverage check origin/main...HEAD --report coverage.lcov --fail-under 80
It accepts LCOV, Cobertura, Clover, JaCoCo, Go coverprofiles, Salesforce Apex JSON and coverage.py .coverage files. Four things set it apart:
- Measured and inferred, never mixed. A percentage comes only from an ingested report. Where no report covers a file, the dependency graph can still say a test reaches it, labelled
inferredand never turned into a number, so an unmeasured file is not called untested by mistake. - Untested hotspots. The
untested_hotspotfinding fires only when a file is a git hotspot (top-quartile churn), has at least 4 dependents and has line coverage below 40%. Severity rises with dependents and how thin coverage is. - Patch coverage in CI.
repowise coverage checkgates the share of changed lines the tests ran. It needs only git and a report, and a file the report never names is listed, never counted as 0%. - Test selection.
repowise impacted-testsmaps a diff to the tests whose recorded coverage touches it, so a large suite runs only what a change needs.

Agents get the same data through ten MCP tools: get_change_risk returns impacted_tests and patch_coverage, and get_risk returns test recommendations. More on test coverage in repowise, the code health layer and the untested hotspots guide.
Pick it if you want to know which uncovered files to test first, gate patch coverage without a hosted service, or run only the tests a change needs.
How to choose
- Solo or open source: your language's tool plus Codecov's free plan, Coveralls' open source tier or Qlty Free.
- Small team on private repositories: Codecov Team or Coveralls Starter for pull request feedback, plus repowise to rank what to test.
- Already on SonarQube: keep coverage in its quality gate; add repowise when you need hotspot ranking.
- Everything on your own infrastructure: language tools, SonarQube Server, Coveralls on-prem and repowise all run self-hosted.
- Large test suite, slow CI: repowise
impacted-teststo select the tests a branch needs.
The tools combine well, because every one of them reads the same LCOV or Cobertura file. See how to prioritize technical debt for turning the ranking into a plan, and best code health tools for the wider category.
FAQ
- What are the best code coverage tools?
- Use your language's tool to measure (coverage.py, JaCoCo, c8 or Istanbul, Go cover, llvm-cov, Coverlet, SimpleCov), then a platform to track it: Codecov for pull request comments, Coveralls for simple per-repo history, SonarQube for quality gates, Qlty for coverage with linting. Add repowise to rank untested files by risk.
- What are the best code coverage tools for Python?
- coverage.py with pytest-cov is the standard baseline: it measures line and branch coverage and exports HTML, XML, JSON and LCOV. Add Codecov or Coveralls for hosted history and pull request feedback, or repowise to rank untested files by risk.
- What is the best code coverage tool for Java?
- JaCoCo is the standard for the JVM and writes XML that Codecov, Coveralls, SonarQube and repowise all read. Run it through the Maven or Gradle plugin.
- What is patch coverage?
- Patch coverage is the share of lines changed in a pull request that the tests executed. It is a better gate than overall coverage because it judges only what the change added. In repowise,
repowise coverage checkcomputes it from git and a report. - What is an untested hotspot?
- An untested hotspot is a file that changes often, has many dependents and has little test coverage. In repowise it means 8 or more commits in 90 days, at least 4 dependents and line coverage under 40%. It is the "write tests before you refactor" list.
- Is Codecov or Coveralls better?
- Codecov offers richer pull request feedback, flags and test analytics, billed per user. Coveralls is simpler and is billed per private repository, which can be cheaper for a few repositories. Both read the same standard report formats.
- Is 80% coverage a good target?
- It is a common gate, but the figure matters less than where the gaps are. Apply 80% to changed lines, and watch the files with the most churn and dependents.
- Can I run code coverage analysis without a hosted service?
- Yes. The language tools run locally, and repowise ingests the reports and gates patch coverage from the command line with no network.



