Skip to content
duxt

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

FieldTypeWhat it does
titlestringRendered as the page's <h1>, and its SEO and social title
descriptionstringThe page's summary — sidebar, cards, OG image, llms.txt
iconstringShown beside the entry in the sidebar, the section row and cards
navigationbooleanfalse hides the page from the navigation
layoutstringlanding renders the page without the docs layout
redirectFromstring[]Old URLs for this page — see Move a page
datestringWhen 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.

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.

FieldTypeDefaultWhat it controls
tocfalse | { maxDepth }on, down to h3The table of contents, and how deep it goes
breadcrumbbooleanduxt.breadcrumbThe trail above the title
prevNextbooleantrueThe previous/next pair under the article
feedbackbooleantrueThe "was this helpful?" row
pageInfobooleantrueEdit link, last updated, contributors
copyPagebooleantrueCopy page, and the hand-to-a-model menu
fullWidthbooleanfalsetrue removes the reading-width cap
searchbooleantruefalse 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.

What the build fills in

FieldFilled byHolds
lastUpdatedthe git-meta moduleThe last commit that touched the file
contributorsthe git-meta moduleName, commit count and username, per author
rawbodythe collection schemaThe Markdown as written
sitemapthe sitemap integrationWhat 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.md is served at /guides/deploy. Reordering never moves a URL.
  • .draft.md is a draft. It is served in the dev server and absent from the build. There is no draft: true, because a collection's contents are declared before any file has been read — see Collections.
Was this page helpful?