Coding agents · Comparison
Codecov vs Supercov: reporting coverage vs measuring it
Codecov reports coverage your tools already measured; Supercov measures it, including MC/DC and assertion coverage. Gate pull requests with either, or use both.
What is the difference?
Codecov does not measure coverage. It receives the report your coverage tool already wrote and turns it into pull-request checks, comments and history. Codecov’s documentation says it “centrally ingests” XML, JSON and text reports: Cobertura, JaCoCo, LCOV, Go and more.
Supercov measures. It runs your existing test command and records which lines,
branches and conditions ran, for each test, and which source statements the
tests’ assertions check. Everything stays in the repository’s .supercov/
directory; there is no account and nothing is uploaded.
So the two are not alternatives in the usual sense. You can gate pull requests with either, or measure with Supercov and report with Codecov.
Compare what each one does
| Question | Codecov | Supercov |
|---|---|---|
| Measures coverage itself | No, it needs a report from a coverage tool | Yes, it wraps your test command |
| Coverage criteria | Whatever the uploaded report contains | Lines, branches, MC/DC, per test and assertion coverage |
| Gate a pull request | codecov/project and codecov/patch status checks | runs check floors and runs patch in your CI job |
| Feedback on the pull request | Comments and a web dashboard | GitHub annotations, with no token and no comment |
| History across commits | Kept by the service | Local runs you can compare with diff |
| Where the data goes | Uploaded to Codecov | Stays on the machine |
| Account | Free for one user on private repositories and for open source; paid per user beyond that | None |
Codecov’s patch check “only measures lines adjusted in the pull request”, and its project check compares overall coverage with the pull request’s base. Plan details are from Codecov’s pricing page in September 2026; check it for current limits, such as uploads per month on the free plan.
Use both: measure with Supercov, report with Codecov
If your team already reviews coverage in Codecov, keep it. Supercov writes the formats Codecov reads, from the same totals its own checks use:
npx supercov -- npm test
npx supercov runs report --format lcov --output coverage/lcov.info
Then upload coverage/lcov.info with Codecov’s
CLI or GitHub Action, as you
would any LCOV file. --format cobertura writes Cobertura XML instead.
Two things do not travel. MC/DC conditions are not exported as branches,
because Codecov would then show condition obligations as branch coverage, a
different measurement. And LCOV hit counts are 1 or 0: Supercov records
that a line ran, not how many times. The condition detail stays in Supercov’s
own queries and HTML report.
Or gate pull requests without a hosted service
Supercov can answer Codecov’s two questions in the CI job itself:
npx supercov -- npm test
npx supercov runs patch --base origin/main --min-lines 100 --annotate github
npx supercov runs check --min-lines 90 --min-branches 80 --min-mcdc 80
runs patch checks only the lines the change added or modified, against the
merge base, so commits others landed after you branched are not counted
against you. Check out full history for it (actions/checkout with
fetch-depth: 0). runs check fails the job below a floor, and it refuses to
pass on a run whose tests failed. The CLI reference lists every
flag.
What you give up is the hosted part: a dashboard across repositories, trends over months and a comment on every pull request.
What neither report tells you
Line and branch coverage, in Codecov or anywhere else, says what ran. A test can run every line of a checkout function and check only the order’s status, never its total. Supercov’s assertion coverage links source statements to the assertions that check them, and MC/DC shows a condition that never changed an outcome on its own.
That is also what a coding agent needs to write the next test. It can ask Supercov which conditions are missing and which statements no assertion checks, then rerun the suite to confirm, without a hosted service in the loop.
Which should you choose?
- Keep Codecov if your team works from its dashboards, pull-request comments and history across many repositories. Add Supercov underneath when you want MC/DC or assertion coverage, and export its LCOV.
- Use Supercov alone if you want coverage gates without an account or an upload, or if the main reader of the result is a coding agent.
- Use both when people review coverage in Codecov and agents fix it with Supercov.
For how Supercov fits beside test runners, mutation testing and browser tests, see QA tools for coding agents.