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
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 for | Read |
|---|---|
| Flutter, React Native, or anything on top of webrtc-sdk | Android and iOS: same SDK family |
| A desktop app on libwebrtc directly | Windows: the C shim shows the whole native API surface a call needs |
| Another browser-based app | Web |
| Apple platforms | iOS and macOS |
Where each app keeps its settings
| App | Storage | What is saved |
|---|---|---|
| Web | localStorage | Server addresses, effect choice |
| Android | SharedPreferences | Server addresses, effect choice |
| iOS, macOS | UserDefaults | Server addresses, effect choice, devices on the Mac |
| Windows | %LOCALAPPDATA%\WebRtcDemo\settings.json | Server addresses, E2EE switch, devices, effect choice |
Libraries
| App | WebRTC |
|---|---|
| Web | The browser |
| Android | io.github.webrtc-sdk:android 150.7871.01 |
| iOS, macOS | webrtc-sdk/Specs 150.7871.01, through the local Swift package ios/Packages/WebRTC |
| Windows | webrtc-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.
