@biomejs/biome@2.5.3

gildas-lormeau/SingleFile@biomejs/biome@2.5.3Jul 8, 2026by github-actions[bot]

AI Summary

This is a patch release that addresses various bug fixes and performance improvements. Notable updates include fixes for parser panics in CSS Modules, Svelte store subscription handling, and Vue directive validation, alongside enhancements to Markdown and YAML formatting capabilities.

Key Highlights

  • Fixed parser crashes when encountering unsupported CSS Modules `@value` rules or scoped `@keyframes` at EOF.
  • Resolved false positives for Svelte store subscriptions (`$store`) and `$bindable()` props in the `noUnusedVariables` rule.
  • Enhanced the `noUnsafeOptionalChaining` rule to detect unsafe chains wrapped in TypeScript `as`, `satisfies`, and instantiation expressions.
  • Fixed a deadlock issue in the Biome Language Server when the scanner was enabled.

New Features

  • Added support for sequence mapping in YAML formatting.
  • Improved Markdown formatting compatibility with quotes, thematic breaks, and link definitions.
  • Optimized Markdown parsing to reduce emitted nodes and fold code content lines.
  • Improved embedded range plumbing for general performance.

Full Release Notes

## 2.5.3

### Patch Changes

- [#10815](https://github.com/biomejs/biome/pull/10815) [`86613d5`](https://github.com/biomejs/biome/commit/86613d5b01eb965b460ccefbf27f168d87774aaf) Thanks [@WaterWhisperer](https://github.com/WaterWhisperer)! - Fixed a parser panic reported in [#10708](https://github.com/biomejs/biome/issues/10708): Biome now recovers when unsupported CSS Modules `@value` rules or scoped `@keyframes` names end at EOF.

- [#10534](https://github.com/biomejs/biome/pull/10534) [`da9b403`](https://github.com/biomejs/biome/commit/da9b403b6bbacc8d75d56e327a46f4ed0285913e) Thanks [@Mokto](https://github.com/Mokto)! - Fixed [`noUnusedVariables`](https://biomejs.dev/linter/rules/no-unused-variables/) false positives in Svelte files: Svelte store subscriptions (`$store` references in templates now keep the underlying `store` binding from being flagged), and `$bindable()` props that are only written to in the script block (write-only is intentional for bindable props) are no longer reported as unused.

- [#10827](https://github.com/biomejs/biome/pull/10827) [`098ba41`](https://github.com/biomejs/biome/commit/098ba41c99e6efaac8eb182eec258a567bb00123) Thanks [@Aqu1bp](https://github.com/Aqu1bp)! - Fixed [#10698](https://github.com/biomejs/biome/issues/10698): The [`noUnsafeOptionalChaining`](https://biomejs.dev/linter/rules/no-unsafe-optional-chaining/) rule now reports unsafe optional chains wrapped in TypeScript `as`, `satisfies`, type assertion, and instantiation expressions, such as `new (value?.constructor as Constructor)()`.

- [#10773](https://github.com/biomejs/biome/pull/10773) [`3c6513d`](https://github.com/biomejs/biome/commit/3c6513d4e9a82a195785144caa9d96093c3861ff) Thanks [@otkrickey](https://github.com/otkrickey)! - Fixed [#10772](https://github.com/biomejs/biome/issues/10772): [`useVueValidVOn`](https://biomejs.dev/linter/rules/use-vue-valid-v-on/) no longer reports a missing handler for v-on directives using a verb modifier (`.stop` / `.prevent`) without an expression, e.g. `<div @click.stop></div>`. The rule also accepts the arg-less object syntax `<div v-on="$listeners"></div>` instead of reporting a missing event name.

- [#10721](https://github.com/biomejs/biome/pull/10721) [`d83c66b`](https://github.com/biomejs/biome/commit/d83c66b39a820703d94100f8a6502cc6dbad26a1) Thanks [@minseong0324](https://github.com/minseong0324)! - Improved type-aware lint rule inference for built-in globals and indexed function calls. Biome now resolves `Error(...)`, `new Error(...)`, optional `Error#stack`, and calls through indexed function values such as `handlers[0]()` more accurately.

- [#10865](https://github.com/biomejs/biome/pull/10865) [`6450276`](https://github.com/biomejs/biome/commit/6450276764ee4794a0fcb46c139f95b68d892427) Thanks [@ematipico](https://github.com/ematipico)! - Fixed [#10845](https://github.com/biomejs/biome/issues/10845). Biome Language Server no longer goes in deadlock when the scanner is enabled.

- [#10853](https://github.com/biomejs/biome/pull/10853) [`93d8e53`](https://github.com/biomejs/biome/commit/93d8e5352454bccfbd179db03b3155776599c52c) Thanks [@Netail](https://github.com/Netail)! - Fixed [#10840](https://github.com/biomejs/biome/issues/10840): Astro shorthand attribute syntax is now correctly being parsed from embedded nodes.

- [#10820](https://github.com/biomejs/biome/pull/10820) [`bba3092`](https://github.com/biomejs/biome/commit/bba30920715920142e933939f6270feedca933a5) Thanks [@JamBalaya56562](https://github.com/JamBalaya56562)! - Fixed [#10619](https://github.com/biomejs/biome/issues/10619): [`noProcessEnv`](https://biomejs.dev/linter/rules/no-process-env/) now also reports computed (bracket) member access. Previously only dot access was checked, so `process["env"]` and `env["NODE_ENV"]` (where `env` is imported from `node:process`) were missed. Both static and computed accesses are now reported.

- [#10835](https://github.com/biomejs/biome/pull/10835) [`3447b2f`](https://github.com/biomejs/biome/commit/3447b2f5a3c430efc8e917514260af5341c5509d) Thanks [@dyc3](https://github.com/dyc3)! - Fixed [#10824](https://github.com/biomejs/biome/issues/10824): [`useDomQuerySelector`](https://biomejs.dev/linter/rules/use-dom-query-selector/) now supports an `ignore` option for receiver identifiers that should not be reported.

- [#10875](https://github.com/biomejs/biome/pull/10875) [`b12e486`](https://github.com/biomejs/biome/commit/b12e486d0f0b80d02d2208e239190f8756d39d48) Thanks [@dyc3](https://github.com/dyc3)! - Fixed [#10795](https://github.com/biomejs/biome/issues/10795): `--profile-rules` now reports timings for each plugin separately as `plugin/<pluginName>`, matching the naming used by plugin suppressions, instead of aggregating all plugins under a single `plugin/plugin` entry.

- [#10877](https://github.com/biomejs/biome/pull/10877) [`d6bc447`](https://github.com/biomejs/biome/commit/d6bc4473a210758ee49f6cad41bc69587a7cf125) Thanks [@ematipico](https://github.com/ematipico)! - Fixed [biome-zed#164](https://github.com/biomejs/biome-zed/issues/164): Biome no longer inserts stray whitespace when format-on-type runs after closing delimiters such as `)`, `]`, and `}`.

- [#10867](https://github.com/biomejs/biome/pull/10867) [`a21463e`](https://github.com/biomejs/biome/commit/a21463e5f616a2db5035b470cd206ac9da4d9423) Thanks [@dyc3](https://github.com/dyc3)! - Fixed [#10864](https://github.com/biomejs/biome/issues/10864): Biome no longer crashes when checking or linting HTML files with unquoted attribute values such as `<textarea rows=4></textarea>`.



## What's Changed
* fix(useVueValidVOn): allow verb-modifier-only handlers and object syntax by @otkrickey in https://github.com/biomejs/biome/pull/10773
* fix(css_parser): recover CSS Modules syntax at EOF by @WaterWhisperer in https://github.com/biomejs/biome/pull/10815
* feat(fmt/yaml): sequence mapping by @ematipico in https://github.com/biomejs/biome/pull/10814
* fix(lint): handle TypeScript wrappers in unsafe optional chains by @Aqu1bp in https://github.com/biomejs/biome/pull/10827
* fix(lint): report computed member access in noProcessEnv by @JamBalaya56562 in https://github.com/biomejs/biome/pull/10820
* ci: ignore quick-xml RustSec advisories by @JamBalaya56562 in https://github.com/biomejs/biome/pull/10831
* perf(core): embedded ranges plumbing by @ematipico in https://github.com/biomejs/biome/pull/10836
* feat(md/fmt): more compatibility gains by @ematipico in https://github.com/biomejs/biome/pull/10833
* chore(xtask): migrate Error global type by @minseong0324 in https://github.com/biomejs/biome/pull/10721
* fix(lint): suppress false positives in noUnusedVariables for Svelte store subscriptions and $bindable() props by @Mokto in https://github.com/biomejs/biome/pull/10534
* refactor(md/parse): reduce emitted nodes by @ematipico in https://github.com/biomejs/biome/pull/10847
* feat(md/fmt): quotes, thematic breaks and link definition by @ematipico in https://github.com/biomejs/biome/pull/10844
* refactor(md/parse): parse HTML into one single node by @ematipico in https://github.com/biomejs/biome/pull/10848
* docs(noMissingVarFunction): list container-name in ignored properties by @dfedoryshchev in https://github.com/biomejs/biome/pull/10852
* refactor(md/parse): fold code content lines and indentation runs by @ematipico in https://github.com/biomejs/biome/pull/10851
* fix: astro shorthand syntax embedded nodes by @Netail in https://github.com/biomejs/biome/pull/10853
* chore(xtask): migrate disposable global types by @minseong0324 in https://github.com/biomejs/biome/pull/10841
* test(cli): anchor temp-dir snapshot redaction to path boundaries by @JamBalaya56562 in https://github.com/biomejs/biome/pull/10832
* chore(deps): update github-actions by @renovate[bot] in https://github.com/biomejs/biome/pull/10856
* chore(deps): update pnpm to v11.9.0 by @renovate[bot] in https://github.com/biomejs/biome/pull/10860
* ci: ignore Bot PRs in AgentScan workflow by @siketyan in https://github.com/biomejs/biome/pull/10862
* fix(workspace): deadlock on salsa setters  by @ematipico in https://github.com/biomejs/biome/pull/10865
* ci: update macos runner by @ematipico in https://github.com/biomejs/biome/pull/10866
* feat(useDomQuerySelector): add ignore option by @dyc3 in https://github.com/biomejs/biome/pull/10835
* fix(css_parser): gate SCSS syntax in CSS by @denbezrukov in https://github.com/biomejs/biome/pull/10456
* fix(html): fix inner_string_text for unquoted attribute values by @dyc3 in https://github.com/biomejs/biome/pull/10867
* chore(deps): update rust to v1.96.1 by @renovate[bot] in https://github.com/biomejs/biome/pull/10859
* ci: update crossbeam-epoch to fix advisory by @ematipico in https://github.com/biomejs/biome/pull/10874
* feat(md/fmt): bullet list spacing by @ematipico in https://github.com/biomejs/biome/pull/10854
* docs(useSortedClasses): remove outdated notes about unsupported features by @johncarmack1984 in https://github.com/biomejs/biome/pull/10872
* feat(plugins): show plugin names in --profile-rules output by @dyc3 in https://github.com/biomejs/biome/pull/10875
* chore(markdown): update prettier and test fixtures for markdown by @tidefield in https://github.com/biomejs/biome/pull/10882
* fix(lsp): guard format on type using the right characters by @ematipico in https://github.com/biomejs/biome/pull/10877
* ci: release by @github-actions[bot] in https://github.com/biomejs/biome/pull/10817

## New Contributors
* @johncarmack1984 made their first contribution in https://github.com/biomejs/biome/pull/10872

**Full Changelog**: https://github.com/biomejs/biome/compare/@biomejs/biome@2.5.2...@biomejs/biome@2.5.3