new-features

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
Redesigned navigation sidebar and Apps Gallery
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) andworkadventureDtln(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.
Ask for consent before unmuting
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:
- Gather relevant network interfaces names to be used for media communication.
For most setups, the default network interface is enough. See the
routecommand to find it (Destination: default). If any other network interfaces are needed, make note of them. - Set the following in
/etc/bigbluebutton/livekit.yaml:
rtc:
interfaces:
includes:
- <network_interface_name_1>
- <any_other_network_interface_name>
- 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
/createparametersaudioBridge=bbb-webrtc-sfu(orfreeswitch)cameraBridge=bbb-webrtc-sfuscreenShareBridge=bbb-webrtc-sfu
- Server-wide: set any of the following properties in
/etc/bigbluebutton/bbb-web.propertiesaudioBridge=bbb-webrtc-sfucameraBridge=bbb-webrtc-sfuscreenShareBridge=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:
- 4.0.0-rc.5
- 4.0.0-rc.4
- 4.0.0-rc.3
- 4.0.0-rc.2
- 4.0.0-rc.1
- 4.0.0-beta.5
- 4.0.0-beta.4
- 4.0.0-beta.3
- 3.1.0-beta.2
- 3.1.0-beta.1
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).
Promoted BlockNote shared notes as default
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-etherpadandbbb-padspackages 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
etherpadsystem user, the/etc/bigbluebutton/etherpad.jsonand/etc/bigbluebutton/bbb-pads.jsonoverrides, thepublic.padsentry in/etc/bigbluebutton/bbb-html5.yml, and the pads and authors Etherpad stored in Redis (keys starting withpad:,sessionstorage:,globalAuthor:,token2author:,pad2readonly:,readonly2pad:andueberDB:). Pads stored in Etherpad are not migrated.- Etherpad's group and session keys are left in Redis (
groups,group:*,group2sessions:*,author2sessions:*,session:*,mapper2group:*andmapper2author:*): 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(ordist-upgrade).apt upgradenever removes packages, and because thebigbluebuttonpackage 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.
- Etherpad's group and session keys are left in Redis (
- The
sharedNotesEditor/createparameter and thesharedNotesEditorproperty inbbb-web.propertiesare ignored; every meeting gets BlockNote shared notes. If you customized/usr/share/bbb-web/WEB-INF/classes/spring/resources.xmlin place, remove its<property name="sharedNotesEditor" .../>entry; see bbb-web properties changes. - The Etherpad-only parts of the GraphQL API were removed: the
sharedNotesEditorfield ofsharedNotes, theisEtherpadSharedNotesfield ofmeeting.componentsFlags, thesharedNotesSessionfield ofuser_current, thesharedNotes_sessionandsharedNotes_difftypes (with their queries and subscriptions) and thesharedNotesCreateSessionmutation. 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) frombigbluebutton.yml, andetherpadis no longer a valid entry innotes_formats. Remove both from/etc/bigbluebutton/recording/recording.ymlif you set them there. The notes are exported frombn_notes_endpoint, which now defaults tohttp://127.0.0.1:8787/loopback/api/documents. If you overridebn_notes_endpointinrecording.yml, change its path to/loopback/api/documents. The previous/api/documentspath 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 thenotes/export_failedmarker 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.logwas removed and replaced bypublic.stats.logMediaStats(see Client-side WebRTC stats logging).captionsis no longer a validdisabledFeaturesvalue. It has had no effect since BBB 3.0, when typed captions moved to a plugin. UseliveTranscriptionto disable automatic transcription.
Changes to events.xml
bbb-web properties changes
Removed
allowDuplicateExtUseridis no longer recognized. UsemaxUserConcurrentAccessesinstead.lockSettingsDisableNoteis no longer recognized; uselockSettingsDisableNotesinstead. The singular property was renamed in BBB 2.5.clientLogoutTimerInMinuteswas removed. It was never consumed by the HTML5 client; its last reader, the/enterendpoint, was removed before BBB 4.0.- If you customized
/usr/share/bbb-web/WEB-INF/classes/spring/resources.xmlin place, also remove the<property name="clientLogoutTimerInMinutes" .../>entry - bbb-web will fail to start (NotWritablePropertyException) otherwise. Thebbb-conf --checkretired-property warning only scans/etc/bigbluebutton/bbb-web.properties, notresources.xml.
- If you customized
enteredUsersTimeoutwas removed. It set how long bbb-web tracked users who had called the/enterendpoint without joining; that endpoint was removed in BBB 3.0, so nothing has been tracked since. A leftover value in/etc/bigbluebutton/bbb-web.propertiesis ignored, andbbb-conf --checklists it for removal.- If you customized
/usr/share/bbb-web/WEB-INF/classes/spring/resources.xmlin place, also remove theenteredUserCleanupTimerTaskbean and the<property name="enteredUserCleanupTimerTask" .../>and<property name="enteredUsersTimeout" .../>entries - bbb-web will fail to start otherwise.
- If you customized
sharedNotesEditorwas 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.propertiesis ignored.- If you customized
/usr/share/bbb-web/WEB-INF/classes/spring/resources.xmlin place, also remove the<property name="sharedNotesEditor" .../>entry - bbb-web will fail to start (NotWritablePropertyException) otherwise.
- If you customized
Value changed
defaultMeetingLayoutdefault changed fromCUSTOM_LAYOUTtoUNIFIED_LAYOUT. Accepted values are nowUNIFIED_LAYOUT(default), plus the hybrid/niche optionsCAMERAS_ONLY,PARTICIPANTS_AND_CHAT_ONLY,PRESENTATION_ONLY, andMEDIA_ONLY. The previous valuesCUSTOM_LAYOUT,SMART_LAYOUT,PRESENTATION_FOCUS, andVIDEO_FOCUSare no longer accepted.html5PluginSdkVersionbumped from0.1.17to1.0.0-beta.3. Plugins whoserequiredSdkVersiononly covers the0.xSDK no longer load; see Plugin SDK 1.0 pre-release.disabledFeaturesaccepts a new value:pinChatMessage(alongside the existing chat-related options).disabledFeaturesno longer listscaptionsas an option. It has had no effect since BBB 3.0, when typed captions moved to a plugin. A server that still sets it inbbb-web.propertieskeeps working: the value is accepted and ignored. UseliveTranscriptionto disable automatic transcription.cameraBridge,screenShareBridge, andaudioBridgedefault changed frombbb-webrtc-sfutolivekit(see LiveKit is the default media framework).
Added
lockSettingsPresenterPolicyadded (defaultrequireApproval). Controls whether viewers can request the presenter role; see Request to Present.requireUserConsentBeforeUnmutingadded (defaultfalse). Only relevant whenallowModsToUnmuteUsers=true; whentrue, a consent dialog is shown before a moderator can unmute a participant.maskTagThresholdadded (default0= disabled). When set toN, any slide whose generated SVG containsNor more<mask>tags falls back to full-slide rasterization during conversion; see Rasterize slides whose SVG contains mask tags.filterTagThresholdadded (default1;0= disabled). Slides whose generated SVG containsNor more<filter>tags (whichpdftocairoemits for soft masks) are rendered with bothpdftocairoandpdftoppm, 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(defaulttrue) - whether the camera-less avatar grid (the "webcam grid") is shown while the presentation is minimized. The grid can also be disabled per meeting withdisabledFeatures=webcamGrid.public.multiFunctionalMode.enabled(defaultfalse) - enables the auxiliary/dual sidebar content panel.public.userList.searchBar.enabled(defaulttrue) - enables the user list search field.public.app.appsGallery.maxPinnedApps(default3) - maximum number of apps a user can pin in the Apps Gallery.public.app.remainingTimeThresholdInMinutes(default6) - how many minutes before the end of a meeting with a setdurationthe remaining time banner appears. Previously this was hard-coded to 30 minutes; set it to30to 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;providerselects the backend (bbbadefault, orworkadventureDtln) and a provider may override values set inconstraints; see Dedicated Audio settings tab.public.app.defaultSettings.audio.processingMode(defaultstandard) - which of the three audio-processing modes (advanced,standard,original) comes pre-selected for a new user in Settings > Audio.advancedfalls back tostandardwhen WASM processing is unsupported by the browser or disabled server-side.public.app.defaultSettings.application.recordingIndicatorAutoCollapse(defaultfalse) - 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 thestandardaudio-processing mode (moved frompublic.app.defaultSettings.application.microphoneConstraints).public.timer.presets,public.timer.quickAddButtons,public.timer.maxHours,public.timer.serverSyncTimeInterval- timer presets and behavior.public.app.breakouts.breakoutRoomMinimum(default2) - minimum number of breakout rooms.public.app.breakouts.inheritLockSettingsByDefault(defaultfalse) - pre-checks the "Propagate the current lock settings" option when a moderator creates breakout rooms, likecaptureSharedNotesByDefaultandsendInvitationToAssignedModeratorsByDefaultdo for their options.public.app.audioCaptions.showInSidebarNavigationandpublic.app.audioCaptions.terms- show captions in the sidebar navigation and configure terms-of-service URLs per locale.public.app.darkTheme.autoDetectFromSystem(defaulttrue) - uses the operating system'sprefers-color-schemepreference as the initial theme and keeps following it while the user has not chosen a theme manually. The per-user "Dark mode" toggle and thebbb_prefer_dark_themeparameter always take precedence over the detected system theme.public.stats.logMediaStatsandpublic.stats.probes- client-side WebRTC stats logging.public.layout.showLeaveSessionLabel(defaultfalse) andpublic.layout.usersPerUserListPage(default50).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(defaultenabled: 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 viahelpLink(empty hides the link),threshold(dB),speakingThreshold(ms),duration(ms;0= manual dismiss) andinterval(ms).public.plugins[].settings.pin/.isNew- a plugin can default-pin the items it injects into the Apps Gallery (pin: truepins all injected items;pin: ["id-a", "id-b"]pins only those ids; user pin/unpin choices are persisted and respected), andisNew: trueshows the "new" ribbon on the plugin's gallery item.public.whiteboard.wheelZoomRequiresCtrl(defaulttrue) - whether zooming the presentation with the mouse wheel requires holdingCtrl(Cmdon macOS). With the default, a bare wheel scroll pans the slide; set tofalsefor the BigBlueButton 3.0 behavior where the wheel zooms directly. See Whiteboard: scroll to pan, Ctrl+scroll to zoom.public.media.livekit.sdkLogBridge(defaulttrue) - 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(defaultfalse) - 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.toolbarnow includes apinoption (for pinning chat messages).public.layout.showParticipantsOnLogindefault changed fromtruetofalse.public.layout.syncCameraDockSizeAndPositiondefault changed fromfalsetotrue.- The default layout under
defaultSettingsmoved fromapplication.selectedLayout: 'custom'tolayout.selectedLayout: 'unified'(withpushLayoutnow nested underlayout). public.user.labelgainedpresenterandbotentries (both defaulttrue), andmoderatordefault changed fromfalsetotrue.public.media.audio.defaultFullAudioBridgeandpublic.media.audio.defaultListenOnlyBridgedefaults changed fromfullaudiotolivekit, aligning the client fallbacks with LiveKit as the default media framework. (defaultFullAudioBridgeis superseded by theaudioBridgecreate/property setting; both keys are marked deprecated.)public.app.defaultSettings.application.pushToTalkEnableddefault changed fromfalsetotrue- push-to-talk (holdMto stay unmuted, added in BBB 3.0) is now enabled by default.public.layout.showSessionDetailsOnJoindefault changed fromtruetofalse- the Session Details dialog is no longer opened automatically when joining.public.kurento.pagination.mobileGridSizes(moderatorandviewer) defaults changed from14to6, as part of the mobile layout overhaul.public.app.showConnectionErrorsnow includes the new error code3007. The client shows it when bbb-graphql-middleware refuses a subscription because the connection reachedmax_connection_concurrent_subscriptions, and asks the user to refresh. Remove3007from the list to fall back to the generic3006handling. See Common Client Errors.
Removed
public.layout.showPushLayoutButton,public.layout.showPushLayoutToggle, andpublic.layout.enableDeprecatedLayoutSelection.public.stats.log(replaced bypublic.stats.logMediaStats).public.app.defaultSettings.application.audioWasmProcessingand the commented-outpublic.app.defaultSettings.application.microphoneConstraintsexample - superseded bypublic.app.defaultSettings.audio.processingModeandpublic.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; pluspublic.app.ipv4FallbackDomain. Any of these still set inbbb-html5.ymlare now silently ignored. public.pads.url(the Etherpad URL), removed together with Etherpad. Earlier 4.0 pre-releases wrote it intobbb-html5.yml; the upgrade removes thepublic.padsentry 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:
- Help localize BigBlueButton 4.0 on Transifex project for BBB 4.0
- Try out installing BigBlueButton 4.0 and see if you spot any issues.
- Help test a 4.0 pull request in your development environment.