The Client Settings Override feature allows you to customize the HTML5 client behavior for specific meetings by overriding settings from the server's settings.yml file. This feature is available in BigBlueButton 3.0.0 and later.
Client settings override provides a way to:
- Customize the application name and appearance
- Configure WebRTC and media settings
- Modify user interface behavior
- Set custom themes and branding
- Override locale and language settings
Important
For security reasons, this feature is disabled by default. You must explicitly enable it by setting allowOverrideClientSettingsOnCreateCall=true.
Instead of passing the settings inline, you can reference a hosted JSON file. The URL variant takes precedence over the inline clientSettingsOverride payload and does not require allowOverrideClientSettingsOnCreateCall:
$createMeetingParameters->setClientSettingsOverrideJsonUrl('https://your-server.example.com/settings-override.json');The BBB-Server fetches the JSON file when the meeting is created.
The main class for handling client settings override.
use BigBlueButton\Core\ClientSettingsOverride;public function __construct(array $settings = [])Creates a new ClientSettingsOverride instance with optional initial settings.
Parameters:
$settings(array) - Initial settings array
public function setSettings(array $settings): selfSets all settings at once.
Parameters:
$settings(array) - The settings array
public function getSettings(): arrayReturns all settings as an array.
public function setSetting(string $key, mixed $value): selfSets a specific setting using dot notation.
Parameters:
$key(string) - The setting key (e.g., 'public.app.appName')$value(mixed) - The setting value
public function getSetting(string $key, mixed $default = null): mixedGets a specific setting using dot notation.
Parameters:
$key(string) - The setting key$default(mixed) - Default value if key doesn't exist
public function removeSetting(string $key): selfRemoves a specific setting using dot notation.
Parameters:
$key(string) - The setting key to remove
public function toXML(): stringConverts the settings to XML format for the BigBlueButton API request.
public static function fromJson(string $jsonString): selfCreates a ClientSettingsOverride instance from a JSON string.
Parameters:
$jsonString(string) - Valid JSON string containing settings
Throws:
\InvalidArgumentExceptionif JSON is invalid
The ClientSettingsOverride is used with the CreateMeetingParameters class:
public function setAllowOverrideClientSettingsOnCreateCall(bool $allow): selfEnables or disables the client settings override feature.
public function setClientSettingsOverride(?ClientSettingsOverride $override): selfSets the client settings override for the meeting.
public function getClientSettingsOverride(): ?ClientSettingsOverrideReturns the current client settings override.
use BigBlueButton\BigBlueButton;
use BigBlueButton\Parameters\CreateMeetingParameters;
use BigBlueButton\Core\ClientSettingsOverride;
$bbb = new BigBlueButton();
$createParams = new CreateMeetingParameters('meeting123', 'Test Meeting');
// Enable client settings override
$createParams->setAllowOverrideClientSettingsOnCreateCall(true);
// Create settings override
$settings = new ClientSettingsOverride([
'public' => [
'app' => [
'appName' => 'Custom Meeting Name',
'helpLink' => 'https://help.example.com'
]
]
]);
// Apply settings
$createParams->setClientSettingsOverride($settings);
// Create meeting
$response = $bbb->createMeeting($createParams);$settings = new ClientSettingsOverride();
// Application settings
$settings->setSetting('public.app.appName', 'Enterprise Meeting');
$settings->setSetting('public.app.helpLink', 'https://support.company.com');
$settings->setSetting('public.app.autoJoin', false);
$settings->setSetting('public.app.askForConfirmationOnLeave', true);
$settings->setSetting('public.app.userSettingsStorage', 'localStorage');
// WebRTC settings
$settings->setSetting('public.kurento.wsUrl', 'wss://webrtc.company.com/sfu');
$settings->setSetting('public.kurento.turnUrl', 'turn:turn.company.com:443');
// Media settings
$settings->setSetting('public.media.sipjsHackViaWs', false);
$settings->setSetting('public.media.audio.codec', 'opus');
$settings->setSetting('public.media.video.codec', 'vp8');
// Theme settings
$settings->setSetting('public.theme.branding.target', '.branding-element');
$settings->setSetting('public.theme.custom_css_url', 'https://assets.company.com/theme.css');
// Locale settings
$settings->setSetting('public.defaultSettings.application.overrideLocale', 'fr');
$createParams->setClientSettingsOverride($settings);$jsonConfig = '{
"public": {
"app": {
"appName": "JSON Configured Meeting",
"helpLink": "https://docs.example.com",
"autoJoin": true
},
"kurento": {
"wsUrl": "wss://webrtc.example.com/sfu"
},
"theme": {
"branding": {
"target": ".custom-branding"
}
}
}
}';
$settings = ClientSettingsOverride::fromJson($jsonConfig);
$createParams->setClientSettingsOverride($settings);| Setting | Type | Description |
|---|---|---|
appName |
string | Custom application name |
helpLink |
string | Custom help documentation URL |
autoJoin |
boolean | Auto-join meeting when page loads |
askForConfirmationOnLeave |
boolean | Show confirmation dialog when leaving |
userSettingsStorage |
string | Storage type: 'localStorage', 'sessionStorage', 'cookie' |
displayBrandingArea |
boolean | Show/hide branding area |
| Setting | Type | Description |
|---|---|---|
wsUrl |
string | Custom WebRTC SFU WebSocket URL |
turnUrl |
string | Custom TURN server URL |
turnUsername |
string | TURN server username |
turnCredential |
string | TURN server credential |
| Setting | Type | Description |
|---|---|---|
sipjsHackViaWs |
boolean | Enable SIP.js WebSocket hack |
audio.codec |
string | Preferred audio codec: 'opus', 'pcmu', 'pcma' |
video.codec |
string | Preferred video codec: 'vp8', 'vp9', 'h264' |
video.resolution |
string | Preferred video resolution |
| Setting | Type | Description |
|---|---|---|
branding.target |
string | CSS selector for branding elements |
custom_css_url |
string | URL to custom CSS file |
logo.url |
string | URL to custom logo image |
favicon.url |
string | URL to custom favicon |
| Setting | Type | Description |
|---|---|---|
application.overrideLocale |
string | Override locale (e.g., 'en', 'fr', 'es') |
application.chat.enabled |
boolean | Enable/disable chat |
application.poll.enabled |
boolean | Enable/disable polls |
-
Enable Only When Needed: Only enable
allowOverrideClientSettingsOnCreateCallwhen you actually need to override settings. -
Validate Input: Always validate user-provided settings before applying them.
-
Sensitive Data: Avoid exposing sensitive configuration through client settings override.
-
Network Security: Ensure custom WebSocket URLs are from trusted sources.
try {
$settings = ClientSettingsOverride::fromJson($invalidJson);
} catch (\InvalidArgumentException $e) {
// Handle invalid JSON
error_log('Invalid JSON: ' . $e->getMessage());
$settings = new ClientSettingsOverride(); // Fallback to empty settings
}-
Use Specific Settings: Only override the settings you actually need to change.
-
Document Changes: Keep track of which settings you're overriding for debugging purposes.
-
Test Thoroughly: Test client settings override in a development environment before production use.
-
Fallback Values: Provide sensible defaults when getting settings that might not exist.
-
Performance: Avoid overly complex nested structures that might impact client performance.
- Verify
allowOverrideClientSettingsOnCreateCallis set totrue - Check that the settings structure matches the expected format
- Ensure the BigBlueButton server version supports client settings override (3.0.0+)
- Use
try-catchblocks when callingfromJson() - Validate JSON structure before processing
- Verify custom WebSocket URLs are accessible
- Check firewall and network configuration
- Ensure TURN server credentials are correct
If you're upgrading from an earlier version of BigBlueButton:
- Ensure your server is running BigBlueButton 3.0.0 or later
- Update your PHP API library to the latest version
- Review existing meeting creation code to add client settings override if needed
- Test thoroughly in a development environment
For more information about the available settings, refer to the official BigBlueButton documentation and your server's settings.yml file.