1
0
mirror of https://github.com/alecthomas/chroma.git synced 2026-04-01 19:01:23 +02:00
renovate[bot] f2db7908b2 chore(deps): update all non-major dependencies (#1234)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [biome](https://redirect.github.com/biomejs/biome) | patch | `2.4.7` →
`2.4.9` |
| [just](https://redirect.github.com/casey/just) | minor | `1.47.0` →
`1.48.0` |
| [uv](https://redirect.github.com/astral-sh/uv) | minor | `0.10.10` →
`0.11.1` |

---

### Release Notes

<details>
<summary>biomejs/biome (biome)</summary>

###
[`v2.4.9`](https://redirect.github.com/biomejs/biome/releases/tag/%40biomejs/biome%402.4.9):
Biome CLI v2.4.9

##### 2.4.9

##### Patch Changes

- [#&#8203;9315](https://redirect.github.com/biomejs/biome/pull/9315)
[`085d324`](085d324b96)
Thanks [@&#8203;ematipico](https://redirect.github.com/ematipico)! -
Added a new nursery CSS 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 because the second
selector and the first selector are the same:

  ```css
  /* First selector */
  .x .y .z {
  }

  /* Second selector */
  .x {
    .y {
      .z {
      }
    }
  }
  ```

- [#&#8203;9567](https://redirect.github.com/biomejs/biome/pull/9567)
[`b7ab931`](b7ab931be1)
Thanks [@&#8203;ematipico](https://redirect.github.com/ematipico)! -
Fixed
[#&#8203;7211](https://redirect.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;
  ```

- [#&#8203;8670](https://redirect.github.com/biomejs/biome/pull/8670)
[`607ebf9`](607ebf9eac)
Thanks [@&#8203;tt-a1i](https://redirect.github.com/tt-a1i)! - Fixed
[#&#8203;8345](https://redirect.github.com/biomejs/biome/issues/8345):
[`useAdjacentOverloadSignatures`](https://biomejs.dev/linter/rules/use-adjacent-overload-signatures/)
no longer reports false positives for static and instance methods with
the same name. Static methods and instance methods are now treated as
separate overload groups.

  ```ts
  class Kek {
    static kek(): number {
      return 0;
    }
    another(): string {
      return "";
    }
    kek(): number {
      return 1;
    } // no longer reported as non-adjacent
  }
  ```

- [#&#8203;9476](https://redirect.github.com/biomejs/biome/pull/9476)
[`97b80a8`](97b80a8b01)
Thanks [@&#8203;masterkain](https://redirect.github.com/masterkain)! -
Fixed [`#9475`](https://redirect.github.com/biomejs/biome/issues/9475):
Fixed a panic when Biome analyzed ambient TypeScript modules containing
class constructor, getter, or setter signatures that reference local
type aliases. Biome now handles these declarations without crashing
during semantic analysis.

- [#&#8203;9553](https://redirect.github.com/biomejs/biome/pull/9553)
[`0cd5298`](0cd5298fec)
Thanks [@&#8203;dyc3](https://redirect.github.com/dyc3)! - Fixed a bug
where enabling the rules of a whole group, would enable rules that
belonged to a domain under the same group.

For example, `linter.rules.correctness = "error"` no longer enables
React- or Qwik-specific correctness rules unless `linter.domains.react`,
`linter.domains.qwik`, or an explicit rule config also enables them, or
their relative dependencies are installed.

- [#&#8203;9586](https://redirect.github.com/biomejs/biome/pull/9586)
[`4cafb71`](4cafb71b99)
Thanks [@&#8203;dyc3](https://redirect.github.com/dyc3)! - Fixed
[#&#8203;8828](https://redirect.github.com/biomejs/biome/issues/8828):
Grit patterns using `export { $foo } from $source` now match named
re-exports in JavaScript and TypeScript files.

- [#&#8203;9550](https://redirect.github.com/biomejs/biome/pull/9550)
[`d4e3d6e`](d4e3d6e924)
Thanks [@&#8203;dyc3](https://redirect.github.com/dyc3)! - Fixed
[#&#8203;9548](https://redirect.github.com/biomejs/biome/issues/9548):
Biome now parses conditional expressions whose consequent is an arrow
function returning a parenthesized object expression.

- [#&#8203;8696](https://redirect.github.com/biomejs/biome/pull/8696)
[`a7c19cc`](a7c19ccfeb)
Thanks [@&#8203;Faizanq](https://redirect.github.com/Faizanq)! - Fixed
[#&#8203;8685](https://redirect.github.com/biomejs/biome/issues/8685)
where `noUselessLoneBlockStatements` would remove empty blocks
containing comments. The rule now preserves these blocks since comments
may contain important information like TODOs or commented-out code.

- [#&#8203;9557](https://redirect.github.com/biomejs/biome/pull/9557)
[`6671ac5`](6671ac5b4d)
Thanks [@&#8203;datalek](https://redirect.github.com/datalek)! - Fixed
[#&#8203;9557](https://redirect.github.com/biomejs/biome/pull/9557):
Biome's LSP server no longer crashes on startup when used with editors
that don't send `workspaceFolders` during initialization. This affected
any LSP client that only sends `rootUri`, which is valid per the LSP
specification.

- [#&#8203;9455](https://redirect.github.com/biomejs/biome/pull/9455)
[`1710cf1`](1710cf1f0e)
Thanks [@&#8203;omar-y-abdi](https://redirect.github.com/omar-y-abdi)! -
Fixed
[#&#8203;9174](https://redirect.github.com/biomejs/biome/issues/9174):
[`useExpect`](https://biomejs.dev/linter/rules/use-expect/) now
correctly rejects [asymmetric
matchers](https://vitest.dev/api/expect.html#expect-stringcontaining) in
Vitest or Jest like `expect.stringContaining()`,
`expect.objectContaining()`, and utilities like `expect.extend()` that
are not valid assertions. Previously these constructs caused false
negatives, allowing tests without real assertions to pass the lint rule.

- [#&#8203;9584](https://redirect.github.com/biomejs/biome/pull/9584)
[`956e367`](956e367814)
Thanks [@&#8203;ematipico](https://redirect.github.com/ematipico)! -
Fixed a bug where Vue directive attribute values like
`v-bind:class="{'dynamic': true}"` were incorrectly parsed as JavaScript
statements instead of expressions. Object literals inside directive
values like `:class`, `v-if`, and `v-html` are now correctly parsed as
expressions, preventing spurious parse errors.

- [#&#8203;9474](https://redirect.github.com/biomejs/biome/pull/9474)
[`e168494`](e1684948ce)
Thanks [@&#8203;ematipico](https://redirect.github.com/ematipico)! -
Added the new nursery rule
[`noUntrustedLicenses`](https://biomejs.dev/linter/rules/no-untrusted-licenses/).
This rule disallows dependencies that ship with invalid licenses or
licenses that don't meet the criteria of your project/organisation.

  The rule has the following options:

- `allow`: a list of licenses that can be allowed. Useful to bypass
possible invalid licenses from downstream dependencies.
- `deny`: a list of licenses that should trigger the rule. Useful to
deny licenses that don't fit your project/organisation.
    When both `deny` and `allow` are provided, `deny` takes precedence.
- `requireOsiApproved`: whether the licenses need to be approved by the
[Open Source Initiative](https://opensource.org/).
- `requireFsfLibre`: whether the licenses need to be approved by the
[Free Software
Foundation](https://www.gnu.org/licenses/license-list.html).

- [#&#8203;9544](https://redirect.github.com/biomejs/biome/pull/9544)
[`723798b`](723798b7cd)
Thanks
[@&#8203;ViniciusDev26](https://redirect.github.com/ViniciusDev26)! -
Added an unsafe fix to
[`useConsistentMethodSignatures`](https://biomejs.dev/linter/rules/use-consistent-method-signatures/)
that automatically converts between method-style and property-style
signatures.

- [#&#8203;9555](https://redirect.github.com/biomejs/biome/pull/9555)
[`8a3647b`](8a3647b52d)
Thanks [@&#8203;ematipico](https://redirect.github.com/ematipico)! -
Fixed
[`#188`](https://redirect.github.com/biomejs/biome-zed/issues/188): the
Biome Language Server no longer panics when open files change abruptly,
such as during git branch checkouts.

- [#&#8203;9605](https://redirect.github.com/biomejs/biome/pull/9605)
[`f65c637`](f65c637b32)
Thanks [@&#8203;ematipico](https://redirect.github.com/ematipico)! -
Fixed
[#&#8203;9589](https://redirect.github.com/biomejs/biome/issues/9589).
Now Biome correctly parses object expressions inside props and
directives. The following code doesn't emit errors anymore:

  ```astro
  <style is:global define:vars={{ bgLight: light }}>
  <Component name={{ first, name }} />
  ```

- [#&#8203;9565](https://redirect.github.com/biomejs/biome/pull/9565)
[`ccb249e`](ccb249e681)
Thanks [@&#8203;eyupcanakman](https://redirect.github.com/eyupcanakman)!
- Fixed
[#&#8203;9505](https://redirect.github.com/biomejs/biome/issues/9505):
[`noUselessStringConcat`](https://biomejs.dev/linter/rules/no-useless-string-concat/)
no longer reports tagged template literals as useless string
concatenations. Tagged templates invoke a function and can return
non-string values, so combining them with `+` is not equivalent to a
single template literal.

- [#&#8203;9534](https://redirect.github.com/biomejs/biome/pull/9534)
[`4d050df`](4d050df5e3)
Thanks [@&#8203;Netail](https://redirect.github.com/Netail)! - Added the
nursery rule
[`noInlineStyles`](https://biomejs.dev/linter/rules/no-inline-styles/).
The rule disallows the use of inline `style` attributes in HTML and the
`style` prop in JSX, including `React.createElement` calls. Inline
styles make code harder to maintain and can interfere with Content
Security Policy.

- [#&#8203;9611](https://redirect.github.com/biomejs/biome/pull/9611)
[`cddaa44`](cddaa44d3c)
Thanks [@&#8203;gaauwe](https://redirect.github.com/gaauwe)! - Fixed a
regression where Biome LSP could misread editor settings sent through
`workspace/didChangeConfiguration` when the payload was wrapped in a
top-level `biome` key. This caused `requireConfiguration` and related
settings to be ignored in some editors.

##### What's Changed

- fix(linter): differentiate static/instance methods in
useAdjacentOverloadSignatures by
[@&#8203;tt-a1i](https://redirect.github.com/tt-a1i) in
[#&#8203;8670](https://redirect.github.com/biomejs/biome/pull/8670)
- fix(parse/js): fix a case where valid js was being interpretted as ts
by [@&#8203;dyc3](https://redirect.github.com/dyc3) in
[#&#8203;9550](https://redirect.github.com/biomejs/biome/pull/9550)
- fix(lsp): gracefully handle panics by
[@&#8203;ematipico](https://redirect.github.com/ematipico) in
[#&#8203;9555](https://redirect.github.com/biomejs/biome/pull/9555)
- fix(linter): don't remove empty blocks containing comments by
[@&#8203;Faizanq](https://redirect.github.com/Faizanq) in
[#&#8203;8696](https://redirect.github.com/biomejs/biome/pull/8696)
- fix(config): don't enable rules with domains when categories are
enabled by [@&#8203;dyc3](https://redirect.github.com/dyc3) in
[#&#8203;9553](https://redirect.github.com/biomejs/biome/pull/9553)
- fix(lint/useExpect): reject asymmetric matchers and utilities as
assertions by
[@&#8203;omar-y-abdi](https://redirect.github.com/omar-y-abdi) in
[#&#8203;9455](https://redirect.github.com/biomejs/biome/pull/9455)
- chore(deps): update rust crate bpaf to 0.9.24 by
[@&#8203;renovate](https://redirect.github.com/renovate)\[bot] in
[#&#8203;9500](https://redirect.github.com/biomejs/biome/pull/9500)
- refactor(markdown-parser): decompose `is_inline_html` into
predicate-per-construct by
[@&#8203;jfmcdowell](https://redirect.github.com/jfmcdowell) in
[#&#8203;9467](https://redirect.github.com/biomejs/biome/pull/9467)
- refactor(markdown-parser): decompose `inline_list_source_len` into
scan helpers by
[@&#8203;jfmcdowell](https://redirect.github.com/jfmcdowell) in
[#&#8203;9468](https://redirect.github.com/biomejs/biome/pull/9468)
- fix(deps): update
[@&#8203;biomejs](https://redirect.github.com/biomejs) packages by
[@&#8203;renovate](https://redirect.github.com/renovate)\[bot] in
[#&#8203;9501](https://redirect.github.com/biomejs/biome/pull/9501)
- fix(js-semantic): register ambient signature scopes by
[@&#8203;masterkain](https://redirect.github.com/masterkain) in
[#&#8203;9476](https://redirect.github.com/biomejs/biome/pull/9476)
- fix(useOptionalChain): fix negated expressions by
[@&#8203;ematipico](https://redirect.github.com/ematipico) in
[#&#8203;9567](https://redirect.github.com/biomejs/biome/pull/9567)
- docs: fix CONTRIBUTING.md codeblock by
[@&#8203;Netail](https://redirect.github.com/Netail) in
[#&#8203;9573](https://redirect.github.com/biomejs/biome/pull/9573)
- chore: fix vulnerabilities in dependencies by
[@&#8203;ematipico](https://redirect.github.com/ematipico) in
[#&#8203;9576](https://redirect.github.com/biomejs/biome/pull/9576)
- fix(lint): skip noUselessStringConcat for tagged templates by
[@&#8203;eyupcanakman](https://redirect.github.com/eyupcanakman) in
[#&#8203;9565](https://redirect.github.com/biomejs/biome/pull/9565)
- chore(bench/html): add real test fixtures to biome\_html\_analyze
benches by [@&#8203;dyc3](https://redirect.github.com/dyc3) in
[#&#8203;9578](https://redirect.github.com/biomejs/biome/pull/9578)
- fix(core): correctly parse vue directives as expressions by
[@&#8203;ematipico](https://redirect.github.com/ematipico) in
[#&#8203;9584](https://redirect.github.com/biomejs/biome/pull/9584)
- feat: apply fix to use consistent method signatures by
[@&#8203;ViniciusDev26](https://redirect.github.com/ViniciusDev26) in
[#&#8203;9544](https://redirect.github.com/biomejs/biome/pull/9544)
- chore: add eslint-migrate-options skill by
[@&#8203;dyc3](https://redirect.github.com/dyc3) in
[#&#8203;9575](https://redirect.github.com/biomejs/biome/pull/9575)
- test: refactor formatter testing infra by
[@&#8203;ematipico](https://redirect.github.com/ematipico) in
[#&#8203;9588](https://redirect.github.com/biomejs/biome/pull/9588)
- feat(analyze): implement noInlineStyles by
[@&#8203;Netail](https://redirect.github.com/Netail) in
[#&#8203;9534](https://redirect.github.com/biomejs/biome/pull/9534)
- chore(deps): update docker/dockerfile:1 docker digest to
[`4a43a54`](https://redirect.github.com/biomejs/biome/commit/4a43a54) by
[@&#8203;renovate](https://redirect.github.com/renovate)\[bot] in
[#&#8203;9590](https://redirect.github.com/biomejs/biome/pull/9590)
- chore(deps): update rust:1.94.0-bullseye docker digest to
[`1695019`](https://redirect.github.com/biomejs/biome/commit/1695019) by
[@&#8203;renovate](https://redirect.github.com/renovate)\[bot] in
[#&#8203;9591](https://redirect.github.com/biomejs/biome/pull/9591)
- chore(deps): update rust:1.94.0-trixie docker digest to
[`f17e723`](https://redirect.github.com/biomejs/biome/commit/f17e723) by
[@&#8203;renovate](https://redirect.github.com/renovate)\[bot] in
[#&#8203;9593](https://redirect.github.com/biomejs/biome/pull/9593)
- fix(deps): update dependency tailwindcss to ^4.2.2 by
[@&#8203;renovate](https://redirect.github.com/renovate)\[bot] in
[#&#8203;9594](https://redirect.github.com/biomejs/biome/pull/9594)
- chore(deps): update dependency eslint to v9.39.4 by
[@&#8203;renovate](https://redirect.github.com/renovate)\[bot] in
[#&#8203;9497](https://redirect.github.com/biomejs/biome/pull/9497)
- chore(deps): update dependency
[@&#8203;types/node](https://redirect.github.com/types/node) to v24.12.0
by [@&#8203;renovate](https://redirect.github.com/renovate)\[bot] in
[#&#8203;9595](https://redirect.github.com/biomejs/biome/pull/9595)
- chore(deps): update dependency dprint to v0.53.0 by
[@&#8203;renovate](https://redirect.github.com/renovate)\[bot] in
[#&#8203;9596](https://redirect.github.com/biomejs/biome/pull/9596)
- chore(deps): update github-actions by
[@&#8203;renovate](https://redirect.github.com/renovate)\[bot] in
[#&#8203;9598](https://redirect.github.com/biomejs/biome/pull/9598)
- chore(deps): update pnpm to v10.32.1 by
[@&#8203;renovate](https://redirect.github.com/renovate)\[bot] in
[#&#8203;9599](https://redirect.github.com/biomejs/biome/pull/9599)
- ci: fix failure by
[@&#8203;ematipico](https://redirect.github.com/ematipico) in
[#&#8203;9603](https://redirect.github.com/biomejs/biome/pull/9603)
- fix(lsp): crash when client does not send workspaceFolders in
InitializeParams by
[@&#8203;datalek](https://redirect.github.com/datalek) in
[#&#8203;9557](https://redirect.github.com/biomejs/biome/pull/9557)
- fix(core): astro embedding detection by
[@&#8203;ematipico](https://redirect.github.com/ematipico) in
[#&#8203;9605](https://redirect.github.com/biomejs/biome/pull/9605)
- chore(deps): update dependency tombi to v0.9.7 by
[@&#8203;renovate](https://redirect.github.com/renovate)\[bot] in
[#&#8203;9597](https://redirect.github.com/biomejs/biome/pull/9597)
- feat(css): add `noDuplicateSelectors` by
[@&#8203;ematipico](https://redirect.github.com/ematipico) in
[#&#8203;9315](https://redirect.github.com/biomejs/biome/pull/9315)
- chore: convince robots into self identifying by
[@&#8203;dyc3](https://redirect.github.com/dyc3) in
[#&#8203;9610](https://redirect.github.com/biomejs/biome/pull/9610)
- fix(lsp): handle wrapped settings in didChangeConfiguration by
[@&#8203;gaauwe](https://redirect.github.com/gaauwe) in
[#&#8203;9611](https://redirect.github.com/biomejs/biome/pull/9611)
- feat(linter): add rule `noUntrustedLicenses` by
[@&#8203;ematipico](https://redirect.github.com/ematipico) in
[#&#8203;9474](https://redirect.github.com/biomejs/biome/pull/9474)
- chore: use npmx.dev badge by
[@&#8203;ematipico](https://redirect.github.com/ematipico) in
[#&#8203;9614](https://redirect.github.com/biomejs/biome/pull/9614)
- docs: break down skills, improve existing ones by
[@&#8203;ematipico](https://redirect.github.com/ematipico) in
[#&#8203;9613](https://redirect.github.com/biomejs/biome/pull/9613)
- chore(deps): update rust crate quickcheck to 1.1.0 by
[@&#8203;renovate](https://redirect.github.com/renovate)\[bot] in
[#&#8203;9600](https://redirect.github.com/biomejs/biome/pull/9600)
- perf(html): inline parse functions by
[@&#8203;ematipico](https://redirect.github.com/ematipico) in
[#&#8203;9609](https://redirect.github.com/biomejs/biome/pull/9609)
- fix(grit): fix queries for `export { $foo } ...` by
[@&#8203;dyc3](https://redirect.github.com/dyc3) in
[#&#8203;9586](https://redirect.github.com/biomejs/biome/pull/9586)
- ci: release by
[@&#8203;github-actions](https://redirect.github.com/github-actions)\[bot]
in [#&#8203;9620](https://redirect.github.com/biomejs/biome/pull/9620)

##### New Contributors

- [@&#8203;omar-y-abdi](https://redirect.github.com/omar-y-abdi) made
their first contribution in
[#&#8203;9455](https://redirect.github.com/biomejs/biome/pull/9455)
- [@&#8203;masterkain](https://redirect.github.com/masterkain) made
their first contribution in
[#&#8203;9476](https://redirect.github.com/biomejs/biome/pull/9476)
- [@&#8203;eyupcanakman](https://redirect.github.com/eyupcanakman) made
their first contribution in
[#&#8203;9565](https://redirect.github.com/biomejs/biome/pull/9565)
- [@&#8203;datalek](https://redirect.github.com/datalek) made their
first contribution in
[#&#8203;9557](https://redirect.github.com/biomejs/biome/pull/9557)

**Full Changelog**:
<https://github.com/biomejs/biome/compare/@biomejs/biome@2.4.8...@&#8203;biomejs/biome@2.4.9>

###
[`v2.4.8`](https://redirect.github.com/biomejs/biome/releases/tag/%40biomejs/biome%402.4.8):
Biome CLI v2.4.8

#### 2.4.8

##### Patch Changes

- [#&#8203;9488](https://redirect.github.com/biomejs/biome/pull/9488)
[`bc709f6`](bc709f6e45)
Thanks [@&#8203;mvanhorn](https://redirect.github.com/mvanhorn)! - Fixed
[#&#8203;9463](https://redirect.github.com/biomejs/biome/issues/9463):
the "Biome found a configuration file outside of the current working
directory" diagnostic now includes the configuration file path and the
working directory, giving users actionable information to debug the
issue.

- [#&#8203;9527](https://redirect.github.com/biomejs/biome/pull/9527)
[`2f8bf80`](2f8bf80d7f)
Thanks [@&#8203;mdm317](https://redirect.github.com/mdm317)! - Fixed
[#&#8203;8959](https://redirect.github.com/biomejs/biome/issues/8959):
Fixed TypeScript arrow function formatting when a comment appears after
`=>`.

- [#&#8203;9525](https://redirect.github.com/biomejs/biome/pull/9525)
[`e7b3b10`](e7b3b10459)
Thanks
[@&#8203;ViniciusDev26](https://redirect.github.com/ViniciusDev26)! -
Added the rule
[`noDrizzleUpdateWithoutWhere`](https://biomejs.dev/linter/rules/no-drizzle-update-without-where/)
to prevent accidental full-table updates when using Drizzle ORM without
a `.where()` clause.

- [#&#8203;9531](https://redirect.github.com/biomejs/biome/pull/9531)
[`1302740`](1302740643)
Thanks [@&#8203;ematipico](https://redirect.github.com/ematipico)! -
Fixed
[#&#8203;9187](https://redirect.github.com/biomejs/biome/issues/9187):
Astro frontmatter containing regex literals with quotes (`/'/`, `/"/`)
or dashes (`/---/`) no longer causes parse errors.

- [#&#8203;9535](https://redirect.github.com/biomejs/biome/pull/9535)
[`b630d93`](b630d93690)
Thanks [@&#8203;leno23](https://redirect.github.com/leno23)! - Fixed
[#&#8203;9524](https://redirect.github.com/biomejs/biome/issues/9524):
remove extra space before `>` when `bracketSameLine` is true and the
self-closing slash is absent in HTML formatter.

- [#&#8203;9537](https://redirect.github.com/biomejs/biome/pull/9537)
[`81e6306`](81e630683c)
Thanks [@&#8203;ematipico](https://redirect.github.com/ematipico)! -
Fixed
[#&#8203;9238](https://redirect.github.com/biomejs/biome/issues/9238):
The HTML parser no longer incorrectly reports `---` inside element
content (e.g. `<td>---</td>`) as an "Unexpected value or character"
error.

- [#&#8203;9532](https://redirect.github.com/biomejs/biome/pull/9532)
[`4b64145`](4b641457bb)
Thanks [@&#8203;ematipico](https://redirect.github.com/ematipico)! -
Fixed
[#&#8203;9117](https://redirect.github.com/biomejs/biome/issues/9117):
`biome check --write` no longer falsely reports Svelte and Vue files as
changed when `html.formatter.indentScriptAndStyle` is enabled and the
files are already correctly formatted.

- [#&#8203;9528](https://redirect.github.com/biomejs/biome/pull/9528)
[`61451ef`](61451ef11e)
Thanks [@&#8203;ematipico](https://redirect.github.com/ematipico)! -
Fixed
[#&#8203;9341](https://redirect.github.com/biomejs/biome/issues/9341):
Fixed an LSP crash that could corrupt file content when saving with
format-on-save enabled.

- [#&#8203;9538](https://redirect.github.com/biomejs/biome/pull/9538)
[`794f79c`](794f79c3d6)
Thanks [@&#8203;ematipico](https://redirect.github.com/ematipico)! -
Fixed
[#&#8203;9279](https://redirect.github.com/biomejs/biome/issues/9279):
The rule [`noSubstr`](https://biomejs.dev/linter/rules/no-substr/) now
detects `.substr()` and `.substring()` calls in all expression contexts,
including variable declarations, function arguments, return statements,
and arrow function bodies.

- [#&#8203;9462](https://redirect.github.com/biomejs/biome/pull/9462)
[`c23272c`](c23272c9be)
Thanks [@&#8203;ematipico](https://redirect.github.com/ematipico)! -
Fixed
[#&#8203;9370](https://redirect.github.com/biomejs/biome/issues/9370):
The resolver now correctly prioritizes more specific `exports` patterns
over less specific ones. Previously, a pattern like `"./*"` could match
before `"./features/*"`, causing resolution failures for packages with
overlapping subpath patterns.

- [#&#8203;9515](https://redirect.github.com/biomejs/biome/pull/9515)
[`f85c069`](f85c069acd)
Thanks
[@&#8203;shivamtiwari3](https://redirect.github.com/shivamtiwari3)! -
Fixed
[#&#8203;9506](https://redirect.github.com/biomejs/biome/issues/9506)
and
[#&#8203;9479](https://redirect.github.com/biomejs/biome/issues/9479):
Biome no longer reports false parse errors on `<script
type="speculationrules">` and `<script type="application/ld+json">`
tags. These script types contain non-JavaScript content and are now
correctly skipped by the embedded language detector.

- [#&#8203;9514](https://redirect.github.com/biomejs/biome/pull/9514)
[`7fe43c8`](7fe43c8e89)
Thanks [@&#8203;ematipico](https://redirect.github.com/ematipico)! -
Fixed
[#&#8203;6964](https://redirect.github.com/biomejs/biome/issues/6964):
Biome now correctly resolves the `.gitignore` file relative to
`vcs.root` when configured. Previously, the `vcs.root` setting was
ignored and Biome always looked for the ignore file in the workspace
directory.

- [#&#8203;9521](https://redirect.github.com/biomejs/biome/pull/9521)
[`af39936`](af3993681b)
Thanks [@&#8203;ematipico](https://redirect.github.com/ematipico)! -
Fixed
[#&#8203;9483](https://redirect.github.com/biomejs/biome/issues/9483).
Now the rule `noRedeclare` doesn't panic when it encounters constructor
overloads.

- [#&#8203;9490](https://redirect.github.com/biomejs/biome/pull/9490)
[`60cf024`](60cf024822)
Thanks [@&#8203;willfarrell](https://redirect.github.com/willfarrell)! -
Added support for modern CSS properties, pseudo-classes, and
pseudo-elements.

New known properties: `dynamic-range-limit`, `overlay`, `reading-flow`,
`reading-order`, `scroll-marker-group`, `scroll-target-group`.

New pseudo-elements: `::checkmark`, `::column`, `::picker`,
`::picker-icon`, `::scroll-button`, `::scroll-marker`,
`::scroll-marker-group`.

New pseudo-classes: `:active-view-transition-type`, `:has-slotted`,
`:target-after`, `:target-before`, `:target-current`.

- [#&#8203;9526](https://redirect.github.com/biomejs/biome/pull/9526)
[`4d42823`](4d42823aa6)
Thanks [@&#8203;ematipico](https://redirect.github.com/ematipico)! -
Fixed
[#&#8203;9358](https://redirect.github.com/biomejs/biome/issues/9358)
and
[#&#8203;9375](https://redirect.github.com/biomejs/biome/issues/9375).
Now attributes that have text expressions such as
`class={buttonClass()}` are correctly tracked in Svelte files.

- [#&#8203;9520](https://redirect.github.com/biomejs/biome/pull/9520)
[`61f53ee`](61f53ee073)
Thanks [@&#8203;ematipico](https://redirect.github.com/ematipico)! -
Fixed
[#&#8203;9519](https://redirect.github.com/biomejs/biome/issues/9519).
Now `noUnusedVariables` doesn't flag variables that are used as `typeof`
type.

- [#&#8203;9487](https://redirect.github.com/biomejs/biome/pull/9487)
[`331dc0d`](331dc0d53b)
Thanks [@&#8203;mvanhorn](https://redirect.github.com/mvanhorn)! - Fixed
[#&#8203;9477](https://redirect.github.com/biomejs/biome/issues/9477):
`source.fixAll.biome` no longer sorts imports when
`source.organizeImports.biome` is disabled in editor settings. The
organize imports action is now excluded from the fix-all pass unless
explicitly requested.

- [#&#8203;9525](https://redirect.github.com/biomejs/biome/pull/9525)
[`e7b3b10`](e7b3b10459)
Thanks
[@&#8203;ViniciusDev26](https://redirect.github.com/ViniciusDev26)! -
Added the rule
[`noDrizzleDeleteWithoutWhere`](https://biomejs.dev/linter/rules/no-drizzle-delete-without-where/)
to prevent accidental full-table deletes when using Drizzle ORM without
a `.where()` clause.

#### What's Changed

- fix(formatter/md): fix formatting for MdHardLine by
[@&#8203;tidefield](https://redirect.github.com/tidefield) in
[#&#8203;9480](https://redirect.github.com/biomejs/biome/pull/9480)
- chore(deps): update rust:1.94.0-bookworm docker digest to
[`6a544e5`](https://redirect.github.com/biomejs/biome/commit/6a544e5) by
[@&#8203;renovate](https://redirect.github.com/renovate)\[bot] in
[#&#8203;9493](https://redirect.github.com/biomejs/biome/pull/9493)
- chore(deps): update rust:1.94.0-bullseye docker digest to
[`9d1864f`](https://redirect.github.com/biomejs/biome/commit/9d1864f) by
[@&#8203;renovate](https://redirect.github.com/renovate)\[bot] in
[#&#8203;9494](https://redirect.github.com/biomejs/biome/pull/9494)
- chore(deps): update rust crate tracing-subscriber to 0.3.23 by
[@&#8203;renovate](https://redirect.github.com/renovate)\[bot] in
[#&#8203;9498](https://redirect.github.com/biomejs/biome/pull/9498)
- chore(benchmark): upgrade to Debian 13 Trixie, Node.js 24 by
[@&#8203;siketyan](https://redirect.github.com/siketyan) in
[#&#8203;9499](https://redirect.github.com/biomejs/biome/pull/9499)
- fix: missing rule source reference by
[@&#8203;Netail](https://redirect.github.com/Netail) in
[#&#8203;9504](https://redirect.github.com/biomejs/biome/pull/9504)
- chore: manually import dev dependencies by
[@&#8203;ematipico](https://redirect.github.com/ematipico) in
[#&#8203;9512](https://redirect.github.com/biomejs/biome/pull/9512)
- test: infrastructure for embedded langauges by
[@&#8203;ematipico](https://redirect.github.com/ematipico) in
[#&#8203;9509](https://redirect.github.com/biomejs/biome/pull/9509)
- feat(css): parse scss interpolated selector names by
[@&#8203;denbezrukov](https://redirect.github.com/denbezrukov) in
[#&#8203;9486](https://redirect.github.com/biomejs/biome/pull/9486)
- feat(css): add support for modern CSS properties, pseudo-classes, and
pseudo-elements by
[@&#8203;willfarrell](https://redirect.github.com/willfarrell) in
[#&#8203;9490](https://redirect.github.com/biomejs/biome/pull/9490)
- fix(html): skip unsupported <script> types instead of treating as JS
(fixes
[#&#8203;9506](https://redirect.github.com/biomejs/biome/issues/9506),
[#&#8203;9479](https://redirect.github.com/biomejs/biome/issues/9479))
by [@&#8203;shivamtiwari3](https://redirect.github.com/shivamtiwari3) in
[#&#8203;9515](https://redirect.github.com/biomejs/biome/pull/9515)
- fix(semantic): regression in tracking scopes by
[@&#8203;ematipico](https://redirect.github.com/ematipico) in
[#&#8203;9521](https://redirect.github.com/biomejs/biome/pull/9521)
- fix(noUnusedVariables): regression in previous refactor by
[@&#8203;ematipico](https://redirect.github.com/ematipico) in
[#&#8203;9520](https://redirect.github.com/biomejs/biome/pull/9520)
- fix(diagnostic): include config path and CWD in
ConfigurationOutsideProject by
[@&#8203;mvanhorn](https://redirect.github.com/mvanhorn) in
[#&#8203;9488](https://redirect.github.com/biomejs/biome/pull/9488)
- fix(lsp): changes file corruption by
[@&#8203;ematipico](https://redirect.github.com/ematipico) in
[#&#8203;9528](https://redirect.github.com/biomejs/biome/pull/9528)
- fix(embeds): track attributes text expressions by
[@&#8203;ematipico](https://redirect.github.com/ematipico) in
[#&#8203;9526](https://redirect.github.com/biomejs/biome/pull/9526)
- fix(core): idempotence formatting html-ish files by
[@&#8203;ematipico](https://redirect.github.com/ematipico) in
[#&#8203;9532](https://redirect.github.com/biomejs/biome/pull/9532)
- fix(ts/formatter): format comment after => in arrow functions by
[@&#8203;mdm317](https://redirect.github.com/mdm317) in
[#&#8203;9527](https://redirect.github.com/biomejs/biome/pull/9527)
- feat(lint): add noDrizzleDeleteWithoutWhere and
noDrizzleUpdateWithoutWhere rules by
[@&#8203;ViniciusDev26](https://redirect.github.com/ViniciusDev26) in
[#&#8203;9525](https://redirect.github.com/biomejs/biome/pull/9525)
- fix(lsp): filter organizeImports from fixAll code action by
[@&#8203;mvanhorn](https://redirect.github.com/mvanhorn) in
[#&#8203;9487](https://redirect.github.com/biomejs/biome/pull/9487)
- fix(parser/html): regex literals in frontmatter by
[@&#8203;ematipico](https://redirect.github.com/ematipico) in
[#&#8203;9531](https://redirect.github.com/biomejs/biome/pull/9531)
- fix(core): vcs root resolution by
[@&#8203;ematipico](https://redirect.github.com/ematipico) in
[#&#8203;9514](https://redirect.github.com/biomejs/biome/pull/9514)
- fix(resolver): patterns resolution by
[@&#8203;ematipico](https://redirect.github.com/ematipico) in
[#&#8203;9462](https://redirect.github.com/biomejs/biome/pull/9462)
- feat(css): parse scss interpolation for selectors and declaration
names by [@&#8203;denbezrukov](https://redirect.github.com/denbezrukov)
in [#&#8203;9529](https://redirect.github.com/biomejs/biome/pull/9529)
- fix(noSubstr): query more nodes by
[@&#8203;ematipico](https://redirect.github.com/ematipico) in
[#&#8203;9538](https://redirect.github.com/biomejs/biome/pull/9538)
- fix(html-formatter): remove extra space before > when bracketSameLine…
by [@&#8203;leno23](https://redirect.github.com/leno23) in
[#&#8203;9535](https://redirect.github.com/biomejs/biome/pull/9535)
- fix(html/parser): fence in html files by
[@&#8203;ematipico](https://redirect.github.com/ematipico) in
[#&#8203;9537](https://redirect.github.com/biomejs/biome/pull/9537)
- ci: release by
[@&#8203;github-actions](https://redirect.github.com/github-actions)\[bot]
in [#&#8203;9517](https://redirect.github.com/biomejs/biome/pull/9517)

#### New Contributors

- [@&#8203;willfarrell](https://redirect.github.com/willfarrell) made
their first contribution in
[#&#8203;9490](https://redirect.github.com/biomejs/biome/pull/9490)
- [@&#8203;shivamtiwari3](https://redirect.github.com/shivamtiwari3)
made their first contribution in
[#&#8203;9515](https://redirect.github.com/biomejs/biome/pull/9515)
- [@&#8203;mvanhorn](https://redirect.github.com/mvanhorn) made their
first contribution in
[#&#8203;9488](https://redirect.github.com/biomejs/biome/pull/9488)
- [@&#8203;ViniciusDev26](https://redirect.github.com/ViniciusDev26)
made their first contribution in
[#&#8203;9525](https://redirect.github.com/biomejs/biome/pull/9525)
- [@&#8203;leno23](https://redirect.github.com/leno23) made their first
contribution in
[#&#8203;9535](https://redirect.github.com/biomejs/biome/pull/9535)

**Full Changelog**:
<https://github.com/biomejs/biome/compare/@biomejs/biome@2.4.7...@&#8203;biomejs/biome@2.4.8>

</details>

<details>
<summary>casey/just (just)</summary>

###
[`v1.48.0`](https://redirect.github.com/casey/just/blob/HEAD/CHANGELOG.md#1480---2026-03-23)

[Compare
Source](https://redirect.github.com/casey/just/compare/1.47.1...1.48.0)

##### Added

- Build docker images
([#&#8203;3174](https://redirect.github.com/casey/just/pull/3174) by
[casey](https://redirect.github.com/casey))
- Dynamically complete recipes for `--usage`
([#&#8203;3172](https://redirect.github.com/casey/just/pull/3172) by
[casey](https://redirect.github.com/casey))
- Dynamically complete groups
([#&#8203;3171](https://redirect.github.com/casey/just/pull/3171) by
[casey](https://redirect.github.com/casey))
- Dynamically complete recipes and variables
([#&#8203;3169](https://redirect.github.com/casey/just/pull/3169) by
[casey](https://redirect.github.com/casey))
- Complete appropriate filetypes
([#&#8203;3168](https://redirect.github.com/casey/just/pull/3168) by
[casey](https://redirect.github.com/casey))
- Allow overriding variables in submodules
([#&#8203;3151](https://redirect.github.com/casey/just/pull/3151) by
[casey](https://redirect.github.com/casey))
- Add `--json` as synonym for `--dump --dump-format json`
([#&#8203;3143](https://redirect.github.com/casey/just/pull/3143) by
[casey](https://redirect.github.com/casey))

##### Changed

- Stabilize lazy evaluation
([#&#8203;3180](https://redirect.github.com/casey/just/pull/3180) by
[casey](https://redirect.github.com/casey))
- Switch to dynamic completion engine
([#&#8203;3167](https://redirect.github.com/casey/just/pull/3167) by
[casey](https://redirect.github.com/casey))
- Respect PATH and PATHEXT when running commands on Windows
([#&#8203;3160](https://redirect.github.com/casey/just/pull/3160) by
[casey](https://redirect.github.com/casey))
- Make `which()` and `require()` respect PATHEXT on Windows
([#&#8203;3144](https://redirect.github.com/casey/just/pull/3144) by
[casey](https://redirect.github.com/casey))

##### Misc

- Add completion script installation instructions
([#&#8203;3178](https://redirect.github.com/casey/just/pull/3178) by
[casey](https://redirect.github.com/casey))
- Fix readme typo
([#&#8203;3176](https://redirect.github.com/casey/just/pull/3176) by
[Rohan5commit](https://redirect.github.com/Rohan5commit))
- Remove Vagrantfile
([#&#8203;3173](https://redirect.github.com/casey/just/pull/3173) by
[casey](https://redirect.github.com/casey))
- Fix signal handling typo
([#&#8203;3170](https://redirect.github.com/casey/just/pull/3170) by
[Rohan5commit](https://redirect.github.com/Rohan5commit))
- Add cargo-binstall installation instructions
([#&#8203;3165](https://redirect.github.com/casey/just/pull/3165) by
[casey](https://redirect.github.com/casey))
- Fix typos
([#&#8203;3162](https://redirect.github.com/casey/just/pull/3162) by
[casey](https://redirect.github.com/casey))
- Readme typo: forground
([#&#8203;3161](https://redirect.github.com/casey/just/pull/3161) by
[Rohan5commit](https://redirect.github.com/Rohan5commit))
- Use clap derive to parse arguments
([#&#8203;3158](https://redirect.github.com/casey/just/pull/3158) by
[casey](https://redirect.github.com/casey))
- Fix readme typo
([#&#8203;3156](https://redirect.github.com/casey/just/pull/3156) by
[teee32](https://redirect.github.com/teee32))
- Document that path\_exists() returns strings
([#&#8203;2946](https://redirect.github.com/casey/just/pull/2946) by
[cspotcode](https://redirect.github.com/cspotcode))
- Remove version references from readme headings
([#&#8203;3153](https://redirect.github.com/casey/just/pull/3153) by
[casey](https://redirect.github.com/casey))
- Fix readme typo
([#&#8203;3152](https://redirect.github.com/casey/just/pull/3152) by
[Rohan5commit](https://redirect.github.com/Rohan5commit))
- Fix variadic parameter typo in readme
([#&#8203;3150](https://redirect.github.com/casey/just/pull/3150) by
[casey](https://redirect.github.com/casey))
- Fix readme typo
([#&#8203;3148](https://redirect.github.com/casey/just/pull/3148) by
[Rohan5commit](https://redirect.github.com/Rohan5commit))
- Avoid conditional compilation
([#&#8203;3145](https://redirect.github.com/casey/just/pull/3145) by
[casey](https://redirect.github.com/casey))
- Update VS Code extension in Chinese readme
([#&#8203;2984](https://redirect.github.com/casey/just/pull/2984) by
[A-moment096](https://redirect.github.com/A-moment096))
- Change replace wording in readme
([#&#8203;3137](https://redirect.github.com/casey/just/pull/3137) by
[Rohan5commit](https://redirect.github.com/Rohan5commit))
- Document recipe metadata
([#&#8203;3142](https://redirect.github.com/casey/just/pull/3142) by
[casey](https://redirect.github.com/casey))

###
[`v1.47.1`](https://redirect.github.com/casey/just/blob/HEAD/CHANGELOG.md#1471---2026-03-16)

[Compare
Source](https://redirect.github.com/casey/just/compare/1.47.0...1.47.1)

##### Fixed

- Block on running parallel dependencies
([#&#8203;3139](https://redirect.github.com/casey/just/pull/3139) by
[casey](https://redirect.github.com/casey))
- Fix setting-exported assignment visibility in child modules
([#&#8203;3128](https://redirect.github.com/casey/just/pull/3128) by
[casey](https://redirect.github.com/casey))

##### Added

- Add `eager` keyword to force evaluation of unused assignments
([#&#8203;3131](https://redirect.github.com/casey/just/pull/3131) by
[casey](https://redirect.github.com/casey))

##### Changed

- Only evaluate used variables in --evaluate and --command
([#&#8203;3130](https://redirect.github.com/casey/just/pull/3130) by
[casey](https://redirect.github.com/casey))

##### Misc

- Make eager assignments unstable
([#&#8203;3140](https://redirect.github.com/casey/just/pull/3140) by
[casey](https://redirect.github.com/casey))
- Include path to .env file in error messages
([#&#8203;3135](https://redirect.github.com/casey/just/pull/3135) by
[casey](https://redirect.github.com/casey))
- Consolidate override checking
([#&#8203;3127](https://redirect.github.com/casey/just/pull/3127) by
[casey](https://redirect.github.com/casey))
- Update readme version references
([#&#8203;3126](https://redirect.github.com/casey/just/pull/3126) by
[casey](https://redirect.github.com/casey))

</details>

<details>
<summary>astral-sh/uv (uv)</summary>

###
[`v0.11.1`](https://redirect.github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#0111)

[Compare
Source](https://redirect.github.com/astral-sh/uv/compare/0.11.0...0.11.1)

Released on 2026-03-24.

##### Bug fixes

- Add missing hash verification for `riscv64gc-unknown-linux-musl`
([#&#8203;18686](https://redirect.github.com/astral-sh/uv/pull/18686))
- Fallback to direct download when direct URL streaming is unsupported
([#&#8203;18688](https://redirect.github.com/astral-sh/uv/pull/18688))
- Revert treating 'Dynamic' values as case-insensitive
([#&#8203;18692](https://redirect.github.com/astral-sh/uv/pull/18692))
- Remove torchdata from list of packages to source from the PyTorch
index
([#&#8203;18703](https://redirect.github.com/astral-sh/uv/pull/18703))
- Special-case `==` Python version request ranges
([#&#8203;9697](https://redirect.github.com/astral-sh/uv/pull/9697))

##### Documentation

- Cover `--python <dir>` in "Using arbitrary Python environments"
([#&#8203;6457](https://redirect.github.com/astral-sh/uv/pull/6457))
- Fix version annotations for `PS_MODULE_PATH` and `UV_WORKING_DIR`
([#&#8203;18691](https://redirect.github.com/astral-sh/uv/pull/18691))

###
[`v0.11.0`](https://redirect.github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#0110)

[Compare
Source](https://redirect.github.com/astral-sh/uv/compare/0.10.12...0.11.0)

Released on 2026-03-23.

##### Breaking changes

This release includes changes to the networking stack used by uv. While
we think that breakage will be rare, it is possible that these changes
will result in the rejection of certificates previously trusted by uv so
we have marked the change as breaking out of an abundance of caution.

The changes are largely driven by the upgrade of reqwest, which powers
uv's HTTP clients, to
[v0.13](https://seanmonstar.com/blog/reqwest-v013-rustls-default/) which
included some breaking changes to TLS certificate verification.

The following changes are included:

-
[`rustls-platform-verifier`](https://redirect.github.com/rustls/rustls-platform-verifier)
is used instead of
[`rustls-native-certs`](https://redirect.github.com/rustls/rustls-native-certs)
and [`webpki`](https://redirect.github.com/rustls/webpki) for
certificate verification

**This change should have no effect unless you are using the
`native-tls` option to enable reading system certificates.**

`rustls-platform-verifier` delegates to the system for certificate
validation (e.g., `Security.framework` on macOS) instead of eagerly
loading certificates from the system and verifying them via `webpki`.
The effects of this change will vary based on the operating system. In
general, uv's certificate validation should now be more consistent with
browsers and other native applications. However, this is the most likely
cause of breaking changes in this release. Some previously failing
certificate chains may succeed, and some previously accepted certificate
chains may fail. In either case, we expect the validation to be more
correct and welcome reports of regressions.

In particular, because more responsibility for validating the
certificate is transferred to your system's security library, some
features like [CA constraints](https://support.apple.com/en-us/103255)
or [revocation of
certificates](https://en.wikipedia.org/wiki/Certificate_revocation) via
OCSP and CRLs may now be used.

This change should improve performance when using system certificate on
macOS, as uv no longer needs to load all certificates from the keychain
at startup.

- [`aws-lc`](https://redirect.github.com/aws/aws-lc) is used instead of
`ring` for a cryptography backend

There should not be breaking changes from this change. We expect this to
expand support for certificate signature algorithms.

- `--native-tls` is deprecated in favor of a new `--system-certs` flag

The `--native-tls` flag is still usable and has identical behavior to
`--system-certs.`

This change was made to reduce confusion about the TLS implementation uv
uses. uv always uses `rustls` not `native-tls`.

- Building uv on x86-64 and i686 Windows requires NASM

NASM is required by `aws-lc`. If not found on the system, a prebuilt
blob provided by `aws-lc-sys` will be used.

  If you are not building uv from source, this change has no effect.

See the
[CONTRIBUTING](b6854d77bf/CONTRIBUTING.md (setup))
guide for details.

- Empty `SSL_CERT_FILE` values are ignored (for consistency with
`SSL_CERT_DIR`)

See [#&#8203;18550](https://redirect.github.com/astral-sh/uv/pull/18550)
for details.

##### Python

- Enable frame pointers for improved profiling on Linux x86-64 and
aarch64

See the [python-build-standalone release
notes](https://redirect.github.com/astral-sh/python-build-standalone/releases/20260320)
for details.

##### Enhancements

- Treat 'Dynamic' values as case-insensitive
([#&#8203;18669](https://redirect.github.com/astral-sh/uv/pull/18669))
- Use a dedicated error for invalid cache control headers
([#&#8203;18657](https://redirect.github.com/astral-sh/uv/pull/18657))
- Enable checksum verification in the generated installer script
([#&#8203;18625](https://redirect.github.com/astral-sh/uv/pull/18625))

##### Preview features

- Add `--service-format` and `--service-url` to `uv audit`
([#&#8203;18571](https://redirect.github.com/astral-sh/uv/pull/18571))

##### Performance

- Avoid holding flat index lock across indexes
([#&#8203;18659](https://redirect.github.com/astral-sh/uv/pull/18659))

##### Bug fixes

- Find the dynamic linker on the file system when sniffing binaries
fails
([#&#8203;18457](https://redirect.github.com/astral-sh/uv/pull/18457))
- Fix export of conflicting workspace members with dependencies
([#&#8203;18666](https://redirect.github.com/astral-sh/uv/pull/18666))
- Respect installed settings in `uv tool list --outdated`
([#&#8203;18586](https://redirect.github.com/astral-sh/uv/pull/18586))
- Treat paths originating as PEP 508 URLs which contain expanded
variables as relative
([#&#8203;18680](https://redirect.github.com/astral-sh/uv/pull/18680))
- Fix `uv export` for workspace member packages with conflicts
([#&#8203;18635](https://redirect.github.com/astral-sh/uv/pull/18635))
- Continue to alternative authentication providers when the pyx store
has no token
([#&#8203;18425](https://redirect.github.com/astral-sh/uv/pull/18425))
- Use redacted URLs for log messages in cached client
([#&#8203;18599](https://redirect.github.com/astral-sh/uv/pull/18599))

##### Documentation

- Add details on Linux versions to the platform policy
([#&#8203;18574](https://redirect.github.com/astral-sh/uv/pull/18574))
- Clarify `FLASH_ATTENTION_SKIP_CUDA_BUILD` guidance for `flash-attn`
installs
([#&#8203;18473](https://redirect.github.com/astral-sh/uv/pull/18473))
- Split the dependency bots page into two separate pages
([#&#8203;18597](https://redirect.github.com/astral-sh/uv/pull/18597))
- Split the alternative indexes page into separate pages
([#&#8203;18607](https://redirect.github.com/astral-sh/uv/pull/18607))

###
[`v0.10.12`](https://redirect.github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#01012)

[Compare
Source](https://redirect.github.com/astral-sh/uv/compare/0.10.11...0.10.12)

Released on 2026-03-19.

##### Python

- Add pypy 3.11.15
([#&#8203;18468](https://redirect.github.com/astral-sh/uv/pull/18468))
- Add support for using Python 3.6 interpreters
([#&#8203;18454](https://redirect.github.com/astral-sh/uv/pull/18454))

##### Enhancements

- Include uv's target triple in version report
([#&#8203;18520](https://redirect.github.com/astral-sh/uv/pull/18520))
- Allow comma separated values in `--no-emit-package`
([#&#8203;18565](https://redirect.github.com/astral-sh/uv/pull/18565))

##### Preview features

- Show `uv audit` in the CLI help
([#&#8203;18540](https://redirect.github.com/astral-sh/uv/pull/18540))

##### Bug fixes

- Improve reporting of managed interpreter symlinks in `uv python list`
([#&#8203;18459](https://redirect.github.com/astral-sh/uv/pull/18459))
- Preserve end-of-line comments on previous entries when removing
dependencies
([#&#8203;18557](https://redirect.github.com/astral-sh/uv/pull/18557))
- Treat abi3 wheel Python version as a lower bound
([#&#8203;18536](https://redirect.github.com/astral-sh/uv/pull/18536))
- Detect hard-float support on aarch64 kernels running armv7 userspace
([#&#8203;18530](https://redirect.github.com/astral-sh/uv/pull/18530))

##### Documentation

- Add Python 3.15 to supported versions
([#&#8203;18552](https://redirect.github.com/astral-sh/uv/pull/18552))
- Adjust the PyPy note
([#&#8203;18548](https://redirect.github.com/astral-sh/uv/pull/18548))
- Move Pyodide to Tier 2 in the Python support policy
([#&#8203;18561](https://redirect.github.com/astral-sh/uv/pull/18561))
- Move Rust and Python version support out of the Platform support
policy
([#&#8203;18535](https://redirect.github.com/astral-sh/uv/pull/18535))
- Update Docker guide with changes from `uv-docker-example`
([#&#8203;18558](https://redirect.github.com/astral-sh/uv/pull/18558))
- Update the Python version policy
([#&#8203;18559](https://redirect.github.com/astral-sh/uv/pull/18559))

###
[`v0.10.11`](https://redirect.github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#01011)

[Compare
Source](https://redirect.github.com/astral-sh/uv/compare/0.10.10...0.10.11)

Released on 2026-03-16.

##### Enhancements

- Fetch Ruff release metadata from an Astral mirror
([#&#8203;18358](https://redirect.github.com/astral-sh/uv/pull/18358))
- Use PEP 639 license metadata for uv itself
([#&#8203;16477](https://redirect.github.com/astral-sh/uv/pull/16477))

##### Performance

- Improve distribution id performance
([#&#8203;18486](https://redirect.github.com/astral-sh/uv/pull/18486))

##### Bug fixes

- Allow `--project` to refer to a `pyproject.toml` directly and reduce
to a warning on other files
([#&#8203;18513](https://redirect.github.com/astral-sh/uv/pull/18513))
- Disable `SYSTEM_VERSION_COMPAT` when querying interpreters on macOS
([#&#8203;18452](https://redirect.github.com/astral-sh/uv/pull/18452))
- Enforce available distributions for supported environments
([#&#8203;18451](https://redirect.github.com/astral-sh/uv/pull/18451))
- Fix `uv sync --active` recreating active environments when
`UV_PYTHON_INSTALL_DIR` is relative
([#&#8203;18398](https://redirect.github.com/astral-sh/uv/pull/18398))

##### Documentation

- Add missing `-o requirements.txt` in `uv pip compile` example
([#&#8203;12308](https://redirect.github.com/astral-sh/uv/pull/12308))
- Link to organization security policy
([#&#8203;18449](https://redirect.github.com/astral-sh/uv/pull/18449))
- Link to the AI policy in the contributing guide
([#&#8203;18448](https://redirect.github.com/astral-sh/uv/pull/18448))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - Between 12:00 AM and 03:59 AM, only on
Monday ( * 0-3 * * 1 ) (UTC), 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.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/alecthomas/chroma).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My42Ni40IiwidXBkYXRlZEluVmVyIjoiNDMuNjYuNCIsInRhcmdldEJyYW5jaCI6Im1hc3RlciIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-26 18:22:07 +11:00
2026-03-11 00:40:25 -07:00
2026-03-13 14:55:50 -07:00
2026-01-18 08:41:37 +11:00
2025-08-04 13:55:06 +10:00
2026-01-17 14:58:15 +11:00
2026-01-17 19:34:32 +11:00
2025-08-04 13:55:06 +10:00
2026-03-13 14:54:29 -07:00
2026-03-11 00:40:25 -07:00
2026-03-11 00:40:25 -07:00

Chroma

A general purpose syntax highlighter in pure Go

Go Reference CI Slack chat

Chroma takes source code and other structured text and converts it into syntax highlighted HTML, ANSI-coloured text, etc.

Chroma is based heavily on Pygments, and includes translators for Pygments lexers and styles.

Table of Contents

  1. Supported languages
  2. Try it
  3. Using the library
    1. Quick start
    2. Identifying the language
    3. Formatting the output
    4. The HTML formatter
  4. More detail
    1. Lexers
    2. Formatters
    3. Styles
  5. Command-line interface
  6. Testing lexers
  7. What's missing compared to Pygments?

Supported languages

Prefix Language
A ABAP, ABNF, ActionScript, ActionScript 3, Ada, Agda, AL, Alloy, AMPL, Angular2, ANTLR, ApacheConf, APL, AppleScript, ArangoDB AQL, Arduino, ArmAsm, ATL, AutoHotkey, AutoIt, Awk
B Ballerina, Bash, Bash Session, Batchfile, Beef, BibTeX, Bicep, BlitzBasic, BNF, BQN, Brainfuck
C C, C#, C++, C3, Caddyfile, Caddyfile Directives, Cap'n Proto, Cassandra CQL, Ceylon, CFEngine3, cfstatement, ChaiScript, Chapel, Cheetah, Clojure, CMake, COBOL, CoffeeScript, Common Lisp, Coq, Core, Crystal, CSS, CSV, CUE, Cython
D D, Dart, Dax, Desktop file, Diff, Django/Jinja, dns, Docker, DTD, Dylan
E EBNF, Elixir, Elm, EmacsLisp, Erlang
F Factor, Fennel, Fish, Forth, Fortran, FortranFixed, FSharp
G GAS, GDScript, GDScript3, Gemtext, Genshi, Genshi HTML, Genshi Text, Gettext, Gherkin, Gleam, GLSL, Gnuplot, Go, Go HTML Template, Go Template, Go Text Template, GraphQL, Groff, Groovy
H Handlebars, Hare, Haskell, Haxe, HCL, Hexdump, HLB, HLSL, HolyC, HTML, HTTP, Hy
I Idris, Igor, INI, Io, ISCdhcpd
J J, Janet, Java, JavaScript, JSON, JSONata, Jsonnet, Julia, Jungle
K Kakoune, Kotlin
L Lean4, Lighttpd configuration file, LLVM, lox, Lua, Luau
M Makefile, Mako, markdown, Markless, Mason, Materialize SQL dialect, Mathematica, Matlab, MCFunction, Meson, Metal, MiniZinc, MLIR, Modelica, Modula-2, Mojo, MonkeyC, MoonScript, MorrowindScript, Myghty, MySQL
N NASM, Natural, NDISASM, Newspeak, Nginx configuration file, Nim, Nix, NSIS, Nu
O Objective-C, ObjectPascal, OCaml, Octave, Odin, OnesEnterprise, OpenEdge ABL, OpenSCAD, Org Mode
P PacmanConf, Perl, PHP, PHTML, Pig, PkgConfig, PL/pgSQL, plaintext, Plutus Core, Pony, PostgreSQL SQL dialect, PostScript, POVRay, PowerQuery, PowerShell, Prolog, Promela, PromQL, properties, Protocol Buffer, Protocol Buffer Text Format, PRQL, PSL, Puppet, Python, Python 2
Q QBasic, QML
R R, Racket, Ragel, Raku, react, ReasonML, reg, Rego, reStructuredText, Rexx, RGBDS Assembly, Ring, RPGLE, RPMSpec, Ruby, Rust
S SAS, Sass, Scala, Scheme, Scilab, SCSS, Sed, Sieve, Smali, Smalltalk, Smarty, SNBT, Snobol, Solidity, SourcePawn, Spade, SPARQL, SQL, SquidConf, Standard ML, stas, Stylus, Svelte, Swift, SYSTEMD, systemverilog
T TableGen, Tal, TASM, Tcl, Tcsh, Termcap, Terminfo, Terraform, TeX, Thrift, TOML, TradingView, Transact-SQL, Turing, Turtle, Twig, TypeScript, TypoScript, TypoScriptCssData, TypoScriptHtmlData, Typst
U ucode
V V, V shell, Vala, VB.net, verilog, VHDL, VHS, VimL, vue
W WDTE, WebAssembly Text Format, WebGPU Shading Language, WebVTT, Whiley
X XML, Xorg
Y YAML, YANG
Z Z80 Assembly, Zed, Zig

I will attempt to keep this section up to date, but an authoritative list can be displayed with chroma --list.

Try it

Try out various languages and styles on the Chroma Playground.

Using the library

This is version 2 of Chroma, use the import path:

import "github.com/alecthomas/chroma/v2"

Chroma, like Pygments, has the concepts of lexers, formatters and styles.

Lexers convert source text into a stream of tokens, styles specify how token types are mapped to colours, and formatters convert tokens and styles into formatted output.

A package exists for each of these, containing a global Registry variable with all of the registered implementations. There are also helper functions for using the registry in each package, such as looking up lexers by name or matching filenames, etc.

In all cases, if a lexer, formatter or style can not be determined, nil will be returned. In this situation you may want to default to the Fallback value in each respective package, which provides sane defaults.

Quick start

A convenience function exists that can be used to simply format some source text, without any effort:

err := quick.Highlight(os.Stdout, someSourceCode, "go", "html", "monokai")

Identifying the language

To highlight code, you'll first have to identify what language the code is written in. There are three primary ways to do that:

  1. Detect the language from its filename.

    lexer := lexers.Match("foo.go")
    
  2. Explicitly specify the language by its Chroma syntax ID (a full list is available from lexers.Names()).

    lexer := lexers.Get("go")
    
  3. Detect the language from its content.

    lexer := lexers.Analyse("package main\n\nfunc main()\n{\n}\n")
    

In all cases, nil will be returned if the language can not be identified.

if lexer == nil {
  lexer = lexers.Fallback
}

At this point, it should be noted that some lexers can be extremely chatty. To mitigate this, you can use the coalescing lexer to coalesce runs of identical token types into a single token:

lexer = chroma.Coalesce(lexer)

Formatting the output

Once a language is identified you will need to pick a formatter and a style (theme).

style := styles.Get("swapoff")
if style == nil {
  style = styles.Fallback
}
formatter := formatters.Get("html")
if formatter == nil {
  formatter = formatters.Fallback
}

Then obtain an iterator over the tokens:

contents, err := ioutil.ReadAll(r)
iterator, err := lexer.Tokenise(nil, string(contents))

And finally, format the tokens from the iterator:

err := formatter.Format(w, style, iterator)

The HTML formatter

By default the html registered formatter generates standalone HTML with embedded CSS. More flexibility is available through the formatters/html package.

Firstly, the output generated by the formatter can be customised with the following constructor options:

  • Standalone() - generate standalone HTML with embedded CSS.
  • WithClasses() - use classes rather than inlined style attributes.
  • ClassPrefix(prefix) - prefix each generated CSS class.
  • TabWidth(width) - Set the rendered tab width, in characters.
  • WithLineNumbers() - Render line numbers (style with LineNumbers).
  • WithLinkableLineNumbers() - Make the line numbers linkable and be a link to themselves.
  • HighlightLines(ranges) - Highlight lines in these ranges (style with LineHighlight).
  • LineNumbersInTable() - Use a table for formatting line numbers and code, rather than spans.

If WithClasses() is used, the corresponding CSS can be obtained from the formatter with:

formatter := html.New(html.WithClasses(true))
err := formatter.WriteCSS(w, style)

More detail

Lexers

See the Pygments documentation for details on implementing lexers. Most concepts apply directly to Chroma, but see existing lexer implementations for real examples.

In many cases lexers can be automatically converted directly from Pygments by using the included Python 3 script pygments2chroma_xml.py. I use something like the following:

uv run --script _tools/pygments2chroma_xml.py \
  pygments.lexers.jvm.KotlinLexer \
  > lexers/embedded/kotlin.xml

A list of all lexers available in Pygments can be found in pygments-lexers.txt.

Formatters

Chroma supports HTML output, as well as terminal output in 8 colour, 256 colour, and true-colour.

A noop formatter is included that outputs the token text only, and a tokens formatter outputs raw tokens. The latter is useful for debugging lexers.

Styles

Chroma styles are defined in XML. The style entries use the same syntax as Pygments. All Pygments styles have been converted to Chroma using the _tools/style.py script.

Style names are case-insensitive. For example, monokai and Monokai are treated as the same style.

When you work with one of Chroma's styles, know that the Background token type provides the default style for tokens. It does so by defining a foreground color and background color.

For example, this gives each token name not defined in the style a default color of #f8f8f8 and uses #000000 for the highlighted code block's background:

<entry type="Background" style="#f8f8f2 bg:#000000"/>

Also, token types in a style file are hierarchical. For instance, when CommentSpecial is not defined, Chroma uses the token style from Comment. So when several comment tokens use the same color, you'll only need to define Comment and override the one that has a different color.

For a quick overview of the available styles and how they look, check out the Chroma Style Gallery.

Command-line interface

A command-line interface to Chroma is included.

Binaries are available to install from the releases page.

The CLI can be used as a preprocessor to colorise output of less(1), see documentation for the LESSOPEN environment variable.

The --fail flag can be used to suppress output and return with exit status 1 to facilitate falling back to some other preprocessor in case chroma does not resolve a specific lexer to use for the given file. For example:

export LESSOPEN='| p() { chroma --fail "$1" || cat "$1"; }; p "%s"'

Replace cat with your favourite fallback preprocessor.

When invoked as .lessfilter, the --fail flag is automatically turned on under the hood for easy integration with lesspipe shipping with Debian and derivatives; for that setup the chroma executable can be just symlinked to ~/.lessfilter.

Projects using Chroma

Testing lexers

If you edit some lexers and want to try it, open a shell in cmd/chromad and run:

go run . --csrf-key=securekey

A Link will be printed. Open it in your Browser. Now you can test on the Playground with your local changes.

If you want to run the tests and the lexers, open a shell in the root directory and run:

go test ./lexers

When updating or adding a lexer, please add tests. See lexers/README.md for more.

What's missing compared to Pygments?

  • Quite a few lexers, for various reasons (pull-requests welcome):
    • Pygments lexers for complex languages often include custom code to handle certain aspects, such as Raku's ability to nest code inside regular expressions. These require time and effort to convert.
    • I mostly only converted languages I had heard of, to reduce the porting cost.
  • Some more esoteric features of Pygments are omitted for simplicity.
  • Though the Chroma API supports content detection, very few languages support them. I have plans to implement a statistical analyser at some point, but not enough time.
Description
A general purpose syntax highlighter in pure Go
Readme 22 MiB
Languages
Go 94.3%
JavaScript 3.2%
Python 1.7%
Just 0.3%
Shell 0.2%
Other 0.2%