Frontmatter
Alle Frontmatter-Felder, die eine Seite akzeptiert, alle optional — Titel, Beschreibung, Sidebar, SEO, Suche und der Rest, jeweils mit dem, was sie steuern.
Jede Seite akzeptiert die folgenden Frontmatter-Felder. Alle Felder sind optional.
Frontmatter ist YAML. Setz einen Wert deshalb in Anführungszeichen, wenn er einen Doppelpunkt gefolgt von einem Leerzeichen enthält, etwa description: "Setup: the easy way". Ohne Anführungszeichen liest YAML den zweiten Doppelpunkt als Beginn eines verschachtelten Schlüssels, und Blume meldet Datei und Zeile als BLUME_FRONTMATTER_INVALID.
title?string
Page title.
stringdescription?string
Page summary.
stringtype?string
Content type. blog/changelog drive feeds.
stringdocdate?string
Publish date for blog/changelog feeds (ISO or YAML date).
stringauthors?string | string[] | object[]
Post author(s) for blog/changelog content — a name, or objects with a name plus optional avatar/url and any extra fields. Credited as Person nodes in the page's JSON-LD; other fields are preserved as-is.
string | string[] | object[]slug?string
Set the page's full route from the content root (guides/setup). It replaces the whole path the file's location gives the page, not just the last segment. A . or .. segment is an error: browsers resolve it away, so no link could reach the page.
stringdraft?boolean
Exclude from production builds.
booleanfalsedeprecated?boolean
Mark the page deprecated: its sidebar row gets a deprecated pill (a translatable UI string).
booleanfalsehidden?boolean
Shorthand for sidebar.hidden.
booleanfalsenoindex?boolean
Shorthand for seo.noindex.
booleanfalsenarration?boolean
Set to false to leave this page without the Listen to this page player when narration is on.
booleantruerelated?(string | { [title]: string })[] | false
Pages to suggest at the foot of this one, up to ten: root-relative paths, absolute URLs, or { Title: link } to name a link. See Related pages below.
(string | { [title]: string })[] | falsepagination?boolean
Set to false to drop the previous and next links at the foot of the page. The page stays in the order, so its neighbors still link to it.
booleantrueicon?string
Lucide icon for the page's sidebar row when sidebar.icon isn't set (sidebar.icon wins).
stringlastModified?string
Pin the page's "last updated" date (ISO or YAML date); overrides the git-derived date.
stringmode?"default" | "wide" | "center" | "custom" | "frame"
What the page shows around its content. See Layout below.
"default" | "wide" | "center" | "custom" | "frame""default"api?string
An endpoint this page documents by hand, as an HTTP method and a path or URL (POST /v1/users). See Hand-written API pages.
stringauthMethod?"bearer" | "basic" | "key" | "none"
How an api page's endpoint authenticates, over the site's api.auth.
"bearer" | "basic" | "key" | "none"playground?"interactive" | "simple" | "none"
What an api page shows: the Try it panel and samples, the samples only, or neither.
"interactive" | "simple" | "none""interactive"Layout
mode legt fest, was eine Seite um ihren Inhalt herum anzeigt:
| Modus | Sidebar | Titel und Inhaltsverzeichnis | Links am Seitenende und Footer | Inhaltsbreite |
|---|---|---|---|---|
default |
Ja | Ja | Ja | Die Fließtextbreite |
wide |
Ja | Nur Titel | Ja | Die gesamte Spalte |
center |
Nein | Nur Titel | Ja | Eine breitere, zentrierte Spalte |
frame |
Ja | Nein | Nein | Die gesamte Spalte |
custom |
Nein | Nein | Nein | Die gesamte Seite |
wide eignet sich für eine Seite mit breiten Tabellen oder Diagrammen, center für Release Notes oder eine Ankündigung, die von oben nach unten gelesen wird. custom behält nur den Header, etwa für eine in MDX geschriebene Landingpage, und frame behält zusätzlich die Sidebar, etwa für ein Tool oder Dashboard, das in der Navigation der Doku sitzt. Keiner der beiden Modi rendert Titel oder Beschreibung der Seite, schreib also deine eigene Überschrift. Jeder Modus bleibt in der Suche und behält seine Markdown-Kopie.
title: Welcome
mode: custom
Die Werte entsprechen denen von Mintlify. Dessen assistant-Modus, ein ganzseitiger Chat, hat keine Entsprechung.
Verwandte Seiten
related listet Seiten auf, die am Ende dieser Seite als Karten unter der Überschrift Verwandte Seiten vorgeschlagen werden:
related:
- /guides/deployment
- Search setup: /configuration/search
- https://astro.build
Ein root-relativer Pfad verweist auf eine andere Seite, die die Karte mit deren Titel und Beschreibung anzeigt. Auf einer übersetzten Seite verlinkt er auf die Übersetzung, sofern es eine gibt. Ein Title: link-Eintrag legt den Titel der Karte selbst fest, und eine absolute URL verlinkt unter ihrem Hostnamen auf eine externe Website. Pfade werden wie jeder andere Link auf der Seite geprüft, sodass blume validate einen Pfad meldet, der zu keiner Seite passt. Der Schlüssel entspricht dem von Mintlify, sodass migrierte Seiten ihn unverändert behalten.
Sidebar
sidebar:
label: Install
order: 2
icon: download
badge: New
hidden: false
display: page
hidden entfernt die Seite aus der Sidebar und aus der Zurück/Weiter-Paginierung und damit auch aus der Sitemap, der Suche und llms.txt (siehe Versteckte Seiten). Auf der index-Seite eines Ordners entfernt es nur die eigene Zeile der Seite: Die Gruppenzeile verlinkt weiterhin auf die Seite, sodass die Zurück/Weiter-Links weiterhin durch sie hindurchführen und die Seite in der Sitemap, der Suche und llms.txt bleibt. Auf der Startseite, der index-Seite des Stammverzeichnisses, entfernt es ebenfalls nur die Zeile: Die Seite bleibt in der Sitemap, der Suche und llms.txt.
display legt den Darstellungsmodus der Ordnergruppe der Seite fest (Überschreibungen pro Gruppe) und ist nur auf der index-Seite eines Ordners in der generierten Sidebar sinnvoll — überall sonst (auf einer Nicht-Index-Seite, der eigenen index-Seite des Content-Stammverzeichnisses oder jeder Seite unter einer expliziten navigation.sidebar) gibt es keine Gruppe zu konfigurieren, und Blume warnt mit BLUME_SIDEBAR_DISPLAY_IGNORED.
SEO
seo:
title: Install Blume
description: Install Blume and scaffold your first project.
image: /og/install.png
canonical: https://acme.com/install
noindex: false
x:
creator: "@jane"
noindex gibt ein robots-noindex aus, entfernt die Seite aus der Sitemap und lässt ihre strukturierten Daten weg. Ein canonical, das auf eine andere URL verweist, entfernt die Seite ebenfalls aus der Sitemap, da die Sitemap nur kanonische URLs auflistet. x.creator schreibt die Seite einem X-Account zu (twitter:creator) — etwa der Person, die einen Gastbeitrag verfasst hat. Alle Felder findest du unter Metadaten.
Suche
search:
exclude: false
tags: [api]
keywords: [install, setup]
boost: 3
exclude hält die Seite aus der Suche heraus, und tags versieht ihren Eintrag mit Labels, nach denen ein gehosteter Such-Adapter filtern kann (siehe Tags). keywords sind zusätzliche Begriffe, über die die Seite neben ihrem eigenen Text gefunden wird. boost multipliziert die Relevanz der Seite: Werte über 1 ranken sie höher, Werte unter 1 niedriger. Mehr dazu findest du unter Ranking.
KI
ai:
exclude: true
ai.exclude hält die Seite aus llms.txt und llms-full.txt und aus der Seitenübersicht im Skill deiner Website heraus. Die Seite wird trotzdem gerendert, bleibt in der Suche, im MCP-Server und in der JSON-API und behält ihren Platz in der Sitemap.
Changelog
Changelog-Einträge (type: changelog) akzeptieren ein optionales changelog-Objekt für umfangreichere Feed- und Anzeige-Metadaten:
type: changelog
changelog:
version: 1.2.0
date: 2026-06-20
category: Features
date kann hier oder auf oberster Ebene stehen — beides fließt in den Changelog-RSS-Feed ein. Die generierte Timeline-Seite und den Feed findest du unter Changelog.
Eigene Schlüssel
Jeder Schlüssel, der nicht in dieser Referenz steht, lässt den Build fehlschlagen, sodass Tippfehler früh auffallen. Projekte mit eigenen Metadaten können zusätzliche Schlüssel über frontmatter.extend in blume.config.ts freischalten. Jeder davon wird durch ein Schema validiert, das das Projekt selbst mitbringt:
import { defineConfig } from "blume";
import { z } from "zod";
export default defineConfig({
frontmatter: {
extend: {
owner: z.string(),
reviewedAt: z.coerce.date().optional(),
},
},
});
---
title: Install
owner: "@sam"
reviewedAt: 2026-06-20
---
Schemas werden über die Standard Schema-Schnittstelle akzeptiert, sodass Zod (egal welche Version dein Projekt installiert hat), Valibot und ArkType alle funktionieren. Jeder deklarierte Schlüssel wird auf jeder Seite validiert, auch dort, wo er fehlt. Ein Pflichtschema erzwingt den Schlüssel also auf der gesamten Website. Markiere ihn mit .optional(), damit er nur dort validiert wird, wo er vorhanden ist. Alle anderen Schlüssel werden weiterhin strikt validiert, und eingebaute Felder kannst du nicht neu deklarieren.
Schlüssel pro Typ
Wenn du Schlüssel nur für einen bestimmten Inhaltstyp verlangen willst, etwa den status eines RFC oder die severity eines Incident-Reports, deklariere sie stattdessen unter content.types. Als Schlüssel dient dabei der Frontmatter-type, für den sie gelten:
import { defineConfig } from "blume";
import { z } from "zod";
export default defineConfig({
content: {
types: {
rfc: {
frontmatter: {
domain: z.string(),
status: z.enum(["draft", "review", "enforced"]),
},
},
},
},
});
---
title: OpenAPI request schemas
type: rfc
domain: architecture
status: enforced
---
Schlüssel pro Typ folgen denselben Validierungsregeln wie extend, gelten aber nur für Seiten, deren aufgelöster type passt. Ist die Deklaration für content.defaultType, gehören dazu auch Seiten, die gar keinen type setzen. Ein Schlüssel gehört zu genau einer Deklaration, entweder für die gesamte Website oder pro Typ, nicht zu beiden. Ein Schlüssel, der nur für einen anderen Typ deklariert ist, bleibt überall sonst unbekannt. Ein verirrter status auf einer normalen Doku-Seite lässt den Build also weiterhin fehlschlagen.
Besteht eine Seite die Validierung nicht, schlägt blume build fehl, und die Diagnose nennt Datei und Schlüssel. Mit --no-strict läuft der Build trotzdem durch, und die fehlerhaften Seiten werden aus der Ausgabe entfernt. Wie viele das sind, steht in der Build-Zusammenfassung.
Die Schemas werden aus blume/schema exportiert, damit du sie für Editor- und Migrations-Tools nutzen kannst.