CMMF 1.1.0 specification
CMMF 1.1.0 specification for CMMF 1.1.0. Authoritative specification text.
1. Overview
Section titled “1. Overview”The Content Model Master Format (CMMF) is a CMS-agnostic schema definition language designed to:
- define content models in a portable, human-readable format
- capture modelling intent, not just implementation structure
- support translation into multiple CMS platforms
- enable tooling such as generators, validators, and diagram builders
2. Core Principles
Section titled “2. Core Principles”Intent over implementation
Section titled “Intent over implementation”The format describes what the model means, not how a specific CMS stores or renders it.
Explicit relationships
Section titled “Explicit relationships”References and composition must be described directly, including relationship intent where relevant.
Separation of concerns
Section titled “Separation of concerns”The core schema defines structure and intent. CMS-specific choices belong in a translation layer.
Deterministic structure
Section titled “Deterministic structure”The same CMMF input should produce the same structural interpretation every time.
3. Recommended File Structure
Section titled “3. Recommended File Structure”/examples manifest.yaml /models page.yaml article.yaml person.yaml4. Manifest Specification
Section titled “4. Manifest Specification”Example:
specVersion: "1.1.0"namespace: example.projectmodelsPath: ./modelsdefaults: required: false localisation: falseManifest Fields
Section titled “Manifest Fields”| Field | Type | Required | Description |
|---|---|---|---|
specVersion |
string | yes | Semver spec version. In CMMF 1.1.0 this must be "1.1.0". |
namespace |
string | yes | Unique namespace for the model set. |
modelsPath |
string | no | Relative path to model files. |
defaults |
object | no | Default values applied by tooling when omitted in model files. |
Legacy compatibility note:
- pre-semver manifests may use
specVersion: 1to indicate the original v1 release - semver-based manifests should use a quoted string such as
"1.1.0"
Supported Defaults in 1.1.0
Section titled “Supported Defaults in 1.1.0”| Field | Type | Description |
|---|---|---|
required |
boolean | Default field requiredness. |
localisation |
boolean | Default field localisation behaviour. |
5. Model Specification
Section titled “5. Model Specification”Example:
id: pagename: Pagekind: entryfields: []Required Model Fields
Section titled “Required Model Fields”| Field | Description |
|---|---|
id |
Unique identifier for the model. |
name |
Human-readable model name. |
kind |
Model kind. |
fields |
Array of field definitions. |
Optional Model Fields
Section titled “Optional Model Fields”descriptiontagslocalisationsingletoneditorialgovernancetranslationHints
6. Model Kinds
Section titled “6. Model Kinds”| Kind | Meaning |
|---|---|
entry |
Standalone content. |
component |
Reusable composable block. |
object |
Embedded structure. |
taxonomy |
Classification model. |
settings |
Singleton or global configuration. |
7. Field Specification
Section titled “7. Field Specification”Example:
- id: title type: string required: trueRequired Field Properties
Section titled “Required Field Properties”idtype
Optional Field Properties
Section titled “Optional Field Properties”namedescriptionrequiredlocalisationdefaultlistvalidationseditorialrelationobjectTypetargetsvaluesrichTextConfigtranslationHints
8. Canonical Types
Section titled “8. Canonical Types”stringtextnumberbooleandatedatetimeslugenumrichTextassetjsonobjectreference
9. Type Rules
Section titled “9. Type Rules”Object Fields
Section titled “Object Fields”Object fields represent embedded structures.
type: objectobjectType: seo-metadataRequirements:
typemust beobjectobjectTypemust be present
Reference Fields
Section titled “Reference Fields”Reference fields represent links to one or more target models.
type: referencetargets: [article]relation: cardinality: manyRequirements:
typemust bereferencetargetsmust be presentrelation.cardinalityis recommended
Enum Fields
Section titled “Enum Fields”Enum fields constrain values to a fixed set of allowed strings.
type: enumvalues: [draft, review, published]Requirements:
typemust beenumvaluesmust be present
Rich Text Fields
Section titled “Rich Text Fields”Rich text fields represent formatted editorial content with optional capability constraints.
type: richTextrichTextConfig: marks: [bold, italic] blocks: [paragraph, heading-1, quote] embeds: - kind: asset - kind: reference targets: [callout]Requirements:
richTextConfigis only valid whentypeisrichText- omitted
richTextConfigmeans translator-defined default rich text capabilities marksandblocksare optional allowlists of translator-recognised capability tokensembedsis an optional allowlist of supported embed definitions- embed
kindmust beassetorreference referenceembeds must includetargets
10. Relationship Specification
Section titled “10. Relationship Specification”Example:
relation: cardinality: many ordered: true uniqueItems: true ownership: containedRelationship Fields
Section titled “Relationship Fields”| Field | Type | Description |
|---|---|---|
cardinality |
enum | one or many. |
ordered |
boolean | Whether item order matters. |
uniqueItems |
boolean | Whether duplicates are allowed. |
minItems |
number | Minimum allowed items. |
maxItems |
number | Maximum allowed items. |
ownership |
enum | linked or contained. |
11. List Handling
Section titled “11. List Handling”| Scenario | Approach |
|---|---|
| Primitive lists | list: true |
| Object lists | list: true |
| Reference lists | relation.cardinality: many |
12. Validation Specification
Section titled “12. Validation Specification”Example:
validations: minLength: 5 maxLength: 100Supported Validation Keys in 1.1.0
Section titled “Supported Validation Keys in 1.1.0”minLengthmaxLengthregexminmaxintegerOnlyminItemsmaxItemsuniqueItemsmimeTypesdimensionsfileSize
Validation semantics are intentionally lightweight in 1.1.0. CMS translators may need to map these into platform-specific constraints. See the deeper discussion in docs/validations.md.
13. Editorial Metadata
Section titled “13. Editorial Metadata”Model-level example:
editorial: labelField: title preview: title: title description: summary image: heroImageField-level example:
editorial: helpText: Used in URLsEditorial metadata is non-structural and supports authoring and presentation concerns.
14. Governance Metadata
Section titled “14. Governance Metadata”Example:
governance: owner: platform-team status: active maturity: stableGovernance metadata is optional and is intended for operational ownership and lifecycle signalling.
15. Translation Hints
Section titled “15. Translation Hints”Example:
translationHints: preferredRepresentation: embeddedTranslation hints are non-authoritative. They inform downstream translators without changing the core meaning of the schema.
16. Rules and Constraints
Section titled “16. Rules and Constraints”Model and field IDs:
- must be unique within their scope
- must be lowercase
- must use only alphanumeric characters,
_, or-
Object Fields
Section titled “Object Fields”- must include
objectType
Reference Fields
Section titled “Reference Fields”- must include
targets - should include
relation.cardinality
Enum Fields
Section titled “Enum Fields”- must include
values
Rich Text Fields
Section titled “Rich Text Fields”richTextConfigmust only appear onrichTextfieldsrichTextConfig.embeds[*].targetsmust be present when embedkindisreference
17. Non-Goals for 1.1.0
Section titled “17. Non-Goals for 1.1.0”The following are explicitly out of scope in 1.1.0:
- permissions
- workflows
- environments
- CMS UI configuration
- custom logic
- computed fields
18. Translation Contract Guidance
Section titled “18. Translation Contract Guidance”Translation is intentionally separate from the core specification because it is not fully deterministic across CMS platforms.
At minimum, a translation contract should define:
- the CMMF input shape
- the target platform schema output
- a decisions log describing translator choices
- which translation decisions are fixed versus configurable
Examples of translator variation include:
- translating contained references into embedded objects
- translating contained references into separate content types
- applying strict versus optimised output strategies