Skip to content

Releases

webrtc-sys 0.3.53 (2026-11-04)

Choose a tag to compare

@knope-bot knope-bot released this 04 Nov 22:45
88705b1

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_codecs reports codec support using a non-exhaustive libwebrtc::video_codec::VideoCodec enum supporting FromStr, with Auto excluding 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)

Choose a tag to compare

@knope-bot knope-bot released this 04 Nov 22:45
88705b1

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_codecs reports codec support using a non-exhaustive libwebrtc::video_codec::VideoCodec enum supporting FromStr, with Auto excluding 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_audio and offer_to_receive_video are now Option<bool>. None leaves libwebrtc's option unset, so receive-only transceivers stay receive-only. The default is still Some(false). Single peer connection offers leave both unset and no longer rewrite a=inactive to a=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 after RECONNECT_MAX_DURATION (60 s), so slow failing attempts cannot keep a room in Reconnecting for minutes. RECONNECT_BACKOFF_MULTIPLIER is 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 with SignalError::Cancelled, and the signal task closes the transport.
  • A requested close or restart no longer emits SignalEvent::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)

Choose a tag to compare

@knope-bot knope-bot released this 04 Nov 22:45
88705b1

Fixes

  • Add SignalOptions::cancellation_token, which ends a signal session for good: a connect or resume in flight stops with SignalError::Cancelled, and the signal task closes the transport.
  • A requested close or restart no longer emits SignalEvent::Close. A join or reconnect response timeout now closes the WebSocket instead of leaving it open.

livekit-ffi 0.13.4 (2026-11-04)

Choose a tag to compare

@knope-bot knope-bot released this 04 Nov 22:56
88705b1

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_codecs reports codec support using a non-exhaustive libwebrtc::video_codec::VideoCodec enum supporting FromStr, with Auto excluding 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 SetSharedKey and SetKey requests 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_audio and offer_to_receive_video are now Option<bool>. None leaves libwebrtc's option unset, so receive-only transceivers stay receive-only. The default is still Some(false). Single peer connection offers leave both unset and no longer rewrite a=inactive to a=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 after RECONNECT_MAX_DURATION (60 s), so slow failing attempts cannot keep a room in Reconnecting for minutes. RECONNECT_BACKOFF_MULTIPLIER is 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 with SignalError::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)

Choose a tag to compare

@knope-bot knope-bot released this 04 Nov 22:45
88705b1

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_codecs reports codec support using a non-exhaustive libwebrtc::video_codec::VideoCodec enum supporting FromStr, with Auto excluding 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_audio and offer_to_receive_video are now Option<bool>. None leaves libwebrtc's option unset, so receive-only transceivers stay receive-only. The default is still Some(false). Single peer connection offers leave both unset and no longer rewrite a=inactive to a=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 after RECONNECT_MAX_DURATION (60 s), so slow failing attempts cannot keep a room in Reconnecting for minutes. RECONNECT_BACKOFF_MULTIPLIER is deprecated: the schedule is quadratic in the attempt number.

livekit-api 0.10.1 (2026-11-04)

Choose a tag to compare

@knope-bot knope-bot released this 04 Nov 22:45
88705b1

Fixes

  • 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)

libwebrtc 0.4.0 (2026-11-04)

Choose a tag to compare

@knope-bot knope-bot released this 04 Nov 22:45
88705b1

Breaking Changes

  • OfferOptions::offer_to_receive_audio and offer_to_receive_video are now Option<bool>. None leaves libwebrtc's option unset, so receive-only transceivers stay receive-only. The default is still Some(false). Single peer connection offers leave both unset and no longer rewrite a=inactive to a=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_codecs reports codec support using a non-exhaustive libwebrtc::video_codec::VideoCodec enum supporting FromStr, with Auto excluding 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)

Choose a tag to compare

@knope-bot knope-bot released this 28 Oct 16:54
ede8ac5

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() return None for a detached sender instead of dereferencing null.

livekit 0.10.0 (2026-10-28)

Choose a tag to compare

@knope-bot knope-bot released this 28 Oct 16:54
ede8ac5

Breaking Changes

  • InputEvent and OutputEvent are #[non_exhaustive]; exhaustive matches need a wildcard arm.
  • Split outgoing data stream options into SendTextOptions, shared SendByteOptions, StreamTextOptions and StreamByteOptions, all #[non_exhaustive]. Remove send_file_with_progress and stream_text_with_total_length in favor of on_progress and total_length on the options.

Features

  • Add data stream progress to core-modules: readers get next_progress(), which counts received bytes, and send_text, send_bytes and send_file take an optional progress delegate (StreamProgressDelegate) inside their options record, defaulting to none and ignored by incremental streams. The core adds on_progress on SendTextOptions and SendByteOptions and a progress_stream() accessor on the concrete readers that does not borrow the reader. The generated Swift option records no longer conform to Equatable or Hashable.
  • Let an incremental text stream declare its total length in the header: the core adds StreamTextOptions::total_length, and the core-modules StreamTextOptions record gets an optional total_length that stream_text passes to it. The receiver then reports progress against it and fails the stream if the length does not match.
  • Add close() to the core-modules text and byte stream readers (closeStream() in Kotlin) and core StreamCloser handles returned by closer() to end pending reads with DataStreamError::AlreadyClosed and 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::Incomplete or StreamError::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 got StreamError::Incomplete.
  • Release local tracks when the server ends the room by detaching publisher senders before the publisher PeerConnection closes, and make RtpSender::track() return None for a detached sender instead of dereferencing null.
  • Add InferenceGrants and AccessToken::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 ObservabilityGrants and AccessToken::with_observability_grants, so Rust services can mint tokens that publish observability data.
  • Remove the use_legacy_data_streams migration flag. The FFI RoomDataStreamOptions.use_legacy_client_implementation field is now deprecated and ignored, and the hidden RoomDataStreamOptions::with_legacy_client_implementation builder and the hidden SignalOptions::use_legacy_data_streams field are gone; clients always advertise data streams v2 support.

livekit-token 0.4.0 (2026-10-28)

Choose a tag to compare

@knope-bot knope-bot released this 28 Oct 16:54
ede8ac5

Breaking Changes

  • Add ObservabilityGrants and AccessToken::with_observability_grants, so Rust services can mint tokens that publish observability data.

Fixes

  • Add InferenceGrants and AccessToken::with_inference_grants, so Rust services can mint tokens for LiveKit Inference.