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 (internally "BBBA") that runs on top of the microphone stream, isolating the speaker's voice and eliminating background noise. 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.
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.
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.
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
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). This means that bbb-shared-notes-server is now a required package, installed by default while bbb-etherpad and bbb-pads are now optional.
In the event that you prefer using Etherpad, install the optional packages via
$ sudo apt install bbb-pads bbb-etherpad
At this point you can use it in a specific session by passing sharedNotesEditor=etherpad on the /create call. If you have made up your mind and would like to use it for all sessions, add the same line (sharedNotesEditor=etherpad) to /etc/bigbluebutton/bbb-web.properties and restart BigBlueButton via $ sudo bbb-conf --restart
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 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!
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).
Changes to events.xml
bbb-web properties changes
Removed
lockSettingsDisableNoteis no longer recognized; uselockSettingsDisableNotesinstead. The singular property was renamed in BBB 2.5.
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.17to0.1.24.disabledFeaturesaccepts a new value:pinChatMessage(alongside the existing chat-related options).sharedNotesEditordefault changed frometherpadtoblockNote(BlockNote is now the default shared-notes editor; see Promoted BlockNote shared notes as default).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.
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.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.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/BBBA) audio-processing option; 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.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.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.
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.
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.
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.