Skip to content

chore(deps): @biomejs/biome ^ 2.6.3 - #9

Open
floatpanebot wants to merge 1 commit into
masterfrom
renovate/biomejs-biome-2.x-lockfile
Open

floatpanebot wants to merge 1 commit into
masterfrom
renovate/biomejs-biome-2.x-lockfile

Conversation

@floatpanebot

@floatpanebot floatpanebot commented Jun 12, 2026 •

Copy link
Copy Markdown
Member

ℹ️ Note

This PR body was truncated due to platform limits.

What?

This PR contains the following updates:

Package Change Age Confidence
@biomejs/biome (source) 2.4.16 → 2.6.3 age confidence

Release Notes

biomejs/biome (@​biomejs/biome)

v2.6.3

Compare Source

Patch Changes
  • #​12275 807e616 Thanks @​dyc3! - Added the new nursery rule noArraySortForMinMax, which reports sorting an array only to read its smallest or largest value. Use Math.min() or Math.max() instead.

    const minimum = array.toSorted((a, b) => a - b)[0];
  • #​12432 cf61682 Thanks @​dyc3! - Added the nursery rule noBooleanSortComparator, which reports sort comparators that return a boolean instead of a number. For example, array.sort((a, b) => a > b) never puts the first item before the second, so the array isn't sorted correctly.

  • #​12304 b4654c5 Thanks @​dyc3! - Added the new nursery rule noEagerArrayMethodsInLoops, which reports .map() and .filter() calls in the header of for...of loops. These calls build a new array that is only used by the loop.

    for (const name of users.map((user) => user.name)) {
      console.log(name);
    }
  • #​12121 66c3791 Thanks @​dyc3! - Added the nursery rule noNewRequire, which disallows calling require with new, such as new require("app-header").

  • #​12316 34b520d Thanks @​dyc3! - Added the new nursery rule noObsoleteAttributes, which disallows obsolete attributes on HTML elements and suggests what to use instead.

    <table bgcolor="#ffffff" cellpadding="5"></table>
  • #​12258 cce2385 Thanks @​dyc3! - Added the nursery rule noPathConcat, which disallows building file paths and URLs by joining strings to __dirname, __filename, import.meta.dirname, import.meta.filename, or import.meta.url.

    const fullPath = __dirname + "/foo.js"; // reported
  • #​12287 e12ad78 Thanks @​dyc3! - Added the new nursery rule noPlaywrightNthMethods, which disallows selecting Playwright elements by position with first(), last(), and nth(). A test that relies on the position of an element can act on a different element when the page changes.

    await page.locator("button").first().click();
  • #​12343 62ad123 Thanks @​vibbix! - Added the nursery rule noSelfNestedLayer, which disallows nesting a cascade layer inside a layer with the same name. Layer names inside an @layer block are relative to it, so the inner layer below creates the sublayer components.components instead of adding to components.

    @&#8203;layer components {
      @&#8203;layer components {
        .button {
          color: red;
        }
      }
    }
  • #​12289 bbbd95d Thanks @​dyc3! - Added the nursery rule noShortTimeValues, which reports CSS animation and transition times that are shorter than the configured minimum number of milliseconds. The rule does nothing until minimum is set.

    For example, the following code is invalid when minimum is 100:

    a {
      transition-duration: 80ms;
    }
  • #​12431 f748ec0 Thanks @​dyc3! - Added the nursery rule noSvelteInternal, which disallows importing from svelte/internal and its submodules. These modules are private to Svelte and can change or disappear in any release.

    import { get_current_component } from "svelte/internal";
  • #​12270 8ae35c4 Thanks @​dyc3! - Added the nursery rule noTanstackQueryRestDestructuring, which disallows rest destructuring and object spread on TanStack Query results. Both read every property of the result, so the component updates on every change to the query.

    import { useQuery } from "@&#8203;tanstack/react-query";
    
    const { data, ...rest } = useQuery({ queryKey: ["todos"], queryFn: fetchTodos });

    The rule belongs to the new tanstackQuery domain.

  • #​12308 372af2a Thanks @​dyc3! - Added the new nursery rule noUnreadableForOfExpression, which reports for...of and for await...of loops that go through the result of a complex expression instead of a variable, a property, or a short call.

    for (const item of getItems(createArgument(seed))) {} // reported
  • #​12422 0be8d10 Thanks @​dyc3! - Added the new nursery rule noUnsafeReturn, which disallows returning a value typed as any from a function.

    function parse(text: string) {
      return JSON.parse(text); // reported
    }
  • #​12311 8434c92 Thanks @​dyc3! - Added the nursery rule noUselessSplice, which reports splice() calls that have a simpler alternative. For example, array.splice(0, 1) can be written as array.shift().

  • #​12293 eaa4a2b Thanks @​dyc3! - Added the nursery rule noVueUnusedEmitDeclarations, which reports events that a Vue component declares but never emits.

    For example, the following component never emits close:

    <script setup>
    const emit = defineEmits(["change", "close"]);
    emit("change");
    </script>
  • #​12386 f01ebb0 Thanks @​dyc3! - Added the nursery rule noVueVTextVHtmlOnComponent, which disallows v-text and v-html on Vue components. These directives replace everything inside the component's root element instead of filling its slot.

    <template>
      <MyComponent v-html="html"></MyComponent>
    </template>
  • #​12385 7bd38b7 Thanks @​dyc3! - Added the new nursery rule noVueWatchAfterAwait, which disallows creating watchers after an await in a Vue component's setup() function. Vue doesn't stop these watchers when the component is removed. A watcher is allowed when the function it returns is stored, so that function can be called later to stop the watcher.

    <script>
    import { watch } from "vue";
    
    export default {
      async setup() {
        await fetchUser();
        watch(source, () => {});
      },
    };
    </script>
  • #​12286 50d2a4e Thanks @​dyc3! - Added the nursery rule noZeroLengthUnit, which disallows units on zero lengths in CSS. Biome can remove the unit.

    a {
      top: 0px;
    }
  • #​12300 ab2eb9e Thanks @​dyc3! - Added the nursery rule useBlockStatementOverIife, which reports functions that are called immediately when a block statement can replace them. Biome can replace these functions with a block statement.

    Invalid:

    (() => {
        const value = getValue();
        run(value);
    })();
  • #​12421 1c2cac0 Thanks @​dyc3! - Added the nursery rule useConsistentLightnessNotation, which enforces writing the lightness of lab(), lch(), oklab(), and oklch() colors as a percentage, or as a number with the notation option. For example, with the default options, oklch(0.85 0.17 88) is reported and can be fixed to oklch(85% 0.17 88).

  • #​12224 fef7ed4 Thanks @​dyc3! - Added the nursery rule useExpectToContain, which reports tests that compare the result of includes() to a boolean, and suggests using toContain() instead.

    expect(fruits.includes("apple")).toBe(true);
  • #​12299 0d5025d Thanks @​dyc3! - Added the new nursery rule useIteratorZip, which reports for loops that use an index only to read the same position from several arrays. Such loops can use Iterator.zip() instead.

    // reported
    for (let index = 0; index < Math.min(names.length, scores.length); index++) {
      save(names[index], scores[index]);
    }
  • #​12298 a234d2f Thanks @​dyc3! - Added the nursery rule useMathAbs, which reports manual absolute value calculations and range checks that can use Math.abs(). For example, value < 0 ? -value : value can be written as Math.abs(value), and value > limit || value < -limit can be written as Math.abs(value) > limit.

  • #​12499 bd024cc Thanks @​dyc3! - Added the nursery rule useMathTrunc, which requires Math.trunc() instead of bitwise operations or parseInt(String(x), 10) for removing the decimal part of a number. For example, const result = value | 0; and const result = ~~value; are now reported.

  • #​12314 9e875a4 Thanks @​dyc3! - Added the new nursery rule usePackageJsonValidCpu, which reports a cpu field in package.json that isn't an array of known processor types. The cpu field lists the processor types that the package supports.

    For example, the rule reports the following package.json file because x86 isn't a processor type that package managers recognize:

    {
      "name": "my-package",
      "cpu": ["x86"]
    }
  • #​12315 cb30544 Thanks @​dyc3! - Added the nursery rule usePackageJsonValidEngines, which reports an invalid engines field in package.json. The field must be an object, and each of its values must be a non-empty string.

    For example, the following engines field is reported because the version of node is a number:

    {
        "engines": {
            "node": 24
        }
    }
  • #​12400 407604d Thanks @​dyc3! - Added the nursery rule useVueComponentIs, which requires Vue <component> elements to bind the is attribute with :is or v-bind:is. Without it, Vue has no component to render.

    <template>
      <component :is="currentView" />
    </template>
  • #​12337 c371520 Thanks @​dyc3! - Added the nursery rule useVueToggleInsideTransition, which requires the element inside a Vue <Transition> to be shown and hidden with v-if or v-show. Without one of them, the element is always shown and the transition never plays.

    <template>
      <Transition>
        <div>Content</div>
      </Transition>
    </template>
  • #​12387 64472e9 Thanks @​dyc3! - Added the nursery rule useVueTypedRef, which reports ref() and shallowRef() calls in TypeScript that have no type argument and no initial value other than null or undefined. Without a type, TypeScript can't tell which values these refs are meant to hold.

    import { ref } from "vue";
    
    const count = ref();
  • #​12423 bf1a55a Thanks @​dyc3! - Added the nursery rule useVueVOnExact, which requires the .exact modifier on a v-on listener when another listener for the same event on the element needs more modifier keys, such as .ctrl. Without .exact, both listeners run when those keys are held down. The rule accepts the following code:

    <template>
      <button @&#8203;click.exact="select" @&#8203;click.ctrl="open"></button>
    </template>
  • #​12418 208730e Thanks @​latin-1! - Fixed #​12417: useSortedProperties could produce invalid CSS when sorting properties without a final semicolon. Comments attached to reordered properties are preserved.

  • #​12216 f2a3c71 Thanks @​dyc3! - Added the new nursery rule noDanglingUnderscore, which disallows variable names, function names, and property accesses that start or end with an underscore.

    const _count = 0; // reported
    user._id; // reported
  • #​12536 438997f Thanks @​vidigoat! - Fixed the formatter removing the parentheses around an instantiation expression before +, -, <, >, >=, >> and >>>. TypeScript reads make<T> + y as make < T > +y, and make<T> >> y doesn't parse.

    - x = make<T> + y;
    + x = (make<T>) + y;
    - x = make<T> >> y;
    + x = (make<T>) >> y;
  • #​12540 7d3e8a1 Thanks @​vidigoat! - Fixed the formatter removing the parentheses around an instantiation expression before a non-null assertion or type arguments of a class heritage, which produced code that doesn't parse.

    - const a = make<T>!;
    + const a = (make<T>)!;
    - class D extends B<T><T> {}
    + class D extends (B<T>)<T> {}
  • #​12496 09d89b9 Thanks @​vidigoat! - Fixed the formatter removing the parentheses around binary, logical, type-cast and instantiation operands of an instantiation expression. The type arguments then applied to the last operand only, and a nested instantiation expression didn't parse.

    - const x = a + b<T>;
    + const x = (a + b)<T>;
    - const y = a as B<T>;
    + const y = (a as B)<T>;
    - const z = f<A><B>;
    + const z = (f<A>)<B>;
  • #​12526 dbcdab1 Thanks @​dyc3! - Fixed #​12524: the Markdown formatter no longer removes the blank line between a paragraph and the list that follows it. Removing it could change the document, because an ordered list that doesn't start at 1 can't interrupt a paragraph and became part of the paragraph text.

    Steps:
    
    3. three
    4. four
  • #​12509 470018b Thanks @​dyc3! - Fixed #​12507: the Markdown formatter no longer drops the > markers after an empty quote line when proseWrap is "always" or "never". Previously, the text after the empty line was moved out of the blockquote.

      > a
      >
    - b
    + > b
  • #​12598 5699601 Thanks @​vidigoat! - Fixed the formatter removing the parentheses around the callee of a new expression when it contains a dynamic import() call, which produced code that doesn't parse.

    - new import("foo").bar();
    + new (import("foo").bar)();
  • #​12508 87d9e6b Thanks @​dyc3! - Fixed #​12502: noInvalidGridAreas now counts the cells in each row of grid-template-areas instead of comparing the length of the row text. Rows such as "a" "bb" are no longer reported, and rows such as "abc" "d e" are now reported.

  • #​12530 7f467b2 Thanks @​dyc3! - Fixed #​12529: noUselessElse no longer reports an else clause when the if block ends with a switch statement that has no default clause. If no case matches, such a switch doesn't exit, so the else clause is needed.

  • #​12511 d4ea663 Thanks @​dyc3! - Fixed #​12505: useDomNodeTextContent no longer reports innerText on values whose type annotation shows they aren't DOM nodes. The following code is now valid:

    const Link = ({ innerText }: { innerText: string }) => <a>{innerText}</a>;
  • #​12588 e262362 Thanks @​ematipico! - Fixed noDescendingSpecificity to compare resolved nested selector targets. Biome no longer reports nested selectors that resolve to different targets, detects equivalent explicit and nested targets, and emits one diagnostic when a parent selector list expands the same nested selector multiple times.

    For example, the following selectors are no longer reported because their final targets are .column and code, respectively:

    .card {
      .column {
        :root[data-theme="dark"] & {}
      }
    
      code {
        :root[data-theme="dark"] & {}
      }
    }
  • #​12534 e59a324 Thanks @​Netail! - Improved the diagnostics of noIdenticalTestTitle. Biome now reports one diagnostic per repeated title, pointing at the first occurrence and at every later occurrence, instead of one diagnostic per duplicate.

  • #​12528 a3132dc Thanks @​ff1451! - Fixed #​12503: noUnknownProperty now checks SCSS nested properties by the name Sass emits for them. For example, radius in border: { radius: 4px; } is checked as border-radius and is no longer reported, while color in font: { color: red; } is checked as font-color and is now reported.

  • #​12113 ec4eb2d Thanks @​dyc3! - Added the nursery rule useConsistentUnicodeBom, which disallows a leading Unicode byte order mark by default and can require one with bom: "always". The rule supports JavaScript, TypeScript, JSON, CSS, GraphQL, HTML, and Markdown, provides a fix, and preserves the unicode-bom option during ESLint migration.

    The following example is invalid by default because it starts with an invisible U+FEFF character:

    const value = 1;
  • #​12248 afbc81e Thanks @​dyc3! - Added the nursery rule useReactNativeValidPlatformColors, which requires PlatformColor() and DynamicColorIOS() calls to use values written directly in the call, so React Native can optimize them.

    import { PlatformColor } from "react-native";
    
    const labelColor = "labelColor";
    const color = PlatformColor(labelColor);
  • #​12599 b62494a Thanks @​dyc3! - Fixed #​12532: checking the project root no longer applies files.includes exclusions to directories above the project.

  • #​12578 6162922 Thanks @​ematipico! - Fixed GraphQL parsing and formatting for executable descriptions and legacy fragment variables. Biome now formats inputs such as "Description" query { field } without panicking and removes insignificant commas consistently.

  • #​12593 35c69ad Thanks @​dyc3! - Fixed #​12555: the default reporter now prints the command summary, the --max-diagnostics warning, and the skipped-fixes notice to stderr instead of stdout. Diagnostics already go to stderr, so the summary can no longer get mixed into the middle of a diagnostic when a tool reads the two streams separately.

  • #​12415 9520907 Thanks @​latin-1! - Fixed #​12412: useSortedProperties now sorts properties inside @keyframes animations in CSS and SCSS.

