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.
| SDK | Version | Highlights |
|---|---|---|
| ReactJS | mediasfu-reactjs@4.4.5 | Screen-share audio, rejoin after reload, waiting rooms, display names, join errors |
| Angular | mediasfu-angular@2.5.2 | Screen-share audio, waiting rooms, display names, join errors |
| Vue | mediasfu-vue@1.3.2 | Screen-share audio, waiting rooms, display names, join errors |
| React Native | mediasfu-reactnative@2.5.2 | Hear screen audio, bring your own screen capture, waiting rooms, display names |
| Expo | mediasfu-reactnative-expo@2.6.2 | Hear screen audio, bring your own screen capture, waiting rooms, display names |
| Shared core | mediasfu-shared@1.3.3 | The runtime behind every feature below, for custom renderers |
| Flutter | mediasfu_sdk@2.4.4 | Screen-share audio on web, rejoin after reload, waiting rooms, display names, join errors |
| Android | com.mediasfu:mediasfu-sdk-android:1.0.9 | Display names, audio-only room fix |
| Kotlin Multiplatform | com.mediasfu:mediasfu-sdk:1.0.9 | Display names, audio-only room fix, room handoff from your backend |
| Swift / Apple | MediaSFUAppleSDK 0.1.7 | Room handoff from your backend, packaged media client |
| Unity | com.mediasfu.unity@0.1.0-preview.2 | Unchanged 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, ornever. - 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-roomwindow event; dispatchmediasfu:waiting-room-cancelto stop waiting. - Flutter:
addWaitingRoomListenerandcancelWaitingRoom(). - Shared core:
waitForRoomAdmission, whichjoinRoomOnMediaSFUuses.
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:
| Option | What it does |
|---|---|
region | Preferred media region: asia, europe, us, or general. Best effort: the room can be placed elsewhere if that region has no healthy media server. |
regionStrict | With a region, place the room only there. Creation fails (HTTP 503, region-unavailable) instead of falling back. |
waitRoom | Turn 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()anddisplayNameonParticipant. - Flutter and Kotlin:
Participant.displayNameandParticipant.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(agetDisplayMedia-style function, or{ getDisplayMedia, supportsAudio, onStop }) to share the screen with your own native capture on Android and iOS;uiOverrides.startShareScreenreplaces or wraps the whole start flow.MiniAudioalso acceptsonPressandaccessibilityLabel. - 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.
MediaSFUAppleSDK0.1.7 takes theroomName,secret, andlinkfrom 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(MediaSFUCloudRoomSessionwithroomName,secret,link, andmemberName) so a native app can start the room from the result your backend returns.
Upgrade checklist
- Update to the versions above and regenerate your lockfile.
- If you render your own join screen, show
describeMediaSocketError(error)(or Flutter'suserMessage) instead of a generic failure. - If you build your own tiles or participant list, label people with their
display name (
participantLabel()in the shared core,Participant.labelin Flutter and Kotlin). - If your app shows its own "disconnected" message in ReactJS or Flutter, skip it when the session was replaced by another tab or device.
- Swift apps moving to 0.1.7: add the
MediaSFUMediasoupClientproduct and theCADisableMinimumFrameDurationOnPhoneplist key, and launch Cloud rooms from your backend's handoff as shown in the Swift guide. - 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.