VOIP Multi-Platform Communication System

September 30, 2025 Β· View on GitHub

License: MIT MediaSFU Flutter React React Native TypeScript

This mono-repository contains MediaSFU reference clients for web, mobile, and desktop environments. The solutions demonstrate how to integrate the MediaSFU communications platform across React.js, Flutter, React Native, and Expo, with an Angular desktop experience coming soon.

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.

Prebuilt downloads

Kick the tires instantly with samples built from this repository:

ℹ️ macOS .app bundles and iOS TestFlight builds are in flightβ€”subscribe in Discussions to be notified when they drop.

Table of contents

Overview

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 MediaSFU product teams, integrators, and customer success engineers.
  • 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.

System architecture

VOIP System Architecture
β”œβ”€β”€ Client applications
β”‚   β”œβ”€β”€ React.js (web)
β”‚   β”œβ”€β”€ Flutter (iOS/Android/Desktop)
β”‚   β”œβ”€β”€ React Native (iOS/Android)
β”‚   β”œβ”€β”€ React Native + Expo (iOS/Android/Web)
β”‚   └── Angular + Electron (desktop, planned)
β”œβ”€β”€ 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 (planned)

Repository structure

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 (coming soon)
└── README.md          Root documentation (this file)

Platform matrix

PlatformTechnologyStatusPrimary targetsDocumentation
WebReact.js + TypeScriptShippingModern browsers, PWAWeb README
Native mobileFlutter + DartShippingiOS, Android, desktop betaFlutter README
Native mobile (JS)React Native CLI + TypeScriptShippingiOS, AndroidReact Native README
PWA + mobileExpo + React NativeShippingiOS, Android, WebExpo README
DesktopAngular + ElectronIn designWindows, macOS, LinuxAngular README

Core capabilities

Common capabilities implemented across the production-ready 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/callService utilities.
  • 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.tsx and its associated hooks.
  • Flutter – Material/Cupertino hybrid UI with dialpad and MediaSFU session widgets. Primary logic resides in lib/pages/calls_page.dart alongside 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.tsx and voip_rn/src/services/callService.ts.
  • Expo – Tabbed navigation, OTA update support, and an installable web experience. See voip_rn_expo/app/(tabs) and src/services for implementation.
Screenshot 1Screenshot 2
Screenshot 3Screenshot 4

Getting started

Prerequisites

  • 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

Clone and install

git clone https://github.com/MediaSFU/VOIP.git
cd VOIP

Install 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

Environment templates are available within each project folder. Duplicate the .env.example file (where present), supply your MediaSFU credentials, and restart the dev server.

Development workflow

  1. Select the target client and start the relevant development server (npm start, flutter run, npx react-native run-android, or npx expo start).
  2. Update configuration via the Settings or Config panels to point at your MediaSFU environment.
  3. Exercise the dialer, join MediaSFU rooms, and review call history widgets to verify signalling.
  4. Use the shared logging utilities (logger.ts, logger.dart) to troubleshoot media events.
  5. Run automated checks (npm test, flutter test, or npx tsc --noEmit) before committing changes.

Build and deployment

ClientCommandOutput
React.jsnpm run buildvoip_reactjs/build static assets
Flutterflutter build apk --release / flutter build ios --releaseNative binaries (Android/iOS)
React Nativecd android && ./gradlew assembleRelease / Xcode ArchiveStore-ready artifacts
Exponpx expo export or EAS BuildOTA/PWA bundles

Refer to each sub-project README for signing, store submission, and automation notes.

MediaSFU integration

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:

Support and resources

Contributing

All contributions are coordinated through the MediaSFU engineering team.

  1. Fork the repository and create a feature branch.
  2. Align with the coding conventions outlined in the sub-project READMEs.
  3. Add automated tests where applicable and run platform-specific linters.
  4. Submit a pull request describing the change, testing performed, and MediaSFU endpoints touched.

License

This project is licensed under the MIT License. See LICENSE for details.

Status

  • React.js web client – actively maintained (production reference)
  • Flutter client – actively maintained (production reference)
  • React Native CLI client – actively maintained (production reference)
  • Expo client – actively maintained (PWA and mobile reference)
  • Angular desktop client – in design (planned release Q4 2025)

Last updated: September 25, 2025
Maintained by: MediaSFU Engineering