ObjectStackObjectStack

Metadata Plugin

Metadata Plugin protocol schemas

Metadata Plugin Protocol

Defines the specification for the Metadata Plugin — the central authority

responsible for managing ALL metadata across the ObjectStack platform.

Architecture

The Metadata Plugin consolidates all scattered metadata operations into a single,

cohesive plugin that "takes over" the entire platform's metadata management:


┌──────────────────────────────────────────────────────────────────┐

│                     Metadata Plugin                             │

│                                                                  │

│  ┌──────────────┐  ┌──────────────┐  ┌──────────────────────┐  │

│  │ Type Registry │  │  Loader      │  │ Customization Layer  │  │

│  │ (all types)   │  │  (file/db/s3)│  │ (overlay / merge)    │  │

│  └──────────────┘  └──────────────┘  └──────────────────────┘  │

│                                                                  │

│  ┌──────────────┐  ┌──────────────┐  ┌──────────────────────┐  │

│  │ Persistence  │  │  Query       │  │ Lifecycle            │  │

│  │ (db records) │  │  (search)    │  │ (validate/deploy)    │  │

│  └──────────────┘  └──────────────┘  └──────────────────────┘  │

└──────────────────────────────────────────────────────────────────┘

Alignment

  • Salesforce: Metadata API (deploy, retrieve, describe)

  • ServiceNow: System Dictionary + Metadata API

  • Kubernetes: API Server + CRD Registry

References

  • kernel/metadata-loader.zod.ts — Storage backend protocol

  • kernel/metadata-customization.zod.ts — Overlay/merge protocol

  • system/metadata-persistence.zod.ts — Database record format

  • contracts/metadata-service.ts — Service interface

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

TypeScript Usage

import { MetadataBulkRegisterRequest, MetadataBulkResult, MetadataDependency, MetadataEvent, MetadataPluginConfig, MetadataPluginManifest, MetadataQuery, MetadataQueryResult, MetadataType, MetadataTypeRegistryEntry, MetadataValidationResult } from '@objectstack/spec/kernel';
import type { MetadataBulkRegisterRequest, MetadataBulkResult, MetadataDependency, MetadataEvent, MetadataPluginConfig, MetadataPluginManifest, MetadataQuery, MetadataQueryResult, MetadataType, MetadataTypeRegistryEntry, MetadataValidationResult } from '@objectstack/spec/kernel';

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

MetadataBulkRegisterRequest

Properties

PropertyTypeRequiredDescription
itemsObject[]Items to register
continueOnErrorbooleanContinue if individual item fails
validatebooleanValidate before register

MetadataBulkResult

Properties

PropertyTypeRequiredDescription
totalintegerTotal items processed
succeededintegerSuccessfully processed
failedintegerFailed items
errorsObject[]optionalPer-item errors

MetadataDependency

Properties

PropertyTypeRequiredDescription
sourceTypestringDependent metadata type
sourceNamestringDependent metadata name
targetTypestringReferenced metadata type
targetNamestringReferenced metadata name
kindEnum<'reference' | 'extends' | 'includes' | 'triggers'>How the dependency is formed

MetadataEvent

Properties

PropertyTypeRequiredDescription
eventEnum<'metadata.registered' | 'metadata.updated' | 'metadata.unregistered' | 'metadata.validated' | 'metadata.deployed' | 'metadata.overlay.applied' | 'metadata.overlay.removed' | 'metadata.imported' | 'metadata.exported'>Event type
metadataTypeEnum<'object' | 'field' | 'trigger' | 'validation' | 'hook' | 'view' | 'page' | 'dashboard' | 'app' | 'action' | 'report' | 'flow' | 'workflow' | 'approval' | 'datasource' | 'translation' | 'router' | 'function' | 'service' | 'email_template' | 'permission' | 'profile' | 'role' | 'agent' | 'tool' | 'skill'>Metadata type
namestringMetadata item name
namespacestringoptionalNamespace
packageIdstringoptionalOwning package ID
timestampstringEvent timestamp
actorstringoptionalUser or system that triggered the event
payloadRecord<string, any>optionalEvent-specific payload

