Skip to main content

October 2026 SDK Release and Migration Notes

October's SDK releases let people share the sound of a tab with their screen, wait in a waiting room before joining an API-created room, and see each other's display names everywhere in the room. Join failures now explain themselves, a reloaded page rejoins as the same person, and microphones recover more reliably. No public API was removed, so upgrading is a version bump for most apps.

The versions below were checked against npm, pub.dev, Maven Central, and GitHub on 20 October 2026.

SDKVersionHighlights
ReactJSmediasfu-reactjs@4.4.5Screen-share audio, rejoin after reload, waiting rooms, display names, join errors
Angularmediasfu-angular@2.5.2Screen-share audio, waiting rooms, display names, join errors
Vuemediasfu-vue@1.3.2Screen-share audio, waiting rooms, display names, join errors
React Nativemediasfu-reactnative@2.5.2Hear screen audio, bring your own screen capture, waiting rooms, display names
Expomediasfu-reactnative-expo@2.6.2Hear screen audio, bring your own screen capture, waiting rooms, display names
Shared coremediasfu-shared@1.3.3The runtime behind every feature below, for custom renderers
Fluttermediasfu_sdk@2.4.4Screen-share audio on web, rejoin after reload, waiting rooms, display names, join errors
Androidcom.mediasfu:mediasfu-sdk-android:1.0.9Display names, audio-only room fix
Kotlin Multiplatformcom.mediasfu:mediasfu-sdk:1.0.9Display names, audio-only room fix, room handoff from your backend
Swift / AppleMediaSFUAppleSDK 0.1.7Room handoff from your backend, packaged media client
Unitycom.mediasfu.unity@0.1.0-preview.2Unchanged this month

mediasfu-reactjs@4.4.6 and mediasfu-shared@1.3.4 are also on npm. They have the same APIs as 4.4.5 and 1.3.3 and add the microphone-recovery fixes described under Steadier calls.

Share the sound of a tab or screen​

When someone shares a tab or screen in a desktop Chromium browser (Chrome, Edge, Opera, or Brave), the room asks whether to share Screen + audio or Screen only. The sound travels as its own track: it pauses and stops with the share and never marks the sharer as speaking. Everyone else hears it through a "name · Screen audio" card they can mute for themselves.

  • ReactJS, Angular, Vue, and Flutter web can share screen audio. Set the behavior to ask (the default), always, or never.
  • React Native and Expo apps on Android and iOS play screen audio from others; their web builds can share it too.
  • Rooms on media servers without screen-audio support keep video-only sharing.

See Share the sound of a tab or screen for each SDK's setting.

Waiting rooms for rooms you create through the API​

When a room has its waiting room on, a guest who joins through an SDK now waits until the host lets them in and then joins by itself. A declined guest or an ended room gets a clear message. This works without any code changes. Custom join screens can show progress:

  • ReactJS: listen for the mediasfu:waiting-room window event; dispatch mediasfu:waiting-room-cancel to stop waiting.
  • Flutter: addWaitingRoomListener and cancelWaitingRoom().
  • Shared core: waitForRoomAdmission, which joinRoomOnMediaSFU uses.

Angular, Vue, React Native, and Expo get the same behavior through their room helpers.

Choose where a room runs​

Room creation accepts three new options in ReactJS, Angular, Vue, React Native, Expo, Flutter, and the shared core:

OptionWhat it does
regionPreferred media region: asia, europe, us, or general. Best effort: the room can be placed elsewhere if that region has no healthy media server.
regionStrictWith a region, place the room only there. Creation fails (HTTP 503, region-unavailable) instead of falling back.
waitRoomTurn on the room's waiting room so participants wait until the host admits them.

Readable names everywhere​

Video and audio cards, camera-off tiles, participant lists, and the join notice now show a member's display name when the room has one, falling back to the member name. A room creator who set a display name no longer appears to others under their user name. For your own UI:

  • Shared core: participantLabel() and displayName on Participant.
  • Flutter and Kotlin: Participant.displayName and Participant.label.

