\n ```\n\n- [#8832](https://github.com/biomejs/biome/pull/8832) [`b08270b`](https://github.com/biomejs/biome/commit/b08270b21b5348e04457c7d6b621569952a744e1) Thanks [@Exudev](https://github.com/Exudev)! - Fixed [#8809](https://github.com/biomejs/biome/issues/8809), [#7985](https://github.com/biomejs/biome/issues/7985), and [#8136](https://github.com/biomejs/biome/issues/8136): the `noSecrets` rule no longer reports false positives on common CamelCase identifiers like `paddingBottom`, `backgroundColor`, `unhandledRejection`, `uncaughtException`, and `IngestGatewayLogGroup`.\n\n The entropy calculation algorithm now uses \"average run length\" to distinguish between legitimate CamelCase patterns (which have longer runs of same-case letters) and suspicious alternating case patterns (which have short runs).\n\n- [#8793](https://github.com/biomejs/biome/pull/8793) [`c19fb0e`](https://github.com/biomejs/biome/commit/c19fb0e4c6b70f0604aa136d784696f8292f66ce) Thanks [@TheBaconWizard](https://github.com/TheBaconWizard)! - Properly handle `parameters` metavariables for `arrow_function` GritQL queries. The following `biome search` command no longer throws an error:\n\n ```shell\n biome search 'arrow_function(parameters=$parameters, body=$body)'\n ```\n\n- [#8561](https://github.com/biomejs/biome/pull/8561) [`981affb`](https://github.com/biomejs/biome/commit/981affb8b6ad7970d081a1686b87f35c1a5a4455) Thanks [@wataryooou](https://github.com/wataryooou)! - Fixed `noUnusedVariables` to ignore type parameters declared in ambient contexts such as `declare module` blocks.\n\n- [#8817](https://github.com/biomejs/biome/pull/8817) [`652cfbb`](https://github.com/biomejs/biome/commit/652cfbb85ab1e7839721dca1f87cacf9577c40ea) Thanks [@dyc3](https://github.com/dyc3)! - Fixed [#8765](https://github.com/biomejs/biome/issues/8765): The HTML parser can now parse directive modifiers with a single colon, e.g. `@keydown.:`.\n\n- [#8704](https://github.com/biomejs/biome/pull/8704) [`a1914d4`](https://github.com/biomejs/biome/commit/a1914d45c80efc90e58dee95b4fa34b3c8154831) Thanks [@Netail](https://github.com/Netail)! - Added the nursery rule [`noRootType`](https://biomejs.dev/linter/rules/no-root-type).\n Disallow the usage of specified root types. (e.g. `mutation` and/or `subscription`)\n\n **Invalid:**\n\n ```json\n {\n \"options\": {\n \"disallow\": [\"mutation\"]\n }\n }\n ```\n\n ```graphql\n type Mutation {\n SetMessage(message: String): String\n }\n ```\n\n- [#8712](https://github.com/biomejs/biome/pull/8712) [`251b47b`](https://github.com/biomejs/biome/commit/251b47ba3e0f47ecaa818b547aeb61be83e1c59c) Thanks [@Netail](https://github.com/Netail)! - Renamed the following GraphQL nursery rules to match the Biome standard:\n - `useUniqueArgumentNames` -> `noDuplicateArgumentNames`\n - `useUniqueFieldDefinitionNames` -> `noDuplicateFieldDefinitionNames`\n - `useUniqueGraphqlOperationName` -> `noDuplicateGraphqlOperationName`\n - `useUniqueInputFieldNames` -> `noDuplicateInputFieldNames`\n - `useUniqueVariableNames` -> `noDuplicateVariableNames`\n\n Run the `biome migrate --write` command to automatically update the configuration file.\n\n- [#7602](https://github.com/biomejs/biome/pull/7602) [`957cd8e`](https://github.com/biomejs/biome/commit/957cd8e83cf543db300dba9fc85e52a3ef6226b5) Thanks [@kedevked](https://github.com/kedevked)! - Added the nursery lint rule `useErrorCause`.\n\n This rule enforces that errors caught in a `catch` clause are not rethrown without wrapping them in a new `Error` object and specifying the original error as the `cause`. This helps preserve the error’s stack trace and context for better debugging.\n\n It can be configured with the following option:\n - `requireCatchParameter`: (default: `true`)\n - When `true`, the rule requires that `catch` clauses have a parameter. If a `throw` statement appears inside a `catch` clause without a parameter, it will be flagged.\n\n **Invalid examples**:\n\n ```js\n try {\n foo();\n } catch {\n throw new Error(\"fail\");\n }\n ```\n\n ```js\n try {\n foo();\n } catch (err) {\n throw new Error(err.message);\n }\n ```\n\n **Valid examples:**\n\n ```js\n try {\n foo();\n } catch (err) {\n throw new Error(\"fail\", { cause: err });\n }\n ```\n\n ```js\n try {\n foo();\n } catch (error) {\n throw new Error(\"Something went wrong\", { cause: error });\n }\n ```\n\n **Valid example** when `requireCatchParameter` is `false`:\n\n Valid:\n\n ```js\n try {\n foo();\n } catch {\n throw new Error(\"fail\");\n }\n ```\n\n- [#8725](https://github.com/biomejs/biome/pull/8725) [`95aba98`](https://github.com/biomejs/biome/commit/95aba98823d80b5581c3e55153d6a8804e690757) Thanks [@dyc3](https://github.com/dyc3)! - Fixed [#8715](https://github.com/biomejs/biome/issues/8715): The CSS parser will now recover slightly better if a semicolon is missing from Tailwind's `@apply` at-rule.\n\n- [#8616](https://github.com/biomejs/biome/pull/8616) [`4ee3bda`](https://github.com/biomejs/biome/commit/4ee3bda49b45084c07051554267756262c201416) Thanks [@Netail](https://github.com/Netail)! - Added the nursery rule [`useLoneAnonymousOperation`](https://biomejs.dev/linter/rules/use-lone-anonymous-operation/). Disallow anonymous operations when more than one operation specified in document.\n\n **Invalid:**\n\n ```graphql\n query {\n fieldA\n }\n\n query B {\n fieldB\n }\n ```\n\n- [#8624](https://github.com/biomejs/biome/pull/8624) [`291c9f2`](https://github.com/biomejs/biome/commit/291c9f2d42a0525e6f7c0b8759db5bb17a815543) Thanks [@taga3s](https://github.com/taga3s)! - Added the nursery rule [`useInlineScriptId`](https://biomejs.dev/linter/rules/use-inline-script-id/) to the Next.js domain.\n This rule enforces `id` attribute on `next/script` components with inline content or `dangerouslySetInnerHTML`.\n\n The following code is invalid:\n\n ```jsx\n import Script from \"next/script\";\n\n export default function Page() {\n return (\n // must have `id` attribute\n );\n }\n ```\n\n- [#8767](https://github.com/biomejs/biome/pull/8767) [`0d15370`](https://github.com/biomejs/biome/commit/0d1537037d96f559a04eb37f6cb5aafb16735ea6) Thanks [@mdevils](https://github.com/mdevils)! - Fixed [#3512](https://github.com/biomejs/biome/issues/3512):\n [`useExhaustiveDependencies`](https://biomejs.dev/linter/rules/use-exhaustive-dependencies/) now properly handles nested destructuring patterns\n from hook results.\n\n ```tsx\n const [[x, y], setXY] = useState([1, 2]);\n useEffect(() => {\n console.log(x, y);\n }, [x, y]); // x and y are now correctly recognized as unstable\n ```\n\n- [#8757](https://github.com/biomejs/biome/pull/8757) [`17ed9d3`](https://github.com/biomejs/biome/commit/17ed9d368edd31ee572aaed92c0867ef1b305c0c) Thanks [@Netail](https://github.com/Netail)! - Added the nursery rule [`noDivRegex`](https://biomejs.dev/linter/rules/no-div-regex). Disallow equal signs explicitly at the beginning of regular expressions.\n\n **Invalid:**\n\n ```js\n var f = function () {\n return /=foo/;\n };\n ```\n\n- [#8836](https://github.com/biomejs/biome/pull/8836) [`aab1d17`](https://github.com/biomejs/biome/commit/aab1d17aaa3619e53340e8f1376c31625f97a8ac) Thanks [@dyc3](https://github.com/dyc3)! - Fixed [#7858](https://github.com/biomejs/biome/issues/7858): Biome now parses Astro files with empty frontmatter blocks.\n\n- [#8755](https://github.com/biomejs/biome/pull/8755) [`3a15c29`](https://github.com/biomejs/biome/commit/3a15c295181ac6399c42017c4039a4ecb72e2dc3) Thanks [@arturalkaim](https://github.com/arturalkaim)! - Fixed [#6670](https://github.com/biomejs/biome/issues/6670). The `$filename` metavariable can now be used in GritQL `where` clauses to filter matches by filename.\n\n- [#8821](https://github.com/biomejs/biome/pull/8821) [`63e68a1`](https://github.com/biomejs/biome/commit/63e68a164ac247ad6c650934f2d2d9ec861eafe7) Thanks [@playhardgopro](https://github.com/playhardgopro)! - Fixed several bugs in Vue conditional rules (`useVueValidVIf`, `useVueValidVElse`, and `useVueValidVElseIf`) related to whitespace handling, newlines, and self-closing tags.\n\n- [#8767](https://github.com/biomejs/biome/pull/8767) [`0d15370`](https://github.com/biomejs/biome/commit/0d1537037d96f559a04eb37f6cb5aafb16735ea6) Thanks [@mdevils](https://github.com/mdevils)! - Fixed [#3685](https://github.com/biomejs/biome/issues/3685):\n [`useExhaustiveDependencies`](https://biomejs.dev/linter/rules/use-exhaustive-dependencies/) now properly handles transparent expression\n wrappers like non-null assertions and type assertions in dependency comparisons.\n\n ```tsx\n useMemo(() => Boolean(myObj!.x), [myObj!.x]); // No longer reports incorrect diagnostics\n useMemo(() => myObj!.x?.y === true, [myObj!.x?.y]); // Now correctly matches dependencies\n ```\n\n- [#8597](https://github.com/biomejs/biome/pull/8597) [`f764007`](https://github.com/biomejs/biome/commit/f7640071fa356808947bb6a4c563a04890311cc0) Thanks [@Netail](https://github.com/Netail)! - Added the nursery rule [`noDuplicateEnumValueNames`](https://biomejs.dev/linter/rules/no-duplicate-enum-value-names/). Enforce unique enum value names.\n\n **Invalid:**\n\n ```graphql\n enum A {\n TEST\n TesT\n }\n ```\n\n- [#8679](https://github.com/biomejs/biome/pull/8679) [`33dfd7c`](https://github.com/biomejs/biome/commit/33dfd7c4eb657e7986040fc32e8840d14d0340ad) Thanks [@ematipico](https://github.com/ematipico)! - Fixed [#8678](https://github.com/biomejs/biome/issues/8678). Now Biome correctly parses components inside Vue, Svelte and Astro files when they have the same name of self-closing elements.\n\n- [#8617](https://github.com/biomejs/biome/pull/8617) [`31a9bfe`](https://github.com/biomejs/biome/commit/31a9bfe57d532183aaf146de892bb670908ad456) Thanks [@Netail](https://github.com/Netail)! - Added the nursery rule [`useLoneExecutableDefinition`](https://biomejs.dev/linter/rules/use-lone-executable-definition/). Require queries, mutations, subscriptions or fragments to be located in separate files.\n\n **Invalid:**\n\n ```graphql\n query Foo {\n id\n }\n\n fragment Bar on Baz {\n id\n }\n ```\n\n- [#8697](https://github.com/biomejs/biome/pull/8697) [`8519669`](https://github.com/biomejs/biome/commit/8519669542b1d923b36afa72ed297f8db54659c8) Thanks [@Faizanq](https://github.com/Faizanq)! - Added the nursery lint rule [`noExcessiveLinesPerFile`](https://biomejs.dev/linter/rules/no-excessive-lines-per-file/) to CSS and GraphQL.\n\n- [#8711](https://github.com/biomejs/biome/pull/8711) [`365f7aa`](https://github.com/biomejs/biome/commit/365f7aa2631700e8379d8633aae676f5de8b0918) Thanks [@Netail](https://github.com/Netail)! - Added new nursery rule [`noDuplicateEnumValues`](https://biomejs.dev/linter/rules/no-duplicate-enum-values), which disallows defining an enum with multiple members initialized to the same value.\n\n- [#8767](https://github.com/biomejs/biome/pull/8767) [`0d15370`](https://github.com/biomejs/biome/commit/0d1537037d96f559a04eb37f6cb5aafb16735ea6) Thanks [@mdevils](https://github.com/mdevils)! - Fixed [#5914](https://github.com/biomejs/biome/issues/5914):\n [`useExhaustiveDependencies`](https://biomejs.dev/linter/rules/use-exhaustive-dependencies/) now properly handles variables declared in the same\n statement.\n\n ```tsx\n const varA = Math.random(),\n varB = useMemo(() => varA, [varA]); // varA is now correctly recognized as needed\n ```\n\n- [#8767](https://github.com/biomejs/biome/pull/8767) [`0d15370`](https://github.com/biomejs/biome/commit/0d1537037d96f559a04eb37f6cb5aafb16735ea6) Thanks [@mdevils](https://github.com/mdevils)! - Fixed [#8427](https://github.com/biomejs/biome/issues/8427):\n [`useExhaustiveDependencies`](https://biomejs.dev/linter/rules/use-exhaustive-dependencies/) now properly resolves variable references to detect\n captured dependencies.\n\n ```tsx\n const fe = fetchEntity;\n useEffect(() => {\n fe(id);\n }, [id, fe]); // fe is now correctly detected as needed\n ```\n\n- [#8767](https://github.com/biomejs/biome/pull/8767) [`0d15370`](https://github.com/biomejs/biome/commit/0d1537037d96f559a04eb37f6cb5aafb16735ea6) Thanks [@mdevils](https://github.com/mdevils)! - Fixed [#8484](https://github.com/biomejs/biome/issues/8484):\n [`useExhaustiveDependencies`](https://biomejs.dev/linter/rules/use-exhaustive-dependencies/) now properly handles member access on stable hook\n results.\n\n ```tsx\n const stableObj = useStable();\n useMemo(() => {\n return stableObj.stableValue; // stableObj.stableValue is now correctly recognized as stable\n }, []);\n ```\n\n- [#8767](https://github.com/biomejs/biome/pull/8767) [`0d15370`](https://github.com/biomejs/biome/commit/0d1537037d96f559a04eb37f6cb5aafb16735ea6) Thanks [@mdevils](https://github.com/mdevils)! - Fixed [#7982](https://github.com/biomejs/biome/issues/7982):\n [`useExhaustiveDependencies`](https://biomejs.dev/linter/rules/use-exhaustive-dependencies/) now properly handles callback expressions with type\n assertions.\n\n ```tsx\n const callback = useCallback(\n (() => {\n return count * 2;\n }) as Function,\n [count], // count is now correctly detected\n );\n ```\n\n- [#8766](https://github.com/biomejs/biome/pull/8766) [`39eb545`](https://github.com/biomejs/biome/commit/39eb545a9750d1b12b85c88fa052df9a334ba2b9) Thanks [@Netail](https://github.com/Netail)! - Fixed [#8761](https://github.com/biomejs/biome/issues/8761): Reverted wrapping the URL of rule descriptions with `<>`, causing broken URLs in VSCode.\n\n- [#8767](https://github.com/biomejs/biome/pull/8767) [`0d15370`](https://github.com/biomejs/biome/commit/0d1537037d96f559a04eb37f6cb5aafb16735ea6) Thanks [@mdevils](https://github.com/mdevils)! - Fixed [#3080](https://github.com/biomejs/biome/issues/3080):\n [`useExhaustiveDependencies`](https://biomejs.dev/linter/rules/use-exhaustive-dependencies/) now properly analyzes captures within referenced\n functions passed to hooks.\n\n ```tsx\n function myEffect() {\n console.log(foo, bar);\n }\n useEffect(myEffect, [foo, bar]); // foo and bar are now correctly detected\n ```\n\n- [#8740](https://github.com/biomejs/biome/pull/8740) [`4962ed0`](https://github.com/biomejs/biome/commit/4962ed0d11bc5155aa9a89bf98fac9412f43c8f9) Thanks [@Netail](https://github.com/Netail)! - Extra rule source references. `biome migrate eslint` should do a bit better detecting rules in your eslint configurations.\n\n- [#8776](https://github.com/biomejs/biome/pull/8776) [`395746f`](https://github.com/biomejs/biome/commit/395746f9a0147ab766fc3cded3883857c02d9c16) Thanks [@codiini](https://github.com/codiini)! - Fixed [#6003](https://github.com/biomejs/biome/issues/6003): `noUselessUndefinedInitialization` no longer reports exported variables initialized to `undefined`. In Svelte 4, this pattern is used to declare optional component props.\n\n- [#8767](https://github.com/biomejs/biome/pull/8767) [`0d15370`](https://github.com/biomejs/biome/commit/0d1537037d96f559a04eb37f6cb5aafb16735ea6) Thanks [@mdevils](https://github.com/mdevils)! - Fixed [#4248](https://github.com/biomejs/biome/issues/4248):\n [`useExhaustiveDependencies`](https://biomejs.dev/linter/rules/use-exhaustive-dependencies/) now correctly handles function props passed as\n callbacks.\n\n ```tsx\n const data = React.useMemo(getData, [getData]); // getData is now correctly recognized as needed\n ```\n\n- [#8819](https://github.com/biomejs/biome/pull/8819) [`bc191ff`](https://github.com/biomejs/biome/commit/bc191ff7e515946d40d1e8440ede09cf9f291fa7) Thanks [@Netail](https://github.com/Netail)! - Fixed [#6567](https://github.com/biomejs/biome/issues/6567):\n [`noUnknownProperty`](https://biomejs.dev/linter/rules/no-unknown-property/) now ignores unknown properties in at-rules which support descriptors.\n\n- [#8787](https://github.com/biomejs/biome/pull/8787) [`adb652f`](https://github.com/biomejs/biome/commit/adb652fe94788ded0c76ae7146206dd286035e15) Thanks [@tuyuritio](https://github.com/tuyuritio)! - Fixed [#8777](https://github.com/biomejs/biome/issues/8777): Add support for `:active-view-transition` pseudo-class.\n\n- [#8639](https://github.com/biomejs/biome/pull/8639) [`6577e32`](https://github.com/biomejs/biome/commit/6577e32ddf855bd1b1cc05b0f496b89001ce2925) Thanks [@ohnoah](https://github.com/ohnoah)! - Added the nursery lint rule [`noExcessiveLinesPerFile`](https://biomejs.dev/linter/rules/no-excessive-lines-per-file/).\n Biome now reports files that exceed a configurable line limit.\n\n ```js\n // maxLines: 2\n const a = 1;\n const b = 2;\n const c = 3;\n ```\n\n- [#8753](https://github.com/biomejs/biome/pull/8753) [`71b5c6e`](https://github.com/biomejs/biome/commit/71b5c6e2ecf544e979527c79d41cfe85c148047d) Thanks [@Netail](https://github.com/Netail)! - Added the nursery rule [`noExcessiveClassesPerFile`](https://biomejs.dev/linter/rules/no-excessive-classes-per-file). Enforce a maximum number of classes per file.\n\n **Invalid:**\n\n ```js\n class Foo {}\n class Bar {}\n ```\n\n- [#8754](https://github.com/biomejs/biome/pull/8754) [`d6b2bda`](https://github.com/biomejs/biome/commit/d6b2bda038d0bfa5db040bef434741d09733b8fc) Thanks [@Netail](https://github.com/Netail)! - Added the nursery rule [`noFloatingClasses`](https://biomejs.dev/linter/rules/no-floating-classes). Disallow `new` operators outside of assignments or comparisons.\n\n **Invalid:**\n\n ```js\n new Date();\n ```\n\n\n\n## What's Changed\n* feat(graphql_analyze): implement useUniqueEnumValueNames by @Netail in https://github.com/biomejs/biome/pull/8597\n* chore(github): update issue templates by @DayKev in https://github.com/biomejs/biome/pull/8668\n* feat(graphql_analyze): implement useLoneExecutableDefinition by @Netail in https://github.com/biomejs/biome/pull/8617\n* chore: remove old unused options by @Netail in https://github.com/biomejs/biome/pull/8676\n* feat(biome_js_analyze): implement noExcessiveLinesPerFile by @ohnoah in https://github.com/biomejs/biome/pull/8639\n* chore(deps): update github-actions by @renovate[bot] in https://github.com/biomejs/biome/pull/8684\n* chore(deps): update dependency tombi to v0.7.14 by @renovate[bot] in https://github.com/biomejs/biome/pull/8683\n* fix(html/parser): parsing of components by @ematipico in https://github.com/biomejs/biome/pull/8679\n* chore(deps): update rust crate libc to 0.2.179 by @renovate[bot] in https://github.com/biomejs/biome/pull/8686\n* fix(deps): update rust crate libc to 0.2.179 by @renovate[bot] in https://github.com/biomejs/biome/pull/8688\n* chore(deps): update dependency dprint to v0.51.1 by @renovate[bot] in https://github.com/biomejs/biome/pull/8689\n* chore(deps): update taiki-e/install-action action to v2.65.13 by @renovate[bot] in https://github.com/biomejs/biome/pull/8687\n* feat: add useErrorCause Rule by @kedevked in https://github.com/biomejs/biome/pull/7602\n* fix(lint): noUnusedVariables should ignore type parameters in ambient context by @wataryooou in https://github.com/biomejs/biome/pull/8561\n* chore: add css, graphql & html new assist rule tasks by @Netail in https://github.com/biomejs/biome/pull/8703\n* feat(analyze/html): add noDuplicateAttributes by @dyc3 in https://github.com/biomejs/biome/pull/8653\n* feat(graphql_analyze): implement noRootType by @Netail in https://github.com/biomejs/biome/pull/8704\n* chore: rename GraphQL nursery rules by @Netail in https://github.com/biomejs/biome/pull/8712\n* docs: fix 'instaiated' typo in no-invalid-builtin-instantiation by @JoshuaKGoldberg in https://github.com/biomejs/biome/pull/8716\n* feat(js_analyze): implement noDuplicateEnumValues by @Netail in https://github.com/biomejs/biome/pull/8711\n* fix(parse/css): slightly better recovery for `@apply` by @dyc3 in https://github.com/biomejs/biome/pull/8725\n* chore: extra rule sources by @Netail in https://github.com/biomejs/biome/pull/8740\n* chore(deps): update rust crate jiff to 0.2.18 by @renovate[bot] in https://github.com/biomejs/biome/pull/8745\n* chore(deps): update dependency tombi to v0.7.16 by @renovate[bot] in https://github.com/biomejs/biome/pull/8744\n* chore(deps): update rust crate proc-macro2 to 1.0.105 by @renovate[bot] in https://github.com/biomejs/biome/pull/8747\n* chore(deps): update rust crate serde_json to 1.0.149 by @renovate[bot] in https://github.com/biomejs/biome/pull/8749\n* chore(deps): update rust crate quote to 1.0.43 by @renovate[bot] in https://github.com/biomejs/biome/pull/8748\n* chore(deps): update rust crate libc to 0.2.180 by @renovate[bot] in https://github.com/biomejs/biome/pull/8746\n* chore(deps): update github-actions by @renovate[bot] in https://github.com/biomejs/biome/pull/8743\n* chore(deps): update rust crate url to 2.5.8 by @renovate[bot] in https://github.com/biomejs/biome/pull/8750\n* chore(deps): update pnpm to v10.27.0 by @renovate[bot] in https://github.com/biomejs/biome/pull/8752\n* fix(deps): update rust crates by @renovate[bot] in https://github.com/biomejs/biome/pull/8751\n* fix(grit): make $filename metavariable accessible in GritQL plugins by @arturalkaim in https://github.com/biomejs/biome/pull/8755\n* fix(biome_configuration): revert URL brackets by @Netail in https://github.com/biomejs/biome/pull/8766\n* fix(linter): `useExhaustiveDependencies` multiple fixes (fixes #3080, fixes #4248, fixes #5914, fixes #8427, fixes #8484, fixes #3685, fixes #3512, fixes #7982) by @mdevils in https://github.com/biomejs/biome/pull/8767\n* feat(lint): add noVueOptionsApi rule by @BaeSeokJae in https://github.com/biomejs/biome/pull/8648\n* feat(biome_js_analyze): port `useInlineScriptId` from Next.js by @taga3s in https://github.com/biomejs/biome/pull/8624\n* docs: fix typo inside `biome_analyze/CONTRIBUTING.md` by @Bertie690 in https://github.com/biomejs/biome/pull/8781\n* ci: sanity check to make sure wasm artifact exists by @dyc3 in https://github.com/biomejs/biome/pull/8784\n* feat(js_analyze): implement noDivRegex by @Netail in https://github.com/biomejs/biome/pull/8757\n* fix(linter): add support for active-view-transition pseudo-class by @tuyuritio in https://github.com/biomejs/biome/pull/8787\n* fix(justfile): remove errant `run` argument from test commands by @jfmcdowell in https://github.com/biomejs/biome/pull/8789\n* feat(js_analyze): implement noFloatingClasses by @Netail in https://github.com/biomejs/biome/pull/8754\n* feat(js_analyze): implement noExcessiveClassesPerFile by @Netail in https://github.com/biomejs/biome/pull/8753\n* chore(deps): update rust:1.92.0-bookworm docker digest to e90e846 by @renovate[bot] in https://github.com/biomejs/biome/pull/8791\n* chore(deps): update rust:1.92.0-bullseye docker digest to c6d501c by @renovate[bot] in https://github.com/biomejs/biome/pull/8792\n* chore(deps): update dependency tombi to v0.7.19 by @renovate[bot] in https://github.com/biomejs/biome/pull/8795\n* chore(deps): update dependency @types/node to v24.10.9 by @renovate[bot] in https://github.com/biomejs/biome/pull/8794\n* chore(deps): update rust crate bpaf to 0.9.22 by @renovate[bot] in https://github.com/biomejs/biome/pull/8796\n* chore(deps): update rust crate tower to 0.5.3 by @renovate[bot] in https://github.com/biomejs/biome/pull/8797\n* fix(deps): update @biomejs packages by @renovate[bot] in https://github.com/biomejs/biome/pull/8798\n* chore(deps): update github-actions by @renovate[bot] in https://github.com/biomejs/biome/pull/8799\n* chore(deps): update rust crate indexmap to 2.13.0 by @renovate[bot] in https://github.com/biomejs/biome/pull/8801\n* chore(deps): update pnpm to v10.28.0 by @renovate[bot] in https://github.com/biomejs/biome/pull/8800\n* fix(linter): noUselessUndefinedInitialization false positive in svelte 4. by @codiini in https://github.com/biomejs/biome/pull/8776\n* feat(html): add various helpers to html syntax nodes by @dyc3 in https://github.com/biomejs/biome/pull/8804\n* fix(grit): correct `arrow_function` slot indices for GritQL patterns by @TheBaconWizard in https://github.com/biomejs/biome/pull/8793\n* feat(linter): add noExcessiveLinesPerFile to CSS and GraphQL by @Faizanq in https://github.com/biomejs/biome/pull/8697\n* docs(organizeImports): add a note for full import merging by @Conaclos in https://github.com/biomejs/biome/pull/8811\n* docs(organizeImports): fix note about import merging by @Conaclos in https://github.com/biomejs/biome/pull/8813\n* feat(dx): add prettier-compare tool by @dyc3 in https://github.com/biomejs/biome/pull/8805\n* feat(graphql_analyze): implement useLoneAnonymousOperation by @Netail in https://github.com/biomejs/biome/pull/8616\n* fix(parse/html/vue): accept colon modifier in vue directives by @dyc3 in https://github.com/biomejs/biome/pull/8817\n* fix(linter): reduce `noSecrets` false positives on CamelCase identifiers by @Exudev in https://github.com/biomejs/biome/pull/8832\n* feat(prettier-compare): support astro by @dyc3 in https://github.com/biomejs/biome/pull/8835\n* fix(parse/html/astro): accept astro files with empty frontmatter by @dyc3 in https://github.com/biomejs/biome/pull/8836\n* fix(css_analyze): ignore at-rules supporting descriptors by @Netail in https://github.com/biomejs/biome/pull/8819\n* chore: ignore `prettier-compare` pkg by @ematipico in https://github.com/biomejs/biome/pull/8843\n* chore: update sponsors by @ematipico in https://github.com/biomejs/biome/pull/8844\n* fix(lint): handle newlines in useVueValidVElse and useVueValidVElseIf by @playhardgopro in https://github.com/biomejs/biome/pull/8821\n* ci: release by @github-actions[bot] in https://github.com/biomejs/biome/pull/8671\n\n## New Contributors\n* @DayKev made their first contribution in https://github.com/biomejs/biome/pull/8668\n* @ohnoah made their first contribution in https://github.com/biomejs/biome/pull/8639\n* @wataryooou made their first contribution in https://github.com/biomejs/biome/pull/8561\n* @JoshuaKGoldberg made their first contribution in https://github.com/biomejs/biome/pull/8716\n* @arturalkaim made their first contribution in https://github.com/biomejs/biome/pull/8755\n* @BaeSeokJae made their first contribution in https://github.com/biomejs/biome/pull/8648\n* @tuyuritio made their first contribution in https://github.com/biomejs/biome/pull/8787\n* @codiini made their first contribution in https://github.com/biomejs/biome/pull/8776\n* @TheBaconWizard made their first contribution in https://github.com/biomejs/biome/pull/8793\n* @Faizanq made their first contribution in https://github.com/biomejs/biome/pull/8697\n* @Exudev made their first contribution in https://github.com/biomejs/biome/pull/8832\n* @playhardgopro made their first contribution in https://github.com/biomejs/biome/pull/8821\n\n**Full Changelog**: https://github.com/biomejs/biome/compare/@biomejs/biome@2.3.11...@biomejs/biome@2.3.12","url":"https://announcehq.com/biome/4015487e-9f68-4d39-8e1a-db5e953736f5","datePublished":"2026-01-23T15:54:45.000Z","dateModified":"2026-01-23T15:54:45.000Z","author":{"@type":"Organization","name":"biome","url":"https://github.com/biomejs/biome"},"publisher":{"@type":"Organization","name":"AnnounceHQ","url":"https://announcehq.com","logo":{"@type":"ImageObject","url":"https://announcehq.com/logo.png"}},"mainEntityOfPage":{"@type":"WebPage","@id":"https://announcehq.com/biome/4015487e-9f68-4d39-8e1a-db5e953736f5"},"isPartOf":{"@type":"WebPage","@id":"https://announcehq.com/biome","name":"biome Changelog"},"about":{"@type":"SoftwareApplication","name":"biome"},"keywords":"biome, release notes, changelog, new, software update"}
Biome now reports Vue Options API usage, which is incompatible with Vue 3.6's Vapor Mode.
This rule detects Options API patterns in <script> blocks, defineComponent(), and createApp() calls,
helping prepare codebases for Vapor Mode adoption.
For example, the following now triggers this rule:
#8832b08270b Thanks @Exudev! - Fixed #8809, #7985, and #8136: the noSecrets rule no longer reports false positives on common CamelCase identifiers like paddingBottom, backgroundColor, unhandledRejection, uncaughtException, and IngestGatewayLogGroup.
The entropy calculation algorithm now uses "average run length" to distinguish between legitimate CamelCase patterns (which have longer runs of same-case letters) and suspicious alternating case patterns (which have short runs).
#8793c19fb0e Thanks @TheBaconWizard! - Properly handle parameters metavariables for arrow_function GritQL queries. The following biome search command no longer throws an error:
This rule enforces that errors caught in a catch clause are not rethrown without wrapping them in a new Error object and specifying the original error as the cause. This helps preserve the error’s stack trace and context for better debugging.
It can be configured with the following option:
requireCatchParameter: (default: true)
When true, the rule requires that catch clauses have a parameter. If a throw statement appears inside a catch clause without a parameter, it will be flagged.
#8624291c9f2 Thanks @taga3s! - Added the nursery rule useInlineScriptId to the Next.js domain.
This rule enforces id attribute on next/script components with inline content or dangerouslySetInnerHTML.
The following code is invalid:
import Script from "next/script";
export default function Page() {
return (
<Script>{`console.log('Hello');`}</Script> // must have `id` attribute
);
}
const [[x, y], setXY] = useState([1, 2]);
useEffect(() => {
console.log(x, y);
}, [x, y]); // x and y are now correctly recognized as unstable
#875717ed9d3 Thanks @Netail! - Added the nursery rule noDivRegex. Disallow equal signs explicitly at the beginning of regular expressions.
Invalid:
var f = function () {
return /=foo/;
};
#8836aab1d17 Thanks @dyc3! - Fixed #7858: Biome now parses Astro files with empty frontmatter blocks.
#87553a15c29 Thanks @arturalkaim! - Fixed #6670. The $filename metavariable can now be used in GritQL where clauses to filter matches by filename.
#882163e68a1 Thanks @playhardgopro! - Fixed several bugs in Vue conditional rules (useVueValidVIf, useVueValidVElse, and useVueValidVElseIf) related to whitespace handling, newlines, and self-closing tags.
#867933dfd7c Thanks @ematipico! - Fixed #8678. Now Biome correctly parses components inside Vue, Svelte and Astro files when they have the same name of self-closing elements.
#8711365f7aa Thanks @Netail! - Added new nursery rule noDuplicateEnumValues, which disallows defining an enum with multiple members initialized to the same value.
function myEffect() {
console.log(foo, bar);
}
useEffect(myEffect, [foo, bar]); // foo and bar are now correctly detected
#87404962ed0 Thanks @Netail! - Extra rule source references. biome migrate eslint should do a bit better detecting rules in your eslint configurations.
#8776395746f Thanks @codiini! - Fixed #6003: noUselessUndefinedInitialization no longer reports exported variables initialized to undefined. In Svelte 4, this pattern is used to declare optional component props.