Never merge untested code again.

PR comments, status checks, and line annotations on every pull request. Works with any CI. Your source never leaves it.

No credit card 5-min setup Free for public repos

app/Jobs · 1,842 uncoveredJOBSHTTPCONSOLE

How it works

Three steps. Five minutes. No code access.

Add one line to your CI pipeline. We read the coverage report your tests already write, and nothing else. OtterWise handles the rest.

01 · CI any provider

Drop one line in CI. Add a single curl step after your tests run. Works with every major CI provider and every coverage format.

02 · Ingest lcov, clover, +10

We just parse the report. lcov, cobertura, jacoco, clover and more. Your source never leaves your runner.

03 · Read dashboard + PR

Share a dashboard. Or a PR comment. Trends, cycle time and churn risk in one place, posted back to GitHub or pulled via the API.

Treemap coverage

The whole repo. At a glance.

Size is lines of code, colour is coverage. The bigger and warmer the block, the higher the risk, so you know where the next test pays off most.

  • Drill from repo to directory to file
  • “Gain if covered” for every path
Uncovered lines by path
Jobs 47.8%
app/Jobs
Uncovered1,842
Coverage47.8%
Gain if covered+6.2%
Transformers 4.0%
app/Transformers
Uncovered889
Coverage4.0%
Gain if covered+9.46%
User.tsx 1.2%
ui/User.tsx
Uncovered326
Coverage1.2%
Gain if covered+4.1%
Http 44.7%
app/Http
Uncovered1,214
Coverage44.7%
Gain if covered+5.8%
API 78.6%
app/Api
Uncovered188
Coverage78.6%
Gain if covered+1.2%
Console 42.4%
app/Console
Uncovered522
Coverage42.4%
Gain if covered+3.8%
Traits 58.1%
app/Traits
Uncovered274
Coverage58.1%
Gain if covered+2.0%
Coverage scale · low to high

Coverage trends

Track trends. Spot wins. Find gaps.

See how coverage moves across every branch: who's pushing it up, where code slips through untested, and which trends to act on before they become problems.

  • Every point links to its pull request
  • Per-branch and per-author history

Status checks

Block bad code before it ships.

Fail the PR when coverage drops or complexity spikes. Set your own thresholds and let automation enforce them. No more “looks good to me” merges.

  • Project and patch thresholds
  • Mark checks as required in GitHub

Everything else

Built for the whole team, not just the build.

Unlimited collaborators on every plan, privacy by default, and the knobs to make coverage fit how your team already works.

Privacy by default

We never access your source. We only store coverage metrics and the minimal service data needed to run OtterWise. Read about our code privacy efforts.

Invite your entire team

All plans (including free) offer unlimited collaborators at no extra charge. You can invite your entire engineering department, designers, PMs, and stakeholders.

Track progress anywhere

Watch coverage move over time in the dashboard, or pull the same numbers into your own with the API.

Onboarding assistance

All paid plans include priority chat support, and we can help you get running even if you have no CI pipeline yet.

Tailored to your workflow

Configure which files to ignore, when to fail CI, how coverage is calculated, and more. It bends to your setup, not the other way around.

Surface the riskiest code

Per-line coverage, type coverage, and CRAP scores point you at the code most likely to break, so you test what matters first.

Runs anywhere

Works with your stack. Whatever it is.

Any CI that can run tests and upload a coverage report. Official guides for GitHub Actions and ChipperCI; everything else via the bash uploader.

GitHub Actions Guide ChipperCI Guide
CircleCI
AppVeyor
Travis CI
Jenkins
Anything else bash uploader

Add one step after your tests. If it runs bash, it runs OtterWise.

$ bash <(curl -s otterwise.app/bash)
PHP JavaScript TypeScript Go Ruby Python .NET + any language
Read the uploader docs

Why OtterWise

Coverage insight, without the trade-offs.

Everything you'd want from a coverage tool, minus the part where it reads your code. How we handle privacy.

your CI runner · stays localsrc/tests/diffsgit.envvendor/otterwise · report only
OW OtterWise bot commented just now

Coverage report · +2.4%

src/api/auth.handler.ts 91%
src/webhooks/stripe.ts 68%
src/reports/export.ts 41%
coverage/project — 82.6% (+2.4%)
coverage/patch — 96% of new lines
3 new lines need tests
files ranked by risk top 4
src/legacy/migrator.ts 22%
src/reports/export.ts 41%
src/webhooks/stripe.ts 68%
src/parsers/csv.ts 72%
coverage trend · 30 days +2.4%
covering migrator.ts → +9.4% overall 82.6%

See exactly what your tests miss.

Free for public repos. Set up in 5 minutes. No credit card required.

FAQ

Questions, answered.

The short version: we never read your code, public repos are free forever, and you can cancel or get a refund anytime.

Something not covered?

Email us and someone from the team will help you out.

Privacy & security 3

No. By default, our servers can't reach your repository code at all.

We rely on GitHub annotations and the coverage files your tests already produce, so you get everything a coverage service offers without us ever reading your source.

Your organization can opt in to temporary code access if you want coverage rendered per line inside OtterWise. You can read about our code privacy efforts here.

Authentication runs through GitHub, traffic is encrypted in transit, and code access is off by default and opt-in only, so your source stays private unless you choose otherwise.

Login runs entirely through GitHub, so your existing GitHub access controls apply. Remove someone from your GitHub organization and they lose OtterWise access automatically.

Setup & compatibility 4

Any of them. OtterWise is language- and framework-agnostic; the only requirement is that your code is on GitHub.com and your test framework can output a Clover XML or LCOV file.

Most can: PHPUnit has it built in (via PCOV or Xdebug), and in JavaScript you get it through Istanbul/nyc. Our setup guides walk you through it.

Any framework that can output a Clover XML or LCOV report, including PHPUnit, Jest, Cypress, RSpec, and PyTest.

GitHub today, plus any CI that can run the uploader.

OtterWise tracks line coverage, branch coverage, patch coverage, type coverage, complexity, and CRAP.

Features 6

Yes, coverage across the whole repository, not just the diff, on every plan.

Yes, coverage of just the lines your pull request or commit changed, on every plan. It shows exactly which new lines aren't tested before you merge.

Weekly and monthly digests, leaderboards, coverage trends, and per-file breakdowns. Pro plans add deeper history and analytics.

Yes, unlimited collaborators on every plan, including free. Manage access through your GitHub organization, and work from shared PR comments and line annotations.

Free plans keep 6 months of history; Pro plans keep it indefinitely. Either way you can view past reports and track trends over time.

Yes. Pull your coverage, metrics, and history out through the API anytime, or ask support for an export.

Pricing & billing 5

Free forever, with unlimited collaborators and unlimited builds. We only charge for private repos.

Two ways to try it:

  • Public repos are free forever.
  • Private repos get a 7-day trial; billing starts when it ends.

None. There's no minimum commitment, cancel anytime from your account and billing stops immediately. You keep access until the end of the cycle.

After that we move you to the free plan and adjust automatically, for example disabling private repos over the free limit. Your data stays put.

Yes. On your organization's billing page, switch between yearly and monthly and hit Update plan, it applies instantly and prorates the difference. Or email [email protected] and we'll sort it.

Yes, no questions asked. Email [email protected] and we'll sort it out.

Ready when you are

Ship better code faster, with confidence.

PR comments, status checks, line annotations, and trends, all without code access. Free for public repos; per-repo pricing for private repos.