Skip to main content
Version: 4.0 (in development)

new-features

BigBlueButton 4.0 runs on Ubuntu 24.04

Overview​

BigBlueButton 4.0 offers users improved usability and increased engagement.

  • Usability - making common functions (such as raising a hand) easier
  • Engagement - giving the instructor more ways to engage students

The most visible change in 4.0 is a redesigned client interface built around a new navigation sidebar and an Apps Gallery. Under the hood, 4.0 moves to Ubuntu 24.04 and continues the modernization of the codebase that began in 3.0.

Here's a breakdown of what's new in 4.0.

Usability​

The client's left-hand navigation has been redesigned into a dedicated navigation sidebar with a cleaner set of buttons (user list, chat, shared notes, timer, settings, and more), notification indicators, and a participant-count badge on the user list button.

Alongside it, a new Apps Gallery brings together apps such as Polls, Breakout Rooms, Timer, and Audio Captions — as well as plugins. Frequently used apps can be pinned, and pinned apps are persisted and cached across sessions. Recently added apps can be highlighted with a "new" ribbon. The gallery can be searched, switched between list and grid views (the choice is remembered, and mobile defaults to the list view), and pinned apps can be managed directly from the gallery.

The number of apps that can be pinned is controlled by public.app.appsGallery.maxPinnedApps (default 3), and which apps show the "new" label is controlled by public.sidebarNavigation.appsToLabelAsNew in settings.yml. Which built-in buttons appear in the sidebar, in which section, and in what order is controlled by public.sidebarNavigation.buttons (see the client-settings changes below). The sidebar navigation can be hidden per user with the join parameter userdata-bbb_hide_sidebar_navigation.

Search the user list​

Moderators and viewers can now search the user list in real time. The search supports full-text and reverse matching and includes the current user in the results, and it also filters the raised-hands and waiting-guest sections. It can be toggled with public.userList.searchBar.enabled (default true), and the page size of the user list is configurable via public.layout.usersPerUserListPage (default 50).

Redesigned timer​

The timer received a new design and an improved input experience, including one-click presets and quick-add buttons. The available values are configurable in settings.yml (public.timer.presets, public.timer.quickAddButtons, public.timer.maxHours).

Redesigned guest management panel​

Guest management now lives in a dedicated panel integrated with the user list. Moderators approving or denying guests in the waiting panel can use a new "Remember Choice" option to apply the same decision to subsequent join requests. The input for messaging the waiting room now gives visual send-state feedback so moderators can tell their message was delivered.

Redesigned permissions (lock viewers) modal​

The "Lock viewers" / permissions modal was redesigned with a tabbed layout, and the toggle switches were replaced with checkboxes to make the "restrict" action clearer. The modal now warns about unsaved changes before closing. It also surfaces the new presenter policy described under Request to Present.

Mobile layout overhaul​

The mobile experience received a major overhaul. Webcams on mobile are now paginated, with swipe gestures and a dots indicator to move between pages, and the default mobile camera grid was reduced to 6 visible cameras (public.kurento.pagination.mobileGridSizes). The navigation bar uses circular buttons with an aligned sidebar toggle, the actions bar was made more compact with a unified audio control, and the chat and meeting options menus render as compact popovers. Dialogs such as the request-unmute modal were adapted to small screens. On phones in landscape orientation, cameras and the presentation are arranged side by side.

Automatic light/dark theme​

The client now follows the operating system's light/dark preference (prefers-color-scheme) as the initial theme, and keeps following it while the user has not chosen a theme manually. The per-user "Dark mode" toggle and the userdata-bbb_prefer_dark_theme join parameter always take precedence over the detected system theme. The behavior is controlled by public.app.darkTheme.autoDetectFromSystem (default true).

Dedicated Audio settings tab​

