- Description: Lists all available commands in the chat.
- Usage: Type
/listin the chat. - Restrictions: None.
- Description: Demotes the user who issued the command to the viewer role.
- Usage: Type
/demotein the chat as a moderator. - Restrictions: Only users with moderator privileges can execute this command.
- Description: Demotes all users in the meeting to the viewer role, except for the user who issued the command.
- Usage: Type
/demoteAllin the chat as a moderator. The command will change the role of all other users to viewers. - Restrictions: Only users with moderator privileges can execute this command. The command will not affect the sender.
- Description: Promotes all users in the meeting to the moderator role, except for the user who issued the command.
- Usage: Type
/promoteAllin the chat as a moderator. The command will change the role of all other users to moderators. - Restrictions: Only users with moderator privileges can execute this command. The command will not affect the sender.
- Description: Sends a message repeatedly, either a specified number of times or at regular intervals.
- Usage:
- For multiple sends:
/spam "message with spaces" [times](default 1, max 100) - For interval spam:
/spam "message" interval <ms>
- For multiple sends:
- Restrictions: None. Use
/stopSpamto stop interval spam.
- Description: Stops all active spam intervals started by the
/spamcommand. - Usage: Type
/stopSpamin the chat. - Restrictions: None.
- Description: Displays detailed debug information about the current session, including user details, browser environment, timing information, and storage data.
- Usage: Type
/debugin the chat. - Restrictions: None.
- Description: Makes HTTP requests to the provided BigBlueButton join URL to obtain valid session tokens, then establishes real GraphQL WebSocket connections to simulate multiple users joining a BigBlueButton meeting for load testing purposes.
- Usage:
- With quotes (recommended for URLs with special characters):
/join "<join-url>" <number_of_users> [-v] - Without quotes (for simple URLs):
/join <join-url> <number_of_users> [-v] - Verbose mode: Add
-vflag to receive detailed progress messages in the chat
- With quotes (recommended for URLs with special characters):
- Restrictions: Number of users must be greater than 1. Requires valid BigBlueButton join URL that returns session tokens upon request.
- Description: Terminates all active WebSocket connections created by the
/joincommand. - Usage: Type
/stopJoinin the chat. - Restrictions: None.
- Description:
⚠️ ADVANCED FEATURE WITH SECURITY IMPLICATIONS - Generates custom BigBlueButton join URLs using the server secret to create authenticated sessions with custom user data. This allows full control over user properties (name, role, custom metadata) when simulating joins. Unlike/join, which requires a pre-generated join URL, this command generates URLs directly using the BBB API secret. - Usage:
/customJoin --secret "YOUR_SECRET" --pw "PASSWORD" <count> [options] - Required Parameters:
--secret "SECRET": BigBlueButton server shared secret (found in/etc/bigbluebutton/bbb-conf.properties)--pw "PASSWORD": Meeting password (use attendee password for viewers, moderator password for moderators)<count>: Number of users to join (positive integer)
- Optional Parameters (auto-detected from current session if not provided):
--host "URL": BigBlueButton server URL (default: current host from window.location.origin)--meetingID "ID": Meeting/room identifier (default: auto-detected from DOM or meeting prop)--userdata "key1=value1,key2=value2": Custom userdata as comma-separated key=value pairs (e.g.,--userdata "bot=true,role=tester")-v: Verbose mode (shows detailed progress messages in chat)
- Examples:
- Join 5 viewers in current meeting (auto-detect host and meetingID):
/customJoin --secret "abc123secret" --pw "attendeepass" 5 -v - Join to a different meeting:
/customJoin --secret "abc123secret" --host "https://bbb.example.com" --meetingID "room123" --pw "attendeepass" 3 - Join 2 moderators with custom userdata:
/customJoin --secret "abc123secret" --pw "moderatorpass" 2 --userdata "bot=true,role=tester"
- Join 5 viewers in current meeting (auto-detect host and meetingID):
- Security Warning:
⚠️ This command exposes your BigBlueButton server secret in chat history and browser memory. The secret is extremely sensitive and should NEVER be shared. Only use this command in:- Secure development/testing environments
- Private meetings where all participants are trusted
- Environments where chat logs are not persisted or are securely managed
- Features:
- Generates random user names using the @faker-js/faker library (realistic names in multiple locales)
- Creates properly signed join URLs with SHA-1 checksums
- Establishes real GraphQL WebSocket connections
- Supports custom userdata fields as individual query parameters
- Role (attendee/moderator) is determined by the password provided
- Restrictions: Count must be a positive integer. Requires valid BBB server credentials.
- Description: Terminates all active WebSocket connections created by the
/customJoincommand. - Usage: Type
/stopCustomJoinin the chat. - Restrictions: None.
- Description: Injects generic content (URL or HTML) into the sidekick panel area with customizable attributes.
- Usage:
- Basic usage with URL:
/injectSidekick https://example.com - With custom attributes:
/injectSidekick --id "my-content" --name "My Panel" --section "Tools" --icon "copy" --open "true" https://example.com - With HTML content:
/injectSidekick --id "my-html" --name "HTML Panel" <h1>Welcome</h1><p>Custom content</p>
- Basic usage with URL:
- Optional Parameters:
--id "ID": Unique identifier for the content item (default: auto-generated with timestamp)--name "NAME": Display name for the panel (default: "Generic Content")--section "SECTION": Section/category name in sidekick (default: "Custom")--icon "ICON": Icon name for the button (default: "copy")--open "true|false": Whether panel is open by default (default: "false")
- Note: Use double quotes (
") around values that contain spaces. The parser supports multi-word values enclosed in quotes. - Examples:
/injectSidekick --id "test" --name "Test Panel" --section "Plugins" --icon "cog" --open "true" https://example.com/injectSidekick --name "My HTML" <div style="padding:20px"><h1>Hello!</h1></div>
- Restrictions: None.
- Description: Injects generic content (URL or HTML) into the main presentation area.
- Usage:
- Basic usage with URL:
/injectMain https://example.com - With custom ID:
/injectMain --id "my-main-content" https://example.com - With HTML content:
/injectMain <h1>Welcome to Main Area</h1>
- Basic usage with URL:
- Optional Parameters:
--id "ID": Unique identifier for the content item (default: auto-generated with timestamp)
- Note: Use double quotes (
") around values that contain spaces. - Examples:
/injectMain --id "dashboard" https://example.com/dashboard/injectMain <div style="width:100%;height:100%;background:#f0f0f0">Main Content</div>
- Restrictions: None.
- Description: Lists all currently injected generic contents (sidekick or main) with their IDs. Works for both sidekick and main areas independently - injecting sidekick content will NOT remove existing main content and vice-versa.
- Usage:
- List all contents (sidekick and main):
/listGenericContent - List specific type:
/listGenericContent <sidekick|main>
- List all contents (sidekick and main):
- Output: Displays all injected contents with their names and IDs, organized by type.
- Examples:
/listGenericContent- Shows all injected sidekicks and main contents/listGenericContent sidekick- Shows only injected sidekicks/listGenericContent main- Shows only injected main contents
- Related Commands: Use
/removeGenericContent <type> <ID>to remove a specific content. - Restrictions: None.
- Description: Remove generic content by ID (searches in both sidekick and main), or remove all contents of a specific type. Can remove content with just an ID without specifying the type.
- Usage:
- Remove by ID (searches all types):
/removeGenericContent <ID> - Remove all of a type:
/removeGenericContent <sidekick|main> - Remove specific content from a type:
/removeGenericContent <sidekick|main> <ID>
- Remove by ID (searches all types):
- Note: Use double quotes (
") if the ID contains spaces. - Examples:
/removeGenericContent teste- Removes content with IDtestefrom any area/removeGenericContent sidekick- Removes all injected sidekicks/removeGenericContent main- Removes all injected main contents/removeGenericContent sidekick teste- Removes sidekick with IDteste/removeGenericContent main "my dashboard"- Removes main content with IDmy dashboard/removeGenericContent "tool1"- Removes content with IDtool1from any area (searches both sidekick and main)
- Related Commands: Use
/listGenericContentto view all available content IDs and types before removing. - Restrictions: None.
These commands control the BigBlueButton user interface elements and settings.
- Description: Show the actions bar (bottom toolbar with action buttons).
- Usage: Type
/showActionsBarin the chat. - Restrictions: None.
- Description: Hide the actions bar (bottom toolbar with action buttons).
- Usage: Type
/hideActionsBarin the chat. - Restrictions: None.
- Description: Show the navigation bar (top navigation menu).
- Usage: Type
/showNavBarin the chat. - Restrictions: None.
- Description: Hide the navigation bar (top navigation menu).
- Usage: Type
/hideNavBarin the chat. - Restrictions: None.
- Description: Open the presentation area (display slides or screen share).
- Usage: Type
/openPresentationin the chat. - Restrictions: None.
- Description: Close the presentation area.
- Usage: Type
/closePresentationin the chat. - Restrictions: None.
- Description: Open the sidekick panel (right-side panel for notes and content).
- Usage: Type
/openSidekickin the chat. - Related Commands: Use
/injectSidekickto inject content into the sidekick panel. - Restrictions: None.
- Description: Close the sidekick panel.
- Usage: Type
/closeSidekickin the chat. - Restrictions: None.
- Description: Enable self-view display for all cameras (show local video feed).
- Usage: Type
/enableSelfViewin the chat. - Restrictions: None.
- Description: Disable self-view display for all cameras (hide local video feed).
- Usage: Type
/disableSelfViewin the chat. - Restrictions: None.
- Description: Set audio captions/subtitles language for the meeting.
- Usage:
/setCaptions <language> - Available Languages:
none- Disable captionsen- Englishen-US- English (US)es- Spanishpt- Portuguesept-BR- Portuguese (Brazil)fr- Frenchde- German
- Examples:
/setCaptions en- Enable English captions/setCaptions pt-BR- Enable Portuguese (Brazil) captions/setCaptions none- Disable captions
- Restrictions: None.
- Description: Set the volume level for conference speaker (audio output).
- Usage:
/setSpeakerLevel <0-1> - Parameters:
- Level range:
0(mute) to1(maximum volume) - Use decimals for precise levels (e.g.,
0.5for 50%)
- Level range:
- Examples:
/setSpeakerLevel 1- Maximum volume/setSpeakerLevel 0.5- 50% volume/setSpeakerLevel 0- Mute
- Restrictions: None.
- Description: Set the volume level for external video (screen share or video content).
- Usage:
/setVideoVolume <0-1> - Parameters:
- Level range:
0(mute) to1(maximum volume) - Use decimals for precise levels (e.g.,
0.5for 50%)
- Level range:
- Examples:
/setVideoVolume 1- Maximum volume/setVideoVolume 0.5- 50% volume/setVideoVolume 0- Mute
- Restrictions: None.
- Description: Send a custom UI notification to the meeting participants.
- Usage:
/notify <type> <icon> <message> - Notification Types:
info- Information notification (blue)default- Default notificationwarning- Warning notification (yellow)success- Success notification (green)error- Error notification (red)
- Icon Names: Any FontAwesome icon name (e.g.,
bell,check,exclamation,info-circle) - Examples:
/notify success check "Setup completed successfully!"/notify warning exclamation "Please check your microphone"/notify error times "An error occurred"
- Restrictions: None.
- Description: Enable UI notification display in the meeting.
- Usage: Type
/enableNotificationsin the chat. - Related Commands: Use
/notifyto send notifications, or/disableNotificationsto hide them. - Restrictions: None.
- Description: Disable UI notification display in the meeting (notifications will not be shown).
- Usage: Type
/disableNotificationsin the chat. - Related Commands: Use
/enableNotificationsto re-enable notifications. - Restrictions: None.
- Description: Set your user status to "away" (indicates you are not actively participating).
- Usage: Type
/setAwayin the chat. - Related Commands: Use
/setPresentto return to active status. - Restrictions: None.
- Description: Set your user status to "present" (indicates you are actively participating).
- Usage: Type
/setPresentin the chat. - Related Commands: Use
/setAwayto set away status. - Restrictions: None.
- Description: Set the enforced layout for the meeting (controls how the UI elements are arranged).
- Usage:
/setLayout <layout_type> - Available Layouts:
SMART_LAYOUT- Automatically adjust layout based on contentPRESENTATION_FOCUS- Focus on presentation/screen share areaVIDEO_FOCUS- Focus on video participantsCAMERAS_ONLY- Show only camera feedsPRESENTATION_ONLY- Show only presentationPARTICIPANTS_AND_CHAT_ONLY- Show participants and chatMEDIA_ONLY- Show only mediaCUSTOM_LAYOUT- Custom layout configurationPLUGINS_ONLY- Show only plugins
- Examples:
/setLayout PRESENTATION_FOCUS- Focus on presentation/setLayout VIDEO_FOCUS- Focus on video participants/setLayout SMART_LAYOUT- Automatic layout
- Restrictions: None.
- Description: Open the chat message input form.
- Usage: Type
/openChatFormin the chat. - Related Commands: Use
/fillChatFormto pre-fill the input with text. - Restrictions: None.
- Description: Pre-fill the chat input form with specified text (text is ready to send with Enter key).
- Usage:
/fillChatForm <text> - Examples:
/fillChatForm Hello everyone!- Pre-fill with greeting/fillChatForm This is a test message- Pre-fill with test message
- Related Commands: Use
/openChatFormto just open the input form. - Restrictions: None.
This is an experimental internal plugin developed by mconf for BigBlueButton. Its main purpose is to allow the inclusion and execution of custom chat commands in meetings. The plugin is designed to be easily extensible, enabling developers to add new commands with minimal effort.
- Easily add new chat commands by extending the configuration.
- Commands can trigger custom mutations and actions in the meeting context.
- Support for injecting multiple generic content items to sidekick and main areas.
- Sidekick and main contents are managed separately - injecting content in one area does NOT affect the other.
- Generic content manager allows flexible management of both areas with unified list and remove operations.
- Example command:
/demote(see above for details).
A screenshot and/or a short video can be added here to illustrate usage.
To build the plugin for production use, follow these steps:
cd $HOME/src/plugin-template
npm ci
npm run build-bundleThe above command will generate the dist folder, containing the bundled JavaScript file named <plugin-name>.js. This file can be hosted on any HTTPS server along with its manifest.json.
If you install the Plugin separated to the manifest, remember to change the javascriptEntrypointUrl in the manifest.json to the correct endpoint.
To use the plugin in BigBlueButton, send this parameter along in create call:
pluginManifests=[{"url":"<your-domain>/path/to/manifest.json"}]
Or additionally, you can add this same configuration in the .properties file from bbb-web in /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties
Commands are defined in the plugin's configuration as objects with a name, description, mutation (optional), and an execute function. To add a new command:
- Open the file where commands are configured (usually
component.tsxor a dedicated config file). - Add a new entry to the
CommandConfigobject, specifying:name: The command name (used after/in chat).description: A brief description of the command.mutation: (Optional) The GraphQL mutation string to be used.execute: The function that will be called when the command is triggered. It receives context such as the current user, user list, arguments, and mutation trigger.
- Ensure the mutation is mapped in the
mutationMapif your command uses a custom mutation.
Example:
const DEFAULT_COMMANDS: CommandConfig = {
demote: { ... },
myCommand: {
name: 'myCommand',
description: 'Does something special',
mutation: MY_MUTATION,
execute: ({ mutation, users, senderId, args }) => {
// Your logic here
},
},
};As for development mode (running this plugin from source), please, refer back to https://github.com/bigbluebutton/bigbluebutton-html-plugin-sdk section Running the Plugin from Source