Skip to content

Built-in schemas

manni meta bundles forty-seven schemas. You reference any of them by id, with no file to write, no URL to host, and no network call at validation time. This page is the registry: what each one constrains, whether it requires anything, and which are applied when you pass no flags at all. Each id links to its own page, with its fields, an example page, and the finding a common mistake produces.

Run manni meta schemas to print the same list from the version you have installed.

IdConstrainsRequiresOn by defaultJSON
google:okf:0.1type, title, description, resource, tags, timestamptypeYesokf/0.1.json
passo-uno:seven-action:1.0actionnothingYesseven-action/1.0.json
diataxis:diataxis:1.0typetypeNodiataxis/1.0.json
tgdp:templates:1.0typetypeNotgdp/1.0.json
tgdp:templates:1.1typetypeNotgdp/1.1.json
tgdp:templates-strict:1.1type, closed to the 25 template slugsnothingNotgdp-strict/1.1.json
docusaurus:docs:3.1025 Docusaurus docs fieldsnothingNodocusaurus-docs/3.10.json
docusaurus:blog:3.1020 Docusaurus blog fieldsnothingNodocusaurus-blog/3.10.json
docusaurus:pages:3.109 Docusaurus pages fieldsnothingNodocusaurus-pages/3.10.json
astro:starlight:0.4115 Starlight front matter fieldstitleNostarlight/0.41.json
antora:page:3.110 Antora page header attributestitleNoantora/3.1.json
sphinx:docinfo:9.15 Sphinx file-wide docinfo fieldsnothingNosphinx/9.1.json
myst:frontmatter:1.1041 MyST page frontmatter fieldsnothingNomyst/1.10.json
ogp:article:1.017 Open Graph and article:* propertiesog:title, og:type, og:url, og:imageNoogp/1.0.json
dcmi:elements:1.1the 15 Dublin Core elementsnothingNodcmi/1.1.json
microsoft:learn:1.016 Microsoft Learn attributestitle, description, author, ms.author, ms.dateNomicrosoft-learn/1.0.json
oasis:dita-metadata:1.330 DITA metadata keysnothingNodita/1.3.json
hugo:page:0.16528 Hugo front matter fieldsnothingNohugo/0.165.json
jekyll:page:4.47 Jekyll front matter variablesnothingNojekyll/4.4.json
vitepress:page:1.616 VitePress front matter optionsnothingNovitepress/1.6.json
x:cards:1.023 twitter:* card tagstwitter:cardNox-cards/1.0.json
agentskills:skill:1.0the 6 Agent Skills SKILL.md fieldsname, descriptionNoagent-skills/1.0.json
anthropic:claude-skill:2.120 Claude Code SKILL.md fieldsnothingNoclaude-skill/2.1.json
mkdocs:material:9.719 MkDocs and Material front matter keysnothingNomkdocs-material/9.7.json
anthropic:claude-subagent:2.118 Claude Code agent definition fieldsname, descriptionNoclaude-subagent/2.1.json
manni:core:1.0.0title, description, id, type, keywords, languagetitle, descriptionYescore/1.0.0.json
manni:core-strict:1.0.0the form of title, description, id, type, keywords, languagenothingNocore-strict/1.0.0.json
manni:stewardship:1.0.0authors, owner, stakeholders, reviewed-by, created, last-updated, last-reviewed, review-interval, verified-against, source-of-truthnothingYesstewardship/1.0.0.json
manni:stewardship-strict:1.0.0the form of authors, owner, stakeholders, reviewed-by, created, last-updated, last-reviewed, verified-against, source-of-truthnothingNostewardship-strict/1.0.0.json
manni:audience:1.0.0audiences, personas, journeys, intent, visibilitynothingYesaudience/1.0.0.json
manni:audience-strict:1.0.0the form of audiences, personas, journeys, intentnothingNoaudience-strict/1.0.0.json
manni:lifecycle:1.0.0lifecycle, replaced-by, supersedes, remove-byreplaced-by or remove-by on a deprecated pageYeslifecycle/1.0.0.json
manni:lifecycle-strict:1.0.0the form of replaced-by, supersedes, remove-bynothingNolifecycle-strict/1.0.0.json
manni:structure:1.0.0applies-to, not-applicable-to, concepts, prerequisites, next-steps, related-pagesnothingYesstructure/1.0.0.json
manni:structure-strict:1.0.0the form of applies-to, not-applicable-to, prerequisites, next-steps, related-pagesnothingNostructure-strict/1.0.0.json
manni:terminology:1.0.0label, definition, abstract, alt-labels, hidden-labels, broader, narrower, related-terms, see, scope-notelabel, and definition or see, on a type: term pageNoterminology/1.0.0.json
manni:terminology-strict:1.0.0the form of label, seenothingNoterminology-strict/1.0.0.json
manni:ai-context:1.0.0provenance, meta-provenance, risks, sample-questionsnothingYesai-context/1.0.0.json
manni:ai-context-strict:1.0.0the form of meta-provenance, risksnothingNoai-context-strict/1.0.0.json
manni:evals:1.0.0evals, eval-suite, eval-skipnothingYesevals/1.0.0.json
manni:evals-strict:1.0.0the form of evals, eval-suitenothingNoevals-strict/1.0.0.json
manni:artifact-evals:1.0.0metadatanothingNoartifact-evals/1.0.0.json
manni:artifact-evals-strict:1.0.0the form of metadatanothingNoartifact-evals-strict/1.0.0.json
manni:graph:1.0.0graphnothingYesgraph/1.0.0.json
manni:graph-strict:1.0.0the form of graphnothingNograph-strict/1.0.0.json
manni:citations:1.0.0citationsnothingYescitations/1.0.0.json
manni:citations-strict:1.0.0the form of citationsnothingNocitations-strict/1.0.0.json

