Configuration
Caravan declares its configurable options in theme.yaml's config_schema.
Values are stored in data/theme-config.json and editable from the admin
panel's Theme Settings tab (Settings → Theme), or by hand in that file.
Options
| Key | Type | Default | What it does |
|---|---|---|---|
color_scheme |
select | blue |
Accent color + sidebar tint. One of blue, slate, green, purple, amber, rose, terracotta, teal (labels: Cobalt, Emerald, Indigo, Crimson, …) — see Customization for what each pair actually contains. |
scheme_switcher |
toggle | false |
Adds a sidebar dropdown so visitors can preview the other presets client-side (stored in their browser's localStorage). Doesn't change your site's actual color_scheme — off by default, since most sites want one consistent brand color rather than letting visitors repaint the site. This demo has it turned on so you can try the presets. |
show_search |
toggle | true |
Shows the live search box at the top of the sidebar. |
flat_nav |
toggle | false |
The sidebar shows the full nested page tree by default (current page's ancestor sections start expanded). Turn this on to show only top-level pages instead. |
nav_expand |
select | auto |
auto: sections open only around the current page, no chevron. click: adds a chevron so visitors can also expand/collapse sections manually. Ignored when flat_nav is on. |
footer_text |
text | (empty) | Replaces the default "Built with Dune — theme Caravan" footer line. |
Setting them
data/theme-config.json is namespaced by theme name, so switching themes
and back doesn't discard your settings:
// data/theme-config.json
{
"caravan": {
"color_scheme": "green",
"show_search": true,
"footer_text": "© 2026 Acme Docs"
}
}
Or through the admin panel, which renders a form from the same
config_schema (dropdowns for select fields, real checkboxes for
toggle, a native color picker for color) — no code changes needed for
any of the above.
Per-page and per-section overrides
A page or section can override any of the options above for itself and its
descendants with a theme_config: block in frontmatter — the same
mechanism collections: uses. Site-level config applies first, then the
nearest ancestor section's theme_config, then the page's own — each layer
only overriding the keys it sets:
# a section's default.md
title: Blog
theme_config:
color_scheme: purple
Every page under that section renders with color_scheme: purple instead
of the site-level default, without Caravan needing to know or care —
props.themeConfig already arrives pre-resolved by the time a template
sees it.