Biome @biomejs/[email protected]stable Released Jul 17, 2025
Impact Score: 5/10

Biome CLI v2.1.2

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: Fix #6485: Handle multiple semicolons correctly in blocks (#6485)

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)

  • `noFloatingPromises` will no longer suggest to add `await` keyword inside synchronous callbacks nested inside `async` functions.
  • chore: add tracing span for `open_file_internal()`
  • feat(html/parser): text expressions
  • feat(lint): implement `noVueReservedProps` rule
  • ci: add a job for linting markdown files
  • feat: add global vscode and zed settings file to well known files

โšก Performance & Enhancements (2)

  • perf: faster function parameters in inference
  • perf: optimise `noImportCycles`

๐Ÿ”ง Bug Fixes & Patches (6)

  • Fix #6485: Handle multiple semicolons correctly in blocks (#6485)
  • Fixed #6762, Biome now knows that `~/.config/zed/settings.json` and `~/.config/Code/User/settings.json` allows comments by default.
  • Fixed #6838, where the Biome File Watcher incorrectly watched and stored ignored files, causing possible memory leaks when those files were dynamically created (e.g. built files).
  • Refactor: remove one level of indirection for CSS declarations with semicolon
  • Fixed a bug where the Biome Language Server didn't correctly ignore specific files when `vcs.useIgnoreFile` is set to `true`.
  • Improved the performance of `noImportCycles` by ~30%.
