Biome @biomejs/[email protected]stable Released Feb 12, 2026
Impact Score: 5/10

Biome CLI v2.3.15

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.

Compatibility not verified โ€” check source notes
$ npm install --save-dev --save-exact @biomejs/[email protected]
๐Ÿ“„ .MD
โšก Executive Summary (TL;DR)

Biome @biomejs/[email protected]. Source highlight: Added the lint rule `noNestedPromises`. This rule detects nested `.then()` or `.catch()` calls that could be refactored into flat promise chains.

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 (3)

  • feat(migrate): some more migration metadata
  • feat(lint/js): add `noNestedPromises`
  • feat(lint): add nursery rule noUselessReturn

๐Ÿ”ง Bug Fixes & Patches (6)

  • Added the lint rule `noNestedPromises`. This rule detects nested `.then()` or `.catch()` calls that could be refactored into flat promise chains.
  • Added the nursery rule `noUselessReturn`. The rule reports redundant `return;` statements that don't affect the function's control flow.
  • Reverted a behavior change in `useExhaustiveDependencies` that was accidentally included as part of the #8802 fix. The change made method calls on objects (e.g., `props.data.forEach(...)`) report only the object (`props.data`) as a missing dependency instead of the full member expression. This behavior change will be reconsidered separately.
  • Fixed #8790: The `noAssignInExpressions` rule no longer reports a false positive when an assignment is used as the expression body of an arrow function (e.g., `const f = b => a += b`).
  • Fixed #8518, where globally excluded files in a monorepo were still being processed when using `"extends": "//"`.
  • Fixed #8967. useExhaustiveDependencies no longer reports false positives for variables destructured from a rest pattern.
