Frontmatter
The fields a page may carry beyond title and description, and the two the build fills in.
Content stores only what a collection's schema declares, so this is the complete list — an undeclared field is dropped silently, before the sidebar or the search ever sees it.
What you write
| Field | Type | What it does |
|---|---|---|
title | string | Rendered as the page's <h1>, and its SEO and social title |
description | string | The page's summary — sidebar, cards, OG image, llms.txt |
icon | string | Shown beside the entry in the sidebar, the section row and cards |
navigation | boolean | false hides the page from the navigation |
layout | string | landing renders the page without the docs layout |
redirectFrom | string[] | Old URLs for this page — see Move a page |
date | string | When this page is dated, for the feed |
title and description are the two the build warns about when they are
missing. Neither breaks a page, and both quietly degrade the table of contents,
the social card and llms.txt.
title is rendered as the heading. A # heading at the top of the file is the
second <h1> on the page.
The page controls
Eight more fields, each turning off one piece of what duxt draws around a page. They are how a page says what it is for: an API reference that wants the full width, a legal page with no "was this helpful?", a stub that should not turn up in search.
| Field | Type | Default | What it controls |
|---|---|---|---|
toc | false | { maxDepth } | on, down to h3 | The table of contents, and how deep it goes |
breadcrumb | boolean | duxt.breadcrumb | The trail above the title |
prevNext | boolean | true | The previous/next pair under the article |
feedback | boolean | true | The "was this helpful?" row |
pageInfo | boolean | true | Edit link, last updated, contributors |
copyPage | boolean | true | Copy page, and the hand-to-a-model menu |
fullWidth | boolean | false | true removes the reading-width cap |
search | boolean | true | false removes the page from search |
---
title: Terms of service
feedback: false
prevNext: false
search: false
---
They compose, and none of them implies another. fullWidth: true removes the
reading measure and nothing else — the contents column and the provenance block
stay unless those are turned off too — and copyPage: false leaves the
provenance block alone. A page that sets none of them looks exactly as it always
did.
breadcrumb is the one with a site-wide switch behind it, duxt.breadcrumb. The
page wins wherever it speaks, so a site that hid the trail everywhere can put it
back on the one page whose trail is the point.
How deep the contents go
toc: false drops the column. The object form sets the deepest heading it
lists, written as a heading level — the list always starts at h2, and h3 is
the default.
---
title: Configuration
toc:
maxDepth: 4
---
maxDepth takes 2 through 6. Anything else falls back to the default rather
than emptying the column: there is no h7, and h1 is the title.
What search: false does, and what it does not
It removes the page from every surface duxt offers for finding something: the
search dialog, its fuzzy fallback, the MCP search_docs tool, and both
llms.txt and llms-full.txt.
It changes nothing about the page's address. The URL, the canonical, the
sitemap entry and the robots metadata are untouched, the page renders as it
always did, and MCP's read_page still answers for it. The page becomes
un-findable, not unpublished. To keep a page out of the navigation tree instead,
that is navigation: false; to keep it out of a search engine, that is the
crawler's business rather than this field's.
There is deliberately no field for it. fullWidth keeps the header and the left
navigation, because a page that removed the way out is a page the reader is stuck
on. layout: landing remains the one explicit escape from the whole docs shell.
What the build fills in
| Field | Filled by | Holds |
|---|---|---|
lastUpdated | the git-meta module | The last commit that touched the file |
contributors | the git-meta module | Name, commit count and username, per author |
rawbody | the collection schema | The Markdown as written |
sitemap | the sitemap integration | What puts the page in /sitemap.xml at all |
Writing any of these by hand is pointless: the build overwrites them. Both git
fields need a real history, so a remote source needs history: true — see the
sources reference.
The file name carries two more things
- A numeric prefix orders the tree and is stripped from the URL:
3.guides/2.deploy.mdis served at/guides/deploy. Reordering never moves a URL. .draft.mdis a draft. It is served in the dev server and absent from the build. There is nodraft: true, because a collection's contents are declared before any file has been read — see Collections.