Signalling goes through pluggable transport; SignalError variants revamped
livekit-api/v0.6.0
Breaking Changes
Route LiveKit signalling through a pluggable transport (new livekit-net crate).
The signalling WebSocket and the two pre-connect HTTP GETs (validate, region discovery) now go through pluggable transport traits (WsClient for the WebSocket, HttpClient for request/response) resolved from a process-global registry with independent slots — a consumer can bring only HTTP, or only WebSocket. The new livekit-net crate owns the WebSocket/HTTP/TLS stack behind those traits and ships native (tokio / async-std) backends. Native builds are unchanged in behavior.
Breaking (livekit-api, and livekit via EngineError::Signal):
SignalError::WsErroris removed —tungsteniteis no longer part of the public API. A failed WebSocket handshake now surfaces its HTTP status asSignalError::Client/Server; transport connection and close failures surface as the newSignalError::Connection(String)/SignalError::Closedvariants (previously all collapsed intoTimeout).SignalErroris now#[non_exhaustive], and gains aSignalError::TransportNotConfiguredvariant — returned when no transport is registered (host/foreign builds must calllivekit_net::set_ws_client/set_http_clientbefore connecting). This is a permanent configuration error; callers must not retry.- The signalling WebSocket/HTTP/TLS crates are no longer transitive dependencies of
livekit-api; TLS features delegate tolivekit-net. Existingsignal-client-tokio/-async/-dispatcherand TLS feature names are unchanged.
Fixes
- Data tracks schema metadata support.
Fetched July 28, 2026
