Open source AGPL-3.0 Single binary + Postgres

Coverage in every pull request.

Diff coverage and merge gates on Bitbucket, GitHub and GitLab — plus line annotations right in the Bitbucket and GitHub diff view. Self-host it free, or let us run it.

Bitbucket · GitHub · GitLab

Free for public repos · self-host in a minute: docker compose up — migrations apply themselves.

gocov coverage — check run · pull request #142 Gate passed
84.2% +0.6% diff coverage 91.7% changed lines 110 / 120 covered
internal/billing/invoice.go — 2 uncovered changed lines
87
	if err := tx.Commit(); err != nil {
88
		return fmt.Errorf("commit: %w", err)
89
	}
One endpoint, format auto-detected Go cover profiles JS / TS LCOV — Jest, Vitest, nyc Java / Kotlin JaCoCo XML Python Cobertura — coverage.py PHP Clover — PHPUnit Ruby SimpleCov .NET / C++ Cobertura XML

Up and running in three steps

Self-hosted, there's no signup and no seats to count. Run the server, claim your workspace, point CI at it.

1

Run the server

One container plus Postgres. Migrations apply automatically on boot.

$ docker compose up
2

Claim your workspace

Sign in with your forge and claim your org, group or workspace in the UI. One token for all of it — repos register themselves on first upload.

# workspace variables, set once GOCOV_SERVER=https://gocov.example GOCOV_TOKEN=•••••••••••••••
3

Upload from CI

The CLI auto-detects GitHub Actions, Bitbucket Pipelines and GitLab CI.

# in your workflow $ go run github.com/gocov/gocov/cmd/gocov@latest \ upload coverage.out

Your coverage tool treats you like an edge case.

Codecov and Coveralls are GitHub-first. Anywhere else you get the side-port: no per-line annotations in the diff view and a thinner integration. Bitbucket Cloud has no native coverage view either — the request below has been open since 2022.

As of August 2026, gocov is the only coverage product that posts per-line annotations inside the Bitbucket Cloud PR diff.
+ BCLOUD-22379 · Bitbucket Cloud · public issue tracker

Show code coverage in the pull request diff view

Gathering Interest since 2022 77 votes 47 watchers

Coverage where reviewers already look

Not another dashboard to check — results land inside the pull request.

Diff coverage PR comments

Changed lines are intersected with coverage; a comment lists what's untested. Re-uploads update the same comment — no stacking.

Gates that block merges

Per-repo minimums for total and diff coverage plus a drop tolerance. Violations fail the commit status, so branch protection can block the PR.

Native in-PR reports

GitHub check runs, Bitbucket Code Insights report cards and diff-coverage comments on GitLab merge requests — with inline annotations on uncovered changed lines right in the GitHub and Bitbucket diff views.

Line-by-line source view

Every file renders with coverage overlay and hit counts, fetched from the forge at the exact commit and cached immutably.

Trends and badges

A coverage trend chart per branch — rendered server-side, no JS chart library — and an SVG badge per repo for your README.

OAuth sign-in, no passwords

Web UI sign-in with Bitbucket, GitHub and GitLab, restricted to members of the orgs you track. No passwords ever stored. One-click workspace connect.

Run it yourself, or let us run it

Same product either way — pick the operations model that fits.

Self-hosted

$0 forever
  • AGPL-3.0 — full product, no feature gates
  • Your infra, your data
  • Community support
Deploy from GitHub

Public repos are free on hosted, forever — fair use, no upload limits. An active committer is anyone who commits to a covered private repo in the last 30 days.

Self-host and nothing leaves your infra

gocov is a single Go binary in front of Postgres. Run it yourself and no vendor gets your source, your coverage, or your commit metadata. On hosted we store coverage and commit metadata — never your source. The architecture is deliberately extensible: formats, forges and blob storage sit behind interfaces.

AGPL-3.0 licensed — fork it, patch it, ship it docker compose up — production-shaped from day one Bitbucket + GitHub + GitLab — one instance, all three forges Unlimited repos and users — it's your server