Biome 2.5.15
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.
noReactObjectTypeAsDefaultProprejects array, object, and function values as default props (the classicfunction Component({ items = [] })footgun).noSvelteExportLetflags the legacyexport letprop syntax and points you at$props()instead.useSvelteKitRuneImportskeeps rune imports consistent. - Three new codebase hygiene rules.
noSelfImportforbids a module importing itself,usePromiseRejectErrorsrequiresErrorobjects as rejection reasons instead of strings or numbers, andnoMisplacedListElementscatches<li>elements whose parent is not<ul>,<ol>, or<menu>. - CSS and Tailwind coverage.
useLogicalPropertiesenforces logical CSS properties for better internationalization, with adirectionoption defaulting to"ltr".noTailwindRawColorspushes raw color values toward theme tokens.noUnknownPropertynow recognizesframe-sizing. - Astro and JavaScript extras.
noAstroConflictingSetDirectivesreports conflictingset:directives in.astrofiles, andnoMeaninglessVoidOperatoranduseStrictBooleanExpressionsround out the JavaScript side. - Suppressions outside JavaScript. Markdown and YAML now support suppression comments, with a new
suppressionscapability 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.useIgnoreFilerespects parent directories. Parent directory patterns are now evaluated when matching child paths, so a re-included!/srcsurvives 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 becausespancontains 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.
noUnusedVariablesnow reports unused recursive arrow functions, andnoUselessReturnno longer offers a safe fix that generated invalid code inside unbracediforelsebodies. - Vue and Svelte parsing. Typed slot props like
v-slot="{ value }: { value: ValueType }"parse correctly and their types count as used, whilenoUndeclaredVariablesstopped flagging slot props declared withv-slotor#. - Safe fixes that stayed safe. The
noOctalEscapefix no longer silently changes string values for escapes starting with 4 through 7, anduseRegexLiteralsno 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.