Audio settings moved into a dedicated Audio tab in the Settings modal, where each user picks how their microphone signal is processed before it is sent to other participants:

  • Advanced Filtering - an optional WASM-based audio processor that runs on top of the microphone stream, isolating the speaker's voice and eliminating background noise. Two interchangeable backends are available, selected by the administrator via public.media.audio.audioWasmProcessing.provider: bbba (the default) and workadventureDtln (DTLN noise suppression as used by WorkAdventure). It is disabled by default and has to be made available by the administrator; see Advanced Filtering (WASM audio processing) for configuration details.
  • Standard Filtering (default) - the browser's built-in filters: auto gain control, echo cancellation, and noise suppression.
  • Original Audio - no processing at all; the raw microphone signal is transmitted. Ideal for sharing music, singing, or instruments.

The mode pre-selected for a new user is controlled by public.app.defaultSettings.audio.processingMode (default standard); if it is set to advanced while WASM processing is unsupported by the browser or disabled server-side, the client falls back to standard. The browser-level constraints applied in the standard mode are configurable under public.media.audio.microphoneConstraints.

Wrong-microphone alert for live captions​

When browser-based (WebSpeech) live captions are enabled and a user holds the audio floor but no transcription is produced for a short while, BigBlueButton now shows a toast suggesting the wrong microphone may be selected or the environment is too noisy. The alert can optionally link to a knowledge-base article and is configurable via public.app.audioCaptions.microphoneAlert in settings.yml.

Whiteboard: scroll to pan, Ctrl+scroll to zoom​

Scrolling the mouse wheel over the whiteboard now pans the presentation, and holding Ctrl (Cmd on macOS) while scrolling zooms in and out - matching the navigation model of most design tools.

This is configurable: set public.whiteboard.wheelZoomRequiresCtrl to false to restore the BigBlueButton 3.0 behavior, where the wheel zooms directly and no modifier key is involved.

Engagement​

Request to Present​

Viewers can now actively request the presenter role instead of waiting for a moderator to assign it. When a viewer requests to present, moderators see the request and can approve or deny it; the requesting viewer sees a waiting state and a notification if the request is denied.

This behavior is governed by a new presenter policy, configurable per meeting via the lockSettingsPresenterPolicy create parameter and the server default lockSettingsPresenterPolicy in bbb-web's properties. The accepted values are:

  • moderatorOnly - only moderators can assign the presenter.
  • requireApproval (default) - viewers can request to present, and a moderator must approve.
  • freeForAll - viewers can take the presenter role without approval.

Pinned chat messages​

Moderators can now pin a chat message so it stays prominently visible to everyone in the meeting. Pinning is exposed through the chat message toolbar (the new pin option in public.chat.toolbar) and can be disabled per meeting with the pinChatMessage value of disabledFeatures.

When allowModsToUnmuteUsers is enabled, BigBlueButton 4.0 can optionally ask the participant for consent before a moderator unmutes them. With the new requireUserConsentBeforeUnmuting option set to true, a consent dialog is shown to the user instead of the microphone being unmuted directly. The default (false) preserves the legacy behavior. This can be set server-wide in bbb-web's properties or per meeting on the create call.

Multi-Functional Mode (auxiliary sidebar)​

A new Multi-Functional Mode adds an auxiliary sidebar content panel, allowing a second panel to be open alongside the primary one (for example, chat and the user list at the same time). It is disabled by default and enabled with public.multiFunctionalMode.enabled in settings.yml, and it can be disabled per meeting with the multiFunctionalMode value of disabledFeatures.

Larger emoji-only chat messages (jumbomoji)​

A chat message that contains only emoji (up to three emoji, whitespace ignored) is now rendered at a larger font size — matching the "jumbomoji" behavior familiar from popular messengers. Messages with any accompanying text keep the normal size.

Learning Dashboard for breakout rooms​

The Learning Dashboard is no longer disabled in breakout rooms: each breakout gets its own dashboard, tracking activity the same way the parent meeting does (an inherited disabledFeatures=learningDashboard still turns it off). A breakout's dashboard data is also kept until the parent meeting ends - previously cleanup was anchored to the breakout's own end - so instructors can review breakout activity for as long as the main room is running (plus learningDashboardCleanupDelayInMinutes).

Behind the scenes​

Client re-architecture and TypeScript migration​

