All configuration for your Viabl project lives in a single docs.json file at the root of your project. Add the $schema field to get full intellisense and validation in VS Code.
{
"$schema": "https://viabl.dev/schema/docs.json",
"name": "My Docs",
"navigation": [
{
"group": "Getting Started",
"pages": ["introduction"]
}
]
}Only name and navigation are required. Everything else is optional.
Identity
namestringrequiredThe name of your documentation site. Shown in the browser tab and header.
faviconstringPath to your favicon relative to the project root.
{ "favicon": "/favicon.png" }Logo
Controls the logo shown in the top left of your docs.
logo.lightstringPath to the logo image used in light mode.
logo.darkstringPath to the logo image used in dark mode.
logo.hrefstringURL to navigate to when the logo is clicked. Defaults to the docs root.
"logo": {
"light": "/logo/light.svg",
"dark": "/logo/dark.svg",
"href": "https://example.com"
}Colors
Brand color configuration. Controls the accent colors used throughout your docs.
colors.primarystringBase brand color used as the default accent. Example: #ff5800
colors.lightstringColor variant for light backgrounds — usually darker or more saturated for contrast on white.
colors.darkstringColor variant for dark backgrounds — usually lighter or more vibrant to pop on dark.
colors.background.lightstringBackground color for light mode. Supports CSS gradients.
colors.background.darkstringBackground color for dark mode. Supports CSS gradients.
colors.anchors.fromstringStart color of the anchor icon gradient in the sidebar.
colors.anchors.tostringEnd color of the anchor icon gradient in the sidebar.
"colors": {
"primary": "#ff5800",
"light": "#ff5800",
"dark": "#ff7733",
"background": {
"dark": "radial-gradient(ellipse 80% 50% at 50% -20%, rgba(255,88,0,0.15), transparent), #0c0d0f",
"light": "#ffffff"
},
"anchors": {
"from": "#ff5800",
"to": "#ce0569"
}
}Fonts
Custom font configuration for headings and body text.
font.headings.familystringFont family name for headings. Example: Inter
font.headings.urlstringURL to load the heading font from. Example: a Google Fonts CSS URL.
font.body.familystringFont family name for body text.
font.body.urlstringURL to load the body font from.
"font": {
"headings": {
"family": "Geist",
"url": "https://fonts.googleapis.com/css2?family=Geist"
},
"body": {
"family": "Geist",
"url": "https://fonts.googleapis.com/css2?family=Geist"
}
}Navigation
The sidebar navigation structure. Viabl supports three navigation formats — a simple array of groups, a dictionary mapped to tabs, and raw strings for headerless sidebar items.
navigationNavigationGroup[] | Record<string, NavigationGroup[]>requiredThe sidebar navigation structure. Accepts a flat array of groups for simple sites, or a dictionary object mapping tab URLs to navigation arrays for tabbed sites.
"navigation": [
{
"group": "Getting Started",
"icon": "BookOpen",
"pages": ["introduction", "getting-started"]
}
]See the Navigation page for all supported formats including dictionary navigation, persistent sidebar items, and raw string pages.
Top Bar
Links
topbarLinks[].namestringrequiredDisplay text for the link.
topbarLinks[].urlstringrequiredURL the link points to.
topbarLinks[].blankbooleanWhether the link opens in a new tab. Defaults to false.
"topbarLinks": [
{ "name": "Support", "url": "https://example.com/support", "blank": true }
]CTA Button
topbarCtaButton.namestringrequiredButton label text.
topbarCtaButton.urlstringrequiredURL the button links to.
topbarCtaButton.style"fill" | "outline"Visual style of the button. Defaults to fill.
topbarCtaButton.arrowbooleanWhether to show an arrow icon next to the label. Defaults to false.
topbarCtaButton.iconstringIcon name to show inside the button.
topbarCtaButton.anchorbooleanPin the button to the right side of the top bar.
"topbarCtaButton": {
"name": "Get Started",
"url": "https://example.com/signup",
"style": "fill",
"arrow": true
}Tabs
Tabs shown below the top navigation bar for switching between major sections.
tabs[].namestringrequiredTab label text.
tabs[].urlstringrequiredURL default path that should be open by default when we open the tab.
tabs[].iconstringIcon name shown next to the tab label.
tabs[].anchorbooleanPin this tab to the right side of the tab bar.
"tabs": [
{ "name": "Documentation", "url": "docs", "icon": "BookOpen" },
{ "name": "API Reference", "url": "api-reference", "icon": "Code2" }
{"name": "Feedback", "url": "feedback", "icon": "Code2", "anchor": true }
]Anchors
Special links shown at the top of the sidebar before navigation groups. Good for GitHub, Discord, or any external link you want to surface prominently.
anchors[].namestringrequiredDisplay name of the anchor link.
anchors[].urlstringrequiredURL the anchor links to.
anchors[].iconstringIcon name shown next to the anchor.
anchors[].colorstringCustom color for the anchor icon.
"anchors": [
{
"name": "GitHub",
"icon": "Github",
"url": "https://github.com/your-org/your-repo",
"color": "#333333"
},
{
"name": "Discord",
"icon": "MessageCircle",
"url": "https://discord.gg/your-invite",
"color": "#5865f2"
}
]Versions
Show a version switcher in the top bar to let users switch between different versions of your docs.
versionsstring[]List of version identifiers. Each version should have a corresponding folder at the project root.
defaultVersionstringThe version shown by default. Must match one of the values in versions.
json "versions": ["v1", "v2"], "defaultVersion": "v2"
Each version folder should mirror your root docs structure. For example
v2/introduction.mdx serves the introduction page for version v2.
Footer Socials
Social media links shown in the footer.
footerSocials.xstringfooterSocials.githubstringfooterSocials.linkedinstringfooterSocials.discordstringfooterSocials.youtubestringfooterSocials.websitestring"footerSocials": {
"github": "https://github.com/your-org",
"x": "https://x.com/your-handle",
"discord": "https://discord.gg/your-invite"
}SEO
seo.indexHidingbooleanSet to true to prevent search engines from indexing your entire docs site.
Defaults to false. To hide individual pages only, use noIndex in page
frontmatter.
seo.og.titlestringTitle shown in social media previews.
seo.og.descriptionstringDescription shown in social media previews.
seo.og.imagestringPath to the Open Graph image. Recommended size is 1200 × 630px.
aiScrapingbooleanWhether to allow known AI crawlers to index your docs. Defaults to true. Set
to false to block AI bots via the generated robots.txt.
"aiScraping": false,
"seo": {
"indexHiding": false,
"og": {
"title": "My Docs",
"description": "Documentation for My Product",
"image": "/og-image.png"
}
}Viabl also generates a sitemap, robots.txt, and llms.txt automatically. See the SEO & Discoverability page for the full reference.
Search
search.promptstringPlaceholder text shown in the search bar. Defaults to Search documentation...
"search": {
"prompt": "Search the docs..."
}AI assistant
Add an AI assistant to your docs that answers user questions grounded in your content.
ai.provider"anthropic" | "openai" | "ollama"requiredThe AI provider to use.
ai.apiKeystringYour API key. Supports ${ENV_VAR} interpolation — never commit keys
directly.
ai.modelstringThe model to use for responses.
ai.suggestedQuestionsstring[]Starter questions shown to users when they open the assistant.
ai.rulesstring[]Instructions the AI strictly follows when responding.
"ai": {
"provider": "anthropic",
"apiKey": "${ANTHROPIC_API_KEY}",
"suggestedQuestions": [
"How do I get started?",
"How do I deploy my docs?"
]
}See the AI Assistant page for the full reference including Ollama setup and environment variable usage.
Feedback
Let readers rate pages, suggest edits, or raise issues directly from your docs.
feedback.thumbsRatingbooleanShow thumbs up/down rating buttons at the bottom of each page.
feedback.suggestEditbooleanShow a Suggest Edit link that opens the page source on GitHub.
feedback.raiseIssuebooleanShow a Raise Issue link that opens a new GitHub issue.
feedback.webhookstringURL to POST feedback data to when a user submits a rating.
feedback.githubRepostringGitHub repository URL used for Suggest Edit and Raise Issue links.
"feedback": {
"thumbsRating": true,
"suggestEdit": true,
"raiseIssue": true,
"githubRepo": "https://github.com/your-org/your-repo"
}