Repository navigation
Highlights
Lower memory usage and faster linting
Rslint limits concurrent TypeScript program loading and releases completed programs earlier. Benchmarks on a large monorepo showed roughly 55–65% lower peak RSS and 5–25% shorter lint times with the new scheduling, across native-only and mixed native/JavaScript rule runs.
The language server also avoids redundant program rebuilds for initial diagnostics, coalesces pending diagnostic work during rapid edits and file switching, and loads programs in parallel for Fix All.
What's Changed
Breaking Changes 🍭
Editor users must migrate to the Rstack extension
The standalone Rslint extension (rstack.rslint) is retired. Its final release only supports @rslint/core ^0.9.0 and will not start the language server with @rslint/core 0.10.0.
To keep editor diagnostics and fixes after upgrading, install the unified Rstack extension (rstack.rstack), uninstall rstack.rslint, and reload the window. Rstack is also available on Open VSX for Cursor, Trae, VSCodium, and other VS Code forks. Custom settings are not migrated automatically; use the settings migration table to move your rslint.* settings to Rstack.
Project service search now follows the invocation context
languageOptions.parserOptions.tsconfigRootDir now defaults to the invocation cwd for CLI/API and the nearest containing workspace folder for LSP, instead of the directory containing the Rslint config. Loading a parent config or selecting one with --config or API overrideConfigFile does not extend this boundary.
When using projectService, running from a subpackage can therefore stop discovering an ancestor tsconfig.json that was used in 0.9.5. Files without an applicable project are still linted, but type-aware rules are skipped. To retain ancestor project discovery, set languageOptions.parserOptions.tsconfigRootDir to an explicit absolute repository root, or run the CLI from that root. Relative project paths and config matching keep their existing bases.
New Features 🎉
- feat(import): add no-import-module-exports rule by @elecmonkey in #2398
- feat(import): add dynamic-import-chunkname rule with rspack- magic comment prefix support by @elecmonkey in #2397
- feat(unicorn): port import-style rule by @elecmonkey in #2400
- feat(unicorn): port name-replacements rule by @elecmonkey in #2401
- feat(import): add no-internal-modules rule by @elecmonkey in #2407
- feat(unicorn): port no-for-each rule by @elecmonkey in #2402
- feat(import): support CJS named exports resolution by @AdamMagued in #2413
- feat(import): add no-deprecated rule by @elecmonkey in #2408
- feat(import): port no-extraneous-dependencies rule by @elecmonkey in #2431
- feat(eslint-plugin): project ESTree directly from Go by @fansenze in #2428
- feat(import): resolve TypeScript imports by default by @elecmonkey in #2446
- feat: support glob inputs consistently across CLI and API by @fansenze in #2464
Performance 🚀
- perf: release completed lint program references by @fansenze in #2406
- perf: bound native lint working sets by @fansenze in #2416
- perf(linter): bound program admission by unfinished shards by @fansenze in #2444
- perf(linter): shorten Program lifetimes in batch lint by @fansenze in #2449
- perf: reuse rule syntax and frozen path projections by @fansenze in #2454
- perf: compact per-file rule context data by @fansenze in #2460
- perf: schedule program loading through the shared lint pipeline by @fansenze in #2468
- perf(lsp): speed up fix-all program loading by @fansenze in #2471
- perf: cache package JSON transformations per program by @fansenze in #2473
- perf(lsp): avoid redundant cold program rebuilds by @fansenze in #2474
- perf(lsp): coalesce superseded diagnostic work by @fansenze in #2475
- perf(lsp): share cold source identity queries per event by @fansenze in #2479
Bug Fixes 🐞
- fix(tsgo): retain all external symbol names by @CPunisher in #2404
- fix: respect explicit exports over star exports by @fansenze in #2415
- fix: preserve module identity in import/no-duplicates by @fansenze in #2414
- fix(import): preserve default-member warnings for ESM declarations by @fansenze in #2434
- fix(config): derive gitignore boundaries from lint targets by @fansenze in #2436
- fix: correct config fallback and API glob exclusions by @fansenze in #2445
- fix(eslint-plugin): align ESTree metadata and isolate integration tests by @fansenze in #2455
- fix(import): keep type-only specifiers type-only in no-duplicates autofix by @elecmonkey in #2453
- fix(import): resolve non-TypeScript files in the typescript resolver to match eslint-import-resolver-typescript by @elecmonkey in #2448
- fix: model ExportNamedDeclaration wrapper in no-restricted-syntax by @Olovyannikov in #2462
- fix(lsp): retain only projects selected by open lint documents by @fansenze in #2465
- fix: model ExportDefaultDeclaration wrapper in no-restricted-syntax by @Olovyannikov in #2463
- fix: match export nodes consistently in no-restricted-syntax by @fansenze in #2467
- fix(lsp): preserve editor BOM in cached programs by @fansenze in #2477
Refactor 🔨
- refactor(tsgo): collect external declarations and expose symbol targets by @CPunisher in #2412
Document 📖
- docs: add Rstack CLI to toolchain listings by @chenjiahan in #2470
Other Changes
- chore: enable recommended type-checked lint rules by @chenjiahan in #2421
- chore: enable recommended import lint rules by @chenjiahan in #2422
- chore: enable project service for repository linting by @chenjiahan in #2424
- chore: enable recommended rstest lint rules by @chenjiahan in #2425
- ci: connect Rslint to ecosystem CI by @fansenze in #2420
- chore: simplify repository lint configuration by @chenjiahan in #2429
- chore(deps): upgrade Rspress to 2.1.0-beta.1 by @SoonIter in #2435
- ci: monitor native addon size by @elecmonkey in #2430
- chore(deps): update dependency @types/node to ^26.6.5 by @renovate[bot] in #2437
- ci(release): build and assemble matching runtime artifacts by @fansenze in #2440
- chore(deps): update dependency eslint to ^10.13.0 by @renovate[bot] in #2438
- chore(deps): update dependency @napi-rs/cli to ^3.10.8 by @renovate[bot] in #2417
- chore(deps): update dependency eslint-plugin-playwright to ^2.12.1 by @renovate[bot] in #2456
- chore(deps): update dependency eslint-plugin-security to ^4.2.0 by @renovate[bot] in #2457
- chore(deps): update dependency globals to v17.13.0 by @renovate[bot] in #2459
- ci: stop testing the retired standalone VS Code extension by @elecmonkey in #2480
New Contributors
- @AdamMagued made their first contribution in #2413
- @Olovyannikov made their first contribution in #2462
Full Changelog: v0.9.5...v0.10.0