Skip to content

Docusaurus blog schema

Built-in id: docusaurus:blog:3.10

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

As of Docusaurus 3.10, docusaurus:blog:3.10 checks the front matter @docusaurus/plugin-content-blog reads on a post. Like the docs schema, it requires no field and checks the shape of every field it describes. 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:blog:3.10
TitleDocusaurus blog front matter v3.10
DialectDraft 2020-12
Required fieldsNone
Additional propertiesAllowed (additionalProperties: true)
Reference kindbuiltin
On by defaultNo
Upstream referenceBlog front matter
JSONdocusaurus-blog/3.10.json

Posts live under their own root, so the schema reaches them through an override rather than the site-wide schemas: list:

manni.config.yaml
meta:
overrides:
- files: "blog/**"
schemas:
- docusaurus:blog:3.10

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

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

Wire them up shows the blog beside the docs and pages roots, each declared as a collection.

FieldTypeConstraint
authorsstring, object, or arrayan authors.yml key, an inline author, or a list of either
authorstringdeprecated in favor of authors
author_urlstringuri-reference, deprecated
author_image_urlstringuri-reference, deprecated
author_titlestringdeprecated
titlestringn/a
title_metastringn/a
sidebar_labelstringn/a
datestringn/a
descriptionstringmay be empty
slugstringn/a
keywordsarray of stringn/a
imagestringuri-reference
tagsarraystring, or object with label and permalink
draftbooleannot both with unlisted
unlistedbooleannot both with draft
hide_table_of_contentsbooleann/a
toc_min_heading_levelnumber2–6
toc_max_heading_levelnumber2–6
last_updateobjectauthor and/or date, at least one, nothing else

authors is loose on purpose. Docusaurus resolves each entry against authors.yml rather than validating it strictly, so the schema checks the shape and not whether the key exists. The single-author author* keys are the older spelling that authors replaces. They still pass when their values have the right type.

The cross-field rules behind draft, unlisted, tags and last_update are the same in all three Docusaurus schemas. The rules worth knowing covers each of them. A post written with TOML front matter has one more trap, covered under Versioning.

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 post carrying the fields the blog plugin documents. This is test/fixtures/docusaurus/blog-valid.md less its title_meta line, and it passes.

blog/2026-03-14-shipping-v2.md
---
title: Shipping v2
sidebar_label: v2
date: 2026-03-14
authors:
- dana
- name: Sam Rivera
title: Staff engineer
url: https://example.com/sam
imageURL: /img/sam.png
tags:
- release
- label: Announcements
permalink: /tags/announcements
draft: false
unlisted: false
hide_table_of_contents: false
toc_min_heading_level: 2
toc_max_heading_level: 3
keywords:
- release
description: What changed in v2 and how to upgrade.
image: /img/social/v2.png
slug: shipping-v2
last_update:
date: 2026-03-20
---

An author is a key, an inline object, or a list of either. A bare number is none of those:

test/fixtures/docusaurus/blog-bad-authors.md
---
title: Shipping v2
authors: 42
---
✗ test/fixtures/docusaurus/blog-bad-authors.md
/authors must be string,object,array (line 3) [docusaurus:blog:3.10]
1 file checked, 0 passed, 1 failed, 1 error

Name the author by their authors.yml key, or write the author inline.