Developer Workflow
Linters & Static Analysis
Choose non-security code analysis by language, feedback loop, rule ownership, autofix, and governance.
Recommendation
Choose by language and feedback loop, then add centralized governance only when needed.
Three static-quality layers
Fast local linting, integrated formatting, and centralized quality governance solve different adoption and ownership problems.
Static-quality routes
Keep security findings out of this decision even when a platform also sells security capabilities.
A JavaScript or TypeScript codebase needs configurable ecosystem linting
Evaluate ESLint.
ESLint is the configurable JS and TS route when ecosystem plugins, explicit rules, and repository-owned policy are priorities.
Verify: Own configuration complexity, plugin compatibility, type-aware cost, rule conflicts, and upgrade discipline.1
A web project wants a fast integrated formatter and linter
Evaluate Biome.
Biome is the integrated web-tooling route when its language coverage and rules can replace multiple formatting and linting steps.
Verify: Verify rule and plugin gaps, migration behavior, framework support, editor integration, and required exceptions.2
A Python codebase needs fast linting and import or formatting workflows
Evaluate Ruff.
Ruff is the Python-specific route when fast repository checks and its supported rule and formatting surface fit.
Verify: Validate rule equivalence, preview behavior, formatter choices, type checking, and migration from existing Python tools.3
An organization needs centralized multi-repository code-quality governance
Evaluate SonarQube.
SonarQube is the centralized quality route when multi-language analysis, quality gates, history, and administration justify a shared platform.
Verify: This route covers maintainability and quality governance only; security scanning remains a separate Task and the team must own service operations or commercial terms.4
Boundary: Vulnerability Scanning owns security-focused SAST, dependency, container, and infrastructure findings; Testing executes behavior instead of inspecting code.
Differences that change the choice
Compare only the boundaries that materially alter adoption and ongoing ownership.
- Language scope
- ESLint and Biome focus web ecosystems, Ruff focuses Python, and SonarQube spans centralized multi-language analysis.4
- Feedback placement
- Editor and local feedback differs from pull-request or central quality-gate enforcement.14
- Rule ecosystem
- Plugins, built-in rules, type awareness, suppressions, and migration coverage vary materially.1
Official resources
Verify current product boundaries, control-plane behavior, execution limits, pricing, licensing, and operating requirements in first-party material before adoption.
Sources
Official product material supports the bounded routes and verification points; route selection remains an editorial judgment.
- 1ESLint core concepts
ESLint · Accessed Official
- 2Biome documentation
Biome · Accessed Official
- 3Ruff linter documentation
Astral · Accessed Official
- 4SonarQube Server documentation
Sonar · Accessed Official