Join errors that explain themselves​

Join pages now say why a room couldn't be joined (credentials refused, no meeting minutes, offline, or server unreachable) instead of showing a generic message. A refused credential is not retried in a loop, and offline or unreachable-server attempts no longer count toward the join attempt limit.

For a custom join screen, connectSocket rejects with a MediaSocketConnectError (phase, reason, stage, elapsedMs, online, retryable), and describeMediaSocketError turns it into a sentence you can show. This applies to ReactJS, Angular, Vue, React Native, Expo, and the shared core. Flutter throws a MediaSocketConnectException whose userMessage is ready to display.

Rejoin after a reload​

In ReactJS and Flutter, reloading the page rejoins the room as the same participant. If the same person joins from another tab or device, the older session shows "You joined from another tab or device." with Use this one, and never rejoins on its own. In ReactJS, cancel the mediasfu:session-replaced window event to show your own message instead. This needs media servers with participant-rejoin support; on others, a reload joins as before. See Recover rooms and control media.

Steadier calls​

  • No more silent microphones when the microphone and camera start together or a toggle overlaps a rejoin: each connection now creates one send transport, and simultaneous requests share it (ReactJS, Angular, Vue, Flutter, and the shared core).
  • Microphones in audio-only rooms (created with mediaType: "audio") can be turned on again in ReactJS, Angular, Vue, React Native, Expo, Flutter, Android, and Kotlin.
  • A refused reconnect is final. When a media server refuses a reconnect for good (the room ended, the credentials were replaced, or the account has no meeting minutes), the SDK closes that connection instead of retrying.
  • Busy rooms share the load: new streams come from a busy media server's backup when it has one.
  • Microphone recovery (ReactJS 4.4.6, shared core 1.3.4, Flutter 2.4.4): no redundant connection restart when the network returns during a retry, the newly captured microphone track is used when an earlier one ended, and an explicit microphone retry works after a failed connection. Recovery never unmutes or asks for microphone access by itself.

Also new​

  • React Native and Expo: bring your own screen capture. Pass uiOverrides.screenCapture (a getDisplayMedia-style function, or { getDisplayMedia, supportsAudio, onStop }) to share the screen with your own native capture on Android and iOS; uiOverrides.startShareScreen replaces or wraps the whole start flow. MiniAudio also accepts onPress and accessibilityLabel.
  • Spoken-translation voices (ReactJS 4.4.4, shared core 1.3.3, Flutter 2.4.3): the voice picker lists the voices the room's server offers, including Fish, Sarvam, and xAI voices, and submits exactly the voice you choose.
  • Swift: launch Cloud rooms from your backend. MediaSFUAppleSDK 0.1.7 takes the roomName, secret, and link from your backend's create or join response (roomName, roomApiToken, roomLink), so no account key ships in the app. See the Swift guide.
  • Kotlin: start from your backend's room response. Kotlin 1.0.8 adds an optional cloudRoomSession (MediaSFUCloudRoomSession with roomName, secret, link, and memberName) so a native app can start the room from the result your backend returns.

Upgrade checklist​

  1. Update to the versions above and regenerate your lockfile.
  2. If you render your own join screen, show describeMediaSocketError(error) (or Flutter's userMessage) instead of a generic failure.
  3. If you build your own tiles or participant list, label people with their display name (participantLabel() in the shared core, Participant.label in Flutter and Kotlin).
  4. If your app shows its own "disconnected" message in ReactJS or Flutter, skip it when the session was replaced by another tab or device.
  5. Swift apps moving to 0.1.7: add the MediaSFUMediasoupClient product and the CADisableMinimumFrameDurationOnPhone plist key, and launch Cloud rooms from your backend's handoff as shown in the Swift guide.
  6. Test with two people: screen share with and without audio, a waiting-room admission, leave, and a second join after cleanup.

Earlier changes are in the September 2026 notes.