@biomejs/biome@2.5.8

biomejs/biome@biomejs/biome@2.5.8Aug 11, 2026by github-actions[bot]

AI Summary

Introduced linting support for React Compiler and legacy Svelte syntax. The release also adds SCSS nesting support and improves the Markdown parser while fixing CSS validation for custom properties.

Key Highlights

  • Added `useReactCompiler` rule to report diagnostics from React Compiler lint mode.
  • Added `noSvelteLegacyConst` rule to discourage `{@const}` tags.
  • Added support for SCSS nesting combinator syntax.
  • Fixed CSS parsing of registered custom properties via `@property` rules.

New Features

  • Added `useReactCompiler` rule.
  • Added `noSvelteLegacyConst` rule.
  • Added Markdown linter support.
  • Added SCSS nesting combinator support.

Full Release Notes

## 2.5.8

### Patch Changes

- [#10710](https://github.com/biomejs/biome/pull/10710) [`0a0fbc1`](https://github.com/biomejs/biome/commit/0a0fbc15d67c410c80dfae398903f845544fcd65) Thanks [@dyc3](https://github.com/dyc3)! - Added a new nursery rule [`useReactCompiler`](https://biomejs.dev/linter/rules/use-react-compiler/), which reports diagnostics from React Compiler lint mode.

- [#11251](https://github.com/biomejs/biome/pull/11251) [`ea9dd8a`](https://github.com/biomejs/biome/commit/ea9dd8a93e65f849840415e8e26cd668aa1af913) Thanks [@dyc3](https://github.com/dyc3)! - Improved performance of [`noImportCycles`](https://biomejs.dev/linter/rules/no-import-cycles/).

- [#11247](https://github.com/biomejs/biome/pull/11247) [`52b44d6`](https://github.com/biomejs/biome/commit/52b44d6795741d051bf703bd69c6cb447af8fd1d) Thanks [@dyc3](https://github.com/dyc3)! - Added the nursery rule [`noSvelteLegacyConst`](https://biomejs.dev/linter/rules/no-svelte-legacy-const/), which disallows legacy Svelte `{@const}` tags and recommends declaration tags with `$derived()`.

  Invalid:

  ```svelte
  {#each boxes as box}
    {@const area = box.width * box.height}
    <p>{area}</p>
  {/each}
  ```

  Valid:

  ```svelte
  {#each boxes as box}
    {const area = $derived(box.width * box.height)}
    <p>{area}</p>
  {/each}
  ```

- [#11252](https://github.com/biomejs/biome/pull/11252) [`d5f5704`](https://github.com/biomejs/biome/commit/d5f570414fdcdddf62372e35c05f6dababad9287) Thanks [@Turtle-Hwan](https://github.com/Turtle-Hwan)! - Fixed [#11250](https://github.com/biomejs/biome/issues/11250): [`useAwait`](https://biomejs.dev/linter/rules/use-await/) no longer reports async functions that contain an `await using` declaration.

- [#11143](https://github.com/biomejs/biome/pull/11143) [`6be7be1`](https://github.com/biomejs/biome/commit/6be7be1b147d7b4352ff5625a78bd54a48958950) Thanks [@vznh](https://github.com/vznh)! - Fixed [#11017](https://github.com/biomejs/biome/issues/11017): [`noUselessUndefined`](https://biomejs.dev/linter/rules/no-useless-undefined/) no longer reports `return undefined` when the enclosing function has a return type annotation other than `undefined` or `void`.

- [#11234](https://github.com/biomejs/biome/pull/11234) [`caefe39`](https://github.com/biomejs/biome/commit/caefe393c66340914c481f7ccfc82979cf76b61b) Thanks [@subotac](https://github.com/subotac)! - Fixed [#11228](https://github.com/biomejs/biome/issues/11228): CSS block comments between a declaration colon and value now preserve their source indentation.

  ```diff
   :root {
     --font-stack:
  -/* comment */
  +    /* comment */
       system-ui;
   }
  ```

- [#11285](https://github.com/biomejs/biome/pull/11285) [`bca1f73`](https://github.com/biomejs/biome/commit/bca1f73d939423056337bfd0a42cbdcb66bb1e3f) Thanks [@denbezrukov](https://github.com/denbezrukov)! - Fixed [#11280](https://github.com/biomejs/biome/issues/11280): CSS formatting keeps comments inside functional pseudo-classes and pseudo-elements instead of moving them before the function name.

  ```diff
  -:/* comment */ where(div) {}
  +:where(/* comment */ div) {}
  ```

- [#11080](https://github.com/biomejs/biome/pull/11080) [`af16a0b`](https://github.com/biomejs/biome/commit/af16a0bf884c48bad2caab70e7930096e81e1c99) Thanks [@dyc3](https://github.com/dyc3)! - HTML `style` attribute values are now parsed as CSS. All Biome CSS lint rules are applied to the `style` attributes.

- [#11195](https://github.com/biomejs/biome/pull/11195) [`6a85588`](https://github.com/biomejs/biome/commit/6a85588578725195625281984a47c9a8563bf103) Thanks [@dyc3](https://github.com/dyc3)! - Fixed Svelte files failing to parse when an expression begins with an object literal.

  Now the following snippet is correctly parsed:

  ```svelte
  <p>{{ a: true }}</p>
  <div class={{ active: isActive }}></div>
  ```

- [#11173](https://github.com/biomejs/biome/pull/11173) [`481d008`](https://github.com/biomejs/biome/commit/481d008f6e8872a78749496fbbf1f9c761d9a770) Thanks [@Austin1serb](https://github.com/Austin1serb)! - Fixed [#10242](https://github.com/biomejs/biome/issues/10242): JavaScript GritQL patterns with multiple metavariables now match snippets consistently in WebAssembly.

- [#11187](https://github.com/biomejs/biome/pull/11187) [`23c0369`](https://github.com/biomejs/biome/commit/23c0369c43b59284ca68c65883d6ede4228b6fb8) Thanks [@ematipico](https://github.com/ematipico)! - Added the nursery rule [`noInvalidPropertyInitValue`](https://biomejs.dev/linter/rules/no-invalid-property-init-value/), which reports an `@property` whose `initial-value` does not match its `syntax` descriptor. For example, the following declaration triggers the rule because `red` is not a `<length>`:

  ```css
  @property --size {
    syntax: "<length>";
    inherits: false;
    initial-value: red;
  }
  ```

- [#11272](https://github.com/biomejs/biome/pull/11272) [`73896e6`](https://github.com/biomejs/biome/commit/73896e6712ba4c398ba21141829f8361ace45eb2) Thanks [@ematipico](https://github.com/ematipico)! - Improved the diagnostic emitted by [`noRootType`](https://biomejs.dev/linter/rules/no-root-type).

- [#11240](https://github.com/biomejs/biome/pull/11240) [`bd0b68d`](https://github.com/biomejs/biome/commit/bd0b68d418890059930074b46273aa616fbb735a) Thanks [@ematipico](https://github.com/ematipico)! - Fixed [#11223](https://github.com/biomejs/biome/issues/11223): Improved the
  performance of [`noMisusedPromises`](https://biomejs.dev/linter/rules/no-misused-promises/)
  when analyzing async class methods that call other methods through `this`.

- [#11172](https://github.com/biomejs/biome/pull/11172) [`4a0bc5c`](https://github.com/biomejs/biome/commit/4a0bc5c46e6dbbefd17fa133ea426aa41f0a23f8) Thanks [@saberoueslati](https://github.com/saberoueslati)! - Fixed [#10806](https://github.com/biomejs/biome/issues/10806): [`noUselessFragments`](https://biomejs.dev/linter/rules/no-useless-fragments/) no longer causes Biome to panic when its unsafe fix removes a fragment used as a JSX attribute value.

- [#11227](https://github.com/biomejs/biome/pull/11227) [`4d603b0`](https://github.com/biomejs/biome/commit/4d603b072fae45a69bd291ab92f3379232cd34df) Thanks [@saberoueslati](https://github.com/saberoueslati)! - Fixed [#11178](https://github.com/biomejs/biome/issues/11178): [`noUndeclaredVariables`](https://biomejs.dev/linter/rules/no-undeclared-variables/) no longer reports Vue's built-in instance properties, such as `$slots` and `$attrs`, in template expressions or `$event` in inline event-handler expressions. The instance properties are still reported inside `<script setup>`, where they are not defined.

- [#11187](https://github.com/biomejs/biome/pull/11187) [`23c0369`](https://github.com/biomejs/biome/commit/23c0369c43b59284ca68c65883d6ede4228b6fb8) Thanks [@ematipico](https://github.com/ematipico)! - Fixed CSS parsing of registered custom properties: Biome now correctly validates the `syntax` descriptor of `@property` rules.



## What's Changed
* feat(service): treat html style attributes as CSS by @dyc3 in https://github.com/biomejs/biome/pull/11080
* feat: code review skill by @ematipico in https://github.com/biomejs/biome/pull/11235
* refactor(inference): prepare legacy type removal by @ematipico in https://github.com/biomejs/biome/pull/11010
* fix(lint/noUselessFragments): panic when fixing a fragment used as a JSX attribute value by @saberoueslati in https://github.com/biomejs/biome/pull/11172
* ci: update codspeed crates by @ematipico in https://github.com/biomejs/biome/pull/11239
* feat(lint/js): add `useReactCompiler` by @dyc3 in https://github.com/biomejs/biome/pull/10710
* ci: fix windows builds by @dyc3 in https://github.com/biomejs/biome/pull/11245
* ci: enable longpaths in main.yml by @dyc3 in https://github.com/biomejs/biome/pull/11246
* fix(inference): query local types before global by @ematipico in https://github.com/biomejs/biome/pull/11240
* feat(lint/html): add `noSvelteLegacyConst` by @dyc3 in https://github.com/biomejs/biome/pull/11247
* fix(useAwait): treat await using as an async operation by @Turtle-Hwan in https://github.com/biomejs/biome/pull/11252
* feat(css): support SCSS nesting combinator by @denbezrukov in https://github.com/biomejs/biome/pull/11243
* feat: markdown linter by @ematipico in https://github.com/biomejs/biome/pull/11253
* fix(analyzer): scope Vue template globals correctly by @saberoueslati in https://github.com/biomejs/biome/pull/11227
* fix(grit): use byte offsets for WASM snippets by @Austin1serb in https://github.com/biomejs/biome/pull/11173
* fix(lint): preserve explicitly typed undefined returns by @vznh in https://github.com/biomejs/biome/pull/11143
* refactor(md/parse): two-phase parse by @ematipico in https://github.com/biomejs/biome/pull/11256
* perf(noImportCycles): exclude node_modules, add more tests by @dyc3 in https://github.com/biomejs/biome/pull/11251
* fix(css_formatter): preserve block comment indentation by @subotac in https://github.com/biomejs/biome/pull/11234
* chore: markdown rule generator by @Netail in https://github.com/biomejs/biome/pull/11261
* perf(md/parse): restore parser state via checkpoint by @ematipico in https://github.com/biomejs/biome/pull/11257
* chore: markdownlint rule source by @Netail in https://github.com/biomejs/biome/pull/11265
* fix(parse/html): stop reading `{{` as an interpolation in Svelte by @dyc3 in https://github.com/biomejs/biome/pull/11195
* fix(yaml/parse): catch more errors by @ematipico in https://github.com/biomejs/biome/pull/11259
* fix(tools): rule gen and rename rule by @ematipico in https://github.com/biomejs/biome/pull/11269
* fix(tools): path normalisation by @ematipico in https://github.com/biomejs/biome/pull/11271
* test(format/html): format embedded content in the formatter tests by @dyc3 in https://github.com/biomejs/biome/pull/11209
* feat(useSortedClasses): order variants in sort_v4 by @johncarmack1984 in https://github.com/biomejs/biome/pull/11249
* fix(lint/graphql): text range by @ematipico in https://github.com/biomejs/biome/pull/11272
* test(format/html): indent script and style in the HTML Prettier samples by @dyc3 in https://github.com/biomejs/biome/pull/11210
* feat(lint): nursery noInvalidPropertyInitValue by @ematipico in https://github.com/biomejs/biome/pull/11187
* fix(css_formatter): preserve pseudo function comments by @denbezrukov in https://github.com/biomejs/biome/pull/11285
* chore(deps): update rust crate rust-lapper to 1.3.0 by @renovate[bot] in https://github.com/biomejs/biome/pull/11292
* chore(deps): update pnpm to v11.20.0 by @renovate[bot] in https://github.com/biomejs/biome/pull/11291
* feat: useTopLevelHeading by @Netail in https://github.com/biomejs/biome/pull/11286
* ci: release by @github-actions[bot] in https://github.com/biomejs/biome/pull/11236

## New Contributors
* @Turtle-Hwan made their first contribution in https://github.com/biomejs/biome/pull/11252
* @Austin1serb made their first contribution in https://github.com/biomejs/biome/pull/11173
* @vznh made their first contribution in https://github.com/biomejs/biome/pull/11143

**Full Changelog**: https://github.com/biomejs/biome/compare/@biomejs/biome@2.5.7...@biomejs/biome@2.5.8