# Biome @biomejs/biome@2.5.0 — Release & Upgrade Intelligence
- **Product:** Biome (https://biomejs.dev)
- **Version:** @biomejs/biome@2.5.0
- **Released:** Jun 12, 2026
- **Impact Score:** 5/10
- **Breaking Changes:** Not verified
- **Canonical Analysis:** https://changelogs.us/biome/updates/biomejs-biome-2.5.0/

## Executive Summary (TL;DR)
Biome @biomejs/biome@2.5.0. Source highlight: Added a new reporter called `concise`. When `--reporter=concise` is passed the commands `format`, `lint`, `check` and `ci`, the diagnostics are printed in a compact manner:

## New Features
- Added a new reporter called `concise`. When `--reporter=concise` is passed the commands `format`, `lint`, `check` and `ci`, the diagnostics are printed in a compact manner:
- Added the `useKeyWithClickEvents` a11y lint rule for HTML files (`.html`, `.vue`, `.svelte`, `.astro`). This is a port of the existing JSX rule. The rule enforces that elements with an `onclick` handler also have at least one keyboard event handler (`onkeydown`, `onkeyup`, or `onkeypress`) to ensure keyboard accessibility.
- Added new nursery lint rule `noUndeclaredClasses` for HTML, JSX, and SFC files (Vue, Astro, Svelte). The rule detects CSS class names used in `class="..."` (or `className`) attributes that are not defined in any `<style>` block or linked stylesheet reachable from the file.
- Added new nursery lint rule `noUnusedClasses` for CSS. The rule detects CSS class selectors that are never referenced in any HTML or JSX file that imports the stylesheet. This is a project-domain rule that requires the module graph.
- Added a `biome upgrade` command for standalone installations. It upgrades Homebrew installs with `brew upgrade biome`, updates manually installed binaries from the latest GitHub release, and tells npm users to upgrade with their package manager instead.
- Added the HTML version of the `useHeadingContent` rule. The rule now enforces that heading elements (`h1`-`h6`) have content accessible to screen readers in HTML, Vue, Svelte, and Astro files.

## Improvements
- `noExcessiveClassesPerFile`
- `noExcessiveLinesPerFile`
- `noSyncScripts`
- `noJsxPropsBind`
- `useVueVapor`
- refactor: improve watch mode

## Bug Fixes
- Added support for applying GritQL plugin rewrites as code actions. GritQL plugins that use the rewrite operator (`=>`) now produce fixable diagnostics for JavaScript, CSS, and JSON files. By default, plugin rewrites are treated as unsafe fixes and require `--write --unsafe` to apply. Plugin authors can pass `fix_kind = "safe"` to `register_diagnostic()` to mark a fix as safe, allowing it to be applied with just `--write`.
- Added HTML support for the `noAriaHiddenOnFocusable` accessibility lint rule, which enforces that `aria-hidden="true"` is not set on focusable elements. Focusable elements include native interactive elements (`<button>`, `<input>`, `<select>`, `<textarea>`), elements with `href` (`<a>`, `<area>`), elements with `tabindex >= 0`, and editing hosts (`contenteditable`). Includes an unsafe fix to remove the `aria-hidden` attribute.
- Added the nursery rule `useReactFunctionComponentDefinition`, which enforces a consistent function type for named React function components.
- Added `ignoreMixedLogicalExpressions` to useNullishCoalescing, partially addressing #9232. When enabled, Biome ignores `||` and `||=` mixed with `&&` in the same expression tree.
- Added the new nursery rule `useSvelteRequireEachKey`, a Svelte lint rule that reports `{#each}` blocks with item bindings that are missing a key.
- Added `useIncludes` to the nursery group. This rule flags comparisons of `String.prototype.indexOf()` or `Array.prototype.indexOf()` against `-1` and suggests replacing them with the clearer `includes()` / `!includes()` form.

## Upgrade Command
```bash
npm install --save-dev --save-exact @biomejs/biome@2.5.0
```
