Skip to content

[3.0] feat: SDK support for extracting plugin-specific data from slide text #264

@GuiLeme

Description

@GuiLeme

Slide Plugin Data Contract (BBBPlugin marker)

Overview

A standardized way to embed plugin-specific data inside BBB presentation slides. The SDK is responsible for finding, parsing, and routing this data to the correct plugin — each plugin only receives what belongs to it.


Marker format

A slide may contain one or more BBBPlugin blocks anywhere in its text content:

BBBPlugin{"<pluginName>": <payload>, "<otherPlugin>": <payload>}
  • The marker is the literal string BBBPlugin immediately followed by a JSON object
  • No whitespace is allowed between BBBPlugin and {
  • Plugin names are the keys; values are arbitrary JSON (object, array, primitive) defined by each plugin
  • A slide may contain multiple BBBPlugin{...} blocks — this is the recommended way for slide authors to keep each plugin's data independent

Examples:

Single plugin, single block:

BBBPlugin{"smart-slide-link": {"links": [{"url": "https://example.com", "label": "Learn more"}]}}

Multiple plugins, separate blocks (preferred for independent authoring):

BBBPlugin{"smart-slide-link": {"links": [{"url": "https://example.com", "label": "Learn more"}]}}
BBBPlugin{"quiz-plugin": {"question": "What is 2+2?", "answers": ["3", "4", "5"]}}

Multiple plugins, single block:

BBBPlugin{"smart-slide-link": {"links": [...]}, "quiz-plugin": {"question": "..."}}

SDK responsibilities

  1. Scan the full slide text for all BBBPlugin{...} occurrences
  2. Parse each block's JSON, skipping any that are malformed (silent failure, no crash)
  3. Collect all values across all blocks for each plugin name key
  4. When a plugin requests its data, return only the payload(s) matching its registered name

Collision behavior

If the same plugin name key appears across multiple BBBPlugin blocks on the same slide, the SDK collects all occurrences and returns them as an ordered list to the plugin. Each plugin is responsible for deciding how to handle multiple payloads (merge, take first, take all, etc.).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions