1
0
mirror of https://github.com/alecthomas/chroma.git synced 2025-11-23 22:24:39 +02:00
renovate[bot] c07ef4b230 chore(deps): update all non-major dependencies (#1160)
This PR contains the following updates:

| Package | Type | Update | Change | Age | Confidence |
|---|---|---|---|---|---|
| [biome](https://redirect.github.com/biomejs/biome) | | patch | `2.3.0`
-> `2.3.6` |
[![age](https://developer.mend.io/api/mc/badges/age/hermit/biome/2.3.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/hermit/biome/2.3.0/2.3.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [esbuild](https://redirect.github.com/evanw/esbuild) | | minor |
`0.25.11` -> `0.27.0` |
[![age](https://developer.mend.io/api/mc/badges/age/hermit/esbuild/0.27.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/hermit/esbuild/0.25.11/0.27.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[github.com/alecthomas/kong](https://redirect.github.com/alecthomas/kong)
| require | minor | `v1.12.1` -> `v1.13.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2falecthomas%2fkong/v1.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2falecthomas%2fkong/v1.12.1/v1.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [go](https://redirect.github.com/golang/go) | | patch | `1.25.3` ->
`1.25.4` |
[![age](https://developer.mend.io/api/mc/badges/age/hermit/go/1.25.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/hermit/go/1.25.3/1.25.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [go](https://go.dev/)
([source](https://redirect.github.com/golang/go)) | toolchain | patch |
`1.25.3` -> `1.25.4` |
[![age](https://developer.mend.io/api/mc/badges/age/golang-version/go/1.25.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/golang-version/go/1.25.3/1.25.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [hyperfine](https://redirect.github.com/sharkdp/hyperfine) | | minor |
`1.19.0` -> `1.20.0` |
[![age](https://developer.mend.io/api/mc/badges/age/hermit/hyperfine/1.20.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/hermit/hyperfine/1.19.0/1.20.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [svu](https://redirect.github.com/caarlos0/svu) | | minor | `3.2.4` ->
`3.3.0` |
[![age](https://developer.mend.io/api/mc/badges/age/hermit/svu/3.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/hermit/svu/3.2.4/3.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [uv](https://redirect.github.com/astral-sh/uv) | | patch | `0.9.5` ->
`0.9.10` |
[![age](https://developer.mend.io/api/mc/badges/age/hermit/uv/0.9.10?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/hermit/uv/0.9.5/0.9.10?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

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

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

#### 2.3.6

##### Patch Changes

- [#&#8203;8100](https://redirect.github.com/biomejs/biome/pull/8100)
[`82b9a8e`](82b9a8eb3d)
Thanks [@&#8203;Netail](https://redirect.github.com/Netail)! - Added the
nursery rule [`useFind`](https://biomejs.dev/linter/rules/use-find/).
Enforce the use of Array.prototype.find() over Array.prototype.filter()
followed by \[0] when looking for a single result.

  **Invalid:**

  ```js
  [1, 2, 3].filter((x) => x > 1)[0];

  [1, 2, 3].filter((x) => x > 1).at(0);
  ```

- [#&#8203;8118](https://redirect.github.com/biomejs/biome/pull/8118)
[`dbc7021`](dbc7021016)
Thanks
[@&#8203;hirokiokada77](https://redirect.github.com/hirokiokada77)! -
Fixed
[#&#8203;8117](https://redirect.github.com/biomejs/biome/issues/8117):
[`useValidLang`](https://biomejs.dev/linter/rules/use-valid-lang/) now
accepts valid [BCP 47 language
tags](https://developer.mozilla.org/en-US/docs/Glossary/BCP_47_language_tag)
with script subtags.

  **Valid:**

  ```html
  <html lang="zh-Hans-CN"></html>
  ```

- [#&#8203;7672](https://redirect.github.com/biomejs/biome/pull/7672)
[`f1d5725`](f1d5725d06)
Thanks [@&#8203;Netail](https://redirect.github.com/Netail)! - Added the
nursery rule
[`useConsistentGraphqlDescriptions`](https://biomejs.dev/linter/rules/use-consistent-graphql-descriptions/),
requiring all descriptions to follow the same style (either block or
inline) inside GraphQL files.

  **Invalid:**

  ```graphql
  enum EnumValue {
    "this is a description"
    DEFAULT
  }
  ```

  **Valid:**

  ```graphql
  enum EnumValue {
    """
    this is a description
    """
    DEFAULT
  }
  ```

- [#&#8203;8026](https://redirect.github.com/biomejs/biome/pull/8026)
[`f102661`](f10266193d)
Thanks [@&#8203;matanshavit](https://redirect.github.com/matanshavit)! -
Fixed
[#&#8203;8004](https://redirect.github.com/biomejs/biome/issues/8004):
[`noParametersOnlyUsedInRecursion`](https://biomejs.dev/linter/rules/no-parameters-only-used-in-recursion/)
now correctly detects recursion by comparing function bindings instead
of just names.

Previously, the rule incorrectly flagged parameters when a method had
the same name as an outer function but called the outer function (not
itself):

  ```js
  function notRecursive(arg) {
    return arg;
  }

  const obj = {
    notRecursive(arg) {
return notRecursive(arg); // This calls the outer function, not the
method itself
    },
  };
  ```

Biome now properly distinguishes between these cases and will not report
false positives.

- [#&#8203;8097](https://redirect.github.com/biomejs/biome/pull/8097)
[`5fc5416`](5fc5416ae1)
Thanks [@&#8203;dyc3](https://redirect.github.com/dyc3)! - Added the
nursery rule
[`noVueVIfWithVFor`](https://biomejs.dev/linter/rules/no-vue-v-if-with-v-for/).
This rule disallows `v-for` and `v-if` on the same element.

  ```vue
  <!-- Invalid -->
  <div v-for="item in items" v-if="item.isActive">
    {{ item.name }}
  </div>
  ```

- [#&#8203;8085](https://redirect.github.com/biomejs/biome/pull/8085)
[`7983940`](798394072b)
Thanks [@&#8203;Netail](https://redirect.github.com/Netail)! - Added the
nursery rule [`noForIn`](https://biomejs.dev/linter/rules/no-for-in/).
Disallow iterating using a for-in loop.

  **Invalid:**

  ```js
  for (const i in array) {
    console.log(i, array[i]);
  }
  ```

- [#&#8203;8086](https://redirect.github.com/biomejs/biome/pull/8086)
[`2b41e82`](2b41e82de4)
Thanks [@&#8203;matanshavit](https://redirect.github.com/matanshavit)! -
Fixed
[#&#8203;8045](https://redirect.github.com/biomejs/biome/issues/8045):
The
[`noNestedTernary`](https://biomejs.dev/linter/rules/no-nested-ternary/)
rule now correctly detects nested ternary expressions even when they are
wrapped in parentheses (e.g. `foo ? (bar ? 1 : 2) : 3`).

Previously, the rule would not flag nested ternaries like `foo ? (bar ?
1 : 2) : 3` because the parentheses prevented detection. The rule now
looks through parentheses to identify nested conditionals.

  **Previously not detected (now flagged):**

  ```js
  const result = foo ? (bar ? 1 : 2) : 3;
  ```

  **Still valid (non-nested with parentheses):**

  ```js
  const result = foo ? bar : baz;
  ```

- [#&#8203;8075](https://redirect.github.com/biomejs/biome/pull/8075)
[`e403868`](e403868e22)
Thanks [@&#8203;YTomm](https://redirect.github.com/YTomm)! - Fixed
[#&#8203;7948](https://redirect.github.com/biomejs/biome/issues/7948):
The `useReadonlyClassProperties` code fix when `checkAllProperties` is
enabled will no longer insert a newline after `readonly` and the class
property.

- [#&#8203;8102](https://redirect.github.com/biomejs/biome/pull/8102)
[`47d940e`](47d940e30c)
Thanks [@&#8203;lucasweng](https://redirect.github.com/lucasweng)! -
Fixed
[#&#8203;8027](https://redirect.github.com/biomejs/biome/issues/8027).
[`useReactFunctionComponents`](https://biomejs.dev/linter/rules/use-react-function-components/)
no longer reports class components that implement `componentDidCatch`
using class expressions.

The rule now correctly recognizes error boundaries defined as class
expressions:

  ```jsx
  const ErrorBoundary = class extends Component {
    componentDidCatch(error, info) {}

    render() {
      return this.props.children;
    }
  };
  ```

- [#&#8203;8097](https://redirect.github.com/biomejs/biome/pull/8097)
[`5fc5416`](5fc5416ae1)
Thanks [@&#8203;dyc3](https://redirect.github.com/dyc3)! - Added the
nursery rule
[`useVueHyphenatedAttributes`](https://biomejs.dev/linter/rules/use-vue-hyphenated-attributes/),
which encourages using kebab case for attribute names, per the Vue style
guide's recommendations.

  ```vue
  <!-- Invalid -->
  <MyComponent myProp="value" />

  <!-- Valid -->
  <MyComponent my-prop="value" />
  ```

- [#&#8203;8108](https://redirect.github.com/biomejs/biome/pull/8108)
[`0f0a658`](0f0a65884b)
Thanks [@&#8203;Netail](https://redirect.github.com/Netail)! - Added the
nursery rule
[`noSyncScripts`](https://biomejs.dev/linter/rules/no-sync-scripts/).
Prevent the usage of synchronous scripts.

  **Invalid:**

  ```jsx
  <script src="https://third-party-script.js" />
  ```

  **Valid:**

  ```jsx
  <script src="https://third-party-script.js" async />
  <script src="https://third-party-script.js" defer />
  ```

- [#&#8203;8098](https://redirect.github.com/biomejs/biome/pull/8098)
[`1fdcaf0`](1fdcaf0336)
Thanks [@&#8203;Jayllyz](https://redirect.github.com/Jayllyz)! - Added
documentation URLs to rule descriptions in the JSON schema.

- [#&#8203;8097](https://redirect.github.com/biomejs/biome/pull/8097)
[`5fc5416`](5fc5416ae1)
Thanks [@&#8203;dyc3](https://redirect.github.com/dyc3)! - Fixed an
issue with the HTML parser where it would treat Vue directives with
dynamic arguments as static arguments instead.

- [#&#8203;7684](https://redirect.github.com/biomejs/biome/pull/7684)
[`f4433b3`](f4433b34e3)
Thanks
[@&#8203;vladimir-ivanov](https://redirect.github.com/vladimir-ivanov)!
- Changed
[`noUnusedPrivateClassMembers`](https://biomejs.dev/linter/rules/no-unused-private-class-members/)
to align more fully with meaningful reads.

This rule now distinguishes more carefully between writes and reads of
private class members.

  - A *meaningful read* is any access that affects program behavior.
- For example, `this.#x += 1` both reads and writes `#x`, so it counts
as usage.
- Pure writes without a read (e.g. `this.#x = 1` with no getter) are no
longer treated as usage.

This change ensures that private members are only considered “used” when
they are actually read in a way that influences execution.

  ***Invalid examples (previously valid)***

  ```ts
  class UsedMember {
    set #x(value) {
      doSomething(value);
    }

    foo() {
// This assignment does not actually read #x, because there is no
getter.
// Previously, this was considered a usage, but now it’s correctly
flagged.
      this.#x = 1;
    }
  }
  ```

  ***Valid example (Previously invalid)***

  ```js
  class Foo {
    #usedOnlyInWriteStatement = 5;

    method() {
// This counts as a meaningful read because we both read and write the
value.
      this.#usedOnlyInWriteStatement += 42;
    }
  }
  ```

- [#&#8203;7684](https://redirect.github.com/biomejs/biome/pull/7684)
[`f4433b3`](f4433b34e3)
Thanks
[@&#8203;vladimir-ivanov](https://redirect.github.com/vladimir-ivanov)!
- **Improved detection of used private class members**

The analysis for private class members has been improved: now the tool
only considers a private member “used” if it is actually referenced in
the code.

- Previously, some private members might have been reported as used even
if they weren’t actually accessed.
- With this change, only members that are truly read or called in the
code are counted as used.
- Members that are never accessed will now be correctly reported as
unused.

This makes reports about unused private members more accurate and helps
you clean up truly unused code.

  ***Example (previously valid)***

  ```ts
  type YesNo = "yes" | "no";

  export class SampleYesNo {
    private yes: () => void;
    private no: () => void;
    private dontKnow: () => void; // <- will now report as unused

    on(action: YesNo): void {
      this[action]();
    }
  }
  ```

- [#&#8203;7681](https://redirect.github.com/biomejs/biome/pull/7681)
[`b406db6`](b406db667f)
Thanks [@&#8203;kedevked](https://redirect.github.com/kedevked)! - Added
the new lint rule,
[`useSpread`](https://biomejs.dev/linter/rules/use-spread/), ported from
the ESLint rule
[`prefer-spread`](https://eslint.org/docs/latest/rules/prefer-spread).

This rule enforces the use of the **spread syntax** (`...`) over
`Function.prototype.apply()` when calling variadic functions, as spread
syntax is generally more concise and idiomatic in modern JavaScript
(ES2015+).

  The rule provides a safe fix.

##### Invalid

```js
Math.max.apply(Math, args);
foo.apply(undefined, args);
obj.method.apply(obj, args);
```

##### Valid

```js
Math.max(...args);
foo(...args);
obj.method(...args);

// Allowed: cases where the `this` binding is intentionally changed
foo.apply(otherObj, args);
```

- [#&#8203;7287](https://redirect.github.com/biomejs/biome/pull/7287)
[`aa55c8d`](aa55c8d572)
Thanks [@&#8203;ToBinio](https://redirect.github.com/ToBinio)! - Fixed
[#&#8203;7205](https://redirect.github.com/biomejs/biome/issues/7205):
The
[`noDuplicateTestHooks`](https://biomejs.dev/linter/rules/no-duplicate-test-hooks/)
rule now treats chained describe variants (e.g., describe.each/for/todo)
as proper describe scopes, eliminating false positives.

  The following code will no longer be a false positive:

  ```js
  describe("foo", () => {
    describe.for([])("baz", () => {
      beforeEach(() => {});
    });

    describe.todo("qux", () => {
      beforeEach(() => {});
    });

    describe.todo.each([])("baz", () => {
      beforeEach(() => {});
    });
  });
  ```

- [#&#8203;8013](https://redirect.github.com/biomejs/biome/pull/8013)
[`0c0edd4`](0c0edd4311)
Thanks [@&#8203;Jayllyz](https://redirect.github.com/Jayllyz)! - Added
the GraphQL nursery rule
[`useUniqueGraphqlOperationName`](https://biomejs.dev/linter/rules/use-unique-graphql-operation-name).
This rule ensures that all GraphQL operations within a document have
unique names.

  **Invalid:**

  ```graphql
  query user {
    user {
      id
    }
  }

  query user {
    user {
      id
      email
    }
  }
  ```

  **Valid:**

  ```graphql
  query user {
    user {
      id
    }
  }

  query userWithEmail {
    user {
      id
      email
    }
  }
  ```

- [#&#8203;8084](https://redirect.github.com/biomejs/biome/pull/8084)
[`c2983f9`](c2983f9776)
Thanks [@&#8203;dyc3](https://redirect.github.com/dyc3)! - Fixed
[#&#8203;8080](https://redirect.github.com/biomejs/biome/issues/8080):
The HTML parser, when parsing Vue, can now properly handle Vue
directives with no argument, modifiers, or initializer (e.g. `v-else`).
It will no longer treat subsequent valid attributes as bogus.

  ```vue
  <p v-else class="flex">World</p>
  <!-- Fixed: class now gets parsed as it's own attribute -->
  ```

- [#&#8203;8104](https://redirect.github.com/biomejs/biome/pull/8104)
[`041196b`](041196bc2a)
Thanks [@&#8203;Conaclos](https://redirect.github.com/Conaclos)! - Fixed
[`noInvalidUseBeforeDeclaration`](https://biomejs.dev/linter/rules/no-invalid-use-before-declaration/).
The rule no longer reports a use of an ambient variable before its
declarations.
  The rule also completely ignores TypeScript declaration files.
  The following code is no longer reported as invalid:

  ```ts
  CONSTANT;
  declare const CONSTANT: number;
  ```

- [#&#8203;8060](https://redirect.github.com/biomejs/biome/pull/8060)
[`ba7b076`](ba7b076589)
Thanks [@&#8203;dyc3](https://redirect.github.com/dyc3)! - Added the
nursery rule
[`useVueValidVBind`](https://biomejs.dev/linter/rules/use-vue-valid-v-bind/),
which enforces the validity of `v-bind` directives in Vue files.

  Invalid `v-bind` usages include:

  ```vue
  <Foo v-bind />
  <!-- Missing argument -->
  <Foo v-bind:foo />
  <!-- Missing value -->
  <Foo v-bind:foo.bar="baz" />
  <!-- Invalid modifier -->
  ```

- [#&#8203;8113](https://redirect.github.com/biomejs/biome/pull/8113)
[`fb8e3e7`](fb8e3e7677)
Thanks [@&#8203;Conaclos](https://redirect.github.com/Conaclos)! - Fixed
[`noInvalidUseBeforeDeclaration`](https://biomejs.dev/linter/rules/no-invalid-use-before-declaration/).
The rule now reports invalid use of classes, enums, and TypeScript's
import-equals before their declarations.

  The following code is now reported as invalid:

  ```js
  new C();
  class C {}
  ```

- [#&#8203;8077](https://redirect.github.com/biomejs/biome/pull/8077)
[`0170dcb`](0170dcb1f1)
Thanks [@&#8203;dyc3](https://redirect.github.com/dyc3)! - Added the
rule
[`useVueValidVElseIf`](https://biomejs.dev/linter/rules/use-vue-valid-v-else-if/)
to enforce valid `v-else-if` directives in Vue templates. This rule
reports invalid `v-else-if` directives with missing conditional
expressions or when not preceded by a `v-if` or `v-else-if` directive.

- [#&#8203;8077](https://redirect.github.com/biomejs/biome/pull/8077)
[`0170dcb`](0170dcb1f1)
Thanks [@&#8203;dyc3](https://redirect.github.com/dyc3)! - Added the
rule
[`useVueValidVElse`](https://biomejs.dev/linter/rules/use-vue-valid-v-else/)
to enforce valid `v-else` directives in Vue templates. This rule reports
`v-else` directives that are not preceded by a `v-if` or `v-else-if`
directive.

- [#&#8203;8077](https://redirect.github.com/biomejs/biome/pull/8077)
[`0170dcb`](0170dcb1f1)
Thanks [@&#8203;dyc3](https://redirect.github.com/dyc3)! - Added the
rule
[`useVueValidVHtml`](https://biomejs.dev/linter/rules/use-vue-valid-v-html/)
to enforce valid usage of the `v-html` directive in Vue templates. This
rule reports `v-html` directives with missing expressions, unexpected
arguments, or unexpected modifiers.

- [#&#8203;8077](https://redirect.github.com/biomejs/biome/pull/8077)
[`0170dcb`](0170dcb1f1)
Thanks [@&#8203;dyc3](https://redirect.github.com/dyc3)! - Added the
rule
[`useVueValidVIf`](https://biomejs.dev/linter/rules/use-vue-valid-v-if/)
to enforce valid `v-if` directives in Vue templates. It disallows
arguments and modifiers, and ensures a value is provided.

- [#&#8203;8077](https://redirect.github.com/biomejs/biome/pull/8077)
[`0170dcb`](0170dcb1f1)
Thanks [@&#8203;dyc3](https://redirect.github.com/dyc3)! - Added the
rule
[`useVueValidVOn`](https://biomejs.dev/linter/rules/use-vue-valid-v-on/)
to enforce valid `v-on` directives in Vue templates. This rule reports
invalid `v-on` / shorthand `@` directives with missing event names,
invalid modifiers, or missing handler expressions.

#### What's Changed

- refactor(cli/logging): removed duplication in
setup\_cli\_subscriber(...) by
[@&#8203;JadKHaddad](https://redirect.github.com/JadKHaddad) in
[#&#8203;7531](https://redirect.github.com/biomejs/biome/pull/7531)
- perf(parse/tailwind): use compact trie for lexing base names instead
of linear search by [@&#8203;dyc3](https://redirect.github.com/dyc3) in
[#&#8203;7977](https://redirect.github.com/biomejs/biome/pull/7977)
- feat(biome\_graphql\_analyze): implement
`useConsistentGraphqlDescriptions` by
[@&#8203;Netail](https://redirect.github.com/Netail) in
[#&#8203;7672](https://redirect.github.com/biomejs/biome/pull/7672)
- fix: remove unexpected new line when adding a readonly class property
by [@&#8203;YTomm](https://redirect.github.com/YTomm) in
[#&#8203;8075](https://redirect.github.com/biomejs/biome/pull/8075)
- feat(html/analyze): add useVueValidVBind by
[@&#8203;dyc3](https://redirect.github.com/dyc3) in
[#&#8203;8060](https://redirect.github.com/biomejs/biome/pull/8060)
- fix(noDuplicateTestHook): detect more test function defintions by
[@&#8203;ToBinio](https://redirect.github.com/ToBinio) in
[#&#8203;7287](https://redirect.github.com/biomejs/biome/pull/7287)
- fix(noParametersOnlyUsedInRecursion): compare bindings for recursion
detection by
[@&#8203;matanshavit](https://redirect.github.com/matanshavit) in
[#&#8203;8026](https://redirect.github.com/biomejs/biome/pull/8026)
- feat(html/analyze): add `useVueValidVIf`, `useVueValidVElseIf`,
`useVueValidVElse`, `useVueValidVOn` and `useVueValidVHtml` by
[@&#8203;dyc3](https://redirect.github.com/dyc3) in
[#&#8203;8077](https://redirect.github.com/biomejs/biome/pull/8077)
- refactor(lint): refactor NoParametersOnlyUsedInRecursion by
[@&#8203;matanshavit](https://redirect.github.com/matanshavit) in
[#&#8203;7970](https://redirect.github.com/biomejs/biome/pull/7970)
- fix(parse/html/vue): fix modifier list parser aggressively parsing
tokens it shouldn't by [@&#8203;dyc3](https://redirect.github.com/dyc3)
in [#&#8203;8084](https://redirect.github.com/biomejs/biome/pull/8084)
- feat(js\_analyze): implement noForIn by
[@&#8203;Netail](https://redirect.github.com/Netail) in
[#&#8203;8085](https://redirect.github.com/biomejs/biome/pull/8085)
- fix(noNestedTernary): detect nested ternaries wrapped in parentheses
by [@&#8203;matanshavit](https://redirect.github.com/matanshavit) in
[#&#8203;8086](https://redirect.github.com/biomejs/biome/pull/8086)
- refactor: migrate to schemars v1 by
[@&#8203;ematipico](https://redirect.github.com/ematipico) in
[#&#8203;8087](https://redirect.github.com/biomejs/biome/pull/8087)
- feat(graphql\_analyze): add `useUniqueGraphqlOperationName` by
[@&#8203;Jayllyz](https://redirect.github.com/Jayllyz) in
[#&#8203;8013](https://redirect.github.com/biomejs/biome/pull/8013)
- chore: regression schemars v1 by
[@&#8203;ematipico](https://redirect.github.com/ematipico) in
[#&#8203;8092](https://redirect.github.com/biomejs/biome/pull/8092)
- refactor(core): actions and pull diagnostics by
[@&#8203;ematipico](https://redirect.github.com/ematipico) in
[#&#8203;8082](https://redirect.github.com/biomejs/biome/pull/8082)
- chore: enable oidc publishing by
[@&#8203;ematipico](https://redirect.github.com/ematipico) in
[#&#8203;8074](https://redirect.github.com/biomejs/biome/pull/8074)
- chore: expose schema generation function by
[@&#8203;ematipico](https://redirect.github.com/ematipico) in
[#&#8203;8093](https://redirect.github.com/biomejs/biome/pull/8093)
- feat: add useSpread rule by
[@&#8203;kedevked](https://redirect.github.com/kedevked) in
[#&#8203;7681](https://redirect.github.com/biomejs/biome/pull/7681)
- chore(core): add CSS variant information to the source file by
[@&#8203;ematipico](https://redirect.github.com/ematipico) in
[#&#8203;8095](https://redirect.github.com/biomejs/biome/pull/8095)
- feat(schema): add docs URLs to rule description by
[@&#8203;Jayllyz](https://redirect.github.com/Jayllyz) in
[#&#8203;8098](https://redirect.github.com/biomejs/biome/pull/8098)
- feat(js\_analyze): implement useFind by
[@&#8203;Netail](https://redirect.github.com/Netail) in
[#&#8203;8100](https://redirect.github.com/biomejs/biome/pull/8100)
- feat(biome\_js\_analyze): align
no\_unused\_private\_class\_members\_with\_semantic\_class and dynamic
prop access by
[@&#8203;vladimir-ivanov](https://redirect.github.com/vladimir-ivanov)
in [#&#8203;7684](https://redirect.github.com/biomejs/biome/pull/7684)
- feat(analyze): implement `noSyncScripts` by
[@&#8203;Netail](https://redirect.github.com/Netail) in
[#&#8203;8108](https://redirect.github.com/biomejs/biome/pull/8108)
- fix(noInvalidUseBeforeDeclaration): don't report use before ambient
var declaration by
[@&#8203;Conaclos](https://redirect.github.com/Conaclos) in
[#&#8203;8104](https://redirect.github.com/biomejs/biome/pull/8104)
- fix(noInvalidUseBeforeDeclaration): handle class, enum, import-equals
by [@&#8203;Conaclos](https://redirect.github.com/Conaclos) in
[#&#8203;8113](https://redirect.github.com/biomejs/biome/pull/8113)
- fix(useReactFunctionComponents): handle class expressions with
componentDidCatch by
[@&#8203;lucasweng](https://redirect.github.com/lucasweng) in
[#&#8203;8102](https://redirect.github.com/biomejs/biome/pull/8102)
- feat(lint/vue): add `noVueVIfWithVFor`, `useVueHyphenatedAttributes`
by [@&#8203;dyc3](https://redirect.github.com/dyc3) in
[#&#8203;8097](https://redirect.github.com/biomejs/biome/pull/8097)
- chore(deps): update github-actions by
[@&#8203;renovate](https://redirect.github.com/renovate)\[bot] in
[#&#8203;8121](https://redirect.github.com/biomejs/biome/pull/8121)
- chore(deps): update dependency
[@&#8203;types/node](https://redirect.github.com/types/node) to v22.19.1
by [@&#8203;renovate](https://redirect.github.com/renovate)\[bot] in
[#&#8203;8122](https://redirect.github.com/biomejs/biome/pull/8122)
- chore(deps): update dependency rust to v1.91.1 by
[@&#8203;renovate](https://redirect.github.com/renovate)\[bot] in
[#&#8203;8123](https://redirect.github.com/biomejs/biome/pull/8123)
- chore(deps): update taiki-e/install-action action to v2.62.52 by
[@&#8203;renovate](https://redirect.github.com/renovate)\[bot] in
[#&#8203;8126](https://redirect.github.com/biomejs/biome/pull/8126)
- chore(deps): update typescript-eslint monorepo to v8.46.4 by
[@&#8203;renovate](https://redirect.github.com/renovate)\[bot] in
[#&#8203;8127](https://redirect.github.com/biomejs/biome/pull/8127)
- fix(biome\_js\_analyze): fix useValidLang rejecting BCP 47 language
tags with script subtags by
[@&#8203;hirokiokada77](https://redirect.github.com/hirokiokada77) in
[#&#8203;8118](https://redirect.github.com/biomejs/biome/pull/8118)
- fix(deps): update
[@&#8203;biomejs](https://redirect.github.com/biomejs) packages by
[@&#8203;renovate](https://redirect.github.com/renovate)\[bot] in
[#&#8203;8129](https://redirect.github.com/biomejs/biome/pull/8129)
- fix(deps): update rust crates by
[@&#8203;renovate](https://redirect.github.com/renovate)\[bot] in
[#&#8203;8130](https://redirect.github.com/biomejs/biome/pull/8130)
- chore(deps): update rust crate schemars to 1.1.0 by
[@&#8203;renovate](https://redirect.github.com/renovate)\[bot] in
[#&#8203;8124](https://redirect.github.com/biomejs/biome/pull/8124)
- chore(deps): update rust crate windows to 0.62.2 by
[@&#8203;renovate](https://redirect.github.com/renovate)\[bot] in
[#&#8203;8053](https://redirect.github.com/biomejs/biome/pull/8053)
- chore(deps): update
[@&#8203;biomejs](https://redirect.github.com/biomejs) packages (major)
by [@&#8203;renovate](https://redirect.github.com/renovate)\[bot] in
[#&#8203;8131](https://redirect.github.com/biomejs/biome/pull/8131)
- chore(deps): update dependency
[@&#8203;types/node](https://redirect.github.com/types/node) to v24 by
[@&#8203;renovate](https://redirect.github.com/renovate)\[bot] in
[#&#8203;8132](https://redirect.github.com/biomejs/biome/pull/8132)
- chore: schema regression rule domains by
[@&#8203;ematipico](https://redirect.github.com/ematipico) in
[#&#8203;8133](https://redirect.github.com/biomejs/biome/pull/8133)
- chore: disable docstrings in coderabbit by
[@&#8203;ematipico](https://redirect.github.com/ematipico) in
[#&#8203;8134](https://redirect.github.com/biomejs/biome/pull/8134)
- ci: release by
[@&#8203;github-actions](https://redirect.github.com/github-actions)\[bot]
in [#&#8203;8076](https://redirect.github.com/biomejs/biome/pull/8076)

#### New Contributors

- [@&#8203;JadKHaddad](https://redirect.github.com/JadKHaddad) made
their first contribution in
[#&#8203;7531](https://redirect.github.com/biomejs/biome/pull/7531)
- [@&#8203;YTomm](https://redirect.github.com/YTomm) made their first
contribution in
[#&#8203;8075](https://redirect.github.com/biomejs/biome/pull/8075)
- [@&#8203;ToBinio](https://redirect.github.com/ToBinio) made their
first contribution in
[#&#8203;7287](https://redirect.github.com/biomejs/biome/pull/7287)
- [@&#8203;hirokiokada77](https://redirect.github.com/hirokiokada77)
made their first contribution in
[#&#8203;8118](https://redirect.github.com/biomejs/biome/pull/8118)

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

###
[`v2.3.5`](e8b67537fb...0a2f6173be)

###
[`v2.3.4`](fd282fc5f4...e8b67537fb)

###
[`v2.3.3`](6d95a67d7a...fd282fc5f4)

###
[`v2.3.2`](be79a6b41b...6d95a67d7a)

###
[`v2.3.1`](53ffa8bf30...be79a6b41b)

</details>

<details>
<summary>evanw/esbuild (esbuild)</summary>

###
[`v0.27.0`](https://redirect.github.com/evanw/esbuild/blob/HEAD/CHANGELOG.md#0270)

**This release deliberately contains backwards-incompatible changes.**
To avoid automatically picking up releases like this, you should either
be pinning the exact version of `esbuild` in your `package.json` file
(recommended) or be using a version range syntax that only accepts patch
upgrades such as `^0.26.0` or `~0.26.0`. See npm's documentation about
[semver](https://docs.npmjs.com/cli/v6/using-npm/semver/) for more
information.

- Use `Uint8Array.fromBase64` if available
([#&#8203;4286](https://redirect.github.com/evanw/esbuild/issues/4286))

With this release, esbuild's `binary` loader will now use the new
[`Uint8Array.fromBase64`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array/fromBase64)
function unless it's unavailable in the configured target environment.
If it's unavailable, esbuild's previous code for this will be used as a
fallback. Note that this means you may now need to specify `target` when
using this feature with Node (for example `--target=node22`) unless
you're using Node v25+.

- Update the Go compiler from v1.23.12 to v1.25.4
([#&#8203;4208](https://redirect.github.com/evanw/esbuild/issues/4208),
[#&#8203;4311](https://redirect.github.com/evanw/esbuild/pull/4311))

  This raises the operating system requirements for running esbuild:

  - Linux: now requires a kernel version of 3.2 or later
  - macOS: now requires macOS 12 (Monterey) or later

###
[`v0.25.12`](https://redirect.github.com/evanw/esbuild/blob/HEAD/CHANGELOG.md#02512)

[Compare
Source](https://redirect.github.com/evanw/esbuild/compare/v0.25.11...v0.25.12)

- Fix a minification regression with CSS media queries
([#&#8203;4315](https://redirect.github.com/evanw/esbuild/issues/4315))

The previous release introduced support for parsing media queries which
unintentionally introduced a regression with the removal of duplicate
media rules during minification. Specifically the grammar for `@media
<media-type> and <media-condition-without-or> { ... }` was missing an
equality check for the `<media-condition-without-or>` part, so rules
with different suffix clauses in this position would incorrectly compare
equal and be deduplicated. This release fixes the regression.

- Update the list of known JavaScript globals
([#&#8203;4310](https://redirect.github.com/evanw/esbuild/issues/4310))

This release updates esbuild's internal list of known JavaScript
globals. These are globals that are known to not have side-effects when
the property is accessed. For example, accessing the global `Array`
property is considered to be side-effect free but accessing the global
`scrollY` property can trigger a layout, which is a side-effect. This is
used by esbuild's tree-shaking to safely remove unused code that is
known to be side-effect free. This update adds the following global
properties:

  From [ES2017](https://tc39.es/ecma262/2017/):

  - `Atomics`
  - `SharedArrayBuffer`

  From [ES2020](https://tc39.es/ecma262/2020/):

  - `BigInt64Array`
  - `BigUint64Array`

  From [ES2021](https://tc39.es/ecma262/2021/):

  - `FinalizationRegistry`
  - `WeakRef`

  From [ES2025](https://tc39.es/ecma262/2025/):

  - `Float16Array`
  - `Iterator`

Note that this does not indicate that constructing any of these objects
is side-effect free, just that accessing the identifier is side-effect
free. For example, this now allows esbuild to tree-shake classes that
extend from `Iterator`:

  ```js
  // This can now be tree-shaken by esbuild:
  class ExampleIterator extends Iterator {}
  ```

- Add support for the new `@view-transition` CSS rule
([#&#8203;4313](https://redirect.github.com/evanw/esbuild/pull/4313))

With this release, esbuild now has improved support for pretty-printing
and minifying the new `@view-transition` rule (which esbuild was
previously unaware of):

  ```css
  /* Original code */
  @&#8203;view-transition {
    navigation: auto;
    types: check;
  }

  /* Old output */
  @&#8203;view-transition { navigation: auto; types: check; }

  /* New output */
  @&#8203;view-transition {
    navigation: auto;
    types: check;
  }
  ```

The new view transition feature provides a mechanism for creating
animated transitions between documents in a multi-page app. You can read
more about view transition rules
[here](https://developer.mozilla.org/en-US/docs/Web/CSS/@&#8203;view-transition).

This change was contributed by
[@&#8203;yisibl](https://redirect.github.com/yisibl).

- Trim CSS rules that will never match

The CSS minifier will now remove rules whose selectors contain `:is()`
and `:where()` as those selectors will never match. These selectors can
currently be automatically generated by esbuild when you give esbuild
nonsensical input such as the following:

  ```css
  /* Original code */
  div:before {
    color: green;
    &.foo {
      color: red;
    }
  }

  /* Old output (with --supported:nesting=false --minify) */
  div:before{color:green}:is().foo{color:red}

  /* New output (with --supported:nesting=false --minify) */
  div:before{color:green}
  ```

This input is nonsensical because CSS nesting is (unfortunately) not
supported inside of pseudo-elements such as `:before`. Currently esbuild
generates a rule containing `:is()` in this case when you tell esbuild
to transform nested CSS into non-nested CSS. I think it's reasonable to
do that as it sort of helps explain what's going on (or at least
indicates that something is wrong in the output). It shouldn't be
present in minified code, however, so this release now strips it out.

</details>

<details>
<summary>alecthomas/kong (github.com/alecthomas/kong)</summary>

###
[`v1.13.0`](https://redirect.github.com/alecthomas/kong/compare/v1.12.1...v1.13.0)

[Compare
Source](https://redirect.github.com/alecthomas/kong/compare/v1.12.1...v1.13.0)

</details>

<details>
<summary>golang/go (go)</summary>

###
[`v1.25.4`](https://redirect.github.com/golang/go/compare/go1.25.3...go1.25.4)

</details>

<details>
<summary>sharkdp/hyperfine (hyperfine)</summary>

###
[`v1.20.0`](https://redirect.github.com/sharkdp/hyperfine/blob/HEAD/CHANGELOG.md#v1200)

#### Features

- Add `--reference-name` option to give a meaningful name to the
reference command, see
[#&#8203;808](https://redirect.github.com/sharkdp/hyperfine/issues/808)
([@&#8203;niklasdewally](https://redirect.github.com/niklasdewally))
- The `--ignore-failure` option now supports a comma-separated list of
exit codes to ignore (e.g., `--ignore-failure=1,2`), see
[#&#8203;836](https://redirect.github.com/sharkdp/hyperfine/issues/836)
([@&#8203;sharkdp](https://redirect.github.com/sharkdp))
- Python scripts: Add `--time-unit` option to `advanced_statistics.py`
([@&#8203;sharkdp](https://redirect.github.com/sharkdp))
- Python scripts: Add new `plot_benchmarks.py` script for plotting
collections of benchmarks, see
[#&#8203;806](https://redirect.github.com/sharkdp/hyperfine/issues/806)
([@&#8203;marxin](https://redirect.github.com/marxin))

#### Bugfixes

- Fix bug where naming individual commands with parameter scan was not
working correctly, see
[#&#8203;794](https://redirect.github.com/sharkdp/hyperfine/issues/794)
([@&#8203;teofr](https://redirect.github.com/teofr))

#### Other

- Restrict `cat` tests to Unix environments, see
[#&#8203;776](https://redirect.github.com/sharkdp/hyperfine/issues/776)
and
[#&#8203;777](https://redirect.github.com/sharkdp/hyperfine/issues/777)
([@&#8203;ritvikos](https://redirect.github.com/ritvikos))

</details>

<details>
<summary>caarlos0/svu (svu)</summary>

###
[`v3.3.0`](https://redirect.github.com/caarlos0/svu/releases/tag/v3.3.0)

#### Changelog

##### New Features

-
[`0d2aa97`](0d2aa97062):
feat: add `--json` flag
([#&#8203;261](https://redirect.github.com/caarlos0/svu/issues/261))
([@&#8203;Nadim147c](https://redirect.github.com/Nadim147c))
-
[`b359291`](b359291f58):
feat: beautiful --help with fang
([@&#8203;caarlos0](https://redirect.github.com/caarlos0))

##### Bug fixes

-
[`28f88fc`](28f88fca94):
fix: gitignore
([@&#8203;caarlos0](https://redirect.github.com/caarlos0))
-
[`3bf9b66`](3bf9b66033):
fix: lint issues
([@&#8203;caarlos0](https://redirect.github.com/caarlos0))

##### Other work

-
[`c669d8f`](c669d8f20c):
build: go 1.25
([@&#8203;caarlos0](https://redirect.github.com/caarlos0))
-
[`0dfc805`](0dfc805fa0):
ci(deps): bump anchore/scan-action in the actions group
([#&#8203;266](https://redirect.github.com/caarlos0/svu/issues/266))
([@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot])
-
[`752527b`](752527b8ce):
ci: add golangici-lint config
([@&#8203;caarlos0](https://redirect.github.com/caarlos0))
-
[`7a5f75e`](7a5f75ee0b):
ci: consolidated security jobs
([@&#8203;caarlos0](https://redirect.github.com/caarlos0))
-
[`7ae0db3`](7ae0db3fc6):
ci: dependabot update
([@&#8203;caarlos0](https://redirect.github.com/caarlos0))
-
[`d9cfe53`](d9cfe533c6):
ci: update goreleaser
([@&#8203;caarlos0](https://redirect.github.com/caarlos0))
-
[`97e3dcf`](97e3dcfd23):
ci: update goreleaser
([@&#8203;caarlos0](https://redirect.github.com/caarlos0))
-
[`04a8379`](04a83790cc):
ci: update goreleaser config
([@&#8203;caarlos0](https://redirect.github.com/caarlos0))

**Full Changelog**:
<https://github.com/caarlos0/svu/compare/v3.2.4...v3.3.0>

***

*Released with [GoReleaser Pro](https://goreleaser.com/pro)!*

</details>

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

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

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

Released on 2025-11-17.

##### Enhancements

- Add support for `SSL_CERT_DIR`
([#&#8203;16473](https://redirect.github.com/astral-sh/uv/pull/16473))
- Enforce UTF‑8-encoded license files during `uv build`
([#&#8203;16699](https://redirect.github.com/astral-sh/uv/pull/16699))
- Error when a `project.license-files` glob matches nothing
([#&#8203;16697](https://redirect.github.com/astral-sh/uv/pull/16697))
- `pip install --target` (and `sync`) install Python if necessary
([#&#8203;16694](https://redirect.github.com/astral-sh/uv/pull/16694))
- Account for `python_downloads_json_url` in pre-release Python version
warnings
([#&#8203;16737](https://redirect.github.com/astral-sh/uv/pull/16737))
- Support HTTP/HTTPS URLs in `uv python --python-downloads-json-url`
([#&#8203;16542](https://redirect.github.com/astral-sh/uv/pull/16542))

##### Preview features

- Add support for `--upgrade` in `uv python install`
([#&#8203;16676](https://redirect.github.com/astral-sh/uv/pull/16676))
- Fix handling of `python install --default` for pre-release Python
versions
([#&#8203;16706](https://redirect.github.com/astral-sh/uv/pull/16706))
- Add `uv workspace list` to list workspace members
([#&#8203;16691](https://redirect.github.com/astral-sh/uv/pull/16691))

##### Bug fixes

- Don't check file URLs for ambiguously parsed credentials
([#&#8203;16759](https://redirect.github.com/astral-sh/uv/pull/16759))

##### Documentation

- Add a "storage" reference document
([#&#8203;15954](https://redirect.github.com/astral-sh/uv/pull/15954))

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

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

Released on 2025-11-12.

##### Deprecations

- Deprecate use of `--project` in `uv init`
([#&#8203;16674](https://redirect.github.com/astral-sh/uv/pull/16674))

##### Enhancements

- Add iOS support to Python interpreter discovery
([#&#8203;16686](https://redirect.github.com/astral-sh/uv/pull/16686))
- Reject ambiguously parsed URLs
([#&#8203;16622](https://redirect.github.com/astral-sh/uv/pull/16622))
- Allow explicit values in `uv version --bump`
([#&#8203;16555](https://redirect.github.com/astral-sh/uv/pull/16555))
- Warn on use of managed pre-release Python versions when a stable
version is available
([#&#8203;16619](https://redirect.github.com/astral-sh/uv/pull/16619))
- Allow signing trampolines on Windows by using `.rcdata` to store
metadata
([#&#8203;15068](https://redirect.github.com/astral-sh/uv/pull/15068))
- Add `--only-emit-workspace` and similar variants to `uv export`
([#&#8203;16681](https://redirect.github.com/astral-sh/uv/pull/16681))

##### Preview features

- Add `uv workspace dir` command
([#&#8203;16678](https://redirect.github.com/astral-sh/uv/pull/16678))
- Add `uv workspace metadata` command
([#&#8203;16516](https://redirect.github.com/astral-sh/uv/pull/16516))

##### Configuration

- Add `UV_NO_DEFAULT_GROUPS` environment variable
([#&#8203;16645](https://redirect.github.com/astral-sh/uv/pull/16645))

##### Bug fixes

- Remove `torch-model-archiver` and `torch-tb-profiler` from PyTorch
backend
([#&#8203;16655](https://redirect.github.com/astral-sh/uv/pull/16655))
- Fix Pixi environment detection
([#&#8203;16585](https://redirect.github.com/astral-sh/uv/pull/16585))

##### Documentation

- Fix `CMD` path in FastAPI Dockerfile
([#&#8203;16701](https://redirect.github.com/astral-sh/uv/pull/16701))

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

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

Released on 2025-11-07.

##### Enhancements

- Accept multiple packages in `uv export`
([#&#8203;16603](https://redirect.github.com/astral-sh/uv/pull/16603))
- Accept multiple packages in `uv sync`
([#&#8203;16543](https://redirect.github.com/astral-sh/uv/pull/16543))
- Add a `uv cache size` command
([#&#8203;16032](https://redirect.github.com/astral-sh/uv/pull/16032))
- Add prerelease guidance for build-system resolution failures
([#&#8203;16550](https://redirect.github.com/astral-sh/uv/pull/16550))
- Allow Python requests to include `+gil` to require a GIL-enabled
interpreter
([#&#8203;16537](https://redirect.github.com/astral-sh/uv/pull/16537))
- Avoid pluralizing 'retry' for single value
([#&#8203;16535](https://redirect.github.com/astral-sh/uv/pull/16535))
- Enable first-class dependency exclusions
([#&#8203;16528](https://redirect.github.com/astral-sh/uv/pull/16528))
- Fix inclusive constraints on available package versions in resolver
errors
([#&#8203;16629](https://redirect.github.com/astral-sh/uv/pull/16629))
- Improve `uv init` error for invalid directory names
([#&#8203;16554](https://redirect.github.com/astral-sh/uv/pull/16554))
- Show help on `uv build -h`
([#&#8203;16632](https://redirect.github.com/astral-sh/uv/pull/16632))
- Include the Python variant suffix in "Using Python ..." messages
([#&#8203;16536](https://redirect.github.com/astral-sh/uv/pull/16536))
- Log most recently modified file for cache-keys
([#&#8203;16338](https://redirect.github.com/astral-sh/uv/pull/16338))
- Update Docker builds to use nightly Rust toolchain with musl v1.2.5
([#&#8203;16584](https://redirect.github.com/astral-sh/uv/pull/16584))

##### Configuration

- Expose `UV_NO_GROUP` as an environment variable
([#&#8203;16529](https://redirect.github.com/astral-sh/uv/pull/16529))
- Add `UV_NO_SOURCES` as an environment variable
([#&#8203;15883](https://redirect.github.com/astral-sh/uv/pull/15883))

##### Bug fixes

- Allow `--check` and `--locked` to be used together in `uv lock`
([#&#8203;16538](https://redirect.github.com/astral-sh/uv/pull/16538))
- Allow for unnormalized names in the METADATA file
([#&#8203;16547](https://redirect.github.com/astral-sh/uv/issues/16547))
([#&#8203;16548](https://redirect.github.com/astral-sh/uv/pull/16548))
- Fix missing value\_type for `default-groups` in schema
([#&#8203;16575](https://redirect.github.com/astral-sh/uv/pull/16575))
- Respect multi-GPU outputs in `nvidia-smi`
([#&#8203;15460](https://redirect.github.com/astral-sh/uv/pull/15460))
- Fix DNS lookup errors in Docker containers
([#&#8203;8450](https://redirect.github.com/astral-sh/uv/issues/8450))

##### Documentation

- Fix typo in uv tool list doc
([#&#8203;16625](https://redirect.github.com/astral-sh/uv/pull/16625))
- Note `uv pip list` name normalization in docs
([#&#8203;13210](https://redirect.github.com/astral-sh/uv/pull/13210))

##### Other changes

- Update Rust toolchain to 1.91 and MSRV to 1.89
([#&#8203;16531](https://redirect.github.com/astral-sh/uv/pull/16531))

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

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

Released on 2025-10-30.

##### Enhancements

- Add Windows x86-32 emulation support to interpreter architecture
checks
([#&#8203;13475](https://redirect.github.com/astral-sh/uv/pull/13475))
- Improve readability of progress bars
([#&#8203;16509](https://redirect.github.com/astral-sh/uv/pull/16509))
- Add GitHub attestations for uv release artifacts
([#&#8203;11357](https://redirect.github.com/astral-sh/uv/pull/11357))

##### Bug fixes

- Drop terminal coloring from `uv auth token` output
([#&#8203;16504](https://redirect.github.com/astral-sh/uv/pull/16504))
- Don't use UV\_LOCKED to enable `--check` flag
([#&#8203;16521](https://redirect.github.com/astral-sh/uv/pull/16521))

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

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

Released on 2025-10-29.

This release contains an upgrade to Astral's fork of `async_zip`, which
addresses potential sources of ZIP parsing differentials between uv and
other Python packaging tooling. See
[GHSA-pqhf-p39g-3x64](https://redirect.github.com/astral-sh/uv/security/advisories/GHSA-pqhf-p39g-3x64)
for additional details.

##### Security

- Address ZIP parsing differentials
([GHSA-pqhf-p39g-3x64](https://redirect.github.com/astral-sh/uv/security/advisories/GHSA-pqhf-p39g-3x64))

##### Python

- Upgrade GraalPy to 25.0.1
([#&#8203;16401](https://redirect.github.com/astral-sh/uv/pull/16401))

##### Enhancements

- Add `--clear` to `uv build` to remove old build artifacts
([#&#8203;16371](https://redirect.github.com/astral-sh/uv/pull/16371))
- Add `--no-create-gitignore` to `uv build`
([#&#8203;16369](https://redirect.github.com/astral-sh/uv/pull/16369))
- Do not error when a virtual environment directory cannot be removed
due to a busy error
([#&#8203;16394](https://redirect.github.com/astral-sh/uv/pull/16394))
- Improve hint on `pip install --system` when externally managed
([#&#8203;16392](https://redirect.github.com/astral-sh/uv/pull/16392))
- Running `uv lock --check` with outdated lockfile will print that
`--check` was passed, instead of `--locked`
([#&#8203;16322](https://redirect.github.com/astral-sh/uv/pull/16322))
- Update `uv init` template for Maturin
([#&#8203;16449](https://redirect.github.com/astral-sh/uv/pull/16449))
- Improve ordering of Python sources in logs
([#&#8203;16463](https://redirect.github.com/astral-sh/uv/pull/16463))
- Restore DockerHub release images and annotations
([#&#8203;16441](https://redirect.github.com/astral-sh/uv/pull/16441))

##### Bug fixes

- Check for matching Python implementation during `uv python upgrade`
([#&#8203;16420](https://redirect.github.com/astral-sh/uv/pull/16420))
- Deterministically order `--find-links` distributions
([#&#8203;16446](https://redirect.github.com/astral-sh/uv/pull/16446))
- Don't panic in `uv export --frozen` when the lockfile is outdated
([#&#8203;16407](https://redirect.github.com/astral-sh/uv/pull/16407))
- Fix root of `uv tree` when `--package` is used with circular
dependencies
([#&#8203;15908](https://redirect.github.com/astral-sh/uv/pull/15908))
- Show package list with `pip freeze --quiet`
([#&#8203;16491](https://redirect.github.com/astral-sh/uv/pull/16491))
- Limit `uv auth login pyx.dev` retries to 60s
([#&#8203;16498](https://redirect.github.com/astral-sh/uv/pull/16498))
- Add an empty group with `uv add --group ... -r ...`
([#&#8203;16490](https://redirect.github.com/astral-sh/uv/pull/16490))

##### Documentation

- Update docs for maturin build backend init template
([#&#8203;16469](https://redirect.github.com/astral-sh/uv/pull/16469))
- Update docs to reflect previous changes to signal forwarding semantics
([#&#8203;16430](https://redirect.github.com/astral-sh/uv/pull/16430))
- Add instructions for installing via MacPorts
([#&#8203;16039](https://redirect.github.com/astral-sh/uv/pull/16039))

</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:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNTkuNCIsInVwZGF0ZWRJblZlciI6IjQyLjE2LjEiLCJ0YXJnZXRCcmFuY2giOiJtYXN0ZXIiLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-20 06:46:07 +11: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, 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++, 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, 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 Kotlin
L Lean4, Lighttpd configuration file, LLVM, lox, Lua
M Makefile, Mako, markdown, Mason, Materialize SQL dialect, Mathematica, Matlab, MCFunction, Meson, Metal, MiniZinc, MLIR, 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, PRQL, PSL, Puppet, Python, Python 2
Q QBasic, QML
R R, Racket, Ragel, Raku, react, ReasonML, reg, Rego, reStructuredText, Rexx, RPGLE, RPMSpec, Ruby, Rust
S SAS, Sass, Scala, Scheme, Scilab, SCSS, Sed, Sieve, Smali, Smalltalk, Smarty, SNBT, Snobol, Solidity, SourcePawn, 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, 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.

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 20 MiB
Languages
Go 95.1%
JavaScript 2.9%
Python 1.4%
Dockerfile 0.2%
Shell 0.2%
Other 0.2%