# Oxc changelog > A collection of JavaScript tools written in Rust — linter, formatter, parser and resolver. - Vendor: Oxc - Category: Developer Tools - Official site: https://oxc.rs - Tracked by: What's New (https://whatsnew.fyi/product/oxc) - Harvested from: GitHub (oxc-project/oxc) - Entries below: 12 (newest first) What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. ## Releases ### apps_v1.78.0 — oxlint v1.78.0 & oxfmt v0.63.0 - Date: 2026-08-10 - Version: apps_v1.78.0 - Original notes: https://github.com/oxc-project/oxc/releases/tag/apps_v1.78.0 - Permalink: https://whatsnew.fyi/product/oxc/releases/apps-v1.78.0 - **added** — Implement `no-blank-blocks` rule in jsdoc linter - **added** — Implement `one-var` rule in eslint linter - **added** — Add options to `anchor-has-content` rule to match eslint - **fixed** — Preserve template coercion whitespace in `no-implicit-coercion` rule - **fixed** — Preserve source text for JS plugin ignore fixes - **fixed** — Handle parenthesized calls in `prefer-promise-reject-errors` rule - **fixed** — Ignore optional chains in `new-for-builtins` rule - **fixed** — Downgrade auto-fix to dangerous for `prefer-code-point` rule - **fixed** — Validate `consistent-test-filename` regex patterns in vitest linter - **fixed** — Disable exhaustive memo validation by default in react compiler - **fixed** — Report invalid regex options in `no-unused-vars` rule - **fixed** — Fix `concat.apply` suggestions in `prefer-array-flat` rule - **fixed** — Detect constructor callbacks in `rules-of-hooks` rule - **fixed** — Support `Float16Array` in `new-for-builtins` rule - **fixed** — Support `SuppressedError` messages in `error-message` rule - **fixed** — Assert token lookup invariants in linter - **fixed** — Bound catch parameter lookup in `no-unused-vars` rule - **fixed** — Bound token lookup in `switch-case-braces` rule - **fixed** — Bound token lookup in `no-static-only-class` rule - **fixed** — Bound token lookup in `empty-brace-spaces` rule ##### Table of Contents - [Oxlint v1.78.0](#oxlint-v1.78.0) - [Oxfmt v0.63.0](#oxfmt-v0.63.0) ##### Oxlint v1.78.0 ###### 🚀 Features - ccb8fe8 linter/jsdoc: Implement `no-blank-blocks` rule (#25207) (Mikhail Baev) - d4a897c linter/eslint: Implement `one-var` rule (#24470) (Cole Ellison) - 5ab9340 linter/jsx-a11y/anchor-has-content: Add options to match eslint (#24571) (Cole Ellison) ###### 🐛 Bug Fixes - b746e00 linter/eslint/no-implicit-coercion: Preserve template coercion whitespace (#25470) (camc314) - a92c541 linter: Preserve source text for JS plugin ignore fixes (#25280) (Norcleeh) - 675c840 linter/eslint/prefer-promise-reject-errors: Handle parenthesized calls (#25378) (camc314) - 1703739 linter/unicorn/new-for-builtins: Ignore optional chains (#25411) (tanakalucky) - 95ece63 linter/unicorn/prefer-code-point: Downgrade the auto-fix to dangerous (#25412) (leemr) - c451a0e linter/vitest: Validate `consistent-test-filename` regex patterns (#25408) (Mikhail Baev) - 937825c react_compiler: Disable exhaustive memo validation by default (#25417) (Boshen) - f0f7dae linter/eslint/no-unused-vars: Report invalid regex options (#25380) (Cameron) - 44e73fd linter/unicorn/prefer-array-flat: Fix `concat.apply` suggestions (#25373) (Cameron) - 6846a9a linter/react/rules-of-hooks: Detect constructor callbacks (#25377) (camc314) - b247a9d linter/unicorn/new-for-builtins: Support `Float16Array` (#25382) (tanakalucky) - 19109cd linter/unicorn/error-message: Support `SuppressedError` messages (#25375) (camc314) - 9c13f5e linter: Assert token lookup invariants (#25368) (camc314) - bc35f83 linter/eslint/no-unused-vars: Bound catch parameter lookup (#25367) (camc314) - c159fb9 linter/unicorn/switch-case-braces: Bound token lookup (#25363) (camc314) - 03b2eb2 linter/unicorn/no-static-only-class: Bound token lookup (#25361) (camc314) - 0afc59e linter/unicorn/empty-brace-spaces: Bound token lookup (#25353) (camc314) - 2963d98 linter/eslint/no-unreachable-loop: Do not report loops whose body has a finally block (#25335) (Todor Andonov) - 589e5fb linter/eslint/no-param-reassign: Validate `ignorePropertyModificationsForRegex` property (#25346) (Mikhail Baev) - aae5d8b linter/eslint/no-throw-literal: False positive on variable declared without initializer (#25275) (cjnoname) - 6b1c479 oxlint: Normalize customized rule names (#25316) (camc314) - d494eb5 linter/unicorn/consistent-existence-index-check: Bound token lookup (#25325) (camc314) - 4266037 linter/typescript/prefer-namespace-keyword: Bound token lookup (#25322) (camc314) - 4745b4e linter/typescript/no-namespace: Bound token lookup (#25321) (camc314) - 648a481 linter/eslint/one-var: Avoid joining exported declarations (#25314) (camc314) - 9573937 linter/typescript: Validate `ban-ts-comment` description_format (#25320) (Mikhail Baev) - ebf7d18 linter/typescript/consistent-type-definitions: Bound token lookup (#25281) (camc314) - 1501ccf linter/typescript/consistent-generic-constructors: Bound token lookup (#25258) (camc314) ###### ⚡ Performance - 8f784f3 linter: Reduce rule config dispatch size (#25461) (Boshen) - 2de4ec2 linter: Reduce visitor code size (#25441) (Boshen) - 6fb7f47 linter/unicorn/prefer-export-from: Narrow `ExportFromDeclaration` lookup (#25381) (camc314) - e3f6263 linter/unicorn/prefer-default-parameters: Avoid reference allocation (#25379) (camc314) - d863473 linter/vue/max-props: Narrow AST dispatch (#25372) (camc314) - 273d867 linter: Avoid diagnostic sorting after applying fixes (#25079) (Sysix) - 4ec9189 oxlint/lsp: Avoid second lock for getting/removing unused directives (#25350) (Sysix) - 6c0d01b oxlint/lsp: Preallocate fix-content vec (#25351) (Sysix) - 3a94055 linter: Avoid per-call heap allocations in jest and unicorn helpers (#25210) (Connor Shea) - 4abff11 linter: Avoid redundant message work in the agent reporter (#25315) (Connor Shea) - 6bb5421 linter: Hoist `current_dir` out of the stylish reporter _[Truncated at 4000 characters — full notes: https://github.com/oxc-project/oxc/releases/tag/apps_v1.78.0]_ ### crates_v0.144.0 — oxc crates_v0.144.0 - Date: 2026-08-10 - Version: crates_v0.144.0 - Original notes: https://github.com/oxc-project/oxc/releases/tag/crates_v0.144.0 - Permalink: https://whatsnew.fyi/product/oxc/releases/crates-v0.144.0 - **removed** — Group class heritage into ClassHeritage - **changed** — Narrow TSInterfaceHeritage::expression to TSTypeName - **removed** — Remove duplicated VariableDeclarator::kind - **removed** — Split TS external modules & Namespace Declarations - **changed** — Restructure React transform options - **added** — Add ArenaVec::push_mut to allocator - **fixed** — Wrap string literal in parens after directives in codegen - **fixed** — Preserve cast parentheses in conditional tests - **fixed** — Preserve satisfies parentheses before bitwise operators - **fixed** — Avoid unsafe return removal in labeled blocks - **fixed** — Preserve terminal license comments in parser - **fixed** — Downgrade nonfatal compiler diagnostics in transform_react - **fixed** — Disable exhaustive memo validation by default in react_compiler - **fixed** — Reject comma expressions in class fields - **fixed** — Preserve hook spans for React Refresh - **fixed** — Reset auto-accessor initializer context in parser - **fixed** — Reject trailing tokens in Parser::parse_expression - **fixed** — Preserve Annex B labeled-function bindings in implicit-return rewrite - **fixed** — Report TS1035 for quoted module names - **fixed** — Report module declaration diagnostics in semantic ###### 💥 BREAKING CHANGES - a33788e ast: [**BREAKING**] Group class heritage into `ClassHeritage` (#25360) (camc314) - 5c5cdcd ast: [**BREAKING**] Narrow `TSInterfaceHeritage::expression` to TSTypeName (#24360) (camc314) - 6be314f ast: [**BREAKING**] Remove duplicated `VariableDeclarator::kind` (#25319) (camc314) - 44fd320 ast: [**BREAKING**] Split TS external modules & Namespace Declarations (#25284) (camc314) ###### 🚀 Features - 9a37c41 napi: Restructure React transform options (#25326) (Boshen) - b3c1b30 allocator: Add `ArenaVec::push_mut` (#25338) (overlookmotel) ###### 🐛 Bug Fixes - bbd6ed3 codegen: Wrap string literal in parens after directives (#25435) (overlookmotel) - d07a293 codegen: Preserve cast parentheses in conditional tests (#25115) (camc314) - 8b7d441 codegen: Preserve satisfies parentheses before bitwise operators (#25113) (camc314) - e0fb2d7 minifier: Avoid unsafe return removal in labeled blocks (#25406) (Armano) - c49f4ce parser: Preserve terminal license comments (#25400) (camc314) - 9d19ab3 transform_react: Downgrade nonfatal compiler diagnostics (#25418) (Boshen) - 937825c react_compiler: Disable exhaustive memo validation by default (#25417) (Boshen) - 12937b3 parser: Reject comma expressions in class fields (#25385) (Cameron) - 7d8a9b5 react_compiler: Preserve hook spans for React Refresh (#25393) (Boshen) - 9e93ba6 parser: Reset auto-accessor initializer context (#25384) (camc314) - cc2e28d parser: Reject trailing tokens in `Parser::parse_expression` (#25371) (camc314) - 697c629 minifier: Preserve Annex B labeled-function bindings in implicit-return rewrite (#25349) (Armano) - 4d723ca parser: Report TS1035 for quoted module names (#25305) (camc314) - 0c9b980 semantic: Report module declaration diagnostics (#25285) (camc314) - 2a1058a napi: Omit parser header from WASI declarations (#25254) (camc314) ###### ⚡ Performance - dd1430b semantic: Avoid allocation in class overload check (#25440) (camc314) - e420816 parser: Optimize trailing comma tracking (#25376) (camc314) - 6529d1a minifier: Short-circuit scope check when alternate already determines result (#25318) (Armano) ###### 📚 Documentation - fe111eb allocator: Improve doc comments for `Arena` methods (#24922) (overlookmotel) ### crates_v0.143.0 — oxc crates_v0.143.0 - Date: 2026-08-06 - Version: crates_v0.143.0 - Original notes: https://github.com/oxc-project/oxc/releases/tag/crates_v0.143.0 - Permalink: https://whatsnew.fyi/product/oxc/releases/crates-v0.143.0 - **changed** — Return borrowed JSDoc so the parse cache works - **removed** — Remove `ArenaBox::dangling` method - **changed** — Store single parameter in `TSIndexSignature::parameter` - **changed** — Change `TSIndexSignatureName::name` to `Ident` - **added** — Introduce `ExportDeclaration`, `ExportFromDeclaration` - **added** — Introduce `ArrowFunctionBody` enum - **removed** — Remove conversion to `Box` from AST builder methods - **changed** — Make `Box` `Send` + `Sync` when the type it contains is - **added** — Derive `GetSpan` for `Comment` - **added** — Generate minifier scope collector - **added** — Skip transparent TS expressions - **added** — Add React Compiler transform binding - **added** — Fold safe integer exponentiation - **added** — Enable termination statement optimization for do while - **added** — Fold safe integer division and remainder - **fixed** — Preserve if-chain idempotency and correct side effects when alternate should not be moved - **fixed** — Do not treat lone-surrogate strings as constants - **fixed** — Strip re-export attributes - **fixed** — Report export imports in namespaces - **fixed** — Preserve nonfatal diagnostics in React Compiler ###### 💥 BREAKING CHANGES - 4120da0 semantic: [**BREAKING**] Return borrowed JSDoc so the parse cache works (#25186) (Connor Shea) - f0a41c8 allocator: [**BREAKING**] Remove `ArenaBox::dangling` method (#25236) (overlookmotel) - 067da8c ast: [**BREAKING**] Store single parameter in `TSIndexSignature::parameter` (#25154) (camc314) - a0c7788 ast: [**BREAKING**] Change `TSIndexSignatureName::name` to `Ident` (#25150) (camc314) - 1bdedd1 ast: [**BREAKING**] Introduce `ExportDeclaration`, `ExportFromDeclaration` (#25095) (camc314) - c917f20 ast: [**BREAKING**] Introduce `ArrowFunctionBody` enum (#24987) (camc314) - 7e1199c ast: [**BREAKING**] Remove conversion to `Box` from AST builder methods (#25038) (overlookmotel) ###### 🚀 Features - 3c8312e allocator: Make `Box` `Send` + `Sync` when the type it contains is (#25242) (overlookmotel) - cb5bc08 ast: Derive `GetSpan` for `Comment` (#25147) (leaysgur) - 8541e18 ast_tools: Generate minifier scope collector (#25088) (camc314) - 5acdae2 ecmascript: Skip transparent TS expressions (#25072) (camc314) - 85d0f4d napi: Add React Compiler transform binding (#24934) (Boshen) - 70d6ece minifier: Fold safe integer exponentiation (#25009) (Dunqing) - 73fc747 minifier: Enable termination statement optimization for do while (#24921) (Armano) - 5eadfdb minifier: Fold safe integer division and remainder (#24981) (Dunqing) ###### 🐛 Bug Fixes - 6c9ee14 minifier: Preserve if-chain idempotency and correct side effects when alternate should not be moved (#25041) (Armano) - 8a47ff3 ecmascript: Do not treat lone-surrogate strings as constants (#25084) (Dunqing) - 468b970 isolated-declarations: Strip re-export attributes (#25090) (camc314) - a70035d parser: Report export imports in namespaces (#25086) (camc314) - 5d8ccf5 react_compiler: Preserve nonfatal diagnostics (#25066) (Boshen) - d349e4a react_compiler: Match eslint suppression gating (#25068) (Boshen) - 0dc16ba react_compiler: Track catch block declarations (#25067) (Boshen) - e6734a5 minifier: Fold typeof comparisons with known object strings (#25017) (Dunqing) - 3a9d5a5 minifier: Keep `typeof foo == ['object']` as-is (#24941) (sapphi-red) - 10ec276 ast: Custom AST builder methods take `IntoIn` where child method does (#25033) (overlookmotel) - fbe8d31 minifier: Respect targets when folding RegExp source (#24790) (Dunqing) ###### ⚡ Performance - fb402b0 minifier: Stop re-deriving printed numeric spellings (#25103) (Dunqing) - 7251e52 react_compiler: Avoid large types on stack (#25037) (overlookmotel) - e07718f isolated_declarations: Avoid large types on stack (#25036) (overlookmotel) - 9fb1e3e transformer: Avoid large types on stack (#25035) (overlookmotel) - 8b80f8b parser: Avoid large types on stack (#25034) (overlookmotel) ###### 📚 Documentation - 2ea0aa9 ast: Correct grammar in AST builder methods doc comments (#25173) (overlookmotel) ### apps_v1.77.0 — oxlint v1.77.0 & oxfmt v0.62.0 - Date: 2026-08-03 - Version: apps_v1.77.0 - Original notes: https://github.com/oxc-project/oxc/releases/tag/apps_v1.77.0 - Permalink: https://whatsnew.fyi/product/oxc/releases/apps-v1.77.0 - **changed** — Return borrowed JSDoc so the parse cache works - **changed** — Store single parameter in TSIndexSignature::parameter - **added** — Introduce ExportDeclaration, ExportFromDeclaration - **added** — Introduce ArrowFunctionBody enum - **added** — Expand bad-char-at-comparison rule coverage - **added** — Show file:line:col in github format annotation messages - **fixed** — Detect parenthesized member expression object in new-for-builtins - **fixed** — Reject duplicate JS plugin names - **fixed** — Ignore unsigned shifts in prefer-math-trunc - **fixed** — Handle ambient error variables in prefer-promise-reject-errors - **fixed** — Bound token lookup in no-async-await - **fixed** — Bound token lookups in bad-bitwise-operator - **fixed** — Bound token lookup in import/no-duplicates - **fixed** — Bound token lookup in consistent-type-specifier-style - **fixed** — Bound token lookup in yoda - **fixed** — Avoid recursive declaration traversal in no-map-spread - **changed** — Move prefer-promise-reject-errors category to pedantic - **fixed** — Bound token lookup in require-await - **fixed** — Bound token lookup in prefer-template - **fixed** — Respect .gitignore for walk targets and explicit paths ##### Table of Contents - [Oxlint v1.77.0](#oxlint-v1.77.0) - [Oxfmt v0.62.0](#oxfmt-v0.62.0) ##### Oxlint v1.77.0 ###### 💥 BREAKING CHANGES - 4120da0 semantic: [**BREAKING**] Return borrowed JSDoc so the parse cache works (#25186) (Connor Shea) - 067da8c ast: [**BREAKING**] Store single parameter in `TSIndexSignature::parameter` (#25154) (camc314) - 1bdedd1 ast: [**BREAKING**] Introduce `ExportDeclaration`, `ExportFromDeclaration` (#25095) (camc314) - c917f20 ast: [**BREAKING**] Introduce `ArrowFunctionBody` enum (#24987) (camc314) ###### 🚀 Features - 0b9f83c linter/oxc/bad-char-at-comparison: Expand coverage (#25001) (Mikhail Baev) - 1fb3d70 oxlint: Show file:line:col in github format annotation messages (#25020) (Faris Tristan Fabian) ###### 🐛 Bug Fixes - a64b65d linter/unicorn/new-for-builtins: Detect parenthesized member expression object (#25249) (tanakalucky) - 9d4592c linter: Reject duplicate JS plugin names (#25243) (camc314) - 3213e7a linter: Ignore unsigned shifts in prefer-math-trunc (#25240) (camc314) - 06579da linter/eslint/prefer-promise-reject-errors: Handle ambient error variables (#25238) (camc314) - 6a7cd90 linter/oxc/no-async-await: Bound token lookup (#25222) (camc314) - d8e390a linter/oxc/bad-bitwise-operator: Bound token lookups (#25220) (camc314) - 351a777 linter/import/no-duplicates: Bound token lookup (#25219) (camc314) - 4f70fb6 linter/import/consistent-type-specifier-style: Bound token lookup (#25218) (camc314) - b89113c linter/eslint/yoda: Bound token lookup (#25202) (camc314) - 7c7cda7 linter/oxc/no-map-spread: Avoid recursive declaration traversal (#25200) (camc314) - 99efb30 linter/eslint/prefer-promise-reject-errors: Move category to `pedantic` (#25201) (camc314) - 8edad2a linter/eslint/require-await: Bound token lookup (#25199) (camc314) - 5aaec85 linter/eslint/prefer-template: Bound token lookup (#25197) (camc314) - 0ea1af4 linter/unicorn/new-for-builtins: Align Date() diagnostic message with upstream (#25166) (tanakalucky) - f6c8575 linter/eslint/prefer-object-spread: Bound token lookup (#25195) (camc314) - 20f68e7 oxlint,oxfmt: Respect `.gitignore` for walk targets and explicit paths (#25133) (leaysgur) - b83993b linter/eslint/prefer-const: Bound token lookup (#25194) (camc314) - aeabf63 linter/eslint/object-shorthand: Bound token lookups (#25193) (camc314) - 48f302c linter/eslint/no-var: Bound token lookup (#25192) (camc314) - 1f595de linter/eslint/no-unused-vars: Bound token lookups (#25191) (camc314) - e52f4c4 linter/eslint/no-unexpected-multiline: Use bounded token lookup (#25190) (camc314) - ca80338 linter/eslint/eqeqeq: Use bounded token lookup (#25189) (camc314) - df91684 linter: Make the remaining token lookups comment-aware (#25182) (connorshea) - 2401bb8 linter/eslint/prefer-const: Skip Svelte and Vue files (#25148) (Pitiș Radu) - b870897 linter: Don't match tokens inside comments when locating spans (#25181) (connorshea) - b474da1 linter/typescript/consistent-type-imports: Make token lookups comment-aware (#25180) (connorshea) - 81f82db linter: Don't insert an ASI semicolon into an unbraced statement body (#25160) (Vladexy88x) - 31333be linter/no-magic-array-flat-depth: Scan for `(` by byte offset instead of character count (#25130) (connorshea) - 56e9c83 linter: Index source text by byte offset instead of char count (#25131) (connorshea) - 5c0fa61 linter/eslint/no-warning-comments: Unify config structs and remove manual options docs (#25151) (Mikhail Baev) - a922355 docs: Incorrect quotations in `role_supports_aria_props.rs` (#25077) (Maximilian Franzke) - e8c4c05 linter/eslint/no-unreachable-loop: Handle caught errors correctly (#25071) (camc314) - 2b02711 oxlint: Correct --warn flag help text (#25059) (Faris Tristan Fabian) - 97f084f linter/eslint/no-control-regex: Allow null escape (#25070) (camc314) ###### ⚡ Performance - 224c21a linter/vue/no-side-effects-in-computed-properties: Borrow property names in the mutation walk (#25212) (connorshea) - d36e9c9 linter/un _[Truncated at 4000 characters — full notes: https://github.com/oxc-project/oxc/releases/tag/apps_v1.77.0]_ ### apps_v1.76.0 — oxlint v1.76.0 & oxfmt v0.61.0 - Date: 2026-07-27 - Version: apps_v1.76.0 - Original notes: https://github.com/oxc-project/oxc/releases/tag/apps_v1.76.0 - Permalink: https://whatsnew.fyi/product/oxc/releases/apps-v1.76.0 - **added** — Verify eslint/no-restricted-globals config schema - **added** — Verify jest/vitest prefer-lowercase-title config schema - **added** — Add bad-match-all-arg rule - **added** — Implement exports-style rule - **added** — Implement id-denylist rule - **added** — Implement suggestion for class-literal-property-style rule - **fixed** — Mark missing suggestions as pending - **fixed** — Absolutize explicit CLI paths even with --no-ignore - **fixed** — Match eslint behavior for custom components in interactive-supports-focus - **fixed** — Report in and instanceof in no-confusing-non-null-assertion - **fixed** — Make unicorn/no-array-reverse and no-array-sort replacements suggestions - **fixed** — Preserve defineConfig field JSDoc - **fixed** — Clarify diagnostic for node/no-top-level-await - **fixed** — Ignore overloads in eslint/func-names - **fixed** — Handle empty spans serializing ImportMeta and NewTarget - **changed** — Only run jest-vitest/no-test-return-statement on return statements - **changed** — Rewrite eslint/func-style rule to not iterate over all nodes - **changed** — Only run eslint/no-new-func on new and call expressions - **added** — Support oxc.fmt.disableNestedConfig in oxfmt/lsp - **added** — Implement YAML formatter ##### Table of Contents - [Oxlint v1.76.0](#oxlint-v1.76.0) - [Oxfmt v0.61.0](#oxfmt-v0.61.0) ##### Oxlint v1.76.0 ###### 🚀 Features - 8d31dfa linter: Verify eslint/no-restricted-globals config schema (#24598) (vigneshwar) - 7069621 linter: Verify jest/vitest prefer-lowercase-title config schema (#24724) (Bartok) - 016cf2a linter/oxc: Add bad-match-all-arg rule (#24900) (camc314) - cdc941e linter/n: Implement `exports-style` rule (#24087) (Mikhail Baev) - 1ad6f6c linter/eslint: Implement `id-denylist` rule (#24632) (Mikhail Baev) - 678bbb5 linter/typescript-eslint: Implement suggestion for `class-literal-property-style` rule (#24766) (Mikhail Baev) ###### 🐛 Bug Fixes - a5f3a0e linter: Mark missing suggestions as pending (#24956) (Mikhail Baev) - a065946 oxlint: Absolutize explicit CLI paths even with --no-ignore (#24646) (Bez Sahara) - 17688bb linter/jsx-a11y/interactive-supports-focus: Match eslint behavior for custom components (#24780) (Cole Ellison) - 0aef19e linter/typescript/no-confusing-non-null-assertion: Report `in` and `instanceof` (#24825) (Mikhail Baev) - 361dce9 linter: Unicorn/no-array-reverse and no-array-sort replacements should be suggestions (#24848) (klem) - 9213560 config: Preserve defineConfig field JSDoc (#24326) (周星星同学) - 334d884 linter/node/no-top-level-await: Clarify diagnostic (#24803) (camc314) - b9fc6af linter/eslint/func-names: Ignore overloads (#24801) (camc314) - e80574f estree: Handle empty spans serializing `ImportMeta` and `NewTarget` (#24775) (overlookmotel) ###### ⚡ Performance - e9de5a1 linter/jest-vitest/no-test-return-statement: Only run on return statements (#24167) (Cam McHenry) - aea459d linter/eslint/func-style: Rewrite rule to not iterate over all nodes (#24156) (Cam McHenry) - fb4398c linter/eslint/no-new-func: Only run on new and call expressions (#24166) (Cam McHenry) - c75dc60 linter: Avoid `Vec` allocations via `bound_names` (#24959) (connorshea) - 9f9f39d linter/eslint/no-const-assign: Avoid `Vec` allocation per `const` declarator (#24953) (connorshea) - 10a621e linter/typescript/adjacent-overload-signatures: Avoid collecting vec in some cases (#24874) (connorshea) - ed167e1 linter/node/exports-style: Iterate once over global references (#24877) (connorshea) - 69908fe linter: Avoid allocations in jest/no-deprecated-functions (#24866) (Connor Shea) - a3585d7 linter: Speed up jest/vitest prefer-each (#24872) (Connor Shea) - 62fe640 linter/eslint/prefer-rest-params: Run once per file (#24873) (Connor Shea) - 7a7aa54 linter/eslint/no-this-before-super: Skip files without classes (#24869) (Connor Shea) - 4ad0c94 linter/plugins: Faster copying comments to JS allocator (#24858) (overlookmotel) - 4c25b91 linter/plugins: Test booleans with explicit `=== false` (#24830) (overlookmotel) - b7add00 linter/plugins: Remove check in loop in `getDisableDirectives` (#24833) (overlookmotel) ###### 📚 Documentation - 3ff2e0e linter: Clarify config extends types (#24936) (Boshen) ##### Oxfmt v0.61.0 ###### 🚀 Features - eabfe01 oxfmt/lsp: Support `oxc.fmt.disableNestedConfig` (#24965) (leaysgur) - 2357a10 formatter_yaml: Implement YAML formatter (#24534) (leaysgur) ###### 🐛 Bug Fixes - 761a882 formatter_css: Keep leading `+` in An+B to enable idempotency check (#24973) (leaysgur) - e037709 formatter: Stop preserving indent for embedded template exprs (#24972) (leaysgur) - ae1a39b formatter_css: Align wrapped selector-arg indent (#24971) (leaysgur) - 143fd1f formatter: Align quoted `new` signature (#24883) (leaysgur) - 07ff12f formatter_yaml: Fix indent, blank, and spacing issues (#24837) (leaysgur) - d076b40 formatter: Check calee chain is_simple (#24871) (leaysgur) - fb34196 formatter_css: Keep non-ASCII strings with quotes (#24870) (leaysgur) - 9213560 config: Preserve defineConfig field JSDoc (#24326) (周星星同学) - 31783e9 formatter_css: Print nested SCSS map with consistent indent (#24789) (leaysgur) - 8eb9eca formatter/jsdoc: Respect `singleQuote` option in `@import` (#24787) (leay _[Truncated at 4000 characters — full notes: https://github.com/oxc-project/oxc/releases/tag/apps_v1.76.0]_ ### crates_v0.142.0 — oxc crates_v0.142.0 - Date: 2026-07-27 - Version: crates_v0.142.0 - Original notes: https://github.com/oxc-project/oxc/releases/tag/crates_v0.142.0 - Permalink: https://whatsnew.fyi/product/oxc/releases/crates-v0.142.0 - **removed** — Tighten bound on AstBuild trait - **added** — Fold parenthesized boolean ternary tests in minifier - **added** — Fold sequence branches in boolean ternaries in minifier - **added** — Add VisitJsMut visitor to ast_visit - **added** — Add new IsTerminated trait and use it in exit-point optimization - **added** — Shorten integer zero comparisons in minifier - **added** — Convert switch with one case to if statement in minifier - **added** — Add static_str! macro to str crate - **added** — Emit error for type args in JS files in parser - **added** — Re-export Ident from oxc_ast crate - **added** — Re-export oxc_str types from oxc crate - **added** — Add Utf8ToUtf16::convert_program_and_comments to ast_visit - **fixed** — Optimize termination statements in labeled statements in minifier - **fixed** — Avoid longer numeric constant folds in minifier - **fixed** — Keep side effects in typeof comparisons in minifier - **fixed** — Keep side effects when compressing == true to == 1 in minifier - **fixed** — Keep side effects values in template literals in minifier - **fixed** — Keep side effects when folding Number call in minifier - **fixed** — Preserve warning bailouts in react-compiler - **fixed** — Preserve orphaned file coverage comments in codegen ###### 💥 BREAKING CHANGES - 1ac5ac7 ast: [**BREAKING**] Tighten bound on `AstBuild` trait (#24925) (overlookmotel) ###### 🚀 Features - c7c5696 minifier: Fold parenthesized boolean ternary tests (#24968) (Dunqing) - 82c5806 minifier: Fold sequence branches in boolean ternaries (#24943) (Dunqing) - cc623d9 ast_visit: Add VisitJsMut visitor (#24828) (Boshen) - b31713a minifier: Add new IsTerminated trait and use it in exit-point optimization (#24950) (Armano) - e9e0f24 minifier: Shorten integer zero comparisons (#24933) (Dunqing) - 34f5559 minifier: Convert switch with one case to if statement (#24611) (Armano) - 9107e74 str: Add `static_str!` macro (#24887) (overlookmotel) - 4d6f623 parser: Emit error for type args in JS files (#24896) (camc314) - ec08afc ast: Re-export `Ident` from `oxc_ast` crate (#24861) (overlookmotel) - 73cfdfa oxc: Re-export `oxc_str` types from `oxc` crate (#24860) (overlookmotel) - 11f5d1f ast_visit: Add `Utf8ToUtf16::convert_program_and_comments` (#24859) (overlookmotel) ###### 🐛 Bug Fixes - cb5acfb minifier: Optimize termination statements in labeled statements (#24813) (Armano) - 4618300 minifier: Avoid longer numeric constant folds (#24875) (Dunqing) - f7971f1 minifier: Keep side effects in typeof comparisons (#24940) (sapphi-red) - 4597d6f minifier: Keep side effects when compressing `== true` to `== 1` (#24939) (sapphi-red) - c3a48df minifier: Keep side effects values in template literals (#24938) (sapphi-red) - e19f183 minifier: Keep side effects when folding `Number` call (#24937) (sapphi-red) - 9d7745a react-compiler: Preserve warning bailouts (#24935) (Boshen) - 0126aba codegen: Preserve orphaned file coverage comments (#24815) (Dunqing) - 9fbbaf8 parser: Clarify return in class static blocks (#24899) (camc314) - e7d5c78 str: Fix hygiene of `format_ident!` and `format_str!` macros (#24886) (overlookmotel) - 07e9acc ecmascript: Keep side effects in parent of `toString` calls (#24846) (sapphi-red) - 16a40ad ecmascript: Detect side effects in unused arguments to `charCodeAt` (#24845) (sapphi-red) - 5b4ae54 parser: Use specific for-await diagnostic (#24856) (camc314) - ffcc33a parser: Report for-await in non-async functions (#24855) (camc314) - df230d0 minifier: Avoid reordering this in nested class keys (#24785) (Dunqing) - d24b76b minifier: Isolate derived constructor this state (#24784) (Dunqing) - 582805d parser: Parse unary conditional after satisfies (#24807) (Boshen) - 23b904f minifier: Preserve default parameter side effects (#24791) (Dunqing) - 3048594 parser: Use correct diagnostic for `await using` in bare switch case (#24798) (camc314) - e80574f estree: Handle empty spans serializing `ImportMeta` and `NewTarget` (#24775) (overlookmotel) - 4b12840 minifier: Do not fold a `-0` ternary branch to `+a` (loses the sign) (#23637) (Jerry Zhao) - 133bb35 ecmascript: Detect side effects of `foo().#bar` correctly when PropertyReadSideEffects::None (#24769) (sapphi-red) ###### ⚡ Performance - a086d91 ecmascript: Avoid number literal allocations (#24889) (Dunqing) - 98f2ecb react_compiler: Compare value set pointers before probing in state merge (#24805) (Marius Schulz) - b287f29 estree: Avoid ident hash calculations when serializing (#24774) (overlookmotel) ###### 📚 Documentation - 4d2e2bf ast: Fix incorrect return value in `common_js_require` docs (#24945) (connorshea) - b539e74 estree: Document custom serializers for `ImportMeta` and `NewTarget` (#24777) (overlookmotel) ### apps_v1.75.0 — oxlint v1.75.0 & oxfmt v0.60.0 - Date: 2026-07-21 - Version: apps_v1.75.0 - Original notes: https://github.com/oxc-project/oxc/releases/tag/apps_v1.75.0 - Permalink: https://whatsnew.fyi/product/oxc/releases/apps-v1.75.0 - **added** — Implement no-top-level-await rule for linter/node - **added** — Implement function-component-definition rule for linter/react - **added** — Add support for prefer-top-level-if-only-type-imports option in linter/import/consistent-type-specifier-style - **added** — Add ParseOptions::enable_ident_hashes to parser - **changed** — Reuse jest/padding-around-test-blocks for vitest/padding-around-test-blocks - **changed** — Keep tailwind classes glued to template expr with preserveWhitespace in oxfmt - **fixed** — Report error for invalid glob patterns in oxlint and oxfmt - **fixed** — Preserve valid parameter defaults in linter/unicorn/no-useless-undefined - **fixed** — Handle typed declarations in linter/eslint/prefer-destructuring - **fixed** — Handle assigned errors in linter/eslint/no-throw-literal - **fixed** — Detect React components from returned JSX in linter - **fixed** — Allow TS syntax in computed keys in linter/eslint/no-useless-computed-key - **fixed** — Update oxc-css-parser to 0.0.9 in formatter_css - **fixed** — Stabilize comment between tagged template tag and quasi in formatter - **fixed** — Use line_suffix for EOL line comment in formatter_css - **fixed** — Keep same line comments pending across intervening tokens in formatter_graphql - **changed** — Only run linter/unicorn/prefer-event-target on Class and NewExpression nodes - **changed** — Only invoke lint on code actions when document is not opened in oxlint/lsp - **changed** — Box OxcDiagnosticInner to reduce binary size in diagnostics - **changed** — Compute diagnostic Info once per diagnostic in linter/reporter/stylish ##### Table of Contents - [Oxlint v1.75.0](#oxlint-v1.75.0) - [Oxfmt v0.60.0](#oxfmt-v0.60.0) ##### Oxlint v1.75.0 ###### 🏆 Highlights - [Announcing Type-Aware Linting Stable](https://oxc.rs/blog/2026-07-22-type-aware-linting-stable) ###### 🚀 Features - dd18383 linter/node: Implement no-top-level-await rule (#24634) (Connor Shea) - 16a65f2 linter/react: Implement function-component-definition rule (#24471) (Cole Ellison) - 7f1f585 linter: Reuse `jest/padding-around-test-blocks` for `vitest/padding-around-test-blocks` (#24519) (Mikhail Baev) - 99978a8 linter/import/consistent-type-specifier-style: Support `prefer-top-level-if-only-type-imports` option (#24502) (camc314) ###### 🐛 Bug Fixes - e81b2ff oxlint,oxfmt: Report error for invalid glob patterns (#24744) (leaysgur) - 0184ad6 linter/unicorn/no-useless-undefined: Preserve valid parameter defaults (#24686) (camc314) - 8694167 linter/eslint/prefer-destructuring: Handle typed declarations (#24616) (camc314) - 477cf0f linter/eslint/no-throw-literal: Handle assigned errors (#24561) (Cole Ellison) - ac9200a linter: Detect React components from returned JSX (#24521) (camc314) - c0a6522 linter/eslint/no-useless-computed-key: Allow TS syntax in computed keys (#24524) (Cole Ellison) ###### ⚡ Performance - 346eed1 linter/unicorn/prefer-event-target: Only run on `Class` and `NewExpression` nodes (#24685) (Mikhail Baev) - 7be5cf0 oxlint/lsp: Only invoke lint on code actions when document is not opened (#24676) (Sysix) - d3f07a0 diagnostics: Box OxcDiagnosticInner to reduce binary size (#24665) (Boshen) - 90ae040 linter/reporter/stylish: Compute diagnostic Info once per diagnostic (#24525) (connorshea) ###### 📚 Documentation - e6f7174 linter/valid-expect: Fix correct example being identical to incorrect one (#24468) (mkan0141) ##### Oxfmt v0.60.0 ###### 🚀 Features - 3d22307 parser: Add `ParseOptions::enable_ident_hashes` (#24491) (Boshen) ###### 🐛 Bug Fixes - fd7cf5b formatter_css: Update oxc-css-parser to 0.0.9 (#24745) (leaysgur) - e81b2ff oxlint,oxfmt: Report error for invalid glob patterns (#24744) (leaysgur) - 164e70a formatter: Stabilize comment between tagged temaplte tag and quasi (#24738) (leaysgur) - c399367 formatter_css: Update oxc-css-parser to 0.0.8 (#24725) (leaysgur) - 6fe866a oxfmt: Keep tailwind classes glued to template expr with `preserveWhitespace` (#24609) (leaysgur) - 33e32d8 formatter_css: Use `line_suffix` for EOL line comment (#24580) (leaysgur) - 5f76998 formatter_graphql: Keep same line comments pending across intervening tokens (#24579) (leaysgur) ### crates_v0.141.0 — oxc crates_v0.141.0 - Date: 2026-07-21 - Version: crates_v0.141.0 - Original notes: https://github.com/oxc-project/oxc/releases/tag/crates_v0.141.0 - Permalink: https://whatsnew.fyi/product/oxc/releases/crates-v0.141.0 - **removed** — Move `IdentBuildHasher` to `oxc_str` crate - **changed** — Split `MetaProperty` into `ImportMeta` and `NewTarget` - **added** — Merge combined assign expression in conditional expression - **added** — Merge assign expression against member expression in conditional expression - **added** — Add `Vec::from_raw_parts_in` to allocator - **added** — Add context notes for strict assignments in semantic - **added** — Add `implements!` macro to data_structures - **added** — Add `const_str_eq` function to data_structures - **added** — Add context notes for reserved keyword diagnostic in semantic - **added** — Provide more friendly error for spread element in dynamic imports - **added** — Drop last break from last switch case in minifier - **added** — Remove unreachable recursive functions in minifier - **added** — Allow `NONE` to be passed to AST builder methods where `Option` is expected - **added** — Accept arrays for `ArenaVec` params of AST builder methods - **added** — Implement `FromIn` for array to `Vec` conversion in allocator - **added** — Track heap deallocs, alloc bytes, and peak growth in track-memory-allocations - **changed** — Move JSX entity decoder to `oxc_syntax` - **added** — Export `Str` as `ArenaStr` in str crate - **added** — Expand switch optimization to remove empty cases in minifier - **added** — Add `ParseOptions::enable_ident_hashes` - **fixed** — Avoid reordering this before super in minifier ###### 💥 BREAKING CHANGES - 5293431 str: [**BREAKING**] Move `IdentBuildHasher` to `oxc_str` crate (#24717) (overlookmotel) - 54cc121 ast: [**BREAKING**] Split `MetaProperty` into `ImportMeta` and `NewTarget` (#24557) (camc314) ###### 🚀 Features - 87823d0 minifier: Merge combined assign expression in conditional expression (#24707) (sapphi-red) - 03a54c9 minifier: Merge assign expression against member expression in conditional expression (#24706) (sapphi-red) - effd3c8 allocator: Add `Vec::from_raw_parts_in` (#24732) (overlookmotel) - ddacf61 semantic: Add context notes for strict assignments (#24728) (camc314) - 7e9b84a data_structures: Add `implements!` macro (#24721) (overlookmotel) - 39e141b data_structures: Add `const_str_eq` function (#24720) (overlookmotel) - cc3d17f semantic: Add context notes for reserved keyword diagnostic (#24715) (camc314) - 4c71560 parser: More friendly error for spread element in dynamic imports (#24705) (sapphi-red) - 7b045cd minfier: Drop last break from last switch case (#24673) (Armano) - 7d3c178 minifier: Remove unreachable recursive functions (#24125) (Dunqing) - 94f99b3 ast: Allow `NONE` to be passed to AST builder methods where `Option` is expected (#24629) (overlookmotel) - 77230c5 ast: Accept arrays for `ArenaVec` params of AST builder methods (#24621) (overlookmotel) - f08b152 allocator: Implement `FromIn` for array to `Vec` conversion (#24620) (overlookmotel) - 2338c13 track-memory-allocations: Track heap deallocs, alloc bytes, and peak growth (#24619) (Boshen) - 7aa4739 syntax,transformer: Move JSX entity decoder to `oxc_syntax` (#24617) (camc314) - 2b097c4 str: Export `Str` as `ArenaStr` (#24604) (overlookmotel) - 3acf4c1 minifier: Expand switch optimiation to remove empty cases (#24520) (Armano) - 129b759 parser: Improve diagnostics for unparenthesized LHS on exponential expr (#24569) (camc314) - 4d0c601 minifier: Fold arithmetic over undefined and null operands (#24485) (Dunqing) - 91541dd minifier: Drop empty switch statements (#24527) (Armano) - d05224d ast_visit: Generate VisitJs visitor that skips TypeScript type-space (#24499) (Boshen) - 3d22307 parser: Add `ParseOptions::enable_ident_hashes` (#24491) (Boshen) ###### 🐛 Bug Fixes - 61e02bf minifier: Avoid reordering this before super (#24755) (Dunqing) - 79e6d77 minifier: Preserve RegExp feature detection (#24712) (Dunqing) - 47ddedf semantic: Allow arguments in ambient declarations (#24758) (camc314) - 9f3e300 react_compiler: Preserve aliasing diagnostic locations (#24757) (Boshen) - 4b81f4d react_compiler: Honor default suppressions (#24747) (Boshen) - 6cc4a34 codegen: Wrap negative BigInt literal base of `**` in parentheses (#23621) (Jerry Zhao) - d85276c minifier: Avoid incorrect logical assignment transformation when base object may be mutated (#24718) (sapphi-red) - 99b1dc4 isolated-declarations: Separate static accessors (#24716) (camc314) - 76ec104 semantic: Resolve import-equals namespaces (#22696) (camc314) - 0ffa88e str: Enable `hashbrown` feature `inline-more` (#24719) (overlookmotel) - 0e9b460 isolated-declarations: Normalize accessor keys (#24690) (Cameron) - 64c2241 minifier: Align class heritage removal with assumptions (#24533) (Dunqing) - 48b59f4 parser: Span ambient generator diagnostics (#24711) (camc314) - e750a82 ecmascript: Fix false negative for may_have_side_effects on dynamic property access (#24709) (sapphi-red) - f145d73 minifier: Guard reordered identifier reads (#24698) (Dunqing) - a2ef382 isolated-declarations: Reject `window.Symbol` as global symbol reference (#24689) (camc314) - b1bcf72 minifier: Invalidate facts for redeclared bindings (#24658) (Dunqing) - 921b834 minifier: Don't treat a conditionally-assigned var as write-once (#24650) (Dunqing) - 061af1f minifier: Avoid stale pure function summaries (#24636) (Dunqing) - 40c2f43 allocator: `Vec::from_array_in` do not allocate zero-length array (#24628) (overlookmotel) - 70994ae codegen: Preserve comments before expression _[Truncated at 4000 characters — full notes: https://github.com/oxc-project/oxc/releases/tag/crates_v0.141.0]_ ### apps_v1.74.0 — oxlint v1.74.0 & oxfmt v0.59.0 - Date: 2026-07-14 - Version: apps_v1.74.0 - Original notes: https://github.com/oxc-project/oxc/releases/tag/apps_v1.74.0 - Permalink: https://whatsnew.fyi/product/oxc/releases/apps-v1.74.0 - **added** — Add `namespaces` option to linter/eslint/no-inner-declarations - **added** — Auto-discover `.mts` config files - **added** — Add autofix logic to linter/import/no-duplicates - **added** — Support `quoteProps` for TS enum and methods - **added** — Expose `SourceText::as_str()` - **changed** — Update oxc-css-parser to 0.0.7 - **changed** — Format Less :extend and merge props - **fixed** — Avoid duplicate commas when merging imports in linter/import/no-duplicates - **fixed** — Preserve type modifiers when merging imports - **fixed** — Skip fix for `TSPropertySignature` keys in linter/unicorn/prefer-string-raw - **fixed** — Skip suppression validation with `--type-check-only` - **fixed** — Fix false positive in linter/jest/prefer-lowercase-title when `lowercaseFirstCharacterOnly` is false - **fixed** — Allow `vite-plus/test` and `@effect` as Vitest source - **fixed** — Error on `ignorePatterns` that cannot match files outside the config directory - **fixed** — Resolve `ignorePatterns` relative to the config dir - **fixed** — Do not error on catch variables in linter/eslint/no-loop-func - **fixed** — Count default parameter updates as usage in linter/eslint/no-unused-vars - **fixed** — Detect Junie agent env vars - **fixed** — Handle `break` in switch statements correctly in linter/eslint/no-unreachable ##### Table of Contents - [Oxlint v1.74.0](#oxlint-v1.74.0) - [Oxfmt v0.59.0](#oxfmt-v0.59.0) ##### Oxlint v1.74.0 ###### 🚀 Features - 0433a83 linter/eslint/no-inner-declarations: Add `namespaces` option (#24044) (Boshen) - 92f154a oxlint,oxfmt: Auto-discover `.mts` config files (#24357) (camc314) - 8c1d74b linter/import/no-duplicates: Add autofix logic (#24273) (Cole Ellison) ###### 🐛 Bug Fixes - ac7176d linter/import/no-duplicates: Avoid duplicate commas when merging imports (#24467) (camc314) - 261aa39 linter/import/no-duplicates: Preserve type modifiers when merging imports (#24466) (camc314) - dbd08b6 linter/unicorn/prefer-string-raw: Skip fix for `TSPropertySignature` keys (#24465) (camc314) - df67932 linter: Skip suppression validation with `--type-check-only` (#24462) (Stephen Zhou) - 0b086de linter/jest/prefer-lowercase-title: False positive when `lowercaseFirstCharacterOnly` is false (#24414) (Connor Shea) - 097cb95 linter: Allow `vite-plus/test` and `@effect as Vitest source (#24196) (Liang) - 8337835 linter: Error on `ignorePatterns` that cannot match files aoutside the config directory (#24341) (leaysgur) - 9ba30e5 linter/oxc/bad-replace-all-arg: Add note to enhance diagnostic (#24346) (camc314) - 2ce5a33 linter: Resolve `ignorePatterns` relative to the config dir (#24339) (leaysgur) - ab90eed linter/eslint/no-loop-func: Do not error on catch variables (#24316) (Chris Opperwall) - b67f0a6 linter/eslint/no-unused-vars: Count default parameter updates as usage (#24323) (camc314) - d193f8e linter: Detect Junie agent env vars (#24277) (Jeevan Mohan Pawar) - 2aecf60 linter/eslint/no-unreachable: Handle `break` in switch stmts correctly (#24260) (camc314) ###### ⚡ Performance - 2efa2f9 linter/react/jsx-handler-names: Simplify JSX handler name normalization (#24458) (camc314) - 9c4e24a linter/eslint/object-shorthand: Remove constructor regex (#24457) (camc314) - 7f80cac linter/vue/prop-name-casing: Precompile `ignoreProps` regex pattern (#24413) (connorshea) - 6272051 linter/typescript/no-require-imports: Compile allow patterns once (#24417) (connorshea) - fb1edf1 linter: Compute comment fix span only for directive comments (#24419) (connorshea) - 33805b9 linter/jsdoc/require-param: Compile checkTypesPattern regex once (#24420) (connorshea) - 8de6fca linter/jest/valid-title: Compile disallowedWords regex once (#24412) (Connor Shea) - 4a0d8dc linter/eslint/no-underscore-dangle: Avoid String clone per identifier (#24371) (Ian Macalinao) - f3ab04c linter/typescript/consistent-type-imports: Remove redundant Vec per violation (#24370) (Ian Macalinao) - 4d2d78d linter/typescript/prefer-ts-expect-error: Avoid String clone per comment (#24369) (Ian Macalinao) ##### Oxfmt v0.59.0 ###### 🚀 Features - 3a7fe74 formatter_css: Update oxc-css-parser to 0.0.7 (#24434) (leaysgur) - 0173cd3 formatter_css: Format Less :extend and merge props (#24358) (leaysgur) - 92f154a oxlint,oxfmt: Auto-discover `.mts` config files (#24357) (camc314) - df250df formatter: Support `quoteProps` for TS enum and methods (#24309) (leaysgur) - a9a5cd6 formatter_core: Expose `SourceText::as_str()` (#24281) (leaysgur) ###### 🐛 Bug Fixes - 95262b9 formatter_css: Keep more value comments before comma (#24487) (leaysgur) - cd53d98 formatter_css: Keep value comments before comma (#24484) (leaysgur) - 27f57d8 formatter: Type alias comment idempotency (#24483) (leaysgur) - b7b82e0 formatter: Suppressed trailing semi (#24482) (leaysgur) - 162bddf formatter: Add required parens for conditional type in type parameter constraint (#24450) (leaysgur) - 2d22a91 formatter: Determine type cast target from span instead of lexical scan (#24447) (leaysgur) - 25306e9 formatter: Do not add extra parens with type cast comment (#24444) (leaysgur) - bd6edfe formatter: Break arrow signature that exactly fills the line when cond body may hug (#24440) (leaysgur) - a99ef41 formatter: Keep quotes on method signature named new (#24432) (leaysgur) - fcc28df formatter_css: Keep _[Truncated at 4000 characters — full notes: https://github.com/oxc-project/oxc/releases/tag/apps_v1.74.0]_ ### crates_v0.140.0 — oxc crates_v0.140.0 - Date: 2026-07-14 - Version: crates_v0.140.0 - Original notes: https://github.com/oxc-project/oxc/releases/tag/crates_v0.140.0 - Permalink: https://whatsnew.fyi/product/oxc/releases/crates-v0.140.0 - **added** — minifier: Extract sequence expression from expressions - **added** — minifier: Remove unreachable code after terminating statements - **added** — data_structures: Add likely and unlikely functions - **added** — react_compiler: Implement enableEmitHookGuards codegen - **added** — minifier: Apply De Morgan's law to negated comparison chains in jump guards and loop tests - **added** — minifier: Drop write-only property assignments to unused local bindings by default - **added** — semantic: Record const enums in EnumData - **added** — semantic: Add Scoping::set_symbol_span - **fixed** — minifier: Keep reads of never-assigned uninitialized bindings - **fixed** — minifier: Preserve guaranteed throws from class heritage evaluation - **fixed** — semantic: Track ambient contexts in SemanticBuilder - **fixed** — transformer/decorator: Scope accessor class binding - **fixed** — semantic: Allow reserved keywords in ambient declaration types - **fixed** — track-memory-allocations: Exclude arena chunks from Sys allocs - **fixed** — transformer: Clear lowered namespace redeclarations - **fixed** — semantic: Mark declared computed MethodDefinitions as type references - **fixed** — isolated-declarations: Emit const readonly fields as types - **fixed** — minifier: Make __proto__ write tracking execution-order independent - **fixed** — transformer: Remove stale enum member bindings - **fixed** — transformer: Correct symbol flags for lowered namespaces ###### 🚀 Features - 5b20828 minifier: Extract sequence expression from expressions (#22003) (Armano) - 616bfa2 minifier: Remove unreachable code after terminating statements (#24441) (Dunqing) - ddab89a data_structures: Add `likely` and `unlikely` functions (#24368) (overlookmotel) - a3a39f9 react_compiler: Implement enableEmitHookGuards codegen (#24329) (Boshen) - b79eef7 minifier: Apply De Morgan's law to negated comparison chains in jump guards and loop tests (#24279) (Dunqing) - 34ff7b4 minifier: Drop write-only property assignments to unused local bindings by default (#24112) (Dunqing) - 1b829d8 semantic: Record const enums in EnumData (#24268) (Dunqing) - ba0944c semantic: Add `Scoping::set_symbol_span` (#24221) (camc314) ###### 🐛 Bug Fixes - edf781d minifier: Keep reads of never-assigned uninitialized bindings (#24452) (Dunqing) - 7d33363 minifier: Preserve guaranteed throws from class heritage evaluation (#24349) (Dunqing) - 058a62f semantic: Track ambient contexts in `SemanticBuilder` (#24327) (camc314) - 721eb0b transformer/decorator: Scope accessor class binding (#24330) (camc314) - 1ebdce3 semantic: Allow reserved keywords in ambient declaration types (#24325) (camc314) - 460176a track-memory-allocations: Exclude arena chunks from Sys allocs (#24292) (Dunqing) - af4922b transformer: Clear lowered namespace redeclarations (#24300) (camc314) - ffd2765 semantic: Mark declared computed `MethodDefinition`s as type references (#24296) (camc314) - f17514b isolated-declarations: Emit const readonly fields as types (#24288) (camc314) - 40f769d minifier: Make `__proto__` write tracking execution-order independent (#24280) (Dunqing) - 6371fed transformer: Remove stale enum member bindings (#24272) (camc314) - f05dfab transformer: Correct symbol flags for lowered namespaces (#24271) (Dunqing) - 84eeb55 transformer: Correct symbol flags for lowered enums (#24269) (Dunqing) - c3057da transformer: Preserve generated class binding spans (#24220) (camc314) - 8260096 transformer: Correct span for lowered namespace symbol (#24222) (camc314) - 42d00d3 semantic: Mark declared class heritage as type references (#24237) (camc314) - 588d997 semantic: Mark TS `PropertyDefinition`s computed fields as type references (#24233) (camc314) - 9b95632 semantic: Mark computed method keys in `TSMethodSignature`s as type references (#24232) (camc314) ###### ⚡ Performance - 48911ec react_compiler: Use FxHashSet for membership-only block sets (#24486) (Boshen) - 1e3e626 react_compiler: Reduce allocations in reactive-places and mutation-aliasing passes (#24476) (Boshen) - e86e0d8 react_compiler: Avoid copying the aliasing fixpoint's abstract state (#24117) (Marius Schulz) - 5b26643 transformer_plugins: Dispatch global defines by trailing name (#23666) (Boshen) - dce0f29 react_compiler: Replace all compiled functions in a single AST walk (#24403) (Boshen) - f85f0d8 ast: Delegate inherited enum variants in clone_in and estree derives (#23555) (Boshen) - 3ff0234 allocator: Remove `unwrap` from `ReplaceWith` (#24365) (overlookmotel) - ab22e80 transformer: Fix Rust 1.97 performance regression (#24354) (camc314) - b47585c parser: Use `ReplaceWith` instead of `TakeIn` (#24018) (overlookmotel) - b227a06 minifier: Use `ReplaceWith` instead of `TakeIn` (#24017) (overlookmotel) ### apps_v1.73.0 — oxlint v1.73.0 & oxfmt v0.58.0 - Date: 2026-07-06 - Version: apps_v1.73.0 - Original notes: https://github.com/oxc-project/oxc/releases/tag/apps_v1.73.0 - Permalink: https://whatsnew.fyi/product/oxc/releases/apps-v1.73.0 - **added** — Implement `explicit-timer-delay` rule for unicorn linter - **added** — Implement `no-confusing-array-with` rule for unicorn linter - **added** — Implement `no-unreachable-loop` rule for eslint linter - **added** — Add `lowercase` and `screamingSnakeCase` options to `unicorn/filename-case` rule - **added** — Add `allowAfterSpread` option to `unicorn/no-array-sort` rule - **added** — Add per-rule timings for type-aware linting - **added** — Add `disallowedValues` option for `react/forbid-dom-props` rule - **added** — Add literal line and root indention primitives to formatter core - **added** — Add no-expand-parent for multiline text to formatter core - **changed** — Check relational comparisons in `eslint/no-constant-binary-expression` rule - **changed** — Add missing options to `jsdoc/require-param` rule - **changed** — Update oxc-css-parser to 0.0.5 - **changed** — Update oxc-graphql-parser to 0.0.5 - **fixed** — Don't flag a type-only import beside a side-effect import in `import/no-duplicates` - **fixed** — Flag `useEffectEvent` escapes in `react/rules-of-hooks` - **fixed** — Map `require.requireActual` to `jest.requireActual` in `no-deprecated-functions` - **fixed** — Handle switch case continuation in `eslint/no-useless-return` - **fixed** — Flag dynamic import() expressions in `eslint/no-restricted-imports` - **fixed** — Detect circular config extends - **fixed** — Omit unneeded semicolon for type members with `no-semi` in formatter ##### Table of Contents - [Oxlint v1.73.0](#oxlint-v1.73.0) - [Oxfmt v0.58.0](#oxfmt-v0.58.0) ##### Oxlint v1.73.0 ###### 🚀 Features - 7db7a29 allocator: Add `ReplaceWith` trait (#24012) (overlookmotel) - a2c97f3 linter/unicorn: Implement `explicit-timer-delay` rule (#23612) (Mikhail Baev) - 85735cb linter/unicorn: Implement `no-confusing-array-with` rule (#23638) (Shekhu☺️) - cb4fbb9 linter/eslint: Implement no-unreachable-loop rule (#23975) (Todor Andonov) - dc32112 linter/eslint/no-constant-binary-expression: Check relational comparisons (#24088) (camc314) - 439c344 linter/jsdoc: Added missing options to `jsdoc/require-param` rule (#23364) (kapobajza) - 62af717 linter/unicorn/filename-case: Add `lowercase` and `screamingSnakeCase` (#24045) (Boshen) - d963967 linter/unicorn/no-array-sort: Add `allowAfterSpread` option (#24043) (Boshen) - 0a75682 linter: Add per-rule timings for type-aware linting (#22488) (camchenry) - 743e222 linter/react: Add `disallowedValues` option for `forbid-dom-props` rule (#23970) (Mikhail Baev) ###### 🐛 Bug Fixes - 7b80010 linter: Use direct binding symbol ids (#24216) (camc314) - 8f94b49 linter/import/no-duplicates: Don't flag a type-only import beside a side-effect import (#24030) (Boshen) - d8c3fee linter/react/rules-of-hooks: Flag `useEffectEvent` escapes (#23764) (Rayan Salhab) - 0a7312b linter/no-deprecated-functions: Map `require.requireActual` to `jest.requireActual` (#23627) (Jerry Zhao) - d9e3ab3 linter/eslint/no-useless-return: Handle switch case continuation (#23984) (camc314) - 0b25582 ast: Type binding node `typeAnnotation` as `TSTypeAnnotation | null` (#23113) (Boshen) - 122d112 linter/eslint/no-restricted-imports: Flag dynamic import() expressions (#24029) (Boshen) - 59b6b83 linter: Avoid `OnceLock` re-entry on cyclic `export *` re-exports (#23632) (Jerry Zhao) - dd09af0 linter/import/namespace: Avoid panic on destructuring of an unresolvable namespace re-export (#23626) (Jerry Zhao) - bdb51c7 linter/jest/prefer-ending-with-an-expect: Validate config patterns (#24122) (camc314) - e383843 linter/unicorn/prefer-modern-dom-apis: Skip fixer for non identifier arguments (#23630) (Jerry Zhao) - 0ac4c83 linter: Detect circular config extends (#24115) (camc314) - bae1edf linter/import/namespace: Check namespace imports after named imports (#24094) (camc314) - cd8fdfe linter/eslint/no-eval: Recognize Array.from family thisArg (#24091) (camc314) - 851ee43 linter/eslint/no-eval: Resolve this binding for functions returned from an IIFE (#23643) (Jerry Zhao) - 002ab35 linter/unicorn: Avoid prefer-array-find rest destructuring false positive (#23654) (ColemanDunn) - 01c8775 linter/unicorn/filename-case: Keep digits attached in screamingSnakeCase (#24056) (Boshen) - f256941 linter: Recognize `@effect/vitest` as a vitest import source (#24025) (Boshen) - 73eeb1d linter/import/extensions: Honor per-extension `never` for explicit extensions (#24031) (Boshen) - d4ebe1f linter: Reject non-object oxlint config files (#24026) (Boshen) - 45d607d linter/react/forbid-component-props: Make allow/disallow lists optional in schema (#24024) (Boshen) - 54076ad linter/unicorn/no-array-for-each: Suggest entries loop for index callbacks (#24004) (camc314) - d057736 linter/jsdoc: Avoid param root underflow (#23945) (camc314) - 29c76bf linter/unicorn/prefer-at: Skip object numeric-key access (#23909) (Gaurav Dubey) ###### ⚡ Performance - 657a8fc linter/oxc/bad-array-method-on-arguments: Only run on member expressions instead of all identifiers (#24164) (camchenry) - 073d9e7 linter/eslint/prefer-rest-params: Run on functions instead of all identifiers (#24163) (camchenry) - e5a4162 linter/jest/no-confusing-set-timeout: Early exit fast path (#24092) (camc314) - bca7ce5 linter: Only run react-perf rules on JSX attribute nodes (#24083) (camchenry) - 6881bf6 linter: Compute `apply_overrides` rule set lazily (#23648) (Jerry Zhao) - 911c106 linter/eslint/no-obj-calls: Use resolved reference instead of scope walk (# _[Truncated at 4000 characters — full notes: https://github.com/oxc-project/oxc/releases/tag/apps_v1.73.0]_ ### crates_v0.139.0 — oxc crates_v0.139.0 - Date: 2026-07-06 - Version: crates_v0.139.0 - Original notes: https://github.com/oxc-project/oxc/releases/tag/crates_v0.139.0 - Permalink: https://whatsnew.fyi/product/oxc/releases/crates-v0.139.0 - **added** — Include unresolved references in semantic examples - **added** — Fold boolean-literal ternary branches in value contexts in minifier - **added** — Implement `ReplaceWith` on all AST types - **added** — Add `ReplaceWith` trait to allocator - **added** — Add `reserved` option for names that must not be mangled in mangler - **added** — Add `StringExt` trait to data_structures - **added** — Drop side-effect-free IIFEs whose result is unused in minifier - **added** — Add method to widen inherited enum ref to parent ref in AST - **fixed** — Preserve decorated class read bindings in transformer - **fixed** — Declare temp for renamed anonymous class in transformer - **fixed** — Scope anonymous decorated class bindings correctly in transformer - **fixed** — Preserve namespace strict mode flags in transformer - **fixed** — Correct scoping flags for lowered enums in transformer - **fixed** — Clean up semantics for stripped TypeScript syntax in transformer - **fixed** — Compile generic functions instead of over-bailing on type-param hoisting in react_compiler - **fixed** — Align memoization cache-slot allocation with Babel in react_compiler - **fixed** — Drop stray empty statement from catch bindings in react_compiler - **fixed** — Codegen destructuring reassignment targets in react_compiler - **fixed** — Preserve direct eval scope flags in transformer async-to-generator - **fixed** — Keep names of destructured exported bindings in mangler ###### 🚀 Features - 260425f semantic/examples: Include unresolved references (#24214) (camc314) - 2d9b0b3 minifier: Fold boolean-literal ternary branches in value contexts (#24110) (Dunqing) - 61fbf10 ast: Implement `ReplaceWith` on all AST types (#24013) (overlookmotel) - 7db7a29 allocator: Add `ReplaceWith` trait (#24012) (overlookmotel) - 4eb074e mangler: Add `reserved` option for names that must not be mangled (#24041) (Dunqing) - 2e62012 data_structures: Add `StringExt` trait (#24006) (overlookmotel) - 60e7160 minifier: Drop side-effect-free IIFEs whose result is unused (#23967) (Dunqing) - 26dd9e2 ast: Add method to widen inherited enum ref to parent ref (#23961) (overlookmotel) ###### 🐛 Bug Fixes - df62046 transformer: Preserve decorated class read bindings (#24231) (camc314) - ce5f40f transformer: Declare temp for renamed anonymous class (#24230) (camc314) - 09bd638 transformer: Scope anonymous decorated class bindings correctly (#24229) (camc314) - 4b7fa9c transformer: Preserve namespace strict mode flags (#24227) (camc314) - d8ead84 transformer: Correct scoping flags for lowered enums (#24225) (camc314) - e8b50ee transformer: Clean up semantics for stripped TypeScript syntax (#24180) (camc314) - d966d0b react_compiler: Remove clippy allows (#24168) (Boshen) - 854ef8d react_compiler: Compile generic functions instead of over-bailing on type-param hoisting (#24158) (Boshen) - 093586c react_compiler: Align memoization cache-slot allocation with Babel (#24157) (Boshen) - 09c8f59 react_compiler: Normalize snapshot fixture paths (#24142) (camc314) - f13df97 react_compiler: Drop stray empty statement from catch bindings (#24133) (Boshen) - cb2a505 react_compiler: Codegen destructuring reassignment targets (#24131) (Boshen) - b82c394 react_compiler: Propagate codegen invariants instead of emitting empty bodies (#24128) (Boshen) - 5771982 react_compiler: Render unchanged programs as source in fixture snapshots (#24129) (Boshen) - 4b16e1a transformer/async-to-generator: Preserve direct eval scope flags (#24136) (camc314) - 4e9194f react_compiler: Lower `delete obj.prop` to Property/ComputedDelete (#24123) (Boshen) - 0b25582 ast: Type binding node `typeAnnotation` as `TSTypeAnnotation | null` (#23113) (Boshen) - 018c0e5 transformer: Hoist lowered async declarations (#22770) (camc314) - 652fbaf mangler: Keep names of destructured exported bindings (#24036) (Dunqing) - e274415 minifier: Don't drop global calls that throw despite pure arguments (#23917) (Dunqing) - 59abb30 minifier: Only merge string literals in `try_fold_add` when the inner operator is `+` (#23622) (Jerry Zhao) ###### ⚡ Performance - c5ca77b transformer: Avoid cloning refresh options (#24191) (camc314) - bf1a151 react_compiler: Compile out debug printers (#24184) (Boshen) - abb44a0 transformer: Build fixed object-rest arguments (#24190) (camc314) - a4db731 isolated_declarations: Use `ReplaceWith` instead of `TakeIn` (#24016) (overlookmotel) - ff10855 transformer: Use `ReplaceWith` instead of `TakeIn` (#24015) (overlookmotel) - bd49aff ecmascript: Avoid heap-allocating Math.min/max/imul operands (#23941) (Lawrence Lin) - e4b708b react_compiler: Skip compiled files before prefilters (#24171) (Boshen) - c59f2fe rust: Return impl ExactSizeIterator from slice-backed accessors (#24144) (Boshen) - 5d6d04a codegen: SWAR-skip boring byte runs in sourcemap line/column scan (#24023) (Boshen) - a55e0be traverse: Reduce string operations in `get_var_name_from_node` (#24007) (overlookmotel) - e6d48e1 transformer/nullish_coalescing: Move cold path into separate function (#23989) (overlookmotel) - c4e35b5 transformer/object_rest_spread: Pre-allocate capacity in `Vec` (#23988) (overlookmotel) - 527b8e5 transformer/decorators: Narrow type earlier (#23987) (overlookmotel) ###### 📚 Documentation - 1589f54 semantic: Update docs for `Scoping::set_symbol_name` (#24223) (camc314) - 30d17f5 allocator: Clarify docs for `TakeIn::take_in_box` (#24093) (overlookmotel) - 675e6a8 ast _[Truncated at 4000 characters — full notes: https://github.com/oxc-project/oxc/releases/tag/crates_v0.139.0]_