rslint

module
v0.5.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 14, 2026 License: MIT

README ΒΆ

Rslint Banner

Rslint

discord channel npm version downloads license CodSpeed

[!NOTE] Think of Rslint as Rust Clippy but for TypeScript β€” more like a TypeScript extension than an ESLint plugin.

Rslint is a high-performance JavaScript and TypeScript linter written in Go. It offers strong compatibility with the ESLint and TypeScript-ESLint ecosystem, allowing for seamless replacement, and provides lightning-fast linting speeds.

✨ Goals

  • πŸš€ Lightning Fast: Built with Go and typescript-go, delivering 20-40x faster linting performance compared to traditional ESLint setups.
  • ⚑ Minimal Configuration: Typed linting enabled by default with minimal setup required β€” no complex configuration needed.
  • πŸ“¦ Best Effort ESLint Compatible: Compatible with most ESLint and TypeScript-ESLint configurations, significantly reducing migration costs.
  • 🎯 TypeScript First: Uses TypeScript Compiler semantics as the single source of truth, ensuring 100% consistency and eliminating edge-case bugs.
  • πŸ› οΈ Project-Level Analysis: Performs cross-module analysis by default, enabling more powerful semantic analysis than file-level linting.
  • 🏒 Monorepo Ready: First-class support for large-scale monorepos with TypeScript project references and workspace configurations.
  • πŸ“‹ Batteries Included: Ships with all existing TypeScript-ESLint rules and widely-used ESLint rules out of the box.
  • πŸ”§ Extensible: Exposes AST, type information, and global checker data for writing custom rules with complex cross-module analysis.

βœ… Current Status

[!NOTE] Rslint is currently in an experimental phase but is under active development.

Rslint is a fork of tsgolint, building upon the innovative proof-of-concept work by @auvred. We decided to continue development as tsgolint has no current plans for continued development (reference).

πŸš€ Getting Started

See Guide.

πŸ“– Architecture Overview

πŸ¦€ Rstack

Rstack is a unified JavaScript toolchain built around Rspack, with high performance and consistent architecture.

Name Description Version
Rspack Bundler npm version
Rsbuild Build tool npm version
Rslib Library development tool npm version
Rspress Static site generator npm version
Rsdoctor Build analyzer npm version
Rstest Testing framework npm version
Rslint Linter npm version

🀝 Contribution

Please read the Contributing Guide and let's build Rslint together.

Code of Conduct

This repo has adopted the ByteDance Open Source Code of Conduct. Please check Code of conduct for more details.

πŸ’¬ Community

Come chat with us on Discord! Rslint team and users are active there, and we're always looking for contributions.

πŸ™ Credits

Rslint has been inspired by several outstanding projects in the community:

  • @auvred - The original author of tsgolint, from which Rslint is forked. We are deeply grateful for his pioneering work and innovative approach to TypeScript linting.
  • @JamesHenry - The creator of typescript-eslint, who has provided valuable guidance and suggestions for Rslint's development.
  • @JoshuaKGoldberg - For his insightful blog series "If I Wrote a Linter" which provided valuable architectural insights for modern linter design.
  • The typescript-eslint team - Rslint's configuration design and test cases have been significantly influenced by and adapted from typescript-eslint's excellent implementation.
  • The ESLint team - Rslint builds upon the foundational work of ESLint, the pioneering JavaScript linter that established the standards and patterns for static code analysis in the JavaScript ecosystem.
  • The Rust Clippy team - Rslint draws inspiration from Clippy's approach to compiler-integrated linting, bringing similar TypeScript-native analysis to the JavaScript ecosystem.
  • The typescript-go project - Powers Rslint's high-performance TypeScript parsing and semantic analysis capabilities.

πŸ“– License

Rslint is MIT licensed.

Directories ΒΆ

