WorkspaceConfig
# Basic site config with domain, root, excludes, and routes
[site]
domain = "docs.example.org"
root = "docs"
exclude = ["**/*.draft.md", "_drafts/**"]
[site.routes]
"/" = "index.md"
"/about/" = "README.md"domain
domainstring
^([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}$
title
titlestring
# Set a site title
[site]
title = "My Documentation"author
authorAuthorSpec
# Simple author name
[site]
author = "Acme Inc"
# Full author metadata
[site.author]
type = "Organization"
name = "Acme Inc"
url = "https://acme.com"logo
logoLogoConfig
icons
iconsobject
Full route: "/docs/config/"- exact match Without slashes: "docs/config"- flexible path matching Label: "Features"- matches nav item labels Bare segment: config- matches last path segment (e.g., both /docs/config/and /api/config/)
"banana""lucide:banana"
# Map nav routes and labels to icons
[site.icons]
"/" = "home"
"docs/config" = "bolt" # Specific: only /docs/config/
docs = "book" # Matches any route ending in /docs/
"Features" = "sparkles" # Matches by labellabels
labelsobject
Full route: "/docs/cli/"- exact match Without slashes: "docs/cli"- flexible path matching Bare segment: cli- matches last path segment (e.g., both /docs/cli/and /api/cli/)
# Override auto-generated labels
[site.labels]
cli = "CLI"
api = "API"
"/docs/db/" = "Database"descriptions
descriptionsobject
nav-menu
Full route: "/docs/config/"- exact match Without slashes: "docs/config"- flexible path matching Label: "Features"- matches nav item labels Bare segment: config- matches last path segment
# Add short descriptions for nav items
[site.descriptions]
"docs/getting-started" = "Quick start guide" # Specific
docs = "Documentation and guides" # Any /docs/ route
"Features" = "Explore all capabilities" # By labelsocials
socialsobject
social-links
bluesky = "handle.bsky.social"→ bsky.app/profile/... discord = "invite"→ discord.gg/invite facebook = "page"→ facebook.com/page github = "org"or "org/repo"→ github.com/org or github.com/org/repo gitlab = "org"or "org/repo"→ gitlab.com/org or gitlab.com/org/repo instagram = "handle"→ instagram.com/handle linkedin = "in/name"or "company/name"→ linkedin.com/... mastodon→ requires full URL (federated) reddit = "r/sub"or "u/user"→ reddit.com/... twitch = "channel"→ twitch.tv/channel x = "handle"or twitter = "handle"→ x.com/handle youtube = "@channel"→ youtube.com/
twitterxx
# Social links with shortcuts and full URLs
[site.socials]
github = "org/repo"
discord = "invite-code"
linkedin = "company/name"
x = "handle"
mastodon = "https://mastodon.social/@handle"featured
featuredobject
Full route: "/docs/config/"- exact match Without slashes: "docs/config"- flexible path matching Label: "Features"- matches nav group labels Bare segment: config- matches last path segment
# Featured content keyed by docs dropdown
[site.featured.docs] # Matches /docs/ dropdown (bare segment)
title = "Quick Start"
description = "Get up and running"
cta = { label = "Start", route = "/docs/getting-started/" }nav
navarray
# Custom nav ordering with groups
[site]
nav = [
"/",
{ label = "Docs", children = [
"/docs/getting-started/",
"/docs/configuration/",
]},
"/about/",
]root
rootstring
exclude
excludearray
root.git/node_modules/
["**/*.draft.md", "temp/**"]
access
accessSiteAccessConfig
public: Anyone can access (default) subscriber: Subscribers to the site password: Users with the site password team: Team members only
# Configure route access restrictions
[site.access]
default = "public"
"/data" = "password"
"/internal" = "team"routes
routesobject
A simple string for the file path: "/about/" = "README.md"An object for redirects: "/old/" = { redirect = "/new/", status = 301 }An object for spreads: "/{region}/" = { file = "report.smd", arguments = { region = ["north", "south"] } }, e.g.
# Routes for files, redirects, and spread variants
[site.routes]
"/" = "index.md"
"/about/" = "README.md"
"/old-page/" = { redirect = "/new-page/", status = 301 }
"/{region}/{species}/" = { file = "report.smd", arguments = { region = ["north", "south"], species = ["ABC", "DEF"] } }layout
layoutLayoutConfig
glide
glideGlideConfig
search
searchSearchConfig
formats
formatsarray
["md"]
# Enable or disable additional formats
[site]
formats = ["md"] # Generate page.md files, show copy-markdown button
formats = [] # No additional formats, hide format buttonsreviews
reviewsSiteReviewsConfig
uploads
uploadsSiteUploadsConfig
remotes
remotesSiteRemotesConfig
actions
actionsSiteActionsConfig
auto_index
auto_indexAutoIndexConfig
site.rsgenerate.rs