pub trait JsonUiPlugin: Send + Sync {
// Required methods
fn component_type(&self) -> &str;
fn props_schema(&self) -> Value;
fn render(&self, props: &Value, data: &Value) -> String;
fn css_assets(&self) -> Vec<Asset>;
fn js_assets(&self) -> Vec<Asset>;
fn init_script(&self) -> Option<String>;
}Expand description
Trait for JSON-UI plugin components.
Plugins provide custom interactive components that require client-side JS/CSS. Each plugin declares a unique component type name, a JSON Schema for its props (enabling MCP/agent discovery), a render function producing HTML, and asset declarations for the page.
Implementations must be Send + Sync for use in the global registry
across threads.
Required Methods§
Sourcefn component_type(&self) -> &str
fn component_type(&self) -> &str
Unique component type name (e.g., “Map”).
Used in JSON: {"type": "Map", ...}. Must not collide with
built-in component type names.
Sourcefn props_schema(&self) -> Value
fn props_schema(&self) -> Value
JSON Schema describing accepted props.
Used by MCP/agents for discovery and validation. Should return a valid JSON Schema object.
Sourcefn render(&self, props: &Value, data: &Value) -> String
fn render(&self, props: &Value, data: &Value) -> String
Render the component to an HTML string.
Receives the raw props and the view data for data_path resolution.
Sourcefn css_assets(&self) -> Vec<Asset>
fn css_assets(&self) -> Vec<Asset>
CSS assets to load in <head>.
Called once per page; results are deduplicated by URL across all plugin instances on the page.
Sourcefn js_assets(&self) -> Vec<Asset>
fn js_assets(&self) -> Vec<Asset>
JS assets to load before </body>.
Called once per page; results are deduplicated by URL across all plugin instances on the page.
Sourcefn init_script(&self) -> Option<String>
fn init_script(&self) -> Option<String>
Inline initialization JS emitted once per page after assets load.
Returns None if no initialization is needed.