Skip to content

Output formats

alint check renders the same findings in eight output formats. Select one with --format <name>.

A single Report fans out to each format:

FormatAliasesFor
humanpretty, textThe default. Colorized, grouped by file, for reading in a terminal.
jsonStable machine shape behind schema_version: 1. General-purpose integration.
sarifSARIF 2.1.0, for GitHub code scanning and other SARIF consumers.
githubgithub-actionsGitHub Actions workflow commands (inline annotations on a run).
markdownmdGitHub-flavored Markdown, for posting as a PR comment.
junitjunit-xmlJUnit XML, for CI test-report viewers.
gitlabgitlab-codequality, code-qualityGitLab Code Quality report.
agentagentic, aiLLM-shaped JSON with a templated agent_instruction per violation.

Each format is shown by example in the quickstart. The agent format has its own reference because its shape is purpose-built for AI coding agents.

Streams: report on stdout, diagnostics on stderr

Section titled “Streams: report on stdout, diagnostics on stderr”

A machine format is the only thing written to stdout — so alint check --format json > report.json (or sarif / gitlab / github / junit / agent) captures byte-clean output with nothing to strip. Progress and any diagnostic warning (for example an empty include_manifest_paths set) are written to stderr. Redirect it separately (2> alint.log) or discard it (2>/dev/null) without touching the report. (In the human format, the Summary footer is part of the human report and stays on stdout with the findings.)

sarif and gitlab attach a stable per-finding fingerprint (SARIF partialFingerprints, GitLab fingerprint) to every run — not only when a --baseline is active. SARIF’s is the canonical violation_fingerprint, the same identity the baseline file records, so an alert keeps one identity across SARIF and the baseline. A finding with a unique fingerprint carries that same identity in GitLab too; GitLab additionally disambiguates genuine within-report duplicates (two findings with byte-identical content), because GitLab Code Quality drops entries that share a fingerprint. GitHub Code Scanning uses the SARIF fingerprint to correlate alerts across runs — dedupe, and track a finding as fixed or reopened — with no --baseline required.

When a run is filtered through a baseline, suppression marks findings rather than deleting them, and only two formats surface those marks:

  • sarif carries suppressions: [{ "kind": "external" }] and baselineState (unchanged for suppressed, new for live) on each result — so GitHub Code Scanning keeps grandfathered alerts open-but-dismissed instead of flapping fixed-then-reopened. (The stable partialFingerprints identity is emitted on every run, baseline or not — see above.)
  • json omits suppressed findings from results and records a summary.baselined_suppressed count in the envelope.

The other six formats receive the already-filtered live report and are baseline-oblivious. The global --show-baselined flag lists the suppressed findings in full, in any format; the exit code is gated on the live (new) findings only, in every format.