ObjectStackObjectStack

Plugin Capability — Kernel Protocol reference

Defines the standard way plugins declare their capabilities, implementations, and conformance levels to ensure interoperability across vendors.

Plugin Capability Protocol

Defines the standard way plugins declare their capabilities, implementations, and conformance levels to ensure interoperability across vendors.

Based on the Protocol-Oriented Architecture pattern similar to:

  • Kubernetes CRDs (Custom Resource Definitions)
  • OSGi Service Registry
  • Eclipse Extension Points

Source: packages/spec/src/kernel/plugin-capability.zod.ts

TypeScript Usage

import { CapabilityConformanceLevelSchema, ExtensionPointSchema, PluginCapabilitySchema, PluginCapabilityManifestSchema, PluginDependencySchema, PluginInterfaceSchema, ProtocolFeatureSchema, ProtocolReferenceSchema, ProtocolVersionSchema } from '@objectstack/spec/kernel';
import type { CapabilityConformanceLevel, ExtensionPoint, PluginCapability, PluginCapabilityManifest, PluginDependency, PluginInterface, ProtocolFeature, ProtocolReference, ProtocolVersion } from '@objectstack/spec/kernel';

// Validate data
const result = CapabilityConformanceLevelSchema.parse(data);

CapabilityConformanceLevel

Level of protocol conformance

Allowed Values

  • full
  • partial
  • experimental
  • deprecated

ExtensionPoint

Properties

PropertyTypeRequiredDescription
idstring✅Unique extension point identifier
namestring✅
descriptionstringoptional
typeEnum<'action' | 'hook' | 'widget' | 'provider' | 'transformer' | 'validator' | 'decorator'>✅
contract{ input?: string; output?: string; signature?: string }optional
cardinalityEnum<'single' | 'multiple'>optional (default: "multiple")Whether multiple extensions can register to this point

Nested Shape: ExtensionPoint.contract

PropertyTypeRequiredDescription
inputstringoptionalInput type/schema
outputstringoptionalOutput type/schema
signaturestringoptionalFunction signature if applicable

PluginCapability

Properties

PropertyTypeRequiredDescription
protocol{ id: string; label: string; version: object; specification?: string; … }✅
conformanceEnum<'full' | 'partial' | 'experimental' | 'deprecated'>optional (default: "full")Level of protocol conformance
implementedFeaturesstring[]optionalList of implemented feature names
features{ name: string; enabled?: boolean; description?: string; sinceVersion?: string; … }[]optional
metadataRecord<string, any>optional
certifiedbooleanoptional (default: false)Has passed official conformance tests
certificationDatestringoptional

Nested Shape: PluginCapability.protocol

PropertyTypeRequiredDescription
idstring✅Unique protocol identifier (e.g., com.objectstack.protocol.storage.v1)
labelstring✅
version{ major: integer; minor: integer; patch: integer }✅Semantic version of the protocol
specificationstringoptionalURL or path to protocol specification
descriptionstringoptional

Nested Shape: PluginCapability.features[number]

PropertyTypeRequiredDescription
namestring✅Feature identifier within the protocol
enabledbooleanoptional (default: true)
descriptionstringoptional
sinceVersionstringoptionalVersion when this feature was added
deprecatedSincestringoptionalVersion when deprecated

PluginCapabilityManifest

Properties

PropertyTypeRequiredDescription
implements{ protocol: object; conformance?: Enum<'full' | 'partial' | 'experimental' | 'deprecated'>; implementedFeatures?: string[]; features?: object[]; … }[]optionalList of protocols this plugin conforms to
provides{ id: string; name: string; description?: string; version: object; … }[]optionalServices/APIs this plugin offers to others
requires{ pluginId: string; version: string; optional?: boolean; reason?: string; … }[]optionalRequired plugins and their capabilities
extensionPoints{ id: string; name: string; description?: string; type: Enum<'action' | 'hook' | 'widget' | 'provider' | 'transformer' | 'validator' | 'decorator'>; … }[]optionalPoints where other plugins can extend this plugin
extensions{ targetPluginId: string; extensionPointId: string; implementation: string; priority?: integer }[]optionalExtensions contributed to other plugins

Nested Shape: PluginCapabilityManifest.implements[number]

