Installation
Add the layer, extend it, write Markdown.
Add the dependency
pnpm add -D @kirchdev/duxtExtend the layer
export default defineNuxtConfig({
extends: ['@kirchdev/duxt']
});
Write your docs
Markdown goes in docs/ at the root of your repository — resolved against the
repository, not against the directory the site runs in, so a site in a subfolder
finds it. A file becomes a page, a folder becomes a section, and frontmatter
carries the title, description and icon.
- docs
- index.md
- 1.getting-started
- index.md
- 1.installation.md
- 2.guides
- 1.deploying.md
- nuxt.config.ts
---
title: Introduction
description: What this project is.
icon: lucide:rocket
---
Your first page.
A numeric prefix orders the tree and is stripped from the URL:
1.getting-started/ is served at /getting-started. Reordering a section
therefore never moves a URL — only renaming the part after the dot does.
The page's title is rendered as the <h1>. A heading of your own at the top
of the file would be the second one on the page.
What the build needs
- Node 24. The layer reads its database through
node:sqlite, so no native SQLite driver is installed or needed. - Network access to your sources, if any of them are other repositories, and
a token for the private ones — Content reads it from the collection's
auth.
What comes with it
The package ships one command, duxt-report, and extending the layer is all it
takes to have it:
pnpm exec duxt-report # what your sources became, as Markdown
pnpm exec duxt-report --json # the same, unrendered
It prints the resolved collections, everything the build checks and the redirects the pages declare — no dev server, so it runs in CI and in a pipe. See What the build checks.
Result
nuxt dev serves the site. Everything the theme draws is data with a default,
so the next step is the one file that overrides it:
Configuration.