The client UI continued its migration to TypeScript, and large parts of the navigation, sidebar, and actions bar were rebuilt. The old "Action Button Dropdown" was replaced by a new Media Area component in the actions bar, and a new icon library was introduced.

Bot user support​

The client now has first-class handling for bot users (joined with bot=true). Bots are excluded from the grid layout and screenshare UI, can be given a dedicated user-list label, and skip the logout-URL redirection when the meeting ends.

Server messages internationalized on the frontend​

Strings that were previously emitted as English constants from the server (Akka) — for example some chat/notification messages — are now resolved to i18n keys on the frontend, improving localization coverage.

Media​

LiveKit is the default media framework​

BigBlueButton 4.0 uses LiveKit as the default media framework for audio, camera video, and screen sharing. The previous mediasoup/bbb-webrtc-sfu stack (and FreeSWITCH for audio) stays installed and fully supported as an alternative bridge. For an in-depth overview of this initiative, please refer to issue 21059.

The bbb-livekit package (livekit-server and livekit-sip) is installed by default and the LiveKit module in bbb-webrtc-sfu is enabled out of the box.

When using BigBlueButton via the cluster proxy configuration, set the LiveKit endpoint URL in bbb-html5.yml's public.media.livekit.url. See the cluster proxy docs for details.

We also strongly recommend setting up network interface filtering in LiveKit. While optional, this speeds up negotation times and works around an issue with the latest LiveKit versions that might cause CPU spikes if there's no filtering in place. To set up network interface filtering:

  1. Gather relevant network interfaces names to be used for media communication. For most setups, the default network interface is enough. See the route command to find it (Destination: default). If any other network interfaces are needed, make note of them.
  2. Set the following in /etc/bigbluebutton/livekit.yaml:
rtc:
interfaces:
includes:
- <network_interface_name_1>
- <any_other_network_interface_name>
  1. Restart livekit-server: $ sudo systemctl restart livekit-server

Each media type defaults to livekit and can be pointed at the legacy stack instead, per meeting or server-wide:

  • Per meeting: set any of the following meeting /create parameters
    • audioBridge=bbb-webrtc-sfu (or freeswitch)
    • cameraBridge=bbb-webrtc-sfu
    • screenShareBridge=bbb-webrtc-sfu
  • Server-wide: set any of the following properties in /etc/bigbluebutton/bbb-web.properties
    • audioBridge=bbb-webrtc-sfu
    • cameraBridge=bbb-webrtc-sfu
    • screenShareBridge=bbb-webrtc-sfu

Those parameters do not need to be set concurrently. The legacy framework can be used for audio only, for example, while keeping LiveKit for camera and screen sharing by setting just audioBridge=bbb-webrtc-sfu.

As of BigBlueButton v3.0.7, recording is enabled by default for LiveKit sessions via the bbb-webrtc-recorder application. If livekit/egress was previously installed in a server, any steps done to enable it should be reverted. Refer to the previous installations steps.

Listening into a breakout room from the parent meeting is now supported on the LiveKit bridge, at feature parity with the FreeSWITCH/mediasoup transfer flow. A moderator using the breakout panel's listen action is switched into the breakout's audio - mute/unmute applies to the breakout while listening - and gets a persistent toast naming the room, with a "Return to main room" button. Under the hood this is built on a new membership-based LiveKit token model, which also brings automatic token refresh for long-running sessions.

We encourage users to provide feedback via our GitHub issue tracker or the mailing lists.

Upgraded components​

Under the hood, BigBlueButton 4.0 installs on Ubuntu 24.04 64-bit, and the following key components have been upgraded

  • Java 21 (OpenJDK)
  • Grails 7.0.12
  • Gradle 8.14.3
  • Groovy 4.0.21
  • Spring 6.2.11
  • Spring Boot 3.5.16

For full details on what is new in BigBlueButton 4.0, see the release notes.

Recent releases:

Other notable changes​

Node.js 24 runtime​

