The manifest is just a file in your repo —
hiveku.cms.json at the root. You can edit it from the CMS panel’s Collection Manager, ask the AI to update it, or open it directly in the code editor.File Location
hiveku.cms.json. The CMS panel won’t pick it up from a subdirectory.
Top-Level Schema
| Key | Type | Required | Description |
|---|---|---|---|
version | number | Yes | Schema version. Always 1 for the current format. Bumped if a future release introduces breaking changes. |
collections | array | Yes | The list of collections. Order doesn’t affect behavior but does affect display order in the CMS panel’s collection picker. |
webhooks | array | No | Outbound webhooks fired when entries change. Leave as [] if not used. |
Per-Collection Schema
Each entry incollections looks like:
| Key | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Stable identifier used in references, AI tools, and API URLs. Lowercase, valid identifier characters only. Must be unique across the manifest. |
name | string | Yes | Human-readable label shown in the CMS panel’s collection picker. |
path | string | Yes | Directory (relative to repo root) where entries are stored. By convention content/<id> or content/<plural-id>. |
format | "mdx" or "json" | Yes | Storage format. mdx for content with a long-form body, json for purely structured data. |
slugFrom | "filename" or "field:<name>" | No | How to derive the slug. "filename" (default) uses the file’s basename; "field:title" derives from a field with auto-generated kebab-case. |
fields | array | Yes | Field definitions. See Field Types. |
routePattern | string | No | URL pattern using {slug} and other field placeholders. Leave off for collections that aren’t directly routed. |
defaultSort | string | No | Default sort for the entry list, e.g. "publishedAt desc", "title asc". |
singleton | boolean | No | Set true for collections that should only ever have one entry (site settings, homepage hero). The list view becomes a direct edit. |
Validation Rules
The CMS panel and the AI tools validate the manifest before saving. Common rules:- Unique
idper collection — two collections can’t share an ID. - Valid identifiers —
idshould match[a-z][a-z0-9-]*. Lowercase, no spaces, hyphens allowed. - Path must be a relative directory — no absolute paths, no
..traversal. - Exactly one
isBody: truefield per MDX collection — the body slot is required for MDX format. JSON collections must not have anyisBodyfields. - Field names are unique within a collection — no duplicate
namevalues inside a single collection’sfieldsarray. - References point at real collection IDs — a
referencefield’scollectionvalue must match another collection’sidin the same manifest. slugFrom: "field:<name>"requires a string field — and that field must berequired: true.
Full Example
Here’s a manifest covering a real site with blog posts, authors, products, and testimonials:Webhooks
Webhooks fire when CMS entries change. Each webhook entry takes:| Key | Type | Description |
|---|---|---|
id | string | Unique webhook identifier |
url | string | The endpoint to POST to |
events | array | Subset of entry.created, entry.updated, entry.deleted, manifest.updated |
collections | array | Which collection IDs to listen to. Omit or use ["*"] for all |
secret | string | Optional shared secret; included as x-hiveku-signature HMAC header |
Editing the Manifest
- From the AI
- From the CMS Panel
- From the Code Editor
Just describe what you want:The AI reads the manifest, proposes the addition, and saves it after you confirm.
Versioning
Every edit tohiveku.cms.json is versioned the same way as any other file in your project, through the builder_code_versions system. Open the version history drawer for the manifest from the code editor to roll back schema changes.
What’s Next?
Field Types
Every supported field type with examples
Collections
Naming, format choice, and reusable patterns
Add a Collection
Three ways to add a new collection
Initialize Your CMS
Scaffold a manifest from scratch