Biome @biomejs/[email protected]stable Released Nov 06, 2026
Impact Score: 6/10

Biome CLI v2.6.6

Source available — automated, not human-reviewed

Component: @biomejs/biome · Channel: stable. Automated analysis, not a compatibility certification. How this works.

Analysis updated: 2026-11-06.

Compatibility not verified — check source notes
$ npm install --save-dev --save-exact @biomejs/[email protected]
📄 .MD
⚡ Executive Summary (TL;DR)

Biome CLI v2.6.6 introduces a large suite of new nursery rules for JavaScript, TypeScript, CSS, Svelte, and package.json configurations, alongside significant linting performance enhancements. It also fixes several parsing bugs and a rule-group configuration overflow issue.

Who Does This Impact? (Role-Based Analysis)

💻 Software Engineers & Devs

Adopt the new nursery rules to catch runtime errors, memory leaks, and configuration issues early in your editor or CI pipeline.

📊 Product & Engineering Leads

Enjoy improved code quality checks and better Next.js/Svelte/SCSS ecosystem support without any breaking changes.

⚙️ DevOps & Security

Benefit from faster CSS and general linting performance during your automated build and CI steps.

✨ New Features & Capabilities (12)

  • Added nursery rule noArrayMethodsOnArguments to report array method calls on the arguments object.
  • Added nursery rule noConstantComparisons to catch impossible or always-true conditional statements.
  • Added nursery rule noErasingOperation to disallow multiplying, dividing, or bitwise-ANDing with 0 in ways that have no effect.
  • Added nursery rule noNegatedArrayPredicate to suggest moving negations into Array#some() and Array#every() callbacks.
  • Added nursery rule noNumberArgumentOutOfRange to check invalid number literal arguments in toString(), toFixed(), toExponential(), and toPrecision().
  • Added nursery rule noSharedBranchCode to report duplicated code blocks at the start or end of if/else branches.
  • Added nursery rule noSubtractionComparison to recommend direct comparison instead of subtracting and checking against 0.
  • Added nursery rule noSvelteIgnoredUnsubscribe to prevent memory leaks from unstopped Svelte store subscriptions.
  • Added nursery rule noUninvokedArrayCallback to report array methods called on arrays with empty slots.
  • Added nursery rule useNextScriptForGoogleAnalytics to enforce Next.js third-party Google Analytics/Tag Manager components.
  • Added nursery rule usePackageJsonCpu to mandate a 'cpu' field in package.json files.
  • Added nursery rule usePackageJsonEngines to mandate an 'engines' field in package.json files.

⚡ Performance & Enhancements (3)

  • Improved general linting performance by skipping syntax nodes that no enabled rule checks.
  • Improved CSS linting performance by reducing memory allocations for selector comparison rules.
  • Added MDX ESM blocks, expressions, and JSX tags parsing support to the markdown parser.

🔧 Bug Fixes & Patches (4)

  • Fixed an issue where configuring rules in groups with more than 256 rules enabled or disabled the wrong rule.
  • Fixed useGenericFontNames incorrectly reporting font-family inside @font-palette-values.
  • Fixed useExhaustiveSwitchCases to report non-exhaustive switches over values read from for...of loops and array element properties.
  • Fixed SCSS negative interpolation list items being incorrectly parsed as a subtraction operator.
