Guide for creating and writing proper changesets for Biome PRs. Use when a PR introduces user-visible changes (bug fixes, new features, rule changes, formatter changes, parser changes) that need a changeset entry for the CHANGELOG. Trigger when creating changesets, writing changeset descriptions, or choosing the correct change type.
80
100%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Use this skill when a PR introduces user-facing changes that require a changeset. Changesets drive CHANGELOG generation and release automation. Internal-only changes (refactors with no user-visible effect) do not need changesets.
Do not create changeset files manually. Use:
just new-changeset-emptyThe command will create a file in .changeset/. Edit it directly to add detail.
Note that the file will not be literally empty. It will have this content:
---
---Do not simply append to the changeset description below the existing content, which creates an invalid changeset.
Requires
pnpm— runpnpm ifrom repo root first.
patch — Bug fixes.minor — New features. PR must target the next branch.major — Breaking user API changes. PR must target the next branch. These are rare and strictly controlled.Refer to the versioning page when unsure.
---
"@biomejs/biome": patch
---
Description here.If you need headers inside the description, use #### or ##### only. Other header levels break the CHANGELOG tooling.
.).Start with a link to the issue:
Fixed [#4444](https://github.com/biomejs/biome/issues/4444): [`useOptionalChain`](https://biomejs.dev/linter/rules/use-optional-chain/) now detects negated logical OR chains.Show an example of an invalid case. Use inline code for simple things, a code block for complex ones:
Added a new nursery rule [`noDuplicateSelectors`](https://biomejs.dev/linter/rules/no-duplicate-selectors/), that disallows duplicate selector lists within the same at-rule context.
For example, the following snippet triggers the rule:
` ` `css
.foo {}
.foo {}
` ` `Clearly show what is now invalid that was not before (or vice versa). Show both sides if helpful:
Fixed [#7211](https://github.com/biomejs/biome/issues/7211): [`useOptionalChain`](https://biomejs.dev/linter/rules/use-optional-chain/) now detects negated logical OR chains. The following code is now considered invalid:
` ` `js
!foo || !foo.bar
` ` `Show the formatting diff:
Changed formatting of arrow function parameters. Example:
` ` `diff
- const fn = ( a, b ) => {};
+ const fn = (a, b) => {};
` ` `Brief inline example of what can now be parsed:
Added support for parsing `using` declarations in JavaScript.Use a code block if multiline clarity helps.
Always link to the website, even if the page does not exist yet (it will after merge):
[`useConst`](https://biomejs.dev/linter/rules/use-const/)[`organizeImports`](https://biomejs.dev/assist/actions/organize-imports/).changeset/ or recent CHANGELOG.md entries for reference.CONTRIBUTING.md section "Changelog"c50a853
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.