BT

Facilitating the Spread of Knowledge and Innovation in Professional Software Development

Write for InfoQ

Topics

Choose your language

InfoQ Homepage News tsgolint Reaches Stable v7, Bringing Go-Powered Type-Aware Linting to Oxlint

tsgolint Reaches Stable v7, Bringing Go-Powered Type-Aware Linting to Oxlint

Listen to this article -  0:00

tsgolint, the type-aware linting engine behind Oxlint, has reached a stable v7 release, bringing native Go speed to the TypeScript lint rules that teams have long run through ESLint.

tsgolint handles the rules that need TypeScript semantic analysis, the ones that answer questions such as whether a promise is ever awaited. Rather than reimplementing a type checker, it builds real TypeScript programs on top of typescript-go, the official Go port of the compiler that ships as TypeScript 7. Oxlint, written in Rust, handles file discovery, configuration and the cheap syntactic rules, then passes the type-aware work to the Go binary, which returns structured diagnostics. The release tracks TypeScript v7.0.2 and covers 59 of typescript-eslint's 61 type-aware rules, up from 43 at the December alpha.

Getting started takes two commands:

pnpm add -D oxlint oxlint-tsgolint@7
pnpm oxlint --type-aware

Adding --type-check reports compiler errors alongside lint diagnostics from the same TypeScript program, and both flags can be pinned in an oxlint.config.ts or .oxlintrc.json file. The release also adds per-rule timings, surfaced with oxlint --type-aware --debug timings, so teams can see which type-aware rules dominate a run. The team's benchmarks put the stable build at 12 to 18 times faster than ESLint with typescript-eslint across microsoft/vscode, microsoft/typescript, typeorm and vuejs/core on an Apple M4 Pro.

Writing before the release, Jökull Sólberg concluded that "Oxlint is making the right long-term bet," reasoning that aligning with tsgo inherits "every future optimisation the TypeScript team ships, while keeping the rule surface identical to typescript-eslint." The same argument runs through a Biome discussion weighing whether Biome should adopt typescript-go too. Biome v2 synthesises its own types without the compiler, and one analysis puts its noFloatingPromises rule at roughly 75 percent of the cases typescript-eslint catches, a gap it notes Vite creator Evan You has publicly questioned.

The typescript-eslint team, whose contributor auvred created the original prototype, still calls its own tsgolint fork an experiment that is "not under active development." On the oxc side, correctness is still being refined, with users filing reports such as one where an autofix removed a type assertion that tsc actually required.

ESLint users can run npx @oxlint/migrate --type-aware to translate an existing config, following the migrate-from-eslint guide. The catch is the dependency, because type-aware linting needs TypeScript 7.0 or later, some legacy tsconfig options such as baseUrl are unsupported, and projects using removed TypeScript 6 features have to migrate first.

The jump straight from the experimental 0.x line to a stable v7 is a deliberate change, because tsgolint is now versioned against the compiler it embeds, v7.0.2000 aligns with TypeScript 7.0.2. Work now focuses on the final rules, editor integration and monorepo performance.

Linting is the static-analysis step that flags likely bugs and enforces conventions before code runs, and its most expensive tier is type-aware linting, which needs a real model of a program's types to answer questions a single file cannot.

Oxlint is the linter in oxc, a suite of Rust-based JavaScript tools developed under VoidZero, the company Evan You founded to consolidate a famously fragmented toolchain, and tsgolint is the piece that lets it reach for the real compiler rather than reimplement one. Its stable release lands amid a wider rewrite of that toolchain in native languages, from bundlers and formatters to the TypeScript compiler itself.

About the Author

Rate this Article

Adoption
Style

BT