Meridian handbook
ReferenceConfiguration

Schema files

Every key of a content type file (config/schema/<type>.yaml), of a field definition, and of the shared field groups (schema/_shared.yaml), shared blocks (blocks/_index.yaml) and CRM and enquiry custom field files that use the same field grammar.

Content types are YAML files under config/schema/, one type per file (a type may also be split across several files, and a site may add its own under config/sites/<key>/schema/). Every place that declares fields uses the same field grammar: types, shared field groups, blocks, and the CRM’s custom fields. Content modelling explains types and fields; this page lists every key.

key: walk
label: { en-GB: Walk }
plural: { en-GB: Walks }
icon: footprints
searchable: true
fields:
  - name: title
    type: text
    required: true
  - name: slug
    type: slug
    required: true
  - name: distance
    type: number
    index: true
  - name: route
    type: geo
  - use: contact
groups:
  - key: details
    label: { en-GB: Details }
    fields: [distance, route]

Every type, field, group and block carries a stable id. Leave it out when you write the file and run engine-dmo check --fix, which writes each missing id in place and keeps your comments; check without --fix reports a missing id as an error. engine-dmo dev type add, dev field add, dev field set, dev field rename and dev group add change these files safely and write ids; engine-dmo describe type <key> shows a type as the engine resolved it; engine-dmo describe fieldtypes lists every field type with its parameters.

The type file

KeyTypeDefaultMeaning
keystringRequiredThe type’s key. Lower case; used in routes, templates and the API
idstringWritten for youThe type’s stable id. Written by engine-dmo check --fix; never write or change it by hand
extendsstringInstead of key: a core type (page, article, event, guide, collection, and in engine-dmo listing and area) this file adds fields to
labelmap of stringsThe type’s name per locale
pluralmap of stringsIts plural per locale
iconstringThe admin icon name
localisablebooleantrueDocuments of this type have per-locale versions
singletonbooleanfalseThe type has one document per site, such as site settings
searchablebooleanfalsePublished documents are indexed for site search
templatestring<type>/entry.htmlThe template an entry renders with
uristring or mapA URI pattern the type carries itself, where it is not routed in routes.yaml
siteslist of stringsEvery siteThe sites the type is offered on
ordering.fieldstringThe field index pages order by
ordering.directionstringasc or desc
fieldslistRequiredThe fields, in editor order (below)
groupslist[]Tabs or sections of the editor: key, label, the fields they hold and collapsed
validationlist[]Cross-field rules: rule (an expression), message per locale, fields the message shows against, severity (error or warning) and on (save or publish)
member_editableobjectWhich fields members may edit in the portal, by tier, and whether their changes need review (engine-dmo)
structured_datamapThe schema.org type and property mapping for the type’s JSON-LD
embedanyHow the type is offered to embeddable widgets
revisionsanycontent.revisionsThe type’s revision retention, overriding the install’s key by key
variants.defaultstringThe default entry variant
variants.optionslistEntry variants: alternative editor and template layouts of the same type

A field

KeyTypeDefaultMeaning
namestringRequiredThe field’s handle, used in templates and the API. Unique in its type
idstringWritten for youThe field’s stable id, which keeps its values through a rename
typestringRequiredThe field type: address, asset, blocks, boolean, date, datetime, form, geo, geo_shape, link, money, number, opening_hours, phone, portable_text, recurrence, relation, repeater, select, seo, slug, text or video
usestringInstead of name and type: include a field group from _shared.yaml
aliaseslist of strings[]Old handles still answered after a rename. engine-dmo schema alias lists and retires them
labelmap of stringsThe label per locale
helpmap of stringsHelp text per locale
requiredbooleanfalseA value is needed to publish
required_instring or listsourceWhere required applies: source, all, or a list of locale codes
required_whenstringAn expression under which the field is required
visible_whenstringAn expression under which the editor shows the field
recommendedbooleanfalseThe editor flags an empty value without blocking publishing
indexbooleanfalseProjected for listing, filtering and sorting
uniquebooleanfalseNo two documents of the type share a value
protectedbooleanfalseAny change to the field’s definition is a destructive schema change needing approval
defaultanyThe value a new document starts with
translatestringThe field type’s default (text and link are locale; number, geo and phone are none)How values vary by locale: locale (each locale its own), language (shared across locales of one language), group (shared within a locale group) or none (one value for all)
translatablebooleanShorthand: true is translate: locale, false is translate: none
structurestringFor a container field: shared (one structure, per-locale text inside) or per_locale
fallbackstringWhat shows where a locale has no value: inherit (the fallback locale’s) or empty
machine_translatestringallowallow or forbid AI translation drafts for this field
summary_ofstringThe field this text field summarises, which offers AI summarisation
site_overridablebooleanfalseA site may set its own value of a shared document’s field
personalbooleanfalseCRM person fields only: personal data, included in a subject access export and cleared by an erasure
fieldslistChild fields, for a repeater
blockslistThe blocks a blocks field offers: each key, label, description, item_label and fields, or use of a shared block
optionslistA select field’s options: strings, or objects with their own ids
Any other keyA parameter of the field’s type, such as max, multiline, to or accept, checked against that type’s parameters

The parameters of the asset, link and video types (accept, alt, aspect, caption, focal, min_width, max_size, orientation, upload, upload_tags, tags, kinds, attributes, rel, styles, text, sources, hosts, poster, captions, transcript) are listed with their field types in Fields.

schema/_shared.yaml

Named field groups any field list includes with - use: <group>.

field_groups:
  contact:
    - name: phone
      type: phone
    - name: website
      type: link
KeyTypeMeaning
field_groups.<group>list of fieldsThe group’s fields, with the field keys above

blocks/_index.yaml

Shared block definitions a blocks field includes with - use: <block>.

KeyTypeMeaning
blocks[].keystringThe block’s key; its template is blocks/<key>.html
blocks[].idstringIts stable id, written for you
blocks[].labelmap of stringsIts name per locale
blocks[].descriptionmap of stringsWhat it is for, per locale
blocks[].item_labelstringThe field whose value labels an item in the editor
blocks[].fieldslist of fieldsIts fields

crm/organisation.yaml, crm/person.yaml and portal/enquiries.yaml

engine-dmo

This feature is part of the DMO bundle (engine-dmo).

Custom fields on CRM organisations and people, and the fields a partner keeps against an enquiry in the portal. Each file has one key, fields, a list of field definitions with the keys above, limited to the field types the CRM supports; engine-dmo check names the allowed types if you use another. engine-dmo dev field add organisation <name> adds one with its id.

KeyTypeMeaning
fieldslist of fieldsThe custom fields