Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

915 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

✨ tsgolint ✨

MIT licensed Build Status Discord chat npm weekly downloads

High-performance type-aware linting for Oxlint.

tsgolint executes lint rules that require TypeScript semantic analysis, using typescript-go for full compatibility with the TypeScript type system, and targets TypeScript 7 (codenamed Project Corsa).

It is designed to integrate seamlessly with Oxlint's fast syntax linting, enabling projects to run deeper semantic checks without sacrificing performance.

Key highlights:

  • Performance: 20-40x faster than ESLint + typescript-eslint on large repositories
  • Coverage: 59/61 targeted typescript-eslint type-aware rules implemented
  • Parallel: Multi-core rule execution for scalable analysis
  • High impact: catches production-grade bugs that syntax-only linting misses (for example no-floating-promises)

This project originated in typescript-eslint/tsgolint, with fork permission granted by @auvred.

Why Teams Upgrade to Type-Aware Linting

If you ship TypeScript, running oxlint --type-aware in CI is a high-leverage upgrade that catches bug classes syntax linting cannot.

For example, typescript/no-floating-promises catches silently dropped async failures:

async function saveUser(user) {
  const res = await fetch('/api/users', {
    method: 'POST',
    body: JSON.stringify(user),
  });
  if (!res.ok) throw new Error('save failed');
}

function onSubmit(user) {
  saveUser(user); // no-floating-promises: Promise is created but never handled
  showToast('Saved!'); // UI claims success even if the request rejects
}

Without this rule, rejected promises can be missed and reach production as flaky, hard-to-debug failures.

Installation & Usage

tsgolint is integrated into Oxlint as the type-aware backend. Install and use via Oxlint:

# Install oxlint with type-aware support
pnpm add -D oxlint-tsgolint@latest

# Quick start
pnpm dlx oxlint --type-aware

# Or run on your project
oxlint --type-aware

# Optionally also run typechecking at the same time
oxlint --type-aware --type-check

What these flags do

  • --type-aware: enables typescript/* rules that require TypeScript semantic analysis via tsgolint
  • --type-check: includes type diagnostics from typescript-go in type-aware runs

Configuration

Configure type-aware rules in .oxlintrc.json:

{
  "$schema": "./node_modules/oxlint/configuration_schema.json",
  // alternatively, configure via options field
  "options": {
    "typeAware": true,
    "typeCheck": true,
  },
  "rules": {
    "typescript/no-floating-promises": "error",
    "typescript/no-misused-promises": "error",
  },
}

Over 50 TypeScript-specific type-aware rules are available. For detailed setup and configuration, see the Oxlint Type-Aware Linting guide.

Note

Non-type-aware TypeScript rules can be found in Oxlint's TypeScript rules under the TypeScript source.

How it fits into Oxlint

Oxlint separates linting into two layers:

Layer Purpose Speed
Oxlint Syntax & structural analysis Instant
tsgolint Type-aware semantic rules Requires type analysis

This architecture keeps the common case extremely fast while enabling powerful type-aware checks when needed. Oxlint handles file discovery, configuration, and output formatting, while tsgolint executes type-aware rules and emits semantic diagnostics.

Why tsgolint exists

Traditional type-aware linting in the JavaScript ecosystem typically works by embedding TypeScript's type-analysis engine inside a JavaScript linter.

This approach introduces several bottlenecks:

  • slow startup due to compiler initialization
  • AST conversion between toolchains
  • limited parallelism
  • high memory overhead on large repositories

tsgolint takes a different approach: it runs directly on typescript-go, avoiding these bottlenecks and allowing semantic analysis to run efficiently alongside Oxlint.

Recent benchmark results (eslint + typescript-eslint vs tsgolint) show consistent large speedups:

Repository ESLint + typescript-eslint tsgolint Speedup
microsoft/vscode 167.8s 4.89s 34x
microsoft/typescript 47.4s 2.10s 23x
typeorm/typeorm 27.3s 0.93s 29x
vuejs/core 20.7s 0.95s 22x

See benchmarks for detailed performance comparisons.

Status

tsgolint is stable and powers Oxlint's type-aware linting mode. See the Type-Aware Linting Stable announcement for details about the stable release.

Versioning

tsgolint is built directly on TypeScript 7, so its versions track the TypeScript release they support. For example, in v7.0.2001:

  • 7.0.2 is the TypeScript version
  • 001 is the tsgolint patch version

A fix released against the same TypeScript version increments the patch suffix, so the next release would be v7.0.2002. When the supported TypeScript version changes, the TypeScript portion changes and the patch suffix resets.

Current development focuses on expanding rule coverage and ecosystem integration:

  • additional typescript-eslint rule support
  • editor integration improvements
  • configuration and rule customization
  • performance improvements for large monorepos

Note

We are not currently accepting PRs for new rules beyond what typescript-eslint supports, so that we can focus our limited engineering capacity on the items listed above.

For detailed technical documentation, see ARCHITECTURE.md.

Contributing

We welcome contributions! See CONTRIBUTING.md for:

  • Development setup and building instructions
  • Testing procedures and guidelines
  • How to implement new rules
  • Code style and contribution workflow

Implemented Rules

Implemented 59/61.

Links

Our sponsors

Releases

Sponsor this project

Used by

Contributors

Languages