Commit Graph

6080 Commits

Author SHA1 Message Date
konsti 231fda3f3f Remove some more text env special casing (#17531)
Part of https://github.com/astral-sh/uv/pull/14080
2026-01-20 10:31:10 +00:00
renovate[bot] 1ab8f613b9 Update Rust crate whoami to v2 (#17605)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [whoami](https://redirect.github.com/ardaku/whoami/releases)
([source](https://redirect.github.com/ardaku/whoami)) |
workspace.dependencies | major | `1.6.0` → `2.0.0` |

---

### Release Notes

<details>
<summary>ardaku/whoami (whoami)</summary>

###
[`v2.0.2`](https://redirect.github.com/ardaku/whoami/releases/tag/v2.0.2)

[Compare
Source](https://redirect.github.com/ardaku/whoami/compare/v2.0.1...v2.0.2)

### Changelog

#### Fixed

- Crate not compiling when `std` feature isn't set
([#&#8203;215](https://redirect.github.com/ardaku/whoami/issues/215))

***

#### What's Changed

- Test no-std in C/I by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;216](https://redirect.github.com/ardaku/whoami/pull/216)
- Prepare v2.0.2 by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;217](https://redirect.github.com/ardaku/whoami/pull/217)

**Full Changelog**:
<https://github.com/ardaku/whoami/compare/v2.0.1...v2.0.2>

###
[`v2.0.1`](https://redirect.github.com/ardaku/whoami/releases/tag/v2.0.1)

[Compare
Source](https://redirect.github.com/ardaku/whoami/compare/v2.0.0...v2.0.1)

### Changelog

#### Fixed

- MSRV testing in CI actually works again
- MSRV mishap - WhoAmI 2.0.0 was requiring an MSRV of 1.81 accidentally,
due to using `core::error::Error`, changed so that when the `std`
feature is enabled the MSRV is as-advertised - 1.65. Updated MSRV
documentation to reflect that when the `std` feature is disabled it
bumps the MSRV to 1.81
- Fixed Daku reporting 64-bit when 32-bit in `cpu_arch()` implementation
- Fixed environment variable typo `LC_MONTEARY` -> `LC_MONETARY`
- Fixed `whoami::Error` having infinite recursion in the `Display`
implementation
- Fixed Broken links in the README.md
- Updated wasite minimum version to v1.0.2 to fix MSRV issues on WASI

***

#### What's Changed

- Fix architecture detection bug in Daku OS by
[@&#8203;paolobarbolini](https://redirect.github.com/paolobarbolini) in
[#&#8203;206](https://redirect.github.com/ardaku/whoami/pull/206)
- Fix typo in `LC_MONETARY` env var name by
[@&#8203;paolobarbolini](https://redirect.github.com/paolobarbolini) in
[#&#8203;205](https://redirect.github.com/ardaku/whoami/pull/205)
- Fix recursive Display implementation in Error type by
[@&#8203;paolobarbolini](https://redirect.github.com/paolobarbolini) in
[#&#8203;209](https://redirect.github.com/ardaku/whoami/pull/209)
- Update MSRV docs in README and fix broken links by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;210](https://redirect.github.com/ardaku/whoami/pull/210)
- Downgrade wasi in `Cargo.lock`, fix doc error by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;211](https://redirect.github.com/ardaku/whoami/pull/211)
- Restore MSRV support and CI checks by
[@&#8203;paolobarbolini](https://redirect.github.com/paolobarbolini) in
[#&#8203;204](https://redirect.github.com/ardaku/whoami/pull/204)
- Prepare v2.0.1 by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;212](https://redirect.github.com/ardaku/whoami/pull/212)

#### New Contributors

- [@&#8203;paolobarbolini](https://redirect.github.com/paolobarbolini)
made their first contribution in
[#&#8203;206](https://redirect.github.com/ardaku/whoami/pull/206)

**Full Changelog**:
<https://github.com/ardaku/whoami/compare/v2.0.0...v2.0.1>

###
[`v2.0.0`](https://redirect.github.com/ardaku/whoami/releases/tag/v2.0.0):
(yanked)

### Changelog

#### Added

- Added `LanguagePreferences`
- Added `Error`, which implements `Into<std::io::Error>`
- no-std support
- Better docs around hostnames and platform-specific limitations
- `#[must_use]` to applicable functions
- Support checking for `Xfce` desktop environment

#### Changed

- MSRV updated to 1.65, upgraded to 2021 edition
- Rename `Platform::MacOS` to `Platform::Mac`
- Rename `Platform::Nintendo` to `Platform::Nintendo3ds`
- When checking pointer width, if can't be determined return
`ErrorKind::Unsupported` instead of `ErrorKind::Other`
- `*::Unknown(_)` variants are now defined at the top of enums
- Updated libredox to v0.1.12
- `desktop_env()` now returns an `Option` - returning `None` when no
desktop environment is applicable (such as over SSH)
- Feature set changed to:
  - `force-stub`: Only compile to stub backend
  - `std`: Depend on the standard library (default feature)
- `wasi-wasite`: Assume Wasite environment variables are defined when
compiling to wasi targets (default feature)
- `wasm-web`: Assume wasm with unknown OS is being compiled for a web
page (default feature)
- Rename `arch()` / `Arch` to `cpu_arch()` / `CpuArchitecture`
- Rename `DesktopEnv` to `DesktopEnvironment`
- `Language` is now a struct instead of an enum
- Language fallbacks without the country are appended at the end of
language iteration
- `DesktopEnv::WebBrowser` variant now includes browser name and version
- `devicename()` on web target now always returns "Browser"
- `hostname()` on web target now returns the webpage URL instead of
"localhost"
- `DesktopEnvironment::is_gtk()` and `DesktopEnvironment::is_kde()` are
now `const` and marked with `#[must_use]`
- Update wasite target dependency to 1.0.0
- `distro()` now reports Windows 11 as Windows 11 instead of 10

#### Removed

- Removed `Platform::Xbox`
- Remove all infallible function variants, and remove the `fallible`
module, moving those functions to the root module
- Remove deprecated `lang()`
- Remove `langs()` in favor of `lang_prefs()`
- `Language::country()`, `Country`
- Unnecessary `#[non_exhaustive]` attributes

***

#### What's Changed

- WhoAmI 2.0: 2021 edition by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;100](https://redirect.github.com/ardaku/whoami/pull/100)
- Make major 2.0 breaking changes by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;101](https://redirect.github.com/ardaku/whoami/pull/101)
- Deny doc warnings by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;105](https://redirect.github.com/ardaku/whoami/pull/105)
- Test docs in CI by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;107](https://redirect.github.com/ardaku/whoami/pull/107)
- V2: Update redox\_syscall to v0.5.1 by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;112](https://redirect.github.com/ardaku/whoami/pull/112)
- Keep V2 up to date with V1 patches by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;123](https://redirect.github.com/ardaku/whoami/pull/123)
- V2: Make `desktop_env()` return an `Option` by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;125](https://redirect.github.com/ardaku/whoami/pull/125)
- Use std::ffi everywhere instead of std::os::raw
([#&#8203;122](https://redirect.github.com/ardaku/whoami/issues/122)) by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;127](https://redirect.github.com/ardaku/whoami/pull/127)
- CI: Make cross compile clippy a separate action by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;128](https://redirect.github.com/ardaku/whoami/pull/128)
- Update copyright by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;129](https://redirect.github.com/ardaku/whoami/pull/129)
- Update readme with new MSRV policy by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;131](https://redirect.github.com/ardaku/whoami/pull/131)
- Fix clippy duplicate attribute for MacOS by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;134](https://redirect.github.com/ardaku/whoami/pull/134)
- Update wasm-bindgen to v0.2.100 by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;137](https://redirect.github.com/ardaku/whoami/pull/137)
- Update platform dependencies by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;139](https://redirect.github.com/ardaku/whoami/pull/139)
- Check more environment variables for language by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;144](https://redirect.github.com/ardaku/whoami/pull/144)
- Switch Windows `hostname()` to return `PhysicalDnsHostname` by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;147](https://redirect.github.com/ardaku/whoami/pull/147)
- Improved error handling by
[@&#8203;robertbacula](https://redirect.github.com/robertbacula) in
[#&#8203;136](https://redirect.github.com/ardaku/whoami/pull/136)
- Adjusts `langs()` to match POSIX locale spec by
[@&#8203;cjohnson19](https://redirect.github.com/cjohnson19) in
[#&#8203;150](https://redirect.github.com/ardaku/whoami/pull/150)
- Bump version to "2.0.0-pre.1" by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;152](https://redirect.github.com/ardaku/whoami/pull/152)
- Fix license link by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;153](https://redirect.github.com/ardaku/whoami/pull/153)
- upsteam v1 -> v2: Add discriminants to `ExtendedNameFormat` enum by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;157](https://redirect.github.com/ardaku/whoami/pull/157)
- Add ability to get language prefs for categories by
[@&#8203;cjohnson19](https://redirect.github.com/cjohnson19) in
[#&#8203;155](https://redirect.github.com/ardaku/whoami/pull/155)
- Bump version to 2.0.0-pre.2 by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;159](https://redirect.github.com/ardaku/whoami/pull/159)
- Try new templates by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;160](https://redirect.github.com/ardaku/whoami/pull/160)
- More template changes by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;161](https://redirect.github.com/ardaku/whoami/pull/161)
- Fix reading escaped unix pretty names by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;164](https://redirect.github.com/ardaku/whoami/pull/164)
- Remove some TODOs now that dedicated issues exist by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;177](https://redirect.github.com/ardaku/whoami/pull/177)
- Fix `LanguagePrefs` impl of `Display` by
[@&#8203;cjohnson19](https://redirect.github.com/cjohnson19) in
[#&#8203;179](https://redirect.github.com/ardaku/whoami/pull/179)
- Update crate description by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;181](https://redirect.github.com/ardaku/whoami/pull/181)
- CI: Turn off auto install for rustup by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;182](https://redirect.github.com/ardaku/whoami/pull/182)
- Migrate to workspace and define xtask by
[@&#8203;cjohnson19](https://redirect.github.com/cjohnson19) in
[#&#8203;180](https://redirect.github.com/ardaku/whoami/pull/180)
- CI: only cross-compile whoami library by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;184](https://redirect.github.com/ardaku/whoami/pull/184)
- Update Release PR template (v1.6.0) by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;183](https://redirect.github.com/ardaku/whoami/pull/183)
- v1 -> v2: Windows linkage fix by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;186](https://redirect.github.com/ardaku/whoami/pull/186)
- Replace redox\_syscall with libredox by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;189](https://redirect.github.com/ardaku/whoami/pull/189)
- Bump libredox from 0.1.9 to 0.1.10 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;191](https://redirect.github.com/ardaku/whoami/pull/191)
- Change web behavior for whoami 2.0 by
[@&#8203;DynoW](https://redirect.github.com/DynoW) in
[#&#8203;192](https://redirect.github.com/ardaku/whoami/pull/192)
- docs: document platform-specific hostname character limits by
[@&#8203;naoNao89](https://redirect.github.com/naoNao89) in
[#&#8203;194](https://redirect.github.com/ardaku/whoami/pull/194)
- Bump libredox from 0.1.10 to 0.1.11 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;196](https://redirect.github.com/ardaku/whoami/pull/196)
- Finalize Language API for whoami 2.0 by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;198](https://redirect.github.com/ardaku/whoami/pull/198)
- Bump libredox from 0.1.11 to 0.1.12 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;199](https://redirect.github.com/ardaku/whoami/pull/199)
- Final changes preparing for whoami 2.0 by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;200](https://redirect.github.com/ardaku/whoami/pull/200)
- Add some `must_use`s, organize attributes, remove redundant
`non_exhaustive`, fix small copypaste bug (Wasm64) by
[@&#8203;BioTomateDE](https://redirect.github.com/BioTomateDE) in
[#&#8203;201](https://redirect.github.com/ardaku/whoami/pull/201)
- Release v2.0.0 by
[@&#8203;AldaronLau](https://redirect.github.com/AldaronLau) in
[#&#8203;163](https://redirect.github.com/ardaku/whoami/pull/163)

#### New Contributors

- [@&#8203;robertbacula](https://redirect.github.com/robertbacula) made
their first contribution in
[#&#8203;136](https://redirect.github.com/ardaku/whoami/pull/136)
- [@&#8203;cjohnson19](https://redirect.github.com/cjohnson19) made
their first contribution in
[#&#8203;150](https://redirect.github.com/ardaku/whoami/pull/150)
- [@&#8203;DynoW](https://redirect.github.com/DynoW) made their first
contribution in
[#&#8203;192](https://redirect.github.com/ardaku/whoami/pull/192)
- [@&#8203;naoNao89](https://redirect.github.com/naoNao89) made their
first contribution in
[#&#8203;194](https://redirect.github.com/ardaku/whoami/pull/194)
- [@&#8203;BioTomateDE](https://redirect.github.com/BioTomateDE) made
their first contribution in
[#&#8203;201](https://redirect.github.com/ardaku/whoami/pull/201)

**Full Changelog**:
<https://github.com/ardaku/whoami/compare/v1.6.0...v2.0.0>

</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.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- 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/astral-sh/uv).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi43NC41IiwidXBkYXRlZEluVmVyIjoiNDIuODUuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiYnVpbGQ6c2tpcC1yZWxlYXNlIiwiaW50ZXJuYWwiXX0=-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: konstin <konstin@mailbox.org>
2026-01-20 09:59:08 +00:00
konsti b158b75d5a Add linux distro env vars to passthrough (#17515)
See #17509
2026-01-20 09:54:10 +00:00
renovate[bot] 4ca6fdc07b Update Rust crate fs-err to v3.2.2 (#17590)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [fs-err](https://redirect.github.com/andrewhickman/fs-err) |
workspace.dependencies | minor | `3.1.3` → `3.2.2` |

---

### Release Notes

<details>
<summary>andrewhickman/fs-err (fs-err)</summary>

###
[`v3.2.2`](https://redirect.github.com/andrewhickman/fs-err/blob/HEAD/CHANGELOG.md#322)

- Add wrappers for `File::set_modified` and `File::set_times`
([#&#8203;84](https://redirect.github.com/andrewhickman/fs-err/pull/84))

###
[`v3.2.1`](https://redirect.github.com/andrewhickman/fs-err/blob/HEAD/CHANGELOG.md#321)

- Rename parameters of `symlink`, `soft_link` and `hard_link` functions
to match `std`
([#&#8203;83](https://redirect.github.com/andrewhickman/fs-err/pull/83))

###
[`v3.2.0`](https://redirect.github.com/andrewhickman/fs-err/blob/HEAD/CHANGELOG.md#320)

[Compare
Source](https://redirect.github.com/andrewhickman/fs-err/compare/3.1.3...3.2.0)

- Introduce `debug` and `debug_tokio` feature. Debug filesystem errors
faster by exposing more information
([#&#8203;81](https://redirect.github.com/andrewhickman/fs-err/pull/81)).
Without this feature on, errors might look like this:

  ```
failed to open file `file.txt`: The system cannot find the file
specified. (os error 2)
  ```

With this feature on, it will include additional information. For
example:

  ```
failed to open file `file.txt`: The system cannot find the file
specified. (os error 2)

  Path does not exist `file.txt`
  - Absolute path `/path/to/dir/file.txt`
  - Missing `file.txt` from parent directory:
    `/path/to/dir`
      └── `file.md`
      └── `different.txt`
  ```

It's suggested to enable this feature in `dev-dependencies` for security
and performance reasons.

</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.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- 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/astral-sh/uv).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi43NC41IiwidXBkYXRlZEluVmVyIjoiNDIuNzQuNSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiaW50ZXJuYWwiXX0=-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Zanie Blue <contact@zanie.dev>
2026-01-19 17:11:35 -06:00
Zanie Blue ed3cd39789 Consolidate the disjoint target hints (#17540)
These should be generated alongside all the other resolver hints, I
think.

The order changes here, but that seems fine.

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-01-19 17:08:51 -06:00
Zanie Blue 0fae9d5610 Further improve free-threading ABI incompatibility errors (#17491)
Expanding tag coverage from #17442
2026-01-19 17:08:40 -06:00
Zanie Blue 2faa1714d2 Update add_empty_ignore_error_codes to use a mock server (#17618)
The pytorch index has changed its behavior.
2026-01-19 19:34:34 +00:00
renovate[bot] a002a9af10 Update Rust crate resvg to 0.46.0 (#17595)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [resvg](https://redirect.github.com/linebender/resvg) | dependencies |
minor | `0.29.0` → `0.46.0` |

---

### Release Notes

<details>
<summary>linebender/resvg (resvg)</summary>

###
[`v0.46.0`](https://redirect.github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0460)

[Compare
Source](https://redirect.github.com/linebender/resvg/compare/v0.45.1...v0.46.0)

This release has an MSRV of 1.87.0 for `usvg` and `resvg` and the C API.

##### Added

- Support SVGs without the xmlns attribute on the root. Thanks to
\[[@&#8203;JosefKuchar](https://redirect.github.com/JosefKuchar)]\[].
- Add a from\_data\_nested method to usvg::Tree
([#&#8203;955](https://redirect.github.com/linebender/resvg/issues/955)
by [@&#8203;tovrstra](https://redirect.github.com/tovrstra))
- Use cache for glyph outlining
([#&#8203;957](https://redirect.github.com/linebender/resvg/issues/957)
by [@&#8203;newinnovations](https://redirect.github.com/newinnovations))
- Support loading nested embedded images
([#&#8203;958](https://redirect.github.com/linebender/resvg/issues/958)
by [@&#8203;LaurenzV](https://redirect.github.com/LaurenzV))

##### Changed

- Bump dependencies, bump MSRV to 1.87, Upgrade to edition 2024
([#&#8203;1002](https://redirect.github.com/linebender/resvg/issues/1002)
and
[#&#8203;1003](https://redirect.github.com/linebender/resvg/issues/1003)
[@&#8203;LaurenzV](https://redirect.github.com/LaurenzV))
- Upgraded kurbo to 0.13 and svgtypes to 0.16.1. Thanks to
\[[@&#8203;HaHa421](https://redirect.github.com/HaHa421)]\[].
- Bump zune\_jpeg
([#&#8203;964](https://redirect.github.com/linebender/resvg/issues/964)
by [@&#8203;LaurenzV](https://redirect.github.com/LaurenzV))
- Fix abs\_bounding\_box calculation for image
([#&#8203;924](https://redirect.github.com/linebender/resvg/issues/924)
by [@&#8203;Dabble63](https://redirect.github.com/Dabble63))
- Fix crash caused by glyph splitting
([#&#8203;929](https://redirect.github.com/linebender/resvg/issues/929)
by
[@&#8203;arnaud-secondlayer](https://redirect.github.com/arnaud-secondlayer))
- Fix a bug with incorrect resolving of fill/stroke color
([#&#8203;953](https://redirect.github.com/linebender/resvg/issues/953)
by [@&#8203;LaurenzV](https://redirect.github.com/LaurenzV))
- Fix inverted condition in has\_text\_nodes method
([#&#8203;967](https://redirect.github.com/linebender/resvg/issues/967)
by [@&#8203;Daaiid](https://redirect.github.com/Daaiid))
- Do not write empty defs nodes
([#&#8203;980](https://redirect.github.com/linebender/resvg/issues/980)
by [@&#8203;Its-Just-Nans](https://redirect.github.com/Its-Just-Nans))
- Check if text paths need to be written out
([#&#8203;981](https://redirect.github.com/linebender/resvg/issues/981)
by [@&#8203;Its-Just-Nans](https://redirect.github.com/Its-Just-Nans))
- Use checked arithmetic when computing bounding box
([#&#8203;987](https://redirect.github.com/linebender/resvg/issues/987)
by [@&#8203;Its-Just-Nans](https://redirect.github.com/Its-Just-Nans))
- Fix bug in rewriting of clip paths with transformed path
([#&#8203;988](https://redirect.github.com/linebender/resvg/issues/988)
by [@&#8203;Its-Just-Nans](https://redirect.github.com/Its-Just-Nans))

##### Removed

- Remove unused phf dependency
([#&#8203;920](https://redirect.github.com/linebender/resvg/issues/920))

###
[`v0.45.1`](https://redirect.github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0451---2025-04-16)

[Compare
Source](https://redirect.github.com/linebender/resvg/compare/0.45.0...v0.45.1)

##### Changed

- Support SVGs without the xmlns attribute on the root
([#&#8203;892](https://redirect.github.com/linebender/resvg/issues/892))
- Add optimization for paths with markers in paint-order but no actual
markers
([#&#8203;887](https://redirect.github.com/linebender/resvg/issues/887))

##### Removed

- tools/kde-dolphin-thumbnailer. This was never a released tool, and it
doesn't support current versions of KDE/dolphin
(\[[#&#8203;897](https://redirect.github.com/linebender/resvg/issues/897)]\[]
by \[[@&#8203;DJMcNab](https://redirect.github.com/DJMcNab)]\[])

###
[`v0.45.0`](https://redirect.github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0450---2025-02-26)

[Compare
Source](https://redirect.github.com/linebender/resvg/compare/v0.44.0...0.45.0)

This is the first release under the stewardship of \[Linebender]\[], who
is now responsible for maintenance of this crate.
Many thanks to Yevhenii Reizner for the years of hard work that he has
poured into this and other crates.

Please note that the license of this project changed from `MPL-2.0` to
`Apache-2.0 OR MIT`.
See [resvg#838](https://redirect.github.com/linebender/resvg/issues/838)
for more information.

This release has an MSRV of 1.65 for `usvg` and 1.67.1 for `resvg` and
the C API.

##### Added

- Support for the `background-color` attribute.
- Support for additional `image-rendering` attributes.
- Support for the `!important` CSS flag.
- Support for Luma JPEG images.
- (c-api) `resvg_options_set_stylesheet`.
Thanks to
\[[@&#8203;michabay05](https://redirect.github.com/michabay05)]\[].
- (svgtypes) Support for floating point hue in `hsl()` and `hsla()`.

##### Changed

- License to `Apache-2.0 OR MIT`.
See [resvg#838](https://redirect.github.com/linebender/resvg/issues/838)
for more information.
- Updated WebP decoder for bug fixes and improved performance.
Thanks to
\[[@&#8203;Shnatsel](https://redirect.github.com/Shnatsel)]\[].
- MSRV of resvg and c-api bumped to 1.67.1.
- `fontdb` and `rustybuzz` have been updated.
- Updated other dependencies.
- (svgtypes) Simplified color component rounding and bounds checking.
- Improved handling of paths with paint order `markers` but no actual
markers.

##### Fixed

- Relative unit handling when `use` references `symbol`.
- (svgtypes) Rounding of hues in HSL to RGB conversion.
- (svgtypes) Rounding of alpha.

###
[`v0.44.0`](https://redirect.github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0440---2024-09-28)

[Compare
Source](https://redirect.github.com/linebender/resvg/compare/v0.43.0...v0.44.0)

##### Added

- Stylesheet injection support.
  Thanks to [@&#8203;LaurenzV](https://redirect.github.com/LaurenzV).
- (c-api) `resvg_get_object_bbox`
- (c-api) `cargo-c` metadata.
  Thanks to [@&#8203;lu-zero](https://redirect.github.com/lu-zero).
- Implement `From` for `fontdb` and `usvg` font types.
  Thanks to [@&#8203;dhardy](https://redirect.github.com/dhardy).

##### Changed

- (c-api) `resvg_get_image_bbox` returns a *layer* and not *object*
bounding box now.
  Use `resvg_get_object_bbox` to preserve the old behavior.

##### Fixed

- (svgtypes) Path parsing with `S` or `T` segments after `A`.
- Bounding box calculation for the root group used for `viewBox`
flattening.

###
[`v0.43.0`](https://redirect.github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0430---2024-08-10)

[Compare
Source](https://redirect.github.com/linebender/resvg/compare/v0.42.0...v0.43.0)

##### Added

- Support WebP images.
  Thanks to [@&#8203;notjosh](https://redirect.github.com/notjosh).

##### Changed

- Use `zune-jpeg` instead of `jpeg-decoder`.
Thanks to [@&#8203;mattfbacon](https://redirect.github.com/mattfbacon).
- Update dependencies.

##### Fixed

- Canvas size limits calculation.
- SVG fonts handling.
  Thanks to [@&#8203;LaurenzV](https://redirect.github.com/LaurenzV).
- Transforms in COLR fonts.
  Thanks to [@&#8203;LaurenzV](https://redirect.github.com/LaurenzV).

###
[`v0.42.0`](https://redirect.github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0420---2024-06-01)

[Compare
Source](https://redirect.github.com/linebender/resvg/compare/v0.41.0...v0.42.0)

##### Added

- `resvg` can render color fonts now, aka Emojis.<br>
In TrueType terms, `COLRv0`, `COLRv1` (mostly), `sbix`, `CBDT` and `SVG`
tables are supported.<br>
  Thanks to [@&#8203;LaurenzV](https://redirect.github.com/LaurenzV).
- Fonts matching and fallback can be controlled by the caller via
`usvg::FontResolver` now.
  Thanks to [@&#8203;LaurenzV](https://redirect.github.com/LaurenzV).
- `usvg::Options::font_resolver`. Similar to
`usvg::Options::image_href_resolver` we already had.
- `usvg::Options::fontdb`
- Support double-quoted FuncIRIs, aka `url("#id")`.
- `image` element viewbox flattening.<br>
Instead of having `usvg::Image::view_box` that the caller should handle
themselves,
  we instead replace it with `transform` and optional `clip-path`.
  This greatly simplifies `image` rendering.
- `usvg::Image::size`
- Tree viewbox flattening.<br>
  Similar to `image` above, but affects the root `svg` element instead.
- `pattern` viewbox flattening.<br>
  Similar to `image` above, but for patterns.
- Improve vertical text rendering.
  Thanks to [@&#8203;LaurenzV](https://redirect.github.com/LaurenzV).

##### Changed

- `usvg::fontdb::Database` should be set in `usvg::Options` and not
passed
  to the parser separately now.
- `usvg::Options` and `usvg::ImageHrefResolver` have a lifetime now.
- Replace `usvg::Visibility` enum with just `bool`.
- `usvg::Path::visibility()` is replaced with `usvg::Path::is_visible()`
- `usvg::Image::visibility()` is replaced with
`usvg::Image::is_visible()`
- `usvg::TextSpan::visibility()` is replaced with
`usvg::TextSpan::is_visible()`
- Always represent `feImage` content as a link to an element.<br>
In SVG, `feImage` can contain a link to an element or a base64 image
data, just like `image`.
From now, the inlined base64 data will always be represented by a link
to an actual `image` element.
  ```xml
  <filter>
    <feImage xlink:href="data:image/png;base64,..."/>
  </filter>
  ```
  will be parsed as
  ```xml
  <image id="image1" xlink:href="data:image/png;base64,..."/>
  <filter>
    <feImage xlink:href="#image1"/>
  </filter>
  ```
This simplifies `feImage` rendering, since we don't have to handle both
cases now.
- The `--list-fonts` resvg argument can be used without providing an SVG
file now.
  Can simply call `resvg --list-fonts` now.
- The `--list-fonts` resvg argument includes generic font family names
as well now.
- Make sure all warning and errors are printed to stderr.
  Thanks to [@&#8203;ahaoboy](https://redirect.github.com/ahaoboy).

##### Removed

- `usvg::ViewBox`, `usvg::AspectRatio`, `usvg::Align` types. Nol longer
used.
- `usvg::filter::Image::aspect`. No longer needed.
- `usvg::filter::Image::rendering_mode`. No longer needed.
- `usvg::filter::Image::data`. Use `usvg::filter::Image::root` instead.
- `usvg::Tree::view_box`. No longer needed.
- `usvg::Image::view_box`. No longer needed.
- `usvg::Image::pattern`. No longer needed.
- `usvg::utils::align_pos`. No longer needed.
- `usvg::Visibility`. No longer needed.
- (c-api) `resvg_get_image_viewbox`. Use `resvg_get_image_size` instead.

##### Fixed

- `context-fill` handling.
  Thanks to [@&#8203;LaurenzV](https://redirect.github.com/LaurenzV).

###
[`v0.41.0`](https://redirect.github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0410---2024-04-03)

[Compare
Source](https://redirect.github.com/linebender/resvg/compare/v0.40.0...v0.41.0)

##### Added

- `context-fill` and `context-stroke` support.
  Thanks to [@&#8203;LaurenzV](https://redirect.github.com/LaurenzV).
- `usvg::Text::layouted()`, which returns a list of glyph IDs.
It can be used to manually draw glyphs, unlike with
`usvg::Text::flattened()`, which returns
  just vector paths.
  Thanks to [@&#8203;LaurenzV](https://redirect.github.com/LaurenzV).

##### Fixed

- Missing text when a `text` element uses multiple fonts and one of them
produces ligatures.
- Absolute transform propagation during `use` resolving.
- Absolute transform propagation during nested `svg` resolving.
- `Node::abs_transform` documentation. The current element's transform
*is* included.

###
[`v0.40.0`](https://redirect.github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0400---2024-02-17)

[Compare
Source](https://redirect.github.com/linebender/resvg/compare/v0.39.0...v0.40.0)

##### Added

- `usvg::Tree` is `Send + Sync` compatible now.
- `usvg::WriteOptions::preserve_text` to control how `usvg` generates an
SVG.
- `usvg::Image::abs_bounding_box`

##### Changed

- All types in `usvg` are immutable now. Meaning that `usvg::Tree`
cannot be modified
  after creation anymore.
- All struct fields in `usvg` are private now. Use getters instead.
- All `usvg::Tree` parsing methods require the `fontdb` argument now.
- All `defs` children like gradients, patterns, clipPaths, masks and
filters are guarantee
  to have a unique, non-empty ID.
- All `defs` children like gradients, patterns, clipPaths, masks and
filters are guarantee
to have `userSpaceOnUse` units now. No `objectBoundingBox` units
anymore.
- `usvg::Mask` is allowed to have no children now.
- Text nodes will not be parsed when the `text` build feature isn't
enabled.
- `usvg::Tree::clip_paths`, `usvg::Tree::masks`, `usvg::Tree::filters`
returns
  a pre-collected slice of unique nodes now.
It's no longer a closure and you do not have to deduplicate nodes by
yourself.
- `usvg::filter::Primitive::x`, `y`, `width` and `height` methods were
replaced
  with `usvg::filter::Primitive::rect`.
- Split `usvg::Tree::paint_servers` into `usvg::Tree::linear_gradients`,
  `usvg::Tree::radial_gradients`, `usvg::Tree::patterns`.
  All three returns pre-collected slices now.
- A `usvg::Path` no longer can have an invalid bbox. Paths with an
invalid bbox will be
  rejected during parsing.
- All `usvg` methods that return bounding boxes return non-optional
`Rect` now.
  No `NonZeroRect` as well.
- `usvg::Text::flattened` returns `&Group` and not `Option<&Group>` now.
- `usvg::ImageHrefDataResolverFn` and `usvg::ImageHrefStringResolverFn`
  require `fontdb::Database` argument.
- All shared nodes are stored in `Arc` and not `Rc<RefCell>` now.
- `resvg::render_node` now includes filters bounding box. Meaning that a
node with a blur filter
  no longer be clipped.
- Replace `usvg::utils::view_box_to_transform` with
`usvg::ViewBox::to_transform`.
- Rename `usvg::XmlOptions` into `usvg::WriteOptions` and embed
`xmlwriter::Options`.

##### Removed

- `usvg::Tree::postprocess()` and `usvg::PostProcessingSteps`. No longer
needed.
- `usvg::ClipPath::units()`, `usvg::Mask::units()`,
`usvg::Mask::content_units()`,
`usvg::Filter::units()`, `usvg::Filter::content_units()`,
`usvg::LinearGradient::units()`,
`usvg::RadialGradient::units()`, `usvg::Pattern::units()`,
`usvg::Pattern::content_units()`
  and `usvg::Paint::units()`. They are always `userSpaceOnUse` now.
- `usvg::Units`. No longer needed.

##### Fixed

- Text bounding box is accounted during SVG size resolving.
  Previously, only paths and images were included.
- Font selection when an italic font isn't explicitly marked as one.
- Preserve `image` aspect ratio when only `width` or `height` are
present.
  Thanks to [@&#8203;LaurenzV](https://redirect.github.com/LaurenzV).

###
[`v0.39.0`](https://redirect.github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0390---2024-02-06)

[Compare
Source](https://redirect.github.com/linebender/resvg/compare/v0.38.0...v0.39.0)

##### Added

- `font` shorthand parsing.
  Thanks to [@&#8203;LaurenzV](https://redirect.github.com/LaurenzV).
- `usvg::Group::abs_bounding_box`
- `usvg::Group::abs_stroke_bounding_box`
- `usvg::Path::abs_bounding_box`
- `usvg::Path::abs_stroke_bounding_box`
- `usvg::Text::abs_bounding_box`
- `usvg::Text::abs_stroke_bounding_box`

##### Changed

- All `usvg-*` crates merged into one. There is just the `usvg` crate
now, as before.

##### Removed

- `usvg::Group::abs_bounding_box()` method. It's a field now.
- `usvg::Group::abs_filters_bounding_box()`
- `usvg::TreeParsing`, `usvg::TreePostProc` and `usvg::TreeWriting`
traits.
  They are no longer needed.

##### Fixed

- `font-family` parsing.
  Thanks to [@&#8203;LaurenzV](https://redirect.github.com/LaurenzV).
- Absolute bounding box calculation for paths.

###
[`v0.38.0`](https://redirect.github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0380---2024-01-21)

[Compare
Source](https://redirect.github.com/linebender/resvg/compare/v0.37.0...v0.38.0)

##### Added

- Each `usvg::Node` stores its absolute transform now.
  `Node::abs_transform()` executes in constant time now.
- `usvg::Tree::calculate_bounding_boxes` to calculate all bounding boxes
beforehand.
- `usvg::Node::bounding_box` which returns a precalculated node's
bounding box in object coordinates.
- `usvg::Node::abs_bounding_box` which returns a precalculated node's
bounding box in canvas coordinates.
- `usvg::Node::stroke_bounding_box` which returns a precalculated node's
bounding box,
  including stroke, in object coordinates.
- `usvg::Node::abs_stroke_bounding_box` which returns a precalculated
node's bounding box,
  including stroke, in canvas coordinates.
- (c-api) `resvg_get_node_stroke_bbox`
- `usvg::Node::filters_bounding_box`
- `usvg::Node::abs_filters_bounding_box`
- `usvg::Tree::postprocess`

##### Changed

- `resvg` renders `usvg::Tree` directly again. `resvg::Tree` is gone.
- `usvg` no longer uses `rctree` for the nodes tree implementation.
  The tree is a regular `enum` now.
  - A caller no longer need to use the awkward `*node.borrow()`.
  - No more panics on incorrect mutable `Rc<RefCell>` access.
- Tree nodes respect tree's mutability rules. Before, one could mutate
tree nodes when the tree
itself is not mutable. Because `Rc<RefCell>` provides a shared mutable
access.
- Filters, clip paths, masks and patterns are stored as `Rc<RefCell<T>>`
instead of `Rc<T>`.
This is required for proper mutability since `Node` itself is no longer
an `Rc`.
- Rename `usvg::NodeKind` into `usvg::Node`.
- Upgrade to Rust 2021 edition.

##### Removed

- `resvg::Tree`. No longer needed. `resvg` can render `usvg::Tree`
directly once again.
- `rctree::Node` methods. The `Node` API is completely different now.
- `usvg::NodeExt`. No longer needed.
- `usvg::Node::calculate_bbox`. Use `usvg::Node::abs_bounding_box`
instead.
- `usvg::Tree::convert_text`. Use `usvg::Tree::postprocess` instead.
- `usvg::TreeTextToPath` trait. No longer needed.

##### Fixed

- Mark `mask-type` as a presentation attribute.
- Do not show needless warnings when parsing some attributes.
- `feImage` rendering with a non-default position.
  Thanks to [@&#8203;LaurenzV](https://redirect.github.com/LaurenzV).

###
[`v0.37.0`](https://redirect.github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0370---2023-12-16)

[Compare
Source](https://redirect.github.com/linebender/resvg/compare/v0.36.0...v0.37.0)

##### Added

- `usvg` can write text back to SVG now.
  Thanks to [@&#8203;LaurenzV](https://redirect.github.com/LaurenzV).
- `--preserve-text` flag to the `usvg` CLI tool.
  Thanks to [@&#8203;LaurenzV](https://redirect.github.com/LaurenzV).
- Support
[`transform-origin`](https://drafts.csswg.org/css-transforms/#transform-origin-property)
  property.
  Thanks to [@&#8203;LaurenzV](https://redirect.github.com/LaurenzV).
- Support non-default markers order via
[`paint-order`](https://svgwg.org/svg2-draft/painting.html#PaintOrder).
  Previously, only fill and stroke could have been swapped.
  Thanks to [@&#8203;LaurenzV](https://redirect.github.com/LaurenzV).
- `usvg_tree::Text::flattened` that will contain a flattened/outlined
text.
- `usvg_tree::Text::bounding_box`. Will be set only after text
flattening.
- Optimize `usvg_tree::NodeExt::abs_transform` by storing absolute
transforms in the tree
  instead of calculating them each time.

##### Changed

- `usvg_tree::Text::positions` was replaced with `usvg_tree::Text::dx`
and `usvg_tree::Text::dy`.<br>
`usvg_tree::CharacterPosition::x` and `usvg_tree::CharacterPosition::y`
are gone.
  They were redundant and you should use `usvg_tree::TextChunk::x`
  and `usvg_tree::TextChunk::y` instead.
- `usvg_tree::LinearGradient::id` and `usvg_tree::RadialGradient::id`
are moved to
  `usvg_tree::BaseGradient::id`.
- Do not generate element IDs during parsing. Previously, some elements
like `clipPath`s
and `filter`s could have generated IDs, but it wasn't very reliable and
mostly unnecessary.
Renderer doesn't rely on them and usvg writer would generate them
anyway.
- Text-to-paths conversion via `usvg_text_layout::Tree::convert_text` no
longer replaces
original text elements with paths, but instead puts them into
`usvg_tree::Text::flattened`.

##### Removed

- The `transform` field from `usvg_tree::Path`, `usvg_tree::Image` and
`usvg_tree::Text`.
  Only `usvg_tree::Group` can have it.<br>
It doesn't break anything, because those properties were never used
before anyway.<br>
  Thanks to [@&#8203;LaurenzV](https://redirect.github.com/LaurenzV).
- `usvg_tree::CharacterPosition`
- `usvg_tree::Path::text_bbox`. Use `usvg_tree::Text::bounding_box`
instead.
- `usvg_text_layout::TextToPath` trait for `Text` nodes.
  Only the whole tree can be converted at once.

##### Fixed

- Path object bounding box calculation. We were using point bounds
instead of tight contour bounds.
  Was broken since v0.34
- Convert text-to-paths in embedded SVGs as well. The one inside the
`Image` node.
  Thanks to [@&#8203;LaurenzV](https://redirect.github.com/LaurenzV).
- Indirect `text-decoration` resolving in some cases.
  Thanks to [@&#8203;LaurenzV](https://redirect.github.com/LaurenzV).
- (usvg) Clip paths writing to SVG.
  Thanks to [@&#8203;LaurenzV](https://redirect.github.com/LaurenzV).

###
[`v0.36.0`](https://redirect.github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0360---2023-10-01)

[Compare
Source](https://redirect.github.com/linebender/resvg/compare/v0.35.0...v0.36.0)

##### Added

- `stroke-linejoin=miter-clip` support. SVG2.
Thanks to [@&#8203;torokati44](https://redirect.github.com/torokati44).
- Quoted FuncIRI support. Like `fill="url('#gradient')"`. SVG2.
  Thanks to [@&#8203;romanzes](https://redirect.github.com/romanzes).
- Allow float values in `rgb()` and `rgba()` colors. SVG2.
  Thanks to [@&#8203;yisibl](https://redirect.github.com/yisibl).
- `auto-start-reverse` variant support to `orient` in markers. SVG2.
Thanks to [@&#8203;EpicEricEE](https://redirect.github.com/EpicEricEE).

##### Changed

- Update dependencies.

##### Fixed

- Increase precision of the zero-scale transform check.
  Was rejecting some valid transforms before.
- Panic when rendering a very specific text.
- Greatly improve parsing performance when an SVG has a lot of
references.
  Thanks to [@&#8203;wez](https://redirect.github.com/wez).
- (Qt API) Fix scaling factor calculation.
  Thanks to [@&#8203;missdeer](https://redirect.github.com/missdeer).

###
[`v0.35.0`](https://redirect.github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0350---2023-06-27)

[Compare
Source](https://redirect.github.com/linebender/resvg/compare/v0.34.1...v0.35.0)

##### Fixed

- Panic when an element is completely outside the viewbox.

##### Removed

- `FillPaint` and `StrokePaint` filter inputs support.
It's a mostly undocumented SVG feature that no one supports and no one
uses.
  And it was adding a significant complexity to the codebase.
- `usvg::filter::Filter::fill_paint` and
`usvg::filter::Filter::stroke_paint`.
- `BackgroundImage`, `BackgroundAlpha`, `FillPaint` and `StrokePaint`
from `usvg::filter::Input`.
- `usvg::Group::filter_fill_paint` and
`usvg::Group::filter_stroke_paint`.

###
[`v0.34.1`](https://redirect.github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0341---2023-05-28)

[Compare
Source](https://redirect.github.com/linebender/resvg/compare/v0.34.0...v0.34.1)

##### Fixed

- Transform components order. Affects only `usvg` SVG output and C API.

###
[`v0.34.0`](https://redirect.github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0340---2023-05-27)

[Compare
Source](https://redirect.github.com/linebender/resvg/compare/v0.33.0...v0.34.0)

##### Changed

- `usvg` uses `tiny-skia` geometry primitives now, including the `Path`
container.<br>
  The main difference compared to the old `usvg` primitives
  is that `tiny-skia` uses `f32` instead of `f64`.
So while in theory we could loose some precision, in practice, `f32` is
used mainly
as a storage type and precise math operations are still done using
`f64`.<br>
`tiny-skia` primitives are move robust, strict and have a nicer API.<br>
More importantly, this change reduces the peak memory usages for SVGs
with large paths
  (in terms of the number of segments).
And removes the need to convert `usvg::PathData` into `tiny-skia::Path`
before rendering.
  Which was just a useless reallocation.
- All numbers are stored as `f32` instead of `f64` now.
- Because we use `tiny-skia::Path` now, we allow *quadratic curves* as
well.
  This includes `usvg` CLI output.
- Because we allow *quadratic curves* now, text might render slightly
differently (better?).
  This is because TrueType fonts contain only *quadratic curves*
  and we were converting them to cubic before.
- `usvg::Path` no longer implements `Default`. Use `usvg::Path::new`
instead.
- Replace `usvg::Rect` with `tiny_skia::NonZeroRect`.
- Replace `usvg::PathBbox` with `tiny_skia::Rect`.
- Unlike the old `usvg::PathBbox`, `tiny_skia::Rect` allows both width
and height to be zero.
  This is not an error.
- `usvg::filter::Turbulence::base_frequency` was split into
`base_frequency_x` and `base_frequency_y`.
- `usvg::NodeExt::calculate_bbox` no longer includes stroke bbox.
- (c-api) Use `float` instead of `double` everywhere.
- The `svgfilters` crate was merged into `resvg`.
- The `rosvgtree` crate was merged into `usvg-parser`.
- `usvg::Group::filter_fill` moved to
`usvg::filter::Filter::fill_paint`.
- `usvg::Group::filter_stroke` moved to
`usvg::filter::Filter::stroke_paint`.

##### Remove

- `usvg::Point`. Use `tiny_skia::Point` instead.
- `usvg::FuzzyEq`. Use `usvg::ApproxEqUlps` instead.
- `usvg::FuzzyZero`. Use `usvg::ApproxZeroUlps` instead.
- (c-api) `resvg_path_bbox`. Use `resvg_rect` instead.
- `svgfilters` crate.
- `rosvgtree` crate.

##### Fixed

- Write `transform` on `clipPath` children in `usvg` SVG output.
- Do not duplicate marker children IDs.
  Previously, each element resolved for a marker would preserve its ID.
  Affects only `usvg` SVG output and doesn't affect rendering.

###
[`v0.33.0`](https://redirect.github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0330---2023-05-17)

[Compare
Source](https://redirect.github.com/linebender/resvg/compare/v0.32.0...v0.33.0)

##### Added

- A new rendering algorithm.<br>
When rendering [isolated
groups](https://razrfalcon.github.io/notes-on-svg-parsing/isolated-groups.html),
aka layers, we have to know the layer bounding box beforehand, which is
ridiculously hard in SVG.<br>
  Previously, resvg would simply use the canvas size for all the layers.
Meaning that to render a 10x10px layer on a 1000x1000px canvas, we would
have to allocate and then blend
  a 1000x1000px layer, which is just a waste of CPU cycles.<br>
The new rendering algorithm is able to calculate layer bounding boxes,
which dramatically improves
  performance when rendering a lot of tiny layers on a large canvas.<br>
Moreover, it makes performance more linear with a canvas size
increase.<br>
The
[paris-30k.svg](https://redirect.github.com/google/forma/blob/681e8bfd348caa61aab47437e7d857764c2ce522/assets/svgs/paris-30k.svg)
sample from [google/forma](https://redirect.github.com/google/forma) is
rendered *115 times* faster on M1 Pro now.
  From \~33760ms down to \~290ms. 5269x3593px canvas.<br>
If we restrict the canvas to 1000x1000px, which would contain only the
actual `paris-30k.svg` content,
  then we're *13 times* faster. From \~3252ms down to \~253ms.
- `resvg::Tree`, aka a render tree, which is an even simpler version of
`usvg::Tree`.
`usvg::Tree` had to be converted into `resvg::Tree` before rendering
now.

##### Changed

- Restructure the root directory. All crates are in the `crates`
directory now.
- Restructure tests. New directory structure and naming scheme.
- Use `resvg::Tree::render` instead of `resvg::render`.
- resvg's `--export-area-drawing` option uses calculated bounds instead
of trimming
excessive alpha now. It's faster, but can lead to a slightly different
output.
- (c-api) Removed `fit_to` argument from `resvg_render`.
- (c-api) Removed `fit_to` argument from `resvg_render_node`.
- `usvg::ScreenSize` moved to `resvg`.
- `usvg::ScreenRect` moved to `resvg`.
- Rename `resvg::ScreenSize` into `resvg::IntSize`.
- Rename `resvg::ScreenRect` into `resvg::IntRect`.

##### Removed

- `filter` build feature from `resvg`. Filters are always enabled now.
- `resvg::FitTo`
- `usvg::utils::view_box_to_transform_with_clip`
- `usvg::Size::to_screen_size`. Use `resvg::IntSize::from_usvg` instead.
- `usvg::Rect::to_screen_size`. Use
`resvg::IntSize::from_usvg(rect.size())` instead.
- `usvg::Rect::to_screen_rect`. Use `resvg::IntRect::from_usvg` instead.
- (c-api) `resvg_fit_to`
- (c-api) `resvg_fit_to_type`

##### Fixed

- Double quotes parsing in `font-family`.

###
[`v0.32.0`](https://redirect.github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0320---2023-04-23)

[Compare
Source](https://redirect.github.com/linebender/resvg/compare/v0.31.1...v0.32.0)

##### Added

- Clipping and masking is up to 20% faster.
- `mask-type` property support. SVG2
- `usvg_tree::MaskType`
- `usvg_tree::Mask::kind`
- (rosvgtree) New SVG 2 mask attributes.

##### Changed

- `BackgroundImage` and `BackgroundAlpha` filter inputs will produce the
same output
  as `SourceGraphic` and `SourceAlpha` respectively.

##### Removed

- `enable-background` support. This feature was never supported by
browsers
and was deprecated in SVG 2. To my knowledge, only Batik has a good
support of it.
Also, it's a performance nightmare, which caused multiple issues in
resvg already.
- `usvg_tree::EnableBackground`
- `usvg_tree::Group::enable_background`
- `usvg_tree::NodeExt::filter_background_start_node`

##### Fixed

- Improve rectangular clipping anti-aliasing quality.
- Mask's RGB to Luminance converter was ignoring premultiplied alpha.

###
[`v0.31.1`](https://redirect.github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0311---2023-04-22)

[Compare
Source](https://redirect.github.com/linebender/resvg/compare/v0.31.0...v0.31.1)

##### Fixed

- Use the latest `tiny-skia` to fix SVGs with large masks rendering.

###
[`v0.31.0`](https://redirect.github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0310---2023-04-10)

[Compare
Source](https://redirect.github.com/linebender/resvg/compare/v0.30.0...v0.31.0)

##### Added

- `usvg::Tree::paint_servers`
- `usvg::Tree::clip_paths`
- `usvg::Tree::masks`
- `usvg::Tree::filters`
- `usvg::Node::subroots`
- (usvg) `--coordinates-precision` and `--transforms-precision` writing
options.
  Thanks to [@&#8203;flxzt](https://redirect.github.com/flxzt).

##### Fixed

- `fill-opacity` and `stroke-opacity` resolving.
- Double `transform` when resolving `symbol`.
- `symbol` clipping when its viewbox is the same as the document one.
- (usvg) Deeply nested gradients, patterns, clip paths, masks and
filters
  were ignored during SVG writing.
- Missing text in nested clip paths and mask, text decoration patterns,
filter inputs and feImage.

###
[`v0.30.0`](https://redirect.github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0300---2023-03-25)

[Compare
Source](https://redirect.github.com/linebender/resvg/compare/v0.29.0...v0.30.0)

##### Added

- Readd `usvg` CLI tool. Can be installed via cargo as before.

##### Changed

- Extract most `usvg` internals into new `usvg-tree` and `usvg-parser`
crates.
  `usvg-tree` contains just the SVG tree and all the types.
  `usvg-parser` parsers SVG into `usvg-tree`.
  And `usvg` is just an umbrella crate now.
- To use `usvg::Tree::from*` methods one should import the
`usvg::TreeParsing` trait now.
- No need to import `usvg-text-layout` manually anymore. It is part of
`usvg` now.
- `rosvgtree` no longer reexports `svgtypes`.
- `rosvgtree::Node::attribute` returns just a string now.
- `rosvgtree::Node::find_attribute` returns just a `rosvgtree::Node`
now.
- Rename `usvg::Stretch` into `usvg::FontStretch`.
- Rename `usvg::Style` into `usvg::FontStyle`.
- `usvg::FitTo` moved to `resvg::FitTo`.
- `usvg::IsDefault` trait is private now.

##### Removed

- `rosvgtree::FromValue`. Due to Rust's orphan rules this trait is
pretty useless.

##### Fixed

- Recursive markers detection.
- Skip malformed `transform` attributes without skipping the whole
element.
- Clipping path rectangle calculation for nested `svg` elements.
  Thanks to [@&#8203;LaurenzV](https://redirect.github.com/LaurenzV).
- Panic when applying `text-decoration` on text with only one cluster.
  Thanks to [@&#8203;LaurenzV](https://redirect.github.com/LaurenzV).
- (Qt API) Image size wasn't initialized. Thanks to
[@&#8203;missdeer](https://redirect.github.com/missdeer).
- `resvg` CLI allows files with XML DTD again.
- (svgtypes) Handle implicit MoveTo after ClosePath segments.

</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.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- 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/astral-sh/uv).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi43NC41IiwidXBkYXRlZEluVmVyIjoiNDIuNzQuNSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiaW50ZXJuYWwiXX0=-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Zanie Blue <contact@zanie.dev>
2026-01-19 09:01:20 -06:00
renovate[bot] c1450af65f Update Rust crate rkyv to v0.8.13 (#17563)
This PR contains the following updates:

| Package | Type | Update | Change | Pending |
|---|---|---|---|---|
| [rkyv](https://redirect.github.com/rkyv/rkyv) | workspace.dependencies
| patch | `0.8.12` → `0.8.13` | `0.8.14` |

---

### 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.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- 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/astral-sh/uv).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi43NC41IiwidXBkYXRlZEluVmVyIjoiNDIuNzQuNSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiaW50ZXJuYWwiXX0=-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Zanie Blue <contact@zanie.dev>
2026-01-19 08:56:01 -06:00
renovate[bot] aa5b112248 Update Rust crate jiff to v0.2.18 (#17559)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [jiff](https://redirect.github.com/BurntSushi/jiff) |
workspace.dependencies | patch | `0.2.16` → `0.2.18` |

---

### Release Notes

<details>
<summary>BurntSushi/jiff (jiff)</summary>

###
[`v0.2.18`](https://redirect.github.com/BurntSushi/jiff/blob/HEAD/CHANGELOG.md#0218-2026-01-05)

[Compare
Source](https://redirect.github.com/BurntSushi/jiff/compare/0.2.17...0.2.18)

\===================
This release ships a sizeable refactor to the RFC 2822, RFC 9110, RC
3339, RFC 9557, ISO 8601 and friendly format printers. Specifically,
they are now all monomorphic internally (instead of being generic over
`jiff::fmt::Write`) and write to uninitialized buffers. This improves
runtime performance (sometimes dramatically so), and to a more modest
degree, decreases binary size and improves compile times.

This release also includes a bug fix where `DateTime::MIN.to_zoned(..)`
could panic.

Enhancements:

- [#&#8203;460](https://redirect.github.com/BurntSushi/jiff/pull/460):
  Improve runtime performance and binary size of RFC 2822 printer.
- [#&#8203;461](https://redirect.github.com/BurntSushi/jiff/pull/461):
Tweak behavior of printing min/max offsets in RFC 2822 and Temporal
printers.
- [#&#8203;462](https://redirect.github.com/BurntSushi/jiff/pull/462):
  Export fallible constructors for `jiff::SignedDuration`.
- [#&#8203;465](https://redirect.github.com/BurntSushi/jiff/pull/465):
Improve runtime performance and binary size of the "friendly" duration
printer.
- [#&#8203;468](https://redirect.github.com/BurntSushi/jiff/pull/468):
Improve runtime performance and binary size of the Temporal ISO 8601
duration
  printer.
- [#&#8203;470](https://redirect.github.com/BurntSushi/jiff/pull/470):
Improve runtime performance and binary size of the Temporal ISO 8601
datetime
  printer.
- [#&#8203;474](https://redirect.github.com/BurntSushi/jiff/pull/474):
  Improve runtime performance and binary size of Jiff's `strftime`
  implementation.
- [#&#8203;477](https://redirect.github.com/BurntSushi/jiff/pull/477):
Fix a bug where time zone lookups for `civil::DateTime::MIN` could
panic.

###
[`v0.2.17`](https://redirect.github.com/BurntSushi/jiff/blob/HEAD/CHANGELOG.md#0217-2025-12-24)

[Compare
Source](https://redirect.github.com/BurntSushi/jiff/compare/0.2.16...0.2.17)

\===================
This release contains binary size improvements to Jiff, more succinct
error
messages and some new minor APIs.

While Jiff 1.0 is overdue, I've been doing a lot of experimenting with
improving Jiff's binary size and compile times. In particular, I want to
spend
time doing this before Jiff 1.0 so that we don't box ourselves into a
corner.
(For example, some binary size improvements may require minor API
breaking
changes.)

In this release, Jiff has switched to structured error handling
internally
in an effort to provide error predicates and also hopefully improve
binary
sizes and compile times. Overall this didn't have as big of an impact on
binary sizes or compile times as I was hoping. I did take this
opportunity to
make Jiff's error messages a bit more succinct. In many cases, this
involved
de-duplicating some aspects of error messages and omitting user provided
input
in the messages. If you feel like there is a significant decrease in
error
message quality that isn't easily amended by callers providing
additional
context themselves, please open an issue.

This release also updates Jiff's bundled copy of the \[IANA Time Zone
Database]
to `2025c`. See the [`2025c` release announcement] for more details.

Enhancements:

- [#&#8203;412](https://redirect.github.com/BurntSushi/jiff/issues/412):
Add `Display`, `FromStr`, `Serialize` and `Deserialize` trait
implementations
for `jiff::civil::ISOWeekDate`. These all use the ISO 8601 week date
format.
- [#&#8203;418](https://redirect.github.com/BurntSushi/jiff/issues/418):
Add some basic predicates to `jiff::Error` for basic error
introspection.
- [#&#8203;453](https://redirect.github.com/BurntSushi/jiff/pull/453),
  [#&#8203;454](https://redirect.github.com/BurntSushi/jiff/pull/454):
  Switch to structured error handling internally.
- [#&#8203;456](https://redirect.github.com/BurntSushi/jiff/pull/456),
  [#&#8203;457](https://redirect.github.com/BurntSushi/jiff/pull/457),
  [#&#8203;458](https://redirect.github.com/BurntSushi/jiff/pull/458):
  Various improvements to binary size.

[`2025c` release announcement]:
https://lists.iana.org/hyperkitty/list/tz-announce@iana.org/thread/TAGXKYLMAQRZRFTERQ33CEKOW7KRJVAK/

</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.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- 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/astral-sh/uv).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi43NC41IiwidXBkYXRlZEluVmVyIjoiNDIuNzQuNSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiaW50ZXJuYWwiXX0=-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Zanie Blue <contact@zanie.dev>
2026-01-19 08:50:13 -06:00
Zanie Blue c83066b8ee Update the trampolines to use windows v0.61.0 for consistency with the workspace (#17541)
I need to regenerate the trampolines after this.

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-01-18 09:08:15 -06:00
Zanie Blue 7f44de5d68 Use FxHashSet<PackageName> instead of Vec for exclude in uv pip list (#17550)
Closes #17546 

and use `FxHashSet` instead of `HashSet` in `uv pip freeze`

Co-authored-by: Claude <noreply@anthropic.com>
2026-01-17 16:45:18 +00:00
Tobias Gårdhus e2095b987a Implement uv pip freeze --exclude flag (#17045)
## Summary

Implements the `--exclude` flag to `uv pip freeze`, which allows to
filter unwanted dependencies from the resulting requirements.txt file.

```bash
uv pip freeze --exclude pandas
```

part of https://github.com/astral-sh/uv/issues/3141


## Test Plan

Unit test with simple exclusion example of command argument(s)
2026-01-17 09:34:32 -06:00
Zanie Blue 6011cb4c35 Upgrade the trampolines to nightly-2025-11-02 (#17538)
The same version we are using for Docker builds; also resolving MSRV
errors
2026-01-17 09:03:55 -06:00
renovate[bot] 3c8ce0daee Update Rust to v1.92.0 (#17523)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [rust](https://redirect.github.com/rust-lang/rust) | minor | `1.91` →
`1.92.0` |

---

### Release Notes

<details>
<summary>rust-lang/rust (rust)</summary>

###
[`v1.92.0`](https://redirect.github.com/rust-lang/rust/blob/HEAD/RELEASES.md#Version-1920-2025-12-11)

[Compare
Source](https://redirect.github.com/rust-lang/rust/compare/1.91.1...1.92.0)

\==========================

<a id="1.92.0-Language"></a>

## Language

- [Document `MaybeUninit` representation and
validity](https://redirect.github.com/rust-lang/rust/pull/140463)
- [Allow `&raw [mut | const]` for union field in safe
code](https://redirect.github.com/rust-lang/rust/pull/141469)
- [Prefer item bounds of associated types over where-bounds for
auto-traits and
`Sized`](https://redirect.github.com/rust-lang/rust/pull/144064)
- [Do not materialize `X` in `[X; 0]` when `X` is unsizing a
const](https://redirect.github.com/rust-lang/rust/pull/145277)
- [Support combining `#[track_caller]` and `#[no_mangle]` (requires
every declaration specifying `#[track_caller]` as
well)](https://redirect.github.com/rust-lang/rust/pull/145724)
- [Make never type lints `never_type_fallback_flowing_into_unsafe` and
`dependency_on_unit_never_type_fallback`
deny-by-default](https://redirect.github.com/rust-lang/rust/pull/146167)
- [Allow specifying multiple bounds for same associated item, except in
trait objects](https://redirect.github.com/rust-lang/rust/pull/146593)
- [Slightly strengthen higher-ranked region handling in
coherence](https://redirect.github.com/rust-lang/rust/pull/146725)
- [The `unused_must_use` lint no longer warns on `Result<(),
Uninhabited>` (for instance, `Result<(), !>`), or
`ControlFlow<Uninhabited,
()>`](https://redirect.github.com/rust-lang/rust/pull/147382). This
avoids having to check for an error that can never happen.

<a id="1.92.0-Compiler"></a>

## Compiler

- [Make `mips64el-unknown-linux-muslabi64` link
dynamically](https://redirect.github.com/rust-lang/rust/pull/146858)
- [Remove current code for embedding command-line args in
PDB](https://redirect.github.com/rust-lang/rust/pull/147022)
Command-line information is typically not needed by debugging tools, and
the removed code
was causing problems for incremental builds even on targets that don't
use PDB debuginfo.

<a id="1.92.0-Libraries"></a>

## Libraries

- [Specialize `Iterator::eq{_by}` for `TrustedLen`
iterators](https://redirect.github.com/rust-lang/rust/pull/137122)
- [Simplify `Extend` for
tuples](https://redirect.github.com/rust-lang/rust/pull/138799)
- [Added details to `Debug` for
`EncodeWide`](https://redirect.github.com/rust-lang/rust/pull/140153).
-
[`iter::Repeat::last`](https://redirect.github.com/rust-lang/rust/pull/147258)
and [`count`](https://redirect.github.com/rust-lang/rust/pull/146410)
will now panic, rather than looping infinitely.

<a id="1.92.0-Stabilized-APIs"></a>

## Stabilized APIs

-
[`NonZero<u{N}>::div_ceil`](https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.div_ceil)
-
[`Location::file_as_c_str`](https://doc.rust-lang.org/stable/std/panic/struct.Location.html#method.file_as_c_str)
-
[`RwLockWriteGuard::downgrade`](https://doc.rust-lang.org/stable/std/sync/struct.RwLockWriteGuard.html#method.downgrade)
-
[`Box::new_zeroed`](https://doc.rust-lang.org/stable/std/boxed/struct.Box.html#method.new_zeroed)
-
[`Box::new_zeroed_slice`](https://doc.rust-lang.org/stable/std/boxed/struct.Box.html#method.new_zeroed_slice)
-
[`Rc::new_zeroed`](https://doc.rust-lang.org/stable/std/rc/struct.Rc.html#method.new_zeroed)
-
[`Rc::new_zeroed_slice`](https://doc.rust-lang.org/stable/std/rc/struct.Rc.html#method.new_zeroed_slice)
-
[`Arc::new_zeroed`](https://doc.rust-lang.org/stable/std/sync/struct.Arc.html#method.new_zeroed)
-
[`Arc::new_zeroed_slice`](https://doc.rust-lang.org/stable/std/sync/struct.Arc.html#method.new_zeroed_slice)
-
[`btree_map::Entry::insert_entry`](https://doc.rust-lang.org/stable/std/collections/btree_map/enum.Entry.html#method.insert_entry)
-
[`btree_map::VacantEntry::insert_entry`](https://doc.rust-lang.org/stable/std/collections/btree_map/struct.VacantEntry.html#method.insert_entry)
- [`impl Extend<proc_macro::Group> for
proc_macro::TokenStream`](https://doc.rust-lang.org/stable/proc_macro/struct.TokenStream.html#impl-Extend%3CGroup%3E-for-TokenStream)
- [`impl Extend<proc_macro::Literal> for
proc_macro::TokenStream`](https://doc.rust-lang.org/stable/proc_macro/struct.TokenStream.html#impl-Extend%3CLiteral%3E-for-TokenStream)
- [`impl Extend<proc_macro::Punct> for
proc_macro::TokenStream`](https://doc.rust-lang.org/stable/proc_macro/struct.TokenStream.html#impl-Extend%3CPunct%3E-for-TokenStream)
- [`impl Extend<proc_macro::Ident> for
proc_macro::TokenStream`](https://doc.rust-lang.org/stable/proc_macro/struct.TokenStream.html#impl-Extend%3CIdent%3E-for-TokenStream)

These previously stable APIs are now stable in const contexts:

-
[`<[_]>::rotate_left`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.rotate_left)
-
[`<[_]>::rotate_right`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.rotate_right)

<a id="1.92.0-Cargo"></a>

## Cargo

- [Added a new
chapter](https://redirect.github.com/rust-lang/cargo/issues/16119) to
the Cargo book, ["Optimizing Build
Performance"](https://doc.rust-lang.org/stable/cargo/guide/build-performance.html).

<a id="1.92.0-Rustdoc"></a>

## Rustdoc

- [If a trait item appears in rustdoc search, hide the corresponding
impl items](https://redirect.github.com/rust-lang/rust/pull/145898).
Previously a search for "last" would show both `Iterator::last` as well
as impl methods like `std::vec::IntoIter::last`. Now these impl methods
will be hidden, freeing up space for inherent methods like
`BTreeSet::last`.
- [Relax rules for identifiers in
search](https://redirect.github.com/rust-lang/rust/pull/147860).
Previously you could only search for identifiers that were valid in rust
code, now searches only need to be valid as part of an identifier. For
example, you can now perform a search that starts with a digit.

<a id="1.92.0-Compatibility-Notes"></a>

## Compatibility Notes

- [Fix backtraces with `-C panic=abort` on Linux by generating unwind
tables by
default](https://redirect.github.com/rust-lang/rust/pull/143613). Build
with `-C force-unwind-tables=no` to keep omitting unwind tables.

* As part of the larger effort refactoring compiler built-in attributes
and their diagnostics, [the future-compatibility lint
`invalid_macro_export_arguments` is upgraded to deny-by-default and will
be reported in dependencies
too.](https://redirect.github.com/rust-lang/rust/pull/143857)
* [Update the minimum external LLVM to
20](https://redirect.github.com/rust-lang/rust/pull/145071)
* [Prevent downstream `impl DerefMut for
Pin<LocalType>`](https://redirect.github.com/rust-lang/rust/pull/145608)
* [Don't apply temporary lifetime extension rules to the arguments of
non-extended `pin!` and formatting
macros](https://redirect.github.com/rust-lang/rust/pull/145838)

</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.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- 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/astral-sh/uv).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi43NC41IiwidXBkYXRlZEluVmVyIjoiNDIuNzQuNSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiaW50ZXJuYWwiXX0=-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Zanie Blue <contact@zanie.dev>
2026-01-16 11:14:34 -06:00
konsti 125b116751 Remove now redundant env_remove calls (#17514)
Follow-up to https://github.com/astral-sh/uv/pull/14080
2026-01-16 15:17:51 +00:00
Ben Beasley f243f64aa8 Gate build_backend::build_with_all_metadata on pypi feature (#17520)
## Summary

This test, added in 0.9.26, tries to download anyio from PyPI. This PR
therefore gates it on the `pypi` feature.
<!-- What's the purpose of the change? What does it do, and why? -->

## Test Plan

<!-- How was it tested? -->
Applied as a patch to the `uv` package in Fedora and built in an offline
environment.
2026-01-16 14:25:47 +00:00
Tomasz Kramkowski f7d1215a98 Make uv pip compile attempt to download a specified --python-version if it can. (#17249)
## Summary

Addresses #16709. Now specifying a simple version with `--python` or
specifying a version using `--python-version` will result in the
specified version getting downloaded with a fallback to the previous
behaviour if the download fails for some transient reason or if
downloads are disabled.

The behaviour of how `--python` gets treated as `--python-version`, if a
"simple version" is specified, is kept. This means that `--python 3.7`
turns into a soft requirement. This seems at odds with how other similar
parts of UV work, but there seem to be quite a few tests which test for
this specific behaviour and I think this is best saved for a separate
issue.

## Test Plan

I added a test case which would previously fall back to the default
interpreter and warn about it.

---------

Co-authored-by: Zanie Blue <contact@zanie.dev>
2026-01-16 14:01:56 +00:00
Yusuf Bham 8a02f6352a Add -t shortform for --target to uv pip subcommands (#17501)
<!--
Thank you for contributing to uv! To help us out with reviewing, please
consider the following:

- Does this pull request include a summary of the change? (See below.)
- Does this pull request include a descriptive title?
- Does this pull request include references to any relevant issues?
-->

## Summary

This adds `-t` to `uv pip` to preserve drop-in compatibility with pip's
`-t` shortform

Closes #17495

<!-- What's the purpose of the change? What does it do, and why? -->

## Test Plan
Just interactively checked to make sure it works in the same places as
`--test`
```bash
uv pip install -t test ansible
uv pip list -t test
echo 'ansible' > requirements.txt
uv pip sync -t test requirements.txt
```
2026-01-16 07:50:43 -06:00
Zanie Blue 8968110455 Fix infinite loop when SSL_CERT_FILE is a directory (#17503)
Closes #17494

See https://github.com/rustls/pki-types/issues/98 for details.

I've posted an upstream fix https://github.com/rustls/pki-types/pull/99
but given the severity I think we should defensively patch this here as
well.

Co-authored-by: Claude <noreply@anthropic.com>
2026-01-16 07:12:55 -06:00
Zanie Blue 936e6cdc42 Remove superfluous pin (#17502)
You can see in
https://github.com/astral-sh/uv/pull/3987#discussion_r1624696545 that
previously we called `Notified::enable` which required `pin!` but we no
longer do that and thus no longer require `pin!`.
2026-01-15 16:28:44 -06:00
Zanie Blue a475c720af Add missing git feature to a few tests (#17499)
Co-authored-by: Claude <noreply@anthropic.com>
2026-01-15 15:52:21 -06:00
Zanie Blue ee4f003628 Bump version to 0.9.26 (#17496) 2026-01-15 14:25:54 -06:00
Zanie Blue 490b7f322e Add --no-sources-package (#14910)
I needed this for a test, e.g., to disable a source for an extra build
dependency without disabling the source for a workspace member, and had
also seen some requests for it. I think it makes sense to allow this.

The refactor is fairly mechanical, we go from
`SourceStrategy::Enabled|Disabled` to
`NoSources::All|None|Package(names)` as we do for other options like
`NoBinary`.

Related https://github.com/astral-sh/uv/issues/17441
2026-01-15 13:53:42 -06:00
Zanie Blue d673867919 Adjust the process ulimit to the maximum allowed on startup (#17464)
Closes #16999

See the commentary at
https://github.com/astral-sh/uv/issues/16999#issuecomment-3641417484 for
precedence in other tools.

This is non-fatal on error, but there are various scary behaviors from
increased ulimit sizes so I've gated this with preview.

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-01-15 18:17:46 +00:00
konsti 20f468167a Log when response arrives (#17488)
Looking at #17485, I noticed we don't log when a request finishes,
making the log harder to read than necessary.

Example new log message:

```
TRACE Received response for revalidation request with status 304 Not Modified for: https://pypi.org/simple/idna/
```
2026-01-15 17:23:50 +00:00
Zanie Blue 73ad74c4d5 Improve error message for abi3 wheels on free-threaded Python (#17442)
Closes #17406 

Unlike https://github.com/astral-sh/uv/pull/17415, this returns a
dedicated error variant instead of adding a downstream special case to
handling of `Python` tag incompatibilities.

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-01-15 10:58:10 -06:00
konsti 6db2c62906 Normalize test snapshots (#17486)
This reduces the churn when changing test snapshots, as insta updates
the quotes when the contents change. Instead, we decouple it by updating
the quotes in bulk here.

Created by:

```
cargo insta test --accept --force-update-snapshots
```
2026-01-15 17:50:10 +01:00
Zanie Blue 0920a0e8fb Lock to avoid concurrent refresh of pyx tokens (#17479)
Prevent concurrent processes from all refreshing the token
simultaneously by using a file lock. When a refresh is needed:

1. Acquire an exclusive file lock (which will block if another process
is refreshing)
3. Re-read the tokens from disk and check if they are fresh enough,
instead of making another request
4. Otherwise, perform the refresh and update the cached tokens

This prevents thundering herd issues when multiple concurrent processes
are invoking `uv auth token` or `uv auth helper` at the same time.

Also, set the tolerance for `uv auth helper` to the same as `uv auth
token` (5 minutes).

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Zsolt Dollenstein <zsol.zsol@gmail.com>
2026-01-15 10:24:05 -06:00
Zanie Blue 681e8e060f Improve cache initialization failure error message (#17469)
Adds an error chain to improve clarity when we fail to initialize the
cache directory.

Related to https://github.com/astral-sh/uv/issues/17465

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-01-15 07:23:10 -06:00
konsti ed50e40d05 Clear known env vars for tests (#14080)
Currently, it's possible to break our test suite by having an env var
set that influences uv, either a `UV_*` var, or something more generic
such as the XDG env vars. We previously fixed them env-var-by-env-var as
we discovered. By clearing uv-specific env var for subcommands, we can
invert this.

We intentionally avoid clearing all env vars as some of them, especially
on Windows, are system env vars required for basic operations.

Notable limitations are that this only affects tests that use
`TestContext::add_shared_env` (default, can be opted-out).

Fixed #9873
2026-01-15 11:40:31 +01:00
Ben Beasley 47d3d0c6e1 Gate some tests added in 0.9.23 on the pypi feature (#17481)
<!--
Thank you for contributing to uv! To help us out with reviewing, please
consider the following:

- Does this pull request include a summary of the change? (See below.)
- Does this pull request include a descriptive title?
- Does this pull request include references to any relevant issues?
-->

## Summary

Makes it easier to run integration tests in offline environments by
gating four new tests on the `pypi` feature. All of these tests fail in
offline environments when they try to make HTTPS requests to PyPI.
<!-- What's the purpose of the change? What does it do, and why? -->

## Test Plan

<!-- How was it tested? -->
Applied as a patch to Fedora’s [`uv`
package](https://src.fedoraproject.org/rpms/uv); built and ran
integration tests in an offline environment.
2026-01-15 11:40:18 +01:00
Luis Nell db7d1a2058 Add a hint to use a newer uv when a managed Python download is not found (#17461)
## Summary

Suggest using a newer uv version when a managed python installation request
fails with `NoDownloadFound`.

Before:

```
error: No interpreter found for Python ==3.14.* in managed installations or search path
```

After:

```
error: No interpreter found for Python ==3.14.* in managed installations or search path

hint: uv embeds available Python downloads and may require an update to install new versions. Consider retrying on a newer version of uv.
```

## Test Plan

Integration test added for this case.

---------

Co-authored-by: Zanie Blue <contact@zanie.dev>
2026-01-15 09:58:41 +00:00
github-actions[bot] 0c08cba0c4 Sync latest Python releases (#17480)
Automated update for Python releases.

Co-authored-by: jjhelmus <1050278+jjhelmus@users.noreply.github.com>
2026-01-15 04:21:14 +00:00
Charlie Marsh 677d80f8c9 Add support for GCS request signing (#17474)
## Summary

This follows the pattern we've already established for S3.
2026-01-14 15:47:53 -05:00
konsti 0ab603e035 Add METADATA.json and WHEEL.json in uv build backend (#15510)
https://discuss.python.org/t/pep-819-json-package-metadata/105558

Add an experimental JSON format for METADATA and WHEEL files in the uv
build backend to have a reference what it would look like and to
demonstrate that the actual change is just a few lines, how much easier
it is than the existing email header format.

The change is overwhelmingly adding the preview feature as it's the
first preview item in the build backend, writing the actual JSON is only
a couple of lines.

---------

Co-authored-by: Charlie Marsh <charlie.r.marsh@gmail.com>
2026-01-14 18:52:09 +00:00
Zanie Blue 0843c4d832 Avoid rendering pyproject.toml examples for more system-level settings (#17462)
Following #16918, mark additional system-level settings as
`uv_toml_only` so they don't appear in the `pyproject.toml`
documentation examples:

- `native-tls`
- `cache-dir`
- `python-install-mirror`
- `pypy-install-mirror`
- `python-downloads-json-url`

Eventually, we'll want to ban these in the `pyproject.toml` without some
opt-in.

Co-authored-by: Claude <noreply@anthropic.com>
2026-01-14 12:18:35 -06:00
Zanie Blue b95b151cac Skip flaky test_simultaneous_independent_create_set on Windows (#17468)
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-14 17:17:01 +00:00
Zanie Blue 38fcac0f36 Bump version to 0.9.25 (#17449) 2026-01-13 16:55:34 -06:00
Zanie Blue 33c91159c6 Use keyring authentication when retrieving tool@latest version (#17448)
Closes #17436

Co-authored-by: Claude <noreply@anthropic.com>
2026-01-13 16:31:06 -06:00
github-actions[bot] c6a02873fd Sync latest Python releases (#17445)
Automated update for Python releases.

Co-authored-by: zanieb <2586601+zanieb@users.noreply.github.com>
2026-01-13 22:01:12 +00:00
Zanie Blue 3c72e56d92 Use constants for latest Python versions in tests (#17444)
Co-authored-by: Claude <noreply@anthropic.com>
2026-01-13 21:36:45 +00:00
William Woodruff 6dfa0e3722 Abstract Trusted Publishing services (#17418) 2026-01-13 15:53:58 +00:00
Diyor Khayrutdinov 4ee320b0a8 Fix error message when installing musl python on armv7 (#17213)
<!--
Thank you for contributing to uv! To help us out with reviewing, please
consider the following:

- Does this pull request include a summary of the change? (See below.)
- Does this pull request include a descriptive title?
- Does this pull request include references to any relevant issues?
-->

## Summary

Fixes #17210.

## Test Plan

Added a test function.

Co-authored-by: Zanie Blue <contact@zanie.dev>
2026-01-13 02:45:04 +00:00
Zanie Blue 98d17fc4d2 Fix another state bug in the uv auth tests (#17435)
This test was also order dependent; see also #17424

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-01-13 01:35:31 +00:00
Charlie Marsh 69333ead26 Avoid unwrapping size for file responses (#17434)
## Summary

This may have been an oversight? The field is optional on the struct.
2026-01-12 20:13:37 -05:00
liam 827edd0740 Allow disabling exclude-newer per package (#16854)
Resolves https://github.com/astral-sh/uv/issues/16846,
https://github.com/astral-sh/uv/issues/16813

This diff adds support for disabling `exclude-newer` for specific
packages using `<name>=false`. This allows packages
without upload dates (e.g., CPU-only PyTorch wheels from custom indices)
to be resolved when a global `exclude-newer` is set, without disabling
it globally.

---------

Co-authored-by: Zanie Blue <contact@zanie.dev>
2026-01-12 19:00:07 -06:00
Gyeongjae Choi 7b497d48bd Use latest Pyodide version for each python version (#17372)
## Summary

This changes how the `download-metadata.json` file is generated for
Pyodide.

Previously, if we have a different Pyodide version with a same Python
version, the older Pyodide version is selected.

For example, say we have

- Pyodide 0.29.0 with Python 3.13.2
- Pyodide 0.28.3 with Python 3.13.2

then, pyodide 0.28.3 was stored in `download-metadata.json` as we
iterate in decending order with overwriting the value that was
previously written.

I fixed it by picking up the latest Pyodide version for each Python
version.

## Test Plan

Ran `uv run -- crates/uv-python/fetch-download-metadata.py` locally, and
verified the output:

```
2026-01-09 15:39:23 INFO Fetching Pyodide checksums: 0/4
2026-01-09 15:39:24 INFO Selected cpython-3.13.2-emscripten-wasm32-musl (0.29.1)
2026-01-09 15:39:24 INFO Selected cpython-3.12.7-emscripten-wasm32-musl (0.27.7)
2026-01-09 15:39:24 INFO Selected cpython-3.12.1-emscripten-wasm32-musl (0.26.4)
2026-01-09 15:39:24 INFO Selected cpython-3.11.3-emscripten-wasm32-musl (0.25.1)
```
2026-01-12 17:59:26 -06:00
Zanie Blue eca58cbae5 Fix incorrect test token_native_auth_realm (#17424)
The state was leaking in from another test case here.

Co-authored-by: Claude <noreply@anthropic.com>
2026-01-12 20:38:50 +00:00
Charlie Marsh 6d5e8031d3 Detect workspace from uv run target (#17423)
## Summary

Given `uv run foo/bar.py`, we now detect the workspace starting at
`foo/bar.py`, rather than the current working directory. I think this is
much more intuitive as demonstrated by the new test.

This change is currently in preview, but would ship as a breaking change
in v0.10.
2026-01-12 13:52:48 -06:00