BigBlueButton 4.0 runs its Node.js components (bbb-html5 build, bbb-graphql-actions, bbb-shared-notes-server, bbb-export-annotations, bbb-webhooks, bbb-webrtc-sfu, bbb-transcription-controller) on Node.js 24, the Active LTS line maintained until April 2028. bbb-install.sh installs it from NodeSource, and the packages declare a dependency on nodejs (>= 24) (<< 25).

In BigBlueButton 4.0.0-beta.4 we replaced the default choice for Shared Notes component from bbb-etherpad (i.e. Etherpad) to bbb-shared-notes-server (i.e. BlockNote). bbb-shared-notes-server is a required package, installed by default.

Etherpad (bbb-etherpad and bbb-pads packages) is not part of the default installation of BigBlueButton 4.0, and its support was dropped within the 4.0 lifecycle; see Removed Etherpad.

Removed Etherpad​

BigBlueButton 4.0 removes Etherpad entirely. Shared notes always use BlockNote (bbb-shared-notes-server).

  • The bbb-etherpad and bbb-pads packages are no longer built or published.
  • Upgrading a 4.0 pre-release server (beta or release candidate) that had them installed removes both packages and cleans up what they left behind: the Etherpad files and generated API key, the etherpad system user, the /etc/bigbluebutton/etherpad.json and /etc/bigbluebutton/bbb-pads.json overrides, the public.pads entry in /etc/bigbluebutton/bbb-html5.yml, and the pads and authors Etherpad stored in Redis (keys starting with pad:, sessionstorage:, globalAuthor:, token2author:, pad2readonly:, readonly2pad: and ueberDB:). Pads stored in Etherpad are not migrated.
    • Etherpad's group and session keys are left in Redis (groups, group:*, group2sessions:*, author2sessions:*, session:*, mapper2group:* and mapper2author:*): these prefixes are too generic to delete safely on a Redis instance that other applications may share. Nothing reads them anymore; remove them by hand if you need to.
    • Use apt full-upgrade (or dist-upgrade). apt upgrade never removes packages, and because the bigbluebutton package depends on the exact version of every BigBlueButton package, it then holds back the whole BigBlueButton upgrade, not only the Etherpad removal. To remove Etherpad before upgrading, run $ sudo apt purge bbb-etherpad bbb-pads.
  • The sharedNotesEditor /create parameter and the sharedNotesEditor property in bbb-web.properties are ignored; every meeting gets BlockNote shared notes. If you customized /usr/share/bbb-web/WEB-INF/classes/spring/resources.xml in place, remove its <property name="sharedNotesEditor" .../> entry; see bbb-web properties changes.
  • The Etherpad-only parts of the GraphQL API were removed: the sharedNotesEditor field of sharedNotes, the isEtherpadSharedNotes field of meeting.componentsFlags, the sharedNotesSession field of user_current, the sharedNotes_session and sharedNotes_diff types (with their queries and subscriptions) and the sharedNotesCreateSession mutation. Plugins or integrations that still request any of them get a GraphQL validation error and should drop them.
  • The recording scripts no longer read notes_endpoint (the Etherpad export endpoint) from bigbluebutton.yml, and etherpad is no longer a valid entry in notes_formats. Remove both from /etc/bigbluebutton/recording/recording.yml if you set them there. The notes are exported from bn_notes_endpoint, which now defaults to http://127.0.0.1:8787/loopback/api/documents. If you override bn_notes_endpoint in recording.yml, change its path to /loopback/api/documents. The previous /api/documents path no longer answers the recording scripts, so recordings would be archived without their shared notes.
  • Recordings made with Etherpad keep the notes they already archived, including when they are rebuilt with bbb-record --rebuild (a rebuild reprocesses the archived raw files and does not archive again). Only running the archive step again for such a recording would fail to fetch its notes: the step logs a warning, writes the notes/export_failed marker and continues without shared notes.

New optional package: bbb-coturn​

BigBlueButton 4.0 adds bbb-coturn, a BigBlueButton build of the coturn TURN/STUN server. Ubuntu 24.04 only ships coturn 4.6.1; bbb-coturn packages coturn 4.16.0.

It is an optional package — it is not a dependency of the bigbluebutton meta-package and is not installed by default. Install it with

