Laravel & Pest

Improve your Laravel code with coverage reporting

Built with and for Laravel, OtterWise helps you track code coverage & health, and prevents merging bad PRs.

  • Track code coverage, complexity and type coverage.
  • Block pull requests that reduce coverage, increase complexity, etc.
  • Unlike our competitors, we don't need access to your code.
  • Browser extension for per-line coverage and more.
  • Supports Pest with GitHub Actions, ChipperCI, or the bash uploader.

No credit card required for public repos.

OtterWise is built around the Laravel ecosystem, to ensure compatibility with all of the offerings. This means we support tracking code coverage for Laravel with Pest and PHPUnit with minimal effort. On top of that, you can track type coverage with a Pest plugin.

Setting up code coverage tracking with Laravel on ChipperCI requires just a simple modification to your existing PHPUnit or Pest config, and a new line. After registering and getting your upload token, you can modify your CI workflow like so:

- name: Run Tests
  cmd: php -d pcov.enabled=1 vendor/bin/pest --coverage-clover=build/logs/clover.xml tests

- name: Upload Coverage
  cmd: bash <(curl -s https://raw.githubusercontent.com/getOtterWise/bash-uploader/main/uploader.sh) --repo-token $OTTERWISE_TOKEN 

That's it! Why not give OtterWise a spin? You can use it for free on unlimited public repositories forever. Private repositories are charged at competitive pricing. Also, did we mention that unlike our competitors, we do not require you to grant us access to your source code? Read about our code privacy efforts here.

  • ChipperCI support
  • Pest and PHPUnit Laravel code coverage tracking
  • Type coverage through Pest plugin
  • Coverage trends and PR insights in GitHub

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.

See exactly what your tests miss.

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

Coverage trends

Track trends, spot wins, find gaps

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

Status checks

Block bad code before it ships

Status checks automatically fail PRs when coverage drops or complexity spikes. Set your own quality thresholds and let automation enforce them. No more “looks good to me” merges that introduce untested code.

API access

Your coverage data, one request away

A simple JSON API, included in every plan, with relaxed rate limits. Pull coverage, deltas, and trends into your own dashboards, scripts, or status pages.

See exactly what your tests miss.

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

Why OtterWise

Coverage insight, without the trade-offs

what leaves your runner secure
your CI runner stays local
src/ tests/ diffs .env git history
uploads only the coverage report
coverage.lcov · 1.2 MB ✓ received
source never leaves CI 0 bytes of code stored
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%

FAQ

Frequently asked questions

Something not covered here? Email [email protected] and we'll help you out.

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.

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.

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.

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.

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.

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

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.

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

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

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.

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.

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.

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

No, coverage reports only.

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.