MediaSFU QuickStart Apps

June 22, 2026 ยท View on GitHub

Build real-time audio and video rooms with MediaSFU SDKs for React, Angular, Vue, React Native, Expo, Flutter, Kotlin/Android, Unity, and iOS/KMP bridge paths.

This repository is the fastest way to try MediaSFU Cloud, self-hosted MediaSFU Community Edition, or a hybrid deployment from a working app. It includes runnable quick-start apps for mature SDKs, reference integrations for newer native paths, and practical guidance for prebuilt UI, custom prejoin pages, backend-proxied room creation, and fully custom WebRTC interfaces.

What You Can Build

  • WebRTC video conferencing apps for React, Angular, and Vue.
  • Mobile video meeting apps with React Native CLI, React Native Expo, and Flutter.
  • Android room experiences with the published Kotlin/Android SDK.
  • Custom prejoin flows, branded meeting rooms, and no-UI SDK integrations.
  • MediaSFU Cloud, self-hosted CE, and CE plus Cloud egress deployments.
  • Production apps that keep MediaSFU API credentials on a backend service.
  • Unity and iOS/KMP bridge integrations using the current reference paths.

Choose Your SDK

PlatformFolder or guideBest fitStatusFirst command
ReactJSmediasfu_reactjsBrowser video rooms, dashboards, portals, education, eventsFull appnpm install && npm start
Angularmediasfu_angularEnterprise web apps and structured Angular workspacesFull appnpm install && npm start
Vuemediasfu_vueVite/Vue apps, creator tools, lightweight web productsFull appnpm install && npm run dev
React Native CLImediasfu_react_nativeNative mobile apps with direct iOS/Android controlFull appnpm install && npm start
React Native Expomediasfu_react_native_expoExpo-first mobile apps and fast mobile prototypingFull appnpm install && npm start
Fluttermediasfu_flutterCross-platform mobile/web apps from one Dart codebaseFull appflutter pub get && flutter run
Kotlin/Androidmediasfu_kotlin_androidAndroid Compose apps using Maven artifactsFull app./gradlew :app:assembleDebug
Unitydocs/unity-reference.mdCustom Unity scenes and immersive app experimentsReferenceUnity Package Manager
iOS/KMP bridgedocs/ios-kmp-reference.mdSwift/iOS bridge work from the Kotlin Multiplatform SDKReferenceXcode/device validation

Quickest Path To A Room

Clone the repo, copy the environment template, then run the app for your framework:

git clone https://github.com/MediaSFU/MediaSFU-QuickStart-Apps.git
cd MediaSFU-QuickStart-Apps
cp .env.example .env
cd mediasfu_reactjs
npm install
npm start

For mobile and native apps, open the app folder README first because camera, microphone, simulator, emulator, signing, and device permissions vary by platform.

Configure MediaSFU

All quick-starts share the same deployment model. Start with these canonical variables, then map them to the naming convention required by each framework:

MEDIASFU_API_USERNAME=your_api_username
MEDIASFU_API_KEY=your_64_character_api_key
MEDIASFU_LOCAL_LINK=
MEDIASFU_CONNECT_MEDIASFU=true
VariableWhat it controls
MEDIASFU_API_USERNAMEMediaSFU Cloud API username for cloud-backed room creation.
MEDIASFU_API_KEYMediaSFU Cloud API key. Keep real values out of public client bundles in production.
MEDIASFU_LOCAL_LINKOptional self-hosted MediaSFU CE URL, for example http://localhost:3000.
MEDIASFU_CONNECT_MEDIASFUtrue for Cloud or CE plus Cloud egress, false for CE-only mode.

Deployment Modes

ModeUse whenlocalLinkconnectMediaSFUCredential model
MediaSFU CloudYou want the fastest hosted room path.EmptytrueReal API username/key during local development.
Self-hosted CEYou are running your own Community Edition server.CE server URLfalseEmpty or dummy client values, depending on SDK UI requirements.
CE plus Cloud egressYou want local CE control with MediaSFU Cloud egress or services.CE server URLtrueDummy client values; real cloud credentials stay on your backend.
Backend proxyYou are shipping a production browser or mobile app.App-specificApp-specificClient calls your backend; backend owns the real MediaSFU credentials.