๐Ÿ“„ View Raw Release Notes (Original Developer Log)
## 2.3.15 ### Patch Changes - [#9019](https://github.com/biomejs/biome/pull/9019) [`043b67c`](https://github.com/biomejs/biome/commit/043b67c608f99a27c775deefb9f00b43839251ae) Thanks [@dyc3](https://github.com/dyc3)! - Added the lint rule [`noNestedPromises`](https://biomejs.dev/linter/rules/no-nested-promises/). This rule detects nested `.then()` or `.catch()` calls that could be refactored into flat promise chains. ```js // Invalid: nested promise that can be flattened doThing().then(function () { return doOtherThing().then(console.log); }); // Valid: flat promise chain doThing() .then(() => doOtherThing()) .then(console.log); ``` The rule intelligently allows nesting when the inner callback references variables from the outer scope, as these cases cannot be safely flattened. - [#9029](https://github.com/biomejs/biome/pull/9029) [`6ebf6c6`](https://github.com/biomejs/biome/commit/6ebf6c605f20a504aa5f23477f2e9be32437fb90) Thanks [@ff1451](https://github.com/ff1451)! - Added the nursery rule [`noUselessReturn`](https://biomejs.dev/linter/rules/no-useless-return/). The rule reports redundant `return;` statements that don't affect the function's control flow. ```js // Invalid: return at end of function is redundant function foo() { doSomething(); return; } ``` - [#9017](https://github.com/biomejs/biome/pull/9017) [`8bac2da`](https://github.com/biomejs/biome/commit/8bac2da137bb1b697be1ebf41a11088c0220ce65) Thanks [@mdevils](https://github.com/mdevils)! - Reverted a behavior change in [`useExhaustiveDependencies`](https://biomejs.dev/linter/rules/use-exhaustive-dependencies/) that was accidentally included as part of the [#8802](https://github.com/biomejs/biome/issues/8802) fix. The change made method calls on objects (e.g., `props.data.forEach(...)`) report only the object (`props.data`) as a missing dependency instead of the full member expression. This behavior change will be reconsidered separately. - [#9005](https://github.com/biomejs/biome/pull/9005) [`c8dbbbe`](https://github.com/biomejs/biome/commit/c8dbbbe9363fb156a29de174ba7735154f6bc783) Thanks [@corvid-agent](https://github.com/corvid-agent)! - Fixed [#8790](https://github.com/biomejs/biome/issues/8790): The [`noAssignInExpressions`](https://biomejs.dev/linter/rules/no-assign-in-expressions/) rule no longer reports a false positive when an assignment is used as the expression body of an arrow function (e.g., `const f = b => a += b`). - [#8519](https://github.com/biomejs/biome/pull/8519) [`ccdc602`](https://github.com/biomejs/biome/commit/ccdc602d8ab8e7b14b7cbae2b12cdf396edb8301) Thanks [@ruidosujeira](https://github.com/ruidosujeira)! - Fixed [#8518](https://github.com/biomejs/biome/issues/8518), where globally excluded files in a monorepo were still being processed when using `"extends": "//"`. When a package-level configuration extends the root configuration with `"extends": "//"`, glob patterns (such as those in `files.includes`) are now correctly resolved relative to the project root directory, instead of the current workspace directory. - [#9033](https://github.com/biomejs/biome/pull/9033) [`0628e0a`](https://github.com/biomejs/biome/commit/0628e0a238d9c9c750e4f44c460455183a0ff70e) Thanks [@mdevils](https://github.com/mdevils)! - Fixed [#8967](https://github.com/biomejs/biome/issues/8967). [useExhaustiveDependencies](https://biomejs.dev/linter/rules/use-exhaustive-dependencies/) no longer reports false positives for variables destructured from a rest pattern. - [#9023](https://github.com/biomejs/biome/pull/9023) [`8ef9d1d`](https://github.com/biomejs/biome/commit/8ef9d1d81c416a9f4d42527f4c263bc3f2e423b1) Thanks [@siketyan](https://github.com/siketyan)! - Fixed [#9020](https://github.com/biomejs/biome/issues/9020): When `javascript.jsxRuntime` is set to `reactClassic`, `noUnusedImports` and `useImportType` rules now allow importing the `React` identifier from a package other than `react`. This aligns the behavior with `tsc` (`--jsx=react`), which also allows importing `React` from any package. - [#8646](https://github.com/biomejs/biome/pull/8646) [`16fd71d`](https://github.com/biomejs/biome/commit/16fd71da5692f863112e302078325d3be4d79b24) Thanks [@siketyan](https://github.com/siketyan)! - Fixed [#8605](https://github.com/biomejs/biome/issues/8605): Text expressions in some template languages (`{{ expr }}` or `{ expr }`) at the top level of an HTML document no longer causes panicking. - [#8930](https://github.com/biomejs/biome/pull/8930) [`51c158e`](https://github.com/biomejs/biome/commit/51c158e803f9bad561cf5b79365c339e9069d614) Thanks [@ANKANJAGTAP](https://github.com/ANKANJAGTAP)! - Fixed #8917 [useExhaustiveDependencies](https://biomejs.dev/linter/rules/use-exhaustive-dependencies/) now correctly detects JSX component identifiers as hook dependencies. - [#9009](https://github.com/biomejs/biome/pull/9009) [`7d229c7`](https://github.com/biomejs/biome/commit/7d229c7ca3930ff56e3a229a70b994f1d5fd1086) Thanks [@Netail](https://github.com/Netail)! - Fixed typo in [noPositiveTabindex](https://biomejs.dev/linter/rules/no-positive-tabindex/)'s quick fix text. - [#8758](https://github.com/biomejs/biome/pull/8758) [`8c789f1`](https://github.com/biomejs/biome/commit/8c789f15e2129874450a29a55d376efe17dbcf5b) Thanks [@Pranav2612000](https://github.com/Pranav2612000)! - Updated the useJsxKeyInIterable rule to not run inside Map constructors - [#8977](https://github.com/biomejs/biome/pull/8977) [`bbe0e0c`](https://github.com/biomejs/biome/commit/bbe0e0c319f78b484d11649cc473ebca92f5e3af) Thanks [@FrankFMY](https://github.com/FrankFMY)! - Fixed [#4888](https://github.com/biomejs/biome/issues/4888). [noUnusedImports](https://biomejs.dev/linter/rules/no-unused-imports/) now adds `export {}` when removing the last import in a TypeScript file to prevent it from becoming an ambient module. This does not apply to embedded scripts in Vue, Svelte, or Astro files, which are already in a module context. - [#9016](https://github.com/biomejs/biome/pull/9016) [`9d4cfa3`](https://github.com/biomejs/biome/commit/9d4cfa304268579361639c3d2301f1e38526dd00) Thanks [@dyc3](https://github.com/dyc3)! - Added eslint migration metadata for the rules `@typescript/no-var-requires`, `@typescript/keyword-spacing`, `@typescript/func-call-spacing`, `vue/keyword-spacing`, `vue/func-call-spacing`, and `unicorn/empty-brace-spaces`, - [#8848](https://github.com/biomejs/biome/pull/8848) [`2cba2b3`](https://github.com/biomejs/biome/commit/2cba2b3996447dab1d653dd8c8ee97eddd0bb63b) Thanks [@LouisLau-art](https://github.com/LouisLau-art)! - Fixed [#8845](https://github.com/biomejs/biome/issues/8845). Now `useGenericFontNames` doesn't trigger when `font` is declared inside the `@supports` at-rule. - [#8997](https://github.com/biomejs/biome/pull/8997) [`a5f3212`](https://github.com/biomejs/biome/commit/a5f321284249e21b9dda9fdc9130974c47df8a99) Thanks [@mldangelo](https://github.com/mldangelo)! - Fixed [#8476](https://github.com/biomejs/biome/issues/8476). [useAwaitThenable](https://biomejs.dev/linter/rules/use-await-thenable/) no longer reports false positives for `await` on call expressions whose return type cannot be resolved (e.g., cross-module function calls to Node.js builtins or npm packages). - [#8978](https://github.com/biomejs/biome/pull/8978) [`cc7a478`](https://github.com/biomejs/biome/commit/cc7a4785f47a2c2a5ba3ea4ef90937742a2cd347) Thanks [@FrankFMY](https://github.com/FrankFMY)! - Fixed [#8645](https://github.com/biomejs/biome/issues/8645). [useAwait](https://biomejs.dev/linter/rules/use-await/) no longer reports `async` generator functions that use `yield*`, since `yield*` in an async generator delegates to an `AsyncIterable` and requires the `async` modifier. ## What's Changed * docs: fix website sync by @dyc3 in https://github.com/biomejs/biome/pull/8957 * chore(deps): update rust crate git2 to v0.20.4 [security] by @renovate[bot] in https://github.com/biomejs/biome/pull/8965 * fix: jsx dependency detection in useexhaustivedependencies (#8917) by @ANKANJAGTAP in https://github.com/biomejs/biome/pull/8930 * chore(doc): update formatter contributing doc by @tidefield in https://github.com/biomejs/biome/pull/8972 * fix(useAwait): treat yield* as async operation in async generators by @FrankFMY in https://github.com/biomejs/biome/pull/8978 * fix(css): ignore @supports queries in useGenericFontNames rule by @LouisLau-art in https://github.com/biomejs/biome/pull/8848 * fix(html/parser): distinguish interpolations inside and outside tags by @siketyan in https://github.com/biomejs/biome/pull/8646 * chore(deps): update rust:1.93.0-bookworm docker digest to d0a4aa3 by @renovate[bot] in https://github.com/biomejs/biome/pull/8999 * chore(deps): update rust:1.93.0-bullseye docker digest to 3ebcc2d by @renovate[bot] in https://github.com/biomejs/biome/pull/9000 * fix(codegen): remove duplicate preamble in generated analyzer files by @mldangelo in https://github.com/biomejs/biome/pull/8993 * chore(deps): update rust crate anyhow to 1.0.101 by @renovate[bot] in https://github.com/biomejs/biome/pull/9004 * chore(deps): update rust crate bpaf to 0.9.23 by @renovate[bot] in https://github.com/biomejs/biome/pull/9006 * chore(deps): update rust crate insta to 1.46.3 by @renovate[bot] in https://github.com/biomejs/biome/pull/9007 * chore(deps): update dependency tombi to v0.7.27 by @renovate[bot] in https://github.com/biomejs/biome/pull/9002 * chore(deps): update github-actions by @renovate[bot] in https://github.com/biomejs/biome/pull/9003 * chore(deps): update dependency @types/node to v24.10.11 by @renovate[bot] in https://github.com/biomejs/biome/pull/9001 * fix(js_analyze): typo in noPositiveTabindex's action suggestion by @Netail in https://github.com/biomejs/biome/pull/9009 * fix(useAwaitThenable): treat unresolved call expressions as uninferred by @mldangelo in https://github.com/biomejs/biome/pull/8997 * fix(linter): allow assignment in arrow function expression body by @corvid-agent in https://github.com/biomejs/biome/pull/9005 * feat(migrate): some more migration metadata by @dyc3 in https://github.com/biomejs/biome/pull/9016 * fix(linter): `useExhaustiveDependencies` revert object method call behavior change, fixes #8958 by @mdevils in https://github.com/biomejs/biome/pull/9017 * fix(linter): add `export {}` when noUnusedImports removes last import in TypeScript by @FrankFMY in https://github.com/biomejs/biome/pull/8977 * fix(useJsxKeyInIterable): ignore rule in Map constructor by @Pranav2612000 in https://github.com/biomejs/biome/pull/8758 * docs: correct default value for `useEditorconfig` schema setting by @lgaspari in https://github.com/biomejs/biome/pull/9025 * fix(lint): remove import source check from is_global_react_import() by @siketyan in https://github.com/biomejs/biome/pull/9023 * chore: upgrade CVE'ed crates, remove unmaintaned crates by @ematipico in https://github.com/biomejs/biome/pull/9032 * feat(lint/js): add `noNestedPromises` by @dyc3 in https://github.com/biomejs/biome/pull/9019 * fix: resolve glob patterns relative to project root when extending by @ruidosujeira in https://github.com/biomejs/biome/pull/8519 * feat(lint): add nursery rule noUselessReturn by @ff1451 in https://github.com/biomejs/biome/pull/9029 * fix(linter): `useExhaustiveDependencies` proper rest parameters handling, fixes #8967 by @mdevils in https://github.com/biomejs/biome/pull/9033 * ci: release by @github-actions[bot] in https://github.com/biomejs/biome/pull/8973 ## New Contributors * @ANKANJAGTAP made their first contribution in https://github.com/biomejs/biome/pull/8930 * @FrankFMY made their first contribution in https://github.com/biomejs/biome/pull/8978 * @LouisLau-art made their first contribution in https://github.com/biomejs/biome/pull/8848 * @corvid-agent made their first contribution in https://github.com/biomejs/biome/pull/9005 * @Pranav2612000 made their first contribution in https://github.com/biomejs/biome/pull/8758 * @lgaspari made their first contribution in https://github.com/biomejs/biome/pull/9025 * @ff1451 made their first contribution in https://github.com/biomejs/biome/pull/9029 **Full Changelog**: https://github.com/biomejs/biome/compare/@biomejs/[email protected]...@biomejs/[email protected]