Skip to content

Docusaurus docs schema

Built-in id: docusaurus:docs:3.10

Published at https://hawkeyexl.github.io/manni/schemas/docusaurus-docs/3.10.json. A $schema that names this URL resolves to the bundled copy, with no network call.

docusaurus:docs:3.10 checks the front matter @docusaurus/plugin-content-docs reads, as of Docusaurus 3.10. It is a format check, not a presence check. It requires no field, and constrains the shape of every field the plugin documents. It is one of three Docusaurus schemas, one per content plugin. The rules the three share, and what none of them checks, live on that page.

PropertyValue
Iddocusaurus:docs:3.10
TitleDocusaurus docs front matter v3.10
DialectDraft 2020-12
Required fieldsNone
Additional propertiesAllowed (additionalProperties: true)
Reference kindbuiltin
On by defaultNo
Upstream referenceDocs front matter
JSONdocusaurus-docs/3.10.json

A repo whose only Docusaurus content is the docs root names the id in manni.config.yaml:

manni.config.yaml
meta:
schemas:
- docusaurus:docs:3.10

For a one-off run, pass the id directly:

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

A site with a blog or standalone pages as well gives each content root a schema of its own. Wire them up shows the config for all three roots.

FieldTypeConstraint
idstringn/a
titlestringmay be empty
descriptionstringmay be empty
slugstringn/a
sidebar_labelstringn/a
sidebar_positionnumbern/a
sidebar_class_namestringn/a
sidebar_keystringn/a
sidebar_custom_propsobjectn/a
displayed_sidebarstring or nulln/a
pagination_labelstringn/a
pagination_nextstring or nulln/a
pagination_prevstring or nulln/a
hide_titlebooleann/a
hide_table_of_contentsbooleann/a
toc_min_heading_levelnumber2–6
toc_max_heading_levelnumber2–6
parse_number_prefixesbooleann/a
custom_edit_urlstring or nulluri-reference
keywordsarray of stringn/a
imagestringuri-reference
tagsarraystring, or object with label and permalink
draftbooleannot both with unlisted
unlistedbooleannot both with draft
last_updateobjectauthor and/or date, at least one, nothing else

The cross-field rules behind the last few rows are the same in all three Docusaurus schemas. The rules worth knowing covers each of them.

Allowed. Docusaurus tolerates theme and plugin front matter, and so does this schema. The one exception is inside last_update, which takes author and date and nothing else. A misspelled top-level key passes, so stack a strict overlay when your docs set has no plugin front matter of its own.

Every field the docs plugin documents, at a legal value. This is test/fixtures/docusaurus/docs-valid.md, and it passes.

docs/install.md
---
id: install
title: Install the SDK
sidebar_label: Install
sidebar_position: 2
sidebar_custom_props:
badge: new
displayed_sidebar: apiSidebar
hide_title: false
hide_table_of_contents: false
toc_min_heading_level: 2
toc_max_heading_level: 4
pagination_label: Installing
pagination_prev: null
pagination_next: getting-started/first-call
parse_number_prefixes: false
custom_edit_url: https://github.com/acme/docs/edit/main/docs/install.md
keywords:
- install
- sdk
description: Install the SDK and verify the version.
image: /img/social/install.png
slug: /install
tags:
- setup
- label: Getting started
permalink: /tags/getting-started
draft: false
unlisted: false
last_update:
author: Dana
date: 2026-03-14
---

sidebar_position is a number. Quoting it makes it a string, and Docusaurus rejects it. This is the most common front matter mistake these schemas catch:

✗ docs/install.md
/sidebar_position must be number (line 3) [docusaurus:docs:3.10]

Drop the quotes and the finding clears. A heading level outside 2–6 fails the same way, naming toc_min_heading_level or toc_max_heading_level.