For production, do not publish real MediaSFU API credentials in JavaScript, mobile bundles, or public repositories. Route create-room and join-room requests through your backend, then pass SDK hooks or endpoint responses into the app.

Framework Environment Mapping

AppTypical mapping
ReactJS / Create React AppREACT_APP_MEDIASFU_* variables or a local config mapping from .env.
Vue / ViteVITE_MEDIASFU_* variables.
React Native CLIreact-native-dotenv can read the root .env values.
React Native ExpoEXPO_PUBLIC_MEDIASFU_* variables or Expo app config.
AngularAngular environment files or a runtime config provider.
Flutter--dart-define=MEDIASFU_API_USERNAME=... or a generated local config layer.
Kotlin/AndroidGradle properties or process environment variables with the canonical root names.

See ENV_SETUP.md for copy-paste examples and production notes.

UI Approach

Start with the prebuilt UI first. It verifies credentials, signaling, media permissions, and the basic room lifecycle before you spend time on custom controls.

PatternUse it for
Prebuilt UIFastest working MediaSFU room with default lobby and meeting controls.
Custom prejoinBranded lobby, role selection, display name capture, device selection, or consent screens.
uiOverridesTargeted styling, labels, layout options, and component-level customization without rebuilding the room UI.
Backend create/join hooksSecure production flows where the client never sees real cloud credentials.
returnUI=false or no-UI modeFully custom room interfaces that use SDK state, source parameters, and media controls directly.

The recommended path is: prebuilt UI, custom prejoin, focused uiOverrides, backend hooks, then no-UI/custom UI when your product needs total control.

Current SDK Versions

These versions were checked against the public package registries before the quick-start manifests were updated.

SDKPackageVersionValidation path
ReactJSmediasfu-reactjs4.2.8npm install, npm run build
Angularmediasfu-angular2.2.5npm install, npm run build
Vuemediasfu-vue1.0.5npm install, npm run build
React Native CLImediasfu-reactnative2.3.6npm install, npm test, npm run lint
React Native Expomediasfu-reactnative-expo2.4.1npm install, npx expo-doctor
Fluttermediasfu_sdk2.2.8flutter pub get, flutter analyze, flutter test
Kotlin/Androidcom.mediasfu:mediasfu-sdk-android1.0.3./gradlew :app:assembleDebug
Kotlin Multiplatformcom.mediasfu:mediasfu-sdk1.0.3Reference for KMP/iOS bridge work
Unitycom.mediasfu.unity0.1.0-preview.1UPM install and scene integration reference

Unity and iOS/KMP are intentionally listed as reference integrations until full native media validation is part of the routine release flow.

App Folder Guide

Each full app includes the same basic journey: install dependencies, configure MediaSFU, run a room, then customize the UI.

Common Troubleshooting

SymptomCheck
Room does not createConfirm MEDIASFU_API_USERNAME, MEDIASFU_API_KEY, and MEDIASFU_CONNECT_MEDIASFU.
Self-hosted CE does not connectConfirm MEDIASFU_LOCAL_LINK, CE server reachability, CORS, and HTTP/HTTPS expectations.
Camera or microphone is blankGrant browser or device permissions; on mobile, test on a real device when simulator media support is limited.
Mobile build fails after dependency updatesClean native build caches and rerun install steps for the specific app folder.
Expo doctor reports native package warningsCheck the Expo app README and installed SDK compatibility before upgrading Expo.
Browser app builds but room is emptyTest first with the prebuilt UI, then add custom prejoin or no-UI code once the base room works.

Contributing

Contributions are welcome. When changing SDK versions, keep the package manifest, lockfile, app README, root version table, and validation command results aligned in the same pull request.

License

MIT. See LICENSE.