ck-git-hosting

Page titles and metadata

Front matter

A leading block delimited by --- lines, in the same small scalar syntax .ckgit/ci.yml uses (plain, single-, or double-quoted values, and exactly the four escapes \\ \" \n \t), at most 64 lines and 8 KiB between the fences:

---
title: Getting started
description: The three commands to build and check a site.
author: C. Klukas
date: 2026-08-09
nav_order: 1
---
KeyTypeEffect
titlestring, ≤ 128 bytesThis page's title, overriding the automatically derived title.
descriptionstring, ≤ 1024 bytesA one-line summary, used as the page's <meta name="description">.
authorstring, ≤ 128 bytesThe page's <meta name="author">, and the first part of its byline.
dateYYYY-MM-DDA calendar date that exists (2024-02-29 does, 2026-02-29 does not): the page's <meta name="date">, and the second part of its byline.
nav_orderintegerThis page's (or, on a directory's index page, that directory's) order among its siblings.
nav_excludetrue/falseKeep this page out of the sidebar and tabs (still built, still linked from the site index).

A page with an author or a date shows a small byline, such as "C. Klukas · 2026-08-09" — only the parts present — right under its leading # heading, or at the very top of the page when it does not open with one. It is plain markup styled by the built-in stylesheet (the date is a <time datetime="…"> element), so it needs no script; it is not part of the search index. A value ckdocs cannot use — an empty or over-long title or author, a description over its bound, a value with a control character, a nav_order that is not an integer, a nav_exclude that is neither true nor false, a date in any other form or naming a day that does not exist — is ignored with a warning naming the page.

An unrecognized key is ignored — front matter written for Jekyll or Hugo is common to paste in — but ckdocs check/--strict reports it as a warning, so a typo such as nave_order is still caught rather than silently doing nothing. A key that belongs to another tool reading the same pages (a PDF exporter's format, say) is declared once in ckdocs.yml instead:

front_matter:
  foreign_keys: [format, pdf.theme]

A declared key is accepted silently on every page; ckdocs never interprets it, but carries it into the page's head as <meta name="front-matter:format" content="…">, name and value escaped, the value exactly as parsed. The front-matter: prefix is deliberate: a key meant for another tool can never act as a standard meta name a browser or crawler obeys (robots, referrer, viewport, …) or shadow one ckdocs writes itself. A declared key whose value is a list or a mapping, longer than 1024 bytes, or containing a control character (a newline included) is still accepted silently, just not carried. Every key not declared keeps warning exactly as before, so the typo protection stays. Only keys with a single (scalar) value are looked at: one whose value is a list or a mapping is skipped without a warning — ckdocs's own, declared, or neither.

A block that has the shape of front matter but is not valid in this syntax (a duplicate key, an unterminated quote, a key with nothing after it) is still recognized as front matter — its content never leaks onto the rendered page as literal text — and is reported the same way, naming the exact problem and line. A file that merely starts with a thematic break (---, then prose, then another ---) has no front matter at all; it is correctly left as ordinary body content. The dashboard's rendered preview of a Markdown file hides its front matter the same way; the file's own Source view still shows it.