v2.6.2

Compare Source

Minor Changes
  • #​11479 5c60ba8 Thanks @​nhedger! - Added a --git flag to biome init. The flag enables Git VCS integration and sets vcs.useIgnoreFile to true in the generated configuration, even when the command runs outside a Git repository.

  • #​11742 3a1356d Thanks @​Netail! - Added the biome migrate stylelint command. It imports a Stylelint configuration and its ignore settings into your Biome configuration, mapping Stylelint rules to their Biome equivalents. Pass --write to apply the changes, and --include-inspired or --include-nursery to migrate additional rules.

  • #​12318 774b5b5 Thanks @​Netail! - Added the new assist action useGraphqlSortedDefinitions, which sorts the named definitions of a GraphQL document, such as types, type extensions, directives, fragments, and operations.

    Invalid:

    type User {
      id: ID!
    }
    
    enum Role {
      ADMIN
      USER
    }
    
    directive @&#8203;auth on FIELD_DEFINITION
  • #​6886 3479d15 Thanks @​christymcgrory! - biome rage now shows the resolved files.includes and files.ignoreUnknown configuration.

  • #​11102 0874b7f Thanks @​gameroman! - Added support for useTailwindSortedClasses rule in HTML-ish files.

  • #​10711 40de5a0 Thanks @​soconnor-seeq! - Adds a new resolutionKind option for object-syntax plugin entries.

    This allows shared Biome configs in monorepos to load local Grit plugins from the package that declares them instead of resolving plugin paths from the consuming project.

    {
      "plugins": [
        { "path": "./grit/no-debugger.grit", "resolutionKind": "config" },
        { "path": "local-plugin.grit", "resolutionKind": "project" },
        { "path": "local-plugin.grit" }
      ]
    }

    Use resolutionKind: "config" to resolve the plugin from the configuration file that declares it. Use resolutionKind: "project" to resolve the plugin from the consuming project. When omitted, resolutionKind defaults to project. This only affects plugin resolution; includes still apply to end-user project files as usual.

  • #​11432 4befd08 Thanks @​ematipico! - Added biome inspect config to show resolved configuration values and their origins as human-readable diagnostics, including matching overrides.

    Configuration files can also extend other configurations up to ten levels deep. Repeated references to the same resolved file are ignored with an information diagnostic, while resolving multiple versions of one extended package produces an error.

  • #​11477 ab05554 Thanks @​nhedger! - Added automatic Git VCS integration when running biome init inside a Git repository, including from nested directories and Git worktrees. The generated configuration sets vcs.enabled and vcs.useIgnoreFile to true, with vcs.clientKind set to "git".

  • #​11451 1ac4b09 Thanks @​ematipico! - #### YAML is now supported

    Added support for formatting YAML files, both .yaml and .yml extensions

  • #​11432 4befd08 Thanks @​ematipico! - Configuration files can now recursively extend local files and npm package configurations up to ten levels. Every repeated reference participates in the merge, while resolving multiple versions of one extended package produces an error.

  • #​11713 ac6a640 Thanks @​dyc3! - Added support for Grit range() patterns, addressing #​8454. Plugins can filter syntax nodes by optional start_line, start_column, end_line, and end_column bounds.

    For example, this pattern matches function calls contained entirely on line 2.

    range(start_line=2, end_line=2) as $call where {
        $call <: call_expression()
    }
    
  • #​11244 0628b53 Thanks @​ematipico! - Added the new CLI option --profile-type-inference to the commands lint and check.

    The profiler is designed to track the execution time of internal queries and operations, group them by file, and sort them from the most expensive to the least expensive.

    biome lint --profile-type-inference
    profiler ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    
      i Type inference profile (Biome <version>)
    
      src/index.ts
    
        Requests (top 5 of 12 groups; 28 source records; 46 executions)
          1. Promise classification <- nursery/noFloatingPromises
          ...
    
        Queries (top 8 of 25 groups; 61 source records; 94 executions)
          1. Promises / infer_expression_is_promise
          ...
    
        Whole-module inference (top 1 of 1 group; 1 source record; 1 execution)
          1. Import depth limit
          ...
    
      68 files omitted.
    
      ℹ To show all the information, use the --verbose option. The output might be very verbose, so it's advised to analyze a single file.
    
      $ biome lint --profile-type-inference --verbose ./path/to/file.ts
    

    Use --verbose to include detailed timings, attribution, breadth, and implementation references for the top source records in each file.

  • #​12108 4fcb880 Thanks @​ematipico! - Promoted 59 nursery rules to stable groups.

