Releases of @biomejs/biome
107 stable releases, newest first. Release notes are kept for the last 90 days; older ones link to where they were published.
2.5.15
30 September 2026Patch Changes
Added the new nursery rule
noReactObjectTypeAsDefaultProp, which disallows array, object, and function values as default props in React components.For example, the following snippet triggers the rule.
function Component({ items = [] }) { return items; }Added the nursery rule
noSvelteExportLet, which disallows declaring Svelte component props with the legacyexport letsyntax. Use the$props()rune instead.<script> export let name; </script>
Added a new nursery rule
useLogicalPropertiesthat enforces the use of logical properties in CSS, promoting better internationalization and accessibility practices. The rule supports adirectionoption with"ltr"as the default and"rtl"as the alternative. This is a first rule covering parts of #9034{ "linter": { "rules": { "nursery": { "useLogicalProperties": { "level": "warn", "options": { "direction": "rtl" } } } } } }
2.5.14
16 September 2026Patch Changes
Added the nursery rule
noReturnInFinally. This rule disallows return statements inPromise.prototype.finally()callbacks, including inside nested blocks and conditional branches. Returns in nested functions are ignored by the rule.// Invalid: return in finally callback Promise.resolve(1).finally(() => { return 2 }) // Valid: no return in finally callback Promise.resolve(1).finally(() => { console.log(2) })Returning a value from a
Promise.prototype.finally()callback does not replace the original promise's fulfillment value, which can be confusing. Returned promises and thenables are awaited, and their rejection rejects the resulting promise.Added the nursery rule
noSvelteAtDebugTags, which disallows Svelte's{@debug}tag.<!-- Invalid: leftover debugging tag --> {@debug user}The
{@debug}tag is a debugging aid and should be removed once you no longer need it, as it should not remain in production code. The rule provides a safe fix that removes the tag.Added the nursery rule
useValidTestTitle, which enforces valid titles for unit test cases and suites.
2.5.13
10 September 2026Patch Changes
Added the nursery rule
useLayeredStyles, which enforces that style rules are defined within a cascade layer and import rules to import its styles into a cascade layer./* Invalid */ @import 'foo.css'; .my-style { color: red; } /* Valid */ @import 'foo.css' layer(base); @layer base { .my-style { color: red; } }Added the nursery rule
useBetterDomTraversing, which prefers.firstChild,.firstElementChild,.closest(), and merged.querySelector()calls over positional DOM traversal.element.childNodes[0]; element.children[0]; element.parentElement.parentElement; element.querySelector("a").querySelector("b");Fixed #11610, #11611, #11612, #11615, and #11616: Biome no longer fully infers an imported generic declaration just to apply its type arguments, restoring type-aware lint performance for large libraries such as Zod. This improves
useRegexpExec,noFloatingPromises,noMisusedPromises,useNullishCoalescing, andnoUnsafePlusOperands.
2.5.12
3 September 2026Patch Changes
Fixed Astro attribute expressions rejecting TypeScript and JSX syntax that is accepted in text expressions.
<Component icon={<Icon />} count={total as number} onSelect={(e: Event) => e} />Fixed Astro attribute names being split on
:and.inside an expression, such as{x && <button x-on:keyup.enter={go} client:load.foo />}.Fixed a bare
>in the children of an Astro expression being treated as markup, such as{x && <div>a > b</div>}.
2.5.11
27 August 2026Patch Changes
Fixed #11496:
useValidAnchornow treats Astro JSX shorthand attributes like<a {href}>as a validhref.Fixed #9944: adjacent elements inside an Astro expression now parse as an implicit fragment instead of raising an error.
{options.map(() => <div /> <div /> )}Fixed Astro templates rejecting unclosed HTML void elements, such as
{cond && <br>}.
2.5.10
21 August 2026Patch Changes
Fixed Astro rejecting JavaScript comments between attributes.
<div /* block comment */ class="something"></div> <Component /* c */ client:load />
Fixed a bare
<in Astro text being treated as the start of a tag, such as<p>5 < 6 and 7 > 6</p>. As in HTML, a<that cannot open a tag is text and needs no escaping.Fixed #8294: an Astro expression holding only a comment is no longer reported as a parse error, which also stopped the whole file from being formatted.
<div>{/* a note */}</div> <div class={/* a note */}>x</div>
2.5.9
17 August 2026Patch Changes
Fixed #11315: The CSS parser now recovers at declaration boundaries after bogus declarations, allowing subsequent valid declarations to be parsed.
Expanded the environment variable metadata used by
biome rageto includeBIOME_BINARY,BIOME_LOG_FILE, andRUST_BACKTRACEas well as reworded explanations for better readability.Added a new nursery rule
useNamedLayerwhich disallows anonymous cascade layers.@layer { a { color: red; } }
2.5.8
11 August 2026Patch Changes
Added a new nursery rule
useReactCompiler, which reports diagnostics from React Compiler lint mode.Improved performance of
noImportCycles.Added the nursery rule
noSvelteLegacyConst, which disallows legacy Svelte{@const}tags and recommends declaration tags with$derived().Invalid:
{#each boxes as box} {@const area = box.width * box.height} <p>{area}</p> {/each}Valid:
{#each boxes as box} {const area = $derived(box.width * box.height)} <p>{area}</p> {/each}
2.5.7
4 August 2026Patch Changes
Added the option
ignoreIfStatementsto useNullishCoalescing. Biome now flagsifstatements that only assign to a nullish variable (such asif (!a) { a = b }) and can rewrite them to??=. When enabled, Biome ignores thoseifstatements.Added a new nursery rule
noExtendNative, which reports extending the prototype of a built-in object.Added the nursery rule
noTailwindArbitraryValue. Biome now reports Tailwind CSS arbitrary values such asw-[400px], including in HTML/JSX class attributes, configured utility functions, and tagged templates.
2.5.6
28 July 2026Patch Changes
Fixed a performance regression in
noMisusedPromisesthat caused type inference to run repeatedly while linting a file.Fixed CSS formatting for multiline function arguments preceded by comments:
.example { value: outer( 1, /* comment */ nested( - first, - second - ) + first, + second + ) ); }Fixed #9195:
useHookAtTopLevelno longer reports hooks in namedforwardRefcomponents that receive arefparameter.
2.5.5
21 July 2026Patch Changes
Fixed
useExhaustiveSwitchCasesfor unions of bigint literals. The rule now reports missing bigint cases and compares bigint literals by value, including binary, octal, hexadecimal, and separator-containing spellings. For example, this switch now reports the missing2ncase:declare const value: 1n | 2n; switch (value) { case 1n: break; }Fixed false positives in
noBaseToStringanduseNullishCoalescingwhen member, stringification, or nullish inference cannot complete. These rules now suppress diagnostics instead of reporting from partial type information. For example, neither expression is reported when a recursive type cannot be fully resolved:type Recursive = Recursive; declare const value: Recursive; String(value); value || "fallback";
Fixed #10922: the action
useSortedAttributesno longer triggers for HTML instructions.
2.5.4
15 July 20262.5.3
8 July 20262.5.2
1 July 20262.5.1
23 June 20262.5.0
12 June 20262.4.16
27 May 20262.4.15
9 May 20262.4.14
1 May 20262.4.13
23 April 20262.4.12
14 April 20262.4.11
9 April 20262.4.10
30 March 20262.4.9
25 March 20262.4.8
18 March 20262.4.7
13 March 20262.4.6
5 March 20262.4.5
2 March 20262.4.4
20 February 20262.4.3
19 February 20262.4.2
16 February 20262.4.1
16 February 20262.4.0
15 February 20262.3.15
12 February 20262.3.14
3 February 20262.3.13
26 January 20262.3.12
23 January 20262.3.11
3 January 20262.3.10
17 December 20252.3.9
15 December 20252.3.8
27 November 20252.3.7
21 November 20252.3.6
17 November 20252.3.5
11 November 20252.3.4
5 November 20252.3.3
3 November 20252.3.2
28 October 20252.3.1
26 October 20252.3.0
24 October 20252.2.7
22 October 2025