This repository contains MediaSFU reference clients for web, mobile, and desktop environments. It demonstrates the same calling and room concepts across React.js, Flutter, React Native, and Expo, plus a documented Angular desktop roadmap. Check the selected client's README and run its platform tests before distribution.
Start with QUICKSTART.md. Room credentials now stay in the included backend; the clients use MediaSFU headlessly and never need the privileged room API key in their application bundle.
Agent orchestration superpowers
- Agent-only concierge mode handles full conversations with MediaSFU Agents, handing off transcripts and context in near real time.
- Instant human takeover keeps supervisors one tap away via the cross-platform "Take Control" flow in
MediaSFURoomDisplay.- Blended agent + human calls switch between automation and humans without audio drops, syncing context through MediaSFU source switching.
- Play-to-all versus caller-only audio lets teams broadcast bot prompts or keep coaching private, adjustable mid-call.
- MediaSFU platform: https://mediasfu.com
- MediaSFU telephony: https://mediasfu.com/telephony
- MediaSFU agents workspace: https://agents.mediasfu.com
Explore sample builds produced from this repository:
- πͺ Windows desktop installer (Flutter build): MediaSFU-Setup.exe
- π€ Android (Flutter): mediasfu-voip-flutter.apk
- π± Android (React Native): mediasfu-voip-rn.apk
- Overview
- System architecture
- Repository structure
- Platform matrix
- Core capabilities
- Gallery
- Getting started
- Development workflow
- Build and deployment
- MediaSFU integration
- Support and resources
- Contributing
- License
- Platform readiness
The VOIP Multi-Platform Communication System provides a consistent MediaSFU-powered experience across multiple client technologies. Each application shares the same core conceptsβdialing, room management, and participant controlβwhile embracing the strengths of its respective framework.
Key objectives:
- Deliver ready-to-run examples for developers and integration teams.
- Showcase configurable dialer flows, outbound call orchestration, and MediaSFU room management.
- Maintain uniform logging and analytics across platforms.
- Document a practical migration path between frameworks.
VOIP System Architecture
βββ VOIP backend
β βββ Validated `/api/rooms/create` and `/api/rooms/join`
β βββ Server-only MediaSFU credentials
βββ Client applications
β βββ React.js (web)
β βββ Flutter (iOS/Android/Desktop)
β βββ React Native (iOS/Android)
β βββ React Native + Expo (iOS/Android/Web)
β βββ Angular + Electron (desktop project)
βββ Media layer
β βββ WebRTC transport
β βββ MediaSFU rooms and signaling
β βββ Participant session management
βββ Deployment surfaces
βββ Web hosting (Vercel, Netlify, or similar)
βββ Apple App Store and Google Play
βββ Desktop installers
VOIP/
βββ voip_reactjs/ React.js + TypeScript web client
βββ voip_flutter/ Flutter mobile and desktop client
βββ voip_rn/ React Native CLI mobile client
βββ voip_rn_expo/ Expo-managed React Native client
βββ voip_angular/ Angular desktop client project
βββ README.md Root documentation (this file)
| Platform | Technology | Status | Primary targets | Documentation |
|---|---|---|---|---|
| Web | React.js + TypeScript | Example included | Modern browsers, PWA | Web README |
| Native mobile | Flutter + Dart | Example included | iOS, Android, desktop | Flutter README |
| Native mobile (JS) | React Native CLI + TypeScript | Example included | iOS, Android | React Native README |
| PWA + mobile | Expo + React Native | Example included | iOS, Android, Web | Expo README |
| Desktop | Angular + Electron | Roadmap only; no runnable client yet | Windows, macOS, Linux | Angular roadmap |
Common capabilities represented across the implemented clients include:
- Dialer β E.164-compliant number entry and normalization using MediaSFU dial plan rules.
- MediaSFU room lifecycle β Creation, join, leave, and teardown flows with logging via the shared
CallService/callServiceutilities. - Call state management β Hooks/providers (React) and ChangeNotifiers (Flutter) that keep the active call, queued calls, and call history in sync.
- Configurable UI β Theme toggles, layout density options, and dashboard widgets tailored to each framework.
- Telemetry hooks β Optional analytics callbacks surfaced through MediaSFU SDK interceptors for live operations teams.
Feature specifics:
- React.js β Visual room dashboards, live call tiles, configuration modals, and history filters. Implementation details live in
voip_reactjs/src/components/Calls/CallsPage.tsxand its associated hooks. - Flutter β Material/Cupertino hybrid UI with dialpad and MediaSFU session widgets. Primary logic resides in
lib/pages/calls_page.dartalongside Provider-based state. - React Native β Shared TypeScript utilities, gesture-friendly controls, and integration with native permissions. Key files include
voip_rn/src/components/Calls/CallsPage.tsxandvoip_rn/src/services/callService.ts. - Expo β Tabbed navigation, OTA update support, and an installable web experience. See
voip_rn_expo/app/(tabs)andsrc/servicesfor implementation.
![]() |
![]() |
|---|---|
![]() |
![]() |
- Git
- Node.js 18 or newer (with npm or Yarn)
- Flutter SDK 3.35.4 or newer (for the Flutter client)
- Android Studio (with Android SDK) and Xcode 15+ for native builds
git clone https://github.com/MediaSFU/VOIP.git
cd VOIPInstall dependencies for the client you want to explore:
- Web:
cd voip_reactjs && npm install - Flutter:
cd voip_flutter && flutter pub get - React Native CLI:
cd voip_rn && npm install - Expo:
cd voip_rn_expo && npm install
Follow the secure quick start: configure MediaSFU credentials
only in backend/.env, then point the selected client at that backend. Client
environment files contain only the public backend URL.
- Select the target client and start the relevant development server (
npm start,flutter run,npx react-native run-android, ornpx expo start). - Update configuration via the Settings or Config panels to point at your MediaSFU environment.
- Exercise the dialer, join MediaSFU rooms, and review call history widgets to verify signalling.
- Use the shared logging utilities (
logger.ts,logger.dart) to troubleshoot media events. - Run automated checks (
npm test,flutter test, ornpx tsc --noEmit) before committing changes.
| Client | Command | Output |
|---|---|---|
| React.js | npm run build |
voip_reactjs/build static assets |
| Flutter | flutter build apk --release / flutter build ios --release |
Native binaries (Android/iOS) |
| React Native | cd android && ./gradlew assembleRelease / Xcode Archive |
Store-ready artifacts |
| Expo | npx expo export or EAS Build |
OTA/PWA bundles |
Refer to each sub-project README for signing, store submission, and automation notes.
Each client surfaces:
- Room APIs β Creation, join, update, and teardown via the MediaSFU REST endpoints.
- Participant controls β Mute/unmute, video toggles, and room moderation.
- Telemetry β Optional hooks for streaming call quality metrics to MediaSFU analytics.
For end-to-end service configuration, visit:
- MediaSFU Telephony: https://mediasfu.com/telephony
- MediaSFU Agent Workspace: https://agents.mediasfu.com
- MediaSFU documentation: https://mediasfu.com/docs
- MediaSFU playground: https://agents.mediasfu.com
- Submit product questions at https://mediasfu.com/contact
- GitHub issues are monitored for bug reports and enhancement requests.
- Fork the repository and create a feature branch.
- Align with the coding conventions outlined in the sub-project READMEs.
- Add automated tests where applicable and run platform-specific linters.
- Submit a pull request describing the change, testing performed, and MediaSFU endpoints touched.
This project is licensed under the MIT License. See LICENSE for details.
Each client is an implementation example, not a substitute for testing your deployment. Run its documented checks and complete a live call with at least two participants on every browser, device, and operating system you plan to support. The Angular desktop directory currently contains a roadmap, not a runnable application. Use one of the implemented clients until that work is complete.



