Skip to content

Astro Starlight schema

Built-in id: astro:starlight:0.41

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

astro:starlight:0.41 checks the front matter Astro Starlight 0.41 reads from a .md or .mdx page. It requires title, because Starlight refuses to build a page without one. Every other field is optional and checked only when present. It is one of the platform schemas, which say what a generator accepts rather than what your team agreed.

PropertyValue
Idastro:starlight:0.41
TitleAstro Starlight front matter v0.41
Files it fits.md, .mdx
DialectDraft 2020-12
Required fieldstitle
Additional propertiesAllowed (additionalProperties: true)
Reference kindbuiltin
On by defaultNo
Upstream referenceFrontmatter reference
JSONstarlight/0.41.json

Name the id in manni.config.yaml. A Starlight site usually stacks it with a vocabulary, since the two claim different keys:

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

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

Terminal window
manni meta validate src/content/docs/ -s astro:starlight:0.41
FieldTypeNotes
titlestringRequired. Non-empty.
descriptionstringUsed for page metadata and SEO.
slugstringOverrides the URL slug taken from the file path.
editUrlstring | booleanA URL, or false to hide the edit link.
headarrayTags injected into <head>; each needs a tag.
tableOfContentsobject | falseminHeadingLevel and maxHeadingLevel, each 1–6.
templatedoc | splashAnything else is rejected.
heroobjecttitle, tagline, image, actions.
bannerobjectRequires content.
lastUpdateddate | booleanA YAML date, or a flag.
prev, nextboolean | string | objectfalse hides, a string relabels, an object sets link and label.
pagefindbooleanSearch indexing. Defaults to true.
draftbooleanExcluded from production builds.
sidebarobjectlabel, order, hidden, badge, attrs.

tableOfContents is written with if/then rather than anyOf so a bad heading level is reported against /tableOfContents/maxHeadingLevel. An anyOf collapses every branch failure onto the parent object, which puts the caret on the wrong line.

Starlight defines its front matter as a schema you extend rather than replace, so unknown keys are expected and tolerated here too.

A page carrying most of the fields, at legal values. This is test/fixtures/platform/starlight-valid.md, and it passes.

src/content/docs/guides/sidebar.md
---
title: Configure the sidebar
description: How to order and label pages in the Starlight sidebar.
slug: guides/sidebar
template: doc
draft: false
pagefind: true
lastUpdated: 2026-08-23
editUrl: https://github.com/example/docs/edit/main/sidebar.md
tableOfContents:
minHeadingLevel: 2
maxHeadingLevel: 4
banner:
content: This guide covers Starlight 0.41.
prev: false
next:
link: /guides/search/
label: Search
sidebar:
label: Sidebar
order: 3
hidden: false
badge: New
head:
- tag: meta
attrs:
name: robots
content: noindex
---

A page with no title does not build. Starlight stops on it, and this schema reports it before the build runs:

test/fixtures/platform/starlight-missing-title.md
---
description: A page that forgot the one field Starlight demands.
---
✗ test/fixtures/platform/starlight-missing-title.md
(root) must have required property 'title' (line 1) [astro:starlight:0.41]
1 file checked, 0 passed, 1 failed, 1 error

Add a title and the finding clears.