BigBlueButton Plugins
Welcome to the official documentation for BigBlueButton Plugins.
This guide covers a wide range of topics related to plugin development, including:
- How plugins work within the BigBlueButton system;
- How to build your first plugin (with a simple “Hello World” example);
- Detailed documentation on the various APIs available for interacting with meetings;
...and much more.
Let’s get started!
Usage
This is a general instruction on how to use a plugin. For a detailed configuration example of each use case, have a look at the READMEs in the respective samples-folders.
Running the Plugin from Source
For development purposes you can run a plugin locally from source.
For example if you take the sample-action-button-dropdown-plugin,
you do the following:
Running from source code with local BBB-server
-
Start the development server:
cd $HOME/src/bigbluebutton-html-plugin-sdk/samples/sample-action-button-dropdown-pluginnpm installnpm start -
Add reference to it on BigBlueButton's
/createcall or add it on/etc/bigbluebutton/bbb-web.properties:
pluginManifests=[{"url": "http://<your-URL>/manifest.json"}]
Reminder: Don't use the localhost URL that the npm start will create for you, Akka will not be able to access your manifest files this way (even if you are developing with a local bbb-docker environment). Therefore, what we recommend is to follow instructions on the next section to test the plugin as if it is in a remote BBB server (heads up: you'll be using NGROK).
Running from source code with a remote BBB-server
If you are running your BBB-server elsewhere, than you can't simply point the manifest URL to a local address, you'll need to either serve the built version into a CDN or serve the dev version using a service to make it public. And for the second option we'd recommend NGROK. Here are the instructions to do that:
-
Create an account on https://ngrok.com/ (Official website of NGROK);
-
Install NGROK in your computer. They have a guide for that right after you created your account;
-
Start the Plugin development server:
cd $HOME/src/plugin-pick-random-user-plugin
npm install
npm start
- Start the NGROK server into your machine with the following command:
ngrok http http://172.17.0.1:4701
Make sure to point NGROK to the correct local URL (In our case - The samples are made this way, for instance - we used http://172.17.0.1:4701)
Right after that, NGROK will create an interface into your terminal and will display the URL which your static files are being served.
Here's an example of URL: https://<uuid>.ngrok-free.app
You can already interact with this URL and access both
https://<uuid>.ngrok-free.app/manifest.json
or
https://<uuid>.ngrok-free.app/PickRandomUserPlugin.js
- Add this create parameter into the API-mate of the server you are testing it on:
pluginManifests=[{"url": "https://<uuid>.ngrok-free.app/manifest.json"}]
And there you go, you can test it freely.
Building the Plugin (Production)
To build a plugin for production use
(again, using the example of sample-action-button-dropdown-plugin),
follow these steps:
cd $HOME/src/bigbluebutton-html-plugin-sdk/samples/sample-action-button-dropdown-plugin
npm ci
npm run build-bundle
The above command will generate the dist folder, containing the bundled JavaScript file named SampleActionButtonDropdownPlugin.js along with the manifest.json.
These files can be hosted on any HTTPS server.
To use the plugin with BigBlueButton, add the plugin's manifest.json URL to bigbluebutton.properties or you can simply send it via /create parameter:
pluginManifests=[{"url":"<your-domain>/path/to/manifest.json"}]
Hosting the Plugin on a BBB Server
While the plugin can be hosted on any Server, it is also possible to host the bundled file directly on
a BigBlueButton server. For that you copy dist/SampleActionButtonDropdownPlugin.js and dist/manifest.json to the folder /var/www/bigbluebutton-default/assets/plugins/sampleActionButtonDropdownPlugin.
In this case, the your manifest URL will be https://<your-host>/plugins/sampleActionButtonDropdownPlugin/manifest.json.
Comments
Ways to load a plugin into a meeting
As described in earlier sections, there are several ways to load a plugin into a meeting:
/createparameterpluginManifests– Applies only to the meeting being created. You must explicitly list the plugins in the request./createparameterpluginManifestsFetchUrl– Also applies only to the meeting being created, but instead of listing plugins directly, you provide a URL that returns the plugin manifest list. This helps reduce the size of the/createrequest.pluginManifestsin/etc/bigbluebutton/bbb-web.properties– Applies globally to all meetings on the server.
All plugin sources are combined into a single list with duplicates removed. This means plugins are merged, not overridden.
Using Placeholders in Plugin URLs
You can use placeholders in the plugin URLs defined in any of the previously mentioned configurations. Currently, the only supported placeholder is:
%%HTML5_PLUGIN_SDK_VERSION%%– This will be automatically replaced by the version of thebigbluebutton-html-plugin-sdkused bybigbluebutton-html5.%%HTML5_PLUGIN_SDK_MAIN_VERSION%%– This will be automatically replaced by the Main version of thebigbluebutton-html-plugin-sdk, following semver compatibility: just the Major from1.0on (e.g.:1for1.0.0-beta.3and for1.2.0), Major + Minor for0.xversions, where every Minor is a breaking change (e.g.:0.1for0.1.26) - used bybigbluebutton-html5.%%BBB_VERSION%%– This will be automatically replaced by the complete BigBlueButton server version (e.g.:3.0.6) from which the URL is called.%%BBB_MAIN_VERSION%%– This will be automatically replaced by the current BigBlueButton server Main version - Composed by Major + Minor (e.g.:3.0for3.0.6) from which the URL is called.%%MEETING_ID%%– This will be automatically replaced by the external meeting ID.
This is useful for referencing versioned plugin files without hardcoding the SDK version.
Examples:
pluginManifests=[{"url":"https://my-cdn.com/%%HTML5_PLUGIN_SDK_VERSION%%/pick-random-user/manifest.json"}]
Or
pluginManifestsFetchUrl=https://my-cdn.com/%%HTML5_PLUGIN_SDK_VERSION%%/all-my-plugins/list-of-plugins.json
If your bbb-html5 client uses version 0.0.79 of the bigbluebutton-html-plugin-sdk (as seen in its package.json):
{
"dependencies": {
"bigbluebutton-html-plugin-sdk": "0.0.79",
},
}
Then BBB-Web will automatically transform the URLs as follows:
pluginManifests=[{"url":"https://my-cdn.com/0.0.79/pick-random-user/manifest.json"}]
Or
pluginManifestsFetchUrl=https://my-cdn.com/0.0.79/all-my-plugins/list-of-plugins.json
BBB-Web will then fetch the plugin manifests using these resolved URLs.
In the future, support for additional placeholders may be added.
Manifest Json
SDK version compatibility
The requiredSdkVersion field declares the SDK range supported by the plugin,
starting with the first SDK version on which it works. This minimum compatible
version is separate from the SDK dependency used to build the plugin in its
package.json, which may be newer.
When a meeting starts, BigBlueButton reads its SDK version from the
html5PluginSdkVersion server property and checks whether that version satisfies
the manifest range declared by the plugin. The plugin author is responsible for
choosing the range that determines which BigBlueButton versions can load it. If
the server SDK does not satisfy that range, BigBlueButton records a plugin load
failure in bbb-apps-akka.
The field accepts a semantic version range. The two ranges used by official plugins have different behavior before version 1.0:
- A tilde range allows patch updates within the specified minor version. For
example,
~0.0.77accepts0.0.77and0.0.78, but rejects0.1.0. - A caret range allows updates that do not change the left-most non-zero version.
For example,
^0.1.26accepts0.1.26and0.1.27, but rejects0.2.0. On the0.0.xline,^0.0.77accepts only0.0.77.
Official plugins on the legacy 0.0.x line therefore use tilde ranges, as shown
in the examples below. Plugins on the 0.1.x line use caret ranges. This caret
convention continues to express compatibility when the SDK reaches 1.x: for
example, ^1.0.0 accepts compatible 1.x releases and rejects 2.0.0.
Pre-release SDK versions follow npm's pre-release rule: a pre-release only
satisfies a range in which some comparator names a pre-release of the same
major.minor.patch. While the server runs 1.0.0-beta.3, ^1.0.0, 0.x and
>=0.1.5 all reject it, because none of them names a 1.0.0 pre-release. To
load on a pre-release SDK and still support the stable line, declare both, for
example ^0.1.5 || ^1.0.0-beta.1. ^1.0.0-beta.1 also accepts the final
1.0.0 and later 1.x releases, but rejects pre-releases of other versions such
as 1.1.0-alpha.1.
Here is a complete manifest.json example with all possible configurations:
{
"requiredSdkVersion": "~0.0.77",
"name": "MyPlugin",
"version": "0.0.8", // Optional
"javascriptEntrypointUrl": "MyPlugin.js",
"javascriptEntrypointIntegrity": "sha384-Bwsz2rxm...", // Optional
"localesBaseUrl": "https://cdn.domain.com/my-plugin/", // Optional
"enabledForBreakoutRooms": false, // Optional, defaults to false
"loggerSettings": { // Optional
"console": {
"enableRuntimeErrorLogging": false,
"enabled": true,
"level": "debug" // Possible values: info, debug, warn, error
},
"external": {
"enabled": false,
"level": "info", // Possible values: info, debug, warn, error
"url": "https://LOG_HOST/html5Log",
"method": "POST",
"throttleInterval": 400,
"flushOnClose": true,
"logTag": ""
}
},
"dataChannels":[
{
"name": "public-channel",
"pushPermission": ["moderator","presenter"], // "moderator","presenter", "all", "viewer"
"replaceOrDeletePermission": ["moderator", "creator"] // "moderator", "presenter","all", "viewer", "creator"
}
], // One can enable more data-channels to better organize client communication
"eventPersistence": {
"isEnabled": true // By default it is not enabled
},
"remoteDataSources": [
{
"name": "allUsers",
"url": "${meta_pluginSettingsUserInformation}",
"fetchMode": "onMeetingCreate", // Possible values: "onMeetingCreate", "onDemand"
"permissions": ["moderator", "viewer"]
}
],
"serverCommandsPermission": {
"chat.sendCustomPublicChatMessage": ["presenter", "moderator"] // "moderator","presenter", "all", "viewer"
},
"settingsSchema": [
{
"name": "myJson",
"label": "myJson",
"required": true,
"defaultValue": {
"abc": 123
},
"type": "json" // Possible values: "int", "float", "string", "boolean", "json"
}
]
}
To better understand remote-data-sources, please, refer to this section
version:
This refers to the version of the plugin. It prevents browsers from caching old plugin files.
When set, it appends the version to javascriptEntrypointUrl, forcing browsers to fetch the latest file.
Example:
version=0.0.8
javascriptEntrypointUrl=MyPlugin.js
Browser will load: MyPlugin.js?version=0.0.8.
loggerSettings:
The optional loggerSettings directive allows you to override the default logger configuration for a specific plugin. For instance, you could set the client’s log level to info while restricting the plugin’s log level to error. If no settings are provided, the plugin’s logger inherits the default configuration.
settingsSchema:
The settingsSchema serves two main purposes:
- Validation: Ensures that all required settings are provided for a plugin. If any required setting is missing, the plugin will not load.
- Configuration Exposure: Lists all available settings for the plugin, enabling external systems—such as a Learning Management System (LMS)—to present these settings to a meeting organizer. This allows the organizer to configure the plugin manually before the meeting begins.
| Name | Required | Description |
|---|---|---|
name | Yes | The name of the setting as defined in the YAML file |
label | No | A user-facing label that appears in the integration UI |
required | Yes | Indicates whether this setting must be provided (true or false) |
defaultValue | No | The default value to use if no setting is explicitly defined |
type | Yes | The expected data type for the setting. Possible values: "int", "float", "string", "boolean", "json" |
Example
Given the settingsSchema defined in the manifest.json seen, the corresponding YAML configuration file (/etc/bigbluebutton/bbb-html5.yml) would look like:
public:
plugins:
- name: MyPlugin
settings:
myJson:
abc: my123
def: 3234
enabledForBreakoutRooms:
By default, plugins are not loaded in breakout rooms. Setting enabledForBreakoutRooms to true makes the plugin available inside breakout rooms as well as the main room.
{
"enabledForBreakoutRooms": true
}
When this property is false (or omitted), the server filters the plugin out before creating any breakout room, so it never loads for breakout participants.
javascriptEntrypointIntegrity:
An optional Subresource Integrity (SRI) hash for the plugin's JavaScript bundle. When present, the browser verifies the fetched file matches the hash before executing it, protecting against tampered or malicious substitutions of the plugin file.
The value must follow the SRI format <algorithm>-<base64-hash> (e.g. sha384-Bwsz2rxm...).
{
"javascriptEntrypointIntegrity": "sha384-Bwsz2rxm..."
}
Cross-origin limitation: The plugin loader sets the
integrityattribute on the<script>tag but does not set thecrossoriginattribute. Browsers require bothintegrityandcrossorigin="anonymous"(plus CORS headers from the server) for SRI checks on cross-origin scripts. Withoutcrossorigin, the integrity check will fail for plugins hosted on a different domain (e.g. a CDN). SRI integrity verification therefore only works reliably when the plugin file is served from the same origin as the BigBlueButton client. Avoid setting this field for CDN-hosted plugins until cross-origin support is added to the loader.
If omitted, no integrity check is performed.
localesBaseUrl:
An optional base URL from which the plugin SDK loads locale (i18n) message files for the plugin. This enables internationalization support — the SDK fetches locale files relative to this URL when the client switches languages.
{
"localesBaseUrl": "https://cdn.domain.com/my-plugin/"
}
If the URL is relative (does not start with http:// or https://), the server resolves it by appending it to the directory portion of the manifest URL using plain string concatenation. This means a leading / is not treated as the site root — it will be concatenated literally, producing a broken URL. Use either an absolute URL or a relative path without a leading /:
{ "localesBaseUrl": "locales/" } // OK — appended to manifest directory
{ "localesBaseUrl": "https://cdn.example.com/my-plugin/locales/" } // OK — absolute
{ "localesBaseUrl": "/locales/" } // BAD — leading slash breaks the URL
If omitted, locale files will not be loaded for the plugin.
Examples
You can find example implementations demonstrating how to extend and customize various parts of the BigBlueButton client in the samples folder of the bigbluebutton-html-plugin-sdk repository.
Additionally, the BigBlueButton plugins repository provides a collection of official plugins that you can explore for inspiration.
Building a Hello-World Plugin Example
This section will guide you through all the steps needed to create a functional plugin—or at least a solid starting point. In this example, the plugin will add an option to the Options dropdown menu (the three dots in the top right-hand corner of the client). When clicked, it will trigger a popup displaying the message "hello world".
1. Choose the Right SDK Version
First, select the appropriate version of the bigbluebutton-html-plugin-sdk based on your BigBlueButton server. Refer to the section SDK version compatibility for guidance. You’ll need this information later in the tutorial.
2. Use the Official Plugin Template
Start with the plugin template provided by the BigBlueButton organization, available at:
https://github.com/bigbluebutton/plugin-template
While it's possible to build a plugin from scratch, doing so requires specific configurations in files like package.json and webpack.config.js (if you're using Webpack), which can be tricky to get right. The official template saves time by providing all the necessary boilerplate so you can focus on writing your plugin logic.
To get started:
- Visit the template page and click the "Use this template" button to create your own repository under your GitHub account.

3. Clone the Repository and Start Coding
Clone your new repository locally and begin making the necessary modifications. Follow the sub-steps below:
Set Up the Plugin Name
- Name your plugin. For this tutorial, we’ll use
plugin-hello-world, but you’re free to choose another name. - Also define the PascalCase version of the name (e.g.,
PluginHelloWorld) for configuration files.
Update Placeholders
Replace all <plugin-name> placeholders in the following files:
package.jsonwebpack.config.js(use PascalCase)manifest.json(use PascalCase)
Check SDK Version Compatibility
Go to the bigbluebutton-html-plugin-sdk NPM page and check which version is compatible with your BigBlueButton server.
For example, if your server uses BigBlueButton 3.0, you might need the latest
0.0.xversion which is currently0.0.73.
Update your package.json accordingly and then run:
npm install
Create the Plugin Component
Create a folder and component file:
mkdir src/plugin-hello-world
touch src/plugin-hello-world/component.tsx
Now add the following code to component.tsx:
import { BbbPluginSdk, OptionsDropdownOption, pluginLogger } from 'bigbluebutton-html-plugin-sdk';
import * as React from 'react';
import { useEffect } from 'react';
interface PluginHelloWorldProps {
pluginUuid: string;
}
function PluginHelloWorld({ pluginUuid }: PluginHelloWorldProps): React.ReactElement {
BbbPluginSdk.initialize(pluginUuid);
const pluginApi = BbbPluginSdk.getPluginApi(pluginUuid);
useEffect(() => {
pluginApi.setOptionsDropdownItems([
new OptionsDropdownOption({
label: 'Click me',
icon: 'user',
onClick: () => {
alert('Hello, World!');
pluginLogger.info('Option has been clicked');
},
}),
]);
}, []);
return null;
}
export default PluginHelloWorld;
- The
useEffecthook ensures the plugin initializes only once. setOptionsDropdownItemsadds the new button to the dropdown menu.- The
onClickhandler triggers a simple popup.
4. Update index.tsx
Paste the following code into your index.tsx file:
import * as React from 'react';
import * as ReactDOM from 'react-dom/client';
import PluginHelloWorld from './plugin-hello-world/component';
const uuid = document.currentScript?.getAttribute('uuid') || 'root';
const pluginName = document.currentScript?.getAttribute('pluginName') || 'plugin';
const root = ReactDOM.createRoot(document.getElementById(uuid));
root.render(
<PluginHelloWorld
pluginUuid={uuid}
pluginName={pluginName}
/>
);
That’s It!
You’ve successfully created your first plugin!
To run the plugin, choose one of the following modes:
Feel free to reach out to us for additional information or help.
Plugin Architecture
This section explains how plugins work in BigBlueButton, from definition to loading and execution in the client.
What is a Plugin?
In BigBlueButton, a plugin is simply a JavaScript file that gets loaded in the user's browser.
A common question is:
Do end users (e.g.: students) need to install anything, like a browser extension?
The answer is: No! The JavaScript file (plugin) is delivered to the client automatically by the server. The bigbluebutton-html5 client loads it without requiring any action from the user.
How the plugin is loaded?
The plugin loading process is divided into two main phases: meeting creation and client loading.
- Meeting Creation Phase
During meeting creation:
- The client sends a request to the /create endpoint with a list of
pluginManifests. bbb-webfetches the plugin manifests from a static plugin server storage (e.g.: S3 or internally from BBB server).- Once fetched, it includes the manifest content in a CreateMeetingReqMsg, which is sent to Akka.
- Akka stores the plugin data in the database for that meeting.
One other way to send the pluginManifests list to bbb-web is to include it into /etc/bigbluebutton/bbb-web.properties as mentioned previously in the second point of this section. This way, bbb-web gets the it via config file and it will be applied to every meeting of this particular server (with no need to include it in every create call). Key point: if a different list is included in the create call along with the list in the properties file, they will be merged into one and carry on the flow.
As for the second part, when the user joins the meeting:
- The client issues a PluginConfigurationQuery through the GraphQL server.
- The server queries the database and returns the plugin configuration, which includes:
plugin {
name,
javascriptEntrypointUrl,
javascriptEntrypointIntegrity,
localesBaseUrl,
}
- Using this information, the client fetches the plugin’s JavaScript bundle from the plugin storage server and loads it into the React component tree.
Apps Gallery
The Apps Gallery is the central UI panel where users can discover and interact with the plugins and tools available during a meeting. It is designed as an extensible dashboard that allows developers to register their own applications to appear alongside BigBlueButton's native tools.
The gallery renders two main groups of applications:
- Pinned Apps: Applications that the user has chosen to keep visible on the sidebar for quick access.
- Unpinned Apps: The list of all other registered applications that are not currently pinned.
Based on the provided files, the core logic resides in ui/components/apps-gallery/component.tsx, which maps the registeredApps and pinnedApps from the layout context to render them in the correct UI sections. The container for this component is ui/components/apps-gallery/container.tsx.
Developing the bigbluebutton-html-plugin-sdk
This guide explains how to contribute to the bigbluebutton-html-plugin-sdk, including adding new features or fixing existing issues. It also covers how to integrate those changes with the BigBlueButton client when necessary.
1. Determine the Scope of the Change
Before starting development, assess whether your change affects only the plugin-sdk repository or also requires changes to the main BigBlueButton (bbb-html5) repository.
As an example, let's walk through a feature that affects both: adding a data-test attribute to the floating window extensible area.
2. Fork necessary repositories
After deciding the repositories in which the changes are needed, it is necessary to have a fork to contribute.
- Fork the bigbluebutton-html-plugin-sdk repository;
- Fork the main bigbluebutton repository;
- Clone the forks locally;
git clone https://github.com/YourUsername/bigbluebutton-html-plugin-sdk
3. Setting Up Your Environment
After having cloned both repositories cloned locally:
bigbluebutton-html-plugin-sdkbigbluebutton
Create a development branch in both repositories (ideally with the same name) to keep changes organized.
4. Make Changes in the Plugin SDK
Start by implementing the required changes in the SDK. In our example, we’ll add a new dataTest string property to the FloatingWindow component:
File: src/extensible-areas/floating-window/component.ts
export class FloatingWindow implements FloatingWindowInterface {
id: string = '';
type: FloatingWindowType;
dataTest: string;
constructor({
id,
dataTest,
...
}: FloatingWindowProps) {
if (id) this.id = id;
this.dataTest = dataTest;
...
}
}
Also update the type definition to reflect this new property:
File: src/extensible-areas/floating-window/types.ts
export interface FloatingWindowProps {
id: string;
dataTest: string;
...
}
5. Publish the changes to the projects needed
To verify your change, you’ll need to test it in a sample plugin and in the BigBlueButton client.
For new features, it’s best to create a new sample plugin. However, in this example, we'll use the existing sample-floating-window-plugin.
Follow these steps to build and publish the SDK to both the sample plugin and bbb-html5:
# From the SDK root
npm install
npm run build
# Ensure dependencies are installed in both target projects
cd ~/path/to/bigbluebutton-html5
npm install
cd -
cd samples/sample-floating-window-plugin
npm install
cd -
# Publish SDK changes to both the BBB client and the sample plugin
./scripts/publish-to-project-folder.sh ~/path/to/bbb-html5
./scripts/publish-to-project-folder.sh samples/sample-floating-window-plugin
This ensures the changes in the SDK are applied to both the BigBlueButton client and the plugin sample.
Optional: To publish the SDK to all sample plugins at once, use:
./scripts/publish-to-samples.sh
6. Update the BigBlueButton Client (bbb-html5)
Now make the necessary changes to the bigbluebutton/bigbluebutton repository in the bigbluebutton-html5 directory. For our example, update the following files to pass and use the new dataTest prop:
File: imports/ui/components/floating-window/component.tsx
const renderComponent = (
elementRef: React.MutableRefObject<null>,
...
dataTest: string,
) => (
<Styled.FloatingWindowContent
ref={elementRef}
id={key}
data-test={dataTest}
...
/>
);
Update the container (imports/ui/components/floating-window/container.tsx) logic to pass dataTest down to the renderComponent.
7. Update the Sample Plugin
After the SDK is built and published, you can update the sample plugin to use the new dataTest property accordingly. And test it (using the development mode, for example) against the BigBlueButton's client (bigbluebutton-html5).
8. Submitting Pull Requests
Once all changes are complete and tested:
- Commit the changes in the
bigbluebutton-html-plugin-sdk(all needed to run the feature/fix and the changes made to the sample); - In the
bigbluebutton-html5client do not reference a version number for the SDK inpackage.jsonyet. Instead, use the commit hash from your SDK changes
Example:
"dependencies": {
...
"bigbluebutton-html-plugin-sdk": "https://codeload.github.com/bigbluebutton/bigbluebutton-html-plugin-sdk/tar.gz/<commit-hash-id>"
}
You can get the commit hash from git log or directly from the commit list in your bigbluebutton-html-plugin-sdk pull request.
Alternatively, it is possible to reference the PR from the bigbluebutton-html-plugin-sdk directly. (This implies that you need to first send the PR for this repository and then the PR for bigbluebutton/bigbluebutton)
The resulting package.json would be:
"dependencies": {
...
"bigbluebutton-html-plugin-sdk": "https://codeload.github.com/bigbluebutton/bigbluebutton-html-plugin-sdk/tar.gz/refs/pull/<pr-number>/head"
}
Replace <pr-number> with your actual pull request number.
After adding it, run:
# From bigbluebutton-html5
npm install
This will update the bigbluebutton-html5/package-lock.json accordingly.
- Publish the branches to the origin by running
git push --set-upstream origin <branch-name>for both repositories; - Submit a separate pull request for each repository (
bigbluebutton-html-plugin-sdkandbigbluebutton).
9. Finalizing with an Official SDK Version
Once your PRs are approved:
- The maintainers will merge the SDK PR first.
- A new version will be published to npmjs.com (e.g.:
0.0.99). - You’ll then update the
package.jsoninbigbluebutton-html5to use the official version:
"dependencies": {
...
"bigbluebutton-html-plugin-sdk": "0.0.99"
}
- Run:
npm install
- Finally, update the SDK version in the following file in the
bigbluebutton-webproject:
File: bigbluebutton-web/grails-app/conf/bigbluebutton.properties
html5PluginSdkVersion=0.0.99
- Now you stage these last changes, likely, those will be just:
bigbluebutton-web/grails-app/conf/bigbluebutton.properties
bigbluebutton-html5/package.json
bigbluebutton-html5/package-lock.json
- Commit the staged changes and push to origin to update the
bigbluebutton/bigbluebuttonPR.
With that, your feature or fix will be ready for release. 🎉
API
Extensible UI areas
Foreach of the following ui-extensible-area, we have a different setter function accessible via pluginApi.
Mind that, although each area has its own structure, all the functions follows a certain argument structure, and returns nothing, that would be:
pluginApi.setterFunctionExample([{
objectProperty1: 'string',
objectProperty2: 123,
}])
See, it is basically a function that requires an array as an argument, with which the more items you push to that array, the more of that extensible area you will have.
That being said, here are the extensible areas we have so far:
- Action bar items (button, separator)
- Audio settings dropdown items (option, separator)
- Camera settings dropdown items (option, separator)
- Options settings dropdown items (option, separator)
- Nav bar items (button, info)
- Presentation dropdown items (option, separator)
- Presentation toolbar items (button, separator, spinner)
- User camera settings dropdown items (option, separator)
- User list dropdown items (option, separator)
- User list item additional information (item, label)
- Floating window item (floatingWindow)
- Generic Content (main, sidekick)
- User Camera Helper (button)
- Screenshare Helper (button)
- Apps Gallery (item, "New" badge)
Mind that no plugin will interfere into another's extensible area. So feel free to set whatever you need into a certain plugin with no worries.
Apps Gallery "New" Badge
This feature allows administrators to highlight new or featured plugins by displaying a "New" badge next to them in the Apps Gallery.
To enable this badge for a specific plugin, add the isNew: true flag to its configuration within the settings.yml file.
Example (settings.yml):
public:
plugins:
- name: my-plugin-name
settings:
isNew: true
When the client loads, the item for "my-plugin-name" will automatically display the "New" badge in the Apps Gallery.
Configurable button styles
Plugin-provided nav bar, actions bar, and presentation toolbar buttons accept a few optional style fields that control the rendered button's shape. They are read when present and fall back to the previous defaults when omitted, so older plugin objects keep rendering exactly as before (requires plugin SDK 0.0.100 or later):
color— button color (e.g.primary,default). Default:primaryin the nav bar and actions bar,defaultin the presentation toolbar.circle— render as a circular icon button. Default:truein the actions bar,falsein the presentation toolbar and nav-bar.hideLabel— hide the text label and show only the icon. Default:truein the actions bar,falsein the presentation toolbar and nav-bar.size— button size (sm,md,lg). Default:lgin the actions bar,mdin the presentation toolbar and nav-bar.style— an inline CSS style object applied to the button.