feat(livekit): rust SDK scaffold behind rust-livekit feature flag
Phase B.1 of the native-livekit migration. Ships the command surface and event bridge behind a cargo feature so the default build stays unaffected while the JS-SDK path keeps running in production. Rust side - livekit 0.7 (default tokio runtime, rustls-tls-native-roots) pulled as an optional dependency; tokio also optional under the same feature - Feature `rust-livekit` gates everything — off by default; on via `cargo build --features rust-livekit` - src-tauri/src/livekit_bridge.rs: LivekitState mutex, connect / disconnect / send_data commands, event pump for room_state, participant_joined, participant_left, data_received - Mic / camera / screen share commands stubbed with explicit "not implemented" errors so JS callers fail loudly rather than silently no-op JS side - src/lib/nativeLiveKit.ts exposes a NativeRoom class with the same event / method shape the CallContext will need, plus a VITE_USE_RUST_LIVEKIT flag so the adapter can be swapped once the bridge reaches parity - isRustLivekitAvailable() gates access at both env + runtime layers Build impact - Baseline build unchanged (1s incremental, no new deps pulled) - Feature build initial: ~10min (libwebrtc download + link) - Feature build incremental: ~1s - Binary size with feature: +12-20MB vs baseline Open questions (documented for the next phase) - Video-frame rendering bridge remains an upstream gap; livekit-rust exposes NativeVideoFrame but no stable path to expose that as a MediaStreamTrack inside the WebView - Audio-only rust path is realistic near-term; full-rust needs either upstream video-bridge or a native-overlay render window
This commit is contained in:
@@ -33,11 +33,24 @@ tauri-plugin-global-shortcut = "2"
|
||||
tauri-plugin-updater = "2"
|
||||
tauri-plugin-window-state = "2"
|
||||
|
||||
# LiveKit client SDK — lives behind the `rust-livekit` feature flag so the
|
||||
# baseline build stays unaffected while the JS-SDK path is still the
|
||||
# default. Pulls libwebrtc-rs which adds ~20MB to the binary and ~5-10min
|
||||
# to the first build. Tokio runtime is required; the rest of the crate
|
||||
# stays idle when the feature is off.
|
||||
livekit = { version = "0.7", default-features = false, features = ["tokio", "rustls-tls-native-roots"], optional = true }
|
||||
tokio = { version = "1", features = ["rt-multi-thread", "sync", "macros"], optional = true }
|
||||
|
||||
[features]
|
||||
# This feature is used for production builds or when `devPath` points to the filesystem
|
||||
# and disables specific features relevant to the dev build.
|
||||
custom-protocol = ["tauri/custom-protocol"]
|
||||
|
||||
# Enable the Rust LiveKit client. Off by default so CI + users stay on the
|
||||
# JS-SDK path until the rust bridge reaches feature parity. Turn on via:
|
||||
# cargo build --features rust-livekit
|
||||
rust-livekit = ["dep:livekit", "dep:tokio"]
|
||||
|
||||
# Release-profile tuned for ChatApp: whole-program LTO + single codegen unit
|
||||
# cuts binary size by ~20-30% and trims startup overhead. `strip = "symbols"`
|
||||
# removes debug + symbol tables (the updater already signs separately so
|
||||
|
||||
Reference in New Issue
Block a user