NavEntryContribution
Related: RequiredCapabilities
PageContribution
Related: PluginPageProps, RequiredCapabilities
PluginContext
register(context) entry.
Each method binds the contribution to the plugin the host is loading — the
plugin’s identity is fixed by the host, not read from any ambient state — so a
contribution can never be misattributed to another plugin. Contributions are
staged and committed together once register settles; a register that throws
commits nothing. The context is SEALED once register settles: a call made
after that (a deferred timer, a post-resolve microtask) throws instead of
silently dropping, so every registration must happen during register.
Properties
Related: NavEntryContribution, PageContribution, SettingsTabContribution, ToolPanelContribution
PluginContributions
Related: RegisteredNavEntry, RegisteredPage, RegisteredSettingsTab, ToolPanelContribution
PluginEntry
register export, and calls it with a PluginContext. All
contributions flow through that context — there are no free registration
functions. The entry may be synchronous or async; the host awaits it before
committing, so an async entry must complete every registration before it
resolves (see the seal on PluginContext).
Related: PluginContext
PluginPageProps
RegisteredNavEntry
NavEntryContribution plus the id of the plugin that registered it. The
pluginId is stamped by the registry from the identity the host passed to
PluginEntry, so the entry links only under its owner’s
/plugins/{pluginId}/ prefix and two plugins may register the same path
without colliding.
Properties
Related: NavEntryContribution, RequiredCapabilities
RegisteredPage
PageContribution plus
the id of the plugin that registered it. The pluginId is stamped by the
registry from the identity the host passed to PluginEntry — a plugin
never supplies its own id — so a page resolves only under its owner’s
/plugins/{pluginId}/ prefix and two plugins may register the same path
without colliding.
Properties
Related: PageContribution, PluginPageProps, RequiredCapabilities
RegisteredSettingsTab
SettingsTabContribution plus the id of the plugin that registered it.
The pluginId is stamped by the registry from the identity the host passed to
PluginEntry — a plugin never supplies its own id — so a tab is always
attributable to its owner and two plugins may register the same tab id
without colliding.
Properties
Related: RequiredCapabilities, SettingsTabContribution, SettingsTabProps
RequiredCapabilities
routes is a list of
route-path prefixes (anyOf semantics, the same evaluator the shell nav uses):
the contribution renders iff the caller’s capability projection covers at least
one of them. ABSENT (the field is optional) means the contribution renders only
for a FULL projection — safe-by-default for every existing plugin, which never
declared a requirement. The server remains the authority; this only shapes what
the UI advertises.
Properties
STUDIO_PLUGIN_API_VERSION
targeted == current accepts; anything else rejects.
Additive evolution under this gate: a host that gains a NEW optional context
capability (a new register* method, a new host-side injection behavior)
keeps the same version, so every existing plugin loads unchanged. The one
asymmetry the equality gate leaves is a plugin that USES a newer capability on
an OLDER host that lacks it — and it fails loudly, by construction, not by any
negotiation machinery:
- A plugin calling a context method the host does not define throws the
natural
context.<method> is not a functionduringregister; the loader catches it as that plugin’s loud error card and commits nothing. - A plugin shipping a
.cssasset to a host that does not inject stylesheets is served but never injected — the page renders with SDK-component styling only. This is the single quiet degradation the mechanism admits, and the authoring docs state it: stylesheet injection is a host capability, so a deployment pairs the Studio host with plugins built for it.
SettingsTabContribution
Related: RequiredCapabilities, SettingsTabProps
SettingsTabProps
ToolPanelContribution
Related: ToolPanelProps
ToolPanelProps
VersionGateResult
checkPluginApiVersion
Related: VersionGateResult