MetadataPluginConfig

Properties

PropertyTypeRequiredDescription
storageObjectStorage backend configuration
customizationPoliciesObject[]optionalDefault customization policies per type
mergeStrategyObjectoptionalMerge strategy for package upgrades
additionalTypesObject[]optionalAdditional custom metadata types
enableEventsbooleanEmit metadata change events
validateOnWritebooleanValidate metadata on write
enableVersioningbooleanTrack metadata version history
cacheMaxItemsintegerMax items in memory cache
bootstrapEnum<'eager' | 'lazy' | 'artifact-only'>How metadata is primed at plugin start (eager / lazy / artifact-only)

MetadataPluginManifest

Properties

PropertyTypeRequiredDescription
idstringMetadata plugin ID
namestringPlugin name
versionstringPlugin version
typestringPlugin type
descriptionstringPlugin description
capabilitiesObjectPlugin capabilities
configObjectoptionalPlugin configuration

MetadataQuery

Properties

PropertyTypeRequiredDescription
typesEnum<'object' | 'field' | 'trigger' | 'validation' | 'hook' | 'view' | 'page' | 'dashboard' | 'app' | 'action' | 'report' | 'flow' | 'workflow' | 'approval' | 'datasource' | 'translation' | 'router' | 'function' | 'service' | 'email_template' | 'permission' | 'profile' | 'role' | 'agent' | 'tool' | 'skill'>[]optionalFilter by metadata types
namespacesstring[]optionalFilter by namespaces
packageIdstringoptionalFilter by owning package
searchstringoptionalFull-text search query
scopeEnum<'system' | 'platform' | 'user'>optionalFilter by scope
stateEnum<'draft' | 'active' | 'archived' | 'deprecated'>optionalFilter by lifecycle state
tagsstring[]optionalFilter by tags
sortByEnum<'name' | 'type' | 'updatedAt' | 'createdAt'>Sort field
sortOrderEnum<'asc' | 'desc'>Sort direction
pageintegerPage number
pageSizeintegerItems per page

MetadataQueryResult

Properties

PropertyTypeRequiredDescription
itemsObject[]Matched metadata items
totalintegerTotal matching items
pageintegerCurrent page
pageSizeintegerPage size

MetadataType

Allowed Values

  • object
  • field
  • trigger
  • validation
  • hook
  • view
  • page
  • dashboard
  • app
  • action
  • report
  • flow
  • workflow
  • approval
  • datasource
  • translation
  • router
  • function
  • service
  • email_template
  • permission
  • profile
  • role
  • agent
  • tool
  • skill

MetadataTypeRegistryEntry

Properties

PropertyTypeRequiredDescription
typeEnum<'object' | 'field' | 'trigger' | 'validation' | 'hook' | 'view' | 'page' | 'dashboard' | 'app' | 'action' | 'report' | 'flow' | 'workflow' | 'approval' | 'datasource' | 'translation' | 'router' | 'function' | 'service' | 'email_template' | 'permission' | 'profile' | 'role' | 'agent' | 'tool' | 'skill'>Metadata type identifier
labelstringDisplay label for the metadata type
descriptionstringoptionalDescription of the metadata type
filePatternsstring[]Glob patterns to discover files of this type
supportsOverlaybooleanWhether overlay customization is supported
allowOrgOverridebooleanAllow per-org overlay writes via runtime metadata API
allowRuntimeCreatebooleanAllow runtime creation via API
supportsVersioningbooleanWhether version history is tracked
executionPinnedbooleanTransaction rows reference a specific version_hash; history GC is disabled and getByHash() MUST resolve old hashes (ADR-0009)
loadOrderintegerLoading priority (lower = earlier)
domainEnum<'data' | 'ui' | 'automation' | 'system' | 'security' | 'ai'>Protocol domain

MetadataValidationResult

Properties

PropertyTypeRequiredDescription
validbooleanWhether the metadata is valid
errorsObject[]optionalValidation errors
warningsObject[]optionalValidation warnings

On this page