Impact Score: 5/10
Biome CLI v2.2.3
Source available โ automated, not human-reviewed
Component: @biomejs/biome ยท Channel: stable. Automated analysis, not a compatibility certification. How this works.
Analysis updated: 2026-11-01.
โก Executive Summary (TL;DR)
Biome @biomejs/[email protected]. Source highlight: Fixed #7340: The linter now allows the `navigation` property for view-transition in CSS.
Who Does This Impact? (Role-Based Analysis)
๐ป Software Engineers & Devs
Check the source notes against the package and APIs you use before upgrading.
๐ Product & Engineering Leads
Use the documented changes to assess relevance to your product; release frequency alone is not a quality measure.
โ๏ธ DevOps & Security
Verify the target version, runtime requirements and rollback procedure in the official documentation.
โจ New Features & Capabilities (6)
- Added the new nursery rule `noUselessCatchBinding`. This rule disallows unnecessary catch bindings.
- feat(biome-js-analyzer): adds class member analyzer to extract mutated properties in a class
- feat: execute JS plugin in the Boa engine
- feat(biome_js_analyze): add `noUselessCatchBinding`
- feat(parser): support dynamic import defer and import source expr
- feat(lint/vue): implement `useVueMultiWordComponentNames`
๐ง Bug Fixes & Patches (6)
- Fixed #7340: The linter now allows the `navigation` property for view-transition in CSS.
- Fixed #7268: Files that are explicitly passed as CLI arguments are now correctly ignored if they reside in an ignored folder.
- Fixed #7085, now the rule `noDescendingSpecificity` correctly calculates the specificity of selectors when they are included inside a media query.
- Fixed #7381, now the `useOptionalChain` rule recognizes optional chaining using Yoda expressions (e.g., `undefined !== foo && foo.bar`).
- Fixed #7289. The rule `useImportType` now inlines `import type` into `import { type }` when the `style` option is set to `inlineType`.
- Fixed #7261: two characters `ใป` (KATAKANA MIDDLE DOT, U+30FB) and `๏ฝฅ` (HALFWIDTH KATAKANA MIDDLE DOT, U+FF65) are no longer considered as valid characters in identifiers. Property keys containing these character(s) are now preserved as string literals.
๐ View Raw Release Notes (Original Developer Log)
## 2.2.3
### Patch Changes
- [#7353](https://github.com/biomejs/biome/pull/7353) [`4d2b719`](https://github.com/biomejs/biome/commit/4d2b7190f855a88bdae467a2efc00b81721bee62) Thanks [@JeetuSuthar](https://github.com/JeetuSuthar)! - Fixed [#7340](https://github.com/biomejs/biome/issues/7340): The linter now allows the `navigation` property for view-transition in CSS.
Previously, the linter incorrectly flagged `navigation: auto` as an unknown property. This fix adds `navigation` to the list of known CSS properties, following the [CSS View Transitions spec](https://www.w3.org/TR/css-view-transitions-2/#view-transition-navigation-descriptor).
- [#7275](https://github.com/biomejs/biome/pull/7275) [`560de1b`](https://github.com/biomejs/biome/commit/560de1bf3f22f4a8a5cdc224256a34dbb9d78481) Thanks [@arendjr](https://github.com/arendjr)! - Fixed [#7268](https://github.com/biomejs/biome/issues/7268): Files that are explicitly passed as CLI arguments are now correctly ignored if they reside in an ignored folder.
- [#7358](https://github.com/biomejs/biome/pull/7358) [`963a246`](https://github.com/biomejs/biome/commit/963a24643cbf4d91cca81569b33a8b7e21b4dd0b) Thanks [@ematipico](https://github.com/ematipico)! - Fixed [#7085](https://github.com/biomejs/biome/issues/7085), now the rule `noDescendingSpecificity` correctly calculates the specificity of selectors when they are included inside a media query.
- [#7387](https://github.com/biomejs/biome/pull/7387) [`923674d`](https://github.com/biomejs/biome/commit/923674dbf8cc4c23ab569cd00ae0a0cf2a3ab791) Thanks [@qraqras](https://github.com/qraqras)! - Fixed [#7381](https://github.com/biomejs/biome/issues/7381), now the [`useOptionalChain`](https://biomejs.dev/ja/linter/rules/use-optional-chain/) rule recognizes optional chaining using Yoda expressions (e.g., `undefined !== foo && foo.bar`).
- [#7316](https://github.com/biomejs/biome/pull/7316) [`f9636d5`](https://github.com/biomejs/biome/commit/f9636d5de1e8aef742d145a886f05a4cd79eca31) Thanks [@Conaclos](https://github.com/Conaclos)! - Fixed [#7289](https://github.com/biomejs/biome/issues/7289). The rule [`useImportType`](https://biomejs.dev/linter/rules/use-import-type/) now inlines `import type` into `import { type }` when the `style` option is set to `inlineType`.
Example:
```ts
import type { T } from "mod";
// becomes
import { type T } from "mod";
```
- [#7350](https://github.com/biomejs/biome/pull/7350) [`bb4d407`](https://github.com/biomejs/biome/commit/bb4d407747dd29df78776f143ad63657f869be11) Thanks [@siketyan](https://github.com/siketyan)! - Fixed [#7261](https://github.com/biomejs/biome/issues/7261): two characters `ใป` (KATAKANA MIDDLE DOT, U+30FB) and `๏ฝฅ` (HALFWIDTH KATAKANA MIDDLE DOT, U+FF65) are no longer considered as valid characters in identifiers. Property keys containing these character(s) are now preserved as string literals.
- [#7377](https://github.com/biomejs/biome/pull/7377) [`811f47b`](https://github.com/biomejs/biome/commit/811f47b35163e70dce106f62d0aea4ef9e6b91bb) Thanks [@ematipico](https://github.com/ematipico)! - Fixed a bug where the Biome Language Server didn't correctly compute the diagnostics of a monorepo setting, caused by an incorrect handling of the project status.
- [#7245](https://github.com/biomejs/biome/pull/7245) [`fad34b9`](https://github.com/biomejs/biome/commit/fad34b9db9778fe964ff7dbc489de0bfad2d3ece) Thanks [@kedevked](https://github.com/kedevked)! - Added the new lint rule `useConsistentArrowReturn`.
This rule enforces a consistent return style for arrow functions.
### Invalid
```js
const f = () => {
return 1;
};
```
This rule is a port of ESLint's [arrow-body-style](https://eslint.org/docs/latest/rules/arrow-body-style) rule.
- [#7370](https://github.com/biomejs/biome/pull/7370) [`e8032dd`](https://github.com/biomejs/biome/commit/e8032ddfdd734a1441335d82b49db478248e6992) Thanks [@fireairforce](https://github.com/fireairforce)! - Support dynamic `import defer` and `import source`. The syntax looks like:
```ts
import.source("foo");
import.source("x", { with: { attr: "val" } });
import.defer("foo");
import.defer("x", { with: { attr: "val" } });
```
- [#7369](https://github.com/biomejs/biome/pull/7369) [`b1f8cbd`](https://github.com/biomejs/biome/commit/b1f8cbd88619deb269b2028eb0578657987848c5) Thanks [@siketyan](https://github.com/siketyan)! - Range suppressions are now supported for Grit plugins.
For JavaScript, you can suppress a plugin as follows:
```js
// biome-ignore-start lint/plugin/preferObjectSpread: reason
Object.assign({ foo: "bar" }, baz);
// biome-ignore-end lint/plugin/preferObjectSpread: reason
```
For CSS, you can suppress a plugin as follows:
```css
body {
/* biome-ignore-start lint/plugin/useLowercaseColors: reason */
color: #fff;
/* biome-ignore-end lint/plugin/useLowercaseColors: reason */
}
```
- [#7384](https://github.com/biomejs/biome/pull/7384) [`099507e`](https://github.com/biomejs/biome/commit/099507eb07f14f7d383f848fb6c659b5a6ccfd92) Thanks [@ematipico](https://github.com/ematipico)! - Reduced the severity of certain diagnostics emitted when Biome deserializes the configuration files.
Now these diagnostics are emitted as `Information` severity, which means that they won't interfere when running commands with `--error-on-warnings`
- [#7302](https://github.com/biomejs/biome/pull/7302) [`2af2380`](https://github.com/biomejs/biome/commit/2af2380b8210e74efea467139a8a4cb4747c8af4) Thanks [@unvalley](https://github.com/unvalley)! - Fixed [#7301](https://github.com/biomejs/biome/issues/7301): [`useReadonlyClassProperties`](https://biomejs.dev/linter/rules/use-readonly-class-properties/) now correctly skips JavaScript files.
- [#7288](https://github.com/biomejs/biome/pull/7288) [`94d85f8`](https://github.com/biomejs/biome/commit/94d85f8fe54305e8fa070490bb2f7c86a91c5e92) Thanks [@ThiefMaster](https://github.com/ThiefMaster)! - Fixed [#7286](https://github.com/biomejs/biome/issues/7286). Files are now formatted with JSX behavior when `javascript.parser.jsxEverywhere` is explicitly set.
Previously, this flag was only used for parsing, but not for formatting, which resulted in incorrect formatting of conditional expressions when JSX syntax is used in `.js` files.
- [#7311](https://github.com/biomejs/biome/pull/7311) [`62154b9`](https://github.com/biomejs/biome/commit/62154b93e0aa1609afb3d2b1f5468b63ab79374a) Thanks [@qraqras](https://github.com/qraqras)! - Added the new nursery rule `noUselessCatchBinding`. This rule disallows unnecessary catch bindings.
```diff
try {
// Do something
- } catch (unused) {}
+ } catch {}
```
- [#7349](https://github.com/biomejs/biome/pull/7349) [`45c1dfe`](https://github.com/biomejs/biome/commit/45c1dfe32879f4bbb75cbf9b3ee86e304a02aaa1) Thanks [@ematipico](https://github.com/ematipico)! - Fixed [#4298](https://github.com/biomejs/biome/issues/4298). Biome now correctly formats CSS declarations when it contains one single value:
```diff
.bar {
- --123456789012345678901234567890: var(--1234567890123456789012345678901234567);
+ --123456789012345678901234567890: var(
+ --1234567890123456789012345678901234567
+ );
}
```
- [#7295](https://github.com/biomejs/biome/pull/7295) [`7638e84`](https://github.com/biomejs/biome/commit/7638e84b026c8b008fa1efdd795b8c0bff0733ab) Thanks [@ematipico](https://github.com/ematipico)! - Fixed [#7130](https://github.com/biomejs/biome/issues/7130). Removed the emission of a false-positive diagnostic. Biome no longer emits the following diagnostic:
```
lib/main.ts:1:5 suppressions/unused โโโโโโโโโโโโโโโโโโโโโโโโโ
โ Suppression comment has no effect because the tool is not enabled.
> 1 โ /** biome-ignore-all assist/source/organizeImports: For the lib root file, we don't want to organize exports */
โ ^^^^^^^^^^^^^^^^
```
- [#7377](https://github.com/biomejs/biome/pull/7377) [`811f47b`](https://github.com/biomejs/biome/commit/811f47b35163e70dce106f62d0aea4ef9e6b91bb) Thanks [@ematipico](https://github.com/ematipico)! - Fixed [#7371](https://github.com/biomejs/biome/issues/7371) where the Biome Language Server didn't correctly recompute the diagnostics when updating a nested configuration file.
- [#7348](https://github.com/biomejs/biome/pull/7348) [`ac27fc5`](https://github.com/biomejs/biome/commit/ac27fc56dbb14c8f8507ffc4b7d6bf27aa3780db) Thanks [@ematipico](https://github.com/ematipico)! - Fixed [#7079](https://github.com/biomejs/biome/issues/7079). Now the rule [`useSemanticElements`](https://biomejs.dev/linter/rules/use-semantic-elements/) doesn't trigger components and custom elements.
- [#7389](https://github.com/biomejs/biome/pull/7389) [`ab06a7e`](https://github.com/biomejs/biome/commit/ab06a7ea9523ecb39ebf74a14600a02332e9d4e1) Thanks [@Conaclos](https://github.com/Conaclos)! - Fixed [#7344](https://github.com/biomejs/biome/issues/7344). [`useNamingConvention`](https://biomejs.dev/linter/rules/use-naming-convention/) no longer reports interfaces defined in global declarations.
Interfaces declared in global declarations augment existing interfaces.
Thus, they must be ignored.
In the following example, `useNamingConvention` reported `HTMLElement`.
It is now ignored.
```ts
export {};
declare global {
interface HTMLElement {
foo(): void;
}
}
```
- [#7315](https://github.com/biomejs/biome/pull/7315) [`4a2bd2f`](https://github.com/biomejs/biome/commit/4a2bd2f38d1f449e55f88be351fcc1cf1d561e69) Thanks [@vladimir-ivanov](https://github.com/vladimir-ivanov)! - Fixed [#7310](https://github.com/biomejs/biome/issues/7310): [`useReadonlyClassProperties`](https://biomejs.dev/linter/rules/use-readonly-class-properties/) correctly handles nested assignments, avoiding false positives when a class property is assigned within another assignment expression.
Example of code that previously triggered a false positive but is now correctly ignored:
```ts
class test {
private thing: number = 0; // incorrectly flagged
public incrementThing(): void {
const temp = { x: 0 };
temp.x = this.thing++;
}
}
```
## What's Changed
* fix(lint/useReadonlyClassProperties): skip rule for JavaScript files by @unvalley in https://github.com/biomejs/biome/pull/7302
* feat(biome-js-analyzer): adds class member analyzer to extract mutated properties in a class by @vladimir-ivanov in https://github.com/biomejs/biome/pull/7015
* fix(analyzer): remove unhelpful diagnostic by @ematipico in https://github.com/biomejs/biome/pull/7295
* fix(useImportType): inline `import type` into `import { type }` when `style=inlineType` by @Conaclos in https://github.com/biomejs/biome/pull/7316
* fix(noDuplicateObjectKeys): correct grammatical error in JSON diagnostic message by @JeetuSuthar in https://github.com/biomejs/biome/pull/7317
* chore(deps): update github-actions by @renovate[bot] in https://github.com/biomejs/biome/pull/7319
* chore(deps): update dependency @types/node to v22.17.2 by @renovate[bot] in https://github.com/biomejs/biome/pull/7318
* chore(deps): update rust crate anyhow to 1.0.99 by @renovate[bot] in https://github.com/biomejs/biome/pull/7321
* chore(deps): update rust crate cfg-if to 1.0.3 by @renovate[bot] in https://github.com/biomejs/biome/pull/7322
* fix: simplify parens check in exponentiation expression handling by @cqh963852 in https://github.com/biomejs/biome/pull/7341
* feat: execute JS plugin in the Boa engine by @siketyan in https://github.com/biomejs/biome/pull/7300
* fix(format): honor jsxEverywhere setting in variant-specific formatter rules by @ThiefMaster in https://github.com/biomejs/biome/pull/7288
* fix(biome-js-analyze): add tests for useReadonlyClassProperties by @vladimir-ivanov in https://github.com/biomejs/biome/pull/7315
* fix(useSemanticElements): exclude components and custom elements by @ematipico in https://github.com/biomejs/biome/pull/7348
* fix(css/formatter): formatting of single value lists by @ematipico in https://github.com/biomejs/biome/pull/7349
* fix(formatter): patch ID_Continue to omit U+30FB and U+FF65 added in Unicode 15.1 by @siketyan in https://github.com/biomejs/biome/pull/7350
* fix(css): allow navigation property for view-transition (fixes #7340) by @JeetuSuthar in https://github.com/biomejs/biome/pull/7353
* chore(deps): update rust crate tracing-subscriber to v0.3.20 [security] by @renovate[bot] in https://github.com/biomejs/biome/pull/7365
* fix(noDescendingSpecificity): compute nested selectors by @ematipico in https://github.com/biomejs/biome/pull/7358
* feat(biome_js_analyze): add `noUselessCatchBinding` by @qraqras in https://github.com/biomejs/biome/pull/7311
* feat(parser): support dynamic import defer and import source expr by @fireairforce in https://github.com/biomejs/biome/pull/7370
* fix(lsp): internal project handling by @ematipico in https://github.com/biomejs/biome/pull/7377
* fix: biome diagnostic about schema by @ematipico in https://github.com/biomejs/biome/pull/7384
* feat(lint/vue): implement `useVueMultiWordComponentNames` by @dyc3 in https://github.com/biomejs/biome/pull/7373
* fix(useNamingConvention): ignore interfaces in global declarations by @Conaclos in https://github.com/biomejs/biome/pull/7389
* fix(useOptionalChain): support Yoda expressions by @qraqras in https://github.com/biomejs/biome/pull/7387
* fix(core): improve inference with conditionals by @arendjr in https://github.com/biomejs/biome/pull/7393
* refactor(analyze): integrate plugin as a syntax visitor by @siketyan in https://github.com/biomejs/biome/pull/7369
* feat(biome_js_analyze): add UseConsistentArrowReturn rule by @kedevked in https://github.com/biomejs/biome/pull/7245
* fix(cli): files in ignored folders are now correctly ignored by @arendjr in https://github.com/biomejs/biome/pull/7275
* docs: safety of useSortedKeys by @Sjlver in https://github.com/biomejs/biome/pull/6112
* chore: add new bronze sponsor by @ematipico in https://github.com/biomejs/biome/pull/7397
* chore(rules_check): add multi file lint rule checking by @ryan-m-walker in https://github.com/biomejs/biome/pull/7399
* ci: release by @github-actions[bot] in https://github.com/biomejs/biome/pull/7306
## New Contributors
* @ThiefMaster made their first contribution in https://github.com/biomejs/biome/pull/7288
* @qraqras made their first contribution in https://github.com/biomejs/biome/pull/7311
* @kedevked made their first contribution in https://github.com/biomejs/biome/pull/7245
* @Sjlver made their first contribution in https://github.com/biomejs/biome/pull/6112
* @ryan-m-walker made their first contribution in https://github.com/biomejs/biome/pull/7399
**Full Changelog**: https://github.com/biomejs/biome/compare/@biomejs/[email protected]...@biomejs/[email protected]