Config Reference
File: src/config/config.toml · Skill level: Beginner
config.toml holds every site-wide setting. It is grouped into tables: a line in [brackets] starts a table, and every key = value line below it belongs to that table until the next one. The file has a comment beside almost every key; this page explains them in one place.
Site Identity
Table: [site]
| Key | What it does |
|---|---|
title | Site name. Used in page titles, the logo’s alt text, and {brand} in the copyright line |
description | Default description for search results and social previews |
tagline | Added after every page title (“Pricing - your tagline”). A page turns it off with disableTagline: true |
taglineSeparator | Text between title and tagline. Empty uses " - " |
baseUrl | Your live address, for example "https://www.acme.dev". Ships as the placeholder "https://example.com", and npm run build warns until you change it. Used for canonical URLs, the sitemap, robots.txt, RSS feeds, llms.txt, and social previews. A SITE_URL environment variable on the build overrides it |
logo | Path to a logo image. Empty shows the built-in mark |
logoText | Text next to the logo |
logoWidth, logoHeight | Logo size, for example "28px" |
trailingSlash | true makes every URL end with / (/pricing/). Restart the dev server after changing it |
[site.favicon] image | Source image for npm run generate-favicons. Leave path as it is |
Search Engines
Tables: [seo], [seo.robotsTxt], [seo.ai], [seo.sitemap]
| Key | What it does |
|---|---|
author | Default author meta tag |
keywords | Default keywords for pages without their own keywords |
robots | Default robots meta tag. The shipped value lets search and AI answers quote and preview pages |
[seo.robotsTxt] enable | Builds /robots.txt |
[seo.robotsTxt] disallow | Paths crawlers must skip, for example ["/drafts/"] |
[seo.robotsTxt] aiSearch | false asks the crawlers of AI answer engines (ChatGPT search, Claude, Perplexity, and others) not to fetch your pages, and sets ai-input=no in the Content-Signal line for all crawlers |
[seo.robotsTxt] aiTraining | false asks crawlers that collect content to train AI models to stay away. This includes Google-Extended, which Google also uses for grounding in Gemini apps. Also sets ai-train=no in the Content-Signal line for all crawlers |
[seo.ai] llmsTxt | Builds /llms.txt and /llms-full.txt, which some AI tools and coding agents can read |
[seo.ai] markdownPages | Builds a Markdown copy of posts, releases, features, and other pages at <page>.md |
[seo.ai] indexNowKey | Key for npm run indexnow. Empty turns IndexNow off |
[seo.sitemap] enable | Builds /sitemap-index.xml |
[seo.sitemap] exclude | Folder names to leave out of the sitemap |
Details: SEO & AI Visibility.
General Settings
Table: [settings]
| Key | What it does |
|---|---|
blogFolder | Folder name of the blog ("blog"). Changing it also means renaming the content and route folders and the collection in src/content.config.ts |
servicesFolder | Same, for the feature pages ("services") |
blogPagination | Posts per blog list page |
pagination | Items per page on other paginated lists (changelog) |
stickyHeader | Keeps the header pinned while scrolling |
docsUrl | Base URL of your documentation site. Relative links on the /docs/ page are resolved against it |
contactFormAction | Where the contact form sends messages. See Forms |
contactFormProvider | "formsubmit.co", "formspree", or "netlify" |
footerDescription | Footer description. Empty uses footer.description from src/i18n/<language>.json |
Header And Footer Layouts
Table: [settings.layout]
| Key | Values | What it does |
|---|---|---|
header | default · simple · centered | Header layout for every page |
footer | default · minimal · large | Footer layout for every page |
footerWordmark | interactive · static | The large brand name in the default footer: animated dots or plain text |
A page can pick its own with headerLayout and footerLayout in its frontmatter. Details: Header and Footer.
Search
Table: [settings.search]
| Key | What it does |
|---|---|
enable | Shows the search button and the ⌘K / Ctrl+K search modal |
exclude | Path prefixes to leave out of the index, for example ["/legal/"] |
Smooth Scroll
Table: [settings.smoothScroll]
Smooth scrolling powered by Lenis. enable turns it on or off; respectReducedMotion switches it off for visitors who ask for less motion; duration (higher feels slower) and easing (expo, linear, easeOutQuad, easeOutCubic) set the feel. Leave the other keys as they are unless you know Lenis.
Animations
Table: [settings.animation]
| Key | What it does |
|---|---|
enable | Fade-in animations as sections scroll into view |
respectReducedMotion | Shows content without animation for visitors who ask for less motion |
duration, distance, easing | How long, how far, and with which curve content moves in |
rootMargin, threshold | How early an element starts animating |
Cookie Banner
Table: [settings.cookieConsent]
| Key | What it does |
|---|---|
enable | Shows the cookie banner and holds consent-gated scripts until visitors choose |
revision | Raise it by 1 when your cookie use changes, to ask every visitor again |
Details: Cookies & Analytics.
Page Actions And AI Links
Table: [settings.pageActions]
| Key | What it does |
|---|---|
enable | The Copy page menu on posts, releases, roles, integrations, and customer stories |
footer | The footer row with “Ask AI about this page”, the Markdown copy, and llms.txt links |
providers | Assistants offered in “Ask”: any of "chatgpt", "claude", "perplexity", "grok". [] hides them |
Demo Layout Switcher
Table: [settings.layoutSwitcher]
enable = false is the default. true shows the floating Change layout button on the homepages, a demo feature for comparing section layouts. Keep it false on your production site: the pages then render only the layouts set in your content files, with no extra markup or script.
The theme’s demo deploys are built with the environment variable PUBLIC_DEMO_MODE=true, which turns the switcher on. Leave PUBLIC_DEMO_MODE unset on your site.
Copyright
Table: [settings.copyright]
enable shows the copyright line. text overrides footer.copyright from the i18n files; {year} and {brand} are replaced with the year and site.title.
Newsletter
Table: [settings.subscription]
| Key | What it does |
|---|---|
enable | Turns every newsletter form on or off |
title, note | Override subscription.title and subscription.note from the i18n files |
formAction | Your Mailchimp form URL. See Forms |
mailchimpTagValue | Optional Mailchimp tag added to new subscribers |
Languages
Table: [settings.multilingual]
| Key | What it does |
|---|---|
enable | false builds only the default language |
defaultLanguage | Language served without a prefix ("en") |
disableLanguages | Languages to skip, for example ["fr"] |
showDefaultLangInUrl | true adds the prefix to the default language too (/en/pricing/) |
Details: Internationalization.
Contact Details
Table: [settings.contactInfo]
phone, email, address, and officeHours used by the contact sections. phone and email are Markdown links, so you can write "[[email protected]](mailto:[email protected])".
Header Button And Link
Tables: [settings.navigationButton], [settings.navigationSecondaryLink]
The button at the right of the header (“Get started”) and the text link before it (“Log in”). Each has enable, label, and url. An empty label uses navigation.buttonLabel or navigation.secondaryLabel from the i18n files.
Code Blocks And Tables Of Contents
Tables: [settings.markup.codeBlocks], [settings.markup.tableOfContents]
| Key | What it does |
|---|---|
[settings.markup.codeBlocks] theme | auto follows light/dark mode; dark keeps code blocks dark in both |
[settings.markup.tableOfContents] | enable, startLevel, endLevel, ordered, and expanded for the “On this page” list on posts, legal pages, and guide feature pages |
Social Previews
Table: [opengraph]
| Key | What it does |
|---|---|
image | Shared preview image, used when a page has no image |
generateImages | true draws a 1200×630 preview card for every page without an image at build time |
theme | light or dark palette for the generated cards |
ogLocale, ogType | Open Graph locale and type |
twitter, twitterCard | X (Twitter) handle and card type |
Custom Head Scripts
Table: [head]
content is pasted into the <head> of every page. Use it for analytics, verification tags, or extra stylesheets. With the cookie banner on, mark tracking scripts so they wait for consent: see Cookies & Analytics.