Skip to content

Platforms ​

Five apps, each written with its own platform's tools. They share no code across languages, only the contract, the effects folder and the app icon. iOS and macOS are the exception: the Mac app compiles most of the iOS code.

UI
Vue 3, Tailwind CSS, shadcn-vue
WebRTC
The browser's own RTCPeerConnection
Signaling socket
WebSocket
Camera
getUserMedia()
Screen sharing
getDisplayMedia()
Switching sources
RTCRtpSender.replaceTrack()
E2EE
Insertable Streams or RTCRtpScriptTransform, in a worker
Backgrounds and stickers
MediaPipe ImageSegmenter + FaceLandmarker, canvas 2D
Picture-in-picture
Document Picture-in-Picture API, video PiP fallback
Everything about this platform →

Which one to read first ​

Start with the web client, even if you target something else. The browser's WebRTC API is the reference that the native SDKs copy, the code is short, and useCall.ts holds the whole 1:1 call in one file. Then read the app closest to your platform:

You are building forRead
Flutter, React Native, or anything on top of webrtc-sdkAndroid and iOS: same SDK family
A desktop app on libwebrtc directlyWindows: the C shim shows the whole native API surface a call needs
Another browser-based appWeb
Apple platformsiOS and macOS

Where each app keeps its settings ​

AppStorageWhat is saved
WeblocalStorageServer addresses, effect choice
AndroidSharedPreferencesServer addresses, effect choice
iOS, macOSUserDefaultsServer addresses, effect choice, devices on the Mac
Windows%LOCALAPPDATA%\WebRtcDemo\settings.jsonServer addresses, E2EE switch, devices, effect choice

Libraries ​

AppWebRTC
WebThe browser
Androidio.github.webrtc-sdk:android 150.7871.01
iOS, macOSwebrtc-sdk/Specs 150.7871.01, through the local Swift package ios/Packages/WebRTC
Windowswebrtc-sdk/libwebrtc m150.7871.03, through a C shim

All four native builds come from the same m150 branch of the webrtc-sdk fork, which is what makes their FrameCryptor identical. Full versions are in Versions and limitations.