ObjectStackObjectStack

Plugin Registry — Kernel Protocol reference

Plugin Registry Protocol — Defines the schema for the plugin discovery and registry system.

Plugin Registry Protocol

Defines the schema for the plugin discovery and registry system. This enables plugins from different vendors to be discovered, validated, and composed together in the ObjectStack ecosystem.

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

TypeScript Usage

import { PluginInstallConfigSchema, PluginQualityMetricsSchema, PluginRegistryEntrySchema, PluginSearchFiltersSchema, PluginStatisticsSchema, PluginVendorSchema } from '@objectstack/spec/kernel';
import type { PluginInstallConfig, PluginQualityMetrics, PluginRegistryEntry, PluginSearchFilters, PluginStatistics, PluginVendor } from '@objectstack/spec/kernel';

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

PluginInstallConfig

Properties

PropertyTypeRequiredDescription
pluginIdstring✅
versionstringoptionalDefaults to latest
configRecord<string, any>optional
autoUpdatebooleanoptional (default: false)
options{ skipDependencies?: boolean; force?: boolean; target?: Enum<'system' | 'space' | 'user'> }optional

PluginQualityMetrics

Properties

PropertyTypeRequiredDescription
testCoveragenumberoptional
documentationScorenumberoptional
codeQualitynumberoptional
securityScanneveroptional[REMOVED] PluginQualityMetrics.securityScan was removed in @objectstack/spec 17 (ADR-0049 enforce-or-remove) — the block declared a last-scan date, per-severity vulnerability counts and a passed verdict, and no scanner, registry, installer or UI ever produced or read one, so a plugin could publish passed: true with nothing at all behind it. Delete the key. There is no replacement key: plugin security scanning is not a platform capability, and the scan-result family this block mirrored was retired with it. The sibling quality metrics — testCoverage, documentationScore, codeQuality and conformanceTests — are unchanged. Audit dependencies with a tool built for it (npm audit, pnpm audit, Dependabot, the GitHub Advisory Database, OSV).
conformanceTests{ protocolId: string; passed: boolean; totalTests: integer; passedTests: integer; … }[]optional

Nested Shape: PluginQualityMetrics.conformanceTests[number]

PropertyTypeRequiredDescription
protocolIdstring✅Protocol being tested
passedboolean✅
totalTestsinteger✅
passedTestsinteger✅
lastRunDatestringoptional

PluginRegistryEntry

Properties

PropertyTypeRequiredDescription
idstring✅Plugin identifier (reverse domain notation)
versionstring✅
namestring✅
descriptionstringoptional
readmestringoptional
categoryEnum<'data' | 'integration' | 'ui' | 'analytics' | 'security' | 'automation' | 'ai' | 'utility' | 'driver' | 'gateway' | 'adapter'>optional
tagsstring[]optional
vendor{ id: string; name: string; website?: string; email?: string; … }✅
capabilities{ implements?: object[]; provides?: object[]; requires?: object[]; extensionPoints?: object[]; … }optional
compatibility{ minObjectStackVersion?: string; maxObjectStackVersion?: string; nodeVersion?: string; platforms?: Enum<'linux' | 'darwin' | 'win32' | 'browser'>[] }optional
links{ homepage?: string; repository?: string; documentation?: string; bugs?: string; … }optional
media{ icon?: string; logo?: string; screenshots?: string[]; video?: string }optional
quality{ testCoverage?: number; documentationScore?: number; codeQuality?: number; conformanceTests?: object[] }optional
statistics{ downloads?: integer; downloadsLastMonth?: integer; activeInstallations?: integer; ratings?: object; … }optional
licensestringoptionalSPDX license identifier
pricing{ model: Enum<'free' | 'freemium' | 'paid' | 'enterprise'>; price?: number; currency?: string; billingPeriod?: Enum<'one-time' | 'monthly' | 'yearly'> }optional
publishedAtstringoptional
updatedAtstringoptional
deprecatedbooleanoptional (default: false)
deprecationMessagestringoptional
replacedBystringoptionalPlugin ID that replaces this one
flags{ experimental?: boolean; beta?: boolean; featured?: boolean; verified?: boolean }optional

Nested Shape: PluginRegistryEntry.vendor

PropertyTypeRequiredDescription
idstring✅Vendor identifier (reverse domain)
namestring✅
websitestringoptional
emailstringoptional
verifiedbooleanoptional (default: false)Whether vendor is verified by ObjectStack
trustLevelEnum<'official' | 'verified' | 'community' | 'unverified'>optional (default: "unverified")

Nested Shape: PluginRegistryEntry.capabilities

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: PluginRegistryEntry.quality

PropertyTypeRequiredDescription
testCoveragenumberoptional
documentationScorenumberoptional
codeQualitynumberoptional
securityScanneveroptional[REMOVED] PluginQualityMetrics.securityScan was removed in @objectstack/spec 17 (ADR-0049 enforce-or-remove) — the block declared a last-scan date, per-severity vulnerability counts and a passed verdict, and no scanner, registry, installer or UI ever produced or read one, so a plugin could publish passed: true with nothing at all behind it. Delete the key. There is no replacement key: plugin security scanning is not a platform capability, and the scan-result family this block mirrored was retired with it. The sibling quality metrics — testCoverage, documentationScore, codeQuality and conformanceTests — are unchanged. Audit dependencies with a tool built for it (npm audit, pnpm audit, Dependabot, the GitHub Advisory Database, OSV).
conformanceTests{ protocolId: string; passed: boolean; totalTests: integer; passedTests: integer; … }[]optional

PluginSearchFilters

Properties

PropertyTypeRequiredDescription
querystringoptional
categorystring[]optional
tagsstring[]optional
trustLevelEnum<'official' | 'verified' | 'community' | 'unverified'>[]optional
implementsProtocolsstring[]optional
pricingModelEnum<'free' | 'freemium' | 'paid' | 'enterprise'>[]optional
minRatingnumberoptional
sortByEnum<'relevance' | 'downloads' | 'rating' | 'updated' | 'name'>optional
sortOrderEnum<'asc' | 'desc'>optional (default: "desc")
pageintegeroptional (default: 1)
limitintegeroptional (default: 20)

PluginStatistics

Properties

PropertyTypeRequiredDescription
downloadsintegeroptional (default: 0)
downloadsLastMonthintegeroptional (default: 0)
activeInstallationsintegeroptional (default: 0)
ratings{ average?: number; count?: integer; distribution?: object }optional
starsintegeroptional
dependentsintegeroptional (default: 0)

PluginVendor

Properties

PropertyTypeRequiredDescription
idstring✅Vendor identifier (reverse domain)
namestring✅
websitestringoptional
emailstringoptional
verifiedbooleanoptional (default: false)Whether vendor is verified by ObjectStack
trustLevelEnum<'official' | 'verified' | 'community' | 'unverified'>optional (default: "unverified")

On this page