# 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 (``, `