Navbar, footer and reserved fields
navbar-links, footer, content, $schema, and the three reserved keys.
navbar-links
Section titled “navbar-links”navbar-links[].labelstringrequiredLink text, 1–60 characters.
navbar-links[].urlstringrequiredDestination.
navbar-links[].style"minimal" | "filled" | "outlined"default: minimalVisual treatment.
navbar-links[].externalbooleandefault: falseMarks the link as leaving the site.
footer
Section titled “footer”footer.socials[].platform"twitter" | "github" | "discord" | "linkedin" | "youtube" | "website"requiredWhich social icon to render.
footer.socials[].urlstringrequiredAbsolute URL.
footer.columns[].labelstringrequiredColumn heading, 1–60 characters.
footer.columns[].linksobject[]requiredAt least one { label, url }.
footer.statusobject{ label, url? } — a minimal status region. No indicator enum, no polling.
footer.columns[].links[].url and footer.status.url are base-prefixed when
root-relative — write /quickstart, not /docs/quickstart. This is the opposite of
links in page prose, which must carry the prefix themselves. footer.socials[].url is
always taken verbatim.
content
Section titled “content”content.dialect"reed" | "fern" | "mintlify"default: reedHow to interpret component props in your MDX.
See Content dialect — this is the field migrated projects almost always need.
$schema
Section titled “$schema”$schemastringEditor-only JSON Schema hint. Accepted and otherwise completely ignored by Reed.
It has no effect on any other field’s validation, so adding, removing or hand-editing it is always safe.
Reserved: versions, products, languages
Section titled “Reserved: versions, products, languages”These three keys are accepted and ignored. They are placeholders for future functionality, and their contents are not validated.
Do not infer support from their presence. Multi-version, multi-product and
multi-language documentation are architectural features, not a few extra fields, and none
of them is implemented. Writing a versions block today produces exactly one version of
your site, silently, because nothing reads it.
They exist in the schema so that a config carrying them does not fail the strict unknown-key check — not as a preview of behaviour.