## Add the dependency

:partial{name="install"}

## Extend the layer

```ts [nuxt.config.ts]
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.

::file-tree{title="your-project/"}
---
tree:
  - name: docs/
    children:
      - name: index.md
      - name: 1.getting-started/
        children:
          - name: index.md
          - name: 1.installation.md
      - name: 2.guides/
        children:
          - name: 1.deploying.md
  - name: nuxt.config.ts
---
::

```md [docs/1.getting-started/index.md]
---
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.

::callout{type="tip" title="No H1 in the body"}
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.15+.** 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`, and extending the layer is all it
takes to have it:

```bash
pnpm exec duxt report            # what your sources became, as Markdown
pnpm exec duxt report --json     # the same, unrendered
pnpm exec duxt report --help     # what it takes, and what it exits with
```

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](/concepts/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](/getting-started/configuration).