Correctness

Promoted the following rules to the correctness group with error severity. All of them are recommended:

Suspicious

Promoted the following rules to the suspicious group:

Security

Promoted useIframeSandbox to the security group with error severity.

Performance

Promoted the recommended rule useDomNodeTextContent to the performance group with warning severity.

Complexity

Promoted the following rules to the complexity group:

Style

Promoted the following rules to the style group with information severity:

  • useVueConsistentDefinePropsDeclaration

  • useVueNextTickPromise (recommended)

  • noReactNativeLiteralColors

  • useConsistentTestIt

  • useTestHooksInOrder

  • useTestHooksOnTop

  • noPlaywrightEval

  • noPlaywrightElementHandle

  • noPlaywrightWaitForSelector

  • useReduceTypeParameter

  • useNamedCaptureGroup

  • useUnicodeRegex

  • useImportsFirst

  • useVarsOnTop

  • useThisInClassMethods

  • noInlineStyles

  • useDomQuerySelector

  • noTopLevelLiterals

  • #​12206 0f984fb Thanks @​dyc3! - Added the ignoreUsingDeclarations option to noUnusedVariables. When enabled, the rule no longer reports unused variables declared with using or await using, because these declarations clean up their value automatically even when the code never reads it.

    {
      "linter": {
        "rules": {
          "correctness": {
            "noUnusedVariables": {
              "options": { "ignoreUsingDeclarations": true }
            }
          }
        }
      }
    }
  • #​12424 6a41490 Thanks @​siketyan! - Removed the javascript.parser.gritMetavariables option. It was intended for internal use only and had no effect on how Biome parses JavaScript and TypeScript files. Biome now reports it as an unknown key and exits with a configuration error, so remove it from your configuration file.

  • #​12055 54870c0 Thanks @​ff1451! - Added the new assist action useGraphqlSortedVariables, which sorts the variable definitions of GraphQL operations.

    Invalid:

    query GetUser($userId: ID!, $includePosts: Boolean = false, $after: String) {
      user(id: $userId) {
        name
      }
    }
  • #​12149 83df808 Thanks @​dyc3! - Added the tailwind.stylesheet option, which points Biome at the CSS file that holds your Tailwind CSS configuration. useTailwindSortedClasses reads the @theme, @utility, and @custom-variant rules in that file and in the local files it imports, so your own theme values, utilities, and variants sort correctly.

    // biome.json
    {
      "tailwind": { "stylesheet": "./src/app.css" }
    }
    /* src/app.css */
    @&#8203;import "tailwindcss";
    
    @&#8203;theme {
      --color-brand: #&#8203;3b82f6;
    }
    
    @&#8203;utility content-auto {
      content-visibility: auto;
    }
    
    @&#8203;custom-variant theme-midnight (&:where([data-theme="midnight"] *));
  • #​12206 0f984fb Thanks @​dyc3! - Added migration of the ignoreRestSiblings and ignoreUsingDeclarations options of no-unused-vars, @typescript-eslint/no-unused-vars, and unused-imports/no-unused-vars to noUnusedVariables in biome migrate eslint. Options that the ESLint configuration omits are set to ESLint's defaults, so the migrated rule reports the same variables. For example, "no-unused-vars": "error" now migrates ignoreRestSiblings as false.

  • #​11709 32d12cb Thanks @​ematipico! - Added the new command biome inspect file, which returns developer information for the given file.

    biome inspect file path/to/file.ts

    By default, the command returns the CST of the file. The command accepts the following arguments:

    • --ast, which returns the AST of a file.
    • --ir, which returns the formatting IR of a file.
    • --semantic, which returns the semantic model information of a file, if available.
  • #​12221 cb571af Thanks @​dyc3! - The rule noEmptySource now supports Markdown files. It reports files that contain only blank lines and HTML comments. For example, the following file is now reported:

    <!-- TODO -->
  • #​12214 8955b56 Thanks @​dyc3! - The rule noEmptySource now supports YAML files. It reports files with no documents and each document that has no content. For example, the second document in the following code is now reported:

    name: foo
    ---
  • #​12033 8669e53 Thanks @​dyc3! - Added the ignoreElements option to noRedundantRoles. Elements listed in this option are not checked by the rule.

    {
      "linter": {
        "rules": {
          "a11y": {
            "noRedundantRoles": {
              "options": {
                "ignoreElements": ["button"]
              }
            }
          }
        }
      }
    }
  • #​12084 04e3750 Thanks @​dyc3! - The rule noRestrictedElements now supports HTML, Vue, Svelte, and Astro files. For example, with { "elements": { "marquee": "Use CSS animations instead." } }, the following code is now reported:

    <marquee>Breaking news</marquee>
  • #​11408 5a870f2 Thanks @​ematipico! - Added support for distributing named Grit rules, rule presets, and configurations through packages that have a manifest file.

    The field plugins is used to export named Grit plugins, and configs is used to export named configurations.
    Package entries must select a named export: package/rule, package/presets/preset, or package/configs/config. Bare package entries aren't supported.
    Rules consumed from another package are exposed under the consuming package's name, while package authors continue to reference them by their source package inside the manifest.
    Configurations consumed from another package are also exposed under the consuming package's name.

    // biome-manifest.json
    {
      "$schema": "./node_modules/@&#8203;biomejs/biome/manifest_schema.json",
      "version": 1,
      "plugins": {
        "rules": [
          "@&#8203;org/shared-rules/noDeprecatedApi",
          "@&#8203;org/strict-rules/presets/recommended",
          { "useCompanyLogger": "./rules/useCompanyLogger.grit" }
        ],
        "presets": {
          "recommended": [
            "useCompanyLogger",
            "@&#8203;org/shared-rules/noDeprecatedApi"
          ]
        }
      },
      "configs": [
        "@&#8203;org/shared-configs/configs/recommended",
        { "base": "./configs/base.json" }
      ]
    }

    The package must publish the manifest and every referenced file, for example, through the files field in package.json.
    Plugin authors can expose their manifest through the biome condition with ./biome-manifest.json as its value.

    // package.json
    {
      "name": "@&#8203;org/biome-plugin",
      "exports": {
        "biome": "./biome-manifest.json",
        "default": "./index.js"
      },
      "files": ["biome-manifest.json", "rules", "configs"]
    }

    And then, you can load the rules in your biome.json:

    // biome.json
    {
      "plugins": [
        "@&#8203;org/biome-plugin/useCompanyLogger",
        "@&#8203;org/biome-plugin/presets/recommended"
      ]
    }

    For more information on how to create a plugin to distribute via npm, check the relative guide.

  • #​12264 90f2eaf Thanks @​dyc3! - Fixed #​11082: glob patterns in the includes option of a plugin are now matched against file paths relative to the directory of the configuration file, the same as files.includes and overrides[].includes.

    Previously, the patterns were matched against the absolute file path, so a pattern such as packages/**/src/** matched no files and the plugin never ran.

    {
      "plugins": [
        { "path": "./my-plugin.grit", "includes": ["packages/**/src/**"] }
      ]
    }

    Patterns that start with **/ keep working. Patterns that contain the absolute path of the project no longer match, and must be rewritten as relative patterns.

  • #​11133 1df00de Thanks @​dlecan! - Added Android (Termux) support to the npm distribution (#​1340). npm install @&#8203;biomejs/biome now works on Termux through the new @biomejs/cli-android-arm64 and @biomejs/cli-android-x64 packages, which reuse the static musl binaries.

  • #​12132 c5fadc4 Thanks @​ematipico! - Added SCSS support throughout the toolchain. Biome can now format and lint .scss files, and recognizes .module.scss files as CSS Modules.

  • #​10837 754432c Thanks @​JamBalaya56562! - Added support for Google Apps Script (.gs) files.

    They are parsed as JavaScript scripts, so ES module import/export statements are reported as errors (Apps Script has no module system). Common Apps Script service globals (e.g. SpreadsheetApp, DriveApp, Logger) are recognized by noUndeclaredVariables and noGlobalAssign, and the list can be extended through the javascript.globals option.

  • #​11126 fa63050 Thanks @​Punisheroot! - Biome now recognizes files with the .htm extension as HTML.

  • #​12291 6c6619e Thanks @​dyc3! - Changed the dependency that enables the tailwind domain automatically. The domain is now enabled when package.json declares tailwindcss v4 or later, instead of v3 or later, because we are currently targeting Tailwind v4 support. The domain can always be enabled manually.

  • #​11394 [de1ad4c](https://redirect.github.com/biomejs/biome/commit/de1ad4c4c5898524d7