Path Synopsis
cmd
rslint command
modified based on https://github.com/microsoft/typescript-go/blob/cedc0cbe6c188f9bfe6a51af00c79be48c9ab74d/cmd/tsgo/lsp.go#L1
modified based on https://github.com/microsoft/typescript-go/blob/cedc0cbe6c188f9bfe6a51af00c79be48c9ab74d/cmd/tsgo/lsp.go#L1
tsgo command
internal
api
Package ipc provides IPC communication between JS and Go using stdio
Package ipc provides IPC communication between JS and Go using stdio
inspector
Package inspector provides code inspection types and builders for the Playground
Package inspector provides code inspection types and builders for the Playground
ls
lsp
modified based on https://github.com/microsoft/typescript-go/blob/cedc0cbe6c188f9bfe6a51af00c79be48c9ab74d/internal/lsp/server.go#L1
modified based on https://github.com/microsoft/typescript-go/blob/cedc0cbe6c188f9bfe6a51af00c79be48c9ab74d/internal/lsp/server.go#L1
plugins/jsx_a11y/jsxa11yutil
Package jsxa11yutil contains shared helpers for eslint-plugin-jsx-a11y rule ports.
Package jsxa11yutil contains shared helpers for eslint-plugin-jsx-a11y rule ports.
plugins/jsx_a11y/rules/anchor_has_content
Package anchor_has_content ports eslint-plugin-jsx-a11y's `anchor-has-content` rule.
Package anchor_has_content ports eslint-plugin-jsx-a11y's `anchor-has-content` rule.
plugins/jsx_a11y/rules/anchor_is_valid
Package anchor_is_valid ports eslint-plugin-jsx-a11y's `anchor-is-valid` rule.
Package anchor_is_valid ports eslint-plugin-jsx-a11y's `anchor-is-valid` rule.
plugins/jsx_a11y/rules/aria_activedescendant_has_tabindex
Package aria_activedescendant_has_tabindex ports eslint-plugin-jsx-a11y's `aria-activedescendant-has-tabindex` rule.
Package aria_activedescendant_has_tabindex ports eslint-plugin-jsx-a11y's `aria-activedescendant-has-tabindex` rule.
plugins/jsx_a11y/rules/aria_props
Package aria_props ports eslint-plugin-jsx-a11y's `aria-props` rule.
Package aria_props ports eslint-plugin-jsx-a11y's `aria-props` rule.
plugins/jsx_a11y/rules/aria_proptypes
Package aria_proptypes ports eslint-plugin-jsx-a11y's `aria-proptypes` rule.
Package aria_proptypes ports eslint-plugin-jsx-a11y's `aria-proptypes` rule.
plugins/jsx_a11y/rules/aria_role
Package aria_role ports eslint-plugin-jsx-a11y's `aria-role` rule.
Package aria_role ports eslint-plugin-jsx-a11y's `aria-role` rule.
plugins/jsx_a11y/rules/click_events_have_key_events
Package click_events_have_key_events ports eslint-plugin-jsx-a11y's `click-events-have-key-events` rule.
Package click_events_have_key_events ports eslint-plugin-jsx-a11y's `click-events-have-key-events` rule.
plugins/jsx_a11y/rules/control_has_associated_label
Package control_has_associated_label ports eslint-plugin-jsx-a11y's `control-has-associated-label` rule.
Package control_has_associated_label ports eslint-plugin-jsx-a11y's `control-has-associated-label` rule.
plugins/jsx_a11y/rules/heading_has_content
Package heading_has_content ports eslint-plugin-jsx-a11y's `heading-has-content` rule.
Package heading_has_content ports eslint-plugin-jsx-a11y's `heading-has-content` rule.
plugins/jsx_a11y/rules/html_has_lang
Package html_has_lang ports eslint-plugin-jsx-a11y's `html-has-lang` rule.
Package html_has_lang ports eslint-plugin-jsx-a11y's `html-has-lang` rule.
plugins/jsx_a11y/rules/iframe_has_title
Package iframe_has_title ports eslint-plugin-jsx-a11y's `iframe-has-title` rule.
Package iframe_has_title ports eslint-plugin-jsx-a11y's `iframe-has-title` rule.
plugins/jsx_a11y/rules/interactive_supports_focus
Package interactive_supports_focus ports eslint-plugin-jsx-a11y's `interactive-supports-focus` rule.
Package interactive_supports_focus ports eslint-plugin-jsx-a11y's `interactive-supports-focus` rule.
plugins/jsx_a11y/rules/label_has_associated_control
Package label_has_associated_control ports eslint-plugin-jsx-a11y's `label-has-associated-control` rule.
Package label_has_associated_control ports eslint-plugin-jsx-a11y's `label-has-associated-control` rule.
plugins/jsx_a11y/rules/media_has_caption
Package media_has_caption ports eslint-plugin-jsx-a11y's `media-has-caption` rule.
Package media_has_caption ports eslint-plugin-jsx-a11y's `media-has-caption` rule.
plugins/jsx_a11y/rules/mouse_events_have_key_events
Package mouse_events_have_key_events ports eslint-plugin-jsx-a11y's `mouse-events-have-key-events` rule.
Package mouse_events_have_key_events ports eslint-plugin-jsx-a11y's `mouse-events-have-key-events` rule.
plugins/jsx_a11y/rules/no_access_key
Package no_access_key ports eslint-plugin-jsx-a11y's `no-access-key` rule.
Package no_access_key ports eslint-plugin-jsx-a11y's `no-access-key` rule.
plugins/jsx_a11y/rules/no_autofocus
Package no_autofocus ports eslint-plugin-jsx-a11y's `no-autofocus` rule.
Package no_autofocus ports eslint-plugin-jsx-a11y's `no-autofocus` rule.
plugins/jsx_a11y/rules/no_distracting_elements
Package no_distracting_elements ports eslint-plugin-jsx-a11y's `no-distracting-elements` rule.
Package no_distracting_elements ports eslint-plugin-jsx-a11y's `no-distracting-elements` rule.
plugins/jsx_a11y/rules/no_interactive_element_to_noninteractive_role
Package no_interactive_element_to_noninteractive_role ports eslint-plugin-jsx-a11y's `no-interactive-element-to-noninteractive-role` rule.
Package no_interactive_element_to_noninteractive_role ports eslint-plugin-jsx-a11y's `no-interactive-element-to-noninteractive-role` rule.
plugins/jsx_a11y/rules/no_noninteractive_element_interactions
Package no_noninteractive_element_interactions ports eslint-plugin-jsx-a11y's `no-noninteractive-element-interactions` rule.
Package no_noninteractive_element_interactions ports eslint-plugin-jsx-a11y's `no-noninteractive-element-interactions` rule.
plugins/jsx_a11y/rules/no_noninteractive_element_to_interactive_role
Package no_noninteractive_element_to_interactive_role ports eslint-plugin-jsx-a11y's `no-noninteractive-element-to-interactive-role` rule.
Package no_noninteractive_element_to_interactive_role ports eslint-plugin-jsx-a11y's `no-noninteractive-element-to-interactive-role` rule.
plugins/jsx_a11y/rules/no_noninteractive_tabindex
Package no_noninteractive_tabindex ports eslint-plugin-jsx-a11y's `no-noninteractive-tabindex` rule.
Package no_noninteractive_tabindex ports eslint-plugin-jsx-a11y's `no-noninteractive-tabindex` rule.
plugins/jsx_a11y/rules/no_redundant_roles
Package no_redundant_roles ports eslint-plugin-jsx-a11y's `no-redundant-roles` rule.
Package no_redundant_roles ports eslint-plugin-jsx-a11y's `no-redundant-roles` rule.
plugins/jsx_a11y/rules/no_static_element_interactions
Package no_static_element_interactions ports eslint-plugin-jsx-a11y's `no-static-element-interactions` rule.
Package no_static_element_interactions ports eslint-plugin-jsx-a11y's `no-static-element-interactions` rule.
plugins/jsx_a11y/rules/role_has_required_aria_props
Package role_has_required_aria_props ports eslint-plugin-jsx-a11y's `role-has-required-aria-props` rule.
Package role_has_required_aria_props ports eslint-plugin-jsx-a11y's `role-has-required-aria-props` rule.
plugins/jsx_a11y/rules/role_supports_aria_props
Package role_supports_aria_props ports eslint-plugin-jsx-a11y's `role-supports-aria-props` rule.
Package role_supports_aria_props ports eslint-plugin-jsx-a11y's `role-supports-aria-props` rule.
plugins/jsx_a11y/rules/scope
Package scope ports eslint-plugin-jsx-a11y's `scope` rule.
Package scope ports eslint-plugin-jsx-a11y's `scope` rule.
plugins/jsx_a11y/rules/tabindex_no_positive
Package tabindex_no_positive ports eslint-plugin-jsx-a11y's `tabindex-no-positive` rule.
Package tabindex_no_positive ports eslint-plugin-jsx-a11y's `tabindex-no-positive` rule.
cspell:ignore mdash
plugins/react/rules/no_unknown_property
cspell:disable β€” this file enumerates HTML / SVG / ARIA attribute names verbatim from React and the WHATWG / W3C specs, so it contains many attribute-name tokens (aria-*, SVG presentation attributes, popover / shadowroot attrs, …) that are not in a general English dictionary.
cspell:disable β€” this file enumerates HTML / SVG / ARIA attribute names verbatim from React and the WHATWG / W3C specs, so it contains many attribute-name tokens (aria-*, SVG presentation attributes, popover / shadowroot attrs, …) that are not in a general English dictionary.
plugins/react_hooks/react_hooksutil
Package react_hooksutil holds the AST helpers shared by every rule in the `eslint-plugin-react-hooks` port.
Package react_hooksutil holds the AST helpers shared by every rule in the `eslint-plugin-react-hooks` port.
plugins/react_hooks/rules/exhaustive_deps
Package exhaustive_deps implements the rslint port of upstream `react-hooks/exhaustive-deps`.
Package exhaustive_deps implements the rslint port of upstream `react-hooks/exhaustive-deps`.
plugins/typescript/rules/no_restricted_imports
Package no_restricted_imports provides the @typescript-eslint/no-restricted-imports rule, which extends the core ESLint no-restricted-imports rule with first-class support for TypeScript-only syntax: `import type ...`, inline `import { type X }`, `import x = require(...)`, `import type x = require(...)`, and `export type ...`.
Package no_restricted_imports provides the @typescript-eslint/no-restricted-imports rule, which extends the core ESLint no-restricted-imports rule with first-class support for TypeScript-only syntax: `import type ...`, inline `import { type X }`, `import x = require(...)`, `import type x = require(...)`, and `export type ...`.
rules/no_implied_eval
cspell:ignore sctx
cspell:ignore sctx
rules/no_misleading_character_class
Package no_misleading_character_class implements ESLint's no-misleading-character-class rule on top of the layered regex / JS string utilities in `internal/utils`.
Package no_misleading_character_class implements ESLint's no-misleading-character-class rule on top of the layered regex / JS string utilities in `internal/utils`.
rules/no_useless_backreference
Package no_useless_backreference implements ESLint's no-useless-backreference rule.
Package no_useless_backreference implements ESLint's no-useless-backreference rule.
rules/no_useless_escape
Package no_useless_escape implements ESLint's `no-useless-escape` rule.
Package no_useless_escape implements ESLint's `no-useless-escape` rule.
utils
cspell:ignore octals
cspell:ignore octals
tools
gen_shims command

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL