ObjectStackObjectStack

Plugin Capability

Plugin Capability protocol schemas

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
idstringUnique 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
idstringUnique 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
namestringFeature 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
idstringUnique 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
pluginIdstringRequired plugin identifier
versionstringSemantic version constraint
optionalbooleanoptional (default: false)
reasonstringoptional
requiredCapabilitiesstring[]optionalProtocol IDs the dependency must support

Nested Shape: PluginCapabilityManifest.extensionPoints[number]

PropertyTypeRequiredDescription
idstringUnique 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
targetPluginIdstringPlugin ID being extended
extensionPointIdstringExtension point identifier
implementationstringPath to implementation module
priorityintegeroptional (default: 100)Registration priority (lower = higher priority)

PluginDependency

Properties

PropertyTypeRequiredDescription
pluginIdstringRequired plugin identifier
versionstringSemantic version constraint
optionalbooleanoptional (default: false)
reasonstringoptional
requiredCapabilitiesstring[]optionalProtocol IDs the dependency must support

PluginInterface

Properties

PropertyTypeRequiredDescription
idstringUnique 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
namestringMethod 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
namestringEvent name
descriptionstringoptional
payloadstringoptionalEvent payload type

ProtocolFeature

Properties

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

ProtocolReference

Properties

PropertyTypeRequiredDescription
idstringUnique 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