Repository navigation
Releases
Releases · livekit/rust-sdks
webrtc-sys 0.3.53 (2026-11-04)
Fixes
- Pre-encoded video publishing no longer requires a local encoder for its codec, so pre-encoded H265 works on hosts without an H265 encoder, a camera track requesting a codec no local encoder produces now publishes VP8 instead of a codec it cannot encode, and
PeerConnectionFactory::video_encoder_codecsreports codec support using a non-exhaustivelibwebrtc::video_codec::VideoCodecenum supportingFromStr, withAutoexcluding the pre-encoded pass-through backend. - Preserve distinct frame metadata when queued video frames are captured within the same millisecond, including pre-encoded frames that share an RTP timestamp.
livekit 0.10.1 (2026-11-04)
Fixes
- Pre-encoded video publishing no longer requires a local encoder for its codec, so pre-encoded H265 works on hosts without an H265 encoder, a camera track requesting a codec no local encoder produces now publishes VP8 instead of a codec it cannot encode, and
PeerConnectionFactory::video_encoder_codecsreports codec support using a non-exhaustivelibwebrtc::video_codec::VideoCodecenum supportingFromStr, withAutoexcluding the pre-encoded pass-through backend. - Preserve distinct frame metadata when queued video frames are captured within the same millisecond, including pre-encoded frames that share an RTP timestamp.
- livekit-signaling: fix teardown gaps on requested close and response timeout - #1568 (@lukasIO)
OfferOptions::offer_to_receive_audioandoffer_to_receive_videoare nowOption<bool>.Noneleaves libwebrtc's option unset, so receive-only transceivers stay receive-only. The default is stillSome(false). Single peer connection offers leave both unset and no longer rewritea=inactivetoa=recvonly.- Space reconnect attempts on the same schedule as livekit-client's
DefaultReconnectPolicy(0.3 s, 1.2 s, 2.7 s, 4.8 s, then 7 s, plus up to 1 s of jitter) instead of full jitter, which could spend all ten attempts within a few seconds of outage. The jitter now comes from a randomly keyed hash rather than the clock's sub-second digits, which are all zero on macOS. No new reconnect attempt starts afterRECONNECT_MAX_DURATION(60 s), so slow failing attempts cannot keep a room inReconnectingfor minutes.RECONNECT_BACKOFF_MULTIPLIERis deprecated: the schedule is quadratic in the attempt number. - Add
SignalOptions::cancellation_token, which ends a signal session for good: a connect or resume in flight stops withSignalError::Cancelled, and the signal task closes the transport. - A requested
closeorrestartno longer emitsSignalEvent::Close. A join or reconnect response timeout now closes the WebSocket instead of leaving it open. - A received transcription with an invalid track sid is now dropped with a warning. Before, it made the client panic, which aborts the process in release builds.
livekit-signaling 0.1.9 (2026-11-04)
Fixes
- Add
SignalOptions::cancellation_token, which ends a signal session for good: a connect or resume in flight stops withSignalError::Cancelled, and the signal task closes the transport. - A requested
closeorrestartno longer emitsSignalEvent::Close. A join or reconnect response timeout now closes the WebSocket instead of leaving it open.
livekit-ffi 0.13.4 (2026-11-04)
Fixes
- Pre-encoded video publishing no longer requires a local encoder for its codec, so pre-encoded H265 works on hosts without an H265 encoder, a camera track requesting a codec no local encoder produces now publishes VP8 instead of a codec it cannot encode, and
PeerConnectionFactory::video_encoder_codecsreports codec support using a non-exhaustivelibwebrtc::video_codec::VideoCodecenum supportingFromStr, withAutoexcluding the pre-encoded pass-through backend. - Re-baseline the iOS and Android binary size budgets for the signaling client, which blocked publishing the 0.13.3 Swift and Android packages.
- A failed FFI request no longer writes the full request to the error log or to the Node error message, so E2EE keys in
SetSharedKeyandSetKeyrequests stay out of logs. - Preserve distinct frame metadata when queued video frames are captured within the same millisecond, including pre-encoded frames that share an RTP timestamp.
- Build the shipped staticlib and cdylib with LTO, shrinking the core-modules library by ~17%
- livekit-signaling: fix teardown gaps on requested close and response timeout - #1568 (@lukasIO)
OfferOptions::offer_to_receive_audioandoffer_to_receive_videoare nowOption<bool>.Noneleaves libwebrtc's option unset, so receive-only transceivers stay receive-only. The default is stillSome(false). Single peer connection offers leave both unset and no longer rewritea=inactivetoa=recvonly.- Space reconnect attempts on the same schedule as livekit-client's
DefaultReconnectPolicy(0.3 s, 1.2 s, 2.7 s, 4.8 s, then 7 s, plus up to 1 s of jitter) instead of full jitter, which could spend all ten attempts within a few seconds of outage. The jitter now comes from a randomly keyed hash rather than the clock's sub-second digits, which are all zero on macOS. No new reconnect attempt starts afterRECONNECT_MAX_DURATION(60 s), so slow failing attempts cannot keep a room inReconnectingfor minutes.RECONNECT_BACKOFF_MULTIPLIERis deprecated: the schedule is quadratic in the attempt number. - Add
SignalOptions::cancellation_token, which ends a signal session for good: a connect or resume in flight stops withSignalError::Cancelled, and the signal task closes the transport. - A received transcription with an invalid track sid is now dropped with a warning. Before, it made the client panic, which aborts the process in release builds.
livekit-capture 0.1.9 (2026-11-04)
Fixes
- Pre-encoded video publishing no longer requires a local encoder for its codec, so pre-encoded H265 works on hosts without an H265 encoder, a camera track requesting a codec no local encoder produces now publishes VP8 instead of a codec it cannot encode, and
PeerConnectionFactory::video_encoder_codecsreports codec support using a non-exhaustivelibwebrtc::video_codec::VideoCodecenum supportingFromStr, withAutoexcluding the pre-encoded pass-through backend. - Drop a transcription with an invalid track sid instead of panicking - #1600 (@lukasIO)
- Preserve distinct frame metadata when queued video frames are captured within the same millisecond, including pre-encoded frames that share an RTP timestamp.
- livekit-signaling: end a session for good through a cancellation token - #1589 (@lukasIO)
- livekit-signaling: fix teardown gaps on requested close and response timeout - #1568 (@lukasIO)
OfferOptions::offer_to_receive_audioandoffer_to_receive_videoare nowOption<bool>.Noneleaves libwebrtc's option unset, so receive-only transceivers stay receive-only. The default is stillSome(false). Single peer connection offers leave both unset and no longer rewritea=inactivetoa=recvonly.- Space reconnect attempts on the same schedule as livekit-client's
DefaultReconnectPolicy(0.3 s, 1.2 s, 2.7 s, 4.8 s, then 7 s, plus up to 1 s of jitter) instead of full jitter, which could spend all ten attempts within a few seconds of outage. The jitter now comes from a randomly keyed hash rather than the clock's sub-second digits, which are all zero on macOS. No new reconnect attempt starts afterRECONNECT_MAX_DURATION(60 s), so slow failing attempts cannot keep a room inReconnectingfor minutes.RECONNECT_BACKOFF_MULTIPLIERis deprecated: the schedule is quadratic in the attempt number.
livekit-api 0.10.1 (2026-11-04)
libwebrtc 0.4.0 (2026-11-04)
Breaking Changes
OfferOptions::offer_to_receive_audioandoffer_to_receive_videoare nowOption<bool>.Noneleaves libwebrtc's option unset, so receive-only transceivers stay receive-only. The default is stillSome(false). Single peer connection offers leave both unset and no longer rewritea=inactivetoa=recvonly.
Features
- Pre-encoded video publishing no longer requires a local encoder for its codec, so pre-encoded H265 works on hosts without an H265 encoder, a camera track requesting a codec no local encoder produces now publishes VP8 instead of a codec it cannot encode, and
PeerConnectionFactory::video_encoder_codecsreports codec support using a non-exhaustivelibwebrtc::video_codec::VideoCodecenum supportingFromStr, withAutoexcluding the pre-encoded pass-through backend.
Fixes
- Preserve distinct frame metadata when queued video frames are captured within the same millisecond, including pre-encoded frames that share an RTP timestamp.
webrtc-sys 0.3.52 (2026-10-28)
Fixes
- Keep NVIDIA's Jetson video codec plugin loaded while probing MMAPI encoder capabilities, preventing probe teardown from breaking subsequent GStreamer capture.
- Release local tracks when the server ends the room by detaching publisher senders before the publisher PeerConnection closes, and make
RtpSender::track()returnNonefor a detached sender instead of dereferencing null.
livekit 0.10.0 (2026-10-28)
Breaking Changes
InputEventandOutputEventare#[non_exhaustive]; exhaustive matches need a wildcard arm.- Split outgoing data stream options into
SendTextOptions, sharedSendByteOptions,StreamTextOptionsandStreamByteOptions, all#[non_exhaustive]. Removesend_file_with_progressandstream_text_with_total_lengthin favor ofon_progressandtotal_lengthon the options.
Features
- Add data stream progress to
core-modules: readers getnext_progress(), which counts received bytes, andsend_text,send_bytesandsend_filetake an optionalprogressdelegate (StreamProgressDelegate) inside their options record, defaulting to none and ignored by incremental streams. The core addson_progressonSendTextOptionsandSendByteOptionsand aprogress_stream()accessor on the concrete readers that does not borrow the reader. The generated Swift option records no longer conform toEquatableorHashable. - Let an incremental text stream declare its total length in the header: the core adds
StreamTextOptions::total_length, and thecore-modulesStreamTextOptionsrecord gets an optionaltotal_lengththatstream_textpasses to it. The receiver then reports progress against it and fails the stream if the length does not match. - Add
close()to thecore-modulestext and byte stream readers (closeStream()in Kotlin) and coreStreamCloserhandles returned bycloser()to end pending reads withDataStreamError::AlreadyClosedand remove streams exactly once; dropping a reader has the same effect. - Create the well-known data channels as negotiated (fixed IDs) when the server supports it (protocol 18), saving the data channel open handshake round trip. Falls back to in-band channels against older servers.
Fixes
- Keep NVIDIA's Jetson video codec plugin loaded while probing MMAPI encoder capabilities, preventing probe teardown from breaking subsequent GStreamer capture.
- An incoming single-packet (inline) data stream whose payload is shorter or longer than the length in its header now fails with
StreamError::IncompleteorStreamError::LengthExceeded, as a chunked stream already does. Before, it ended successfully. - A data stream that its sender closes early with a reason now fails with that reason (
StreamError::AbnormalEnd), as in JS, even when its header declared a total length; before, the reader gotStreamError::Incomplete. - Release local tracks when the server ends the room by detaching publisher senders before the publisher PeerConnection closes, and make
RtpSender::track()returnNonefor a detached sender instead of dereferencing null. - Add
InferenceGrantsandAccessToken::with_inference_grants, so Rust services can mint tokens for LiveKit Inference. - livekit-signaling: add an opt-out for region failover in connect - #1567 (@lukasIO)
- livekit-signaling: let callers set the advertised protocol and capabilities - #1569 (@lukasIO)
- Add
ObservabilityGrantsandAccessToken::with_observability_grants, so Rust services can mint tokens that publish observability data. - Remove the
use_legacy_data_streamsmigration flag. The FFIRoomDataStreamOptions.use_legacy_client_implementationfield is now deprecated and ignored, and the hiddenRoomDataStreamOptions::with_legacy_client_implementationbuilder and the hiddenSignalOptions::use_legacy_data_streamsfield are gone; clients always advertise data streams v2 support.
livekit-token 0.4.0 (2026-10-28)
Breaking Changes
- Add
ObservabilityGrantsandAccessToken::with_observability_grants, so Rust services can mint tokens that publish observability data.
Fixes
- Add
InferenceGrantsandAccessToken::with_inference_grants, so Rust services can mint tokens for LiveKit Inference.