Component-level analysis
Each top-level directory of a project gets its own issues, trend, debt and owners from CODEOWNERS.
Sonda is open-source static code analysis and quality gates in the spirit of SonarQube, as a single fast binary. It judges every change on its new code — and lets you sound from any metric straight down to the line that caused it.


Terminal output is abridged from a real report; the numbers are sample data.
A falling coverage figure isn’t a task. Click any metric and Sonda lowers a line through your projects — project, component, file — until it reaches the issues behind it.
all projectsGate pass rate 81% · 253 of 312 passing.payments-platformGate failed on main · new_bugs > 0.services/Security level 1 of 5 · owner @checkout, from CODEOWNERS.services/checkout/config.ts4 issues · coverage 38.6%.config.ts:14 — js/hardcoded-password■ Blocker · CWE-798 · on new code.No letter grades, no color-only warnings. Every state has a shape, a word and a reason.
Each top-level directory of a project gets its own issues, trend, debt and owners from CODEOWNERS.
Reliability, security and maintainability on a five-step meter. Height and color agree, so the scale reads without a legend.
Set the conditions a change must meet. Sonda says which condition failed and by how much — and exits 1, so CI stops.
Each severity pairs a glyph with its label — legible in a terminal, a screenshot or for colorblind readers.
Vulnerabilities carry their CWE ids and OWASP Top 10 categories, and your lockfiles’ dependencies are checked against OSV advisories.
■ Blocker src/config.ts:14 Passwords should not be hard-coded CWE-798 · OWASP A07 · new code
One fast binary scans in parallel and never runs your code. The server keeps your source and findings on your own infrastructure.
One binary. Scan on your laptop or in any CI, judge new code, fail the build on the gate. No server needed.
Build the CLI from the 0.1.0 tag. Without Rust, scripts/install-cli.sh builds a static Linux binary in Docker.
cargo install --git https://github.com/lvaoliveira/sonda --tag v0.1.0 sondaWrite a commented sonda.toml with the default quality gate, then adjust it.
sonda initJudge what changed since main. The gate decides the exit code: 0 passes, 1 fails.
sonda scan . --new-code origin/mainSARIF for GitHub code scanning, GitLab and IDEs, or JSON for your own tools.
sonda scan . --format sarif -o sonda.sarifSelf-hosted with Docker Compose. Keeps every analysis, with trends, triage, owners and results on GitHub pull requests, in the web app.
From a checkout of the repository: Docker Compose and PostgreSQL, with its secrets created for you.
scripts/setup-server.shOpen http://127.0.0.1:9000 and sign in as admin. The password is in secrets/admin_password.
Paste its GitHub URL. Sonda creates the project, its token, and the CI workflow that uploads every analysis.
Or send any scan yourself. The server’s gate then decides the exit code.
sonda scan . --upload --server http://127.0.0.1:9000 --project appAnalyze locally before you push, then let CI run the same scan and report the gate result. Without --new-code, Sonda picks the pull request’s base or the pushed commits on its own.
name: sonda on: [pull_request] jobs: analyze: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 # sonda needs the base branch - run: cargo install --git https://github.com/lvaoliveira/sonda --tag v0.1.0 sonda - run: sonda scan . # exits 1 when the gate fails
Sonda is built in the open. Every architectural choice — how parsers are sandboxed, how new code is found, what a token may do — is written down as a public decision record before the code that follows it.
git diff.sonda, sonda-core and sonda-server. Reports get stable fingerprints, sonda upload sends them, and the server takes its first analyses.sonda scan --upload, and user, analysis and service tokens.#pragma and [SuppressMessage] suppress as Roslyn does.1.0 is a promise: upgrading within 1.x doesn’t break anyone. The features it needs are few — most of the work left is proving what’s built.
The first tagged release: binaries with checksums on a release page, docs pointing at the tag.
What 1.0 promises written down — CLI, sonda.toml, report formats, the upload protocol — and enforced by a compatibility job in CI.
Every release upgrades a server full of real data in CI and checks nothing is lost. Retention and storage growth documented.
Binaries for Linux, macOS and Windows, a server image on GHCR, provenance attestations and SBOMs — all from a tag, nothing by hand.
Four weeks on real repositories in every language, findings compared with SonarQube’s on the same commit, performance measured.
The server’s threat model, a full security review, and private CAs for uploads.
Pull request decoration that follows triage, no page flicker, and every roadmap item marked before or after 1.0.
Pull request decoration beyond GitHub: summary comment, inline comments and a status check.
OpenID Connect with PKCE. Designed, deferred.
Fixes and missing tests proposed as draft pull requests, verified by a re-scan, merged by a person.
Rank vulnerabilities by whether a public entry point reaches them.
Read patterns as patterns: syntax, language and backtracking rules.
The rest of the semantic layer: more binders, expression typing, overloads.
Teams as owners of projects, and the health score’s change over time.
JaCoCo and Cobertura next to LCOV.
Go, Rust, PHP, Ruby and Kotlin.
A tool that judges your code should be open to judgment itself. Sonda’s analyzers, rules and roadmap are developed on GitHub under MIT or Apache-2.0, and contributions of every size are welcome.