Plugin Registry — Kernel Protocol reference Plugin Registry Protocol — Defines the schema for the plugin discovery and registry system.
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
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);
Property Type Required Description pluginId string✅ version stringoptional Defaults to latest config Record<string, any>optional autoUpdate booleanoptional (default: false) options { skipDependencies?: boolean; force?: boolean; target?: Enum<'system' | 'space' | 'user'> }optional
Property Type Required Description testCoverage numberoptional documentationScore numberoptional codeQuality numberoptional securityScan neveroptional [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
Property Type Required Description protocolId string✅ Protocol being tested passed boolean✅ totalTests integer✅ passedTests integer✅ lastRunDate stringoptional
Property Type Required Description id string✅ Plugin identifier (reverse domain notation) version string✅ name string✅ description stringoptional readme stringoptional category Enum<'data' | 'integration' | 'ui' | 'analytics' | 'security' | 'automation' | 'ai' | 'utility' | 'driver' | 'gateway' | 'adapter'>optional tags string[]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 license stringoptional SPDX license identifier pricing { model: Enum<'free' | 'freemium' | 'paid' | 'enterprise'>; price?: number; currency?: string; billingPeriod?: Enum<'one-time' | 'monthly' | 'yearly'> }optional publishedAt stringoptional updatedAt stringoptional deprecated booleanoptional (default: false) deprecationMessage stringoptional replacedBy stringoptional Plugin ID that replaces this one flags { experimental?: boolean; beta?: boolean; featured?: boolean; verified?: boolean }optional
Property Type Required Description id string✅ Vendor identifier (reverse domain) name string✅ website stringoptional email stringoptional verified booleanoptional (default: false) Whether vendor is verified by ObjectStack trustLevel Enum<'official' | 'verified' | 'community' | 'unverified'>optional (default: "unverified")
Property Type Required Description implements { protocol: object; conformance?: Enum<'full' | 'partial' | 'experimental' | 'deprecated'>; implementedFeatures?: string[]; features?: object[]; … }[]optional List of protocols this plugin conforms to provides { id: string; name: string; description?: string; version: object; … }[]optional Services/APIs this plugin offers to others requires { pluginId: string; version: string; optional?: boolean; reason?: string; … }[]optional Required plugins and their capabilities extensionPoints { id: string; name: string; description?: string; type: Enum<'action' | 'hook' | 'widget' | 'provider' | 'transformer' | 'validator' | 'decorator'>; … }[]optional Points where other plugins can extend this plugin extensions { targetPluginId: string; extensionPointId: string; implementation: string; priority?: integer }[]optional Extensions contributed to other plugins
Property Type Required Description testCoverage numberoptional documentationScore numberoptional codeQuality numberoptional securityScan neveroptional [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
Property Type Required Description query stringoptional category string[]optional tags string[]optional trustLevel Enum<'official' | 'verified' | 'community' | 'unverified'>[]optional implementsProtocols string[]optional pricingModel Enum<'free' | 'freemium' | 'paid' | 'enterprise'>[]optional minRating numberoptional sortBy Enum<'relevance' | 'downloads' | 'rating' | 'updated' | 'name'>optional sortOrder Enum<'asc' | 'desc'>optional (default: "desc") page integeroptional (default: 1) limit integeroptional (default: 20)
Property Type Required Description downloads integeroptional (default: 0) downloadsLastMonth integeroptional (default: 0) activeInstallations integeroptional (default: 0) ratings { average?: number; count?: integer; distribution?: object }optional stars integeroptional dependents integeroptional (default: 0)
Property Type Required Description id string✅ Vendor identifier (reverse domain) name string✅ website stringoptional email stringoptional verified booleanoptional (default: false) Whether vendor is verified by ObjectStack trustLevel Enum<'official' | 'verified' | 'community' | 'unverified'>optional (default: "unverified")