Configuration
Configure Ardo's Vite plugin, generated routes, Markdown pipeline, TypeDoc output, and React UI.
Configuration
Ardo keeps configuration split where React teams expect it:
- Build behavior lives in the
ardo()Vite plugin: site metadata, routes, Markdown, TypeDoc, and deployment helpers. - UI behavior lives in React:
ArdoRoot, header/sidebar/footer props, component overrides, and runtime hooks.
This page documents the build-time options first, then points to the React-side UI hooks and components.
Basic Setup
import { defineConfig } from "vite"
import { ardo } from "ardo/vite"
export default defineConfig({
plugins: [
ardo({
title: "My Documentation",
description: "My awesome docs",
}),
],
})The ardo() function accepts an options object that combines site configuration (from ArdoConfig) with plugin-specific settings.
Site Configuration
These options control the identity and basic behavior of your documentation site.
title
- Type:
string - Required
The site title, used in the default <title> meta tag and displayed in the header.
ardo({
title: "My Documentation",
})description
- Type:
string - Default:
""
Site description for the default meta tags.
ardo({
title: "My Docs",
description: "A comprehensive guide to my library",
})titleSeparator
- Type:
string - Default:
" | "
Separator between the page title and the site title in <title> tags. For example, a page titled "Getting Started" produces Getting Started | My Docs.
ardo({
title: "My Docs",
titleSeparator: " - ",
})base
- Type:
string - Default:
"/"
Base URL path for the site. Set this if your docs live under a subpath.
ardo({
title: "My Docs",
base: "/docs/",
})When deploying to GitHub Pages, Ardo auto-detects the repository name and sets the base path for
you. See the githubPages plugin option below.
srcDir
- Type:
string - Default:
"content"
Content source directory, relative to the project root. Most React Router projects use app/routes/ through the route generator. srcDir remains available for config-driven content workflows and generated markdown output.
ardo({
title: "My Docs",
srcDir: "docs",
})outDir
- Type:
string - Default:
"dist"
Build output directory.
ardo({
title: "My Docs",
outDir: "build",
})lang
- Type:
string - Default:
"en"
Site language. Sets the lang attribute on the <html> element.
ardo({
title: "My Docs",
lang: "de",
})sidebar.sectionOrder
- Type:
string[] - Default:
[]
Controls the order of top-level sections in the generated sidebar from virtual:ardo/sidebar.
Use route directory names, without leading slashes. Sections listed here appear first in the
configured order. Any section not listed still appears automatically after the configured sections
using the normal generated order.
ardo({
title: "Product Docs",
sidebar: {
sectionOrder: ["guide", "reference", "api", "quality", "architecture", "archive"],
},
})Child pages inside each section keep their own generated order from frontmatter order values and
alphabetical fallback sorting.
Plugin Options
These options are specific to the ardo() Vite plugin and are not part of ArdoConfig.
routes
- Type:
ArdoRoutesPluginOptions | false - Default: automatic
Configuration for the automatic route generation plugin. Set to false to disable auto-routing entirely.
githubPages
- Type:
boolean - Default:
true
When true, Ardo auto-detects your GitHub repository name from the git remote and sets base: '/repo-name/' for GitHub Pages deployment.
ardo({
title: "My Docs",
githubPages: false, // Disable auto-detection
})icons
- Type:
false | { source?: string } - Default: automatic Ardo icon set
Ardo generates a lean favicon set at build time and serves it during development:
/favicon.ico, /icon.svg, and /apple-touch-icon.png. This matches the modern minimal browser
set without adding a web app manifest or legacy apple-touch-icon-precomposed.png files.
ardo({
title: "My Docs",
icons: {
source: "./app/assets/logo.svg",
},
})Set icons: false if you want to manage all root icon files yourself from public/.
routesDir
- Type:
string - Default:
"./app/routes"
Directory where route files are located.
ardo({
title: "My Docs",
routesDir: "./src/routes",
})Markdown
Markdown processing options are configured under the markdown key.
ardo({
title: "My Docs",
markdown: {
theme: { light: "github-light-default", dark: "github-dark-default" },
lineNumbers: true,
},
})markdown.theme
- Type:
BundledTheme | { light: BundledTheme; dark: BundledTheme } - Default:
{ light: "github-light-default", dark: "github-dark-default" }
Syntax highlighting theme. Can be a single Shiki theme name or a light/dark pair.
markdown: {
theme: "one-dark-pro",
}markdown.lineNumbers
- Type:
boolean - Default:
false
Show line numbers in code blocks.
markdown.anchor
- Type:
boolean - Default:
true
Enable anchor links on headings.
markdown.toc
- Type:
{ level?: [number, number] } - Default:
{ level: [2, 3] }
Table of contents configuration. The level tuple specifies which heading levels to include (min, max).
markdown: {
toc: {
level: [2, 4], // Include h2, h3, and h4
},
}markdown.remarkPlugins
- Type:
unknown[] - Default:
[]
Additional remark plugins for markdown processing. Ardo already includes remark-frontmatter, remark-mdx-frontmatter, and remark-gfm.
markdown.rehypePlugins
- Type:
unknown[] - Default:
[]
Additional rehype plugins for HTML processing. Ardo already includes @shikijs/rehype for syntax highlighting.
TypeDoc
Enable TypeDoc API documentation generation. Pass true for defaults or an object for fine-grained control.
ardo({
title: "My Docs",
typedoc: true, // Enable with defaults (./src/index.ts)
})typedoc (boolean shorthand)
- Type:
true
Enables TypeDoc with default settings — reads from ./src/index.ts and outputs to content/api-reference/.
typedoc.enabled
- Type:
boolean - Default:
true
Explicitly enable or disable TypeDoc generation.
typedoc.entryPoints
- Type:
string[] - Required (when using object config)
Entry point files for TypeDoc.
typedoc: {
entryPoints: ["./src/index.ts", "./src/utils.ts"],
}typedoc.tsconfig
- Type:
string - Default: auto-detected
Path to the TypeScript configuration file for TypeDoc.
typedoc: {
entryPoints: ["./src/index.ts"],
tsconfig: "./tsconfig.api.json",
}typedoc.out
- Type:
string - Default:
"content/api-reference"
Output directory for generated API documentation.
typedoc.exclude
- Type:
string[]
Glob patterns for files to exclude from documentation.
typedoc.excludeExternals
- Type:
boolean
Exclude external modules from documentation.
typedoc.excludePrivate
- Type:
boolean
Exclude private members from documentation.
typedoc.excludeProtected
- Type:
boolean
Exclude protected members from documentation.
typedoc.excludeInternal
- Type:
boolean
Exclude @internal tagged items from documentation.
typedoc.sort
- Type:
Array<"source-order" | "alphabetical" | "enum-value-ascending" | "enum-value-descending" | "required-first" | "visibility">
Sorting strategy for documented items.
typedoc: {
entryPoints: ["./src/index.ts"],
sort: ["alphabetical", "required-first"],
}typedoc.watch
- Type:
boolean
Enable watch mode for TypeDoc during development.
typedoc.sidebar
- Type:
{ title?: string; position?: number; collapsed?: boolean }
Sidebar configuration for the generated API reference section.
typedoc.markdown
- Type:
{ breadcrumbs?: boolean; hierarchy?: boolean; sourceLinks?: boolean; sourceBaseUrl?: string; codeBlocks?: boolean }
Options controlling the generated markdown output.
UI Configuration
Navigation, sidebar, footer, editLink, lastUpdated, and search are configured via JSX props in your root.tsx using <ArdoRoot>. See Custom Theme for details.
Frontmatter
Per-page configuration is done through frontmatter in your MDX files. See the dedicated Frontmatter page for all available options.
Full Example
import { defineConfig } from "vite"
import { ardo } from "ardo/vite"
export default defineConfig({
plugins: [
ardo({
title: "My Library",
description: "Comprehensive documentation for My Library",
lang: "en",
markdown: {
theme: { light: "github-light-default", dark: "github-dark-default" },
lineNumbers: false,
toc: { level: [2, 3] },
},
typedoc: {
entryPoints: ["./src/index.ts"],
tsconfig: "./tsconfig.api.json",
},
}),
],
})