Configuration reference: Front matter
The YAML block at the top of a Markdown page: title, slug, order, the kind and parameters of the piece, and every page setting PATCH …/pages/{id}/metadata takes (SEO, schemaType, layout, audience, …).
Where it is used: Every .md/.mdx file forumulate publish, sync, plan and apply, or the docs importer, reads.
JSON Schema: https://forumulate.com/schemas/2026-12-01/front-matter.json — point your editor at it with "$schema": "https://forumulate.com/schemas/2026-12-01/front-matter.json" (JSON) or # yaml-language-server: $schema=https://forumulate.com/schemas/2026-12-01/front-matter.json (YAML), and check a whole folder with forumulate validate <dir>.
This page is generated from the schema the API validates with; it cannot describe a key the API does not take.
Casing
Every key in a JSON or YAML configuration document (site config, theme, forumulate.yaml, a category) is camelCase, exactly:
primaryColor,footerColumns,headerLinks.primary_colorandPrimaryColorare unknown keys, refused with the camelCase name in the hint. The one exception is two top-level blocks of a version-2 site manifest, which are snake_case:reader_auth(a list of sign-in configurations) andstatus_monitors;readerAuthis a different key there, the one-word shorthandreaderAuth: atlas.Front matter is the exception: a key is read in any casing (
seo_title,seo-title,SeoTitleall meanseoTitle), and the names other tools use (description,sidebar_label,sidebar_position,image) are read as ours.Enum values are lower-case (
"wide","system"), except space types and visibilities, which are upper-case ("DOCS","PUBLIC").Colours are
#rrggbb(or#rgb); lengths that are numbers are CSS pixels.
Keys
Top-level keys and the keys one level inside them. [] marks “each item of a list”.
Key | Type | Required | What it is |
|---|---|---|---|
| string | null | ||
| string | null | On a language twin of a generated API reference page: the language its words are in. Only a twin carrying its own language here is published as a translation (hreflang, sitemap, language switcher); the import sets it on the twins it writes from | |
|
| ||
|
| ||
| object | null | ||
| string | ||
|
| ||
| object | null | ||
| any | string | | ||
| object | null | ||
| string | The collection the page belongs to (a folder does the same). | |
| boolean | null | false turns comments off on THIS page when the space takes comments; null/absent follows the space. | |
| object | null | ||
| string | | ||
| any | string | | ||
| string | null | CSS for THIS piece only, after the space theme so it wins. Sanitised and scoped to the reader exactly like the space | |
| any | string | | ||
| boolean | Skip this file. | |
| string | | ||
| any | string | | ||
| map | The parameters this page’s space type declares. PATCH semantics: the keys you send are merged into the fields already stored, so sending one field leaves the rest alone, and | |
| map | ||
| object | null | ||
| boolean | ||
| boolean | ||
| boolean | ||
| boolean | ||
| boolean | ||
| boolean | ||
| string | An icon name from | |
| string | null | Structured data for this piece, as JSON (object or array of objects). Replaces the automatic markup on this piece (Article/BlogPosting, Event, DiscussionForumPosting/QAPage, the roadmap item’s Article). | |
| string[] | ||
| string | Which kind of page this is, where the space type declares more than one ( | |
|
| ||
| object | ||
| object | ||
| object | ||
| object | ||
| object | ||
| object | ||
| map | ||
|
| yes | |
| object | ||
| integer | null | ||
| object | ||
| object | ||
| object | ||
| object | ||
| boolean |
| |
| string | The page’s language, when the file name does not say. | |
| map | Any other key | |
| string | null | ||
| map | null | ||
|
| ||
|
| ||
| any | string | | ||
| boolean | ||
| boolean | ||
| string | null | og:description / twitter:description. | |
| string | null | og:title / twitter:title. | |
|
| Whether THIS page carries the "on this page" rail: | |
| number | Position among siblings (lower first). | |
| string | null | ||
| boolean | ||
| object | null | ||
| map | The piece’s declared parameters (a role’s location, a document’s version). | |
| string | null | The slug of the page this one nests under. | |
| string | null | Which kind of piece this is, where the space holds more than one. | |
| string | string[] | Old addresses that redirect here. | |
| string[] | null | ||
| any | | ||
| boolean | Leave this page out of the reader search and the site search. It is still published, linked and in the sitemap; use | |
| map | Markdown per named slot, for a multi-slot page type. | |
| string | ||
| string | ||
| string | | The og:image / twitter:image for this piece, separate from its cover. Wins over the cover and over the generated social card. | |
| string | The address segment. Defaults to the file name. | |
| object | null | This piece’s badge on its generated social card, over the space’s | |
| string | null | ||
| any | string | | ||
| string[] | ||
|
| ||
| object | null | A partial theme for this piece — colours, palettes, fonts, typography, colorScheme, components, contentWidth, layout, motion, and its OWN type’s namespace ( | |
| object | A slice of the theme for THIS page only: | |
| object | ||
| object | ||
| string | The page title. Defaults to the first | |
|
| ||
| object | null | ||
|
|
|
Common mistakes
Each of these is answered with a did-you-mean by the API’s 422 and by forumulate validate.
Where | You wrote | We read | Why |
|---|---|---|---|
top level |
|
| Read as ours: another tool’s name for the same field. |
top level |
|
| Read as ours: another tool’s name for the same field. |
top level |
|
| Read as ours: another tool’s name for the same field. |
top level |
|
| Read as ours: another tool’s name for the same field. |
top level |
|
| Read as ours: another tool’s name for the same field. |
top level |
|
| Read as ours: another tool’s name for the same field. |
top level |
|
| Read as ours: another tool’s name for the same field. |
top level |
|
| Read as ours: another tool’s name for the same field. |
top level |
|
| Read as ours: another tool’s name for the same field. |
top level |
|
| Read as ours: another tool’s name for the same field. |
top level |
|
| Read as ours: another tool’s name for the same field. |
top level |
|
| Read as ours: another tool’s name for the same field. |
top level |
|
| Read as ours: another tool’s name for the same field. |
top level |
|
| Read as ours: another tool’s name for the same field. |
top level |
|
| Read as ours: another tool’s name for the same field. |
top level |
|
| Read as ours: another tool’s name for the same field. |
top level |
|
| Read as ours: another tool’s name for the same field. |
top level |
|
| Read as ours: another tool’s name for the same field. |
top level |
|
| Read as ours: another tool’s name for the same field. |
top level |
|
| Read as ours: another tool’s name for the same field. |
top level |
|
| Read as ours: another tool’s name for the same field. |
top level |
|
| Read as ours: another tool’s name for the same field. |
top level |
|
| Read as ours: another tool’s name for the same field. |