# Biome changelog > One toolchain for web projects — a formatter and linter for JavaScript, TypeScript, JSX, CSS and JSON. - Vendor: Biome - Category: Developer Tools - Official site: https://biomejs.dev - Tracked by: What's New (https://whatsnew.fyi/product/biome) - Harvested from: GitHub (biomejs/biome) - Entries below: 25 (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. ## Releases ### 2.5.6 — Biome CLI v2.5.6 - Date: 2026-07-28 - Version: 2.5.6 - Original notes: https://github.com/biomejs/biome/releases/tag/%40biomejs/biome%402.5.6 - Permalink: https://whatsnew.fyi/product/biome/releases/2.5.6 - **fixed** — Fixed a performance regression in noMisusedPromises that caused type inference to run repeatedly while linting a file - **fixed** — Fixed CSS formatting for multiline function arguments preceded by comments - **fixed** — Fixed useHookAtTopLevel to no longer report hooks in named forwardRef components that receive a ref parameter - **fixed** — Fixed parsing of curried arrow functions in ternary consequents when the inner arrow's parameters use a destructuring pattern - **fixed** — Fixed noUselessTernary quick fix to preserve operator spacing when simplifying or inverting boolean ternary expressions - **fixed** — Fixed biome check --write to be idempotent on Svelte files where multi-line template literals in script blocks and block comments in style blocks were gaining extra indent levels on every run - **fixed** — Fixed HTML formatter duplicating comments placed directly before Svelte {@const ...} or {@debug ...} blocks - **fixed** — Fixed Svelte {#each} array destructuring to no longer include spaces inside square brackets, and fixed multiline bind function expressions to indent their getter, setter, and function body correctly - **changed** — Improved accuracy of type-aware lint rules by resolving more inferred types, including floating Promises returned by aliased callbacks and arrays of Promises created by async mapping callbacks - **fixed** — Fixed false positives in noMisleadingReturnType when generic-constraint, normalization, substitution, or structural return-type comparison cannot complete - **changed** — HTML parser now accepts mixed-case doctype declarations - **changed** — The rdjson reporter now populates the severity field of each diagnostic (ERROR, WARNING, or INFO) ##### 2.5.6 ###### Patch Changes - [#11035](https://github.com/biomejs/biome/pull/11035) [`0e4b03b`](https://github.com/biomejs/biome/commit/0e4b03be71b32120c6326e58e046260bcf5d3231) Thanks [@ematipico](https://github.com/ematipico)! - Fixed a performance regression in [`noMisusedPromises`](https://biomejs.dev/linter/rules/no-misused-promises/) that caused type inference to run repeatedly while linting a file. - [#11043](https://github.com/biomejs/biome/pull/11043) [`22ec076`](https://github.com/biomejs/biome/commit/22ec076462d4590ea7c95f7693b69040c32a38aa) Thanks [@denbezrukov](https://github.com/denbezrukov)! - Fixed CSS formatting for multiline function arguments preceded by comments: ```diff .example { value: outer( 1, /* comment */ nested( - first, - second - ) + first, + second + ) ); } ``` - [#11007](https://github.com/biomejs/biome/pull/11007) [`c9acb25`](https://github.com/biomejs/biome/commit/c9acb25acbce7a6f632b5041ec546a604aea4343) Thanks [@BTF-Kabir-2020](https://github.com/BTF-Kabir-2020)! - Fixed [#9195](https://github.com/biomejs/biome/issues/9195): [`useHookAtTopLevel`](https://biomejs.dev/linter/rules/use-hook-at-top-level/) no longer reports hooks in named `forwardRef` components that receive a `ref` parameter. - [#10152](https://github.com/biomejs/biome/pull/10152) [`50a9bd8`](https://github.com/biomejs/biome/commit/50a9bd84df852de305e94a91fb57f6b3b1378187) Thanks [@Zelys-DFKH](https://github.com/Zelys-DFKH)! - Fixed [#10131](https://github.com/biomejs/biome/issues/10131): Biome now correctly parses curried arrow functions in ternary consequents when the inner arrow's parameters use a destructuring pattern, e.g. `cond ? (x) => ({ a, b }) => body : alt`. - [#11105](https://github.com/biomejs/biome/pull/11105) [`8ffe2b9`](https://github.com/biomejs/biome/commit/8ffe2b9f2f9224921a0bad4a772e6611006351e5) Thanks [@dadavidtseng](https://github.com/dadavidtseng)! - Fixed [#11092](https://github.com/biomejs/biome/issues/11092): The [`noUselessTernary`](https://biomejs.dev/linter/rules/no-useless-ternary/) quick fix now preserves operator spacing when simplifying or inverting boolean ternary expressions. - [#10533](https://github.com/biomejs/biome/pull/10533) [`5809875`](https://github.com/biomejs/biome/commit/580987506a32cdde2f5498e0f712e3493ef9adde) Thanks [@Mokto](https://github.com/Mokto)! - Fixed [#10515](https://github.com/biomejs/biome/issues/10515): `biome check --write` was not idempotent on Svelte files — multi-line template literals in ` ``` - [#10752](https://github.com/biomejs/biome/pull/10752) [`f62fb8b`](https://github.com/biomejs/biome/commit/f62fb8b53092fe85e16f9d4ea0e584fee7031ab5) Thanks [@ematipico](https://github.com/ematipico)! - Fixed [#10739](https://github.com/biomejs/biome/issues/10739). Now the rule [`useValidAutocomplete`](https://biomejs.dev/linter/rules/use-valid-autocomplete/) correctly flags the `autoComplete` attribute. - [#10796](https://github.com/biomejs/biome/pull/10796) [`f1b3ab2`](https://github.com/biomejs/biome/commit/f1b3ab2c09522a52c93f669ce679675237b96813) Thanks [@ematipico](https://github.com/ematipico)! - Fixed [#10768](https://github.com/biomejs/biome/issues/10768). Improved the performance of the Biome Language Server by cancelling certain in-flight operations when there are fast updates. - [#10719](https://github.com/biomejs/biome/pull/10719) [`aa649b5`](https://github.com/biomejs/biome/commit/aa649b586a2221bf058af7ce80af6faa11faf846) Thanks [@minseong0324](https://github.com/minseong0324)! - Fixed [`noMisleadingReturnType`](https://biomejs.dev/linter/rules/no-misleading-return-type/) false positive on returns that use a widening type assertion: `"a" as string` is no longer reported as misleading. The rule now also reports a literal-pinning assertion such as `false as false`, matching the existing `as const` behavior. ```ts // No longer flagged (returns are `string`): function getValue(b: boolean): string { if (b) return "a" as string; return "b" as string; } // Now also reported, like `as const` (returns `false`): function isReady(): boolean { return false as false; } ``` - [#10678](https://github.com/biomejs/biome/pull/10678) [`8f073a7`](https://github.com/biomejs/biome/commit/8f073a7cd72b4cf46c2ebf2bc08f4068fc4b5e34) Thanks [@PranavAchar01](https://github.com/PranavAchar01)! - Fixed [#7718](https://github.com/biomejs/biome/issues/7718): Biome now correctly parses CSS nesting selectors when `&` appears as a trailing sub-selector after a type selector, e.g. `h1& { color: red; }`. - [#10756](https://github.com/biomejs/biome/pull/10756) [`5ec965a`](https://github.com/biomejs/biome/commit/5ec965a2620dec7cb40aa4946ba1d41408b11fd9) Thanks [@denbezrukov](https://github.com/denbezrukov)! - Fixed CSS formatter output for selector lists with `allowWrongLineComments` and `//` comments after a selector comma. Bi _[Truncated at 4000 characters — full notes: https://github.com/biomejs/biome/releases/tag/%40biomejs/biome%402.5.2]_ ### 2.5.1 — Biome CLI v2.5.1 - Date: 2026-06-23 - Version: 2.5.1 - Original notes: https://github.com/biomejs/biome/releases/tag/%40biomejs/biome%402.5.1 - Permalink: https://whatsnew.fyi/product/biome/releases/2.5.1 - **fixed** — Fixed CSS formatter output for comments between import media queries - **fixed** — Fixed json and json-pretty reporters to escape backslashes in diagnostic location paths - **fixed** — Fixed biome migrate to no longer emit invalid trailing comma when a renamed rule is the last member of its rule group - **fixed** — Fixed false positive in noUnusedVariables for Svelte files where variables referenced inside {@html expr} blocks were incorrectly reported as unused - **changed** — Updated biome init command to include more up-to-date URL to the first-party extensions page - **fixed** — Fixed useErrorCause rule to correctly detect shorthand properties - **fixed** — Improved how the Biome Language Server loads multiple configuration files inside a workspace - **fixed** — Fixed Biome plugins to be properly filtered when using --only and --skip flags - **fixed** — Fixed useInlineScriptId rule to correctly trim trivia to detect if an id attribute has been set - **changed** — Disabled Go-to definition editor feature by default due to memory leak issues - **fixed** — Fixed Biome to throw an error when the field level is missing from a rule option - **changed** — Improved the diagnostic and documentation of useFlatMap rule - **changed** — Improved DX of the JSON schema when used by code editors like VSCode - **fixed** — Fixed Biome Daemon to correctly shut down when the editor is closed during an in-progress operation ##### 2.5.1 ###### Patch Changes - [#10722](https://github.com/biomejs/biome/pull/10722) [`f8a303d`](https://github.com/biomejs/biome/commit/f8a303d08b6b22f56edb8ff5e7caa665532d613a) Thanks [@denbezrukov](https://github.com/denbezrukov)! - Fixed CSS formatter output for comments between import media queries. ```diff -@import url("print.css") print, -/* comment */ -screen; +@import url("print.css") print, /* comment */ screen; ``` - [#10738](https://github.com/biomejs/biome/pull/10738) [`9fdc560`](https://github.com/biomejs/biome/commit/9fdc5600997ef59ca7ed55ac212473de9bdb0b2a) Thanks [@JamBalaya56562](https://github.com/JamBalaya56562)! - Fixed [#9899](https://github.com/biomejs/biome/issues/9899): the `json` and `json-pretty` reporters now escape backslashes in a diagnostic's `location.path`. Previously, paths containing backslashes (such as Windows-style paths) were emitted unescaped, producing invalid JSON. ```diff - "path": "src\account\setup-passkey.tsx", + "path": "src\\account\\setup-passkey.tsx", ``` - [#10626](https://github.com/biomejs/biome/pull/10626) [`5f837df`](https://github.com/biomejs/biome/commit/5f837df033afc34d43b398aeddc06c1d4fa491d9) Thanks [@tom-groves](https://github.com/tom-groves)! - Fixed [#10625](https://github.com/biomejs/biome/issues/10625): `biome migrate` no longer emits an invalid trailing comma when a renamed rule (such as `noConsoleLog` → `noConsole`) is the last member of its rule group. Previously this produced malformed output that aborted the migration of a strict-JSON `biome.json` with a parsing error. - [#10535](https://github.com/biomejs/biome/pull/10535) [`c245f9d`](https://github.com/biomejs/biome/commit/c245f9d9e239471d5437cd08f9cfa4601a85abd5) Thanks [@Mokto](https://github.com/Mokto)! - Fixed a false positive in [`noUnusedVariables`](https://biomejs.dev/linter/rules/no-unused-variables/) for Svelte files where variables referenced inside `{@html expr}` blocks were incorrectly reported as unused. - [#10668](https://github.com/biomejs/biome/pull/10668) [`a0f197e`](https://github.com/biomejs/biome/commit/a0f197eb1a6974539927f105ff1dde1f51d07d74) Thanks [@Netail](https://github.com/Netail)! - The `biome init` command has been updated to include a more up-to-date URL to [the first-party extensions page](https://biomejs.dev/editors/first-party-extensions/). - [#10667](https://github.com/biomejs/biome/pull/10667) [`d8c3e87`](https://github.com/biomejs/biome/commit/d8c3e878d53515c02bd6c5cb899b2eaec046c542) Thanks [@Netail](https://github.com/Netail)! - Fixed [#10664](https://github.com/biomejs/biome/issues/10664): [useErrorCause](https://biomejs.dev/linter/rules/use-error-cause/) now correctly detects a shorthand property. - [#10696](https://github.com/biomejs/biome/pull/10696) [`ef2373f`](https://github.com/biomejs/biome/commit/ef2373f29be15673705884d345c9af189e30b581) Thanks [@ematipico](https://github.com/ematipico)! - Fixed [#9566](https://github.com/biomejs/biome/issues/9566). Improved how the Biome Language Server loads multiple configuration files inside a workspace. - [#10705](https://github.com/biomejs/biome/pull/10705) [`4ccb410`](https://github.com/biomejs/biome/commit/4ccb410dc00a6fb243934dad2e8681a9d5d9529e) Thanks [@ematipico](https://github.com/ematipico)! - Fixed [#10652](https://github.com/biomejs/biome/issues/10652). Biome plugins are now properly filtered when using `--only` and `--skip` flags. - [#10669](https://github.com/biomejs/biome/pull/10669) [`aa0a6eb`](https://github.com/biomejs/biome/commit/aa0a6eb8007493961cd578f04201248c15fd809a) Thanks [@Netail](https://github.com/Netail)! - Fixed [#10651](https://github.com/biomejs/biome/issues/10651): [useInlineScriptId](https://biomejs.dev/linter/rules/use-inline-script-id/) now correctly trims trivia to detect if an id attribute has been set. - [#10689](https://github.com/biomejs/biome/pull/10689) [`844b1be`](https://github.com/biomejs/biome/commit/844b1be60ded28bf4c650d85806919ceb _[Truncated at 4000 characters — full notes: https://github.com/biomejs/biome/releases/tag/%40biomejs/biome%402.5.1]_ ### 2.5.0 — Biome CLI v2.5.0 - Date: 2026-06-12 - Version: 2.5.0 - Original notes: https://github.com/biomejs/biome/releases/tag/%40biomejs/biome%402.5.0 - Permalink: https://whatsnew.fyi/product/biome/releases/2.5.0 - **added** — Added a new `concise` reporter that prints diagnostics in a compact manner when passed to `format`, `lint`, `check`, and `ci` commands - **added** — Added `useKeyWithClickEvents` a11y lint rule for HTML files to enforce keyboard accessibility alongside click handlers - **added** — Added `noUndeclaredClasses` nursery lint rule for HTML, JSX, and SFC files to detect CSS class names used but not defined - **added** — Added `noUnusedClasses` nursery lint rule for CSS to detect class selectors never referenced in importing HTML or JSX files - **added** — Added `biome upgrade` command for standalone installations to upgrade Homebrew installs and manually installed binaries - **added** — Added HTML version of `useHeadingContent` rule to enforce that heading elements have accessible content in HTML, Vue, Svelte, and Astro files - **added** — Added HTML version of `useKeyWithMouseEvents` rule to enforce that `onmouseover` is accompanied by `onfocus` and `onmouseout` by `onblur` in HTML, Vue, Svelte, and Astro files - **added** — Added `useSortedTypeFields` assist action to sort GraphQL object type, interface type, and input object type fields alphabetically ##### 2.5.0 ###### Minor Changes - [#9539](https://github.com/biomejs/biome/pull/9539) [`f0615fd`](https://github.com/biomejs/biome/commit/f0615fdae80fa7257fc1d0448d2027cb1acff46e) Thanks [@ematipico](https://github.com/ematipico)! - Added a new reporter called `concise`. When `--reporter=concise` is passed the commands `format`, `lint`, `check` and `ci`, the diagnostics are printed in a compact manner: ``` ! index.ts:2:10: lint/correctness/noUnusedImports: Several of these imports are unused. ! main.ts:9:7: lint/correctness/noUnusedVariables: This variable f is unused. × index.ts:8:5: lint/suspicious/noImplicitAnyLet: This variable implicitly has the any type. × main.ts:2:10: lint/suspicious/noRedeclare: Shouldn't redeclare 'z'. Consider to delete it or rename it. ``` - [#9495](https://github.com/biomejs/biome/pull/9495) [`2056b23`](https://github.com/biomejs/biome/commit/2056b23812a17f9c9a9015e5b725faecb04647b5) Thanks [@aviraldua93](https://github.com/aviraldua93)! - Added the [`useKeyWithClickEvents`](https://biomejs.dev/linter/rules/use-key-with-click-events/) a11y lint rule for HTML files (`.html`, `.vue`, `.svelte`, `.astro`). This is a port of the existing JSX rule. The rule enforces that elements with an `onclick` handler also have at least one keyboard event handler (`onkeydown`, `onkeyup`, or `onkeypress`) to ensure keyboard accessibility. Inherently keyboard-accessible elements (``, `