Summary
Since 2026-06-30, any fresh cargo build that resolves the LiveKit Rust SDK from
crates.io fails inside libwebrtc. The June 30 release workflow published
webrtc-sys 0.3.36 (which changed the FrameMetadata FFI, adding user_data)
but crashed before publishing the matching libwebrtc 0.3.39 and livekit 0.7.50.
Both published libwebrtc versions (0.3.37, 0.3.38) declare webrtc-sys = "^0.3.35",
so cargo resolves them against 0.3.36 and compilation fails:
error[E0063]: missing field `user_data` in initializer of `webrtc_sys::video_track::ffi::FrameMetadata`
--> libwebrtc-0.3.38/src/native/video_source.rs:88
error[E0061]: this method takes 4 arguments but 3 arguments were supplied
--> libwebrtc-0.3.38/src/native/packet_trailer.rs:192 (store_frame_metadata)
This doesn't show up in your CI because the workspace builds with path
dependencies — it only affects downstream consumers resolving from crates.io.
Root cause
The publish-crates job of the June 30 "Release packages" run failed mid-publish
with a cargo 1.96.0 internal error:
https://github.com/livekit/rust-sdks/actions/runs/28420077950/job/84211146107
Uploaded livekit-protocol v0.7.10 to registry `crates-io`
Uploaded webrtc-sys v0.3.36 to registry `crates-io`
error: no packages ready to publish but 2 packages remain in plan with 1 awaiting
confirmation: libwebrtc v0.3.39 and livekit v0.7.50
note: this is an unexpected cargo internal error
note: cargo 1.96.0 (30a34c682 2026-05-25)
This is a known cargo bug in workspace publishing
(rust-lang/cargo#17093, also #17028/#17100/#17144), fixed in
rust-lang/cargo#17071. The fix is in nightly since 2026-06-12, was beta-backported
(rust-lang/rust#157787), and reaches stable on July 9.
Suggested fix
Re-run the publish for the two missing crates (libwebrtc 0.3.39,
livekit 0.7.50) using a beta or nightly toolchain — the cargo maintainer's
recommended interim approach in rust-lang/cargo#17093 — or wait for the July 9
stable. You may also want to pin the release workflow's toolchain accordingly
until then.
As an opinion from the downstream side (feel free to disagree — the republish
above fully resolves this): declaring the libwebrtc → webrtc-sys dependency
with an exact requirement (=x.y.z) would have made this incident a non-event,
since a newer webrtc-sys on the registry could never retroactively break
already-published libwebrtc versions. The tradeoff is that compatible
webrtc-sys patches would then require a libwebrtc republish to reach users.
Workaround for anyone hitting this
livekit = { version = "0.7", features = ["tokio", "rustls-tls-native-roots"] }
webrtc-sys = "=0.3.35" # pin until libwebrtc 0.3.39 is published
Summary
Since 2026-06-30, any fresh
cargo buildthat resolves the LiveKit Rust SDK fromcrates.io fails inside
libwebrtc. The June 30 release workflow publishedwebrtc-sys 0.3.36(which changed theFrameMetadataFFI, addinguser_data)but crashed before publishing the matching
libwebrtc 0.3.39andlivekit 0.7.50.Both published
libwebrtcversions (0.3.37, 0.3.38) declarewebrtc-sys = "^0.3.35",so cargo resolves them against 0.3.36 and compilation fails:
This doesn't show up in your CI because the workspace builds with path
dependencies — it only affects downstream consumers resolving from crates.io.
Root cause
The
publish-cratesjob of the June 30 "Release packages" run failed mid-publishwith a cargo 1.96.0 internal error:
https://github.com/livekit/rust-sdks/actions/runs/28420077950/job/84211146107
This is a known cargo bug in workspace publishing
(rust-lang/cargo#17093, also #17028/#17100/#17144), fixed in
rust-lang/cargo#17071. The fix is in nightly since 2026-06-12, was beta-backported
(rust-lang/rust#157787), and reaches stable on July 9.
Suggested fix
Re-run the publish for the two missing crates (
libwebrtc 0.3.39,livekit 0.7.50) using a beta or nightly toolchain — the cargo maintainer'srecommended interim approach in rust-lang/cargo#17093 — or wait for the July 9
stable. You may also want to pin the release workflow's toolchain accordingly
until then.
As an opinion from the downstream side (feel free to disagree — the republish
above fully resolves this): declaring the
libwebrtc→webrtc-sysdependencywith an exact requirement (
=x.y.z) would have made this incident a non-event,since a newer
webrtc-syson the registry could never retroactively breakalready-published
libwebrtcversions. The tradeoff is that compatiblewebrtc-syspatches would then require alibwebrtcrepublish to reach users.Workaround for anyone hitting this