Frontmatter

Every markdown file starts with YAML frontmatter:

---
title: Page Title
date: 2025-01-01
author: Your Name
lead: A short description for listings and previews.
tags:
  - tag1
  - tag2
menu:
  visible: true
  order: 1
template: default
---

Available Fields

FieldDescriptionRequired
titlePage titleYes
datePublication dateNo
authorAuthor nameNo
leadShort excerpt for listingsNo
tagsList of tagsNo
categories, …A configured taxonomy’s terms, a single value or a list; the singular spelling (category:) works too No
menu.visibleShow in navigationNo
menu.orderSort order in menuNo
templateTemplate to useNo
process.markdownEnable/disable markdown rendering (default: true)No

The process.markdown field is covered in detail under Processing Control.

How values are typed

Frontmatter follows YAML 1.2. An unquoted value that looks like a number is a number: 01234 is the integer 1234, and 007 is 7, so a postal code, a product code, or anything else that must keep its leading zeros needs quotes: zip: "01234". Dates such as 2026-12-31 and the words yes and no are plain strings; only true and false are booleans. A field Accent CMS reads as text, such as title or author, accepts an unquoted number or true as the text you wrote, so version: 1.0 stays 1.0. When a value cannot be read, the error names the line and column.

A key written twice fails the parse, and so do two keys that differ only in quoting, such as 1: beside "1":. YAML reads them as different keys that would land in the same field.

When Accent CMS rewrites a page’s frontmatter (an admin save, accent content update-frontmatter), it writes the values it read: a quoted number stays quoted, a plain date stays plain, and multi-line text keeps its block style.

It also rewrites only the fields that changed. Comments, blank lines, and the order you put the keys in are left exactly as they are, so you can annotate a page’s frontmatter and keep those notes through any number of edits. Writing a value identical to the one already there changes nothing on disk.

Field names must be printable text. A name containing a control character other than tab (a line break, DEL, or a C1 control) or the non-characters U+FFFE and U+FFFF is refused by every write path – the admin editor, the MCP tools, and the CLI – before the page is read: accent content update-frontmatter --set and --remove exit with the key named, and the MCP tools return an invalid-params error.

A field name may contain [, ], or *. Every write path treats such a name as text: you can add, change, remove, and rename the field like any other. A . in a field name still nests, as it always has: --set menu.visible=false writes visible under menu.

Using Lead in Templates

The lead field provides a short description that appears in page listings (like the Docs or Blog index). Use it in templates:

{% for p in all_pages %}
  <h3><a href="{{ p.url }}">{{ p.title }}</a></h3>
  {% if p.lead %}<p class="lead">{{ p.lead }}</p>{% endif %}
  {% if p.date %}<time>{{ p.date }}</time>{% endif %}
{% endfor %}

Leave lead out and Accent CMS derives one from the page’s first paragraph, so a listing always has something to show.

If you have written a description, that is used instead of the derived excerpt – you do not have to write the same sentence twice. The order is lead, then description, then the first paragraph. A lead you wrote always wins; only the derived excerpt gives way.

This applies everywhere the lead is published, not just to listings: your theme renders it wherever it uses page.lead, and it becomes the page’s RSS item description and its search snippet as well. So on a page that has a description and no lead, adding one changes what readers see on the page itself – which is usually what you want, and worth knowing before you add description to a page whose derived lead you were happy with.

Either way the lead is published as plain text: raw HTML is stripped from it, because it also becomes the page’s <meta name="description">, its social-card description, its RSS item description and its llms.txt entry, none of which can render markup. Your file keeps whatever you wrote – only the published view is stripped – and a tag inside `backticks` survives, so you can still write a lead about <section>.