All forty-seven use Draft 2020-12 and are built-in references. A typo in an id is reported as an unknown schema rather than a missing file.

Forty-six of them allow additional properties. agentskills:skill:1.0 is the one exception, and not out of strictness. The tooling that packages a skill for distribution hard-errors on a key outside the standard’s six rather than ignoring it. A schema that tolerated unknown keys would pass exactly the file that cannot ship. See agentskills:skill:1.0.

Every built-in is also served as plain JSON, at a version-pinned path under https://hawkeyexl.github.io/manni/schemas/. The twenty-three that predate the manni: vocabularies stay served under the pre-rename base as well, https://hawkeyexl.github.io/docmeta/schemas/. Both spellings resolve to the bundled copy, so a $schema line or a $ref written before the rename keeps working offline. New references should use the current base:

https://hawkeyexl.github.io/manni/schemas/okf/0.1.json
https://hawkeyexl.github.io/manni/schemas/seven-action/1.0.json
https://hawkeyexl.github.io/manni/schemas/diataxis/1.0.json
https://hawkeyexl.github.io/manni/schemas/tgdp/1.0.json
https://hawkeyexl.github.io/manni/schemas/docusaurus-docs/3.10.json
https://hawkeyexl.github.io/manni/schemas/docusaurus-blog/3.10.json
https://hawkeyexl.github.io/manni/schemas/docusaurus-pages/3.10.json
https://hawkeyexl.github.io/manni/schemas/starlight/0.41.json
https://hawkeyexl.github.io/manni/schemas/antora/3.1.json
https://hawkeyexl.github.io/manni/schemas/sphinx/9.1.json
https://hawkeyexl.github.io/manni/schemas/myst/1.10.json
https://hawkeyexl.github.io/manni/schemas/ogp/1.0.json
https://hawkeyexl.github.io/manni/schemas/dcmi/1.1.json
https://hawkeyexl.github.io/manni/schemas/microsoft-learn/1.0.json
https://hawkeyexl.github.io/manni/schemas/dita/1.3.json
https://hawkeyexl.github.io/manni/schemas/hugo/0.165.json
https://hawkeyexl.github.io/manni/schemas/jekyll/4.4.json
https://hawkeyexl.github.io/manni/schemas/vitepress/1.6.json
https://hawkeyexl.github.io/manni/schemas/x-cards/1.0.json
https://hawkeyexl.github.io/manni/schemas/agent-skills/1.0.json
https://hawkeyexl.github.io/manni/schemas/claude-skill/2.1.json
https://hawkeyexl.github.io/manni/schemas/mkdocs-material/9.7.json
https://hawkeyexl.github.io/manni/schemas/claude-subagent/2.1.json
https://hawkeyexl.github.io/manni/schemas/core/1.0.0.json
https://hawkeyexl.github.io/manni/schemas/core-strict/1.0.0.json
https://hawkeyexl.github.io/manni/schemas/stewardship/1.0.0.json
https://hawkeyexl.github.io/manni/schemas/stewardship-strict/1.0.0.json
https://hawkeyexl.github.io/manni/schemas/audience/1.0.0.json
https://hawkeyexl.github.io/manni/schemas/audience-strict/1.0.0.json
https://hawkeyexl.github.io/manni/schemas/lifecycle/1.0.0.json
https://hawkeyexl.github.io/manni/schemas/lifecycle-strict/1.0.0.json
https://hawkeyexl.github.io/manni/schemas/structure/1.0.0.json
https://hawkeyexl.github.io/manni/schemas/structure-strict/1.0.0.json
https://hawkeyexl.github.io/manni/schemas/terminology/1.0.0.json
https://hawkeyexl.github.io/manni/schemas/terminology-strict/1.0.0.json
https://hawkeyexl.github.io/manni/schemas/ai-context/1.0.0.json
https://hawkeyexl.github.io/manni/schemas/ai-context-strict/1.0.0.json
https://hawkeyexl.github.io/manni/schemas/evals/1.0.0.json
https://hawkeyexl.github.io/manni/schemas/evals-strict/1.0.0.json
https://hawkeyexl.github.io/manni/schemas/artifact-evals/1.0.0.json
https://hawkeyexl.github.io/manni/schemas/artifact-evals-strict/1.0.0.json
https://hawkeyexl.github.io/manni/schemas/graph/1.0.0.json
https://hawkeyexl.github.io/manni/schemas/graph-strict/1.0.0.json
https://hawkeyexl.github.io/manni/schemas/citations/1.0.0.json
https://hawkeyexl.github.io/manni/schemas/citations-strict/1.0.0.json
https://hawkeyexl.github.io/manni/schemas/tgdp/1.1.json
https://hawkeyexl.github.io/manni/schemas/tgdp-strict/1.1.json

They exist for three jobs. You can $ref a built-in from a schema of your own, or use one with a JSON Schema tool that is not manni meta. You can also read the actual JSON instead of a description of it.

Inside manni meta, a published URL costs nothing. manni meta recognises its own URLs and answers them from the copy bundled in the package. There is no request, no timeout, and no dependence on GitHub Pages being up. --offline and an air-gapped build work exactly as they do with the id. A schemaTrust policy that refuses URLs still accepts these, because they reach nothing. The two spellings are interchangeable:

---
$schema: https://hawkeyexl.github.io/manni/schemas/okf/0.1.json
type: how-to
---

The reason a URL beats a copy-paste. Reference a built-in from your own schema and add to it, by either name. The id and the URL both work, and neither touches the network:

house.schema.json
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"allOf": [{ "$ref": "google:okf:0.1" }],
"required": ["title", "owner"],
"properties": {
"owner": { "type": "string", "minLength": 1 }
}
}

Every rule the built-in carries still applies, and yours are added on top. That is composition inside one schema. Listing two schemas in a set is different. A set applies each schema whole and attributes failures separately. A $ref lets you narrow or extend what the built-in said.

The Requires column above is the distinction that matters when you pick one.

Editorial schemas describe what a page is. google:okf:0.1 and the two type vocabularies demand their key. Adopting them is a claim that every page carries that classification, which makes an unclassified page a gap rather than an abstention. Turning one on for the first time reports every page that has not caught up yet.

Platform schemas describe what your site generator accepts. A platform schema requires exactly what the generator refuses to build without, and nothing more. What it demands is a fact about the tool, not an editorial choice manni meta made for you.

That cuts both ways. The three docusaurus:* schemas and sphinx:docinfo:9.1 require nothing, because those tools mark no field as mandatory. Switching one on cannot fail a page that was already building. astro:starlight:0.41 and antora:page:3.1 both require title, because Starlight and Antora both error without a page title. A page failing that check was already broken, and manni meta is only telling you sooner.

The three agent schemas are platform schemas of a different sort: the platform is the agent runtime rather than a site generator. anthropic:claude-skill:2.1 requires nothing, because Claude Code marks every SKILL.md field optional. agentskills:skill:1.0 requires name and description, because the open standard does and the packaging tools refuse a skill without them. anthropic:claude-subagent:2.1 requires the same two for a third reason. Claude Code will not load an agent definition that is missing either. See Agent Skills schemas and Claude Code subagent schema.

