Extension manifest

Every extension is described by ONE manifest validated by zExtensionManifest (packages/core/src/extensions/manifest.ts). The taxonomy is closed: everything an extension can touch is a field here, and nothing else exists. First-party manifests are TypeScript objects validated at test time; configSchema is generated from the registry's Zod via z.toJSONSchema.

Runtime is a declared dependency (ADR 0026 §2): platform = compiled into Mozaik's workers (first-party only — the schema refuses it for any other publisher); sandbox = sealed store-scoped worker (lands at P1; extension.install refuses it until then); external = standing service via webhooks (M11). Sync/async picks the interface contract, never the runtime.

The machine-readable schema: /schemas/manifest.schema.json.

Fields

fieldtyperequirednotes
idstring (/^[a-z0-9-]+\.[a-z0-9-]+$/)yes
versionstring (/^\d+\.\d+\.\d+$/)yes
publisherstring (≤60 chars)yes
labelTRstring (≤60 chars)yes
descriptionTRstring (≤200 chars)yes
runtime"platform" | "sandbox" | "external"yes
scopesarray<string (/^[a-z:_-]+$/, ≤40 chars)> (≤10)yes
piiobjectno
buyerarray<"name" | "email" | "phone" | "address" | "city" | "ip"> (≤6)yes
purposeTRstring (≤200 chars)yes
providerobject | object | object | object | object | object | objectno
configSchemaobjectyes
secretsarray<object> (≤8)no
webhooksarray<object> (≤4)no
jobsarray<object> (≤3)no
mailarray<object> (≤5)no
eventsarray<object> (≤5)no
uiobjectno
settingsFormobjectno
fieldLabelsTRobjectyes
fieldHintsTRobjectno
widgetHintsobjectno
hiddenarray<string (/^\/[a-zA-Z0-9_/]+$/, ≤80 chars)> (≤10)no
orderarray<string (/^\/[a-zA-Z0-9_/]+$/, ≤80 chars)> (≤20)no
selectOptionsobjectno
panelsarray<object> (≤4)no
actionsarray<object> (≤3)no
pagesarray<object> (≤3)no
themeSectionsarray<object> (≤3)no
cspobjectno
scriptSrcarray<string (/^https:\/\/[a-z0-9.-]+$/, ≤120 chars)> (≤4)no
frameSrcarray<string (/^https:\/\/[a-z0-9.-]+$/, ≤120 chars)> (≤4)no
connectSrcarray<string (/^https:\/\/[a-z0-9.-]+$/, ≤120 chars)> (≤4)no
formActionarray<string (/^https:\/\/[a-z0-9.-]+$/, ≤120 chars)> (≤4)no

Provider kinds

The provider block is a discriminated union on kind:

Generated from the live platform registries at build time — reference pages cannot go stale. Markdown variant: /reference/manifest.md