alint roadmap

Scope-based; dates are deliberately omitted. Each version is a closed cut: work that does not fit moves to a later version. Same convention as the internal engineering roadmap.

Where alint stands today

Latest release: v0.9.20. 60 rule kinds across 13 families, 19 bundled ecosystem rulesets, 12 auto-fix ops, 8 output formats including agent-aware. 21 config-authoring pitfalls catalogued and prevented across the toolchain (schema at edit time, parse error at load time, runtime audit at PR time, smoke-test fixture at commit time). 30 production OSS case studies under examples/: 20 single-language (P2a) plus 10 polyglot monorepos (P2b Waves 1+2: NixOS/nixpkgs, bazel, TensorFlow, apache/spark, vscode, angular, istio, dotnet/runtime, protobuf, flutter). Sub-second on 100K-file repos (~1.1 s on a 100K-file workspace bundle, ~12 s at 1M files; nixpkgs at 39,101 files runs the full 79-rule pass in 273 ms wall-clock).

Full release history →  ·  Full benchmarks history →  ·  All 30 case studies →

v0.10: LSP server next

The first user-visible IDE / agent integration. v0.9 was engine-internal performance work; v0.10 turns the per-file dispatch hot path (built out in v0.9.3-v0.9.6) into a single-file re-evaluation contract that an LSP server can drive cheaply.

Headline features

v0.10 ship-target rule kinds

Each crossed the saturation threshold (≥3 distinct source repos surface the same need) in the case-study sweep.

Rule kindDemand (distinct sources)Notes
registry_paths_resolve 8: rust, clap, cpython, next.js, arrow, pytorch, nodejs/node, NixOS Every path/key in a registry file resolves to an on-disk artefact. Highest-leverage gap in P2a.
cross_file_value_equals 10: airflow, tokio, clap, uv, react, pnpm, nodejs/node, pytorch, vscode, istio Past-saturation demand. istio surfaces the per-file-extractor refinement (pitfall #20).
ordered_block 7: rust, airflow, tokio, cpython, arrow, golang/go, protobuf failure-lists Lines between marker pairs sorted unique under configurable comparator.
xml_path_matches / xml_path_equals 2: spark (49 pom.xml), dotnet/runtime (~2,300 XML manifests) Completes the structured-query family (JSON/YAML/TOML/XML).
import_gate 4: k8s, airflow, golang/go, pytorch Forbid imports of pattern X in path scope Y.
generated_file_fresh 6: uv, cpython, pytorch, bazel, TF, spark Run a generator, diff output against on-disk file. Opt-in primitive; see won't-do note below.
pair_hash 3: k8s, tokio, golang/go FIPS Computed property of file A appears at offset Y in file A. golang/go FIPS is the highest-stakes use case (CMVP submission references the file format).

v0.10 design candidates

≥2 sources or shape-clarity wins; ship-status pending design pass.

v0.10 bundled rulesets

v0.10 design pass →

v0.11: WASM plugins after that

The plugin tier that completes alint's extensibility story. The command plugin (tier 1, shell out per matched file) shipped in v0.5.1 and has been the only plugin tier so far. v0.11 adds:

v0.11 flagship rule kind

v0.11 design pass → (promoted from internal ROADMAP when v0.11 design opens)

Post-launch ongoing work

On the table without a fixed version slot.

Won't do (deliberate non-goals)

alint's scope is the filesystem shape and contents of a repository, not the semantics of the code inside it. The following are explicit non-goals; the "use X instead" pointers exist so a misguided contribution can be redirected before it's written.

Won't doUse instead
AST-aware code linting (variable names, unused imports, type checks) ESLint, Clippy, ruff, golangci-lint, mypy. Every language has one.
SAST (security-focused code analysis: tainted-data flow, injection, dangerous APIs) Semgrep, CodeQL
IaC scanning (Terraform / Kubernetes / Docker security policies) Checkov, Conftest, tfsec
Secret scanning (find API keys / tokens in tracked files) gitleaks, trufflehog
Commit-message linting (Conventional Commits etc.) commitlint, committed
Build-system orchestration (running 70+ language linters in containers) Megalinter, pre-commit, lintrunner, bazel build //...
Codegen / generator running ("regenerate the file and assert it matches") The opt-in generated_file_fresh primitive in v0.10+ is the explicit exception, but the default non-goal stays: alint does not run your generators by default
Dependency-graph problems (import cycles, unused deps, version conflicts) cargo deny, bazel mod, buildifier, knip, madge

If your need is on this list, it's not that alint is incapable. It's that alint is deliberately the wrong shape for that need, and the listed tool is the right shape. See also how alint compares to other repo-level linters.

How decisions get made

When does X ship?

We do not put dates on the roadmap. Two reasons: slipping a public date is worse than not having one (users plan around dates; missed dates erode trust), and scope-based cuts ship better software (filling-time-to-meet-a-date is how feature creep enters). Watch GitHub Releases for the actual ship signal. Every release ships with a CHANGELOG entry, a refreshed bench-history row, and a tagged commit.

v0.10 is the next ship. Install today; the LSP server lands on top of the engine you already have configured.