Why this matters
microsoft/TypeScript is the most-watched JS-tooling repo on GitHub, and one of the most meticulously maintained. eslint + dprint + knip cover code style, formatting, and unused-export hygiene; Hereby orchestrates them; the team predates Prettier and has its own opinions about JSDoc preservation.
The headline is not “alint replaces N shell scripts” — TypeScript doesn’t have many. The headline is alint adds checks TypeScript doesn’t have today without competing with anything that already works.
As of 2026-05, the JavaScript-based TypeScript compiler is in maintenance mode (TS 6.0 is the last JS-based release; future development moved to microsoft/typescript-go). That makes the existing structural-validation surface a frozen snapshot — exactly the right target to lint against.
Headline catch
For repos that already have their lint house in order, alint adds the structural floor beneath their existing tools. TypeScript already has best-in-class AST-aware tooling. What it doesn’t have is a single declarative file asserting the shape of the repo: header consistency on
src/**/*.ts, baseline-pairing on the 53,000 files undertests/baselines/reference/, dprint-plugin pinning, action-SHA pinning, theAGENTS.mdmaintenance-mode marker.alint stands in as the entry point for
eslint && dprint check && knipand adds the static checks as a bonus.
Where alint earns its keep here
- Net-new structural checks. Apache-2 / Microsoft headers across
src/andscripts/; 256 KiB ceiling on baseline files (catches runaway-output regressions);*.errors.txt↔*.jsbaseline pairing (catches stale baselines from deleted tests). None of these are gated today. - Pinning the invariants the existing toolchain depends on.
package.jsonlint/format/knipscript command strings (npm exits 0 on a missing script — silent CI pass otherwise). Three dprint plugins (typescript,json,yaml) pinned in.dprint.jsoncso files don’t silently stop being formatted.tsconfig.*.jsonstrict: trueeverywhere outsidetests/..gitattributes* -textline locked so git never re-introduces line-ending churn on baselines. - One file, with editor-LSP autocomplete via JSON Schema. A new contributor reads one config to understand the structural contract, instead of grepping across
Herebyfile.mjs, 18 GHA workflows, and 8 dev scripts. - The boundary is honest. All 9 in-tree custom eslint rules under
scripts/eslint/rules/are TSESTree visitors — alint deliberately doesn’t compete with them. They stay in eslint, where they belong.
Future story angles
- The
pair_countrule kind (“every entry in a registry is referenced by at least one partner file”) is motivated here byscripts/errorCheck.mjs— every diagnostic insrc/compiler/diagnosticMessages.jsonmust appear in at least one baseline.errors.txt. The same shape recurs in apache/airflow (check-no-new-airflow-exceptions); a v0.10+ design candidate. - TypeScript ships an
AGENTS.mdwith a maintenance-mode marker enforced verbatim by alint. The bundledagent-context@v1ruleset (5 rules) would absorb this and assert the broader CLAUDE.md /.cursor/shape without per-repo restatement. - TypeScript is the case where “alint adopts cleanly into a famously meticulous repo” becomes credible — if the structural floor fits TypeScript without friction, it fits anything else with a quality bar that high.