From 3414f9111c7aa97dafaaf0403ef6d86da2b35170 Mon Sep 17 00:00:00 2001 From: "knope-bot[bot]" <152252888+knope-bot[bot]@users.noreply.github.com> Date: Fri, 18 Sep 2026 19:27:17 +0000 Subject: [PATCH] Release packages --- .../automatic_capture_thread_join_on_drop.md | 5 -- .changeset/capture-ffi.md | 5 -- .changeset/capture-source-clock.md | 6 --- .changeset/capture-source-pattern.md | 6 --- .../report_reconnect_reason_on_resume.md | 16 ------ ...resume_requires_evidence_of_pc_recovery.md | 14 ----- .changeset/skip-leave-on-server-disconnect.md | 7 --- .changeset/token_agent_grant_and_kind.md | 30 ----------- Cargo.lock | 14 ++--- Cargo.toml | 12 ++--- livekit-api/CHANGELOG.md | 37 +++++++++++++ livekit-api/Cargo.toml | 2 +- livekit-capture/CHANGELOG.md | 29 +++++++++++ livekit-capture/Cargo.toml | 2 +- .../npm/darwin-arm64/package.json | 2 +- .../npm/darwin-x64/package.json | 2 +- .../npm/linux-arm64-gnu/package.json | 2 +- .../npm/linux-x64-gnu/package.json | 2 +- .../npm/win32-x64-msvc/package.json | 2 +- livekit-ffi-node-bindings/package.json | 2 +- livekit-ffi/CHANGELOG.md | 52 +++++++++++++++++++ livekit-ffi/Cargo.toml | 2 +- livekit-signaling/CHANGELOG.md | 35 +++++++++++++ livekit-signaling/Cargo.toml | 2 +- livekit-token/CHANGELOG.md | 27 ++++++++++ livekit-token/Cargo.toml | 2 +- livekit-uniffi/CHANGELOG.md | 37 +++++++++++++ livekit-uniffi/Cargo.toml | 2 +- livekit/CHANGELOG.md | 46 ++++++++++++++++ livekit/Cargo.toml | 2 +- 30 files changed, 289 insertions(+), 115 deletions(-) delete mode 100644 .changeset/automatic_capture_thread_join_on_drop.md delete mode 100644 .changeset/capture-ffi.md delete mode 100644 .changeset/capture-source-clock.md delete mode 100644 .changeset/capture-source-pattern.md delete mode 100644 .changeset/report_reconnect_reason_on_resume.md delete mode 100644 .changeset/resume_requires_evidence_of_pc_recovery.md delete mode 100644 .changeset/skip-leave-on-server-disconnect.md delete mode 100644 .changeset/token_agent_grant_and_kind.md diff --git a/.changeset/automatic_capture_thread_join_on_drop.md b/.changeset/automatic_capture_thread_join_on_drop.md deleted file mode 100644 index 7be9acba0..000000000 --- a/.changeset/automatic_capture_thread_join_on_drop.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -livekit-capture: patch ---- - -# Automatic capture thread join on drop diff --git a/.changeset/capture-ffi.md b/.changeset/capture-ffi.md deleted file mode 100644 index dacd696af..000000000 --- a/.changeset/capture-ffi.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -livekit-ffi: minor ---- - -Add the scaffolding for exposing video capture over FFI. diff --git a/.changeset/capture-source-clock.md b/.changeset/capture-source-clock.md deleted file mode 100644 index 628dcaf2c..000000000 --- a/.changeset/capture-source-clock.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -livekit-capture: minor -livekit-ffi: minor ---- - -Add a capture source that renders a wall clock on the GPU. diff --git a/.changeset/capture-source-pattern.md b/.changeset/capture-source-pattern.md deleted file mode 100644 index 868ad4ca7..000000000 --- a/.changeset/capture-source-pattern.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -livekit-capture: minor -livekit-ffi: minor ---- - -Add a capture source that renders a test pattern on the GPU. diff --git a/.changeset/report_reconnect_reason_on_resume.md b/.changeset/report_reconnect_reason_on_resume.md deleted file mode 100644 index 32994edbb..000000000 --- a/.changeset/report_reconnect_reason_on_resume.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -livekit: patch -livekit-api: patch -livekit-capture: patch -livekit-ffi: patch -livekit-signaling: patch -livekit-uniffi: patch ---- - -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 caused -the episode (signal disconnected, publisher failed, subscriber failed) and reports it on each -resume attempt. The v0 signalling path was also missing the `reconnect_reason` query parameter -entirely, so it would not have been reported even if a reason had been supplied. diff --git a/.changeset/resume_requires_evidence_of_pc_recovery.md b/.changeset/resume_requires_evidence_of_pc_recovery.md deleted file mode 100644 index 9aa027793..000000000 --- a/.changeset/resume_requires_evidence_of_pc_recovery.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -livekit: patch -livekit-capture: patch -livekit-ffi: patch ---- - -Fix resume reporting success for a PeerConnection that had not recovered. - -A resume decided recovery from `PeerConnectionState`, which keeps reading `Connected` for tens -of seconds after the far end goes away. A resume could therefore emit `Resumed` — and so -`RoomEvent::Reconnected` with `ConnectionState::Connected` — for a session whose subscriber -transport was dead, leaving applications with no signal that they had stopped receiving media. -A resume now requires each transport to have entered `Connected` since the resume began, or to -have held it throughout, rather than trusting the state it currently reports. diff --git a/.changeset/skip-leave-on-server-disconnect.md b/.changeset/skip-leave-on-server-disconnect.md deleted file mode 100644 index 8ca885f91..000000000 --- a/.changeset/skip-leave-on-server-disconnect.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -livekit: patch -livekit-ffi: patch -livekit-capture: patch ---- - -Stop answering a server-initiated Leave (room deleted, duplicate identity) with a client Leave. The server has already ended the session and is closing the signalling socket, so the reply only ever produced the warning "dropping pass-through signal — no stream available" on every such disconnect. diff --git a/.changeset/token_agent_grant_and_kind.md b/.changeset/token_agent_grant_and_kind.md deleted file mode 100644 index f77865c03..000000000 --- a/.changeset/token_agent_grant_and_kind.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -livekit-token: major -livekit-uniffi: major -livekit-api: major -livekit: patch -livekit-ffi: patch -livekit-signaling: patch ---- - -`VideoGrants` gains the `agent` grant and `Claims` the `kind` claim (with -`AccessToken::with_kind`), which the Go, Python and JS SDKs already carry. An -agent worker's token is `VideoGrants { agent: true }` and a simulated job's -participant token is `kind: "agent"`; neither could be minted from Rust before. -`livekit-uniffi` exposes both: `TokenOptions.kind`, `Claims.kind`, and `agent` -on its `VideoGrants` record. - -**Breaking:** the four grants the server infers when absent -- `can_publish`, -`can_subscribe`, `can_publish_data`, `can_update_own_metadata` -- are now -`Option`, as in the Go and JS SDKs. `None` leaves the decision to the -server, and the new getters (`can_publish()`, `can_subscribe()`, -`can_publish_data()`, `can_update_own_metadata()`) read a token the way the -server does, `can_publish_data` falling back to `can_publish` included. Code -that set these fields writes `Some(..)`; code that read them uses the getters. -The same fields are optional on the `livekit-uniffi` record, and -`livekit-api` re-exports the crate as `livekit_api::access_token`, so both -carry the change. - -Nothing at its default is written into the token any more: unset claims and -grants are omitted, as the server's own `omitempty` grants are. Verification -of existing tokens is unchanged. diff --git a/Cargo.lock b/Cargo.lock index 28db47b34..ad406b932 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3592,7 +3592,7 @@ checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" [[package]] name = "livekit" -version = "0.9.1" +version = "0.9.2" dependencies = [ "anyhow", "base64 0.22.1", @@ -3629,7 +3629,7 @@ dependencies = [ [[package]] name = "livekit-api" -version = "0.7.1" +version = "0.8.0" dependencies = [ "base64 0.21.7", "http 1.4.2", @@ -3652,7 +3652,7 @@ dependencies = [ [[package]] name = "livekit-capture" -version = "0.1.1" +version = "0.1.2" dependencies = [ "bytes", "chrono", @@ -3722,7 +3722,7 @@ dependencies = [ [[package]] name = "livekit-ffi" -version = "0.12.79" +version = "0.12.80" dependencies = [ "bytes", "console-subscriber", @@ -3807,7 +3807,7 @@ dependencies = [ [[package]] name = "livekit-signaling" -version = "0.1.2" +version = "0.1.3" dependencies = [ "async-trait", "base64 0.21.7", @@ -3831,7 +3831,7 @@ dependencies = [ [[package]] name = "livekit-token" -version = "0.1.2" +version = "0.2.0" dependencies = [ "hmac", "jsonwebtoken", @@ -3858,7 +3858,7 @@ dependencies = [ [[package]] name = "livekit-uniffi" -version = "0.1.12" +version = "0.2.0" dependencies = [ "async-trait", "bytes", diff --git a/Cargo.toml b/Cargo.toml index dcdbc0140..2bbe8b7fd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -55,13 +55,13 @@ license = "Apache-2.0" device-info = { version = "0.1.1", path = "device-info" } imgproc = { version = "0.3.20", path = "imgproc" } libwebrtc = { version = "0.3.47", path = "libwebrtc" } -livekit = { version = "0.9.0", path = "livekit" } -livekit-api = { version = "0.7.0", path = "livekit-api" } -livekit-capture = { version = "0.1.1", path = "livekit-capture" } -livekit-ffi = { version = "0.12.79", path = "livekit-ffi" } +livekit = { version = "0.9.2", path = "livekit" } +livekit-api = { version = "0.8.0", path = "livekit-api" } +livekit-capture = { version = "0.1.2", path = "livekit-capture" } +livekit-ffi = { version = "0.12.80", path = "livekit-ffi" } livekit-datatrack = { version = "0.1.15", path = "livekit-datatrack" } -livekit-signaling = { version = "0.1.2", path = "livekit-signaling" } -livekit-token = { version = "0.1.2", path = "livekit-token" } +livekit-signaling = { version = "0.1.3", path = "livekit-signaling" } +livekit-token = { version = "0.2.0", path = "livekit-token" } livekit-token-source = { version = "0.1.3", path = "livekit-token-source" } livekit-common = { version = "0.1.3", path = "livekit-common" } livekit-data-stream = { version = "0.1.5", path = "livekit-data-stream" } diff --git a/livekit-api/CHANGELOG.md b/livekit-api/CHANGELOG.md index 6d3c3b304..0974ef637 100644 --- a/livekit-api/CHANGELOG.md +++ b/livekit-api/CHANGELOG.md @@ -7,6 +7,43 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## 0.8.0 (2026-09-18) + +### Breaking Changes + +#### `VideoGrants` gains the `agent` grant and `Claims` the `kind` claim (with + +`AccessToken::with_kind`), which the Go, Python and JS SDKs already carry. An +agent worker's token is `VideoGrants { agent: true }` and a simulated job's +participant token is `kind: "agent"`; neither could be minted from Rust before. +`livekit-uniffi` exposes both: `TokenOptions.kind`, `Claims.kind`, and `agent` +on its `VideoGrants` record. + +**Breaking:** the four grants the server infers when absent -- `can_publish`, +`can_subscribe`, `can_publish_data`, `can_update_own_metadata` -- are now +`Option`, as in the Go and JS SDKs. `None` leaves the decision to the +server, and the new getters (`can_publish()`, `can_subscribe()`, +`can_publish_data()`, `can_update_own_metadata()`) read a token the way the +server does, `can_publish_data` falling back to `can_publish` included. Code +that set these fields writes `Some(..)`; code that read them uses the getters. +The same fields are optional on the `livekit-uniffi` record, and +`livekit-api` re-exports the crate as `livekit_api::access_token`, so both +carry the change. + +Nothing at its default is written into the token any more: unset claims and +grants are omitted, as the server's own `omitempty` grants are. Verification +of 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 caused +the episode (signal disconnected, publisher failed, subscriber failed) and reports it on each +resume attempt. The v0 signalling path was also missing the `reconnect_reason` query parameter +entirely, so it would not have been reported even if a reason had been supplied. + ## 0.7.1 (2026-09-09) ### Fixes diff --git a/livekit-api/Cargo.toml b/livekit-api/Cargo.toml index b0b7ecbcb..8df0b785b 100644 --- a/livekit-api/Cargo.toml +++ b/livekit-api/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "livekit-api" -version = "0.7.1" +version = "0.8.0" license.workspace = true description = "Rust Server SDK for LiveKit" edition.workspace = true diff --git a/livekit-capture/CHANGELOG.md b/livekit-capture/CHANGELOG.md index a7a13954e..3ba9b509b 100644 --- a/livekit-capture/CHANGELOG.md +++ b/livekit-capture/CHANGELOG.md @@ -1,3 +1,32 @@ +## 0.1.2 (2026-09-18) + +### Features + +- Add a capture source that renders a wall clock on the GPU. +- Add a capture source that renders a test pattern on the GPU. + +### Fixes + +- Automatic capture thread join on drop +- Stop answering a server-initiated Leave (room deleted, duplicate identity) with a client Leave. The server has already ended the session and is closing the signalling socket, so the reply only ever produced the warning "dropping pass-through signal — no stream available" on every such disconnect. + +#### 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 caused +the episode (signal disconnected, publisher failed, subscriber failed) and reports it on each +resume attempt. The v0 signalling path was also missing the `reconnect_reason` query parameter +entirely, 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 reading `Connected` for tens +of seconds after the far end goes away. A resume could therefore emit `Resumed` — and so +`RoomEvent::Reconnected` with `ConnectionState::Connected` — for a session whose subscriber +transport was dead, leaving applications with no signal that they had stopped receiving media. +A resume now requires each transport to have entered `Connected` since the resume began, or to +have held it throughout, rather than trusting the state it currently reports. + ## 0.1.1 (2026-09-10) ### Features diff --git a/livekit-capture/Cargo.toml b/livekit-capture/Cargo.toml index 5c7a30053..237bfef96 100644 --- a/livekit-capture/Cargo.toml +++ b/livekit-capture/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "livekit-capture" description = "Ingest pixel frames or pre-encoded access units into LiveKit from any source" -version = "0.1.1" +version = "0.1.2" readme = "README.md" categories = ["multimedia::video"] license.workspace = true diff --git a/livekit-ffi-node-bindings/npm/darwin-arm64/package.json b/livekit-ffi-node-bindings/npm/darwin-arm64/package.json index 11cb84760..dbe104cdb 100644 --- a/livekit-ffi-node-bindings/npm/darwin-arm64/package.json +++ b/livekit-ffi-node-bindings/npm/darwin-arm64/package.json @@ -1,6 +1,6 @@ { "name": "@livekit/rtc-ffi-bindings-darwin-arm64", - "version": "0.12.79", + "version": "0.12.80", "cpu": [ "arm64" ], diff --git a/livekit-ffi-node-bindings/npm/darwin-x64/package.json b/livekit-ffi-node-bindings/npm/darwin-x64/package.json index 18a3105f4..b110e4980 100644 --- a/livekit-ffi-node-bindings/npm/darwin-x64/package.json +++ b/livekit-ffi-node-bindings/npm/darwin-x64/package.json @@ -1,6 +1,6 @@ { "name": "@livekit/rtc-ffi-bindings-darwin-x64", - "version": "0.12.79", + "version": "0.12.80", "cpu": [ "x64" ], diff --git a/livekit-ffi-node-bindings/npm/linux-arm64-gnu/package.json b/livekit-ffi-node-bindings/npm/linux-arm64-gnu/package.json index d2f4893cd..867aab69e 100644 --- a/livekit-ffi-node-bindings/npm/linux-arm64-gnu/package.json +++ b/livekit-ffi-node-bindings/npm/linux-arm64-gnu/package.json @@ -1,6 +1,6 @@ { "name": "@livekit/rtc-ffi-bindings-linux-arm64-gnu", - "version": "0.12.79", + "version": "0.12.80", "cpu": [ "arm64" ], diff --git a/livekit-ffi-node-bindings/npm/linux-x64-gnu/package.json b/livekit-ffi-node-bindings/npm/linux-x64-gnu/package.json index 2d853d3e1..3cb140b12 100644 --- a/livekit-ffi-node-bindings/npm/linux-x64-gnu/package.json +++ b/livekit-ffi-node-bindings/npm/linux-x64-gnu/package.json @@ -1,6 +1,6 @@ { "name": "@livekit/rtc-ffi-bindings-linux-x64-gnu", - "version": "0.12.79", + "version": "0.12.80", "cpu": [ "x64" ], diff --git a/livekit-ffi-node-bindings/npm/win32-x64-msvc/package.json b/livekit-ffi-node-bindings/npm/win32-x64-msvc/package.json index 8c1d3b00f..b63baa0b4 100644 --- a/livekit-ffi-node-bindings/npm/win32-x64-msvc/package.json +++ b/livekit-ffi-node-bindings/npm/win32-x64-msvc/package.json @@ -1,6 +1,6 @@ { "name": "@livekit/rtc-ffi-bindings-win32-x64-msvc", - "version": "0.12.79", + "version": "0.12.80", "cpu": [ "x64" ], diff --git a/livekit-ffi-node-bindings/package.json b/livekit-ffi-node-bindings/package.json index f4d10ba6c..45da264f5 100644 --- a/livekit-ffi-node-bindings/package.json +++ b/livekit-ffi-node-bindings/package.json @@ -3,7 +3,7 @@ "description": "LiveKit RTC Node FFI bindings for internal use only", "license": "Apache-2.0", "author": "LiveKit", - "version": "0.12.79", + "version": "0.12.80", "main": "index.js", "types": "index.d.ts", "type": "commonjs", diff --git a/livekit-ffi/CHANGELOG.md b/livekit-ffi/CHANGELOG.md index d57f47f37..5710aed18 100644 --- a/livekit-ffi/CHANGELOG.md +++ b/livekit-ffi/CHANGELOG.md @@ -316,6 +316,58 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - bump libwebrtc to m125 +## 0.12.80 (2026-09-18) + +### Features + +- Add the scaffolding for exposing video capture over FFI. +- Add a capture source that renders a wall clock on the GPU. +- Add a capture source that renders a test pattern on the GPU. + +### Fixes + +- Stop answering a server-initiated Leave (room deleted, duplicate identity) with a client Leave. The server has already ended the session and is closing the signalling socket, so the reply only ever produced the warning "dropping pass-through signal — no stream available" on every such disconnect. + +#### 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 caused +the episode (signal disconnected, publisher failed, subscriber failed) and reports it on each +resume attempt. The v0 signalling path was also missing the `reconnect_reason` query parameter +entirely, 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 reading `Connected` for tens +of seconds after the far end goes away. A resume could therefore emit `Resumed` — and so +`RoomEvent::Reconnected` with `ConnectionState::Connected` — for a session whose subscriber +transport was dead, leaving applications with no signal that they had stopped receiving media. +A resume now requires each transport to have entered `Connected` since the resume began, or to +have held it throughout, rather than trusting the state it currently reports. + +#### `VideoGrants` gains the `agent` grant and `Claims` the `kind` claim (with + +`AccessToken::with_kind`), which the Go, Python and JS SDKs already carry. An +agent worker's token is `VideoGrants { agent: true }` and a simulated job's +participant token is `kind: "agent"`; neither could be minted from Rust before. +`livekit-uniffi` exposes both: `TokenOptions.kind`, `Claims.kind`, and `agent` +on its `VideoGrants` record. + +**Breaking:** the four grants the server infers when absent -- `can_publish`, +`can_subscribe`, `can_publish_data`, `can_update_own_metadata` -- are now +`Option`, as in the Go and JS SDKs. `None` leaves the decision to the +server, and the new getters (`can_publish()`, `can_subscribe()`, +`can_publish_data()`, `can_update_own_metadata()`) read a token the way the +server does, `can_publish_data` falling back to `can_publish` included. Code +that set these fields writes `Some(..)`; code that read them uses the getters. +The same fields are optional on the `livekit-uniffi` record, and +`livekit-api` re-exports the crate as `livekit_api::access_token`, so both +carry the change. + +Nothing at its default is written into the token any more: unset claims and +grants are omitted, as the server's own `omitempty` grants are. Verification +of existing tokens is unchanged. + ## 0.12.79 (2026-09-10) ### Fixes diff --git a/livekit-ffi/Cargo.toml b/livekit-ffi/Cargo.toml index 044dd32f2..1589483d3 100644 --- a/livekit-ffi/Cargo.toml +++ b/livekit-ffi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "livekit-ffi" -version = "0.12.79" +version = "0.12.80" edition.workspace = true license.workspace = true description = "FFI interface for bindings in other languages" diff --git a/livekit-signaling/CHANGELOG.md b/livekit-signaling/CHANGELOG.md index 2290a97d5..154bc316a 100644 --- a/livekit-signaling/CHANGELOG.md +++ b/livekit-signaling/CHANGELOG.md @@ -5,6 +5,41 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## 0.1.3 (2026-09-18) + +### 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 caused +the episode (signal disconnected, publisher failed, subscriber failed) and reports it on each +resume attempt. The v0 signalling path was also missing the `reconnect_reason` query parameter +entirely, so it would not have been reported even if a reason had been supplied. + +#### `VideoGrants` gains the `agent` grant and `Claims` the `kind` claim (with + +`AccessToken::with_kind`), which the Go, Python and JS SDKs already carry. An +agent worker's token is `VideoGrants { agent: true }` and a simulated job's +participant token is `kind: "agent"`; neither could be minted from Rust before. +`livekit-uniffi` exposes both: `TokenOptions.kind`, `Claims.kind`, and `agent` +on its `VideoGrants` record. + +**Breaking:** the four grants the server infers when absent -- `can_publish`, +`can_subscribe`, `can_publish_data`, `can_update_own_metadata` -- are now +`Option`, as in the Go and JS SDKs. `None` leaves the decision to the +server, and the new getters (`can_publish()`, `can_subscribe()`, +`can_publish_data()`, `can_update_own_metadata()`) read a token the way the +server does, `can_publish_data` falling back to `can_publish` included. Code +that set these fields writes `Some(..)`; code that read them uses the getters. +The same fields are optional on the `livekit-uniffi` record, and +`livekit-api` re-exports the crate as `livekit_api::access_token`, so both +carry the change. + +Nothing at its default is written into the token any more: unset claims and +grants are omitted, as the server's own `omitempty` grants are. Verification +of existing tokens is unchanged. + ## 0.1.2 (2026-09-09) ### Fixes diff --git a/livekit-signaling/Cargo.toml b/livekit-signaling/Cargo.toml index 7f98f2b98..059bd5c23 100644 --- a/livekit-signaling/Cargo.toml +++ b/livekit-signaling/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "livekit-signaling" -version = "0.1.2" +version = "0.1.3" license.workspace = true description = "Internal LiveKit signalling client, blind to the transport backend" edition.workspace = true diff --git a/livekit-token/CHANGELOG.md b/livekit-token/CHANGELOG.md index bc0316b5a..8665e41b0 100644 --- a/livekit-token/CHANGELOG.md +++ b/livekit-token/CHANGELOG.md @@ -5,6 +5,33 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## 0.2.0 (2026-09-18) + +### Breaking Changes + +#### `VideoGrants` gains the `agent` grant and `Claims` the `kind` claim (with + +`AccessToken::with_kind`), which the Go, Python and JS SDKs already carry. An +agent worker's token is `VideoGrants { agent: true }` and a simulated job's +participant token is `kind: "agent"`; neither could be minted from Rust before. +`livekit-uniffi` exposes both: `TokenOptions.kind`, `Claims.kind`, and `agent` +on its `VideoGrants` record. + +**Breaking:** the four grants the server infers when absent -- `can_publish`, +`can_subscribe`, `can_publish_data`, `can_update_own_metadata` -- are now +`Option`, as in the Go and JS SDKs. `None` leaves the decision to the +server, and the new getters (`can_publish()`, `can_subscribe()`, +`can_publish_data()`, `can_update_own_metadata()`) read a token the way the +server does, `can_publish_data` falling back to `can_publish` included. Code +that set these fields writes `Some(..)`; code that read them uses the getters. +The same fields are optional on the `livekit-uniffi` record, and +`livekit-api` re-exports the crate as `livekit_api::access_token`, so both +carry the change. + +Nothing at its default is written into the token any more: unset claims and +grants are omitted, as the server's own `omitempty` grants are. Verification +of existing tokens is unchanged. + ## 0.1.2 (2026-09-08) ### Fixes diff --git a/livekit-token/Cargo.toml b/livekit-token/Cargo.toml index 9406d274e..0a6fc513a 100644 --- a/livekit-token/Cargo.toml +++ b/livekit-token/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "livekit-token" -version = "0.1.2" +version = "0.2.0" license.workspace = true description = "Core logic for generating LiveKit tokens" edition.workspace = true diff --git a/livekit-uniffi/CHANGELOG.md b/livekit-uniffi/CHANGELOG.md index bd3155c25..e42eccc0c 100644 --- a/livekit-uniffi/CHANGELOG.md +++ b/livekit-uniffi/CHANGELOG.md @@ -1,3 +1,40 @@ +## 0.2.0 (2026-09-18) + +### Breaking Changes + +#### `VideoGrants` gains the `agent` grant and `Claims` the `kind` claim (with + +`AccessToken::with_kind`), which the Go, Python and JS SDKs already carry. An +agent worker's token is `VideoGrants { agent: true }` and a simulated job's +participant token is `kind: "agent"`; neither could be minted from Rust before. +`livekit-uniffi` exposes both: `TokenOptions.kind`, `Claims.kind`, and `agent` +on its `VideoGrants` record. + +**Breaking:** the four grants the server infers when absent -- `can_publish`, +`can_subscribe`, `can_publish_data`, `can_update_own_metadata` -- are now +`Option`, as in the Go and JS SDKs. `None` leaves the decision to the +server, and the new getters (`can_publish()`, `can_subscribe()`, +`can_publish_data()`, `can_update_own_metadata()`) read a token the way the +server does, `can_publish_data` falling back to `can_publish` included. Code +that set these fields writes `Some(..)`; code that read them uses the getters. +The same fields are optional on the `livekit-uniffi` record, and +`livekit-api` re-exports the crate as `livekit_api::access_token`, so both +carry the change. + +Nothing at its default is written into the token any more: unset claims and +grants are omitted, as the server's own `omitempty` grants are. Verification +of 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 caused +the episode (signal disconnected, publisher failed, subscriber failed) and reports it on each +resume attempt. The v0 signalling path was also missing the `reconnect_reason` query parameter +entirely, so it would not have been reported even if a reason had been supplied. + ## 0.1.12 (2026-09-10) ### Fixes diff --git a/livekit-uniffi/Cargo.toml b/livekit-uniffi/Cargo.toml index 9056f9739..1a1830514 100644 --- a/livekit-uniffi/Cargo.toml +++ b/livekit-uniffi/Cargo.toml @@ -3,7 +3,7 @@ crate-type = ["cdylib", "staticlib", "lib"] [package] name = "livekit-uniffi" -version = "0.1.12" +version = "0.2.0" edition.workspace = true license.workspace = true description = "Experimental FFI interface using UniFFI" diff --git a/livekit/CHANGELOG.md b/livekit/CHANGELOG.md index d1e28ff06..3048cba81 100644 --- a/livekit/CHANGELOG.md +++ b/livekit/CHANGELOG.md @@ -257,6 +257,52 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - bump libwebrtc to m125 +## 0.9.2 (2026-09-18) + +### Fixes + +- Stop answering a server-initiated Leave (room deleted, duplicate identity) with a client Leave. The server has already ended the session and is closing the signalling socket, so the reply only ever produced the warning "dropping pass-through signal — no stream available" on every such disconnect. + +#### 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 caused +the episode (signal disconnected, publisher failed, subscriber failed) and reports it on each +resume attempt. The v0 signalling path was also missing the `reconnect_reason` query parameter +entirely, 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 reading `Connected` for tens +of seconds after the far end goes away. A resume could therefore emit `Resumed` — and so +`RoomEvent::Reconnected` with `ConnectionState::Connected` — for a session whose subscriber +transport was dead, leaving applications with no signal that they had stopped receiving media. +A resume now requires each transport to have entered `Connected` since the resume began, or to +have held it throughout, rather than trusting the state it currently reports. + +#### `VideoGrants` gains the `agent` grant and `Claims` the `kind` claim (with + +`AccessToken::with_kind`), which the Go, Python and JS SDKs already carry. An +agent worker's token is `VideoGrants { agent: true }` and a simulated job's +participant token is `kind: "agent"`; neither could be minted from Rust before. +`livekit-uniffi` exposes both: `TokenOptions.kind`, `Claims.kind`, and `agent` +on its `VideoGrants` record. + +**Breaking:** the four grants the server infers when absent -- `can_publish`, +`can_subscribe`, `can_publish_data`, `can_update_own_metadata` -- are now +`Option`, as in the Go and JS SDKs. `None` leaves the decision to the +server, and the new getters (`can_publish()`, `can_subscribe()`, +`can_publish_data()`, `can_update_own_metadata()`) read a token the way the +server does, `can_publish_data` falling back to `can_publish` included. Code +that set these fields writes `Some(..)`; code that read them uses the getters. +The same fields are optional on the `livekit-uniffi` record, and +`livekit-api` re-exports the crate as `livekit_api::access_token`, so both +carry the change. + +Nothing at its default is written into the token any more: unset claims and +grants are omitted, as the server's own `omitempty` grants are. Verification +of existing tokens is unchanged. + ## 0.9.1 (2026-09-09) ### Features diff --git a/livekit/Cargo.toml b/livekit/Cargo.toml index 4a81ebb8e..8324532ab 100644 --- a/livekit/Cargo.toml +++ b/livekit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "livekit" -version = "0.9.1" +version = "0.9.2" edition.workspace = true license.workspace = true description = "Rust Client SDK for LiveKit"