unstale

npm / @biomejs/biome

@biomejs/biome

What changed in @biomejs/biome 2, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-18.

10 breaking4 security40 new APIs and options17 performance13 behavior and defaults18 tooling143 fixes and other

See which of these apply to your code, ranked, in your agent:

npx @unstale/cli init

@unstale/cli 0.1.1 on npm

@biomejs/biome 2245 changes

Breaking changes 10

  • The CLI now emits an error when the configuration has errors.

    2.5.15release notes

  • Configuration file errors are no longer silently ignored and are checked before any command executes.

    2.5.15release notes

  • Now reports mismatched closing tags and top-level closing tags without openings; tag names are matched case-insensitively.

    2.5.15release notes

  • The rule now reports directives inside Astro template expressions.

    2.5.15release notes

  • Reports React Compiler diagnostics regardless of the React version declared in package.json.

    2.5.15release notes

  • Removes special HTML formatter handling for the obsolete listing element.

    2.5.14release notes

  • Combining readonly and accessor modifiers in either order now reports that they cannot be used together.

    2.5.14release notes

  • Biome now reports HTML comments between Svelte tag attributes as parse errors.

    2.5.12release notes

  • Braces inside Astro <math> elements no longer open expressions, so LaTeX such as R^{2x} survives as text; <svg> is unaffected.

    2.5.10release notes

  • HTML style attribute values are parsed as CSS, and all Biome CSS lint rules are applied to them.

    2.5.8release notes

Security 4

  • Restricts access to the Unix daemon socket to the Biome user; it is stored in a user-accessible cache directory and uses mode 0600.

    2.5.15release notes

  • Unix daemon socket permissions are now restricted.

    2.5.15release notes

  • Biome reports a diagnostic for excessively deep syntax instead of overflowing the native stack while releasing the parsed tree.

    2.5.12release notes

  • A new nursery rule disallows Astro's set:html directive because untrusted content can introduce cross-site scripting vulnerabilities.

    2.5.11release notes

New APIs and options 40

  • Markdown now supports suppressions.

    2.5.15release notes

  • Added the noAstroConflictingSetDirectives rule for .astro files.

    2.5.15release notes

  • Added the noMeaninglessVoidOperator lint rule.

    2.5.15release notes

  • Added the noMisplacedListElements lint rule.

    2.5.15release notes

  • Added the noSelfImport lint rule.

    2.5.15release notes

  • Added the noSvelteExportLet lint rule.

    2.5.15release notes

  • Added the noTailwindRawColors lint rule.

    2.5.15release notes

  • Added the useLogicalProperties lint rule.

    2.5.15release notes

  • Added the usePromiseRejectErrors lint rule.

    2.5.15release notes

  • Added the useStrictBooleanExpressions lint rule.

    2.5.15release notes

  • Added the useSvelteKitRuneImports lint rule.

    2.5.15release notes

  • YAML formatting now supports suppression comments.

    2.5.15release notes

  • GritQL plugins can use contains on import-clause metavariables in import patterns.

    2.5.14release notes

  • Adds the Markdownlint MD040 rule for fenced code language declarations.

    2.5.14release notes

  • Implements the noJsonUnsafeValues JSON lint rule.

    2.5.14release notes

  • Adds the noObsoleteTags lint rule.

    2.5.14release notes

  • Adds the noReturnInFinally lint rule.

    2.5.14release notes

  • Adds the noSvelteAtDebugTags lint rule.

    2.5.14release notes

  • Adds the noSvelteAtDebugTags lint rule.

    2.5.14release notes

  • Adds @shadcn/lint as a lint rule source.

    2.5.14release notes

  • Adds the useConsistentFunctionStyle lint rule.

    2.5.14release notes

  • Implements the useConsistentObjectKeys JSON lint rule.

    2.5.14release notes

  • Adds the requireExplicitCase option to useExhaustiveSwitchCases.

    2.5.14release notes

  • Implements the useValidTestTitle lint rule.

    2.5.14release notes

  • Adds parsing support for GitHub Flavored Markdown.

    2.5.13release notes

  • Adds code fix mutation support for plugins.

    2.5.13release notes

  • Adds rule context support for plugins.

    2.5.13release notes

  • Adds semantic model support for plugins.

    2.5.13release notes

  • Adds JavaScript traversal methods for plugins.

    2.5.13release notes

  • Adds the Markdown MD025 single top-level heading rule.

    2.5.12release notes

  • JavaScript plugins now support TypeScript.

    2.5.11release notes

  • JavaScript plugins can query AST nodes by their kind.

    2.5.10release notes

  • JavaScript plugins gain runtime AST bindings.

    2.5.10release notes

  • Markdown frontmatter parsing support was added.

    2.5.10release notes

  • JavaScript plugins can be enabled in WASM through the unstable feature.

    2.5.10release notes

  • biome rage now includes BIOME_BINARY in its environment variable metadata.

    2.5.9release notes

  • biome rage now includes BIOME_LOG_FILE in its environment variable metadata.

    2.5.9release notes

  • A new nursery rule reports Astro client:only directives without an initializer.

    2.5.9release notes

  • Added support for the SCSS nesting combinator.

    2.5.8release notes

  • Added the useTopLevelHeading rule.

    2.5.8release notes

