Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
a3e3369
feat(resolver): support `baseUrl` in `tsconfig.json` (#7263)
arendjr Aug 19, 2025
f66b0c5
feat(parse/css): add option to parse Tailwind v4 directives (#7164)
dyc3 Aug 20, 2025
0d4661f
feat(format/css): implement formatters for new tailwind nodes (#7241)
dyc3 Aug 23, 2025
72a8b02
fix(parse/css): let `@utility` parse declarations and rules (#7314)
dyc3 Aug 24, 2025
272632f
feat: indentation for vue and svelte files (#7330)
ematipico Aug 26, 2025
de0d2d6
feat(htmlish): implement `indentScriptAndStyle` option (#7333)
dyc3 Aug 27, 2025
87b2cf6
Merge branch 'main' into next
arendjr Aug 29, 2025
ebbddc4
feat(core): add force-ignore syntax to `files.includes` (#7359)
arendjr Aug 31, 2025
e4feb8e
feat(cli): --skip/--only with domains (#7392)
ematipico Sep 7, 2025
ed025cd
chore: ensure force-ignore syntax works with nested biome.json (#7444)
arendjr Sep 8, 2025
564f023
feat(core): embedded formatting in html files (#7467)
ematipico Sep 13, 2025
b23bbee
Merge branch 'main' into next
siketyan Sep 15, 2025
b13e524
feat: add react library aliases (#7488)
kpapa05 Sep 16, 2025
0bccd34
chore: add .oxlintrc.json to well-known files (#7536)
TheAlexLichter Sep 20, 2025
6bc556d
chore: introduce ruledoc utils (#7541)
arendjr Sep 20, 2025
ea23d15
fix: resolve parse errors in ruledoc code blocks (#7544)
arendjr Sep 20, 2025
85d3a3a
feat(lint): move some rules to the `react` domain (#7548)
siketyan Sep 21, 2025
8ab8b6c
perf: optimise embedded formatter (#7567)
arendjr Sep 22, 2025
f890861
feat: implemented embedded JSON parsing (#7571)
arendjr Sep 24, 2025
e51dd55
perf: only query settings once (#7593)
arendjr Sep 25, 2025
98ad5a9
Merge remote-tracking branch 'origin/main' into next
ematipico Oct 2, 2025
09445c8
feat: add 'auto' mode to lineEndings (#7599)
anaisbetts Oct 3, 2025
6dc74da
chore: fix failure inside website
ematipico Oct 2, 2025
f1b825e
chore: add .zed to gitignore (#7634)
tidefield Oct 2, 2025
85d3381
fix(lint/noUselessEscapeInString): avoid false positive for $\{ escap…
lucasweng Oct 2, 2025
2ab15d9
fix(lint): only highlight function names in useMaxParams rule (#7608)
ritoban23 Oct 2, 2025
74fb8ca
docs: add Polish translation of Biome README (#7630)
SzymCode Oct 2, 2025
ae6e8fd
fix(linter): `useImportExtensions` handles queries and hashes (#7640)
arendjr Oct 2, 2025
a85f807
ci: breakdown benchmarks (#7641)
ematipico Oct 2, 2025
24d471f
ci: fix permission for benchmarks
ematipico Oct 2, 2025
a4e9064
chore: upgrade to rust 1.90.0 (#7642)
ematipico Oct 2, 2025
a85a8f5
fix(css_parser): add support for parsing :state() (#7619) (#7665)
ryan-m-walker Oct 3, 2025
357b8f7
feat: emit diagnostics from embedded nodes (#7632)
ematipico Oct 3, 2025
aa9dd92
Merge remote-tracking branch 'origin/main' into next
ematipico Oct 3, 2025
acf6389
chore: merge with main
ematipico Oct 3, 2025
a1d4b6b
chore: `AnyEmbeddedSnippet` terminology (#7674)
arendjr Oct 3, 2025
480909a
feat(cli): print info count (#7667)
ematipico Oct 4, 2025
837f3f3
feat(core): apply code fixes in snippets (#7670)
ematipico Oct 5, 2025
461c478
feat(html): analyzer (#5814)
ematipico Oct 6, 2025
6bd1e3b
fix: incorrect logic for CSS fix all (#7699)
ematipico Oct 6, 2025
296627d
feat(reporter): add checkstyle (#6356)
wrick17 Oct 7, 2025
3b6f5e3
feat(cli): rdjson reporter (#7698)
ematipico Oct 7, 2025
188a767
feat(cli): expose formatWithErrors via --format-with-errors flag (#7719)
cadunass Oct 9, 2025
d3aac63
feat(cli): add parsing arguments (#7723)
ematipico Oct 10, 2025
28e8860
feat(core): full experimental support htmlish languages (#7702)
ematipico Oct 13, 2025
d523500
fix: typescript types generation (#7743)
ematipico Oct 13, 2025
6fcbc07
feat(noUnknownAtRule): add `ignore` option (#7745)
dyc3 Oct 13, 2025
6b3483c
chore: add migration for ignores scanner (#7751)
ematipico Oct 14, 2025
6ed4d16
feat(biome_js_analyze): added support for React 19.2 (#7669)
barklund Oct 14, 2025
d67c7e9
Merge remote-tracking branch 'origin/main' into next
ematipico Oct 14, 2025
0086309
chore: fix regression in tests
ematipico Oct 14, 2025
a05866e
Merge remote-tracking branch 'origin/main' into next
ematipico Oct 15, 2025
8229ef9
Merge remote-tracking branch 'origin/main' into next
ematipico Oct 20, 2025
1b037e3
chore: merge main and fix compilation
ematipico Oct 20, 2025
63cb7ff
feat(cli): enhance init command (#7753)
ematipico Oct 20, 2025
cea002f
feat: promote lint rules (#7758)
ematipico Oct 22, 2025
bc8ac2b
Merge remote-tracking branch 'origin/main' into next
ematipico Oct 22, 2025
32d0173
[autofix.ci] apply automated fixes
autofix-ci[bot] Oct 22, 2025
6bf88fe
chore: remove empty source from JSON rules
ematipico Oct 22, 2025
c9033de
Merge remote-tracking branch 'origin/main' into next
ematipico Oct 23, 2025
a8188b5
chore: regenerate files
ematipico Oct 23, 2025
27a5838
chore: fix incorrect configuration
ematipico Oct 23, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
28 changes: 28 additions & 0 deletions .changeset/based-bears-brawl.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
---
"@biomejs/biome": minor
---

Biome's resolver now supports `baseUrl` if specified in `tsconfig.json`.

#### Example

Given the following file structure:

**`tsconfig.json`**
```json
{
"compilerOptions": {
"baseUrl": "./src",
}
}
```
Comment on lines +12 to +18
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix the invalid JSON syntax in the example.

The JSON example has a trailing comma before the closing brace on line 16, which is not valid JSON. This will confuse users trying to replicate the example.

Apply this diff to fix the JSON:

 **`tsconfig.json`**
 ```json
 {
     "compilerOptions": {
-        "baseUrl": "./src",
+        "baseUrl": "./src"
     }
 }

<details>
<summary>🤖 Prompt for AI Agents</summary>

In .changeset/based-bears-brawl.md around lines 12 to 18 the JSON example
contains an invalid trailing comma after "baseUrl": "./src",; remove the
trailing comma so the object closes properly (i.e., change "baseUrl": "./src",
to "baseUrl": "./src") and ensure the JSON block is valid before committing.


</details>

<!-- This is an auto-generated comment by CodeRabbit -->


**`src/foo.ts`**
```ts
export function foo() {}
```

In this scenario, `import { foo } from "foo";` should work regardless of the
location of the file containing the `import` statement.

Fixes [#6432](https://github.com/biomejs/biome/issues/6432).
5 changes: 5 additions & 0 deletions .changeset/breezy-suns-leave.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@biomejs/biome": minor
---

Added `ignore` option to `noUnknownAtRules`. If an unknown at-rule matches any of the items provided in `ignore`, a diagnostic won't be emitted.
26 changes: 26 additions & 0 deletions .changeset/busy-pens-send.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
---
"@biomejs/biome": minor
---

Enhanced the `init` command. The `init` command now checks if the existing project contains known ignore files and known generated folders.

If Biome finds `.gitignore` or `.ignore` files, it will add the following configuration to `biome.json`:
```diff
{
+ "vcs": {
+ "enabled": true,
+ "clientKind": "git",
+ "useIgnoreFile": true
+ }
}
```

If Biome finds a `dist/` folder, it will exclude it automatically using the double-exclude syntax:

```diff
{
+ "files": {
+ "includes": ["**", "!!**/dist"]
+ }
}
```
5 changes: 5 additions & 0 deletions .changeset/crazy-steaks-mix.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@biomejs/biome": minor
---

The rules in a domain are no longer enabled automatically by the installed dependencies unless the rule is recommended.
14 changes: 14 additions & 0 deletions .changeset/css-parse-modules-flag.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
"@biomejs/biome": minor
---

Added `--css-parse-css-modules` CLI flag to control whether CSS Modules syntax is enabled.

You can now enable or disable CSS Modules parsing directly from the command line:

```shell
biome check --css-parse-css-modules=true file.module.css
biome format --css-parse-css-modules=true file.module.css
biome lint --css-parse-css-modules=true file.module.css
biome ci --css-parse-css-modules=true file.module.css
```
14 changes: 14 additions & 0 deletions .changeset/css-parse-tailwind-flag.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
"@biomejs/biome": minor
---

Added `--css-parse-tailwind-directives` CLI flag to control whether Tailwind CSS 4.0 directives and functions are enabled.

You can now enable or disable Tailwind CSS 4.0 directive parsing directly from the command line:

```shell
biome check --css-parse-tailwind-directives=true file.css
biome format --css-parse-tailwind-directives=true file.css
biome lint --css-parse-tailwind-directives=true file.css
biome ci --css-parse-tailwind-directives=true file.css
```
12 changes: 12 additions & 0 deletions .changeset/dull-drinks-switch.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
"@biomejs/biome": minor
---

Updated the formatting of `.svelte` and `.vue` files. Now the indentation of the JavaScript blocks matches Prettier's:

```diff
<script>
- import Component from "./Component"
+ import Component from "./Component"
</script>
```
5 changes: 5 additions & 0 deletions .changeset/eager-suns-smoke.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@biomejs/biome": patch
---

Fixed an issue where the JUnit reporter returned a zero-based location. Now the location returned is one-based.
24 changes: 24 additions & 0 deletions .changeset/few-bees-reply.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
---
"@biomejs/biome": minor
---

Implemented the `indentScriptAndStyle` option for vue and svelte files, with the default set to `false` to match [Prettier's `vueIndentScriptAndStyle` option](https://prettier.io/docs/options#vue-files-script-and-style-tags-indentation). When enabled, this option indents the content within `<script>` and `<style>` tags to align with the surrounding HTML structure.

It can be enabled with this configuration:

```json
{
"html": {
"formatter": {
"indentScriptAndStyle": true
}
}
}
```

Which will format this code to:
```vue
<script>
import Component from "./Component.vue";
</script>
```
44 changes: 44 additions & 0 deletions .changeset/forced-files-forget.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
---
"@biomejs/biome": minor
---

Deprecated the option `files.experimentalScannerIgnores` in favour of **force-ignore** syntax in `files.includes`.

`files.includes` supports ignoring files by prefixing globs with an exclamation mark (`!`). With this change, it also supports _force_-ignoring globs by prefixing them with a double exclamation mark (`!!`).

The effect of force-ignoring is that the scanner will not index files matching the glob, even in project mode, even if those files are imported by other files, and even if they are files that receive special treatment by Biome, such as nested `biome.json` files.

#### Example

Let's take the following configuration:

```json
{
"files": {
"includes": [
"**",
"!**/generated",
"!!**/dist",
"fixtures/example/dist/*.js"
]
},
"linter": {
"domains": {
"project": "all"
}
}
}
```

This configuration achieves the following:

- Because the [project domain](https://biomejs.dev/linter/domains/#project) is enabled, all supported files in the project are indexed _and_ processed by the linter, _except_:
- Files inside a `generated` folder are not processed by the linter, but they will get indexed _if_ a file outside a `generated` folder imports them.
- Files inside a `dist` folder are never indexed nor processed, not even if they are imported for any purpose, _except_:
- When the `dist` folder is inside `fixtures/example/`, its `.js` files _do_ get both indexed and processed.

In general, we now recommend using the force-ignore syntax for any folders that contain _output_ files, such as `build/` and `dist/`. For such folders, it is highly unlikely that indexing has any useful benefits. For folders containing generated files, you may wish to use the regular ignore syntax so that type information can still be extracted from the files.

`experimentalScannerIgnores` will continue to work for now, but you'll see a deprecation warning if you still use it.

Run the `biome migrate --write` command to automatically update the configuration file.
64 changes: 64 additions & 0 deletions .changeset/gentle-pots-hunt.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
---
"@biomejs/biome": minor
---

Added a new reporter named `rdjson`. This reporter prints diagnostics following the [RDJSON format](https://deepwiki.com/reviewdog/reviewdog/3.2-reviewdog-diagnostic-format):

The following command:

```shell
biome check --reporter=rdjson
```

Will emit diagnostics in the following format:

```json
{
"source": {
"name": "Biome",
"url": "https://biomejs.dev"
},
"diagnostics": [
{
"code": {
"url": "https://biomejs.dev/linter/rules/no-unused-imports",
"value": "lint/correctness/noUnusedImports"
},
"location": {
"path": "index.ts",
"range": {
"end": {
"column": 11,
"line": 0
},
"start": {
"column": 7,
"line": 0
}
}
},
"message": "This import is unused."
},
{
"code": {
"url": "https://biomejs.dev/linter/rules/no-unused-imports",
"value": "lint/correctness/noUnusedImports"
},
"location": {
"path": "index.ts",
"range": {
"end": {
"column": 10,
"line": 1
},
"start": {
"column": 9,
"line": 1
}
}
},
"message": "Several of these imports are unused."
}
]
}
```
14 changes: 14 additions & 0 deletions .changeset/icy-views-lick.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
"@biomejs/biome": minor
---

The `formatWithErrors` option can now be set via CLI using the `--format-with-errors` flag.

This flag was previously only available in the configuration file. It allows formatting to proceed on files with syntax errors, which is useful during development when you want to auto-format code while fixing syntax issues.

#### Example

```shell
biome format --format-with-errors=true --write file.js
```

14 changes: 14 additions & 0 deletions .changeset/json-parse-comments-flag.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
"@biomejs/biome": minor
---

Added `--json-parse-allow-comments` CLI flag to control whether comments are allowed in JSON files.

You can now enable or disable comment parsing in JSON files directly from the command line:

```shell
biome check --json-parse-allow-comments=true file.json
biome format --json-parse-allow-comments=true file.json
biome lint --json-parse-allow-comments=true file.json
biome ci --json-parse-allow-comments=true file.json
```
14 changes: 14 additions & 0 deletions .changeset/json-parse-trailing-commas-flag.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
"@biomejs/biome": minor
---

Added `--json-parse-allow-trailing-commas` CLI flag to control whether trailing commas are allowed in JSON files.

You can now enable or disable trailing comma parsing in JSON files directly from the command line:

```shell
biome check --json-parse-allow-trailing-commas=true file.json
biome format --json-parse-allow-trailing-commas=true file.json
biome lint --json-parse-allow-trailing-commas=true file.json
biome ci --json-parse-allow-trailing-commas=true file.json
```
13 changes: 13 additions & 0 deletions .changeset/large-lands-brush.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
"@biomejs/biome": minor
---

Promoted new lint rules:
- Promoted `noNonNullAssertedOptionalChain` to the suspicious group
- Promoted `useReactFunctionComponents` to the `style` group
- Promoted `useImageSize` to the `correctness` group
- Promoted `useConsistentTypeDefinitions` to the `style` group
- Promoted `useQwikClasslist` to the `correctness` group
- Promoted `noSecrets` to the `security` group

Removed the lint rule `useAnchorHref`, because its use case is covered by `useValidAnchor`.
39 changes: 39 additions & 0 deletions .changeset/light-women-live.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
---
"@biomejs/biome": minor
---

Added the new `checkstyle` reporter. When `--reporter=checkstyle` is passed to the CLI, Biome will emit diagnostics for [Checkstyle format](https://checkstyle.org/):

```xml
<?xml version="1.0" encoding="utf-8"?>
<checkstyle version="4.3">
<file name="index.ts">
<error line="1" column="8" severity="warning" message="This import is unused." source="lint/correctness/noUnusedImports" />
<error line="2" column="10" severity="warning" message="Several of these imports are unused." source="lint/correctness/noUnusedImports" />
<error line="8" column="5" severity="warning" message="This variable f is unused." source="lint/correctness/noUnusedVariables" />
<error line="9" column="7" severity="warning" message="This variable f is unused." source="lint/correctness/noUnusedVariables" />
<error line="1" column="1" severity="error" message="The imports and exports are not sorted." source="assist/source/organizeImports" />
<error line="4" column="3" severity="error" message="Using == may be unsafe if you are relying on type coercion." source="lint/suspicious/noDoubleEquals" />
<error line="6" column="1" severity="error" message="This is an unexpected use of the debugger statement." source="lint/suspicious/noDebugger" />
<error line="8" column="5" severity="error" message="This variable implicitly has the any type." source="lint/suspicious/noImplicitAnyLet" />
<error line="9" column="7" severity="error" message="This variable implicitly has the any type." source="lint/suspicious/noImplicitAnyLet" />
<error line="2" column="10" severity="error" message="Shouldn&apos;t redeclare &apos;z&apos;. Consider to delete it or rename it." source="lint/suspicious/noRedeclare" />
<error line="9" column="7" severity="error" message="Shouldn&apos;t redeclare &apos;f&apos;. Consider to delete it or rename it." source="lint/suspicious/noRedeclare" />
<error line="0" column="0" severity="error" message="Formatter would have printed the following content:" source="format" />
</file>
<file name="main.ts">
<error line="1" column="8" severity="warning" message="This import is unused." source="lint/correctness/noUnusedImports" />
<error line="2" column="10" severity="warning" message="Several of these imports are unused." source="lint/correctness/noUnusedImports" />
<error line="8" column="5" severity="warning" message="This variable f is unused." source="lint/correctness/noUnusedVariables" />
<error line="9" column="7" severity="warning" message="This variable f is unused." source="lint/correctness/noUnusedVariables" />
<error line="1" column="1" severity="error" message="The imports and exports are not sorted." source="assist/source/organizeImports" />
<error line="4" column="3" severity="error" message="Using == may be unsafe if you are relying on type coercion." source="lint/suspicious/noDoubleEquals" />
<error line="6" column="1" severity="error" message="This is an unexpected use of the debugger statement." source="lint/suspicious/noDebugger" />
<error line="8" column="5" severity="error" message="This variable implicitly has the any type." source="lint/suspicious/noImplicitAnyLet" />
<error line="9" column="7" severity="error" message="This variable implicitly has the any type." source="lint/suspicious/noImplicitAnyLet" />
<error line="2" column="10" severity="error" message="Shouldn&apos;t redeclare &apos;z&apos;. Consider to delete it or rename it." source="lint/suspicious/noRedeclare" />
<error line="9" column="7" severity="error" message="Shouldn&apos;t redeclare &apos;f&apos;. Consider to delete it or rename it." source="lint/suspicious/noRedeclare" />
<error line="0" column="0" severity="error" message="Formatter would have printed the following content:" source="format" />
</file>
</checkstyle>
```
5 changes: 5 additions & 0 deletions .changeset/max-managers-mandate.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@biomejs/biome": patch
---

Fixed an issue with the `files.maxSize` setting. Previously the setting would always be looked up in the root settings, even in monorepos where a closer `biome.json` is available. It now correctly uses the nearest configuration.
5 changes: 5 additions & 0 deletions .changeset/new-signs-tie.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@biomejs/biome": minor
---

Added "@rbxts/react" as an alias for "react" for handling the reactClassic jsxRuntime.
5 changes: 5 additions & 0 deletions .changeset/polite-pets-serve.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@biomejs/biome": minor
---

Added `.oxlintrc.json` to well-known files.
12 changes: 12 additions & 0 deletions .changeset/seven-beans-cough.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
"@biomejs/biome": minor
---

The following rules are now a part of the `react` domain, and they won't be enabled automatically unless you enabled the domain, or Biome detects `react` as a dependency of your closest `package.json`:

- [`lint/correctness/noChildrenProp`](https://biomejs.dev/linter/rules/no-children-prop/) (recommended)
- [`lint/correctness/noReactPropAssignments`](https://biomejs.dev/linter/rules/no-react-prop-assignments/)
- [`lint/security/noDangerouslySetInnerHtml`](https://biomejs.dev/linter/rules/no-dangerously-set-inner-html/) (recommended)
- [`lint/security/noDangerouslySetInnerHtmlWithChildren`](https://biomejs.dev/linter/rules/no-dangerously-set-inner-html-with-children/) (recommended)
- [`lint/style/useComponentExportOnlyModules`](https://biomejs.dev/linter/rules/use-component-export-only-modules/)
- [`lint/suspicious/noArrayIndexKey`](https://biomejs.dev/linter/rules/no-array-index-key/) (recommended)
12 changes: 12 additions & 0 deletions .changeset/social-hornets-wait.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
"@biomejs/biome": minor
---

Added the ability to show severity `Information` diagnostics in reporter outputs.

If one or more rules are triggered, and they are configured to emit an `Information` diagnostic, now they're counted in the final output:

```bash
Checked 1 file in <TIME>. No fixes applied.
Found 1 info.
```
Loading
Loading