✂ Note

PR body was truncated to here.


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.



  • If you want to rebase/retry this PR, check this box

This PR has been generated by Mend Renovate.

@floatpanebot floatpanebot added the dependencies Dependency updates label Jun 12, 2026
@vercel

vercel Bot commented Jun 12, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
go-icalendar Ready Ready Preview Oct 24, 2026 2:24pm UTC

@floatpanebot floatpanebot added the size/M Diff: 51–200 lines label Jun 12, 2026
@floatpanebot
floatpanebot force-pushed the renovate/biomejs-biome-2.x-lockfile branch from 01733ef to 1d5dde3 Compare June 23, 2026 09:54
@floatpanebot floatpanebot changed the title chore(deps): @biomejs/biome ^ 2.5.0 chore(deps): @biomejs/biome ^ 2.5.1 Jun 23, 2026
@floatpanebot
floatpanebot force-pushed the renovate/biomejs-biome-2.x-lockfile branch from 1d5dde3 to da48ecc Compare July 1, 2026 12:44
@floatpanebot floatpanebot changed the title chore(deps): @biomejs/biome ^ 2.5.1 chore(deps): @biomejs/biome ^ 2.5.2 Jul 1, 2026
@floatpanebot
floatpanebot force-pushed the renovate/biomejs-biome-2.x-lockfile branch from da48ecc to 364df3f Compare July 8, 2026 10:25
@floatpanebot floatpanebot changed the title chore(deps): @biomejs/biome ^ 2.5.2 chore(deps): @biomejs/biome ^ 2.5.3 Jul 8, 2026
@floatpanebot
floatpanebot force-pushed the renovate/biomejs-biome-2.x-lockfile branch from 364df3f to ef15766 Compare July 15, 2026 06:21
@floatpanebot floatpanebot changed the title chore(deps): @biomejs/biome ^ 2.5.3 chore(deps): @biomejs/biome ^ 2.5.4 Jul 15, 2026
@floatpanebot
floatpanebot force-pushed the renovate/biomejs-biome-2.x-lockfile branch from ef15766 to 75ef465 Compare July 21, 2026 10:31
@floatpanebot floatpanebot changed the title chore(deps): @biomejs/biome ^ 2.5.4 chore(deps): @biomejs/biome ^ 2.5.5 Jul 21, 2026
@floatpanebot
floatpanebot force-pushed the renovate/biomejs-biome-2.x-lockfile branch from 75ef465 to e796b47 Compare July 28, 2026 11:25
@floatpanebot floatpanebot changed the title chore(deps): @biomejs/biome ^ 2.5.5 chore(deps): @biomejs/biome ^ 2.5.6 Jul 28, 2026
@floatpanebot
floatpanebot force-pushed the renovate/biomejs-biome-2.x-lockfile branch from e796b47 to df446a7 Compare August 4, 2026 14:28
@floatpanebot floatpanebot changed the title chore(deps): @biomejs/biome ^ 2.5.6 chore(deps): @biomejs/biome ^ 2.5.7 Aug 4, 2026
@floatpanebot
floatpanebot force-pushed the renovate/biomejs-biome-2.x-lockfile branch from df446a7 to 0b161f9 Compare August 11, 2026 09:04
@floatpanebot floatpanebot changed the title chore(deps): @biomejs/biome ^ 2.5.7 chore(deps): @biomejs/biome ^ 2.5.8 Aug 11, 2026
@floatpanebot
floatpanebot force-pushed the renovate/biomejs-biome-2.x-lockfile branch from 0b161f9 to 39f5708 Compare August 17, 2026 23:28
@floatpanebot floatpanebot changed the title chore(deps): @biomejs/biome ^ 2.5.8 chore(deps): @biomejs/biome ^ 2.5.9 Aug 17, 2026
@floatpanebot
floatpanebot force-pushed the renovate/biomejs-biome-2.x-lockfile branch from 39f5708 to 281b8ab Compare August 21, 2026 18:43
@floatpanebot floatpanebot changed the title chore(deps): @biomejs/biome ^ 2.5.9 chore(deps): @biomejs/biome ^ 2.5.10 Aug 21, 2026
@floatpanebot
floatpanebot force-pushed the renovate/biomejs-biome-2.x-lockfile branch from 281b8ab to a42a789 Compare August 28, 2026 04:07
@floatpanebot floatpanebot changed the title chore(deps): @biomejs/biome ^ 2.5.10 chore(deps): @biomejs/biome ^ 2.5.11 Aug 28, 2026
@floatpanebot
floatpanebot force-pushed the renovate/biomejs-biome-2.x-lockfile branch from a42a789 to f4166c3 Compare September 3, 2026 08:48
@floatpanebot floatpanebot changed the title chore(deps): @biomejs/biome ^ 2.5.11 chore(deps): @biomejs/biome ^ 2.5.12 Sep 3, 2026
@floatpanebot
floatpanebot force-pushed the renovate/biomejs-biome-2.x-lockfile branch from f4166c3 to cfffb5d Compare September 10, 2026 14:11
@floatpanebot floatpanebot changed the title chore(deps): @biomejs/biome ^ 2.5.12 chore(deps): @biomejs/biome ^ 2.5.13 Sep 10, 2026
@floatpanebot
floatpanebot force-pushed the renovate/biomejs-biome-2.x-lockfile branch from cfffb5d to 3141bc7 Compare September 16, 2026 11:13
@floatpanebot floatpanebot changed the title chore(deps): @biomejs/biome ^ 2.5.13 chore(deps): @biomejs/biome ^ 2.5.14 Sep 16, 2026
@floatpanebot
floatpanebot force-pushed the renovate/biomejs-biome-2.x-lockfile branch from 3141bc7 to 9df87c7 Compare September 30, 2026 18:59
@floatpanebot floatpanebot changed the title chore(deps): @biomejs/biome ^ 2.5.14 chore(deps): @biomejs/biome ^ 2.5.15 Sep 30, 2026
@floatpanebot
floatpanebot force-pushed the renovate/biomejs-biome-2.x-lockfile branch from 9df87c7 to 852a853 Compare October 21, 2026 09:55
@floatpanebot floatpanebot changed the title chore(deps): @biomejs/biome ^ 2.5.15 chore(deps): @biomejs/biome ^ 2.6.0 Oct 21, 2026
@floatpanebot
floatpanebot force-pushed the renovate/biomejs-biome-2.x-lockfile branch from 852a853 to 06ea9cb Compare October 21, 2026 14:59
@floatpanebot floatpanebot changed the title chore(deps): @biomejs/biome ^ 2.6.0 chore(deps): @biomejs/biome ^ 2.6.2 Oct 21, 2026
@floatpanebot
floatpanebot force-pushed the renovate/biomejs-biome-2.x-lockfile branch from 06ea9cb to 98134a9 Compare October 24, 2026 14:23
@floatpanebot floatpanebot changed the title chore(deps): @biomejs/biome ^ 2.6.2 chore(deps): @biomejs/biome ^ 2.6.3 Oct 24, 2026

This branch was successfully deployed

1 active deployment
Preview — 98134a9e Deployed Oct 24, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Dependency updates size/M Diff: 51–200 lines

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant