Skip to content

Built-in platform schemas

Eight built-ins describe the front matter contract of a documentation toolchain that is not Docusaurus. Like the Docusaurus schemas, they are platform schemas: they say what your site generator accepts, not what your team has agreed a page should say. That makes them safe to stack under any vocabulary.

IdToolchainFiles it fitsRequires
astro:starlight:0.41Astro Starlight 0.41.md, .mdxtitle
antora:page:3.1Antora 3.1.adoc, .asciidoctitle
sphinx:docinfo:9.1Sphinx 9.1.rstnothing
myst:frontmatter:1.10mystmd 1.10.mdnothing
hugo:page:0.165Hugo 0.165.mdnothing
jekyll:page:4.4Jekyll 4.4.md, .markdownnothing
vitepress:page:1.6VitePress 1.6.mdnothing
mkdocs:material:9.7MkDocs 1.6 + Material 9.7.mdnothing

Each schema has a page of its own, with its field table, an example page, and the finding a common mistake produces:

This page covers what the eight share, and how to stack one with a vocabulary.

The rule across every platform built-in is to require exactly what the generator refuses to build without. What one demands is therefore a fact about the tool, not a judgement manni meta made on your behalf.

Docusaurus and Sphinx mark no field as mandatory, so their schemas require nothing. They can only ever fail a page on the shape of a value it already carries. Starlight and Antora both error without a page title, so both schemas demand title. A page failing that check was already broken, and manni meta is telling you at review time instead of at build time. MyST requires nothing because it will lift a missing title from the first heading in the document.

Hugo, Jekyll, VitePress and MkDocs require nothing either, for the plainest reason of the lot. All four render a page that has no front matter at all. Hugo falls back to a title derived from the file name. MkDocs works down a list of four title sources and stops at the first that answers. VitePress has a default for every option. In Jekyll it is the presence of the --- block, not its contents, that marks a file for processing. An empty one is valid. That makes all four pure shape checks, which is where their value is. The mistakes they catch are the ones the generator accepts without complaint and then acts on wrongly.

A platform schema claims the keys your generator reads. A vocabulary claims the keys your team agreed on. They mostly do not overlap, so one run can hold a page to both and attribute each failure to the schema that raised it:

Terminal window
manni meta validate docs/ -s astro:starlight:0.41 -s diataxis:diataxis:1.0

title and description appear in several of these, and every definition agrees that they are strings, so stacking is safe.

manni.config.yaml
meta:
schemas:
- astro:starlight:0.41
- diataxis:diataxis:1.0