Release packages - #1423
Release packages#1423knope-bot[bot] wants to merge 1 commit into
Conversation
There was a problem hiding this comment.
Note
This report is out of date. Scroll down for Devin Review's latest report on this PR.
🔍 Devin Review: 1 flag
Not posted on this PR by your GitHub settings — view it in Devin Review. (Configure)
258765c to
5fef4ae
Compare
There was a problem hiding this comment.
Note
This report is out of date. Scroll down for Devin Review's latest report on this PR.
Devin Review found 1 new potential issue.
🐛 1 issue in files not directly in the diff
🐛 Dropped pumps leave threads detached
When a source remains blocked, RunningPump::drop only signals stop and detaches the join handle. The thread and captured resources can remain alive indefinitely.
1 flag not posted on this PR by your GitHub settings — view it in Devin Review. (Configure)
cc8f388 to
3414f91
Compare
3414f91 to
e2de867
Compare
There was a problem hiding this comment.
Devin Review found 1 new potential issue.
2 flags not posted on this PR by your GitHub settings — view them in Devin Review. (Configure)
| name = "livekit-datatrack" | ||
| description = "Data track core for LiveKit" | ||
| version = "0.1.15" | ||
| version = "0.1.16" |
There was a problem hiding this comment.
🟡 Patch release breaks Rust consumers
A ^0.1.15 dependency can resolve 0.1.16, but both error Failed variants changed from unit to struct variants. Existing Rust consumers then fail to compile after a compatible update.
Learn more
Cargo treats releases within 0.1.x as semver-compatible. The error variants are public through the crate's backend API, and changing a unit variant to a struct variant breaks both construction and pattern matching. A resolver can therefore upgrade existing consumers automatically and hand them source that no longer compiles.
Example: A consumer declaring livekit-datatrack = "0.1.15" and matching EncryptionError::Failed can receive 0.1.16 during a lockfile update. Its unchanged match no longer compiles because the variant now requires { reason }.
Recommended fix: Release livekit-datatrack as 0.2.0 and update the workspace dependency and every generated release reference accordingly. Alternatively, preserve the existing Rust variant shape while introducing a separate UniFFI-facing error type.
| version = "0.1.16" | |
| version = "0.2.0" |
Was this helpful? React with 👍 or 👎 to provide feedback.
Important
Merging this pull request will create these releases
livekit-token 0.2.0 (2026-09-20)
Breaking Changes
VideoGrantsgains theagentgrant andClaimsthekindclaim (withAccessToken::with_kind), which the Go, Python and JS SDKs already carry. Anagent worker's token is
VideoGrants { agent: true }and a simulated job'sparticipant token is
kind: "agent"; neither could be minted from Rust before.livekit-uniffiexposes both:TokenOptions.kind,Claims.kind, andagenton its
VideoGrantsrecord.Breaking: the four grants the server infers when absent --
can_publish,can_subscribe,can_publish_data,can_update_own_metadata-- are nowOption<bool>, as in the Go and JS SDKs.Noneleaves the decision to theserver, and the new getters (
can_publish(),can_subscribe(),can_publish_data(),can_update_own_metadata()) read a token the way theserver does,
can_publish_datafalling back tocan_publishincluded. Codethat set these fields writes
Some(..); code that read them uses the getters.The same fields are optional on the
livekit-uniffirecord, andlivekit-apire-exports the crate aslivekit_api::access_token, so bothcarry the change.
Nothing at its default is written into the token any more: unset claims and
grants are omitted, as the server's own
omitemptygrants are. Verificationof existing tokens is unchanged.
livekit-capture 0.1.2 (2026-09-20)
Features
Fixes
EncryptionError::FailedandDecryptionError::Failedcarry areasonstring and are no longerflat_error,so a foreign
EncryptionProviderorDecryptionProviderreturning an error no longer aborts the process with"Can't lift flat errors" -- a failed data track decrypt (no E2EE manager, key mismatch, corrupt frame) now
drops the frame and leaves the room connected.
Report the reconnect reason to the server when resuming.
Resumes previously sent no reason, so server-side telemetry could not attribute why Rust
clients reconnect — every resume looked like
RR_UNKNOWN. The engine now records what causedthe episode (signal disconnected, publisher failed, subscriber failed) and reports it on each
resume attempt. The v0 signalling path was also missing the
reconnect_reasonquery parameterentirely, so it would not have been reported even if a reason had been supplied.
Fix resume reporting success for a PeerConnection that had not recovered.
A resume decided recovery from
PeerConnectionState, which keeps readingConnectedfor tensof seconds after the far end goes away. A resume could therefore emit
Resumed— and soRoomEvent::ReconnectedwithConnectionState::Connected— for a session whose subscribertransport was dead, leaving applications with no signal that they had stopped receiving media.
A resume now requires each transport to have entered
Connectedsince the resume began, or tohave held it throughout, rather than trusting the state it currently reports.
livekit-signaling 0.1.3 (2026-09-20)
Fixes
Report the reconnect reason to the server when resuming.
Resumes previously sent no reason, so server-side telemetry could not attribute why Rust
clients reconnect — every resume looked like
RR_UNKNOWN. The engine now records what causedthe episode (signal disconnected, publisher failed, subscriber failed) and reports it on each
resume attempt. The v0 signalling path was also missing the
reconnect_reasonquery parameterentirely, so it would not have been reported even if a reason had been supplied.
VideoGrantsgains theagentgrant andClaimsthekindclaim (withAccessToken::with_kind), which the Go, Python and JS SDKs already carry. Anagent worker's token is
VideoGrants { agent: true }and a simulated job'sparticipant token is
kind: "agent"; neither could be minted from Rust before.livekit-uniffiexposes both:TokenOptions.kind,Claims.kind, andagenton its
VideoGrantsrecord.Breaking: the four grants the server infers when absent --
can_publish,can_subscribe,can_publish_data,can_update_own_metadata-- are nowOption<bool>, as in the Go and JS SDKs.Noneleaves the decision to theserver, and the new getters (
can_publish(),can_subscribe(),can_publish_data(),can_update_own_metadata()) read a token the way theserver does,
can_publish_datafalling back tocan_publishincluded. Codethat set these fields writes
Some(..); code that read them uses the getters.The same fields are optional on the
livekit-uniffirecord, andlivekit-apire-exports the crate aslivekit_api::access_token, so bothcarry the change.
Nothing at its default is written into the token any more: unset claims and
grants are omitted, as the server's own
omitemptygrants are. Verificationof existing tokens is unchanged.
livekit-api 0.8.0 (2026-09-20)
Breaking Changes
VideoGrantsgains theagentgrant andClaimsthekindclaim (withAccessToken::with_kind), which the Go, Python and JS SDKs already carry. Anagent worker's token is
VideoGrants { agent: true }and a simulated job'sparticipant token is
kind: "agent"; neither could be minted from Rust before.livekit-uniffiexposes both:TokenOptions.kind,Claims.kind, andagenton its
VideoGrantsrecord.Breaking: the four grants the server infers when absent --
can_publish,can_subscribe,can_publish_data,can_update_own_metadata-- are nowOption<bool>, as in the Go and JS SDKs.Noneleaves the decision to theserver, and the new getters (
can_publish(),can_subscribe(),can_publish_data(),can_update_own_metadata()) read a token the way theserver does,
can_publish_datafalling back tocan_publishincluded. Codethat set these fields writes
Some(..); code that read them uses the getters.The same fields are optional on the
livekit-uniffirecord, andlivekit-apire-exports the crate aslivekit_api::access_token, so bothcarry the change.
Nothing at its default is written into the token any more: unset claims and
grants are omitted, as the server's own
omitemptygrants are. Verificationof existing tokens is unchanged.
Fixes
Report the reconnect reason to the server when resuming.
Resumes previously sent no reason, so server-side telemetry could not attribute why Rust
clients reconnect — every resume looked like
RR_UNKNOWN. The engine now records what causedthe episode (signal disconnected, publisher failed, subscriber failed) and reports it on each
resume attempt. The v0 signalling path was also missing the
reconnect_reasonquery parameterentirely, so it would not have been reported even if a reason had been supplied.
livekit-datatrack 0.1.16 (2026-09-20)
Features
EncryptionError::FailedandDecryptionError::Failedcarry areasonstring and are no longerflat_error,so a foreign
EncryptionProviderorDecryptionProviderreturning an error no longer aborts the process with"Can't lift flat errors" -- a failed data track decrypt (no E2EE manager, key mismatch, corrupt frame) now
drops the frame and leaves the room connected.
livekit-uniffi 0.2.0 (2026-09-20)
Breaking Changes
VideoGrantsgains theagentgrant andClaimsthekindclaim (withAccessToken::with_kind), which the Go, Python and JS SDKs already carry. Anagent worker's token is
VideoGrants { agent: true }and a simulated job'sparticipant token is
kind: "agent"; neither could be minted from Rust before.livekit-uniffiexposes both:TokenOptions.kind,Claims.kind, andagenton its
VideoGrantsrecord.Breaking: the four grants the server infers when absent --
can_publish,can_subscribe,can_publish_data,can_update_own_metadata-- are nowOption<bool>, as in the Go and JS SDKs.Noneleaves the decision to theserver, and the new getters (
can_publish(),can_subscribe(),can_publish_data(),can_update_own_metadata()) read a token the way theserver does,
can_publish_datafalling back tocan_publishincluded. Codethat set these fields writes
Some(..); code that read them uses the getters.The same fields are optional on the
livekit-uniffirecord, andlivekit-apire-exports the crate aslivekit_api::access_token, so bothcarry the change.
Nothing at its default is written into the token any more: unset claims and
grants are omitted, as the server's own
omitemptygrants are. Verificationof existing tokens is unchanged.
Features
EncryptionError::FailedandDecryptionError::Failedcarry areasonstring and are no longerflat_error,so a foreign
EncryptionProviderorDecryptionProviderreturning an error no longer aborts the process with"Can't lift flat errors" -- a failed data track decrypt (no E2EE manager, key mismatch, corrupt frame) now
drops the frame and leaves the room connected.
Fixes
Report the reconnect reason to the server when resuming.
Resumes previously sent no reason, so server-side telemetry could not attribute why Rust
clients reconnect — every resume looked like
RR_UNKNOWN. The engine now records what causedthe episode (signal disconnected, publisher failed, subscriber failed) and reports it on each
resume attempt. The v0 signalling path was also missing the
reconnect_reasonquery parameterentirely, so it would not have been reported even if a reason had been supplied.
livekit 0.9.2 (2026-09-20)
Fixes
EncryptionError::FailedandDecryptionError::Failedcarry areasonstring and are no longerflat_error,so a foreign
EncryptionProviderorDecryptionProviderreturning an error no longer aborts the process with"Can't lift flat errors" -- a failed data track decrypt (no E2EE manager, key mismatch, corrupt frame) now
drops the frame and leaves the room connected.
Report the reconnect reason to the server when resuming.
Resumes previously sent no reason, so server-side telemetry could not attribute why Rust
clients reconnect — every resume looked like
RR_UNKNOWN. The engine now records what causedthe episode (signal disconnected, publisher failed, subscriber failed) and reports it on each
resume attempt. The v0 signalling path was also missing the
reconnect_reasonquery parameterentirely, so it would not have been reported even if a reason had been supplied.
Fix resume reporting success for a PeerConnection that had not recovered.
A resume decided recovery from
PeerConnectionState, which keeps readingConnectedfor tensof seconds after the far end goes away. A resume could therefore emit
Resumed— and soRoomEvent::ReconnectedwithConnectionState::Connected— for a session whose subscribertransport was dead, leaving applications with no signal that they had stopped receiving media.
A resume now requires each transport to have entered
Connectedsince the resume began, or tohave held it throughout, rather than trusting the state it currently reports.
VideoGrantsgains theagentgrant andClaimsthekindclaim (withAccessToken::with_kind), which the Go, Python and JS SDKs already carry. Anagent worker's token is
VideoGrants { agent: true }and a simulated job'sparticipant token is
kind: "agent"; neither could be minted from Rust before.livekit-uniffiexposes both:TokenOptions.kind,Claims.kind, andagenton its
VideoGrantsrecord.Breaking: the four grants the server infers when absent --
can_publish,can_subscribe,can_publish_data,can_update_own_metadata-- are nowOption<bool>, as in the Go and JS SDKs.Noneleaves the decision to theserver, and the new getters (
can_publish(),can_subscribe(),can_publish_data(),can_update_own_metadata()) read a token the way theserver does,
can_publish_datafalling back tocan_publishincluded. Codethat set these fields writes
Some(..); code that read them uses the getters.The same fields are optional on the
livekit-uniffirecord, andlivekit-apire-exports the crate aslivekit_api::access_token, so bothcarry the change.
Nothing at its default is written into the token any more: unset claims and
grants are omitted, as the server's own
omitemptygrants are. Verificationof existing tokens is unchanged.
livekit-ffi 0.12.80 (2026-09-20)
Features
Fixes
EncryptionError::FailedandDecryptionError::Failedcarry areasonstring and are no longerflat_error,so a foreign
EncryptionProviderorDecryptionProviderreturning an error no longer aborts the process with"Can't lift flat errors" -- a failed data track decrypt (no E2EE manager, key mismatch, corrupt frame) now
drops the frame and leaves the room connected.
Report the reconnect reason to the server when resuming.
Resumes previously sent no reason, so server-side telemetry could not attribute why Rust
clients reconnect — every resume looked like
RR_UNKNOWN. The engine now records what causedthe episode (signal disconnected, publisher failed, subscriber failed) and reports it on each
resume attempt. The v0 signalling path was also missing the
reconnect_reasonquery parameterentirely, so it would not have been reported even if a reason had been supplied.
Fix resume reporting success for a PeerConnection that had not recovered.
A resume decided recovery from
PeerConnectionState, which keeps readingConnectedfor tensof seconds after the far end goes away. A resume could therefore emit
Resumed— and soRoomEvent::ReconnectedwithConnectionState::Connected— for a session whose subscribertransport was dead, leaving applications with no signal that they had stopped receiving media.
A resume now requires each transport to have entered
Connectedsince the resume began, or tohave held it throughout, rather than trusting the state it currently reports.
VideoGrantsgains theagentgrant andClaimsthekindclaim (withAccessToken::with_kind), which the Go, Python and JS SDKs already carry. Anagent worker's token is
VideoGrants { agent: true }and a simulated job'sparticipant token is
kind: "agent"; neither could be minted from Rust before.livekit-uniffiexposes both:TokenOptions.kind,Claims.kind, andagenton its
VideoGrantsrecord.Breaking: the four grants the server infers when absent --
can_publish,can_subscribe,can_publish_data,can_update_own_metadata-- are nowOption<bool>, as in the Go and JS SDKs.Noneleaves the decision to theserver, and the new getters (
can_publish(),can_subscribe(),can_publish_data(),can_update_own_metadata()) read a token the way theserver does,
can_publish_datafalling back tocan_publishincluded. Codethat set these fields writes
Some(..); code that read them uses the getters.The same fields are optional on the
livekit-uniffirecord, andlivekit-apire-exports the crate aslivekit_api::access_token, so bothcarry the change.
Nothing at its default is written into the token any more: unset claims and
grants are omitted, as the server's own
omitemptygrants are. Verificationof existing tokens is unchanged.