Preset Options
Configure every Nova-owned setting for @cbnventures/docusaurus-preset-nova in docusaurus.config.ts.
Which defaults are these?
Every default on this page is chosen or stabilized by Nova. Defaults for the forwarded Docusaurus content plugins are labeled separately in the Plugin Options reference.
Top-Level Options
presets: [[
'@cbnventures/docusaurus-preset-nova',
{
preset: 'envoy',
overrides: { /* ... */ },
plugins: { /* ... */ },
analytics: { /* ... */ },
persistentCache: false,
search: { /* ... */ },
progressBar: true,
iconSafelist: ['logos:slack'],
maxBundleFileSize: 3,
},
]],
| Option | Type | Nova default | Description |
|---|---|---|---|
preset | 'envoy' | 'foundry' | 'lantern' | 'marshal' | 'sentinel' | 'signal' | — | Select the visual preset. Required. |
overrides | object | {} | Override individual preset values. See Overrides below. |
plugins | object | {} | Configure the included Docusaurus content plugins. See Plugin Options. |
analytics | object | {} | Configure conditional analytics integrations. See Analytics below. |
persistentCache | boolean | false | Choose whether webpack may retain filesystem caches. |
search | object | false | false | Configure Nova local search. false disables indexing and the search interface. |
progressBar | boolean | object | false | Configure the route-transition progress bar. |
iconSafelist | string[] | [] | Bundle dynamically constructed Iconify identifiers. |
maxBundleFileSize | number | false | 3 | Set the maximum emitted JavaScript file size in MiB, or disable the guard. |
Overrides
Override any visual property of the active preset. Unspecified values keep the preset defaults.
Only four override categories are exposed: colors, fonts, navbar, and footer. The preset's shape, depth, and motion characteristics are part of its identity and cannot be overridden — switch to a different preset if you need a different feel.
Colors
Each color category accepts a { light, dark } pair of hex strings. Both keys are optional within each category — omitted values fall back to the active preset's defaults.
| Option | Type | Default | Description |
|---|---|---|---|
colors.primary.light | string | Preset value | Primary brand color in light mode (hex). |
colors.primary.dark | string | Preset value | Primary brand color in dark mode (hex). |
colors.secondary.light | string | Preset value | Secondary accent color in light mode (hex). |
colors.secondary.dark | string | Preset value | Secondary accent color in dark mode (hex). |
colors.text.light | string | Preset value | Body text color in light mode (hex). |
colors.text.dark | string | Preset value | Body text color in dark mode (hex). |
colors.border.light | string | Preset value | Border and divider color in light mode (hex). |
colors.border.dark | string | Preset value | Border and divider color in dark mode (hex). |
colors.warning.light | string | Preset value | Warning admonition base color in light mode (hex). |
colors.warning.dark | string | Preset value | Warning admonition base color in dark mode (hex). |
colors.danger.light | string | Preset value | Danger/error admonition base color in light mode (hex). |
colors.danger.dark | string | Preset value | Danger/error admonition base color in dark mode (hex). |
The primary and secondary colors expand to 11-level shade scales (50 through 950) as CSS custom properties. The text, border, warning, and danger colors are used as single values plus derived color-mix tokens.
Fonts
| Option | Type | Default | Description |
|---|---|---|---|
fonts.display | string | Preset value | Display/heading font family name. |
fonts.body | string | Preset value | Body text font family name. |
fonts.code | string | Preset value | Code/monospace font family name. |
Navbar and Footer
| Option | Type | Default | Description |
|---|---|---|---|
navbar | 'bridge' | 'canopy' | 'monolith' | 'compass' | Preset value | Navbar variant. |
footer | 'commons' | 'embassy' | 'ledger' | 'launchpad' | Preset value | Footer variant. |
Analytics
| Option | Type | Default | Description |
|---|---|---|---|
analytics.gtm | object | undefined | undefined | Google Tag Manager configuration. |
analytics.gtm.containerId | string | — | GTM container ID (e.g., 'GTM-XXXXXXX'). |
Webpack Cache
Nova avoids persistent webpack cache files by default so multilingual development sessions and builds do not accumulate a separate disk cache for every locale and compiler target.
docusaurus startuses webpack's in-memory cache for fast rebuilds during the current development session.docusaurus builddisables webpack caching because a production build does not benefit from retaining those files afterward.
Set persistentCache to true to leave Docusaurus's filesystem cache behavior unchanged. This can make repeated builds faster in environments with enough disk space.
{
preset: 'envoy',
persistentCache: true,
}
Search
See Search for the full options table and explanation.
Progress Bar
Set progressBar to true to use all Nova defaults, or pass an object to override individual behavior. The bar starts when Docusaurus begins a client-side route update and completes after the next route has been preloaded. It does not flash during the initial page load.
{
preset: 'envoy',
progressBar: {
showSpinner: false,
speed: 250,
},
}
| Option | Type | Nova default | Description |
|---|---|---|---|
progressBar | boolean | object | false | Enable route progress with defaults or provide the configuration below. |
progressBar.minimum | number | 0.08 | Set the initial visible progress between 0 and 1. |
progressBar.easing | string | 'ease' | Set the CSS transition timing function. |
progressBar.positionUsing | '' | 'translate3d' | 'translate' | 'margin' | '' | Choose the positioning method; empty lets the implementation detect one. |
progressBar.speed | number | 200 | Set transition duration in milliseconds. |
progressBar.trickle | boolean | true | Increment the unfinished bar automatically. |
progressBar.trickleRate | number | 0.02 | Add this fraction during each trickle step, between 0 and 1. |
progressBar.trickleSpeed | number | 800 | Wait this many milliseconds between trickle steps. |
progressBar.showSpinner | boolean | true | Render the spinner defined by the template. |
progressBar.barSelector | string | '[role="bar"]' | Find the progress-bar element inside the template. |
progressBar.spinnerSelector | string | '[role="spinner"]' | Find the spinner element inside the template. |
progressBar.parent | string | 'body' | Mount the generated progress markup inside this CSS selector. |
progressBar.template | string | Built-in bar/spinner markup | Replace the generated HTML; keep it aligned with the two selector settings. |
The supported fields above receive stable Nova defaults. Additional advanced fields are forwarded to the bundled progress implementation, but Nova does not assign them a compatibility guarantee.
Icon Safelist
The preset bundles only the icons it finds by scanning your docs, blog, and src files plus the resolved themeConfig at build time. Any icon referenced with a static prefix:name string — in MDX, component props, or config — is discovered automatically and tree-shaken into the build, so there is nothing to install and the client never ships icons you don't use.
Use iconSafelist for the one case the scan can't see: an icon identifier assembled dynamically at runtime (for example, built from a variable). List those identifiers so they are always bundled.
{
preset: 'envoy',
iconSafelist: ['logos:slack', 'mdi:rocket-launch'],
}
Bundle Size
A production build (docusaurus build) fails if any emitted JavaScript file is larger than maxBundleFileSize mebibytes (MiB) (default 3). This catches a bundle-size regression — an accidentally eager import, an un-tree-shaken dependency — at build time, long before it slows real page loads or trips a host's per-file limit.
The error names the offending files.
Raise the limit if a site has a genuinely large legitimate chunk, or set it to false to turn the check off entirely.
{
preset: 'envoy',
maxBundleFileSize: 5, // mebibytes (MiB); or false to disable
}
Included Stack
Nova installs and coordinates more than the four configurable content plugins. See Preset Stack for every included plugin, runtime, build-time integration, CLI dependency, and required peer—plus how each one is activated and used.