Packages/@biomejs/biome

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.

  1. 2.5.15

    30 September 2026

    Patch 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 legacy export let syntax. Use the $props() rune instead.

      <script>
        export let name;
      </script>
    • Added a new nursery rule useLogicalProperties that enforces the use of logical properties in CSS, promoting better internationalization and accessibility practices. The rule supports a direction option 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. 2.5.14

    16 September 2026

    Patch Changes

    • Added the nursery rule noReturnInFinally. This rule disallows return statements in Promise.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.

  3. 2.5.13

    10 September 2026

    Patch 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, and noUnsafePlusOperands.

  4. 2.5.12

    3 September 2026

    Patch 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>}.

  5. 2.5.11

    27 August 2026

    Patch Changes

    • Fixed #11496: useValidAnchor now treats Astro JSX shorthand attributes like <a {href}> as a valid href.

    • 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>}.

  6. 2.5.10

    21 August 2026

    Patch 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>
  7. 2.5.9

    17 August 2026

    Patch 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 rage to include BIOME_BINARY, BIOME_LOG_FILE, and RUST_BACKTRACE as well as reworded explanations for better readability.

    • Added a new nursery rule useNamedLayer which disallows anonymous cascade layers.

      @layer {
        a {
          color: red;
        }
      }
  8. 2.5.8

    11 August 2026

    Patch 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}
  9. 2.5.7

    4 August 2026

    Patch Changes

    • Added the option ignoreIfStatements to useNullishCoalescing. Biome now flags if statements that only assign to a nullish variable (such as if (!a) { a = b }) and can rewrite them to ??=. When enabled, Biome ignores those if statements.

    • 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 as w-[400px], including in HTML/JSX class attributes, configured utility functions, and tagged templates.

  10. 2.5.6

    28 July 2026

    Patch Changes

    • Fixed a performance regression in noMisusedPromises that 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: useHookAtTopLevel no longer reports hooks in named forwardRef components that receive a ref parameter.

  11. 2.5.5

    21 July 2026

    Patch Changes

    • Fixed useExhaustiveSwitchCases for 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 missing 2n case:

      declare const value: 1n | 2n;
      switch (value) {
        case 1n:
          break;
      }
    • Fixed false positives in noBaseToString and useNullishCoalescing when 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 useSortedAttributes no longer triggers for HTML instructions.

  12. 2.5.4

    15 July 2026
  13. 2.5.3

    8 July 2026
  14. 2.5.2

    1 July 2026
  15. 2.5.1

    23 June 2026
  16. 2.5.0

    12 June 2026
  17. 2.4.16

    27 May 2026
  18. 2.4.15

    9 May 2026
  19. 2.4.14

    1 May 2026
  20. 2.4.13

    23 April 2026
  21. 2.4.12

    14 April 2026
  22. 2.4.11

    9 April 2026
  23. 2.4.10

    30 March 2026
  24. 2.4.9

    25 March 2026
  25. 2.4.8

    18 March 2026
  26. 2.4.7

    13 March 2026
  27. 2.4.6

    5 March 2026
  28. 2.4.5

    2 March 2026
  29. 2.4.4

    20 February 2026
  30. 2.4.3

    19 February 2026
  31. 2.4.2

    16 February 2026
  32. 2.4.1

    16 February 2026
  33. 2.4.0

    15 February 2026
  34. 2.3.15

    12 February 2026
  35. 2.3.14

    3 February 2026
  36. 2.3.13

    26 January 2026
  37. 2.3.12

    23 January 2026
  38. 2.3.11

    3 January 2026
  39. 2.3.10

    17 December 2025
  40. 2.3.9

    15 December 2025
  41. 2.3.8

    27 November 2025
  42. 2.3.7

    21 November 2025
  43. 2.3.6

    17 November 2025
  44. 2.3.5

    11 November 2025
  45. 2.3.4

    5 November 2025
  46. 2.3.3

    3 November 2025
  47. 2.3.2

    28 October 2025
  48. 2.3.1

    26 October 2025
  49. 2.3.0

    24 October 2025
  50. 2.2.7

    22 October 2025