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.
"Musician Mode" audio processing
BigBlueButton 4.0 introduces an optional WASM-based audio processor (internally "BBBA") that runs on top of the microphone stream. Exposed to users as "Musician Mode", it provides an alternative to the browser's built-in audio processing for scenarios such as sharing music. It is disabled by default. See Musician Mode (WASM audio processing) for configuration details.
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.
Override client settings through API create call
Administrators will appreciate that we now allow the passing of custom client settings through the meeting create API call. You no longer need separate servers to accommodate sessions requiring vastly different settings.yml configurations.
Disable recording formats per meeting
Integrations can now skip one or more enabled recording formats for a specific meeting by passing meta_bbb-disable-recording-formats on the /create call, for example meta_bbb-disable-recording-formats=video,presentation. Disabled formats are not processed or published. See the Create API parameters and recording format customization docs for details.
Removal of Meteor and MongoDB
For years, we have discussed internally the topic of replacing Meteor.js with other technologies in order to improve scalability, performance, etc. Over the last year, we have introduced several different new components to replace Meteor. These new components are: bbb-graphql-server, bbb-graphql-middleware, bbb-graphql-actions, PostgreSQL database, and the GraphQL server Hasura. As of BigBlueButton 3.0.0-beta.1, we are no longer using Meteor or MongoDB.
Note: The services bbb-html5-backend, bbb-html5-frontend, bbb-html5, and mongod have been removed. The client code is compacted and served by NginX. The service disable-transparent-huge-pages.service was also removed as it was used to improve performance for MongoDB and is now obsolete. The package bbb-html5-nodejs is no longer needed.
Important: Please make sure you're no longer carrying around NodeJS v14, which we used to deploy in bbb-html5-nodejs. Your directory /usr/lib/bbb-html5/node should not exist.
We have forked the tldraw project and use our fork
We upgraded tl;draw from version 1 to version 2.0.0-alpha.19 (the last version under the Apache 2.0 license). This was quite a significant task but brought better performance, improved aesthetics, enhanced stylus support, and more. Note that we have forked tldraw’s project as of their version 2.0.0-alpha.19 to ensure we remain on the Apache 2.0 license. We will be maintaining the fork to ensure BigBlueButton has a stable whiteboard in the future.
Support for Collabora Online as document converter
Collabora Productivity contributed support for an alternative conversion script where Collabora Online (deployed locally [as a docker container] or running remotely) can be used for document conversion. For more information, check the pull request.
S3-based cache for presentation assets
BigBlueButton now supports caching for presentation assets on Amazon S3/Minio or similar. For details, check the server customization section of the documentation and see the new /create parameter to control it per meeting in the API reference.
Support for ClamAV as presentation file scanner
BigBlueButton now supports file scanning (virus detection) for presentation files using ClamAV. For details, check the ClamAV section in the server customization documentation.
Infinite Whiteboard
We have added initial support for the infinite whiteboard in the live session. Only the presenter can trigger it. It allows for annotations to be created in the margins or for writing content without being limited by space.
Everyone sees the margins and follows the presenter's point of view. If multi-user whiteboard is also enabled, viewers can roam around the canvas independently.

You can enable infinite whiteboard via public.whiteboard.allowInfiniteWhiteboard https://github.com/bigbluebutton/bigbluebutton/blob/v3.0.8/bigbluebutton-html5/private/config/settings.yml#L1047
Note, circa BigBlueButton 3.0.19 Infinite Whiteboard recording support was finalized and therefore we drop the "experimental" flag from it.
Session token removed from the client URL
Starting with BigBlueButton 3.0.30, the HTML5 client removes the sessionToken query parameter from the browser address bar after loading, keeping it in session storage instead (and recovering it from there on page reload). This avoids presenters accidentally exposing their token while sharing their screen, and reduces the chance of confusing the client URL with a shareable join URL. The token is still passed on the initial redirect from join, so existing integrations are unaffected.
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.8
- 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
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.20.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
-
pluginManifestFetchTimeoutadded -
pluginManifestsFetchUrlResponseTimeoutadded -
maxPluginManifestsFetchUrlPayloadSizeadded -
numPluginManifestsFetchingThreadsadded -
extractTimeoutInMsadded -
pngCreationExecTimeoutInMsadded, later (BBB 3.0.17) renamed topngCreationExecTimeout -
pngCreationExecTimeoutadded (used to bepngCreationExecTimeoutInMs) -
thumbnailCreationExecTimeoutInMsadded, later (BBB 3.0.17) renamed tothumbnailCreationExecTimeout -
thumbnailCreationExecTimeoutadded (used to bethumbnailCreationExecTimeoutInMs) -
pdfPageDownscaleExecTimeoutInMsadded -
officeDocumentValidationExecTimeoutInMsadded -
textFileCreationExecTimeoutInMsadded, later (BBB 3.0.17) renamed totextFileCreationExecTimeout -
textFileCreationExecTimeoutadded (used to betextFileCreationExecTimeoutInMs) -
presDownloadReadTimeoutInMsadded -
pngCreationConversionTimeoutadded -
imageResizeWaitadded -
officeDocumentValidationTimeoutadded -
presOfficeConversionTimeoutadded -
pdfPageCountWaitadded -
detectImageDimensionsTimeoutadded -
presentationConversionCacheEnabledadded -
presentationConversionCacheS3AccessKeyIdadded -
presentationConversionCacheS3AccessKeySecretadded -
presentationConversionCacheS3BucketNameadded -
presentationConversionCacheS3Regionadded -
presentationConversionCacheS3EndpointURLadded -
presentationConversionCacheS3PathStyleadded -
cameraBridgeadded -
screenShareBridgeadded -
audioBridgeadded -
pluginManifestsadded -
scanUploadedPresentationFilesadded -
allowOverrideClientSettingsOnCreateCalladded -
defaultBotAvatarURLadded -
graphqlApiUrladded -
graphqlWebsocketUrladded -
sessionsCleanupDelayInMinutesadded -
useDefaultDarkLogoadded -
defaultDarkLogoURLadded -
maxNumPagesadded -
fetchUrlAllowedLocalHostsadded -
clientSettingsOverrideJsonUrlResponseTimeoutadded -
maxClientSettingsOverrideJsonUrlPayloadSizeadded -
pageTokenSecretadded in BBB 3.0.27 -
beans.presentationService.pageTokenSecretadded in BBB 3.0.27 -
pluginManifestCacheEnabledadded in BBB 3.0.27 -
pluginManifestCacheDirectoryadded in BBB 3.0.27 -
pluginManifestCacheRefreshIntervalMinutesadded in BBB 3.0.27 -
clientSettingsOverrideStrictValidationadded in BBB 3.0.30 -
clientSettingsFilePathadded in BBB 3.0.30 -
lockSettingsPresenterPolicyadded (defaultrequireApproval). -
requireUserConsentBeforeUnmutingadded (defaultfalse). Only relevant whenallowModsToUnmuteUsers=true; whentrue, a consent dialog is shown before a moderator can unmute a participant.
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 "Musician Mode" (WASM/BBBA audio processing), plus the per-user defaultpublic.app.defaultSettings.application.audioWasmProcessing.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.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.userCamera's display labels now includepresenterandbot, andmoderatordefaults totrue.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.)
Removed
public.layout.showPushLayoutButton,public.layout.showPushLayoutToggle, andpublic.layout.enableDeprecatedLayoutSelection.public.stats.log(replaced bypublic.stats.logMediaStats).- 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.