Skip to content

coverctl

Stop chasing a single coverage number. Enforce coverage policies where it matters most - at the domain level. Works with 15 languages including Go, Python, TypeScript, Rust, Java, C#, C/C++, and more.

Your core business logic deserves 90% coverage. Your HTTP handlers? Maybe 70%. coverctl lets you define and enforce these policies per domain.


Traditional coverage tools give you one number for your entire codebase. But real applications have layers:

  • Core domain logic needs strict coverage - bugs here cost money
  • API handlers need solid coverage - they’re your contract with users
  • Infrastructure code can have lower thresholds - it’s often integration-heavy

A single percentage hides these distinctions. You either over-test utilities or under-test critical paths.


Define coverage policies that match your architecture:

.coverctl.yaml
version: 1
policy:
default:
min: 70
domains:
- name: core
match: ["./internal/core/..."]
min: 90
- name: api
match: ["./internal/api/..."]
min: 80
- name: infra
match: ["./internal/infra/..."]
min: 60
exclude:
- internal/generated/*

Terminal window
# Install
go install github.com/felixgeelhaar/coverctl@latest
# Initialize (interactive wizard)
coverctl init
# Enforce policies
coverctl check

That’s it. Coverage enforcement that understands your architecture.


Domain-Aware Policies

Set different coverage thresholds for each domain. Core logic at 90%, utilities at 60%.

Multi-Language Support

Supports 15 languages including Go, Python, TypeScript, Rust, Java, C#, C/C++, PHP, Ruby, Swift, and more.

CI-Ready

JSON output, GitHub Actions annotations, and exit codes for any CI system.

Auto-Discovery

Automatically detects your project structure. Interactive wizard or --no-interactive for scripts.



coverctl is built with domain-driven design principles. It understands that different parts of your codebase have different criticality levels.

  • Explicit policies - No guessing what coverage is expected
  • CI enforcement - Catch regressions before they merge
  • Clear feedback - Know exactly which domain failed and why

Ready to enforce coverage where it matters?

Get Started | View on GitHub