Version 0.6 available · open source, Apache 2.0

One quality bar for all your code.

kerbo checks Java, TypeScript, Python and Go with a 7 MB binary, up to 23 times faster and with 90 times less memory: the same rules and a single report, counting exactly like Checkstyle, PMD, ESLint, ruff and golangci-lint. It is built so that AI agents cannot weasel out of the rules.

curl -fsSL https://kerbo.matiascaliz.com.ar/install.sh | sh

Why

Five tools, five configurations and a server in swap.

A repo with a Java backend, a TypeScript front end and a Python service carries one linter per language today, each with its plugins, its runtime, its report format and its own way of counting the same thing. kerbo is a single native engine that applies the same rules to all of them.

23×
faster than Checkstyle + PMD on a Java backend of 3,143 files
14×
faster than ESLint + sonarjs on a TypeScript front end of 2,667 files
90×
less memory: 8 MB against 740 MB on the same Java backend
LanguageToolTimeCPUMemory
Java · 3,143 filesCheckstyle + PMD21.2 s47.9 s740 MB
kerbo0.9 s2.6 s8 MB
TypeScript · 2,667 filesESLint + sonarjs15.7 s27.2 s606 MB
kerbo1.1 s3.0 s10 MB
Go · 65 filesgolangci-lint0.87 s0.90 s165 MB
kerbo0.04 s0.09 s5 MB
Python · 154 filesruff0.06 s0.04 s18 MB
kerbo0.10 s0.29 s7 MB

Measured on October 19, 2026 on production repos, with version 0.1. A fair comparison: each tool runs only the five rules kerbo mirrors (file and function length, cyclomatic and cognitive complexity, and parameters), with the same thresholds and on the same files, and both give exactly the same results. In Python, ruff is already written in Rust and is still faster; there kerbo wins on memory and on being a single tool for everything.

What it does

Rules written once, applied the same way in every language.

01 · one binary

No runtimes, no plugins

No node_modules with ESLint per repo, no tool venvs, no Gradle or Maven plugins. One Rust executable, the same for all your repos.

02 · same bar

Universal rules

File and function length, cyclomatic and cognitive complexity, and parameters: one definition and one threshold across the four languages, magic numbers and short names in all four, nesting in TypeScript and Go, duplicate blocks in all four and commented-out code in Python and Go. And Rust, with clippy's rules.

03 · parity

Same results as what it replaces

Every rule is validated against the original tool on real repos. If it does not flag exactly the same, it does not ship: zero differences on the measured production repos in all four languages, except for two documented limits of the TypeScript parser.

For AI agents

Guardrails for the code Claude Code, Cursor and Copilot write.

Today's linters talk to a person. An agent that writes and fixes in short loops needs something else: to know exactly what to fix, and that nobody lets it "fix" a problem by hiding it.

  • Anti-cheat. Warns when a change dodges a problem instead of fixing it: a new eslint-disable, noqa or @SuppressWarnings, a loosened threshold, a deleted, skipped or emptied test, an any.
  • Output for agents. Short rows grouped by file, prioritized, with how to fix each rule stated once: up to 3.7 times fewer tokens than JSON.
  • Claude Code hook. Reviews every file the agent edits, in milliseconds, and hands back what it found so the agent fixes it in the same turn.
  • Stable identifiers and kerbo explain. On the next turn the agent knows what it fixed, what is left and how to fix each rule.
  • MCP server for Claude Code, Cursor and any client. Coming up: imports that do not exist and functions that duplicate another one in the repo.

The ruff of Java

Checkstyle, PMD and SpotBugs, without a JVM and without compiling.

Python has ruff and JavaScript has Oxlint and Biome. Java is still stuck with three tools that each start a JVM, and SpotBugs forces you to compile before analyzing.

  • Today: complexity, length and parameters counted exactly like Checkstyle and PMD, without starting any JVM.
  • Coming up: every shape rule of Checkstyle and PMD, and SpotBugs' data-flow analysis on the source code (nulls, unclosed resources, swallowed exceptions) without going through bytecode.
  • Seconds instead of minutes in the gate, without fighting the build for memory.
CheckstylePMDSpotBugsESLintruffgolangci-lint→kerbo

Roadmap

Where it stands and what comes next.

Today · 0.6

Ready for a real repo, for agents and for the editor

Exact parity in four languages, also in nesting, magic numbers, short names, duplicate blocks and commented-out code. kerbo.toml, baseline, --diff, SARIF, GitHub Action, anti-cheat, Claude Code hook, MCP and LSP for IntelliJ, VS Code and Neovim, with messages in English and Spanish.

Next

More rules

Full syntactic Java, and shell scripts like ShellCheck.

Later

Data flow and more

SpotBugs-style checks without compiling, its own formatter, tests that run only when the change affects them, dependencies and secrets.

Open source under the Apache 2.0 license, free for commercial use too. The full roadmap (in Spanish) is in the repo.

Install

Try it on your repo in a minute.

On Linux and macOS, and on Windows from Git Bash or PowerShell, one command: it downloads the binary for your machine, verifies the sha256 and puts it in ~/.local/bin. Also with Homebrew, brew install mati-caliz/tap/kerbo, or with Rust, cargo install kerbo --locked. Messages follow your locale; --lang en or lang = "en" in kerbo.toml forces English.

curl -fsSL https://kerbo.matiascaliz.com.ar/install.sh | sh
irm https://kerbo.matiascaliz.com.ar/install.ps1 | iex
kerbo check --lang en

Want to try it with your team, use Java or work with AI agents? Write to us and we will run it together on your repo.