/posts/announcing-oxlint-type-aware-linting.md
Announcing Oxlint Type-Aware Linting
August 22, 2025

Announcing Oxlint Type-Aware Linting

Boshen ChenMichael Dong

Boshen Chen and Michael Dong

For more technical details, implementations, and considerations for Oxlint's type-aware linting, see the blog post on the Oxc website.

TL;DR: Oxlint with type-aware linting is now available and supports 40 long-awaited rules including no-floating-promises. Oxlint uses tsgolint, which @auvred initially prototyped as typescript-eslint/tsgolint and generously offered to continue its development under the Oxc organization.


The VoidZero team is excited to announce that oxlint has taken a big step towards being a full-fledged Rust-based linting replacement with type-aware linting. This release unlocks 40 long-awaited rules including no-floating-promises.

Unlocking type-aware linting

Type-aware linting has been one of the biggest feature gaps for native linters like oxlint. Traditional lint rules only review one file at a time, which is fast and parallelizable. However, type-aware lint rules call TypeScript’s types API to infer types, which may require reviewing every file. As a result, type-aware lint rules are more capable than traditional lint rules, but slower.

oxlint’s first approach to solving type-aware linting’s slow performance was implementing its own type-checker. After multiple attempts, this approach was abandoned because maintaining a type-checker on par with a fast-moving target like TypeScript is not feasible.

Other approaches, like TypeScript inter-process communication, were also considered and abandoned. The key to unlocking type-aware lint rules turned out to be TypeScripts native Go port and tsgolint.

Building on tsgolint

The tsgolint project is an experimental type-aware linter written in Go and initially prototyped by @auvred as typescript-eslint/tsgolint. However, the typescript-eslint team decided not to allocate development resources to this prototype, as they plan to continue their work on typescript-eslint for typed linting with ESLint.

The VoidZero team contacted @auvred for a forked, scoped-down version adapted for oxlint. In a true “standing on the shoulder of giants” moment, @auvred generously offered to continue its development under oxc-project/tsgolint.

Performance

Initial oxlint with type-aware linting tests show repositories that previously took 1 minute to run with typescript-eslint now finish in <10 seconds.

Using projects from oxlint-ecosystem-ci:

ProjectFilesTime
napi-rs1441.0s
preact2452.7s
rolldown3141.5s
bluesky11527.0s

Next steps

The VoidZero team will continue to develop and improve upon tsgolint. For v1.0 release, we will:

  • Address performance issue for large monorepos
  • Add the ability to configure individual rules
  • Further validate correctness of each individual rules
  • Add IDE support
  • Ensure overall stability

Acknowledgements

The VoidZero team would like to extend our gratitude to:

  • The TypeScript team for creating typescript-go.
  • The typescript-eslint team for their heartwarming support.
  • @auvred for creating tsgolint.
  • @camchenry for the oxlint + tsgolint integration.
  • @camc314 for work on performance issues.

Join the community

The VoidZero team would love to hear your feedback on oxlint and type-aware linting, and are excited to see how it helps improve your development workflow.

Connect with us:

Get all of our updates directly to your inbox. Sign up for our newsletter.

04CallToAction.vue

Interested in the future of JavaScript tooling and want to stay ahead of the curve?

We’d love to talk to you.

ContactButton.vueserved in 13ms@click=”contact”