Skip to content

Releases: oxc-project/oxc

oxlint v1.9.0

29 Jul 09:10
9220b0a
Compare
Choose a tag to compare

[1.9.0] - 2025-07-29

🚀 Features

  • 3489ce0 linter: Add typescript-eslint/explicit-module-boundary-types (#12402) (Don Isaac)

🐛 Bug Fixes

  • 0fd3e87 linter: Default options for eslint/yoda (#12540) (Sysix)
  • 724776f linter: Default options for unicorn/switch-case-braces (#12539) (Sysix)
  • fda45ea linter/promise/prefer-await-to-callbacks: False positive for addEventListener (#12537) (Copilot)
  • 1a710e3 linter/array-type: Fix more false negatives (#12501) (camc314)
  • 2b5bf98 linter: Consistent-function-scoping false positive with hoisted var declarations (#12523) (camc314)
  • cc19c8b vscode: Fix statusbar icon order (#12544) (Christian Fehmer)
  • 209d006 linter: Parse vue lang attribute without quotes (#12517) (Sysix)
  • 85a34ce linter/array-type: False negative with arrays in generic args (#12500) (camc314)
  • 98c1fbb linter/require-await: Improve async keyword detection in get_delete_span function (#12494) (camc314)
  • 7c75dba linter/require-await: Improve span calculation for object properties (#12490) (camc314)
  • 2b261cf linter/exhaustive-deps: False positive in exhaustive deps (#12471) (camc314)

🚜 Refactor

  • a696227 linter: Remove AstKind for SimpleAssignmentTarget (#12401) (Tyler Earls)
  • 7af38e1 napi/oxlint: Simplify ExternalLinterLintFileCb type (#12572) (overlookmotel)
  • 543fd53 napi/oxlint: Rename run to lintFile (#12567) (overlookmotel)
  • 0179c86 napi/oxlint: Reverse args of ExternalLinter::new (#12566) (overlookmotel)
  • 491c401 linter: Remove #[must_use] from LintService::with_* methods (#12560) (overlookmotel)
  • d44b0ac linter: Remove Runner trait (#12559) (overlookmotel)
  • bea652f linter: Add vue and regex to BuiltinLintPlugins (#12542) (Sysix)
  • aa9dd21 linter/no-eval: Get source type from Semantic (#12514) (overlookmotel)
  • 5c33fc7 diagnostics: Implement Eq and Ord for InfoPosition (#12505) (overlookmotel)
  • 8c8c8bc napi/oxlint: Diagnostics communicate which rule via rule index, not rule ID (#12482) (overlookmotel)
  • e2d9b4d fixer: Add Debug trait to PossibleFixes and Message structs (#12493) (camc314)
  • f0b1f0d napi/oxlint, napi/parser: Remove source length from RawTransferMetadata (#12483) (overlookmotel)
  • 7e4959a napi/oxlint: Rename rules to ruleNames (#12477) (overlookmotel)
  • 7a0da04 diagnostics: Remove Option wrapper from MPSC channel and sender field (#12467) (camc314)

🧪 Testing

  • 56468c7 linter/no-unused-private-class-members: Add more test cases (#12569) (camc314)
  • 191a164 linter/no-unused-private-class-members: Add more test cases (#12563) (camc314)
  • d31adcf linter: Improve sorting diagnostics (#12504) (overlookmotel)

oxlint v1.8.0

22 Jul 11:44
0b17927
Compare
Choose a tag to compare

[1.8.0] - 2025-07-22

NOTE: While custom JS plugins are mentioned in the release notes, they are not yet supported in this release. We are actively building them out.

🚀 Features

  • 6d2b549 napi/oxlint: Pass AST in buffer to JS (#12350) (overlookmotel)
  • 14f0159 linter/exhaustive-deps: Add auto-fixer (#12354) (Don Isaac)

🐛 Bug Fixes

  • 99e105f linter: Correct autofix in unicorn/prefer-number-properties for Infinity (#12445) (yefan)
  • 0b539e3 linter: unicorn/catch-error-name wasn't using the ignore property (#12446) (Parbez)
  • 05fba9b linter: Don't panic on TSNonNullExpression in unicorn/prefer-array-find (#12400) (Sysix)
  • 46e33d5 linter: Improve error handling in config file lookup (#12391) (camc314)
  • 4621872 linter: Parse second script block for svelte files (#12390) (Sysix)
  • fbe7eb4 linter/filename-case: Fix default config when no config is provided (#12389) (camc314)
  • fea9df4 linter: Report errors with the correct severity for custom plugins (#12362) (camc314)
  • 652c038 linter: Mark correctly enabled default rules for --rules (#12163) (Sysix)
  • eadc359 linter: Correct source text for vue files having script attributes containig ">" char inside (#12375) (Sysix)
  • 54d143a linter/exhaustive-deps: More descriptive messages for always-rerender violations (#12336) (Don Isaac)
  • dac4db9 linter/exhaustive-deps: Better diagnostics for missing dependencies (#12337) (Don Isaac)
  • 119d23a linter/prefer-array-flat-map: Error for .flat(1.0) (#12360) (overlookmotel)

🚜 Refactor

  • 2d9291c linter/prefer-number-properties: Simplify fixer logic (#12451) (camc314)
  • c5dff1e linter, napi/parser: Add source_len field to RawTransferMetadata (#12383) (overlookmotel)
  • 5e3b415 linter: Duplicate RawTransferMetadata in oxc_linter crate (#12382) (overlookmotel)
  • 773fd88 linter: Pass &Allocator into Linter::run_external_rules (#12374) (overlookmotel)
  • b10ed11 linter: Make unwrap unconditional (#12371) (overlookmotel)
  • a0631d4 linter: Move running external rules into feature-gated function (#12370) (overlookmotel)
  • 4fc4e7c linter: Make feature gates for oxlint2 feature consistent (#12369) (overlookmotel)
  • 50b1786 linter: Clarify usage of Allocator and AllocatorGuard (#12332) (overlookmotel)
  • 26d3a39 linter: Remove ModuleContentOwner abstraction (#12331) (overlookmotel)

📚 Documentation

  • 3c21d94 linter: Correct comment on RawTransferMetadata2 type (#12428) (overlookmotel)

💼 Other

oxlint v1.7.0

16 Jul 23:17
b144048
Compare
Choose a tag to compare

[1.7.0] - 2025-07-16

🚀 Features

  • 4f50750 linter: Load custom JS plugins configured in overrides (#12324) (camc314)
  • 5e428a4 linter/eslint-plugin-next: No-html-link-for-pages rule addition (#12194) (Gabriel Díaz Aguilera)
  • c551b8f linter: Report diagnostics from custom plugins (#12219) (camc314)
  • d387729 linter: JS custom rules config (#12160) (camc314)
  • 152e59d napi/oxlint: Read source text into start of allocator (#12122) (overlookmotel)
  • bde1ef1 linter: Load custom JS plugins (#11980) (camc314)
  • d4ebd14 linter: Add oxlint2/disable_oxlint2 feature flags (#12130) (camc314)
  • a4dae73 linter: Introduce LintPlugins to store builtin + custom plugins (#12117) (camc314)

🐛 Bug Fixes

  • 3f9a1f0 linter/no-unused-private-class-members: Fix false positive with nullish coalescing assignments (#12317) (camc314)
  • 47fad0e linter/no-empty-file: False positive with empty file with triple slash directive (#12293) (camc314)
  • 633ba30 linter: False positive with unknown plugins when unmatched eslint rule (#12285) (camc314)
  • 9720774 linter: Report implicit config parse errors (#12260) (Simon Buchan)
  • 1920c6b language_server: Respect the root .oxlintrc.json file for ignorePatterns (#12171) (Sysix)
  • 98708eb linter: Fix inconsistent behavior in no-duplicate-imports rule (#12192) (yefan)
  • 853d2bc linter, language_server: Correctly identify usage of import plugin (#12157) (overlookmotel)

🚜 Refactor

  • b28e447 linter: Remove dead code (#12328) (overlookmotel)
  • ee761de ast: Remove AstKind for AssignmentTarget (#12252) (Tyler Earls)
  • c68b607 ast: Rename TemplateLiteral::quasi to TemplateLiteral::single_quasi (#12266) (Dunqing)
  • 32c32af ast: Check whether there is a single quasi in TemplateLiteral::quasi (#12265) (Dunqing)
  • 8f6a1da linter/js-plugins: Use u32 for IDs (#12243) (overlookmotel)
  • 36cd364 linter/js-plugins: Clean up code (#12242) (overlookmotel)
  • 8c02ebd linter/js-plugins: Rename specifiers to paths (#12241) (overlookmotel)
  • 3adaf98 linter: Simplify getting nodes count (#12239) (overlookmotel)
  • 6e54645 language_server: Store LintService instead of Linter (#12016) (Sysix)
  • 113cf8c linter: Move LintServiceOptions.paths to LintService.with_paths (#12015) (Sysix)
  • acfac68 oxlint: Adjust ignore patterns by counting bytes instead of chars (#12209) (Sysix)
  • 729b82b linter: Rename plugin_name to plugin_specifier (#12148) (overlookmotel)
  • 532b816 linter: Use to_string instead of into (#12147) (overlookmotel)
  • 89f2a69 linter: TODO comment (#12146) (overlookmotel)
  • f90d3e1 linter: Feature gate load_external_plugin by both oxlint2 and disable_oxlint2 features (#12141) (overlookmotel)
  • 12e4ec7 linter: Make tokio dependency optional (#12140) (overlookmotel)
  • 1d2eaca oxlint2: Introduce force_test_reporter feature for consistent graphical outputs (#12133) (camc314)
  • 8814c53 ast: Remove AstKind for PropertyKey (#12108) (camchenry)
  • 228cff5 semantic,linter: Assert that Program is always the first node (#12123) (Ulrich Stark)
  • e8e2a25 ast: Remove AstKind for AssignmentTargetPattern (#12105) (camchenry)
  • f7c675d linter: Rename LintPlugins to BuiltinLintPlugins (#12116) (camc314)
  • a9e5ec0 linter: Access plugins through config instead of storing directly (#12115) (camc314)
  • 9736a7f linter: Simplify unicorn/require-post-message-target-origin (#12110) (shulaoda)

📚 Documentation

  • 2e3db46 linter: Add missing backtick preventing website from building (#12113) (camc314)

⚡ Performance

  • d0f8b88 linter/js-plugins: Do not copy Vec (#12248) (overlookmotel)
  • 4284d19 linter/js-plugins: Use hashmap Entry API + remove temp Vec (#12247) (overlookmotel)
  • c7889c3 semantic,linter: Simplify implementation and uses of ancestors iterators (#12164) (Ulrich Stark)
  • f99959c linter: Move work out of loop (#12145) (overlookmotel)
  • 514d40c linter: Do not create Resolver unless required (#12142) (overlookmotel)
  • 7103527 linter/no-constructor-return: Optimize loop (#12138) (overlookmotel)

🎨 Styling

🧪 Testing

oxlint v1.6.0

07 Jul 05:04
2594d30
Compare
Choose a tag to compare

[1.6.0] - 2025-07-07

🐛 Bug Fixes

  • 3f0e03e linter: Fix inconsistent behavior in no-duplicate-imports rule (#12051) (yefan)
  • 6dbacea linter/no-barrel-file: No diagnostic tag when some modules arent resolved (#12049) (camc314)
  • dd6b1ee linter/extensions: False positives with non configured extensions (#11872) (camc314)
  • 5851d2c oxlint: Always follow symlinks; remove cli flag --symlinks (#12048) (Boshen)
  • eb1c596 linter/consistent-index-object-style: Fix default impl for rule config (#12031) (camc314)

🚜 Refactor

  • 54cf5cb semantic: Remove Option from parent_* methods (#12087) (Ulrich Stark)
  • 8d1be94 language_server: Fix todo by avoiding allocation (#12096) (Ulrich Stark)
  • 72418ca linter: RuntimeFileSystem::write_file take &str (#12075) (overlookmotel)
  • 2f7cbda linter: Move napi bindings out of oxc_linter (#12072) (camc314)
  • 9254252 linter: Move code (#12071) (overlookmotel)
  • 2319710 linter: Shorten code (#12070) (overlookmotel)
  • 387762d linter/no-unused-vars: Simplify check for export nodes (#12044) (Dunqing)
  • f1d4086 ast: Remove AstKind for ModuleDeclaration (#12022) (camchenry)
  • 754c05a ast: Remove AstKind for TSTypeName (#11990) (camchenry)
  • 0c7f9e8 linter: Remove a branch (#12032) (overlookmotel)

📚 Documentation

  • 85ec382 linter: Add good/bad example for nextjs/no-page-custom-font (#12092) (Sysix)
  • 9240342 linter: Add docs for nextjs/no-script-component-in-head (#12091) (Sysix)
  • 0878414 linter: Add good/bad example for nextjs/no-head-import-in-document (#12061) (Sysix)
  • 222bc73 linter: Add bad/good example for nextjs/no-head-element (#12059) (Sysix)
  • a7e9f50 linter: Add good/bad example for nextjs/no-title-in-document-head (#12065) (Sysix)
  • 51c6818 linter: Add good/bad example for nextjs/no-document-import-in-pages (#12064) (Sysix)
  • c7b38f9 consistent-indexed-object-style: Clarify docs (#12019) (Luca Ban)

⚡ Performance

  • 04e2de5 linter: Avoid iteration when checking import is AllButDefault or SideEffect in eslint/no-duplicate-imports (#12093) (Sysix)
  • e2a7d6a linter: Check filepath before running nextjs/no-head-element (#12062) (Sysix)
  • 00a9fd9 linter: Check for filename before running nextjs/no-head-import-in-document rule (#12060) (Sysix)
  • 62a3ce0 linter: Replace unicode-segmentation crate with icu_segmenter (#12063) (Sysix)

oxlint v1.5.0

02 Jul 01:15
5fe60a9
Compare
Choose a tag to compare

[1.5.0] - 2025-07-02

🚀 Features

  • 899b8b4 linter: Allow namespace re-export in import/no-cycle (#11995) (Boshen)

🐛 Bug Fixes

  • f732589 linter: Panic in consistent-type-imports when the source contains a { (#12002) (camc314)
  • 4b2c658 oxlint: Make --version exit code be 0 (#11986) (camc314)

🚜 Refactor

  • f7a2ae4 ast: Add AstKind for AssignmentTargetPropertyIdentifier, AssignmentTargetPropertyProperty (#11985) (camc314)
  • cfa52c2 ast: Add AstKind for AssignmentTargetRest (#11984) (camc314)
  • 3f91f24 linter: Remove RulesCache (#11981) (camc314)
  • 54582cb ast: Add AstKind for BindingProperty (#11974) (camc314)

oxlint v1.4.0

30 Jun 06:04
aa4020f
Compare
Choose a tag to compare

[1.4.0] - 2025-06-30

🚀 Features

  • 8e1573d linter: Add id-length rule from eslint (#11887) (Nicholas Rayburn)
  • 5dfcac5 linter: Add eslint/arrow-body-style rule (#11937) (yefan)
  • 9b19b40 napi: Add basic oxlint napi bindings (#11877) (camc314)
  • f102cb1 linter: Add import/prefer-default-export rule (#11891) (yefan)

🐛 Bug Fixes

  • 114c4fb linter/no-useless-spread: Panic with multi byte char (#11964) (camc314)
  • c2e5439 linter: Fix default values for unicorn/consistent-function-scoping (#11960) (Sysix)
  • 214c8e7 linter: Fix default values for import/no-absolute-path (#11959) (Sysix)
  • b4cc222 linter: Fix typescript/no-namespace default values (#11958) (Sysix)
  • 11e0a43 linter/prefer-dom-node-remove: Panic when callee is ts non null expression (#11949) (camc314)
  • 4903e39 linter/no-standalone-expect: False positive in callback fn (#11940) (camc314)
  • 1e88dba oxc_linter: Make linter file paths clickable within JetBrains terminals (#11619) (Nicholas Rayburn)
  • fe4006b linter/jsx-key: False positive in react/jsx-key (#11918) (camc314)
  • d32cb4b linter: Fix default values for eslint/no-redeclare (#11911) (Sysix)
  • d80c19d linter: Fix default values for eslint/max-lines-per-function (#11910) (Sysix)
  • 41a5342 linter: Fix default values for eslint/max-nested-callbacks (#11909) (Sysix)
  • 2e3db4e linter: Fix default values for eslint/max-depth (#11908) (Sysix)
  • a358797 linter: Remove false positives for no-extend-native (#11888) (camchenry)
  • 6f67b52 linter: Revert prefer-promise-reject-errors to old behavior (#11889) (camchenry)
  • d991fed linter: Fix jsx-a11y/label-has-associated-control default values (#11832) (Sysix)
  • a0a4aa1 linter: Count own indirect export entries to the threshold for oxc/no-barrel-file (#11838) (Sysix)

🚜 Refactor

  • 344f3f9 linter: Minor refactors to eslint/id-length (#11976) (camc314)
  • 46b59d8 linter: Remove unused ContextHost::with_config (#11970) (camc314)
  • 2cf9fa3 linter: Derive debug for extensions (#11938) (camc314)
  • 17e0898 linter: Move import/no-duplicates to style category (#11929) (Sysix)
  • dd2e196 linter: Move unicorn/no-nested-ternary to style category (#11928) (Sysix)
  • 8404da4 linter: Remove unused LintPluginOptions (#11919) (camc314)
  • 87b8496 ast: Remove AstKind for MemberExpression and replace with StaticMemberExpression and PrivateFieldExpression (#11767) (camchenry)
  • e840680 linter/no-named-as-default-members: Remove needless lambda (#11896) (camc314)
  • 2760591 linter/no-console: Early return if ident does not match (#11895) (camc314)
  • 190e390 ast: Add AstKind for ComputedMemberExpression (#11766) (camchenry)

📚 Documentation

  • 940b98f linter: Fix docs for typescript/no-this-alias (#11963) (Sysix)
  • c4a95a2 linter: Move jest/valid-title options into a codeblock (#11961) (Sysix)
  • 0d3e8e7 linter: Fix prefer-string-replace-all example (#11921) (Bruno Henriques)
  • 06781ab linter: Fix doc formatting for perfer-logical-op-over-ternary (#11920) (camc314)

⚡ Performance

  • 2cf63ea linter: nextjs/no-document-import-in-page check the filepath before running the rule (#11962) (Sysix)
  • 19cee8c linter/no-extend-native: Do not create unnecessary CompactStr (#11885) (overlookmotel)
  • 66dbf9d linter/no-console: Get static property name only once (#11880) (overlookmotel)

🧪 Testing

  • 168f776 linter/no-console: Add more tests (#11878) (overlookmotel)

oxlint v1.3.0

23 Jun 07:08
d121a79
Compare
Choose a tag to compare

[1.3.0] - 2025-06-23

🚀 Features

  • 1a54184 linter: Add fix for unused disable directive (#11708) (Sysix)
  • 816ff03 linter: Read source text into the arena (#11825) (camc314)
  • dc6f584 linter: Add read_to_arena_str function (#11823) (overlookmotel)

🐛 Bug Fixes

  • 76891da linter/exhaustive-deps: False positive with ident used in type param (#11812) (camc314)

💼 Other

  • d121a79 oxlint: V1.3.0 (#11854) (oxc-bot)

🚜 Refactor

  • b39d1fa linter: Output smaller spans for unused disable directives with multiple rules (#11781) (Sysix)

📚 Documentation

  • faab3ee linter: Improve docs for typescript/no-this-alias (#11845) (camc314)

oxlint v1.2.0

19 Jun 04:32
6eacee2
Compare
Choose a tag to compare

[1.2.0] - 2025-06-19

🚀 Features

  • 8c341a2 sema/check: Ts setters cannot have initializers (#11695) (Don Isaac)
  • 38dc614 oxc_linter: Reuse allocators (#11736) (camc314)
  • bf8263d playground: Allow specifying a JSON string as the linter config (#11710) (Nicholas Rayburn)
  • 0b4261b vscode: Add oxc.requireConfig configuration (#11700) (Sysix)
  • 52ecc87 linter: Implement import/extensions (#11548) (Tyler Earls)
  • 094b81c language_server: Add unusedDisableDirectives option (#11645) (Sysix)

🐛 Bug Fixes

  • 3d88eeb linter/no-console: False negative when console.* methods are used as args to functions (#11790) (camc314)
  • c80e405 linter/no-new-wrappers: Fix panic in fixer with multi byte chars (#11773) (camc314)
  • e58a0b0 linter: Panic in unicorn/consistent-function-scoping (#11772) (camc314)
  • 80c87d4 linter: Typo in typescript/consistent-index-object-style (#11744) (camc314)
  • ff775e9 linter/consistent-function-scoping: Descriptive diagnostic labels (#11682) (Don Isaac)
  • 989634a linter/no-inner-declaration: False negative with for loops (#11692) (camc314)
  • b272b91 linter/no-undef: False negative with unresolved ref after type ref (#11721) (camc314)
  • 6252275 linter: Panic in import/extensions with empty file names (#11720) (camc314)
  • f34e432 linter: Use fixer::noop in dangerous cases for eslint/no-var (#11693) (camc314)
  • 6c2b41c linter/consistent-function-scoping: Allow functions in TS modules/namespaces (#11681) (Don Isaac)
  • 2ca1c70 linter/exhaustive-deps: False positive with TS Non null assertion operator (#11690) (camc314)
  • ee15f7d linter: False negative in typescript/prefer-function-type (#11674) (camc314)
  • abd0441 linter: Add missing menuitemradio and menutitemcheckbox roles (#11651) (Daniel Flynn)
  • 8776301 linter/no-inner-declarations: Flag var statement as body of for loop (#11632) (overlookmotel)

🚜 Refactor

  • 5ca3d04 ast: Add TSArrayType as AstKind (#11745) (camchenry)
  • abdbaa9 language_server: Use rule name directly from OxcCode instead of parsing out of the stringified version of OxcCode (#11714) (Nicholas Rayburn)
  • 219adcc ast: Don't generate AstKind for ArrayExpressionElement (#11684) (Ulrich Stark)
  • c1be6b8 linter: Shorten Span construction (#11686) (Ulrich Stark)
  • 4ca659c linter: Cleanup typescript/prefer-function-type (#11672) (Brad Dunbar)
  • 8e30c5f ast: Don't generate AstKind for ForStatementInit (#11617) (Ulrich Stark)

📚 Documentation

  • ea6ce9d linter: Fix typo in import/no-namespace (#11741) (camc314)
  • 8b6076e linter: Document options for the typescript/array-type rule (#11665) (yefan)

⚡ Performance

  • f539f64 allocator: Remove Arc from AllocatorPool (#11760) (overlookmotel)
  • cfdc518 linter/no-inner-declarations: Move work to cold path (#11746) (overlookmotel)
  • 7c0fff7 linter: Skip running consistent-function-scoping on .d.ts files (#11739) (camc314)
  • b34c6f6 parser,semantic: Improve handling of diagnostics (#11641) (Boshen)
  • 2cd786b linter/no-inner-declarations: Remove unnecessary code and reduce branches (#11633) (overlookmotel)

🧪 Testing

oxlint v1.1.0

12 Jun 05:37
a50696d
Compare
Choose a tag to compare

[1.1.0] - 2025-06-12

🚀 Features

  • 1181018 linter: Add eslint/no-extra-bind rule (#11588) (yefan)
  • 3b03fd3 parser: Produce correct syntax error for interface I extends (typeof T) (#11610) (Boshen)
  • 844a8a8 parser: Produce syntax error for declare function foo() {} (#11606) (Boshen)

🐛 Bug Fixes

  • 0f24366 linter: Correct labels for redundant comparisons (#11620) (Wei Zhu)
  • dd87f93 linter: Stack overflow in react/exhaustive-deps (#11613) (camc314)
  • 4af58e0 linter: Add missing additional_hooks option to exhaustive-deps (#11602) (camc314)
  • a6adc0c linter/exhaustive-deps: Handle destructuring inside hooks (#11598) (Don Isaac)
  • 779727f linter: Improve span diagnostic loc within react/rules-of-hooks (#11589) (camc314)

🚜 Refactor

  • b7b0dc3 parser: Improve TSModuleDeclaration parsing (#11605) (Boshen)
  • d29bbb2 linter: Simplify implementation of eslint/no-lonely-if (#11550) (Ulrich Stark)
  • d41fb13 ast: Get jsx types out of AstKind exceptions (#11535) (Ulrich Stark)

oxlint v1.0.0

10 Jun 09:38
3cabde2
Compare
Choose a tag to compare

Announcing Oxlint 1.0

There no notable changes from v0.18.1.