NookDocs is configured via a nookdocs.config.json file in your docs base directory (the repo root for a single repo, or a subfolder for a monorepo).
Minimal example
{
"name": "My Docs",
"navigation": [
{
"group": "Getting Started",
"pages": ["introduction"]
}
]
}Full reference
| Field | Type | Required | Description |
name | string | Yes | Your documentation site name |
theme | object | No | Theme customization |
navigation | array | Yes | Sidebar navigation groups |
api | object | No | API playground configuration |
versions | string[] | No | Version labels |
redirects | array | No | URL redirects |
footer | object | No | Footer configuration |
Navigation
Navigation is defined as an array of groups:
{
"navigation": [
{
"group": "Group Name",
"pages": [
"page-one",
"page-two",
{
"group": "Nested Group",
"pages": ["nested/page"]
}
]
}
]
}Page paths are relative to the docs base directory, without the file extension.
Theme
theme is the slug of a built-in theme. It sets the shell layout and the full
token set — colors, spacing, typography scale, code-block framing.
{
"theme": "cedar"
}Ten ship today: larch (the default), cedar, obsidian, birch, oak,
cypress, ember, sage, slate, terminal. See
Theme for what each looks like. Older configs may name
maple, classic, modern or minimal — legacy aliases that still resolve
(maple→larch, classic→cedar, modern→ember, minimal→sage), but write the
canonical slug.
Brand overrides
The theme decides how the site is built; these keys override what it chose.
They sit beside theme, not inside it.
{
"theme": "cedar",
"colors": {
"primary": "#0f766e",
"logo": {
"light": "/logo-light.svg",
"dark": "/logo-dark.svg"
}
},
"typography": {
"fontFamily": "Geist Sans"
},
"codeBlockStyle": "inset"
}| Key | What it overrides |
colors.primary | Accent color for buttons, links and focus rings. colors.light / colors.dark set it per mode. |
colors.logo | Logo images per mode, plus href for where the logo links. |
typography | Font family and scale. |
codeBlockStyle | How code blocks are framed, when you want a different treatment from the theme's. |
theme took an object of these keys in an earlier format. It takes a slug
now, and the overrides moved to the top level — a config using the old shape
fails validation with "theme must be one of the built-in slugs". Run
validate_{project}_config through MCP to check a file
before committing it.