Releases: oxc-project/oxc
Releases · oxc-project/oxc
oxlint v1.9.0
[1.9.0] - 2025-07-29
🚀 Features
🐛 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
tolintFile
(#12567) (overlookmotel) - 0179c86 napi/oxlint: Reverse args of
ExternalLinter::new
(#12566) (overlookmotel) - 491c401 linter: Remove
#[must_use]
fromLintService::with_*
methods (#12560) (overlookmotel) - d44b0ac linter: Remove
Runner
trait (#12559) (overlookmotel) - bea652f linter: Add
vue
andregex
toBuiltinLintPlugins
(#12542) (Sysix) - aa9dd21 linter/no-eval: Get source type from
Semantic
(#12514) (overlookmotel) - 5c33fc7 diagnostics: Implement
Eq
andOrd
forInfoPosition
(#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
toruleNames
(#12477) (overlookmotel) - 7a0da04 diagnostics: Remove Option wrapper from MPSC channel and sender field (#12467) (camc314)
🧪 Testing
oxlint v1.8.0
[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
inunicorn/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 toRawTransferMetadata
(#12383) (overlookmotel) - 5e3b415 linter: Duplicate
RawTransferMetadata
inoxc_linter
crate (#12382) (overlookmotel) - 773fd88 linter: Pass
&Allocator
intoLinter::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
andAllocatorGuard
(#12332) (overlookmotel) - 26d3a39 linter: Remove
ModuleContentOwner
abstraction (#12331) (overlookmotel)
📚 Documentation
- 3c21d94 linter: Correct comment on
RawTransferMetadata2
type (#12428) (overlookmotel)
💼 Other
oxlint v1.7.0
[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 forignorePatterns
(#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
forAssignmentTarget
(#12252) (Tyler Earls) - c68b607 ast: Rename
TemplateLiteral::quasi
toTemplateLiteral::single_quasi
(#12266) (Dunqing) - 32c32af ast: Check whether there is a single
quasi
inTemplateLiteral::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
topaths
(#12241) (overlookmotel) - 3adaf98 linter: Simplify getting nodes count (#12239) (overlookmotel)
- 6e54645 language_server: Store
LintService
instead ofLinter
(#12016) (Sysix) - 113cf8c linter: Move
LintServiceOptions.paths
toLintService.with_paths
(#12015) (Sysix) - acfac68 oxlint: Adjust ignore patterns by counting bytes instead of chars (#12209) (Sysix)
- 729b82b linter: Rename
plugin_name
toplugin_specifier
(#12148) (overlookmotel) - 532b816 linter: Use
to_string
instead ofinto
(#12147) (overlookmotel) - 89f2a69 linter: TODO comment (#12146) (overlookmotel)
- f90d3e1 linter: Feature gate
load_external_plugin
by bothoxlint2
anddisable_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
forPropertyKey
(#12108) (camchenry) - 228cff5 semantic,linter: Assert that Program is always the first node (#12123) (Ulrich Stark)
- e8e2a25 ast: Remove
AstKind
forAssignmentTargetPattern
(#12105) (camchenry) - f7c675d linter: Rename
LintPlugins
toBuiltinLintPlugins
(#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
⚡ Performance
- d0f8b88 linter/js-plugins: Do not copy
Vec
(#12248) (overlookmotel) - 4284d19 linter/js-plugins: Use hashmap
Entry
API + remove tempVec
(#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
[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
forModuleDeclaration
(#12022) (camchenry) - 754c05a ast: Remove
AstKind
forTSTypeName
(#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
orSideEffect
ineslint/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 withicu_segmenter
(#12063) (Sysix)
oxlint v1.5.0
[1.5.0] - 2025-07-02
🚀 Features
🐛 Bug Fixes
- f732589 linter: Panic in
consistent-type-imports
when the source contains a{
(#12002) (camc314) - 4b2c658 oxlint: Make
--version
exit code be0
(#11986) (camc314)
🚜 Refactor
- f7a2ae4 ast: Add
AstKind
forAssignmentTargetPropertyIdentifier
,AssignmentTargetPropertyProperty
(#11985) (camc314) - cfa52c2 ast: Add
AstKind
forAssignmentTargetRest
(#11984) (camc314) - 3f91f24 linter: Remove
RulesCache
(#11981) (camc314) - 54582cb ast: Add
AstKind
forBindingProperty
(#11974) (camc314)
oxlint v1.4.0
[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
forMemberExpression
and replace withStaticMemberExpression
andPrivateFieldExpression
(#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
forComputedMemberExpression
(#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
oxlint v1.3.0
[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
oxlint v1.2.0
[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 offor
loop (#11632) (overlookmotel)
🚜 Refactor
- 5ca3d04 ast: Add
TSArrayType
asAstKind
(#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
fromAllocatorPool
(#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
[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
oxlint v1.0.0
There no notable changes from v0.18.1.