$ sudo apt install bbb-coturn

bbb-coturn is a drop-in replacement for the distro coturn package: it declares Provides/Conflicts/Replaces on coturn (so apt swaps one for the other) and keeps the same paths — /usr/bin/turnserver, the /etc/turnserver.conf config file, and a coturn.service systemd unit. Existing systemd drop-ins under /etc/systemd/system/coturn.service.d/ continue to apply.

Unlike the distro package, bbb-coturn does not enable or start the service on install. The shipped /etc/turnserver.conf is the stock upstream example with every option commented out, and coturn's default in that state is anonymous access — starting it before a real configuration is written would expose an open relay. Once you have configured /etc/turnserver.conf, start it with

$ sudo systemctl enable --now coturn

See Turn Server Configuration for the full configuration.

New optional package: bbb-playback-presentation-legacy​

The players for recordings made with BigBlueButton 0.81 and 0.9 (served under /playback/presentation/0.81/ and /playback/presentation/0.9.0/) moved out of bbb-playback-presentation into the new bbb-playback-presentation-legacy package, together with the redirect from the unversioned /playback/presentation/playback.html link. Recordings made by any current version use the 2.3 player from bbb-playback, so a default install no longer ships the old players, and links to them answer 404.

It is an optional package, not a dependency of the bigbluebutton meta-package. If you migrated recordings from those versions and still need to play them, install it with

$ sudo apt install bbb-playback-presentation-legacy

See Play recordings made with BigBlueButton 0.81 or 0.9 for details.

New administration tool: bbbctl​

The bbb-config package now ships bbbctl (v0.5.1), a community-maintained command-line tool by @defnull for interacting with a BigBlueButton server from the shell. Installed as /usr/bin/bbbctl, it talks to the server's own API and lets administrators list, inspect, and end meetings and work with recordings without crafting signed API calls by hand. Thank you for developing it, defnull!

Plugin SDK 1.0 pre-release​

The HTML5 client now uses bigbluebutton-html-plugin-sdk 1.0.0-beta.3, and html5PluginSdkVersion defaults to the same value. This is a breaking change for plugins: a pre-release SDK only satisfies a requiredSdkVersion range that names a 1.0.0 pre-release, so manifests declaring 0.x ranges such as ^0.1.26 or ~0.0.77 are rejected and each meeting records a plugin load failure in bbb-apps-akka.

Plugin authors should publish manifests with a range that names the pre-release, for example ^1.0.0-beta.1, which also accepts the final 1.0.0 and later 1.x releases. To keep one manifest loading on 4.0 pre-releases up to 4.0.0-rc.4, which run the 0.1.x SDK, add the 0.1.x range: ^0.1.5 || ^1.0.0-beta.1. Update the manifests of the plugins you deploy before, or together with, the upgrade. See SDK version compatibility.

If you set html5PluginSdkVersion in /etc/bigbluebutton/bbb-web.properties, remove it or update it to 1.0.0-beta.3. An override keeps manifests being validated against an SDK version different from the one the client actually runs.

Removing deprecated layout options​

The layout system has been simplified to use a single unified layout. The following layouts have been removed: CUSTOM_LAYOUT, SMART_LAYOUT, PRESENTATION_FOCUS, and VIDEO_FOCUS. The default layout is now UNIFIED_LAYOUT.

The layout selection modal and the push layout button have also been removed. The showPushLayoutButton, showPushLayoutToggle, and enableDeprecatedLayoutSelection settings are no longer available.

The layouts option has been removed from disabledFeatures.

Removed REST endpoint​

The deprecated REST endpoint /api/rest/clientSettings has been removed. Client settings are now served through the GraphQL stack. Any integration that fetched client settings from that endpoint should be updated.

Other removed configuration​

  • public.stats.log was removed and replaced by public.stats.logMediaStats (see Client-side WebRTC stats logging).
  • captions is no longer a valid disabledFeatures value. It has had no effect since BBB 3.0, when typed captions moved to a plugin. Use liveTranscription to disable automatic transcription.

Changes to events.xml​

bbb-web properties changes​

