NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #3523 most downloaded on npm
Linter for the JavaScript Oxidation Compiler
Last release 6 days ago
28 Sep 2026
Ships on a steady schedule
a new release about every 2 weeks
Most releases are documented
notes for 43 of the last 60 stable releases
1 version withdrawn
withdrawn after publishing
3 years old
213 releases · first in 2023
One column per quarter.
9d80eed linter/react/only-export-components: Support allowCompoundComponents ( #27117 ) (Kuroda Kayn)
allowCompoundComponents (#27117) (Kuroda Kayn)declare when splitting declarations (#27081) (Cheolhee Lee)await using as an await (#27080) (Cheolhee Lee)415b742 oxlint,oxfmt: Do not discover nested config in Vite+ mode ( #26763 ) (leaysgur)
809090c oxlint,oxfmt: Find all vite.config.* variants ( #26755 ) (leaysgur)
vite.config.* variants (#26755) (leaysgur)configPath semantics (#26762) (leaysgur)await tokens (#26619) (camc314)no-unknown-property (#26572) (Connor Shea)run option only applies to push mode clients (#26670) (im10furry)vite.config.* variants (#26755) (leaysgur)fbt component and text (#26616) (leaysgur)as|satisfies (#26674) (leaysgur)TSTypeAliasDeclaration with suppress comment (#26671) (leaysgur)afe950d linter/react: Update lint rules to accomodate changes in React 19.3 ( #26571 ) (Connor Shea)
.filter().flatMap() chains (#26626) (camc314)??= and ||= (#26607) (Bartok)concat normalization (#26604) (im10furry)no-unnecessary-type-parameters and prefer-find suggestions as implemented (#26586) (Mikhail Baev)prefix_align builder and Tag::(Start|End)Prefix (#26520) (leaysgur)tab_width: 0 to 1 to keep semantics (#26471) (leaysgur)this_param for simple parameters test (#26474) (leaysgur)Fill parts in tsx-in-vue (#26427) (leaysgur)66744f0 parser: [ BREAKING ] Rename panicked to fatal_error in ParserReturn ( #26382 ) (overlookmotel)
checkConditionalExpressions option (#26249) (camc314)unknown[] (#26279) (camc314)panicked to fatal_error in ParserReturn (#26382) (overlookmotel)MAX_LEN to 256 bytes below u32::MAX (#26352) (overlookmotel){ (#26271) (leaysgur)overrides once per file (#26238) (leaysgur)FormatConfig via Arc instead of cloning per file (#26237) (leaysgur)60b945d linter/nextjs/no-typos: Implement suggestion ( #26091 ) (Mikhail Baev)
__proto__ semantics (#26154) (camc314)Set constructors (#26153) (camc314)Program when sending AST to JS plugins (#26077) (overlookmotel)vue/no-dupe-keys (#26183) (connorshea)DIVERGENCES.md out from AGENTS.md (#26121) (leaysgur)__proto__ semantics (#26154) (camc314)Set constructors (#26153) (camc314)Program when sending AST to JS plugins (#26077) (overlookmotel)vue/no-dupe-keys (#26183) (connorshea)DIVERGENCES.md out from AGENTS.md (#26121) (leaysgur)2cde1f6 rust: Address nightly deprecations ( #25998 ) (Boshen)
FormalParameterRest spans (#26021) (camc314)vue imports via shared import helpers (#25903) (Connor Shea)react imports by symbol (#25901) (Connor Shea)version to 1.79.0 for rules shipped in 1.79.0 (#25902) (connorshea)FormalParameterRest spans (#26021) (camc314)vue imports via shared import helpers (#25903) (Connor Shea)react imports by symbol (#25901) (Connor Shea)version to 1.79.0 for rules shipped in 1.79.0 (#25902) (connorshea)8c4552d linter: [ BREAKING ] Split react/react-compiler into per-category rules ( #25500 ) (Boshen)
suggestion (#25787) (camc314)decorators on FormalParameterRest (#25582)experimentalOperatorPosition (#25643)operatorPosition option (#25581)EmptyStatement (#25730) (leaysgur)JSDocUnknownType (#25729) (leaysgur)Co-authored-by: Boshen 1430279+Boshen@users.noreply.github.com
ccb8fe8 linter/jsdoc: Implement no-blank-blocks rule ( #25207 ) (Mikhail Baev)
no-blank-blocks rule (#25207) (Mikhail Baev)one-var rule (#24470) (Cole Ellison)consistent-test-filename regex patterns (#25408) (Mikhail Baev)concat.apply suggestions (#25373) (Cameron)Float16Array (#25382) (tanakalucky)SuppressedError messages (#25375) (camc314)ignorePropertyModificationsForRegex property (#25346) (Mikhail Baev)ban-ts-comment description_format (#25320) (Mikhail Baev)ExportFromDeclaration lookup (#25381) (camc314)current_dir out of the stylish reporter loop (#25313) (Connor Shea)Info once per diagnostic in junit reporter (#25312) (Connor Shea)oxc_formatter_yaml (#25336) (leaysgur)hardlineWithoutBreakParent equivalent IR (#25273) (leaysgur)4120da0 semantic: [ BREAKING ] Return borrowed JSDoc so the parse cache works ( #25186 ) (Connor Shea)
TSIndexSignature::parameter (#25154) (camc314)ExportDeclaration, ExportFromDeclaration (#25095) (camc314)ArrowFunctionBody enum (#24987) (camc314)pedantic (#25201) (camc314).gitignore for walk targets and explicit paths (#25133) (leaysgur)( by byte offset instead of character count (#25130) (connorshea)role_supports_aria_props.rs (#25077) (Maximilian Franzke)TSIndexSignature::parameter (#25154) (camc314)TSIndexSignatureName::name to Ident (#25150) (camc314)ExportDeclaration, ExportFromDeclaration (#25095) (camc314)ArrowFunctionBody enum (#24987) (camc314).gitignore for walk targets and explicit paths (#25133) (leaysgur)8d31dfa linter: Verify eslint/no-restricted-globals config schema (#24598) (vigneshwar)
exports-style rule (#24087) (Mikhail Baev)id-denylist rule (#24632) (Mikhail Baev)dd18383 linter/node: Implement no-top-level-await rule (#24634) (Connor Shea)
jest/padding-around-test-blocks for vitest/padding-around-test-blocks (#24519) (Mikhail Baev)prefer-top-level-if-only-type-imports option (#24502) (camc314)0433a83 linter/eslint/no-inner-declarations: Add namespaces option (#24044) (Boshen)
namespaces option (#24044) (Boshen)ignorePatterns that cannot match files aoutside the config directory (#24341) (leaysgur)ignorePatterns relative to the config dir (#24339) (leaysgur)ignoreProps regex pattern (#24413) (connorshea)a2c97f3 linter/unicorn: Implement explicit-timer-delay rule (#23612) (Mikhail Baev)
explicit-timer-delay rule (#23612) (Mikhail Baev)no-confusing-array-with rule (#23638) (Shekhu☺️)allowAfterSpread option (#24043) (Boshen)disallowedValues option for forbid-dom-props rule (#23970) (Mikhail Baev)1c8f50c linter: Add schema for eslint/no-restricted-import (#23642) (Sysix)
eslint/no-restricted-import (#23642) (Sysix)0dc2405 linter: Add schema for eslint/no-restricted-properties (#23619) (Sysix)
eslint/no-restricted-properties (#23619) (Sysix)node/callback-return (#23615) (Sysix)import/extensions (#23557) (WaterWhisperer)unicorn/numeric-separators-style (#23554) (Mikhail Baev)no-mixed-requires rule (#23539) (fujitani sora)eslint/prefer-destructuring (#23410) (WaterWhisperer)require-param-description (#23416) (kapobajza)require-param-type rule (#23418) (kapobajza)react/jsx-no-script-url (#23475) (WaterWhisperer)max-nested-calls rule (#23461) (arieleli01212)anchor-is-valid config with upstream (#23446) (camc314)eslint/arrow-body-style (#23490) (Mikhail Baev)01b74c4 linter: Add schema for jest/no-deprecated-functions (#23136) (Sysix)
no-array-fill-with-reference-type rule (#23397) (Mikhail Baev)react/jsx-curly-brace-presence (#23400) (WaterWhisperer)react/jsx-handler-names (#23393) (WaterWhisperer)unicorn/import-style (#23386) (WaterWhisperer)jsx_a11y/no-noninteractive-element-to-interactive-role (#23384) (Sysix)jsx_a11y/no-interactive-element-to-noninteractive-role (#23382) (WaterWhisperer)typescript/no-restricted-types (#23381) (WaterWhisperer)jsx-a11y/media-has-caption (#23377) (Sysix)jsx-a11y/label-has-associated-control (#23376) (Sysix)jsx_a11y/no-distracting-elements (#23379) (WaterWhisperer)jsx-a11y/img-redundant-alt (#23374) (Sysix)jsx_a11y/alt-text (#23369) (Sysix)react/exhaustive-deps (#23372) (Mikhail Baev)react_perf/jsx-no-new-object-as-prop (#23368) (Mikhail Baev)unicorn/prefer-at (#23366) (WaterWhisperer)typescript/array-type (#23355) (Sysix)typescript/ban-ts-comment (#23354) (Sysix)react/no-did-update-set-state (#23357) (Mikhail Baev)consistent-generic-constructors (#23353) (Sysix)typescript/consistent-type-assertions (#23349) (Sysix)typescript/consistent-type-imports (#23348) (Sysix)react/jsx-no-target-blank (#23345) (WaterWhisperer)jsx_a11y/no-noninteractive-tabindex (#23337) (Mikhail Baev)react/jsx-filename-extension (#23315) (Mikhail Baev)typescript/no-empty-object-type (#23309) (Sysix)typescript/no-duplicate-type-constituents (#23308) (Sysix)typescript/no-invalid-void-type (#23307) (Sysix)typescript/no-misused-promises (#23306) (Sysix)typescript/no-unnecessary-condition (#23305) (Sysix)typescript/parameter-properties (#23304) (Sysix)typescript/prefer-nullish-coalescing (#23302) (Sysix)typescript/prefer-string-starts-ends-with (#23301) (Sysix)typescript/triple-slash-reference (#23300) (Sysix)promise/param-names (#23298) (Sysix)promise/catch-or-return (#23297) (Sysix)vitest/consistent-each-for (#23294) (Sysix)vitest/consistent-test-filename (#23293) (Sysix)vitest/consistent-vitest-vi (#23292) (Sysix)vitest/prefer-import-in-mock (#23291) (Sysix)react/no-unstable-nested-components (#23287) (Mikhail Baev)allowedRedundantRoles option to no-redundant-roles (#22820) (bab)react/no-object-type-as-default-prop (#23279) (Mikhail Baev)react/jsx-props-no-spreading (#23276) (Mikhail Baev)jsx-no-literals rule (#23145) (kapobajza)prefer-export-from rule (#22935) (AliceLanniste)vue/define-props-destructuring (#23252) (Sysix)oxc/no-async-endpoint-handlers (#23251) (Sysix)unicorn/prefer-object-from-entries (#23249) (Mikhail Baev)jest/vitest/no-restricted-matchers (#23247) (Sysix)jest/vitest/no-restricted-*-methods (#23246) (Sysix)unicorn/no-instanceof-builtins (#23225) (Mikhail Baev)jest/vitest/valid-expect (#23185) (Sysix)jest/vitest/require-top-level-describe (#23184) (Sysix)jest/vitest/prefer-snapshot-hint (#23183) (Sysix)jest/vitest/prefer-expect-assertions (#23181) (Sysix)jest/prefer-ending-with-an-expect (#23180) (Sysix)jest/vitest/no-standalone-expect (#23179) (Sysix)jest/vitest/no-large-snapshots (#23178) (Sysix)jest/vitest/no-hooks (#23177) (Sysix)unicorn/explicit-length-check (#23155) (Mikhail Baev)jest/no-deprecated-functions (#23136) (Sysix)unicorn/catch-error-name (#23137) (Mikhail Baev)jest/vitest/max-nested-describe (#23131) (Sysix)eslint/no-use-before-define (#23129) (Sysix)jsx_a11y/no-noninteractive-element-interactions (#23385) (Sysix)jsx-a11y/control-has-associated-label config with DefaultRuleConfig (#23373) (Sysix)eslint/capitalized-comments (#23139) (Sysix)jest/no-deprecated-functions store config version as usize (#23138) (Sysix)eslint/prefer-arrow-callback (#23438) (Mikhail Baev)eslint/no-sequences (#23420) (Mikhail Baev)e805174 linter: Add schema for jest/vitest/max-expects (#23105) (Sysix)
jest/vitest/max-expects (#23105) (Sysix)jest/vitest/expect-expect (#23104) (Sysix)jest/vitest/consistent-test-it (#23103) (Sysix)checkArguments option (#23098) (camc314)import-max-dependencies (#23096) (Sysix)ignoreDirectives option (#23097) (camc314)import/prefer-default-export (#23091) (Sysix)eslint/sort-vars (#23090) (Sysix)eslint/radix (#23082) (Sysix)eslint/prefer-const (#23081) (Sysix)eslint/operator-assignment (#23080) (Sysix)eslint/no-warning-comments (#23075) (Sysix)eslint/no-unused-vars (#23073) (Sysix)eslint/no-shadow (#23072) (Sysix)eslint/no-restricted-exports (#23020) (Sysix)eslint/no-param-reassign (#23018) (Sysix)eslint/no-magic-numbers (#23017) (Sysix)eslint/no-inner-declarations (#23016) (Sysix)eslint/no-constant-condition (#22991) (Sysix)eslint/no-empty-function (#22988) (Sysix)eslint/id-match (#22987) (Sysix)eslint/capitalized-comments (#22984) (Sysix)eslint/id-length (#22963) (Sysix)eslint/complexity (#22960) (Sysix)eslint/class-methods-use-this (#22959) (Sysix)eslint/max-* rules (#22923) (Sysix)require-direct-export rule (#17623) (yefan)e4b1f46 linter/typescript: Implement method-signature-style rule (#22679) (Mikhail Baev)
method-signature-style rule (#22679) (Mikhail Baev)require-yields-description rule (#22805) (Mikhail Baev)prefer-named-capture-group rule (#22759) (Sebastian Poxhofer)9f227fd linter/vue: Implement no-deprecated-props-default-this rule (#21892) (bab)
vite-plus/resolveConfig for vite.config.ts (#22456) (leaysgur)import-style rule (#22173) (Hao Chen)callback-return rule (#22470) (Mikhail Baev)0440b0f linter/eslint: Implement id-match rule (#22379) (Vladislav Sayapin)
id-match rule (#22379) (Vladislav Sayapin)no-implied-eval rule (#22391) (Vladislav Sayapin)5478fb5 linter/jsdoc: Implement require-throws-description rule (#22386) (Mikhail Baev)
require-throws-description rule (#22386) (Mikhail Baev)prefer-arrow-callback rule (#22312) (박천(Cheon Park))eslint-plugin-jsx-a11y-x (#22356) (mehm8128)DummyRuleMap with built-in rules (#22288) (Sysix)fbb8f22 linter: Support ignores in overrides (#22148) (camc314)
ignores in overrides (#22148) (camc314)ignores option (#22213) (camc314)cacbc4a linter: Fix jest settings docs. (#22127) (connorshea)
348f46c linter: Add respectEslintDisableDirectives option (#21384) (Christian Vuerings)
respectEslintDisableDirectives option (#21384) (Christian Vuerings)Nothing published for this version
38d8090 linter/jest: Implemented jest version settings in config file. (#21522) (Said Atrahouch)
version settings in config file. (#21522) (Said Atrahouch)cfd8a4f linter: Don't rely on old eslint doc for available globals (#21334) (Nicolas Le Cam)
dd2df87 npm: Export package.json for oxlint and oxfmt (#20784) (kazuya kawaguchi)
16516de linter: Enhance types for DummyRule (#20751) (camc314)
DummyRule (#20751) (camc314)Nothing published for this version
Nothing published for this version
bc20217 oxlint,oxfmt: Omit useless | null for Option field from schema (#20273) (leaysgur)
| null for Option<T> field from schema (#20273) (leaysgur)0c7da4f linter: Fix extra closing brace in example config. (#20253) (connorshea)
Nothing published for this version
61bf388 linter: Add options.reportUnusedDisableDirectives to config file (#19799) (Peter Wagenet)
options.reportUnusedDisableDirectives to config file (#19799) (Peter Wagenet)f34f6fa linter: Introduce typeCheck config option (#19764) (camc314)
preferUnplugged for Yarn PnP compatibility (#19829) (Boshen)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
1b2f354 ci: Add missing riscv64/s390x napi targets for oxfmt and oxlint (#19217) (Cameron)
Nothing published for this version
15d69dc linter: Implement react/display-name rule (#18426) (camchenry)
8a294d5 oxfmt, oxlint: Update logo (#18242) (Dunqing)
Nothing published for this version
Nothing published for this version
Nothing published for this version
f7da875 oxlint: [BREAKING] Remove oxc_language_server binary (#17457) (Boshen)
Nothing published for this version
9e624c9 linter/react: Add version to ReactPluginSettings (#17169) (camc314)
version to ReactPluginSettings (#17169) (camc314)a0f74a0 linter/config: Allow aliasing plugin names to allow names the same as builtin plugins (#15569) (Cameron)
$schema .oxlintrc.json struct (#17060) (Copilot)Nothing published for this version
Nothing published for this version
Nothing published for this version
595867a oxlint: Generate markdownDescription fields for oxlint JSON schema. (#15959) (connorshea)
84de1ca oxlint,oxfmt: Allow comments and also commas for vscode-json-ls (#15612) (leaysgur)
Nothing published for this version
222a8f0 linter/plugins: Implement SourceCode#isSpaceBetween (#15498) (overlookmotel)
SourceCode#isSpaceBetween (#15498) (overlookmotel)context.languageOptions (#15486) (overlookmotel)Context APIs (#15479) (overlookmotel)extend method to FILE_CONTEXT (#15477) (overlookmotel)oxc.path.node option (#15040) (Sysix)Context#id in createOnce (#15489) (overlookmotel)cwd in createOnce in ESLint interop mode (#15488) (overlookmotel)using / await using in a switch case / default clause (#15225) (sapphi-red)Context class (#15448) (overlookmotel): token (#15425) (camc314)context.settings in createOnce (#15394) (overlookmotel)const if the var has an initializer (#15385) (camc314)Arcs (#15431) (overlookmotel)deepFreezeSettings (#15392) (overlookmotel)parserServices (#15378) (overlookmotel)prettier directly and bundle prettier (#15544) (Dunqing)options.newlinesBetween (#15369) (leaysgur)Tag::StartVerbatim and Tag::EndVerbatim (#15370) (Dunqing)FormatElement::LocatedTokenText (#15367) (Dunqing)FormatElement size check (#15461) (Dunqing)BinaryLikeExpression (#15467) (Dunqing)FitsMeasurer (#15416) (Dunqing)AllocatorPool to reuse allocator between threads (#15412) (leaysgur)Text to see whether it has multiple lines based on its width (#15405) (Dunqing)text_without_whitespace for text that can never have whitespace (#15403) (Dunqing)FormatElement::Text (#15372) (Dunqing)SyntaxTokenCowSlice (#15366) (Dunqing)FormatElement::Token printing (#15365) (Dunqing)Your coding agent can read these notes before it upgrades. Set up the MCP server →