Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions .changeset/automatic_capture_thread_join_on_drop.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/capture-ffi.md

This file was deleted.

6 changes: 0 additions & 6 deletions .changeset/capture-source-clock.md

This file was deleted.

6 changes: 0 additions & 6 deletions .changeset/capture-source-pattern.md

This file was deleted.

16 changes: 0 additions & 16 deletions .changeset/report_reconnect_reason_on_resume.md

This file was deleted.

14 changes: 0 additions & 14 deletions .changeset/resume_requires_evidence_of_pc_recovery.md

This file was deleted.

7 changes: 0 additions & 7 deletions .changeset/skip-leave-on-server-disconnect.md

This file was deleted.

30 changes: 0 additions & 30 deletions .changeset/token_agent_grant_and_kind.md

This file was deleted.

14 changes: 7 additions & 7 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 6 additions & 6 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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" }
Expand Down
37 changes: 37 additions & 0 deletions livekit-api/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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<bool>`, 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
Expand Down
2 changes: 1 addition & 1 deletion livekit-api/Cargo.toml
Original file line number Diff line number Diff line change
@@ -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
Expand Down
29 changes: 29 additions & 0 deletions livekit-capture/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion livekit-capture/Cargo.toml
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion livekit-ffi-node-bindings/npm/darwin-arm64/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@livekit/rtc-ffi-bindings-darwin-arm64",
"version": "0.12.79",
"version": "0.12.80",
"cpu": [
"arm64"
],
Expand Down
2 changes: 1 addition & 1 deletion livekit-ffi-node-bindings/npm/darwin-x64/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@livekit/rtc-ffi-bindings-darwin-x64",
"version": "0.12.79",
"version": "0.12.80",
"cpu": [
"x64"
],
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@livekit/rtc-ffi-bindings-linux-arm64-gnu",
"version": "0.12.79",
"version": "0.12.80",
"cpu": [
"arm64"
],
Expand Down
2 changes: 1 addition & 1 deletion livekit-ffi-node-bindings/npm/linux-x64-gnu/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@livekit/rtc-ffi-bindings-linux-x64-gnu",
"version": "0.12.79",
"version": "0.12.80",
"cpu": [
"x64"
],
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@livekit/rtc-ffi-bindings-win32-x64-msvc",
"version": "0.12.79",
"version": "0.12.80",
"cpu": [
"x64"
],
Expand Down
2 changes: 1 addition & 1 deletion livekit-ffi-node-bindings/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
52 changes: 52 additions & 0 deletions livekit-ffi/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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<bool>`, 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
Expand Down
2 changes: 1 addition & 1 deletion livekit-ffi/Cargo.toml
Original file line number Diff line number Diff line change
@@ -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"
Expand Down
Loading
Loading