📄 View Raw Release Notes (Original Developer Log)
## 2.6.6 ### Patch Changes - [#12887](https://github.com/biomejs/biome/pull/12887) [`da0422e`](https://github.com/biomejs/biome/commit/da0422e5201555239e49f81e5236068935b9445a) Thanks [@dyc3](https://github.com/dyc3)! - Added the new nursery rule [`noArrayMethodsOnArguments`](https://biomejs.dev/linter/rules/no-array-methods-on-arguments/). It reports calls to array methods on the `arguments` object, which isn't an array, so these calls throw a `TypeError` when the code runs. ```js function sum() { return arguments.reduce((total, value) => total + value, 0); } ``` - [#12877](https://github.com/biomejs/biome/pull/12877) [`cd9e10f`](https://github.com/biomejs/biome/commit/cd9e10f1510d043ee2b5148a5e069fee3638ad65) Thanks [@dyc3](https://github.com/dyc3)! - Added the nursery rule [`noConstantComparisons`](https://biomejs.dev/linter/rules/no-constant-comparisons/), which reports `&&` and `||` conditions that can never be true, are always true, or contain a check with no effect. ```js if (statusCode <= 400 && statusCode > 500) {} ``` - [#12876](https://github.com/biomejs/biome/pull/12876) [`a7c9586`](https://github.com/biomejs/biome/commit/a7c9586a6ff00e455a1d647d8707036bd705bcda) Thanks [@dyc3](https://github.com/dyc3)! - Added the nursery rule [`noErasingOperation`](https://biomejs.dev/linter/rules/no-erasing-operation/), which disallows operations with `0` that always result in zero: multiplying by `0`, a bitwise AND with `0`, and dividing `0` by a number. The other value in these operations has no effect on the result, which usually means the code has a mistake. ```js const total = price * 0; ``` - [#12841](https://github.com/biomejs/biome/pull/12841) [`e954f55`](https://github.com/biomejs/biome/commit/e954f55b09f271ab97a79c732be53c7523b7f2bc) Thanks [@dyc3](https://github.com/dyc3)! - Added the nursery rule [`noNegatedArrayPredicate`](https://biomejs.dev/linter/rules/no-negated-array-predicate/), which reports negated calls to `Array#some()` and `Array#every()` and suggests moving the negation into the callback function. ```js // Invalid: use `array.every((item) => !isUnicorn(item))` instead. const isMissing = !array.some((item) => isUnicorn(item)); ``` - [#12888](https://github.com/biomejs/biome/pull/12888) [`15039f7`](https://github.com/biomejs/biome/commit/15039f762513ec3e20eb0f5d8c4584aba76c7d38) Thanks [@dyc3](https://github.com/dyc3)! - Added the new nursery rule [`noNumberArgumentOutOfRange`](https://biomejs.dev/linter/rules/no-number-argument-out-of-range/), which reports number literal arguments of `toString()`, `toFixed()`, `toExponential()` and `toPrecision()` that are outside the range the method accepts. These calls throw a `RangeError` at runtime. ```js value.toString(64); ``` - [#12889](https://github.com/biomejs/biome/pull/12889) [`1cd7520`](https://github.com/biomejs/biome/commit/1cd7520c8eda7409db0b5648493370cb95aa5f23) Thanks [@dyc3](https://github.com/dyc3)! - Added the nursery rule [`noSharedBranchCode`](https://biomejs.dev/linter/rules/no-shared-branch-code/), which reports code that is repeated at the start or end of every branch of an `if` statement. That code runs no matter which branch is taken, so it can be moved before or after the `if` statement. ```js if (condition) { doSomething(); cleanup(); } else { doSomethingElse(); cleanup(); } ``` - [#12842](https://github.com/biomejs/biome/pull/12842) [`d47fcfd`](https://github.com/biomejs/biome/commit/d47fcfd99c36c19751eb785cae6fb7b655a2432b) Thanks [@dyc3](https://github.com/dyc3)! - Added the new nursery rule [`noSubtractionComparison`](https://biomejs.dev/linter/rules/no-subtraction-comparison/), which reports subtracting two values only to compare the difference with `0`, and suggests comparing the values directly. ```js if (a - b > 0) {} ``` - [#12866](https://github.com/biomejs/biome/pull/12866) [`7c1cd5f`](https://github.com/biomejs/biome/commit/7c1cd5f09604b9762e2cc91e5f96ee0ddc04d485) Thanks [@dyc3](https://github.com/dyc3)! - Added the nursery rule [`noSvelteIgnoredUnsubscribe`](https://biomejs.dev/linter/rules/no-svelte-ignored-unsubscribe/), which reports calls to a store's `subscribe()` method when the returned function is ignored. Without that function, the subscription can never be stopped, which causes a memory leak. ```svelte <script> import { count } from "./stores.js"; count.subscribe((value) => console.log(value)); </script> ``` - [#12890](https://github.com/biomejs/biome/pull/12890) [`6b73fcf`](https://github.com/biomejs/biome/commit/6b73fcfa5a0177ae03550d510bf97daaf640b058) Thanks [@dyc3](https://github.com/dyc3)! - Added the new nursery rule [`noUninvokedArrayCallback`](https://biomejs.dev/linter/rules/no-uninvoked-array-callback/), which reports array methods such as `map()` and `forEach()` called with a callback on an array that only has empty slots. The callback never runs in this case. ```js const list = new Array(5).map(() => createElement()); ``` - [#12886](https://github.com/biomejs/biome/pull/12886) [`3bb18d8`](https://github.com/biomejs/biome/commit/3bb18d85ca16f9cd18bc84810b69bbb04b2136ca) Thanks [@dyc3](https://github.com/dyc3)! - Added the nursery rule [`useNextScriptForGoogleAnalytics`](https://biomejs.dev/linter/rules/use-next-script-for-google-analytics/), which reports `<script>` elements that load Google Analytics or Google Tag Manager. Use the `GoogleAnalytics` and `GoogleTagManager` components from `@next/third-parties/google` instead, which load these scripts after the page becomes interactive. ```jsx <script async src="https://www.googletagmanager.com/gtag/js?id=G-XYZ" /> ``` The rule belongs to the `next` domain. - [#12309](https://github.com/biomejs/biome/pull/12309) [`0538e30`](https://github.com/biomejs/biome/commit/0538e30afeaf0eb9fd97170e8bcbe05b67d9bb57) Thanks [@dyc3](https://github.com/dyc3)! - Added the new nursery rule [`usePackageJsonCpu`](https://biomejs.dev/linter/rules/use-package-json-cpu/), which reports `package.json` files that have no `cpu` field. The `cpu` field lists the processor types that the package supports. The following `package.json` file satisfies the rule: ```json { "name": "my-package", "version": "1.0.0", "cpu": ["x64", "arm64"] } ``` - [#12310](https://github.com/biomejs/biome/pull/12310) [`191111d`](https://github.com/biomejs/biome/commit/191111d99b6c8e0638cc8b9fc7950d55ad18d654) Thanks [@dyc3](https://github.com/dyc3)! - Added the nursery rule [`usePackageJsonEngines`](https://biomejs.dev/linter/rules/use-package-json-engines/), which reports `package.json` files that have no `engines` field. A `package.json` passes the rule once it declares the field: ```json { "name": "my-package", "engines": { "node": ">=20" } } ``` - [#12986](https://github.com/biomejs/biome/pull/12986) [`cc929af`](https://github.com/biomejs/biome/commit/cc929aff46bd49ae0bfc5c02a6f7b093caa82d25) Thanks [@dyc3](https://github.com/dyc3)! - Fixed [#12954](https://github.com/biomejs/biome/issues/12954), where configuring rules in groups with more than 256 rules could enable or disable the wrong rule. - [#12931](https://github.com/biomejs/biome/pull/12931) [`fe9248e`](https://github.com/biomejs/biome/commit/fe9248e58613d2326d17b3de9c80859e7f0d8d71) Thanks [@dyc3](https://github.com/dyc3)! - Improved the performance of linting. Each lint pass now spends less time stepping over syntax nodes that no enabled rule looks at. - [#12969](https://github.com/biomejs/biome/pull/12969) [`22d27e8`](https://github.com/biomejs/biome/commit/22d27e8e49965757087c8284ddcab1f207d20ed9) Thanks [@vibbix](https://github.com/vibbix)! - Improved the performance of CSS linting. Rules that compare selectors, such as [`noDescendingSpecificity`](https://biomejs.dev/linter/rules/no-descending-specificity/) and [`noDuplicateSelectors`](https://biomejs.dev/linter/rules/no-duplicate-selectors/), now make fewer memory allocations. - [#12973](https://github.com/biomejs/biome/pull/12973) [`5a06df5`](https://github.com/biomejs/biome/commit/5a06df57d0dd2a84b1930c56cbf4495fc82db55d) Thanks [@vibbix](https://github.com/vibbix)! - Fixed [`useGenericFontNames`](https://biomejs.dev/linter/rules/use-generic-font-names/) reporting `font-family` inside `@font-palette-values`. There, `font-family` names the font families the palette applies to, so it doesn't take a generic family. ```css @font-palette-values --palette { font-family: Bixa; override-colors: 0 red; } ``` - [#12930](https://github.com/biomejs/biome/pull/12930) [`ce71284`](https://github.com/biomejs/biome/commit/ce7128402663d4af0a2d22e0731a0d6127e21489) Thanks [@dyc3](https://github.com/dyc3)! - Fixed [#12073](https://github.com/biomejs/biome/issues/12073): [`useExhaustiveSwitchCases`](https://biomejs.dev/linter/rules/use-exhaustive-switch-cases/) now reports non-exhaustive switches over values read from `for...of` loops over `Array.prototype.entries()`, `Map`, and `Set`, and over properties of array elements indexed by a `number` variable. [`noMisusedPromises`](https://biomejs.dev/linter/rules/no-misused-promises/) now also reports Promise-returning callbacks passed to array methods such as `find` and `every`. - [#12983](https://github.com/biomejs/biome/pull/12983) [`2987b54`](https://github.com/biomejs/biome/commit/2987b54ef12d6949fefe97363fd8df8bedfa34f9) Thanks [@ashokram-si](https://github.com/ashokram-si)! - Fixed [#12957](https://github.com/biomejs/biome/issues/12957): Biome now correctly parses SCSS negative interpolation list items as separate values instead of an invalid subtraction operator. ```diff -margin: -#{$s} - #{$s} - #{$s} auto; +margin: -#{$s} -#{$s} -#{$s} auto; ``` ## What's Changed * test(cli): fix flaky symlink test by @dyc3 in https://github.com/biomejs/biome/pull/12929 * fix(type_inference): remove lowering override for Array type by @dyc3 in https://github.com/biomejs/biome/pull/12930 * perf(rowan): skip childless nodes and avoid segment copies in the kind-filtered walk by @dyc3 in https://github.com/biomejs/biome/pull/12931 * chore: fix skill in Zed by @arendjr in https://github.com/biomejs/biome/pull/12949 * refactor: extract JS extent detection into biome_js_extent by @ematipico in https://github.com/biomejs/biome/pull/12830 * feat(markdown_parser): parse MDX ESM blocks and expressions by @ematipico in https://github.com/biomejs/biome/pull/12831 * feat(markdown_parser): parse MDX JSX tags by @ematipico in https://github.com/biomejs/biome/pull/12832 * docs: improve Biome description in README by @Netail in https://github.com/biomejs/biome/pull/12978 * chore(deps): update dependency vite to v7.3.7 [security] by @renovate[bot] in https://github.com/biomejs/biome/pull/12491 * fix(deps): update dependency happy-dom to v21 [security] by @renovate[bot] in https://github.com/biomejs/biome/pull/12641 * chore(deps): update rust crate globset to 0.4.21 by @renovate[bot] in https://github.com/biomejs/biome/pull/12848 * chore(deps): update rust crate jiff to 0.2.39 by @renovate[bot] in https://github.com/biomejs/biome/pull/12448 * chore(deps): update rust crate schemars to 1.2.3 by @renovate[bot] in https://github.com/biomejs/biome/pull/12452 * fix(lint/css): skip @font-palette-values in useGenericFontNames by @vibbix in https://github.com/biomejs/biome/pull/12973 * chore(deps): update rust crate libc to 0.2.191 by @renovate[bot] in https://github.com/biomejs/biome/pull/12449 * perf(css_semantic): store selector ranges and borrow resolved selectors by @vibbix in https://github.com/biomejs/biome/pull/12969 * fix(css_parser): correctly parse SCSS negative interpolation list items by @ashokram-si in https://github.com/biomejs/biome/pull/12983 * feat(lint): add noNegatedArrayPredicate by @dyc3 in https://github.com/biomejs/biome/pull/12841 * feat(lint): add noSubtractionComparison by @dyc3 in https://github.com/biomejs/biome/pull/12842 * feat(lint): add noSvelteIgnoredUnsubscribe by @dyc3 in https://github.com/biomejs/biome/pull/12866 * feat(lint): add noErasingOperation by @dyc3 in https://github.com/biomejs/biome/pull/12876 * feat(lint): add noConstantComparisons by @dyc3 in https://github.com/biomejs/biome/pull/12877 * feat(lint): add useNextScriptForGoogleAnalytics by @dyc3 in https://github.com/biomejs/biome/pull/12886 * feat(lint): add noArrayMethodsOnArguments by @dyc3 in https://github.com/biomejs/biome/pull/12887 * feat(lint): add noNumberArgumentOutOfRange by @dyc3 in https://github.com/biomejs/biome/pull/12888 * feat(lint): add noSharedBranchCode by @dyc3 in https://github.com/biomejs/biome/pull/12889 * feat(lint): add noUninvokedArrayCallback by @dyc3 in https://github.com/biomejs/biome/pull/12890 * feat(lint): add usePackageJsonCpu by @dyc3 in https://github.com/biomejs/biome/pull/12309 * feat(lint): add usePackageJsonEngines by @dyc3 in https://github.com/biomejs/biome/pull/12310 * chore: update rule metadata by @dyc3 in https://github.com/biomejs/biome/pull/12921 * fix(configuration): avoid overflowing rule indices by @dyc3 in https://github.com/biomejs/biome/pull/12986 * ci: release by @github-actions[bot] in https://github.com/biomejs/biome/pull/12938 ## New Contributors * @ashokram-si made their first contribution in https://github.com/biomejs/biome/pull/12983 **Full Changelog**: https://github.com/biomejs/biome/compare/@biomejs/[email protected]...@biomejs/[email protected]
← Older Version Biome @biomejs/[email protected]