Skip to main content

📘 API reference

The API has the same shape on every platform: initialize (optional), join with options, receive callbacks, and optionally leave from your app.


🚪 Entry points and callbacks​

Kotlin
Importimport org.bigbluebutton.bbb.sdk.*
Initialize (optional)BigBlueButtonSdk.initialize(application) or BigBlueButtonSdk.initialize(application, config)
JoinBigBlueButtonSdk.join(activity, options, listener)
Leave (host-initiated)BigBlueButtonSdk.leave()
In a meeting?BigBlueButtonSdk.isInMeeting
CallbacksBbbMeetingListener: onJoined(), onLeft(reason, detail), onError(message)
Extra listenersBigBlueButtonSdk.addListener(listener) / BigBlueButtonSdk.removeListener(listener), for every meeting

Initializing is optional on the native platforms: join initializes lazily with the default configuration. Initialize at startup to pass your own clientType or appVersion, and to make the first join faster. It is idempotent.


⚙️ Join options​

Only joinUrl is required.

OptionTypeDefaultDescription
joinUrlstring— (required)https://<server>/html5client/join?sessionToken=…, or any https URL whose path ends in /join
meetingNamestringnonename of the meeting
themesystem, light, darksystemcolor theme of the meeting UI
pictureInPicturebooleantruefloating window when the user leaves the app (Android picture-in-picture, iOS AVKit)
screensharePresenterbooleanAndroid true, iOS falsewhether this device may share its screen. The SDK turns it off where the platform cannot share (Android below 10, the iOS simulator). On iOS, set it only when your app ships the Broadcast Upload Extension.
embedModeauto, native, webviewautohow the whiteboard, shared notes and external video are rendered
largeScreenLayoutphone, sidebarphonecomposition on large screens (tablets, unfolded foldables)
devLoggingbooleanfalseverbose client logging in logcat or the Xcode console

Enum values per platform:

PlatformThemeEmbed modeLarge-screen layout
AndroidBbbTheme.SYSTEM, LIGHT, DARKBbbEmbedMode.AUTO, NATIVE, WEBVIEWBbbLargeScreenLayout.PHONE, SIDEBAR
iOSBBBTheme.system, .light, .darkBBBEmbedMode.auto, .native, .webviewBBBLargeScreenLayout.phone, .sidebar
FlutterBbbTheme.system, light, darkBbbEmbedMode.auto, native, webviewBbbLargeScreenLayout.phone, sidebar
React Native'system', 'light', 'dark''auto', 'native', 'webview''phone', 'sidebar'

The option types are BbbJoinOptions (Android, Flutter), BBBJoinOptions (iOS) and the props of <BigBlueButtonMeeting/> (React Native). In Flutter, leaving screensharePresenter unset uses the platform default.


🧩 Process-wide configuration​

Given once, at initialization: BbbSdkConfig (Android, Flutter), BBBSDKConfig (iOS), or the options of configureBigBlueButtonMeeting (React Native).

OptionDefaultDescription
clientTypeNATIVE_MOBILEclient type reported to the BigBlueButton server
appVersionyour app's version (Android versionName, iOS CFBundleShortVersionString, Flutter the host app's); React Native: the Expo config version, or 0.0.0, so pass it explicitlyshown in the user agent
registerWebRtcGlobalstrueReact Native only: pass false when your app registers the LiveKit WebRTC globals itself

📣 Callback behaviour​

  • Error is non-fatal: the meeting may still be running.
  • A join that fails before the meeting opens (invalid link, network or HTTP error) ends with the leave reason error once the user closes the error screen. A join the server refuses ends with ended, and an unsupported server with unsupported.
  • On iOS, the meeting controller is already dismissed when meetingDidLeave arrives, and all delegate calls arrive on the main thread.

🏁 Leave reasons​

ReasonMeaning
leftthe user left (leave button, declined recording, cancelled the guest lobby), or your app asked the meeting to leave (detail is host_leave)
endedthe meeting ended on the server; the user was removed or refused (for example removed by a moderator, a duplicate session, inactivity, or a full meeting); or a guest was denied. detail carries the end or eject code, for example user_requested_eject_reason
errorthe join failed or the session hit an unrecoverable error; detail carries the error message or reason code
unsupportedthe server version or media bridge is not supported by this client (it needs BigBlueButton 4.0.x)
cancelledthe meeting container went away before the meeting UI reported anything (Android, iOS and Flutter only)

Types: BbbLeaveReason (Android LEFT, ENDED, … and Flutter left, ended, …), BBBLeaveReason (iOS), and LeaveInfo.reason (React Native). How to react to each one is in the 🔗 Integration guide.


⚛️ React Native props​

<BigBlueButtonMeeting/> takes the join options as props, plus:

PropTypeDefaultDescription
onJoined() => void—the user is in the meeting
onLeave(info: LeaveInfo) => void—the meeting is over: unmount the component here
onError(message: string) => void—reserved: accepted, but not called in 0.1.0; failures reach onLeave with reason: 'error'
leaveSignal(listener) => unsubscribe—host-initiated leave: the component subscribes a listener; call it to leave
openLogoutUrlbooleantruewhether the ended screen may open the meeting's logout URL in the browser; apps that embed the meeting usually pass false
gestureRootbooleantruepass false when your app already renders a GestureHandlerRootView above the component
afterLeaveReact nodenothingrendered in place of the meeting once the session is over

⚠️ Flutter errors​

BbbMeetingSdk.join throws a PlatformException instead of opening a meeting:

CodeWhen
already_in_meetinga meeting is already open
invalid_argumentsno join URL was given
no_activity (Android) / no_view_controller (iOS)there is nothing to present the meeting from
join_failedAndroid only: the SDK cannot start the meeting

BbbMeetingSdk.initialize throws no_application on Android when there is no application context yet.