site.yaml reference
Field-by-field reference for site configuration.
Config file at the docs sync root: site.yaml or site.yml. Parsed as YAML on each git sync. Invalid YAML is ignored (treated as empty config); prefer validating locally before merge.
Site metadata
title: Acme Docs
visibility: public
theme:
accent_color: '#0F766E'
logo_url: https://cdn.example.com/logo.svg
layout: centered
exclude:
- README.md
- '**/drafts/**'
navbar_links:
- text: GitHub
url: https://github.com/acme/docs
type: minimal
sections: []
Key | Type | Required | Notes |
|---|---|---|---|
| string | No | Site title in the header |
| string | No |
|
| object | No | Branding and content layout |
| object | No | Advanced; |
| string[] | No | Skip during Markdown discovery |
| array | No | Right-aligned header actions |
| array | No | When set, full section rebuild on sync |
| string | No | Legacy; prefer |
| string | No | Legacy; prefer |
theme
theme:
accent_color: '#0F766E'
logo_url: https://cdn.example.com/logo-light.svg
logo_dark_url: https://cdn.example.com/logo-dark.svg
favicon_url: https://cdn.example.com/favicon.ico
layout: centered
Key | Type | Aliases | Default | Notes |
|---|---|---|---|---|
| string |
| Site / product default | Brand accent for interactive chrome |
| string |
| unset (no logo) | Absolute URL; light or single logo |
| string |
| unset | Absolute URL; used in dark mode when set |
| string |
| unset (app default) | Absolute URL for the tab icon |
| string | — |
|
|
layout
Value | Sidebars | Guide article | Header bar |
|---|---|---|---|
| Viewport edges | Readable width, centered | Full bleed |
| Shared centered column (~88rem) | Same column | Full bleed; inner content matches column |
Other theme keys (typography, backgrounds, CSS) are not applied yet — see Customization.
navbar_links[]
navbar_links:
- text: GitHub
url: https://github.com/acme/docs
type: minimal
- text: Dashboard
url: https://app.example.com
type: filled
Key | Type | Aliases | Default | Notes |
|---|---|---|---|---|
| string |
| — | Button label |
| string |
| — | Absolute or site-relative |
| string |
|
|
|
Stored on the site as nav.links.
exclude
List of globs or path fragments matched against paths relative to the sync root (and again per section after merging section exclude).
Examples:
exclude:
- README.md
- README.mdx
- '**/drafts/**'
- internal.md
Matching is case-insensitive for simple basenames; glob patterns support * and ** style paths as implemented by the importer.
sections[]
When present, sync deletes and recreates all sections and guide pages from this list. Empty or invalid lists that produce zero sections fail validation.
Each item is one of the kinds below. Items with children are groups.
Guide section
- name: Guide
slug: guide
path: .
icon: book-open
exclude:
- README.md
pages: # optional
- introduction.md
- get-started/quickstart.md
Key | Type | Required | Notes |
|---|---|---|---|
| string | Yes* | Top-nav label ( |
| string | No | Default |
| string | No | Emoji, short text, or Lucide name for the header tab |
| string | No | Relative directory; |
| string[] | No | Merged with site |
| string[] | No | Explicit files relative to |
Discovery rules when pages is omitted:
Include
*.md/*.mdxunderpathExclude matches
Sort:
position→ shallower path → path stringDirectories → sidebar folders
Zero pages → sync error
API embed
- name: API
slug: api
api: payments
icon: code
api_layout:
tag_order: [Pets, Users]
hide_tags: [Internal]
hide_operations:
- GET /health
hide_models: false
flatten: false
Key | Type | Notes |
|---|---|---|
| string | Organization API id or slug |
| string | Default |
| string | Optional header tab icon |
| object | Optional nav customization — see API reference layout |
SDK embed
- name: SDKs
slug: sdks
sdk: payments-sdk
Key | Type | Notes |
|---|---|---|
| string | SDK id, slug, or name (slug preferred) |
| string | Default |
CLI embed
- name: CLI
slug: cli
cli: payments-cli
Key | Type | Notes |
|---|---|---|
| string | CLI id or name |
| string | Default |
Unresolved embed refs fail sync with a clear validation message.
Group
- name: More
slug: more # optional; parent is not routable
children:
- name: SDKs
slug: sdks
sdk: payments-sdk
Key | Type | Notes |
|---|---|---|
| string | Dropdown label |
| array | Nested section defs (guides or embeds) |
| string | Allocated for uniqueness; parent has no page URL |
Slug allocation
Section slugs are slugified from slug or name. Collisions get numeric suffixes (guide-2, …). Page slug collisions within a section fail sync — fix with unique frontmatter slug values or different paths.
Link rewriting
On import, relative Markdown hrefs resolve against the file’s directory and map to /{sectionSlug}/{pageSlug} when the target was imported. Unmapped relative targets keep a best-effort path without .md.
Related
Site settings — narrative guide