Every id in the registry links to its full field table.

Vocabulary schemas are a third kind. They describe a document to something outside your docs site: a social card renderer (ogp:article:1.0), a catalogue or repository (dcmi:elements:1.1), or another publisher’s build (microsoft:learn:1.0). Open Graph is the one built-in that checks something no build tool checks. Nothing fails when og:image is missing, and the page just renders badly everywhere it is shared. See Metadata vocabularies.

The manni vocabularies are editorial schemas of manni’s own, eleven families that each answer one question about a page. Only manni:core:1.0.0 requires anything, a title and a description. Two more require a key only on a page that opts in. A deprecated lifecycle needs its successor or removal date, and a type: term page needs its label. Each family has a strict overlay, manni:<family>-strict:1.0.0. Stack it beside the open vocabulary to narrow the form of values the open one already claims. An overlay requires nothing. See manni vocabularies.

The two kinds mostly claim different keys, so they compose. One run can hold a page to your generator’s contract and to your own standard, attributing each failure to the schema that raised it:

Terminal window
manni meta validate docs/ -s docusaurus:docs:3.10 -s diataxis:diataxis:1.0

Eleven of the forty-seven are in the default set, in this order:

google:okf:0.1
passo-uno:seven-action:1.0
manni:core:1.0.0
manni:audience:1.0.0
manni:structure:1.0.0
manni:stewardship:1.0.0
manni:lifecycle:1.0.0
manni:ai-context:1.0.0
manni:evals:1.0.0
manni:graph:1.0.0
manni:citations:1.0.0

A bare run therefore requires type, which OKF requires, and title and description, which core requires. The other nine rule on a field only when a page carries it. Seven-Action rules that an action, if present, is legitimate, without insisting on one. A field a vocabulary prefers in external metadata draws a location:external warning when it sits on the page. Warnings never fail a run.

Terminology, artifact-evals, and every strict overlay stay out of the default set. strict: true in config stacks the overlay of each manni: default after its base. See strict versions.

The default set sits at the bottom of the precedence chain. Config schemas join it rather than replace it, unless the config sets defaults: false. A --schema flag or an in-file $schema replaces it. So does a matching config override, unless it sets defaults: true.

Three ways, in precedence order. The first one that matches wins. The flag and the document replace the set. An override replaces it too, unless it sets defaults: true. Config schemas add to the default set.

Repeat -s to build a set. This overrides everything else for the whole run:

Terminal window
manni meta validate docs/ -s docusaurus:docs:3.10 -s google:okf:0.1

A built-in id is vendor:name:version. The version segment tracks the upstream standard, not manni meta’s own release number:

  • google:okf:0.1 is OKF v0.1.
  • docusaurus:docs:3.10 is the front matter contract of Docusaurus 3.10.
  • hugo:page:0.165 is the contract as of Hugo 0.165, and Hugo releases monthly. Its front matter fields change far more slowly, so this id is not expected to move every month. A new one ships when the contract changes, not when Hugo does.
  • mkdocs:material:9.7 versions on Material for MkDocs 9.7, not on MkDocs 1.6, even though the vendor segment says mkdocs. MkDocs itself defines two front matter keys and Material defines the other seventeen. Material is what the contract tracks, and Material’s version is the one that can move it. astro:starlight:0.41 pairs a platform with a theme the same way. Ids are stable. A new upstream version arrives as a new id rather than a change to an existing one. Upgrading manni meta never silently retightens a check you already passed. Pin the id you validated against and move it deliberately.
  • manni:core:1.0.0 versions a vocabulary manni itself defines, so its version has three segments and tracks no upstream. Ids resolve by exact string. manni:core:1 names nothing, and a later 1.1.0 registers beside 1.0.0 rather than replacing it.

The built-ins are a shortcut, not a ceiling. A docs set with its own field names or its own vocabulary needs its own schema. That is a .json file you reference by path, or a URL you host for several repos to share. Copying the closest built-in and editing it is usually faster than starting from nothing.

meta.register names your own schema by its $id, such as house:page:1.0.0. The id then works anywhere a built-in id does, and a registered house:page-strict:1.0.0 stacks beside it under strict: true. manni meta schemas lists the registered ids after the built-ins. See Name your schema and its strict version.