Availability
Plugin manifests define plugin metadata, capabilities, permissions, and UI integration. Understanding manifests is essential for building secure, well-integrated plugins.
Manifest Structure
Edge Gateway Plugins
Edge Gateway plugins don’t use JSON manifests. Configuration is provided via the API when creating the plugin:pre_auth- Before authenticationauth- Custom authenticationpost_auth- After authenticationon_response- Response modificationdata_collection- Data export
AI Studio UI Plugins
Complete manifest structure for UI plugins:Expandable
AI Studio Agent Plugins
Agent plugin manifests are simpler (no UI):Expandable
Object Hooks Plugins
Object hooks plugins intercept CRUD operations on platform objects. These plugins use the unified SDK and register hooks programmatically, so the manifest doesn’t need special hook configuration.Basic Object Hooks Manifest
Expandable
GetObjectHookRegistrations() method in the plugin code, not in the manifest. The plugin_type is "ai_studio" since object hooks are Studio-only.
Hook Registration (Code, Not Manifest)
Object hooks are registered programmatically:Expandable
llm- LLM provider configurationsdatasource- Data source connectionstool- External tool definitionsuser- User accounts
before_create- Before object creation (can block)after_create- After object creation (notification only)before_update- Before object update (can block)after_update- After object update (notification only)before_delete- Before object deletion (can block)after_delete- After object deletion (notification only)
Multi-Capability with Hooks
Object hooks plugins can combine hooks with UI:Expandable
- Register
before_createhooks for datasources (via code) - Block creation and add to pending approvals
- Provide UI dashboard to approve/reject
- Use RPC methods for approval actions
examples/plugins/studio/llm-validator/ and examples/plugins/studio/hook-test-plugin/ for complete examples.
Resource Provider Plugins
Resource Provider plugins register custom resource types that integrate into the App creation flow. Declare resource types in the manifest’sresource_types section:
Expandable
ResourceProvider methods programmatically for runtime behavior.
To register types that are known only at runtime, use
plugin_sdk.SyncResourceTypes. This needs the resource-types.manage scope.
See Resource Provider Plugins for the full guide.
Service Scopes Reference
LLM Scopes
Tool Scopes
Datasource Scopes
App Scopes
Plugin Scopes
KV Storage Scopes
Analytics Scopes
Pricing Scopes
Notification Scopes
Resource Type Scopes
RBAC Scopes
Governance Scopes (Enterprise)
Permissions (RBAC) Block
From v2.2.0, administrators assign roles that are built from a permission catalog. Every plugin that declaresstudio_ui, portal_ui, or resource_provider adds one resource, plugin:<manifest id>, with three actions:
read: Open the plugin pages and configuration.write: Call the admin RPC methods of the plugin, and edit its configuration.execute
plugins:execute have every plugin permission. Administrators can give a role access to one plugin with a grant for that plugin. The optional rbac block adds more detail:
- To set the permission for a page, add
required_permissionto its mount, for example"mount": {"kind": "webc", "tag": "...", "entry": "...", "required_permission": "asset-types:read"}. The default is the basereadpermission of the plugin. - To add resources that exist only at runtime, use RegisterPermissionResources with the
rbac.registerscope. In plugin code, check the caller withuserCtx.Can("<key>:<action>"). - Roles do not control AI Portal RPC (
/common/plugins/:id/portal-rpc/...). AI Portal users have no roles.
UI Slot System
Available Slots
sidebar.section
Add a collapsible section to the sidebar with nested items:Expandable
"hidden": true is mounted and you can open it by URL, but the sidebar does not show it. Use hidden routes for pages that open from another page, such as a detail or editor view (/admin/my-plugin/item#/items/42). Hidden routes use the same permission rules as other routes. AI Portal routes match the path exactly, so put the item ID in the hash, not in the path.
sidebar.link
Add a single link to the sidebar:settings.section
Add a section to the Settings page:app.detail.tab
Add a tab to App detail pages:llm.detail.tab
Add a tab to LLM detail pages:Mount Configuration
WebComponent Mount
kind: Must be"webc"for WebComponentstag: Custom element tag nameentry: Path to JavaScript file (relative to plugin)props: Properties passed to the component
Permission Validation
Permissions are validated when plugins call the Service API:Configuration Schema
Plugins can provide JSON Schema for their configuration:Expandable
- Validate configuration on save
- Generate UI forms
- Provide inline documentation
- Set default values
Security Best Practices
Principle of Least Privilege
Only request scopes your plugin actually needs:Content Security Policy
Define CSP headers for UI plugins:Input Validation
Always validate inputs in RPC methods:Expandable
Secrets Management
Never hardcode secrets in manifests or code:Versioning and Compatibility
Semantic Versioning
Use semantic versioning for plugin versions:- MAJOR: Breaking changes
- MINOR: New features, backward compatible
- PATCH: Bug fixes, backward compatible
Minimum Versions
Declare the minimum AI Studio and Edge Gateway versions incompat:
Compatibility Declaration
Declare platform compatibility:Testing Manifests
Validation
Validate your manifest before deployment:Common Errors
Complete Examples
Minimal UI Plugin
Expandable
Full-Featured UI Plugin
See plugins-studio-ui.md for complete rate-limiting-ui example.Minimal Agent Plugin
Advanced Agent Plugin
Expandable
Governed Metadata Contributions (Enterprise)
From v2.2.0, a plugin can ship controlled vocabularies and metadata schemas. Administrators turn them on in Governance > Metadata schemas. AI Studio creates contributed schemas as inactive and advisory, withsource: plugin:<id>. Administrators can change only active and enforcement. The manifest owns the structure, and AI Studio updates it each time the plugin loads.
applies_toacceptsllm,tool,datasource,*,plugin_resource:<plugin_id>:<slug>, andplugin_resource:self:<slug>. Other values fail manifest validation.plugin_resource:self:<slug>refers to a resource type of the same plugin, which must havesupports_metadata: true. AI Studio replacesselfwith the plugin ID when it loads the manifest.- Field definitions use the same format as the admin API:
key,label,type,required,severity,vocabulary_slug,pattern,min,max,max_length,warn_if_past,portal_visible,gateway_visible, andorder. - AI Studio skips, with a warning, a slug that an administrator or another plugin already owns. It also skips a field key that is already in an active schema for the same object type.