Removed​

  • allowDuplicateExtUserid is no longer recognized. Use maxUserConcurrentAccesses instead.
  • lockSettingsDisableNote is no longer recognized; use lockSettingsDisableNotes instead. The singular property was renamed in BBB 2.5.
  • clientLogoutTimerInMinutes was removed. It was never consumed by the HTML5 client; its last reader, the /enter endpoint, was removed before BBB 4.0.
    • If you customized /usr/share/bbb-web/WEB-INF/classes/spring/resources.xml in place, also remove the <property name="clientLogoutTimerInMinutes" .../> entry - bbb-web will fail to start (NotWritablePropertyException) otherwise. The bbb-conf --check retired-property warning only scans /etc/bigbluebutton/bbb-web.properties, not resources.xml.
  • enteredUsersTimeout was removed. It set how long bbb-web tracked users who had called the /enter endpoint without joining; that endpoint was removed in BBB 3.0, so nothing has been tracked since. A leftover value in /etc/bigbluebutton/bbb-web.properties is ignored, and bbb-conf --check lists it for removal.
    • If you customized /usr/share/bbb-web/WEB-INF/classes/spring/resources.xml in place, also remove the enteredUserCleanupTimerTask bean and the <property name="enteredUserCleanupTimerTask" .../> and <property name="enteredUsersTimeout" .../> entries - bbb-web will fail to start otherwise.
  • sharedNotesEditor was removed: BlockNote is the only shared-notes editor (it first became the default in 4.0.0-beta.4; see Promoted BlockNote shared notes as default and Removed Etherpad). A leftover value in /etc/bigbluebutton/bbb-web.properties is ignored.
    • If you customized /usr/share/bbb-web/WEB-INF/classes/spring/resources.xml in place, also remove the <property name="sharedNotesEditor" .../> entry - bbb-web will fail to start (NotWritablePropertyException) otherwise.

Value changed​

  • defaultMeetingLayout default changed from CUSTOM_LAYOUT to UNIFIED_LAYOUT. Accepted values are now UNIFIED_LAYOUT (default), plus the hybrid/niche options CAMERAS_ONLY, PARTICIPANTS_AND_CHAT_ONLY, PRESENTATION_ONLY, and MEDIA_ONLY. The previous values CUSTOM_LAYOUT, SMART_LAYOUT, PRESENTATION_FOCUS, and VIDEO_FOCUS are no longer accepted.
  • html5PluginSdkVersion bumped from 0.1.17 to 1.0.0-beta.3. Plugins whose requiredSdkVersion only covers the 0.x SDK no longer load; see Plugin SDK 1.0 pre-release.
  • disabledFeatures accepts a new value: pinChatMessage (alongside the existing chat-related options).
  • disabledFeatures no longer lists captions as an option. It has had no effect since BBB 3.0, when typed captions moved to a plugin. A server that still sets it in bbb-web.properties keeps working: the value is accepted and ignored. Use liveTranscription to disable automatic transcription.
  • cameraBridge, screenShareBridge, and audioBridge default changed from bbb-webrtc-sfu to livekit (see LiveKit is the default media framework).