Performance 17

  • The HTML formatter is up to 4x faster.

    2.5.15release notes

  • Indexing and analysis of big files are up to 2x faster, especially in projects using project and types lint rules.

    2.5.15release notes

  • Type inference is significantly faster, with benchmark speedups of about 2–240x for some popular libraries, affecting all rules that use type information.

    2.5.15release notes

  • Improves formatting performance for documents containing many HTML-native or SVG-native tags.

    2.5.14release notes

  • Formatting and checking large parenthesized object expressions no longer exhibit quadratic slowdowns.

    2.5.14release notes

  • Improves formatter performance by up to approximately 50% in some cases.

    2.5.13release notes

  • Improves linting performance for large CSS and JSON files.

    2.5.13release notes

  • Improves type inference performance by avoiding resolution of unused members in object arguments.

    2.5.12release notes

  • Calls to non-Promise methods on third-party TypeScript classes are classified using targeted type information instead of expensive full type inference.

    2.5.11release notes

  • Rule performance was improved.

    2.5.10release notes

  • Rule performance was improved.

    2.5.10release notes

  • Rule performance was improved.

    2.5.10release notes

  • Rule performance was improved.

    2.5.10release notes

  • Rule performance was improved.

    2.5.10release notes

  • Rule performance was improved.

    2.5.10release notes

  • Rule performance was improved.

    2.5.10release notes

  • Rule performance was improved.

    2.5.10release notes

Behavior and default changes 13

  • Type lowering now handles computed members and infers symbol-keyed access.

    2.5.15release notes

  • Watched-file patterns are scoped to each workspace folder, with deprecated rootUri fallback and compatible absolute glob patterns for clients without relative-pattern support.

    2.5.15release notes

  • When plugins fail to load, Biome prints each failing plugin's path on its own line instead of concatenating error messages.

    2.5.15release notes

  • Type lowering now handles readonly types and infers const generics.

    2.5.15release notes

  • SCSS now supports interpolation in containers, layers, property names, and the attr function.

    2.5.15release notes

  • SCSS now allows nested declarations.

    2.5.15release notes

  • Can now match TypeScript interface snippets.

    2.5.14release notes

  • Expands the cases supported by the useIncludes lint rule.

    2.5.14release notes

  • Adds support for interpolated SCSS URL values.

    2.5.12release notes

  • Interpolation delimiters stay attached to whitespace-sensitive boundaries and adjacent inline siblings, wrapping expressions when needed to fit the configured line width.

    2.5.11release notes

  • Template literal attribute values are now supported in Astro.

    2.5.10release notes

  • The Tailwind parser now understands container-query variants, child and descendant variants, combinator selectors in arbitrary variants, variant modifiers, and arbitrary container-query sizes.

    2.5.9release notes

  • Added ordering of variants in sort_v4.

    2.5.8release notes

