ObjectStackObjectStack

Manifest

Manifest protocol schemas

Source: packages/spec/src/kernel/manifest.zod.ts

TypeScript Usage

import { ManifestSchema, ManifestPermissionsSchema, PluginEnginesSchema, PluginIntegritySchema, PluginPackagingSchema, PluginPermissionsSchema, PluginRuntimeSchema } from '@objectstack/spec/kernel';
import type { ManifestPermissions, PluginEngines, PluginIntegrity, PluginPackaging, PluginPermissions, PluginRuntime } from '@objectstack/spec/kernel';

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

Manifest

Properties

PropertyTypeRequiredDescription
idstringUnique package identifier (reverse domain style)
namespacestringoptionalShort namespace identifier; also the mandatory prefix of every object name (e.g. "todo" → object names "todo_task", "todo_project")
defaultDatasourcestringoptionalDefault datasource for all objects in this package
versionstringPackage version (semantic versioning)
typeEnum<'plugin' | 'ui' | 'driver' | 'server' | 'app' | 'theme' | 'agent' | 'objectql' | 'module' | 'gateway' | 'adapter'>Type of package
scopeEnum<'cloud' | 'system' | 'project'>optionalDeployment scope: cloud | system | project
namestringHuman-readable package name
descriptionstringoptionalPackage description
permissionsstring[] | { services?: string[]; hooks?: string[]; network?: string[]; fs?: string[] }optionalRequired permissions: legacy string[] or structured plugin block (ADR-0025 §3.2)
objectsstring[]optionalGlob patterns for ObjectQL schemas files
datasourcesstring[]optionalGlob patterns for Datasource definitions
dependenciesRecord<string, string>optionalPackage dependencies
configuration{ title?: string; properties: Record<string, object> }optionalPlugin configuration settings
contributes{ kinds?: object[]; events?: string[]; menus?: Record<string, object[]>; themes?: object[]; … }optionalPlatform contributions
data{ object: string; externalId?: string | string[]; mode?: Enum<'insert' | 'update' | 'upsert' | 'replace' | 'ignore'>; env?: Enum<'prod' | 'dev' | 'test'>[]; … }[]optionalInitial seed data (prefer top-level data field)
capabilities{ implements?: object[]; provides?: object[]; requires?: object[]; extensionPoints?: object[]; … }optionalPlugin capability declarations for interoperability
extensionsRecord<string, any>optionalExtension points and contributions
navigationContributions{ app: string; group?: string; priority?: integer; items: (object | … +8 more)[] }[]optionalNavigation items this package contributes into apps owned by other packages
loadingneveroptional[REMOVED] manifest.loading was removed in @objectstack/spec 17.0.0 (#4914, ADR-0049 enforce-or-remove) — the entire block (strategy, preload, codeSplitting, dynamicImport, initialization, dependencyResolution, hotReload, caching, sandboxing, monitoring) had no runtime reader in any repo, so authoring it configured nothing. Delete the key. Plugins are composed at boot — defineStack registers them and the kernel runs init then start in an order topologically resolved from each composed plugin's own dependencies / optionalDependencies (resolvePluginOrder); the set is fixed until the process restarts. ⚠️ loading.sandboxing in particular never isolated anything: it did not run plugins in a process, vm, iframe or web-worker, and allowedServices gated no call. If you were relying on it for isolation, you had none — use the plugin trust tier (manifest.runtime) and the permission declarations, which are enforced.
engine{ objectstack: string }optionalPlatform compatibility requirements (legacy; superseded by engines)
engines{ platform?: string; protocol?: string }optionalPlugin compatibility ranges (ADR-0025 §3.2; supersedes engine)
runtimeEnum<'node' | 'sandbox' | 'worker'>optionalPlugin trust tier (ADR-0025 §3.6)
packagingEnum<'bundled' | 'manifest-deps'>optionalDependency packaging strategy (ADR-0025 §3.3)
integrityRecord<string, string>optionalPer-file content digests of the plugin artifact (ADR-0025 §3.2)

ManifestPermissions

Union Options

This schema accepts one of the following structures:

Option 1

Type: string[]


Option 2

Structured plugin permission grants (ADR-0025 §3.2)

Properties

PropertyTypeRequiredDescription
servicesstring[]optionalPlatform services the plugin may resolve (e.g. "object", "http")
hooksstring[]optionalLifecycle hooks the plugin may register (e.g. "record.beforeInsert")
networkstring[]optionalNetwork hosts the plugin may reach (e.g. "api.acme.com")
fsstring[]optionalFilesystem paths the plugin may access


PluginEngines

Plugin compatibility ranges (ADR-0025 §3.2)

Properties

PropertyTypeRequiredDescription
platformstringoptionalObjectStack platform release range (SemVer, e.g. ">=4.0 <5")
protocolstringoptionalRuntime/metadata protocol range, checked first (ADR §3.10 #3)

PluginIntegrity

Per-file content digests of the plugin artifact (ADR-0025 §3.2)

Type: Record<string, string>


PluginPackaging

Dependency packaging strategy (ADR-0025 §3.3)

Allowed Values

  • bundled
  • manifest-deps

PluginPermissions

Structured plugin permission grants (ADR-0025 §3.2)

Properties

PropertyTypeRequiredDescription
servicesstring[]optionalPlatform services the plugin may resolve (e.g. "object", "http")
hooksstring[]optionalLifecycle hooks the plugin may register (e.g. "record.beforeInsert")
networkstring[]optionalNetwork hosts the plugin may reach (e.g. "api.acme.com")
fsstring[]optionalFilesystem paths the plugin may access

PluginRuntime

Plugin trust tier (ADR-0025 §3.6)

Allowed Values

  • node
  • sandbox
  • worker

On this page