PropertyTypeRequiredDescription
protocol{ id: string; label: string; version: object; specification?: string; … }✅
conformanceEnum<'full' | 'partial' | 'experimental' | 'deprecated'>optional (default: "full")Level of protocol conformance
implementedFeaturesstring[]optionalList of implemented feature names
features{ name: string; enabled?: boolean; description?: string; sinceVersion?: string; … }[]optional
metadataRecord<string, any>optional
certifiedbooleanoptional (default: false)Has passed official conformance tests
certificationDatestringoptional

Nested Shape: PluginCapabilityManifest.provides[number]

PropertyTypeRequiredDescription
idstring✅Unique interface identifier
namestring✅
descriptionstringoptional
version{ major: integer; minor: integer; patch: integer }✅Semantic version of the protocol
methods{ name: string; description?: string; parameters?: object[]; returnType?: string; … }[]✅
events{ name: string; description?: string; payload?: string }[]optional
stabilityEnum<'stable' | 'beta' | 'alpha' | 'experimental'>optional (default: "stable")

Nested Shape: PluginCapabilityManifest.requires[number]

PropertyTypeRequiredDescription
pluginIdstring✅Required plugin identifier
versionstring✅Semantic version constraint
optionalbooleanoptional (default: false)
reasonstringoptional
requiredCapabilitiesstring[]optionalProtocol IDs the dependency must support

Nested Shape: PluginCapabilityManifest.extensionPoints[number]

PropertyTypeRequiredDescription
idstring✅Unique extension point identifier
namestring✅
descriptionstringoptional
typeEnum<'action' | 'hook' | 'widget' | 'provider' | 'transformer' | 'validator' | 'decorator'>✅
contract{ input?: string; output?: string; signature?: string }optional
cardinalityEnum<'single' | 'multiple'>optional (default: "multiple")Whether multiple extensions can register to this point

Nested Shape: PluginCapabilityManifest.extensions[number]

PropertyTypeRequiredDescription
targetPluginIdstring✅Plugin ID being extended
extensionPointIdstring✅Extension point identifier
implementationstring✅Path to implementation module
priorityintegeroptional (default: 100)Registration priority (lower = higher priority)

PluginDependency

Properties

PropertyTypeRequiredDescription
pluginIdstring✅Required plugin identifier
versionstring✅Semantic version constraint
optionalbooleanoptional (default: false)
reasonstringoptional
requiredCapabilitiesstring[]optionalProtocol IDs the dependency must support

PluginInterface

Properties

PropertyTypeRequiredDescription
idstring✅Unique interface identifier
namestring✅
descriptionstringoptional
version{ major: integer; minor: integer; patch: integer }✅Semantic version of the protocol
methods{ name: string; description?: string; parameters?: object[]; returnType?: string; … }[]✅
events{ name: string; description?: string; payload?: string }[]optional
stabilityEnum<'stable' | 'beta' | 'alpha' | 'experimental'>optional (default: "stable")

Nested Shape: PluginInterface.methods[number]

PropertyTypeRequiredDescription
namestring✅Method name
descriptionstringoptional
parameters{ name: string; type: string; required?: boolean; description?: string }[]optional
returnTypestringoptionalReturn value type
asyncbooleanoptional (default: false)Whether method returns a Promise

Nested Shape: PluginInterface.events[number]

PropertyTypeRequiredDescription
namestring✅Event name
descriptionstringoptional
payloadstringoptionalEvent payload type

ProtocolFeature

Properties

PropertyTypeRequiredDescription
namestring✅Feature identifier within the protocol
enabledbooleanoptional (default: true)
descriptionstringoptional
sinceVersionstringoptionalVersion when this feature was added
deprecatedSincestringoptionalVersion when deprecated

ProtocolReference

Properties

PropertyTypeRequiredDescription
idstring✅Unique protocol identifier (e.g., com.objectstack.protocol.storage.v1)
labelstring✅
version{ major: integer; minor: integer; patch: integer }✅Semantic version of the protocol
specificationstringoptionalURL or path to protocol specification
descriptionstringoptional

ProtocolVersion

Semantic version of the protocol

Properties

PropertyTypeRequiredDescription
majorinteger✅
minorinteger✅
patchinteger✅

On this page