Tooling 18

  • Type lowering now handles array type syntax.

    2.5.15release notes

  • Multiline Astro expressions are indented at the surrounding markup column, and biome format now formats Astro expressions too.

    2.5.15release notes

  • Type lowering now handles generic type constraints.

    2.5.15release notes

  • Type lowering now includes global functions from source declarations.

    2.5.15release notes

  • Type lowering now handles indexed access types.

    2.5.15release notes

  • Type inference now lowers Intl namespace declarations.

    2.5.15release notes

  • Type lowering now handles keyof type operators.

    2.5.15release notes

  • Added a lint rule that detects React object types used as default props.

    2.5.15release notes

  • Type lowering now handles Symbol call signatures.

    2.5.15release notes

  • Type lowering now handles Symbol static members.

    2.5.15release notes

  • Adds suite() as an alias of describe() across test analysis rules and formatter; rules also recognize fsuite, xsuite, and test.suite blocks.

    2.5.14release notes

  • Test rules accept suite() as an alias of describe().

    2.5.14release notes

  • Adds detection of undeclared custom Vue directives.

    2.5.14release notes

  • Can capture and inspect multiple named import specifiers and match captured JSX component names against snippets such as React.Fragment.

    2.5.13release notes

  • Astro fragment shorthand is now supported.

    2.5.10release notes

  • A JavaScript transform can erase type annotations in TypeScript code.

    2.5.10release notes

  • biome rage now includes RUST_BACKTRACE in its environment variable metadata.

    2.5.9release notes

  • Added a Markdown linter.

    2.5.8release notes