Added​

  • lockSettingsPresenterPolicy added (default requireApproval). Controls whether viewers can request the presenter role; see Request to Present.
  • requireUserConsentBeforeUnmuting added (default false). Only relevant when allowModsToUnmuteUsers=true; when true, a consent dialog is shown before a moderator can unmute a participant.
  • maskTagThreshold added (default 0 = disabled). When set to N, any slide whose generated SVG contains N or more <mask> tags falls back to full-slide rasterization during conversion; see Rasterize slides whose SVG contains mask tags.
  • filterTagThreshold added (default 1; 0 = disabled). Slides whose generated SVG contains N or more <filter> tags (which pdftocairo emits for soft masks) are rendered with both pdftocairo and pdftoppm, and are rasterized only when the two renders noticeably differ. This fixes slides that showed up blank or with missing images (#23953); see Verify slides with soft masks.

Client settings (settings.yml) changes​

These changes apply to the client configuration file (/etc/bigbluebutton/bbb-html5.yml, overriding the defaults in settings.yml).

Added​

  • public.kurento.pagination.gridEnabled (default true) - whether the camera-less avatar grid (the "webcam grid") is shown while the presentation is minimized. The grid can also be disabled per meeting with disabledFeatures=webcamGrid.
  • public.multiFunctionalMode.enabled (default false) - enables the auxiliary/dual sidebar content panel.
  • public.userList.searchBar.enabled (default true) - enables the user list search field.
  • public.app.appsGallery.maxPinnedApps (default 3) - maximum number of apps a user can pin in the Apps Gallery.
  • public.app.remainingTimeThresholdInMinutes (default 6) - how many minutes before the end of a meeting with a set duration the remaining time banner appears. Previously this was hard-coded to 30 minutes; set it to 30 to restore that behavior. See Configure when the remaining time banner appears.
  • public.sidebarNavigation.appsToLabelAsNew (default []) - apps to highlight with a "new" label (e.g. poll, breakoutroom, timer, audio-captions).
  • public.media.audio.audioWasmProcessing - configuration block for the "Advanced Filtering" (WASM) audio-processing option; provider selects the backend (bbba default, or workadventureDtln) and a provider may override values set in constraints; see Dedicated Audio settings tab.
  • public.app.defaultSettings.audio.processingMode (default standard) - which of the three audio-processing modes (advanced, standard, original) comes pre-selected for a new user in Settings > Audio. advanced falls back to standard when WASM processing is unsupported by the browser or disabled server-side.
  • public.app.defaultSettings.application.recordingIndicatorAutoCollapse (default false) - collapses the recording indicator in the navigation bar to an icon-only button that reveals its label on hover or keyboard focus. Users can change it in Settings > Application ("Collapse recording button"); phones and the read-only indicator never collapse.
  • public.media.audio.microphoneConstraints - browser-level audio constraints (auto gain control, echo cancellation, noise suppression) applied when the user selects the standard audio-processing mode (moved from public.app.defaultSettings.application.microphoneConstraints).
  • public.timer.presets, public.timer.quickAddButtons, public.timer.maxHours, public.timer.serverSyncTimeInterval - timer presets and behavior.
  • public.app.breakouts.breakoutRoomMinimum (default 2) - minimum number of breakout rooms.
  • public.app.breakouts.inheritLockSettingsByDefault (default false) - pre-checks the "Propagate the current lock settings" option when a moderator creates breakout rooms, like captureSharedNotesByDefault and sendInvitationToAssignedModeratorsByDefault do for their options.
  • public.app.audioCaptions.showInSidebarNavigation and public.app.audioCaptions.terms - show captions in the sidebar navigation and configure terms-of-service URLs per locale.
  • public.app.darkTheme.autoDetectFromSystem (default true) - uses the operating system's prefers-color-scheme preference as the initial theme and keeps following it while the user has not chosen a theme manually. The per-user "Dark mode" toggle and the bbb_prefer_dark_theme parameter always take precedence over the detected system theme.
  • public.stats.logMediaStats and public.stats.probes - client-side WebRTC stats logging.
  • public.layout.showLeaveSessionLabel (default false) and public.layout.usersPerUserListPage (default 50).
  • public.sidebarNavigation.buttons - controls which built-in sidebar navigation buttons render, in which section (top/center/bottom) and in what order. It is a full replacement list (omit an id to hide that button; ids introduced by future upstream versions must be added back manually). Defaults: top: [profile, user-list, chat, notes], center: [apps-gallery, pinned-apps], bottom: [audio-captions, learning-dashboard, settings].
  • public.app.audioCaptions.microphoneAlert (default enabled: true) - shows a warning when WebSpeech live captions are on and the user holds the floor but nothing is being transcribed (a likely wrong-microphone / noisy-environment signal). Configurable via helpLink (empty hides the link), threshold (dB), speakingThreshold (ms), duration (ms; 0 = manual dismiss) and interval (ms).
  • public.plugins[].settings.pin / .isNew - a plugin can default-pin the items it injects into the Apps Gallery (pin: true pins all injected items; pin: ["id-a", "id-b"] pins only those ids; user pin/unpin choices are persisted and respected), and isNew: true shows the "new" ribbon on the plugin's gallery item.
  • public.whiteboard.wheelZoomRequiresCtrl (default true) - whether zooming the presentation with the mouse wheel requires holding Ctrl (Cmd on macOS). With the default, a bare wheel scroll pans the slide; set to false for the BigBlueButton 3.0 behavior where the wheel zooms directly. See Whiteboard: scroll to pan, Ctrl+scroll to zoom.
  • public.media.livekit.sdkLogBridge (default true) - forwards livekit-client's own logs through the BigBlueButton client logger, so SDK-level media errors reach the usual client log destination.
  • public.media.livekit.negotiationProbe (default false) - debug instrumentation that logs how long a subscriber offer takes to be answered, from receive to socket dispatch. Off by default; enable only when diagnosing media negotiation latency.

Value changed​

  • public.chat.toolbar now includes a pin option (for pinning chat messages).
  • public.layout.showParticipantsOnLogin default changed from true to false.
  • public.layout.syncCameraDockSizeAndPosition default changed from false to true.
  • The default layout under defaultSettings moved from application.selectedLayout: 'custom' to layout.selectedLayout: 'unified' (with pushLayout now nested under layout).
  • public.user.label gained presenter and bot entries (both default true), and moderator default changed from false to true.
  • public.media.audio.defaultFullAudioBridge and public.media.audio.defaultListenOnlyBridge defaults changed from fullaudio to livekit, aligning the client fallbacks with LiveKit as the default media framework. (defaultFullAudioBridge is superseded by the audioBridge create/property setting; both keys are marked deprecated.)
  • public.app.defaultSettings.application.pushToTalkEnabled default changed from false to true - push-to-talk (hold M to stay unmuted, added in BBB 3.0) is now enabled by default.
  • public.layout.showSessionDetailsOnJoin default changed from true to false - the Session Details dialog is no longer opened automatically when joining.
  • public.kurento.pagination.mobileGridSizes (moderator and viewer) defaults changed from 14 to 6, as part of the mobile layout overhaul.
  • public.app.showConnectionErrors now includes the new error code 3007. The client shows it when bbb-graphql-middleware refuses a subscription because the connection reached max_connection_concurrent_subscriptions, and asks the user to refresh. Remove 3007 from the list to fall back to the generic 3006 handling. See Common Client Errors.

Removed​

  • public.layout.showPushLayoutButton, public.layout.showPushLayoutToggle, and public.layout.enableDeprecatedLayoutSelection.
  • public.stats.log (replaced by public.stats.logMediaStats).
  • public.app.defaultSettings.application.audioWasmProcessing and the commented-out public.app.defaultSettings.application.microphoneConstraints example - superseded by public.app.defaultSettings.audio.processingMode and public.media.audio.microphoneConstraints (see Dedicated Audio settings tab).
  • The SIP.js / legacy-audio client settings, removed together with the SIP.js audio bridge now that LiveKit is the default audio path. Under public.media: callTransferTimeout, callHangupTimeout, callHangupMaximumRetries, iceGatheringTimeout, audioConnectionTimeout, audioReconnectionDelay, audioReconnectionAttempts, sipjsHackViaWs, sipjsAllowMdns, sip_ws_host, websocketKeepAliveInterval, websocketKeepAliveDebounce, traceSip, sdpSemantics; plus public.app.ipv4FallbackDomain. Any of these still set in bbb-html5.yml are now silently ignored.
  • public.pads.url (the Etherpad URL), removed together with Etherpad. Earlier 4.0 pre-releases wrote it into bbb-html5.yml; the upgrade removes the public.pads entry from that file (see Removed Etherpad).

Development​

For information on developing in BigBlueButton, see setting up a development environment for 4.0.

The build scripts for packaging 4.0 (using fpm) are located in the GitHub repository here.

Contribution​

We welcome contributors to BigBlueButton 4.0! The best ways to contribute at the current time are: