Skip to main content

Biome 2.5.15

Release Date: September 30, 2026

Biome 2.5.15 landed on September 30, 2026, the second patch on top of the 2.5.13 build I published about earlier this month. I run Biome over three TypeScript and React repos, so I upgraded all of them the morning of the release and kept notes. Verdict up front: this one is worth taking even though it is a patch release, mostly for the type inference speedups and two parser fixes that used to bite me on every run.

What's New in 2.5.15

  • Six new nursery rules for React and Svelte. noReactObjectTypeAsDefaultProp rejects array, object, and function values as default props (the classic function Component({ items = [] }) footgun). noSvelteExportLet flags the legacy export let prop syntax and points you at $props() instead. useSvelteKitRuneImports keeps rune imports consistent.
  • Three new codebase hygiene rules. noSelfImport forbids a module importing itself, usePromiseRejectErrors requires Error objects as rejection reasons instead of strings or numbers, and noMisplacedListElements catches <li> elements whose parent is not <ul>, <ol>, or <menu>.
  • CSS and Tailwind coverage. useLogicalProperties enforces logical CSS properties for better internationalization, with a direction option defaulting to "ltr". noTailwindRawColors pushes raw color values toward theme tokens. noUnknownProperty now recognizes frame-sizing.
  • Astro and JavaScript extras. noAstroConflictingSetDirectives reports conflicting set: directives in .astro files, and noMeaninglessVoidOperator and useStrictBooleanExpressions round out the JavaScript side.
  • Suppressions outside JavaScript. Markdown and YAML now support suppression comments, with a new suppressions capability for Markdown documents.

Type Inference Got Noticeably Faster

The part I noticed immediately is not a rule at all. Type inference accuracy improved because more global types, including Array, Map, and Set, are now fully defined, which means fewer unknowns and fewer false positives from every typed rule. That alone cut some noise out of my noFloatingPromises output.

More importantly, the maintainers fixed a multi-second stall. Type-aware rules used to crawl when a member was accessed on a recursive generic type alias, the kind react-hook-form's FieldPathValue and zustand's Mutate produce. A stack overflow triggered by mutually referencing generic type parameters across files was fixed too.

Fixes I Actually Hit

  • vcs.useIgnoreFile respects parent directories. Parent directory patterns are now evaluated when matching child paths, so a re-included !/src survives while its excluded siblings stay ignored.
  • HTML parser stops eating your markup. A mismatched closing tag such as <p>two</span></p> is now an error instead of being silently accepted because span contains the letter p, which used to make the formatter delete everything after it. Stray top-level closing tags are errors now as well.
  • Unused code detection improved. noUnusedVariables now reports unused recursive arrow functions, and noUselessReturn no longer offers a safe fix that generated invalid code inside unbraced if or else bodies.
  • Vue and Svelte parsing. Typed slot props like v-slot="{ value }: { value: ValueType }" parse correctly and their types count as used, while noUndeclaredVariables stopped flagging slot props declared with v-slot or #.
  • Safe fixes that stayed safe. The noOctalEscape fix no longer silently changes string values for escapes starting with 4 through 7, and useRegexLiterals no longer double-escapes a slash that was already escaped.
  • Domain config and CLI behavior. Disabling a domain no longer disables rules that belong to another enabled domain, the CLI emits an error when the configuration contains errors, Unix daemon socket permissions are restricted, and Biome no longer crashes when output is piped into a closed pipe.

SCSS Keeps Catching Up

The SCSS parser gained interpolation inside container, layer, property names, and the attr() function, plus support for nested declarations and if inside a url() function. If you have been holding off on letting Biome touch your stylesheets, this release moves the needle.

How to Upgrade

Bump the CLI or the package with your usual package manager, then run biome check --write once to see which of the new nursery rules you want to promote. I enabled noMisplacedListElements and noSelfImport right away and left the React and Svelte rules on warn while I clean things up.

Other Versions

By continuing to use the site, you agree to the use of cookies.