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.
| Property | Value |
|---|---|
| Id | astro:starlight:0.41 |
| Title | Astro Starlight front matter v0.41 |
| Files it fits | .md, .mdx |
| Dialect | Draft 2020-12 |
| Required fields | title |
| Additional properties | Allowed (additionalProperties: true) |
| Reference kind | builtin |
| On by default | No |
| Upstream reference | Frontmatter reference |
| JSON | starlight/0.41.json |
Use it
Section titled “Use it”Name the id in manni.config.yaml. A Starlight site usually stacks it with a
vocabulary, since the two claim different keys:
meta: schemas: - astro:starlight:0.41 - diataxis:diataxis:1.0For a one-off run, pass the id directly:
manni meta validate src/content/docs/ -s astro:starlight:0.41Fields
Section titled “Fields”| Field | Type | Notes |
|---|---|---|
title | string | Required. Non-empty. |
description | string | Used for page metadata and SEO. |
slug | string | Overrides the URL slug taken from the file path. |
editUrl | string | boolean | A URL, or false to hide the edit link. |
head | array | Tags injected into <head>; each needs a tag. |
tableOfContents | object | false | minHeadingLevel and maxHeadingLevel, each 1–6. |
template | doc | splash | Anything else is rejected. |
hero | object | title, tagline, image, actions. |
banner | object | Requires content. |
lastUpdated | date | boolean | A YAML date, or a flag. |
prev, next | boolean | string | object | false hides, a string relabels, an object sets link and label. |
pagefind | boolean | Search indexing. Defaults to true. |
draft | boolean | Excluded from production builds. |
sidebar | object | label, 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.
Additional properties
Section titled “Additional properties”Starlight defines its front matter as a schema you extend rather than replace, so unknown keys are expected and tolerated here too.
Versioning
Section titled “Versioning”Example page
Section titled “Example page”A page carrying most of the fields, at legal values. This is
test/fixtures/platform/starlight-valid.md, and it passes.
---title: Configure the sidebardescription: How to order and label pages in the Starlight sidebar.slug: guides/sidebartemplate: docdraft: falsepagefind: truelastUpdated: 2026-08-23editUrl: https://github.com/example/docs/edit/main/sidebar.mdtableOfContents: minHeadingLevel: 2 maxHeadingLevel: 4banner: content: This guide covers Starlight 0.41.prev: falsenext: link: /guides/search/ label: Searchsidebar: label: Sidebar order: 3 hidden: false badge: Newhead: - tag: meta attrs: name: robots content: noindex---A common mistake
Section titled “A common mistake”A page with no title does not build. Starlight stops on it, and this schema
reports it before the build runs:
---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 errorAdd a title and the finding clears.