tsgolint is a high-performance TypeScript linter containing only type-aware rules, powered by typescript-go and designed for integration with Oxlint.
Key highlights:
- Performance: 20-40x faster than ESLint + typescript-eslint
- Type-aware: Comprehensive TypeScript type checking integration
- Parallel: Utilizes all available CPU cores
- Compatible: Implements typescript-eslint rules with consistent behavior
This project originated in typescript-eslint/tsgolint. Fork permission is granted by @auvred.
Important
tsgolint is a prototype in the early stages of development. This is a community effort. Feel free to ask to be assigned to any of the good first issues.
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
Configure type-aware rules in .oxlintrc.json
:
{
"$schema": "./node_modules/oxlint/configuration_schema.json",
"rules": {
"typescript/no-floating-promises": "error",
"typescript/no-misused-promises": "error"
}
}
Over 30 TypeScript-specific type-aware rules are available. For detailed setup and configuration, see the Oxlint Type-Aware Linting guide.
tsgolint is 20-40 times faster than ESLint + typescript-eslint.
- napi-rs (144 files): 1.0s
- preact (245 files): 2.7s
- rolldown (314 files): 1.5s
- bluesky (1152 files): 7.0s
- Native Speed: Go implementation with direct TypeScript compiler integration
- Zero Conversion: Direct TypeScript AST usage without ESTree conversion overhead
- Parallel Processing: Multi-core execution utilizing all available CPU cores
- Efficient Memory: Streaming diagnostics and optimized resource usage
See benchmarks for detailed performance comparisons.
- Additional typescript-eslint rules
- Disable Comments
- Rule Configuration
- IDE usage
tsgolint follows a clean separation between frontend and backend:
- Oxlint CLI handles file discovery, configuration, and output formatting
- tsgolint backend provides type-aware rule execution and diagnostics
- TypeScript integration via typescript-go for native performance
For detailed technical documentation, see ARCHITECTURE.md.
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
- consistent-return
- consistent-type-exports
- dot-notation
- naming-convention
- no-deprecated
- no-unnecessary-condition
- no-unnecessary-qualifier
- no-unnecessary-type-conversion
- no-unnecessary-type-parameters
- prefer-destructuring
- prefer-find
- prefer-includes
- prefer-nullish-coalescing
- prefer-optional-chain
- prefer-readonly
- prefer-readonly-parameter-types
- prefer-regexp-exec
- prefer-string-starts-ends-with
- strict-boolean-expressions
- await-thenable
- no-array-delete
- no-base-to-string
- no-confusing-void-expression
- no-duplicate-type-constituents
- no-floating-promises
- no-for-in-array
- no-implied-eval
- no-meaningless-void-operator
- no-misused-promises
- no-misused-spread
- no-mixed-enums
- no-redundant-type-constituents
- no-unnecessary-boolean-literal-compare
- no-unnecessary-template-expression
- no-unnecessary-type-arguments
- no-unnecessary-type-assertion
- no-unsafe-argument
- no-unsafe-assignment
- no-unsafe-call
- no-unsafe-enum-comparison
- no-unsafe-member-access
- no-unsafe-return
- no-unsafe-type-assertion
- no-unsafe-unary-minus
- non-nullable-type-assertion-style
- only-throw-error
- prefer-promise-reject-errors
- prefer-reduce-type-parameter
- prefer-return-this-type
- promise-function-async
- related-getter-setter-pairs
- require-array-sort-compare
- require-await
- restrict-plus-operands
- restrict-template-expressions
- return-await
- switch-exhaustiveness-check
- unbound-method
- use-unknown-in-catch-callback-variable
- ARCHITECTURE.md - Detailed technical documentation
- CONTRIBUTING.md - Development and contribution guidelines
- Benchmarks - Performance comparison data
- TypeScript Go - Underlying TypeScript compiler
- Oxlint - Frontend linter integration