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 most keys; this page explains them in one place.
Site Identity
Table: [site]
| Key | What it does |
|---|---|
title | Site name, used in page titles, social previews, and structured data |
description | Default description for search results and social previews |
tagline | Added after page titles (“Pricing - your tagline”). Ships empty, which uses common.tagline from src/i18n/<language>.json, so each language has its own. A page turns it off with disableTagline: true |
taglineSeparator | Text between title and tagline. Empty uses " - " |
baseUrl | Your live address, for example "https://www.example.com". Ships empty. Used for canonical links, the sitemap, robots.txt, RSS feeds, llms.txt, Open Graph URLs, and structured data. A SITE_URL environment variable on the build wins over it |
logo | Main logo, for light backgrounds |
logoLight | Logo for dark footers |
logoAlternate | Logo shown on transparent headers over images |
logoText | Text next to the logo. Empty shows the image only |
logoWidth, logoHeight | Logo size, for example "30px" |
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 |
Details: Site Identity & Logo.
Search Engines And AI Files
Tables: [seo], [seo.ai], [seo.robotsTxt], [seo.sitemap]
| Key | What it does |
|---|---|
author | Default author meta tag, and the organization name in structured data |
keywords | Default keywords for pages without their own keywords |
robots | Default robots meta tag ("index, follow") |
[seo.ai] llmsTxt | Builds /llms.txt and /llms-full.txt, one per language |
[seo.ai] markdownPages | Builds a Markdown copy of posts, solutions, industries, projects, roles, profiles, the FAQ, and legal pages at <page>.md |
[seo.robotsTxt] enable | Builds /robots.txt |
[seo.robotsTxt] disallow | Paths crawlers must skip, for example ["/landing/"] |
[seo.sitemap] enable | Builds /sitemap-index.xml (only when baseUrl is set) |
[seo.sitemap] exclude | Folder names to leave out of the sitemap |
Details: SEO & AI Visibility.
General Settings
Table: [settings]
| Key | What it does |
|---|---|
blogFolder, portfolioFolder, testimonialFolder, careersFolder | Folder names of the collections, which are also their URLs. Keep them as they are: renaming one also means renaming the content and route folders and editing src/content.config.ts and the routes that read the collection |
pagination | Items per page on the blog category and tag pages (/blog/category/<name>/page/2/) and the portfolio lists; /blog/ itself shows 10 per page |
stickyHeader | The main navigation bar sticks to the top while scrolling up and hides while scrolling down. Top bars always scroll away |
contactFormAction | Where the contact forms send messages. Ships empty, so no form sends anything until you set it |
contactFormProvider | "formsubmit.co" (default), "formspree", or "netlify" |
footerDescription | Footer description. Empty uses footer.description from src/i18n/<language>.json |
companyDesk | The file or page linked as Company Desk in the footer ("/company-desk.pdf", a file in public/) |
Details: Forms.
Motion
Tables: [settings.headingAnimation], [settings.animatedNumbers], [settings.smoothScroll], [settings.cursor]
| Key | What it does |
|---|---|
[settings.headingAnimation] enable | Reveals headings as they scroll into view |
style | "chars" (letters slide in), "words" (word by word), or "fade" |
duration, stagger | Seconds per word or heading, and seconds between words ("words" only) |
selector, exclude | Which headings animate, and which are skipped |
[settings.animatedNumbers] enable, duration | Count-up animation for statistics such as “98%” or “250+” |
[settings.smoothScroll] | Smooth scrolling (Lenis): enable, respectReducedMotion, duration, wheelMultiplier, keyboardShortcuts, keyboardDuration |
[settings.cursor] | The circle that follows the mouse: enable, size, hoverSize, opacity, borderWidth, followRatio |
Details: Animations.
Copyright
Table: [settings.copyright]
enable shows the copyright line in every footer. text overrides footer.copyright from the i18n files; leave it empty on a multilingual site.
Footer Newsletter
Table: [settings.subscription]
| Key | What it does |
|---|---|
enable | Shows the newsletter form in the homepage and corporate footers. It stays disabled until formAction is set |
title, note | Override the form’s title and note. Empty uses footer-newsletter-grid.md (homepage footer) or the i18n subscription text |
formAction | Your Mailchimp form URL |
mailchimpTagValue | Optional numeric Mailchimp tag ID, sent as the hidden tags field |
The newsletter section used on inner pages has its own settings in src/content/sections/english/newsletter.md. See Forms.
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.
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, hours, and mapLink, used by the footers and the contact drawer. phone and email are Markdown links, so you can write "[[email protected]](mailto:[email protected])". address accepts <br /> for a line break. The shipped values are demo data.
Header
Tables: [settings.headerOffcanvas], [settings.headerTopBar], [settings.officeDropdown], [settings.headerActions], [settings.navigationButton]
| Setting | What it does |
|---|---|
[settings.headerOffcanvas] | The contact drawer opened from the header: enable, logo, description, and a button |
[settings.headerTopBar] | The strip above the menu: enable, email, phone, address, hours, the show… switches, a highlighted link, and the style per header (layouts) |
[settings.officeDropdown] | The Our office list in the top bar: enable, label, and offices (name, flag, url) |
[settings.headerActions] exploreUrl | The search button’s destination. Empty hides search; "/search/" uses the included search page |
[settings.headerActions] exploreLabel | The search button text. Empty uses the translated label |
[settings.headerActions] enableOffcanvas | Shows the drawer toggle. Both this and [settings.headerOffcanvas] enable must be true |
[settings.navigationButton] | The button at the right of the header: enable, label, url |
Details: Header.
Table Of Contents
Social Previews
Table: [opengraph]
| Key | What it does |
|---|---|
image | Shared preview image (/images/og-image.jpg, in public/), used when a page has no image |
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.