๐Ÿ“„ View Raw Release Notes (Original Developer Log)
## 2.1.2 ### Patch Changes - [#6865](https://github.com/biomejs/biome/pull/6865) [`b35bf64`](https://github.com/biomejs/biome/commit/b35bf6448fb1950c922e627254588e96748e287f) Thanks [@denbezrukov](https://github.com/denbezrukov)! - Fix [#6485](https://github.com/biomejs/biome/issues/6485): Handle multiple semicolons correctly in blocks (#6485) ```css div { box-sizing: border-box; color: red; } ``` - [#6798](https://github.com/biomejs/biome/pull/6798) [`3579ffa`](https://github.com/biomejs/biome/commit/3579ffaae4e86835b001fee4ab7dd8aabb03ae54) Thanks [@dyc3](https://github.com/dyc3)! - Fixed [#6762](https://github.com/biomejs/biome/issues/6762), Biome now knows that `~/.config/zed/settings.json` and `~/.config/Code/User/settings.json` allows comments by default. - [#6839](https://github.com/biomejs/biome/pull/6839) [`4cd62d8`](https://github.com/biomejs/biome/commit/4cd62d8ae2e5cb24d6f308e05b38003486294548) Thanks [@ematipico](https://github.com/ematipico)! - Fixed [#6838](https://github.com/biomejs/biome/issues/6838), where the Biome File Watcher incorrectly watched and stored ignored files, causing possible memory leaks when those files were dynamically created (e.g. built files). - [#6879](https://github.com/biomejs/biome/pull/6879) [`0059cd9`](https://github.com/biomejs/biome/commit/0059cd9b5e6ba33cabb5e153bd03e2041effb0cd) Thanks [@denbezrukov](https://github.com/denbezrukov)! - Refactor: remove one level of indirection for CSS declarations with semicolon Previously, accessing a declaration from a list required an extra step: ```rust item .as_any_css_declaration_with_semicolon() .as_css_declaration_with_semicolon() ``` Now, it can be done directly with: ```rust item.as_css_declaration_with_semicolon() ``` - [#6839](https://github.com/biomejs/biome/pull/6839) [`4cd62d8`](https://github.com/biomejs/biome/commit/4cd62d8ae2e5cb24d6f308e05b38003486294548) Thanks [@ematipico](https://github.com/ematipico)! - Fixed a bug where the Biome Language Server didn't correctly ignore specific files when `vcs.useIgnoreFile` is set to `true`. - [#6884](https://github.com/biomejs/biome/pull/6884) [`5ff50f8`](https://github.com/biomejs/biome/commit/5ff50f8291ca6f8f59fccfc326c8f0bdc3127842) Thanks [@arendjr](https://github.com/arendjr)! - Improved the performance of `noImportCycles` by ~30%. - [#6903](https://github.com/biomejs/biome/pull/6903) [`241dd9e`](https://github.com/biomejs/biome/commit/241dd9e487226fc58b4ceceaf3164e36d8e22d3b) Thanks [@arendjr](https://github.com/arendjr)! - Fixed [#6829](https://github.com/biomejs/biome/issues/6829): Fixed a false positive reported by `useImportExtensions` when importing a `.js` file that had a matching `.d.ts` file in the same folder. - [#6846](https://github.com/biomejs/biome/pull/6846) [`446112e`](https://github.com/biomejs/biome/commit/446112e79d695c50ca9cc9f2d25c91cf03115f50) Thanks [@darricheng](https://github.com/darricheng)! - Fixed an issue where biome was using the wrong string quotes when the classes string has quotes, resulting in invalid code after applying the fix. - [#6823](https://github.com/biomejs/biome/pull/6823) [`eebc48e`](https://github.com/biomejs/biome/commit/eebc48e0120958a39186f510278e1e5eacad3f1c) Thanks [@arendjr](https://github.com/arendjr)! - Improved [#6172](https://github.com/biomejs/biome/issues/6172): Optimised the way function arguments are stored in Biome's type inference. This led to about 10% performance improvement in `RedisCommander.d.ts` and about 2% on `@next/font` type definitions. - [#6878](https://github.com/biomejs/biome/pull/6878) [`3402976`](https://github.com/biomejs/biome/commit/340297602c1162928735d1c073d7a409c22e90bd) Thanks [@ematipico](https://github.com/ematipico)! - Fixed a bug where the Biome Language Server would apply an unsafe fix when using the code action `quickfix.biome`. Now Biome no longer applies an unsafe code fix when using the code action `quickfix.biome`. - [#6794](https://github.com/biomejs/biome/pull/6794) [`4d5fc0e`](https://github.com/biomejs/biome/commit/4d5fc0ef38f8c4ad820e297749efc83e983b5a91) Thanks [@vladimir-ivanov](https://github.com/vladimir-ivanov)! - Fixed [#6719](https://github.com/biomejs/biome/issues/6719): The `noInvalidUseBeforeDeclaration` rule covers additional use cases. Examples: ```ts type Bar = { [BAR]: true }; const BAR = "bar"; ``` ```ts interface Bar { child: { grandChild: { [BAR]: typeof BAR; enumFoo: EnumFoo } }; } const BAR = "bar"; enum EnumFoo { BAR = "bar", } ``` - [#6863](https://github.com/biomejs/biome/pull/6863) [`531e97e`](https://github.com/biomejs/biome/commit/531e97e3f691e3ff34d2382fab414072ecb68e8b) Thanks [@dyc3](https://github.com/dyc3)! - Biome now considers whether the linter is enabled when figuring out how the project should be scanned. Resolves [#6815](https://github.com/biomejs/biome/issues/6815). - [#6832](https://github.com/biomejs/biome/pull/6832) [`bdbc2b1`](https://github.com/biomejs/biome/commit/bdbc2b10ac21dcb35b41e93b17e712ba80f421ca) Thanks [@togami2864](https://github.com/togami2864)! - Fixed [#6165](https://github.com/biomejs/biome/issues/6165): Fixed false negative in [`noUnusedPrivateClassMembers`](https://biomejs.dev/linter/rules/no-unused-private-class-members/) rule when checking member usage in classes - [#6839](https://github.com/biomejs/biome/pull/6839) [`4cd62d8`](https://github.com/biomejs/biome/commit/4cd62d8ae2e5cb24d6f308e05b38003486294548) Thanks [@ematipico](https://github.com/ematipico)! - Fixed a bug where the root ignore file wasn't correctly loaded during the scanning phase, causing false positives and incorrect expectations among users. Now, when using `vcs.useIgnoreFile`, the **the globs specified in the ignore file from the project root** will have the same semantics as the `files.includes` setting of the root configuration. Refer to the [relative web page](https://biomejs.dev/internals/architecture/#configuring-the-scanner) to understand how they work. - [#6898](https://github.com/biomejs/biome/pull/6898) [`5beb024`](https://github.com/biomejs/biome/commit/5beb024d8e9af8733bc115ba4b07d20036fe336e) Thanks [@arendjr](https://github.com/arendjr)! - Fixed [#6891](https://github.com/biomejs/biome/issues/6891): Improved type inference for array indices. **Example:** ```ts const numbers: number[]; numbers[42]; // This now infers to `number | undefined`. ``` - [#6809](https://github.com/biomejs/biome/pull/6809) [`8192451`](https://github.com/biomejs/biome/commit/819245188e587d0a5ede53aa07899a2cb9fcce4f) Thanks [@arendjr](https://github.com/arendjr)! - Fixed [#6796](https://github.com/biomejs/biome/issues/6796): Fixed a false positive that happened in `noFloatingPromises` when calling functions that were declared as part of `for ... of` syntax inside `async` functions. Instead, the variables declared inside `for ... of` loops are now correctly inferred if the expression being iterated evaluates to an `Array` (support for other iterables will follow later). **Invalid example** ```tsx const txStatements: Array<(tx) => Promise<any>> = []; db.transaction((tx: any) => { for (const stmt of txStatements) { // We correctly flag this resolves to a `Promise`: stmt(tx); } }); ``` **Valid example** ```tsx async function valid(db) { const txStatements: Array<(tx: any) => void> = [(tx) => tx.insert().run()]; db.transaction((tx: any) => { for (const stmt of txStatements) { // We don't flag a false positive here anymore: stmt(tx); } }); } ``` - [#6757](https://github.com/biomejs/biome/pull/6757) [`13a0818`](https://github.com/biomejs/biome/commit/13a0818be8cc08efd303829252cbc3e64bcbca3a) Thanks [@mdevils](https://github.com/mdevils)! - Added the rule [`noVueReservedProps`](https://biomejs.dev/linter/rules/no-vue-reserved-props/), resolves [#6309](https://github.com/biomejs/biome/issues/6309). It prevents the use of reserved Vue prop names such as `key` and `ref` which can cause conflicts and unexpected behavior in Vue components. ##### Invalid example ```js import { defineComponent } from "vue"; export default defineComponent({ props: ["ref", "key", "foo"], }); ``` ```vue <script setup> defineProps({ ref: String, key: String, foo: String, }); </script> ``` ##### Valid examples ```js import { defineComponent } from "vue"; export default defineComponent({ props: ["foo"], }); ``` ```vue <script setup> defineProps({ foo: String }); </script> ``` - [#6840](https://github.com/biomejs/biome/pull/6840) [`1a57b51`](https://github.com/biomejs/biome/commit/1a57b51097c7bf4faeb0dcc5330d49e17f86789b) Thanks [@denbezrukov](https://github.com/denbezrukov)! - Allow multiple identifiers in ::part() pseudo-element selector. ```css ::part(first second) { } ``` - [#6845](https://github.com/biomejs/biome/pull/6845) [`4fd44ec`](https://github.com/biomejs/biome/commit/4fd44ec17a3ac6a5486ac94f01e85e62310b8061) Thanks [@arendjr](https://github.com/arendjr)! - Fixed [#6510](https://github.com/biomejs/biome/issues/6510): The scanner no longer shows diagnostics on inaccessible files unless `--verbose` is used. - [#6844](https://github.com/biomejs/biome/pull/6844) [`b7e2d4d`](https://github.com/biomejs/biome/commit/b7e2d4d3a8b2654278596eaecdccc30405457fc8) Thanks [@sterliakov](https://github.com/sterliakov)! - Fixed [#6837](https://github.com/biomejs/biome/issues/6837): Fixed regression with multiple consecutive line suppression comments using instances (like `// biome-ignore lint/correctness/useExhaustiveDependencies(depName): reason`). - [#6818](https://github.com/biomejs/biome/pull/6818) [`5f3f5a6`](https://github.com/biomejs/biome/commit/5f3f5a6e8c12b56dc36bcfb4f8d5077eb33ccf08) Thanks [@siketyan](https://github.com/siketyan)! - Fixed an issue where `textDocument/codeAction` in the LSP could respond with outdated text edits after the workspace watcher observed outdated changes to the file. - [#6804](https://github.com/biomejs/biome/pull/6804) [`3e6ab16`](https://github.com/biomejs/biome/commit/3e6ab1663ab15f9f00ae069ee790e5fd90327082) Thanks [@arendjr](https://github.com/arendjr)! - `noFloatingPromises` will no longer suggest to add `await` keyword inside synchronous callbacks nested inside `async` functions. - [#6901](https://github.com/biomejs/biome/pull/6901) [`c9e969a`](https://github.com/biomejs/biome/commit/c9e969a84158b29d175cd04ea8b921c737b7ed8f) Thanks [@arendjr](https://github.com/arendjr)! - Fixed [#6777](https://github.com/biomejs/biome/issues/6777): Fixed type inference handling of `this` to avoid infinite recursion. Thanks to @sterliakov for the thorough investigation! - [#6855](https://github.com/biomejs/biome/pull/6855) [`d1581c7`](https://github.com/biomejs/biome/commit/d1581c7c874b2917132a864d1c65df041ad9181b) Thanks [@vladimir-ivanov](https://github.com/vladimir-ivanov)! - Fixed [#6775](https://github.com/biomejs/biome/issues/6775): `useReadonlyClassProperties` now also captures mutations inside function arguments. Example: ```ts class Counter { private counter: number; count() { console.log(this.counter++); const counterString = `${this.counter++}`; } } ``` - [#6839](https://github.com/biomejs/biome/pull/6839) [`4cd62d8`](https://github.com/biomejs/biome/commit/4cd62d8ae2e5cb24d6f308e05b38003486294548) Thanks [@ematipico](https://github.com/ematipico)! - Fixed a bug where Biome didn't throw any error when `vcs.useIgnoreFile` is set to `true`, and there wasn't any ignore file read. Now Biome correctly throws an error if no ignore files are found. - [#6911](https://github.com/biomejs/biome/pull/6911) [`6d68074`](https://github.com/biomejs/biome/commit/6d68074bf2a2ca4bc514398a180524394690fafe) Thanks [@arendjr](https://github.com/arendjr)! - Fixed [#6838](https://github.com/biomejs/biome/issues/6838): Reduce resource consumption in the Biome Language Server by using non-recursive filesystem watchers instead of recursive ones. Watchers are responsible for notifying Biome of changes to files in the filesystem. We used to set up a single recursive watcher, but that meant that Biome would receive filesystem notifications for _all_ files in your project, even for ignored folders such as `build/` or `dist/` folders. With this patch, we set up non-recursive watchers only for the folders that are relevant to a project. Related to this, we also solved an issue where incoming notifications were incorrectly filtered, causing ignored files to be processed and stored in our module graph anyway. ## What's Changed * chore: check milestone before releasing by @arendjr in https://github.com/biomejs/biome/pull/6791 * chore: add tracing span for `open_file_internal()` by @arendjr in https://github.com/biomejs/biome/pull/6803 * fix(core): correctly identify sync callbacks inside async functions by @arendjr in https://github.com/biomejs/biome/pull/6804 * fix(core): do not update the opened document when change observed by the watcher by @siketyan in https://github.com/biomejs/biome/pull/6818 * feat(html/parser): text expressions by @ematipico in https://github.com/biomejs/biome/pull/6802 * feat(lint): implement `noVueReservedProps` rule by @mdevils in https://github.com/biomejs/biome/pull/6757 * ci: add a job for linting markdown files by @dyc3 in https://github.com/biomejs/biome/pull/6825 * perf: faster function parameters in inference by @arendjr in https://github.com/biomejs/biome/pull/6823 * fix(core): infer for-of and for-in loop variables by @arendjr in https://github.com/biomejs/biome/pull/6809 * chore: fix typo by @nhedger in https://github.com/biomejs/biome/pull/6834 * fix(noUnusedPrivateClassMembers): improve member usage checks in the class by @togami2864 in https://github.com/biomejs/biome/pull/6832 * fix(core): silence diagnostics in scanner by @arendjr in https://github.com/biomejs/biome/pull/6845 * feat: add global vscode and zed settings file to well known files by @dyc3 in https://github.com/biomejs/biome/pull/6798 * fix(css_parser): support a list of identifiers in ::part() pseudo-element selector by @denbezrukov in https://github.com/biomejs/biome/pull/6840 * fix(biome_js_analyze): fixed noInvalidUseBeforeDeclaration false positives by @vladimir-ivanov in https://github.com/biomejs/biome/pull/6794 * fix: classes with single quotes in functions should use double quotes by @darricheng in https://github.com/biomejs/biome/pull/6846 * chore: fix `just new*` commands by @mdevils in https://github.com/biomejs/biome/pull/6853 * chore: fix `noVueReservedProps` changeset by @mdevils in https://github.com/biomejs/biome/pull/6858 * chore: remove platinum sponsor by @ematipico in https://github.com/biomejs/biome/pull/6854 * chore(deps): update github-actions by @renovate[bot] in https://github.com/biomejs/biome/pull/6869 * chore(deps): update dependency eslint to v9.31.0 by @renovate[bot] in https://github.com/biomejs/biome/pull/6868 * chore(deps): update dependency @types/node to v22.16.3 by @renovate[bot] in https://github.com/biomejs/biome/pull/6866 * chore(deps): update dependency @types/node to v22.16.3 by @renovate[bot] in https://github.com/biomejs/biome/pull/6867 * chore(deps): update typescript-eslint monorepo to v8.36.0 by @renovate[bot] in https://github.com/biomejs/biome/pull/6873 * feat(cli): consider configuration when selecting ScanKind by @dyc3 in https://github.com/biomejs/biome/pull/6863 * docs(noImportCycles): add note about computation cost by @dyc3 in https://github.com/biomejs/biome/pull/6864 * fix(css_parser): handle multiple semicolons correctly in blocks (#6485) by @denbezrukov in https://github.com/biomejs/biome/pull/6865 * fix(deps): update dependency prettier to v3.6.2 by @renovate[bot] in https://github.com/biomejs/biome/pull/6874 * chore(deps): update rust crate tokio to 1.46.1 by @renovate[bot] in https://github.com/biomejs/biome/pull/6871 * chore(deps): update rust crate criterion to v3 by @renovate[bot] in https://github.com/biomejs/biome/pull/6876 * fix(deps): update rust crates by @renovate[bot] in https://github.com/biomejs/biome/pull/6875 * fix(lsp): skip unsafe fixes with quick fixes by @ematipico in https://github.com/biomejs/biome/pull/6878 * perf: optimise `noImportCycles` by @arendjr in https://github.com/biomejs/biome/pull/6884 * refactor(css_parser): flatten AnyCssDeclarationWithSemicolon (#6912) by @denbezrukov in https://github.com/biomejs/biome/pull/6879 * feat(biome_js_analyze): added support for call expressions arguments by @vladimir-ivanov in https://github.com/biomejs/biome/pull/6855 * fix(core): scanner ignores files inside VCS by @ematipico in https://github.com/biomejs/biome/pull/6839 * fix(biome_analyze): restore support for multiple consecutive suppression comments with rule instances. by @sterliakov in https://github.com/biomejs/biome/pull/6844 * refactor: make Watcher aware of `ScanKind` by @arendjr in https://github.com/biomejs/biome/pull/6842 * fix(core): infer array indices by @arendjr in https://github.com/biomejs/biome/pull/6898 * fix(core): fix type inference of `this` by @arendjr in https://github.com/biomejs/biome/pull/6901 * fix(linter): fix false positive with `.d.ts` files in `useImportExtensions` by @arendjr in https://github.com/biomejs/biome/pull/6903 * ci: release by @github-actions[bot] in https://github.com/biomejs/biome/pull/6807 * Revert "ci: release" by @ematipico in https://github.com/biomejs/biome/pull/6908 * fix(cli): apply `--assist-enabled` by @ematipico in https://github.com/biomejs/biome/pull/6912 * fix(core): use non-recursive watchers by @arendjr in https://github.com/biomejs/biome/pull/6911 * feat(yaml_parser): parse block sequence by @vohoanglong0107 in https://github.com/biomejs/biome/pull/6727 * feat(linter): add `excludedComponents` option to `useUniqueElementIds` by @sterliakov in https://github.com/biomejs/biome/pull/6723 * ci: release by @github-actions[bot] in https://github.com/biomejs/biome/pull/6909 ## New Contributors * @darricheng made their first contribution in https://github.com/biomejs/biome/pull/6846 **Full Changelog**: https://github.com/biomejs/biome/compare/@biomejs/[email protected]...@biomejs/[email protected]