Skip to content

Mark serde_yml 0.0.13 as patched in RUSTSEC-2025-0068#2915

Open
sebastienrousseau wants to merge 1 commit into
rustsec:mainfrom
sebastienrousseau:update-serde-yml-2025-0068-patched
Open

Mark serde_yml 0.0.13 as patched in RUSTSEC-2025-0068#2915
sebastienrousseau wants to merge 1 commit into
rustsec:mainfrom
sebastienrousseau:update-serde-yml-2025-0068-patched

Conversation

@sebastienrousseau
Copy link
Copy Markdown

Summary

`serde_yml = "0.0.13"` was published as a deprecation shim that structurally removes the unsound surface flagged by RUSTSEC-2025-0068:

  • The C-FFI `libyml` parser is gone from the dependency graph entirely.
  • `serde_yml::ser::Serializer` is now a re-export of a pure-Rust unit struct (`pub struct Serializer;`) — no `emitter` field — backed by `noyalib`, which enforces `#![forbid(unsafe_code)]` workspace-wide.

The crate remains deprecated and is not under active development — every public item carries `#[deprecated]` and the README leads with a deprecation banner — but the specific API path documented in this advisory (`serde_yml::ser::Serializer.emitter` segfault) no longer exists.

This PR:

  1. Adds `patched = ["^0.0.13"]` to the advisory's TOML front-matter.
  2. Adds a "Status in 0.0.13" section to the body, describing the structural fix and giving two one-line verification commands.
  3. Extends the "Pure Rust alternatives" section with three currently-maintained pure-Rust options (`noyalib`, `serde-saphyr`, `yaml-rust2`).

Verification

Anyone can confirm the structural fix locally:

```sh
cargo add serde_yml@0.0.13
cargo tree -p serde_yml | grep libyml # → no output (libyml is gone)
```

The `Serializer` rustdoc shows the unit-struct shape with no fields.

Related

`serde_yml = "0.0.13"` is a deprecation shim that structurally
removes the unsound surface flagged by this advisory: the C-FFI
`libyml` parser is gone from the dependency graph entirely, and
`serde_yml::ser::Serializer` is now a re-export of a pure-Rust
unit struct (`pub struct Serializer;`) with no `emitter` field —
the specific API path documented in the advisory no longer exists.

The crate is still deprecated and not under active development —
every public item carries `#[deprecated]` — but the unsound surface
is no longer reachable. Adds `patched = ["^0.0.13"]` and a "Status
in 0.0.13" section to the advisory describing the structural fix
with verification commands.

Also extends the "Pure Rust alternatives" section to include three
currently-maintained pure-Rust crates:

- `noyalib` — full serde integration, `#![forbid(unsafe_code)]`,
  drop-in via the `compat-serde-yaml` feature
- `serde-saphyr` — typed-deserialise wrapper around saphyr
- `yaml-rust2` — maintained pure-Rust parser primitives

Verification (anyone can run):

  cargo tree -p serde_yml | grep libyml      # → no output
  grep 'pub struct Serializer' \
       <(cargo doc -p serde_yml --no-deps && \
         cat target/doc/serde_yml/struct.Serializer.html)

---
THE ARCHITECT ᛫ Sebastien Rousseau ᛫ https://sebastienrousseau.com
THE ENGINE ᛞ EUXIS ᛫ Enterprise Unified Execution Intelligence System ᛫ https://euxis.co

