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, MetadataQuery, MetadataQueryResult, MetadataType, MetadataValidationResult } from '@objectstack/spec/kernel';
import type { MetadataBulkRegisterRequest, MetadataBulkResult, MetadataDependency, MetadataEvent, MetadataQuery, MetadataQueryResult, MetadataType, 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' | 'job' | 'datasource' | 'external_catalog' | '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

MetadataQuery

Properties

PropertyTypeRequiredDescription
typesEnum<'object' | 'field' | 'trigger' | 'validation' | 'hook' | 'view' | 'page' | 'dashboard' | 'app' | 'action' | 'report' | 'flow' | 'job' | 'datasource' | 'external_catalog' | '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
  • job
  • datasource
  • external_catalog
  • translation
  • router
  • function
  • service
  • email_template
  • permission
  • profile
  • role
  • agent
  • tool
  • skill

MetadataValidationResult

Properties

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

On this page