Skip to content

Quick start ​

A 1:1 call needs the signaling server and two clients in the same room. Group calls also need the SFU server, see Group calls.

Requirements ​

To runYou need
Signaling server, web clientNode.js 20.19 or newer (Vite 7 needs it)
AndroidAndroid Studio with JDK 17+, a device on Android 7.0 (API 24) or newer
iOS, macOSXcode 26. The iOS app needs an iPhone on iOS 26, the Mac app needs macOS 26 (Liquid Glass needs the 26 releases). Dependencies come from Swift Package Manager.
WindowsWindows 10 1809 or newer (11 for Mica), Visual Studio 2026 with the WinUI application development and Desktop development with C++ workloads
Group callsGo 1.25 or newer

1. Start the signaling server ​

sh
cd signaling-server
npm install
npm run dev

It prints the address the clients should use:

Signaling server listening on port 4000
Network access via: 192.168.1.10:4000

The server is a plain WebSocket relay on ws://<address>/ws. Set PORT to use another port.

2. Start two clients ​

Any two will do. They don't have to be the same platform.

sh
cd web
npm install
npm run dev
# open http://localhost:5173 in two browser windows
sh
# Open android/ in Android Studio and run the "app" configuration,
# or install from a terminal:
cd android
./gradlew :app:installDebug
sh
open ios/WebRTCDemo.xcodeproj
# Pick the WebRTCDemo scheme and run on a real iPhone.
# The camera and screen sharing need real hardware.
sh
open ios/WebRTCDemo.xcodeproj
# Pick the WebRTCDemoMac scheme and the "My Mac" destination.
powershell
cd windows
# Downloads libwebrtc (SHA-256 checked) and builds rtc_shim.dll
./native/RtcShim/scripts/build-shim.ps1
dotnet run --project src/WebRtcDemo.App -p:Platform=x64

On iOS and macOS, Xcode resolves the WebRTC Swift package the first time you open the project. There is no CocoaPods and no workspace. On Windows you can also open windows/WebRtcDemo.slnx in Visual Studio and run the x64 or ARM64 configuration.

3. Point the clients at the server ​

Each client remembers the address once you set it.

ClientWhere to change itDefault
WebClick the server address under Join roomPort 4000 on the host that serves the page
AndroidTap the server address at the bottom of the lobbyserverAddress in strings.xml
iOSTap the server address at the bottom of the lobbySignalingServer.defaultURL in SignalingServer.swift
macOSWebRTC Demo › Settings… (⌘,)http://localhost:4000
WindowsSignaling server in the lobbyhttp://localhost:4000

A phone can't reach localhost on your computer. Give it the LAN address the server printed, and keep both on the same network.

4. Join the same room ​

Type the same room ID on both clients and join. The first one waits, the second one starts the call.

To try end-to-end encryption, turn on E2EE in the lobby on both sides before joining. If only one side has it on, the other side sees black video and hears nothing.

No reconnect

The clients keep the signaling socket open for the whole call. If it drops (server stopped, Wi-Fi to 4G switch), the call ends with "Lost the connection to the signaling server", even if audio and video were still flowing. Join the room again.

Next ​