Assisted-by: Claude:claude-opus-4-7
renovate Bot added a commit to sdwilsh/jellyfin-remote-proxy that referenced this pull request May 28, 2026
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [env_logger](https://redirect.github.com/rust-cli/env_logger) |
dependencies | patch | `0.11.8` → `0.11.10` |
| [futures](https://rust-lang.github.io/futures-rs)
([source](https://redirect.github.com/rust-lang/futures-rs)) |
dependencies | patch | `0.3.31` → `0.3.32` |
| [log](https://redirect.github.com/rust-lang/log) | dependencies |
patch | `0.4.29` → `0.4.30` |
| [serde_json](https://redirect.github.com/serde-rs/json) | dependencies
| patch | `1.0.148` → `1.0.150` |
| [serde_yml](https://redirect.github.com/sebastienrousseau/noyalib)
([source](https://redirect.github.com/sebastienrousseau/serde_yml)) |
dependencies | patch | `0.0.12` → `0.0.13` |
| [tokio](https://tokio.rs)
([source](https://redirect.github.com/tokio-rs/tokio)) | dependencies |
minor | `1.48.0` → `1.52.3` |
| [url](https://redirect.github.com/servo/rust-url) | dependencies |
patch | `2.5.7` → `2.5.8` |

---

### Release Notes

<details>
<summary>rust-cli/env_logger (env_logger)</summary>

###
[`v0.11.10`](https://redirect.github.com/rust-cli/env_logger/blob/HEAD/CHANGELOG.md#01110---2026-03-23)

[Compare
Source](https://redirect.github.com/rust-cli/env_logger/compare/v0.11.9...v0.11.10)

##### Internal

- Update dependencies

###
[`v0.11.9`](https://redirect.github.com/rust-cli/env_logger/blob/HEAD/CHANGELOG.md#0119---2026-02-11)

[Compare
Source](https://redirect.github.com/rust-cli/env_logger/compare/v0.11.8...v0.11.9)

</details>

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

###
[`v0.3.32`](https://redirect.github.com/rust-lang/futures-rs/blob/HEAD/CHANGELOG.md#0332---2026-02-15)

[Compare
Source](https://redirect.github.com/rust-lang/futures-rs/compare/0.3.31...0.3.32)

- Bump MSRV of utility crates to 1.71.
([#&#8203;2989](https://redirect.github.com/rust-lang/futures-rs/issues/2989))
- Soft-deprecate `ready!` macro in favor of `std::task::ready!` added in
Rust 1.64
([#&#8203;2925](https://redirect.github.com/rust-lang/futures-rs/issues/2925))
- Soft-deprecate `pin_mut!` macro in favor of `std::pin::pin!` added in
Rust 1.68
([#&#8203;2929](https://redirect.github.com/rust-lang/futures-rs/issues/2929))
- Add `FuturesOrdered::clear`
([#&#8203;2927](https://redirect.github.com/rust-lang/futures-rs/issues/2927))
- Add `mpsc::*Receiver::recv`
([#&#8203;2947](https://redirect.github.com/rust-lang/futures-rs/issues/2947))
- Add `mpsc::*Receiver::try_recv` and deprecate
`mpsc::*Receiver::::try_next`
([#&#8203;2944](https://redirect.github.com/rust-lang/futures-rs/issues/2944))
- Implement `FusedStream` for `sink::With`
([#&#8203;2948](https://redirect.github.com/rust-lang/futures-rs/issues/2948))
- Add `no_std` support for `shared`
([#&#8203;2868](https://redirect.github.com/rust-lang/futures-rs/issues/2868))
- Make `Mutex::new()` const
([#&#8203;2956](https://redirect.github.com/rust-lang/futures-rs/issues/2956))
- Add `#[clippy::has_significant_drop]` to guards
([#&#8203;2967](https://redirect.github.com/rust-lang/futures-rs/issues/2967))
- Remove dependency to `pin-utils`
([#&#8203;2929](https://redirect.github.com/rust-lang/futures-rs/issues/2929))
- Remove dependency on `num_cpus`
([#&#8203;2946](https://redirect.github.com/rust-lang/futures-rs/issues/2946))
- Performance improvements
([#&#8203;2983](https://redirect.github.com/rust-lang/futures-rs/issues/2983))
- Documentation improvements
([#&#8203;2925](https://redirect.github.com/rust-lang/futures-rs/issues/2925),
[#&#8203;2926](https://redirect.github.com/rust-lang/futures-rs/issues/2926),
[#&#8203;2940](https://redirect.github.com/rust-lang/futures-rs/issues/2940),
[#&#8203;2971](https://redirect.github.com/rust-lang/futures-rs/issues/2971))

</details>

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

###
[`v0.4.30`](https://redirect.github.com/rust-lang/log/blob/HEAD/CHANGELOG.md#0430---2026-05-21)

[Compare
Source](https://redirect.github.com/rust-lang/log/compare/0.4.29...0.4.30)

##### What's Changed

- Support capturing of `std::net` types by
[@&#8203;KodrAus](https://redirect.github.com/KodrAus) in
[#&#8203;724](https://redirect.github.com/rust-lang/log/pull/724)

##### New Contributors

- [@&#8203;V0ldek](https://redirect.github.com/V0ldek) made their first
contribution in
[#&#8203;720](https://redirect.github.com/rust-lang/log/pull/720)
- [@&#8203;woodruffw](https://redirect.github.com/woodruffw) made their
first contribution in
[#&#8203;723](https://redirect.github.com/rust-lang/log/pull/723)

**Full Changelog**:
<rust-lang/log@0.4.29...0.4.30>

##### Notable Changes

- MSRV is bumped to 1.71.0 in
[#&#8203;723](https://redirect.github.com/rust-lang/log/pull/723)

</details>

<details>
<summary>serde-rs/json (serde_json)</summary>

###
[`v1.0.150`](https://redirect.github.com/serde-rs/json/releases/tag/v1.0.150)

[Compare
Source](https://redirect.github.com/serde-rs/json/compare/v1.0.149...v1.0.150)

- Reject non-string enum object keys
([#&#8203;1324](https://redirect.github.com/serde-rs/json/issues/1324),
thanks
[@&#8203;puneetdixit200](https://redirect.github.com/puneetdixit200))

###
[`v1.0.149`](https://redirect.github.com/serde-rs/json/releases/tag/v1.0.149)

[Compare
Source](https://redirect.github.com/serde-rs/json/compare/v1.0.148...v1.0.149)

- Align arbitrary\_precision number strings with zmij's formatting
([#&#8203;1306](https://redirect.github.com/serde-rs/json/issues/1306),
thanks [@&#8203;b41sh](https://redirect.github.com/b41sh))

</details>

<details>
<summary>sebastienrousseau/serde_yml (serde_yml)</summary>

###
[`v0.0.13`](https://redirect.github.com/sebastienrousseau/serde_yml/releases/tag/v0.0.13):
— Final release (deprecation shim, RUSTSEC-2025-0068 fixed)

[Compare
Source](https://redirect.github.com/sebastienrousseau/serde_yml/compare/v0.0.12...v0.0.13)

#### ⚠️ Final release — `serde_yml` is deprecated

This is the **final maintenance release** of `serde_yml`. The crate is
no longer under active development. `0.0.13` is a thin compatibility
shim that lets existing call sites keep compiling while you migrate to
one of the [maintained alternatives](#maintained-alternatives) listed
below.

If you are reading this because `cargo audit` flagged your build,
**upgrading to `0.0.13` resolves
[RUSTSEC-2025-0068](https://rustsec.org/advisories/RUSTSEC-2025-0068.html)
structurally** — see [Security](#security) below.

***

#### TL;DR

```diff
  # Cargo.toml
- serde_yml = "0.0"
+ serde_yml = "0.0.13"
```

Your existing call sites compile unchanged. The compiler now emits a
`#[deprecated]` warning at every `use serde_yml::*` import pointing at
the migration guide. The C-FFI `libyml` parser is no longer in your
dependency graph.

When you're ready to fully migrate, see the [migration
guide](https://redirect.github.com/sebastienrousseau/serde_yml/blob/master/MIGRATION.md).

***

#### Security: RUSTSEC-2025-0068 fixed


[RUSTSEC-2025-0068](https://rustsec.org/advisories/RUSTSEC-2025-0068.html)
(also
[GHSA-hhw4-xg65-fp2x](https://redirect.github.com/advisories/GHSA-hhw4-xg65-fp2x))
flagged every `serde_yml ≤ 0.0.12` as unsound — the
`serde_yml::ser::Serializer.emitter` field could cause a segmentation
fault via the C-FFI `libyaml` parser.

**`0.0.13` removes the vulnerable surface entirely:**

- The C-FFI `libyml` dependency is **gone** from the graph.
- `serde_yml::ser::Serializer` is now a re-export of a pure-Rust unit
struct (`pub struct Serializer;`) with **no `emitter` field** — code
that referenced `.emitter` no longer compiles, which is the desired
outcome.
- The backend (`noyalib`) enforces `#![forbid(unsafe_code)]`
workspace-wide.

Verification:

```bash
cargo update -p serde_yml --precise 0.0.13
cargo tree -p serde_yml | grep libyml   # → no output
```

The RustSec advisory database PR adding `patched = ["^0.0.13"]` is
pending review at
[rustsec/advisory-db#2915](https://redirect.github.com/rustsec/advisory-db/pull/2915).
Until it merges, `cargo audit` may still warn against `0.0.13` — the
`0.0.13` release itself ships `.cargo/audit.toml` + `deny.toml` ignore
entries so the self-referential warning doesn't block your own CI.

***

#### Maintained alternatives

Three crates are realistic destinations. Pick the one that fits.

| Crate | Migration shape | Best fit |
| :---------------------------------------------------------- |
:--------------------------------------------- |
:------------------------------------------------------------------------------------------------------------
|
| **[`noyalib`](https://crates.io/crates/noyalib)** | Drop-in via
`features = ["compat-serde-yaml"]` | Codebases that want a
`serde_yml`-shaped API on a modern, safe, pure-Rust backend with zero
call-site changes |
| **[`serde-saphyr`](https://crates.io/crates/serde-saphyr)** | Path
rename for typed code; **no `Value` DOM** | Typed-deserialise workloads
(`from_str::<MyStruct>`) — the 95 % case |
| **[`yaml-rust2`](https://crates.io/crates/yaml-rust2)** | Lower-level
parser API, not serde-integrated | Users who were on `serde_yml::libyml`
/ `loader` (removed in this shim) |

Full per-destination mapping tables:
[`MIGRATION.md`](https://redirect.github.com/sebastienrousseau/serde_yml/blob/master/MIGRATION.md).

The shim itself is backed by `noyalib` internally — that's an
implementation detail, not a recommendation. Pick whichever alternative
suits your codebase.

***

#### What's removed

The deep internal modules that previous versions exposed leaked
implementation details of the C-FFI parser. They are **gone** in this
release:

| Removed | Replacement |
| :------------------------------------------------- |
:----------------------------------------------------------------------------------
|
| `serde_yml::libyml::*` (FFI bindings) | `yaml-rust2` for low-level
parsing; otherwise n/a |
| `serde_yml::loader::Loader` | `yaml-rust2::YamlLoader` or
`noyalib::load_all_as::<T>` |
| `serde_yml::de::{Event, Progress, DocumentAnchor}` | Covered by the
alternatives' streaming APIs |
| `serde_yml::ser::{SerializerConfig, State}` | `noyalib::ser::Config` |
| `serde_yml::modules::path::Path` | `Error::location()` /
`Error::path()` on any alternative |
| `serde_yml::value::Index` | `Value` types in the alternatives
implement `Index<&str>` / `Index<usize>` natively |

Code calling only the public top-level surface (`from_str` / `to_string`
/ `Value` / `Mapping` / `with::singleton_map*`) needs no changes.

***

#### Behavioural notes worth knowing

Two intentionally safer defaults flow through the shim:

1. **Custom-tag scalars surface as `Value::Tagged`** rather than being
coerced to the inner string. Code exhaustively matching the previous
six-variant `Value` enum needs either a `Value::Tagged(_)` arm or a call
to `Value::untag()` / `Value::untag_ref()` before the match.
2. **YAML 1.2 strict booleans by default.** `country: NO` stays `"NO"`
(the YAML 1.2 fix to the "Norway problem") instead of becoming `false`.

***

#### MSRV

`0.0.13` requires **Rust 1.85.0** (the backend's MSRV); the previous
releases required 1.56. Users who cannot move past 1.56 should pin
`serde_yml = "=0.0.12"` and plan a migration window — but note that
pinning `0.0.12` keeps RUSTSEC-2025-0068 in your audit feed.

***

#### Dependencies

The runtime dependency tree dropped from six crates to two:

```
serde_yml v0.0.13
├── noyalib v0.0.5
│   ├── indexmap, memchr, rustc-hash, serde, smallvec
└── serde v1.0.x
```

No `libyml`, no `unsafe-libyaml`, no `serde_yaml` 0.9. Downstream `cargo
audit` / `cargo deny` runs stop flagging the unmaintained chain.

***

#### Documentation

-
[`README.md`](https://redirect.github.com/sebastienrousseau/serde_yml/blob/master/README.md)
— overview, install, behavioural notes
-
[`MIGRATION.md`](https://redirect.github.com/sebastienrousseau/serde_yml/blob/master/MIGRATION.md)
— full per-destination mapping tables, removed-surface table,
test/example coverage triage
-
[`SECURITY.md`](https://redirect.github.com/sebastienrousseau/serde_yml/blob/master/.github/SECURITY.md)
— RUSTSEC-2025-0068 status, supported-versions table, reporting policy
- [docs.rs/serde\_yml/0.0.13](https://docs.rs/serde_yml/0.0.13) — API
reference with `#[deprecated]` banner on every item

***

#### License

Dual-licensed under [Apache
2.0](https://www.apache.org/licenses/LICENSE-2.0) or
[MIT](https://opensource.org/licenses/MIT), at your option.

**Thanks** to everyone who used and contributed to `serde_yml`. The
crate served its purpose; it's time to move on to maintained, safer
alternatives.

</details>

<details>
<summary>tokio-rs/tokio (tokio)</summary>

###
[`v1.52.3`](https://redirect.github.com/tokio-rs/tokio/releases/tag/tokio-1.52.3):
Tokio v1.52.3

[Compare
Source](https://redirect.github.com/tokio-rs/tokio/compare/tokio-1.52.2...tokio-1.52.3)

### 1.52.3 (May 8th, 2026)

##### Fixed

- sync: fix underflow in mpsc channel `len()` ([#&#8203;8062])
- sync: notify receivers in mpsc `OwnedPermit::release()` method
([#&#8203;8075])
- sync: require that an `RwLock` has `max_readers != 0` ([#&#8203;8076])
- sync: return `Empty` from `try_recv()` when mpsc is closed with
outstanding permits ([#&#8203;8074])

[#&#8203;8062]: https://redirect.github.com/tokio-rs/tokio/pull/8062

[#&#8203;8074]: https://redirect.github.com/tokio-rs/tokio/pull/8074

[#&#8203;8075]: https://redirect.github.com/tokio-rs/tokio/pull/8075

[#&#8203;8076]: https://redirect.github.com/tokio-rs/tokio/pull/8076

###
[`v1.52.2`](https://redirect.github.com/tokio-rs/tokio/releases/tag/tokio-1.52.2):
Tokio v1.52.2

[Compare
Source](https://redirect.github.com/tokio-rs/tokio/compare/tokio-1.52.1...tokio-1.52.2)

### 1.52.2 (May 4th, 2026)

This release reverts the LIFO slot stealing change introduced in 1.51.0
([#&#8203;7431]), due to [its performance impact][#&#8203;8065].
([#&#8203;8100])

[#&#8203;7431]: https://redirect.github.com/tokio-rs/tokio/pull/7431

[#&#8203;8065]: https://redirect.github.com/tokio-rs/tokio/pull/8065

[#&#8203;8100]: https://redirect.github.com/tokio-rs/tokio/pull/8100

###
[`v1.52.1`](https://redirect.github.com/tokio-rs/tokio/releases/tag/tokio-1.52.1):
Tokio v1.52.1

[Compare
Source](https://redirect.github.com/tokio-rs/tokio/compare/tokio-1.52.0...tokio-1.52.1)

### 1.52.1 (April 16th, 2026)

#### Fixed

- runtime: revert [#&#8203;7757] to fix [a regression][#&#8203;8056]
that causes `spawn_blocking` to hang ([#&#8203;8057])

[#&#8203;7757]: https://redirect.github.com/tokio-rs/tokio/pull/7757

[#&#8203;8056]: https://redirect.github.com/tokio-rs/tokio/pull/8056

[#&#8203;8057]: https://redirect.github.com/tokio-rs/tokio/pull/8057

###
[`v1.52.0`](https://redirect.github.com/tokio-rs/tokio/releases/tag/tokio-1.52.0):
Tokio v1.52.0

[Compare
Source](https://redirect.github.com/tokio-rs/tokio/compare/tokio-1.51.3...tokio-1.52.0)

### 1.52.0 (April 14th, 2026)

#### Added

- io: `AioSource::register_borrowed` for I/O safety support
([#&#8203;7992])
- net: add `try_io` function to `unix::pipe` sender and receiver types
([#&#8203;8030])

#### Added (unstable)

- runtime: `Builder::enable_eager_driver_handoff` setting enable eager
hand off of the I/O and time drivers before polling tasks
([#&#8203;8010])
- taskdump: add `trace_with()` for customized task dumps
([#&#8203;8025])
- taskdump: allow `impl FnMut()` in `trace_with` instead of just `fn()`
([#&#8203;8040])
- fs: support `io_uring` in `AsyncRead` for `File` ([#&#8203;7907])

#### Changed

- runtime: improve `spawn_blocking` scalability with sharded queue
([#&#8203;7757])
- runtime: use `compare_exchange_weak()` in worker queue
([#&#8203;8028])

#### Fixed

- runtime: overflow second half of tasks when local queue is filled
instead of first half ([#&#8203;8029])

#### Documented

- docs: fix typo in `oneshot::Sender::send` docs ([#&#8203;8026])
- docs: hide #\[tokio::main] attribute in the docs of `sync::watch`
([#&#8203;8035])
- net: add docs on `ConnectionRefused` errors with UDP sockets
([#&#8203;7870])

[#&#8203;7757]: https://redirect.github.com/tokio-rs/tokio/pull/7757

[#&#8203;7870]: https://redirect.github.com/tokio-rs/tokio/pull/7870

[#&#8203;7907]: https://redirect.github.com/tokio-rs/tokio/pull/7907

[#&#8203;7992]: https://redirect.github.com/tokio-rs/tokio/pull/7992

[#&#8203;8010]: https://redirect.github.com/tokio-rs/tokio/pull/8010

[#&#8203;8025]: https://redirect.github.com/tokio-rs/tokio/pull/8025

[#&#8203;8026]: https://redirect.github.com/tokio-rs/tokio/pull/8026

[#&#8203;8028]: https://redirect.github.com/tokio-rs/tokio/pull/8028

[#&#8203;8029]: https://redirect.github.com/tokio-rs/tokio/pull/8029

[#&#8203;8030]: https://redirect.github.com/tokio-rs/tokio/pull/8030

[#&#8203;8035]: https://redirect.github.com/tokio-rs/tokio/pull/8035

[#&#8203;8040]: https://redirect.github.com/tokio-rs/tokio/pull/8040

###
[`v1.51.3`](https://redirect.github.com/tokio-rs/tokio/releases/tag/tokio-1.51.3):
Tokio v1.51.3

[Compare
Source](https://redirect.github.com/tokio-rs/tokio/compare/tokio-1.51.2...tokio-1.51.3)

### 1.51.3 (May 8th, 2026)

##### Fixed

- sync: fix underflow in mpsc channel `len()` ([#&#8203;8062])
- sync: notify receivers in mpsc `OwnedPermit::release()` method
([#&#8203;8075])
- sync: require that an `RwLock` has `max_readers != 0` ([#&#8203;8076])
- sync: return `Empty` from `try_recv()` when mpsc is closed with
outstanding permits ([#&#8203;8074])

[#&#8203;8062]: https://redirect.github.com/tokio-rs/tokio/pull/8062

[#&#8203;8074]: https://redirect.github.com/tokio-rs/tokio/pull/8074

[#&#8203;8075]: https://redirect.github.com/tokio-rs/tokio/pull/8075

[#&#8203;8076]: https://redirect.github.com/tokio-rs/tokio/pull/8076

###
[`v1.51.2`](https://redirect.github.com/tokio-rs/tokio/releases/tag/tokio-1.51.2):
Tokio v1.51.1

[Compare
Source](https://redirect.github.com/tokio-rs/tokio/compare/tokio-1.51.1...tokio-1.51.2)

### 1.51.2 (May 4th, 2026)

This release reverts the LIFO slot stealing change introduced in 1.51.0
([#&#8203;7431]), due to [its performance impact][#&#8203;8065].
([#&#8203;8100])

[#&#8203;7431]: https://redirect.github.com/tokio-rs/tokio/pull/7431

[#&#8203;8065]: https://redirect.github.com/tokio-rs/tokio/pull/8065

[#&#8203;8100]: https://redirect.github.com/tokio-rs/tokio/pull/8100

###
[`v1.51.1`](https://redirect.github.com/tokio-rs/tokio/releases/tag/tokio-1.51.1):
Tokio v1.51.1

[Compare
Source](https://redirect.github.com/tokio-rs/tokio/compare/tokio-1.51.0...tokio-1.51.1)

##### 1.51.1 (April 8th, 2026)

##### Fixed

- sync: fix semaphore reopens after forget ([#&#8203;8021])
- net: surface errors from `SO_ERROR` on `recv` for UDP sockets on Linux
([#&#8203;8001])

##### Fixed (unstable)

- metrics: fix `worker_local_schedule_count` test ([#&#8203;8008])
- rt: do not leak fd when cancelling io\_uring open operation
([#&#8203;7983])

[#&#8203;7983]: https://redirect.github.com/tokio-rs/tokio/pull/7983

[#&#8203;8001]: https://redirect.github.com/tokio-rs/tokio/pull/8001

[#&#8203;8008]: https://redirect.github.com/tokio-rs/tokio/pull/8008

[#&#8203;8021]: https://redirect.github.com/tokio-rs/tokio/pull/8021

###
[`v1.51.0`](https://redirect.github.com/tokio-rs/tokio/releases/tag/tokio-1.51.0):
Tokio v1.51.0

[Compare
Source](https://redirect.github.com/tokio-rs/tokio/compare/tokio-1.50.0...tokio-1.51.0)

##### 1.51.0 (April 3rd, 2026)

##### Added

- net: implement `get_peer_cred` on Hurd ([#&#8203;7989])
- runtime: add `tokio::runtime::worker_index()` ([#&#8203;7921])
- runtime: add runtime name ([#&#8203;7924])
- runtime: stabilize `LocalRuntime` ([#&#8203;7557])
- wasm: add wasm32-wasip2 networking support ([#&#8203;7933])

##### Changed

- runtime: steal tasks from the LIFO slot ([#&#8203;7431])

##### Fixed

- docs: do not show "Available on non-loom only." doc label
([#&#8203;7977])
- macros: improve overall macro hygiene ([#&#8203;7997])
- sync: fix `notify_waiters` priority in `Notify` ([#&#8203;7996])
- sync: fix panic in `Chan::recv_many` when called with non-empty vector
on closed channel ([#&#8203;7991])

[#&#8203;7431]: https://redirect.github.com/tokio-rs/tokio/pull/7431

[#&#8203;7557]: https://redirect.github.com/tokio-rs/tokio/pull/7557

[#&#8203;7921]: https://redirect.github.com/tokio-rs/tokio/pull/7921

[#&#8203;7924]: https://redirect.github.com/tokio-rs/tokio/pull/7924

[#&#8203;7933]: https://redirect.github.com/tokio-rs/tokio/pull/7933

[#&#8203;7977]: https://redirect.github.com/tokio-rs/tokio/pull/7977

[#&#8203;7989]: https://redirect.github.com/tokio-rs/tokio/pull/7989

[#&#8203;7991]: https://redirect.github.com/tokio-rs/tokio/pull/7991

[#&#8203;7996]: https://redirect.github.com/tokio-rs/tokio/pull/7996

[#&#8203;7997]: https://redirect.github.com/tokio-rs/tokio/pull/7997

###
[`v1.50.0`](https://redirect.github.com/tokio-rs/tokio/releases/tag/tokio-1.50.0):
Tokio v1.50.0

[Compare
Source](https://redirect.github.com/tokio-rs/tokio/compare/tokio-1.49.0...tokio-1.50.0)

### 1.50.0 (Mar 3rd, 2026)

##### Added

- net: add `TcpStream::set_zero_linger` ([#&#8203;7837])
- rt: add `is_rt_shutdown_err` ([#&#8203;7771])

##### Changed

- io: add optimizer hint that `memchr` returns in-bounds pointer
([#&#8203;7792])
- io: implement vectored writes for `write_buf` ([#&#8203;7871])
- runtime: panic when `event_interval` is set to 0 ([#&#8203;7838])
- runtime: shorten default thread name to fit in Linux limit
([#&#8203;7880])
- signal: remember the result of `SetConsoleCtrlHandler`
([#&#8203;7833])
- signal: specialize windows `Registry` ([#&#8203;7885])

##### Fixed

- io: always cleanup `AsyncFd` registration list on deregister
([#&#8203;7773])
- macros: remove (most) local `use` declarations in `tokio::select!`
([#&#8203;7929])
- net: fix `GET_BUF_SIZE` constant for `target_os = "android"`
([#&#8203;7889])
- runtime: avoid redundant unpark in current\_thread scheduler
([#&#8203;7834])
- runtime: don't park in `current_thread` if `before_park` defers waker
([#&#8203;7835])
- io: fix write readiness on ESP32 on short writes ([#&#8203;7872])
- runtime: wake deferred tasks before entering `block_in_place`
([#&#8203;7879])
- sync: drop rx waker when oneshot receiver is dropped ([#&#8203;7886])
- runtime: fix double increment of `num_idle_threads` on shutdown
([#&#8203;7910], [#&#8203;7918], [#&#8203;7922])

##### Unstable

- fs: check for io-uring opcode support ([#&#8203;7815])
- runtime: avoid lock acquisition after uring init ([#&#8203;7850])

##### Documented

- docs: update outdated unstable features section ([#&#8203;7839])
- io: clarify the behavior of `AsyncWriteExt::shutdown()`
([#&#8203;7908])
- io: explain how to flush stdout/stderr ([#&#8203;7904])
- io: fix incorrect and confusing `AsyncWrite` documentation
([#&#8203;7875])
- rt: clarify the documentation of `Runtime::spawn` ([#&#8203;7803])
- rt: fix missing quotation in docs ([#&#8203;7925])
- runtime: correct the default thread name in docs ([#&#8203;7896])
- runtime: fix `event_interval` doc ([#&#8203;7932])
- sync: clarify RwLock fairness documentation ([#&#8203;7919])
- sync: clarify that `recv` returns `None` once closed and no more
messages ([#&#8203;7920])
- task: clarify when to use `spawn_blocking` vs dedicated threads
([#&#8203;7923])
- task: doc that task drops before `JoinHandle` completion
([#&#8203;7825])
- signal: guarantee that listeners never return `None` ([#&#8203;7869])
- task: fix task module feature flags in docs ([#&#8203;7891])
- task: fix two typos ([#&#8203;7913])
- task: improve the docs of `Builder::spawn_local` ([#&#8203;7828])
- time: add docs about auto-advance and when to use sleep
([#&#8203;7858])
- util: fix typo in docs ([#&#8203;7926])

[#&#8203;7771]: https://redirect.github.com/tokio-rs/tokio/pull/7771

[#&#8203;7773]: https://redirect.github.com/tokio-rs/tokio/pull/7773

[#&#8203;7792]: https://redirect.github.com/tokio-rs/tokio/pull/7792

[#&#8203;7803]: https://redirect.github.com/tokio-rs/tokio/pull/7803

[#&#8203;7815]: https://redirect.github.com/tokio-rs/tokio/pull/7815

[#&#8203;7825]: https://redirect.github.com/tokio-rs/tokio/pull/7825

[#&#8203;7828]: https://redirect.github.com/tokio-rs/tokio/pull/7828

[#&#8203;7833]: https://redirect.github.com/tokio-rs/tokio/pull/7833

[#&#8203;7834]: https://redirect.github.com/tokio-rs/tokio/pull/7834

[#&#8203;7835]: https://redirect.github.com/tokio-rs/tokio/pull/7835

[#&#8203;7837]: https://redirect.github.com/tokio-rs/tokio/pull/7837

[#&#8203;7838]: https://redirect.github.com/tokio-rs/tokio/pull/7838

[#&#8203;7839]: https://redirect.github.com/tokio-rs/tokio/pull/7839

[#&#8203;7850]: https://redirect.github.com/tokio-rs/tokio/pull/7850

[#&#8203;7858]: https://redirect.github.com/tokio-rs/tokio/pull/7858

[#&#8203;7869]: https://redirect.github.com/tokio-rs/tokio/pull/7869

[#&#8203;7871]: https://redirect.github.com/tokio-rs/tokio/pull/7871

[#&#8203;7872]: https://redirect.github.com/tokio-rs/tokio/pull/7872

[#&#8203;7875]: https://redirect.github.com/tokio-rs/tokio/pull/7875

[#&#8203;7879]: https://redirect.github.com/tokio-rs/tokio/pull/7879

[#&#8203;7880]: https://redirect.github.com/tokio-rs/tokio/pull/7880

[#&#8203;7885]: https://redirect.github.com/tokio-rs/tokio/pull/7885

[#&#8203;7886]: https://redirect.github.com/tokio-rs/tokio/pull/7886

[#&#8203;7889]: https://redirect.github.com/tokio-rs/tokio/pull/7889

[#&#8203;7891]: https://redirect.github.com/tokio-rs/tokio/pull/7891

[#&#8203;7896]: https://redirect.github.com/tokio-rs/tokio/pull/7896

[#&#8203;7904]: https://redirect.github.com/tokio-rs/tokio/pull/7904

[#&#8203;7908]: https://redirect.github.com/tokio-rs/tokio/pull/7908

[#&#8203;7910]: https://redirect.github.com/tokio-rs/tokio/pull/7910

[#&#8203;7913]: https://redirect.github.com/tokio-rs/tokio/pull/7913

[#&#8203;7918]: https://redirect.github.com/tokio-rs/tokio/pull/7918

[#&#8203;7919]: https://redirect.github.com/tokio-rs/tokio/pull/7919

[#&#8203;7920]: https://redirect.github.com/tokio-rs/tokio/pull/7920

[#&#8203;7922]: https://redirect.github.com/tokio-rs/tokio/pull/7922

[#&#8203;7923]: https://redirect.github.com/tokio-rs/tokio/pull/7923

[#&#8203;7925]: https://redirect.github.com/tokio-rs/tokio/pull/7925

[#&#8203;7926]: https://redirect.github.com/tokio-rs/tokio/pull/7926

[#&#8203;7929]: https://redirect.github.com/tokio-rs/tokio/pull/7929

[#&#8203;7932]: https://redirect.github.com/tokio-rs/tokio/pull/7932

###
[`v1.49.0`](https://redirect.github.com/tokio-rs/tokio/releases/tag/tokio-1.49.0):
Tokio v1.49.0

[Compare
Source](https://redirect.github.com/tokio-rs/tokio/compare/tokio-1.48.0...tokio-1.49.0)

### 1.49.0 (January 3rd, 2026)

##### Added

- net: add support for `TCLASS` option on IPv6 ([#&#8203;7781])
- runtime: stabilize `runtime::id::Id` ([#&#8203;7125])
- task: implement `Extend` for `JoinSet` ([#&#8203;7195])
- task: stabilize the `LocalSet::id()` ([#&#8203;7776])

##### Changed

- net: deprecate `{TcpStream,TcpSocket}::set_linger` ([#&#8203;7752])

##### Fixed

- macros: fix the hygiene issue of `join!` and `try_join!`
([#&#8203;7766])
- runtime: revert "replace manual vtable definitions with Wake"
([#&#8203;7699])
- sync: return `TryRecvError::Disconnected` from `Receiver::try_recv`
after `Receiver::close` ([#&#8203;7686])
- task: remove unnecessary trait bounds on the `Debug` implementation
([#&#8203;7720])

##### Unstable

- fs: handle `EINTR` in `fs::write` for io-uring ([#&#8203;7786])
- fs: support io-uring with `tokio::fs::read` ([#&#8203;7696])
- runtime: disable io-uring on `EPERM` ([#&#8203;7724])
- time: add alternative timer for better multicore scalability
([#&#8203;7467])

##### Documented

- docs: fix a typos in `bounded.rs` and `park.rs` ([#&#8203;7817])
- io: add `SyncIoBridge` cross-references to `copy` and `copy_buf`
([#&#8203;7798])
- io: doc that `AsyncWrite` does not inherit from `std::io::Write`
([#&#8203;7705])
- metrics: clarify that `num_alive_tasks` is not strongly consistent
([#&#8203;7614])
- net: clarify the cancellation safety of the `TcpStream::peek`
([#&#8203;7305])
- net: clarify the drop behavior of `unix::OwnedWriteHalf`
([#&#8203;7742])
- net: clarify the platform-dependent backlog in `TcpSocket` docs
([#&#8203;7738])
- runtime: mention `LocalRuntime` in `new_current_thread` docs
([#&#8203;7820])
- sync: add missing period to `mpsc::Sender::try_send` docs
([#&#8203;7721])
- sync: clarify the cancellation safety of `oneshot::Receiver`
([#&#8203;7780])
- sync: improve the docs for the `errors` of mpsc ([#&#8203;7722])
- task: add example for `spawn_local` usage on local runtime
([#&#8203;7689])

[#&#8203;7125]: https://redirect.github.com/tokio-rs/tokio/pull/7125

[#&#8203;7195]: https://redirect.github.com/tokio-rs/tokio/pull/7195

[#&#8203;7305]: https://redirect.github.com/tokio-rs/tokio/pull/7305

[#&#8203;7467]: https://redirect.github.com/tokio-rs/tokio/pull/7467

[#&#8203;7614]: https://redirect.github.com/tokio-rs/tokio/pull/7614

[#&#8203;7686]: https://redirect.github.com/tokio-rs/tokio/pull/7686

[#&#8203;7689]: https://redirect.github.com/tokio-rs/tokio/pull/7689

[#&#8203;7696]: https://redirect.github.com/tokio-rs/tokio/pull/7696

[#&#8203;7699]: https://redirect.github.com/tokio-rs/tokio/pull/7699

[#&#8203;7705]: https://redirect.github.com/tokio-rs/tokio/pull/7705

[#&#8203;7720]: https://redirect.github.com/tokio-rs/tokio/pull/7720

[#&#8203;7721]: https://redirect.github.com/tokio-rs/tokio/pull/7721

[#&#8203;7722]: https://redirect.github.com/tokio-rs/tokio/pull/7722

[#&#8203;7724]: https://redirect.github.com/tokio-rs/tokio/pull/7724

[#&#8203;7738]: https://redirect.github.com/tokio-rs/tokio/pull/7738

[#&#8203;7742]: https://redirect.github.com/tokio-rs/tokio/pull/7742

[#&#8203;7752]: https://redirect.github.com/tokio-rs/tokio/pull/7752

[#&#8203;7766]: https://redirect.github.com/tokio-rs/tokio/pull/7766

[#&#8203;7776]: https://redirect.github.com/tokio-rs/tokio/pull/7776

[#&#8203;7780]: https://redirect.github.com/tokio-rs/tokio/pull/7780

[#&#8203;7781]: https://redirect.github.com/tokio-rs/tokio/pull/7781

[#&#8203;7786]: https://redirect.github.com/tokio-rs/tokio/pull/7786

[#&#8203;7798]: https://redirect.github.com/tokio-rs/tokio/pull/7798

[#&#8203;7817]: https://redirect.github.com/tokio-rs/tokio/pull/7817

[#&#8203;7820]: https://redirect.github.com/tokio-rs/tokio/pull/7820

</details>

<details>
<summary>servo/rust-url (url)</summary>

###
[`v2.5.8`](https://redirect.github.com/servo/rust-url/compare/v2.5.7...v2.5.8)

[Compare
Source](https://redirect.github.com/servo/rust-url/compare/v2.5.7...v2.5.8)

</details>

---

### Configuration

📅 **Schedule**: (in timezone America/Los_Angeles)

- Branch creation
  - "after 4pm on friday"
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, 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/sdwilsh/jellyfin-remote-proxy).

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant