tauri-plugin-webrtc WebRTC for Tauri on Linux GitHub

tauri-plugin-webrtc

WebRTC for Tauri apps on Linux, without CEF. WebKitGTK ships no RTCPeerConnection. This plugin gives the page one, backed by qrtc, a pure Rust engine with post-quantum key agreement.

Unchanged app codeA standards-shaped JS shim installs the W3C classes before page scripts run. matrix-js-sdk, LiveKit and plain WebRTC code work as they are.
No system packagesNo GStreamer WebRTC elements, no libwebrtc. Nothing beyond what WebKitGTK already needs.
Post-quantum by defaultDTLS 1.3 and TURN over TLS with X25519MLKEM768 whenever the other side supports it.
Built for Matrix1:1 calls through matrix-js-sdk, and Element Call group calls on LiveKit with end-to-end encryption.

Three steps

# src-tauri/Cargo.toml
[target.'cfg(target_os = "linux")'.dependencies]
tauri-plugin-webrtc = { git = "https://github.com/crabnebula-dev/tauri-plugin-webrtc", branch = "main" }
// src-tauri/src/lib.rs
#[cfg(target_os = "linux")]
{
    builder = builder.plugin(tauri_plugin_webrtc::init());
}
// src-tauri/capabilities/linux.json
{
  "identifier": "linux-capability",
  "platforms": ["linux"],
  "windows": ["main"],
  "permissions": ["webrtc:default"]
}

That is all. new RTCPeerConnection() in the page now works. Setup covers the options.

What the page gets

AreaCoverage
Peer connectionsOffers, answers, renegotiation, rollback and perfect negotiation, restartIce(), getStats()
ICEHost, mDNS .local, STUN, TURN over UDP, TCP and TLS, relay-only policy
Data channelsReliable and unreliable, ordered and unordered, negotiated ids, bufferedAmount events
MediaOpus with echo cancellation, noise suppression and AGC; VP8 and H.264 through WebCodecs; screen share; DTMF
TransformsRTCRtpScriptTransform, as LiveKit end-to-end encryption uses it

Web APIs lists every class and its limits.

Where to go next