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.
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
$ kerbo check --lang en api web edge broker api/src/main/java/billing/InvoiceService.java:88:5: cyclomatic-complexity The function `settle` has cyclomatic complexity 11 (maximum 8) web/src/features/orders/use-cart.ts:42:1: cognitive-complexity The function `applyPromotions` has cognitive complexity 19 (maximum 15) edge/src/ingest/rtsp_source.py:43:5: parameter-count The function `__init__` takes 8 parameters (maximum 6) broker/internal/session/store.go:12:1: file-length The file has 512 lines (maximum 400) kerbo: 5810 files, 4 problems, 2250 ms
Why
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.
| Language | Tool | Time | CPU | Memory |
|---|---|---|---|---|
| Java · 3,143 files | Checkstyle + PMD | 21.2 s | 47.9 s | 740 MB |
| kerbo | 0.9 s | 2.6 s | 8 MB | |
| TypeScript · 2,667 files | ESLint + sonarjs | 15.7 s | 27.2 s | 606 MB |
| kerbo | 1.1 s | 3.0 s | 10 MB | |
| Go · 65 files | golangci-lint | 0.87 s | 0.90 s | 165 MB |
| kerbo | 0.04 s | 0.09 s | 5 MB | |
| Python · 154 files | ruff | 0.06 s | 0.04 s | 18 MB |
| kerbo | 0.10 s | 0.29 s | 7 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
No node_modules with ESLint per repo, no tool venvs, no Gradle or Maven plugins. One Rust executable, the same for all your repos.
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.
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
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.
eslint-disable, noqa or @SuppressWarnings, a loosened threshold, a deleted, skipped or emptied test, an any.kerbo explain. On the next turn the agent knows what it fixed, what is left and how to fix each rule.The ruff of Java
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.
Roadmap
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.
Full syntactic Java, and shell scripts like ShellCheck.
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
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.