# Theme manifest (`theme.json`) Validated by `zThemeManifest` (`@mozaik/kit/validate`). `tier: "full"` kits declare `runtime` (`platform` = first-party compiled-in; `sandbox` = sealed, refused until P2); `tier: "skin"` themes MUST `extends` a parent kit. The `agent` block is required, like extensions. Machine-readable: [/schemas/theme.schema.json](/schemas/theme.schema.json). ## Fields | field | type | required | notes | |---|---|---|---| | `id` | string (/^[a-z][a-z0-9-]*\.[a-z][a-z0-9-]*$/) | yes | | | `version` | string (/^\d+\.\d+\.\d+$/) | yes | | | `contract` | const 1 | yes | | | `tier` | "full" \| "skin" | yes | | | `runtime` | "platform" \| "sandbox" | no | | | `extends` | string (/^[a-z][a-z0-9-]*\.[a-z][a-z0-9-]*@\d+$/) | no | | | `labelTR` | string (≤40 chars) | yes | | | `descriptionTR` | string (≤280 chars) | yes | | | `tags` | array (≤8) | no | | | `catalogSize` | "small" \| "medium" \| "large" | no | | | `fonts` | array (≤4) | no | | | `presets` | array (≤8) | no | | | `defaultPreset` | object | no | | | ` colorway` | string | no | | | ` typeset` | string | no | | | `optional` | array<"Split" \| "Placeholder" \| "CollectionCard" \| "Breadcrumbs" \| "Textarea" \| "Checkbox" \| "Accordion" \| "KeyValueList" \| "Divider" \| "Logo" \| "Notice" \| "Tabs" \| "Dialog" \| "Pagination" \| "Table" \| "Video" \| "Marquee" \| "Countdown"> | no | | | `hooks` | array (≤16) | no | | | `sections` | array (≤2) | no | | | `publisher` | object | yes | | | ` name` | string (≤80 chars) | yes | | | ` url` | string | no | | | ` supportEmail` | string (/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/) | no | | | ` supportUrl` | string | no | | | `agent` | object | yes | | | ` summaryTR` | string (≤400 chars) | yes | | | ` authoringDocs` | string | no | | | ` notes` | array (≤12) | no | | | `migrations` | string | no | |