Biome 2.6.3 shipped on 24 October 2026 with 33 new nursery (experimental) lint rules and a batch of formatter fixes. Two of the new rules go after a classic JavaScript trap: sorting an array in the wrong way, or for the wrong reason.
Key takeaways
- Biome 2.6.3 is a patch release, but it adds 33 nursery rules covering JavaScript, TypeScript, CSS and Vue.
noArraySortForMinMaxflags sorting just to read the smallest or largest value.noBooleanSortComparatorflags sort comparators that return a boolean instead of a number.- Formatter fixes keep parentheses in tricky TypeScript instantiation expressions.
- Nursery rules are experimental, so expect changes before they go stable.
What is new in Biome 2.6.3?
Biome is a toolchain that lints and formats web code. The 2.6.3 release notes list 33 new nursery rules, which is the group Biome uses for rules still being tuned. The previous big milestone, Biome v2.5 on 5 June 2026, pushed the toolchain past 500 lint rules and promoted 73 nursery rules to stable.
So this release is a steady stream of new checks rather than a headline feature. That is the point of a nursery: ideas land fast, and the useful ones graduate.
Why do the two sort rules matter?
Both rules, added by contributor dyc3, target code that looks fine and quietly misbehaves.
noArraySortForMinMax (#12275) catches code like array.toSorted((a, b) => a - b)[0]. You sort the whole array, an O(n log n) job, just to read one value. Math.min(...array) or Math.max(...array) says what you mean.
noBooleanSortComparator (#12432) catches array.sort((a, b) => a > b). A comparator must return a number, and a boolean is not one in the way sort needs.
MDN spells out why. A negative value means a comes first, a positive value means a comes after b, and zero or NaN means equal. A comparator that returns only 1 and 0 breaks anti-symmetry, so it “will not be able to sort reliably,” and MDN notes engines disagree on the result: V8 and JavaScriptCore return the array unsorted in its example, while SpiderMonkey sorts it ascending.
That is the nasty part. The bug can pass your tests in one browser and fail in another.
What else is in the 33 new rules?
The list is broad. Here is a sample, grouped by what they check.
| Area | Rule | What it flags |
|---|---|---|
| JS/TS | noPathConcat | Joining strings to __dirname or import.meta to build paths |
| JS/TS | useMathTrunc | Bitwise tricks like | 0 and ~~ |
| JS/TS | noUselessSplice | splice calls with simpler forms, such as shift() |
| JS/TS | useIteratorZip | Index loops that could use Iterator.zip() |
| React Query | noTanstackQueryRestDestructuring | Rest destructuring on query results (new tanstackQuery domain) |
| Vue | noVueWatchAfterAwait | Watchers created after an await in setup() |
| CSS | noZeroLengthUnit | Units on zero lengths |
Vue gets seven new rules in all, and Playwright, Svelte and React Native each get one. A new Vue semantic model (#12260) now also feeds HTML rules.
Which bugs did Biome 2.6.3 fix?
- Formatter: parentheses are now kept around instantiation expressions in several positions (#12496, #12536, #12540, #12598). Before, type arguments could attach to the wrong operand.
- Markdown: the blank line between a paragraph and a list survives (#12526).
- CSS:
useSortedPropertiesno longer produces invalid CSS when the last property has no semicolon (#12418). - CLI: exclusions in
files.includesno longer reach directories above the project root (#12599). - CLI output: the default reporter prints its summary to stderr instead of stdout (#12593).
The last item is worth a look if you parse Biome’s output in scripts. Anything that read the summary from stdout will need to read stderr now. That is my reading of the change, so test your pipeline.
How do you try the new rules?
Update the @biomejs/biome package to 2.6.3, then switch on individual rules under linter.rules.nursery in biome.json. Turning on the whole nursery group is possible too, but it is noisy. Pick the rules you care about, run biome lint, and read what it finds. Check the current Biome configuration docs for exact syntax, as options such as preset arrived in v2.5.
One caveat: noShortTimeValues does nothing until you set a minimum. Opinion: for a patch release, I would trial the two sort rules first. They find real bugs, not style preferences.
What happens next
Nursery rules usually get tuned from user feedback, then move to stable groups in a later minor release, as happened with 73 rules in v2.5. Expect some of these 33 to change names, defaults or severity before then. Watch the Biome releases page for which ones graduate.
If you run Biome through its JavaScript API, see our note on Biome JS API 6.1.0 and the span fix. For another recent tooling fix, read uv 0.13.3 and the uv export slowdown.
FAQ
Is Biome 2.6.3 a breaking release?
It is a patch release, and the new rules are in the nursery, so they are off unless you enable them. The stderr change for the default reporter can affect scripts that read stdout.
Why is a boolean sort comparator a bug?
Sort needs a negative, zero or positive number to order two items. A boolean gives only two outcomes, so the comparator is inconsistent and engines can return different orders.
What does nursery mean in Biome?
Nursery is the group for new, experimental rules. They may change or have rough edges until they are promoted to a stable group.
Next step: update to 2.6.3, enable noBooleanSortComparator and noArraySortForMinMax, and run a lint pass on your codebase.
Leave a comment