Fixes and other changes 143

  • Fixed Astro formatting of embedded content.

    2.5.15release notes

  • No longer adds invalid parentheses around Svelte {@const} declarations when experimental HTML support and formatting are enabled.

    2.5.15release notes

  • Biome no longer crashes when output is piped to a program that exits early; output to the closed pipe is discarded and Biome exits normally.

    2.5.15release notes

  • The CLI no longer crashes when output is piped to a closed pipe.

    2.5.15release notes

  • Type inference now fully lowers Date constructor members.

    2.5.15release notes

  • Disabling one domain no longer disables rules that also belong to another enabled domain; explicitly configured rules also remain enabled.

    2.5.15release notes

  • Fixed incorrect type inference when generic parameters are reused across inherited types or swapped in recursive types.

    2.5.15release notes

  • No longer inserts a space after a within pattern without an until clause.

    2.5.15release notes

  • No longer duplicates comments around Svelte blocks, including comments after blocks and comments before branch or closing tags.

    2.5.15release notes

  • No longer removes the space between text and an inline element on the next line when joining lines.

    2.5.15release notes

  • Regex literals beginning with > no longer terminate self-closing tags; regex literals after keywords such as return are recognized too.

    2.5.15release notes

  • The parser now compares complete opening and closing tag names.

    2.5.15release notes

  • The HTML lexer now treats a regex beginning with > as a regex.

    2.5.15release notes

  • The parser no longer misparses << as type arguments when the closing > is missing.

    2.5.15release notes

  • Long-running workspaces now reflect package manifest and TypeScript path-mapping changes without requiring the importing file to be edited.

    2.5.15release notes

  • No longer reports chained method calls such as builder.image(url).fit("max") as focused tests.

    2.5.15release notes

  • The rule now ignores chained .fit() method calls.

    2.5.15release notes

  • The fix now preserves the string value for octal escapes with a leading digit 4–7.

    2.5.15release notes

  • No longer reports view transition names inside view transition pseudo-elements.

    2.5.15release notes

  • The rule now ignores view transition names in pseudo-elements.

    2.5.15release notes

  • No longer offers a safe fix for return; as the body of an unbraced if, else, or label; safe fixes also preserve surrounding comments.

    2.5.15release notes

  • The rule skips fixes for unbraced bodies and keeps comments.

    2.5.15release notes

  • String concatenation fixes now escape quotes.

    2.5.15release notes

  • Rules enabled by overlapping domains are now preserved.

    2.5.15release notes

  • VCS checks now account for parent ignore files.

    2.5.15release notes

  • The language server now handles relative glob patterns correctly.

    2.5.15release notes

  • The SCSS parser now accepts if inside a url function.

    2.5.15release notes

  • SCSS query values now support unary expressions.

    2.5.15release notes

  • Suppression comments now work on affected parts of HTML-like files and on snippets embedded in JavaScript files.

    2.5.15release notes

  • Comments at the end of a Svelte block's contents are now indented with the contents rather than the following tag.

    2.5.15release notes

  • Formatting now preserves const tag assignment syntax and fixes duplicate or incorrectly indented comments around Svelte blocks.

    2.5.15release notes

  • Tailwind classes in class expressions are now detected.

    2.5.15release notes

  • Tailwind classes are now detected in Svelte, Vue, and Astro class attribute expressions that do not use a class merging function.

    2.5.15release notes

  • Test rules no longer mistake regular method calls named test, it, or describe for tests.

    2.5.15release notes

  • More global types, including Array, Map, and Set, are fully defined, which should decrease false positives on typed rules.

    2.5.15release notes

  • Type-aware rules now resolve members through generic type aliases that instantiate another generic type with a nested generic argument.

    2.5.15release notes

  • Parses f<T> << f<T> as a left shift of two instantiation expressions, matching TypeScript instead of reporting a parse error.

    2.5.15release notes

  • A << expression followed by a later >>> is no longer misparsed as TypeScript type arguments.

    2.5.15release notes

  • The rule now preserves negative index expressions.

    2.5.15release notes

  • The rule now ignores loops that update the index in the loop body.

    2.5.15release notes

  • Removed the React 19 version requirement from the rule.

    2.5.15release notes

  • The rule no longer escapes a slash that is already escaped.

    2.5.15release notes

  • No longer reports boolean literals on the right side of || and && outside boolean contexts, where removing them can change the expression result.

    2.5.15release notes

  • Now evaluates parent directory patterns when matching child paths, preserving re-included directories while ignoring excluded siblings.

    2.5.15release notes

  • Linting now recognizes Vue slot bindings.

    2.5.15release notes

  • Typed slot props no longer produce a parse error, and types in slot prop annotations are recognized as used by noUnusedVariables.

    2.5.15release notes

  • Suppression comments targeting the entire assist category, including biome-ignore-all assist, are respected when running check.

    2.5.14release notes

  • Correctly writes fixes for code inside HTML attribute expressions instead of reporting fixable diagnostics without applying them.

    2.5.14release notes

  • No longer fails with conflicting rule fixes when multiple diagnostics target a declaration preceded by a multiline comment.

    2.5.14release notes

  • Correctly writes fixes for code inside HTML attribute expressions instead of reporting fixable diagnostics without applying them.

    2.5.14release notes

  • No longer modify the wrong part of Vue, Svelte, or Astro files when experimental full HTML support is disabled.

    2.5.14release notes

  • Fixes are now written back to attribute-expression embeds in HTML.

    2.5.14release notes

  • Associates annotations with the correct files when Biome runs from a nested directory.

    2.5.14release notes

  • Files re-included by negation patterns in a nested .gitignore are processed when vcs.useIgnoreFile is enabled, even if the ignore file contains *.

    2.5.14release notes

  • Grit plugin code fixes are now available as editor code actions.

    2.5.14release notes

  • Plugins that use sequential no longer panic when Biome processes files.

    2.5.14release notes

  • Import patterns now match namespace imports, including type-only imports; explicit import type patterns also match type-only named and namespace imports.

    2.5.14release notes

  • Preserves authored segment breaks between CJK characters and next to CJK punctuation instead of replacing them with spaces.

    2.5.14release notes

  • No longer applies native HTML element formatting to PascalCase component names in Vue, Svelte, and Astro files.

    2.5.14release notes

  • No longer applies SVG block formatting to unknown elements whose names match SVG element names.

    2.5.14release notes

  • Fixes redundant parentheses around binary and logical unary operands with leading line comments.

    2.5.14release notes

  • Inserts a newline before the closing angle bracket when a leading comment forces type arguments onto multiple lines.

    2.5.14release notes

  • Avoids extra parentheses and comment movement when formatting multiline expressions after operators such as !.

    2.5.14release notes

  • With operatorLinebreak set to before, own-line comments before binary operators stay above the operator.

    2.5.14release notes

  • Nested gitignore files now honor negation patterns.

    2.5.14release notes

  • Nested gitignore files now honor negation patterns.

    2.5.14release notes

  • Recognizes aliased named imports in single-file components under their local name.

    2.5.14release notes

  • Recognizes React 19.3 DOM properties instead of treating them as unknown attributes.

    2.5.14release notes

  • TypeScript class members using override accessor now parse correctly; accessor override reports that override must precede accessor.

    2.5.14release notes

  • The SCSS parser now allows omitting the final semicolon in at-rules.

    2.5.14release notes

  • The CSS parser now parses SCSS module variables in media queries.

    2.5.14release notes

  • Applies safe fixes without formatting files that have parse errors when formatter.formatWithErrors is disabled.

    2.5.14release notes

  • Correctly handles dashed utility base names and parses arbitrary values separately while preserving the complete base name.

    2.5.14release notes

  • Multiline template interpolations preserve the closing brace's indentation when source indentation is not a multiple of tabWidth.

    2.5.14release notes

  • Suppression comments now suppress matching HTML lint diagnostics on the following line when full HTML support is enabled.

    2.5.13release notes

  • Fixes parsing of unquoted URLs beginning with @ or ! and preserves escaped and non-ASCII whitespace in raw URLs during formatting.

    2.5.13release notes

  • No longer inserts whitespace between adjacent Svelte expressions when their combined length exceeds the line width.

    2.5.13release notes

  • Infers unannotated callback parameter types from the passed function's signature, honors explicit call type arguments, and avoids unnecessary inference of imported generics and namespace members.

    2.5.13release notes

  • The formatter no longer crashes on multiline expressions in files with CRLF line endings.

    2.5.12release notes

  • Astro expressions now parse TypeScript and JSX syntax, attribute values, comments, text, and embedded script and style contents according to Astro syntax.

    2.5.12release notes

  • Fixes handling of format suppression comments on TypeScript declared class properties with string literal names.

    2.5.12release notes

  • The Language Server no longer starts with debug logging enabled, preventing logs from growing exponentially in long sessions.

    2.5.12release notes

  • Fixes repeated dependency analysis that could lead to long and unresponsive sessions.

    2.5.12release notes

  • The formatter prints declare before accessibility modifiers on class properties, matching Prettier and TypeScript's canonical modifier order.

    2.5.12release notes

  • Biome no longer crashes while parsing malformed delete expressions.

    2.5.12release notes

  • Vanilla HTML no longer reports unsupported text expression diagnostics for double-curly text, and the formatter preserves adjacent curly-brace text.

    2.5.12release notes

  • Biome no longer crashes when linting malformed for...of statements.

    2.5.12release notes

  • Grit plugins can use function = ... as a node argument.

    2.5.12release notes

  • The formatter no longer moves comments next to the < of a generic, avoiding invalid TypeScript syntax.

    2.5.12release notes

  • Biome now parses legacy Internet Explorer filter and -ms-filter values such as progid:DXImageTransform... and alpha(opacity=40).

    2.5.12release notes

  • The configuration schema now correctly provides auto-completion for linter domains.

    2.5.12release notes

  • Recognizes unhandled Promise chains when an imported function's module belongs to an import cycle; cyclic modules preserve types for exports outside recursive type dependencies.

    2.5.12release notes

  • No longer reports Bun runtime built-in modules as unresolved imports.

    2.5.12release notes

  • Exempts any variable whose initializer references props, preventing false duplicate-key reports for derived script setup variables.

    2.5.12release notes

  • Biome preserves Unicode characters when writing source received through standard input to standard output.

    2.5.12release notes

  • Formatting a Svelte render tag followed by an HTML comment no longer duplicates the comment.

    2.5.12release notes

  • Whitespace now always allows the parser to recover from parsing failures and start parsing a new class.

    2.5.12release notes

  • Adjacent elements inside an Astro expression now parse as an implicit fragment instead of raising an error.

    2.5.11release notes

  • Astro templates now accept unclosed HTML void elements.

    2.5.11release notes

  • Re-export patterns now match named re-exports with aliases, inline type modifiers, and multiple specifiers.

    2.5.11release notes

  • The rule no longer reports template assignments to Vue <script setup> bindings whose names match built-in globals.

    2.5.11release notes

  • Biome now parses parenthesized object literals returned from arrow functions when they contain a conditional expression and a nested arrow function.

    2.5.11release notes

  • Files passed through this option now use full HTML support for Astro, Svelte, and Vue when it is enabled.

    2.5.11release notes

  • Variables and imports used as custom Vue directives are no longer reported as unused.

    2.5.11release notes

  • Astro now accepts JavaScript comments between attributes.

    2.5.10release notes

  • Astro now accepts attribute names that start with a colon, such as :href.

    2.5.10release notes

  • An Astro expression containing only a comment is no longer reported as a parse error, allowing the whole file to be formatted.

    2.5.10release notes

  • Empty Astro expressions such as <div>{}</div> now parse; Astro renders {} as nothing.

    2.5.10release notes

  • Astro expressions containing comments now parse, including expressions with a comment followed by a value.

    2.5.10release notes

  • A closing tag inside a string or comment no longer cuts an Astro frontmatter block short.

    2.5.10release notes

  • An Astro frontmatter block no longer ends on a line that merely starts with a dash.

    2.5.10release notes

  • Astro frontmatter is recognized only at the very start of a file; later --- lines are content.

    2.5.10release notes

  • The Astro parser recovers from malformed closing tags so later mistakes are reported where they occur rather than cascading.

    2.5.10release notes

  • {{ at the start of an Astro expression is parsed as an object literal rather than an interpolation.

    2.5.10release notes

  • Astro parses markup and interpolations in <pre> and <textarea> as ordinary elements, preventing variables used only inside them from being reported as unused.

    2.5.10release notes

  • A < that cannot open a tag is treated as text and needs no escaping.

    2.5.10release notes

  • Astro now accepts HTML5 unquoted attribute values containing backticks, equals signs, or quotes.

    2.5.10release notes

  • The migration command detects rules from @eslint/css in ESLint configurations more reliably.

    2.5.10release notes

  • GritQL plugins now match and rewrite metavariables embedded in quoted strings.

    2.5.10release notes

  • Children of Astro elements carrying is:raw are parsed as raw text; <script> and <style> contents are no longer linted as JavaScript or CSS.

    2.5.10release notes

  • Fixed a memory leak that caused memory usage to grow over long editor sessions.

    2.5.10release notes

  • Svelte block openings are now recognized only in Svelte files; sequences such as {#if x} are ordinary text in HTML, Vue, and Angular files.

    2.5.10release notes

  • Biome no longer crashes when parsing incomplete {let} or {const} declarations in Svelte files.

    2.5.10release notes

  • The rule no longer reports Vue event handlers such as @click="count++".

    2.5.10release notes

  • Variables and imports used by Vue same-name bindings such as :disabled or v-bind:disabled are no longer reported as unused.

    2.5.10release notes

  • TypeScript path mapping targets without ./ are now resolved relative to their configured path base.

    2.5.9release notes

  • The CSS parser recovers at declaration boundaries after bogus declarations, allowing subsequent valid declarations to be parsed.

    2.5.9release notes

  • The CSS parser accepts Tailwind container-query variant names such as @xl and @max-xl in @variant.

    2.5.9release notes

  • Whitespace handling is corrected for marquee, noscript, video, audio, and object elements.

    2.5.9release notes

  • The formatter preserves meaningful blank lines, including spacing after elements with trailing spaces and blank lines between comment groups.

    2.5.9release notes

  • Parent tag wrapping is corrected when an HTML element starts or ends with a block-like or hidden child such as source, track, or param.

    2.5.9release notes

  • Invalid CSS declarations in HTML style attributes now produce parser diagnostics instead of causing a panic.

    2.5.9release notes

  • Wrapping accounts for the width of an adjacent closing tag, avoiding lines that exceed the configured width.

    2.5.9release notes

  • The rule now recognizes Vitest Browser Mode expect.element() calls as assertions.

    2.5.9release notes

  • SVG parsing now works for files with an XML declaration followed by a PUBLIC doctype.

    2.5.9release notes

  • The Tailwind parser now understands modifiers on bare utilities, including @container/sidebar and shadow/50.

    2.5.9release notes

  • The Tailwind parser now accepts the legacy leading ! important marker.

    2.5.9release notes

  • Biome no longer crashes with an access violation when analysing files on Windows ARM64.

    2.5.9release notes

  • CSS block comments between a declaration colon and value now preserve their source indentation.

    2.5.8release notes

  • CSS formatting keeps comments inside functional pseudo-classes and pseudo-elements instead of moving them before the function name.

    2.5.8release notes

  • Patterns with multiple metavariables now match snippets consistently in WebAssembly.

    2.5.8release notes

  • CSS parsing of registered custom properties now correctly validates the syntax descriptor.

    2.5.8release notes

  • Svelte files now parse correctly when an expression begins with an object literal.

    2.5.8release notes