Configuration
All configuration lives in ciderpress.config.ts at your repo root. Use defineConfig for type safety and autocompletion.
Configuration is loaded via c12. Supported file formats: .ts, .mts, .js, .mjs, .json, .jsonc, .yml, .yaml.
pages is the only required field. Every other top-level key is optional — minimal config produces a clean site with zero framework branding.
Site identity
Top-level scalar fields that identify the site itself.
brand
Brand chrome — icon, wordmark, hero background, favicon, and the inline FOUC loader. Defaults to invisible: omit any field to render nothing in that slot.
BannerFn
The function receives the active theme context and returns either an image source or a React node. Use the React-node variant for SVG-defined hero art that needs to respond to theme tokens.
LoaderConfig
label is read by screen readers. minDisplayMs and maxDisplayMs clamp visible duration so the loader doesn't flash or hang.
theme
Theming uses a single array of theme entries. The first entry is the default unless one is explicitly marked. Both the named-theme picker and the light/dark variant toggle are independent — themeSwitcher and variantSwitcher.
ThemeEntry
Built-in names and full custom theme definitions share the same array. Either form accepts a default: true marker to override the "first entry wins" rule.
pages
The information architecture tree. Required. Each entry is a Page — the same shape used for leaf documents, sidebar groups, and glob-discovered sections.
Renamed from sections (Page replaces the old Section interface). Children live on Page.pages (renamed from items).
Page
Identity
Source — declare exactly one
nav.* — navigation behavior
Grouped together so per-page chrome flags don't sprawl across the top level of Page.
Landing + card
CardConfig
Card content resolves from this priority order (highest first): card.description → source file frontmatter description → Page.description.
defaults — default page metadata
Renamed from frontmatter. Same Frontmatter type — values here are merged into every child page's frontmatter; per-file YAML wins on conflict.
discover.* — glob-discovery options
Only applies when include is a glob. Renamed from the flat Section.{sort,recursive,exclude,entryFile} fields.
openapi
Per-page OpenAPI spec integration. Generates API operation pages under the page's path. See OpenAPISpec for the shape.
Examples
Leaf page from a single file:
Group with explicit children:
Glob-discovered section with discovery options:
apps, packages, workspaces
Top-level workspace surfaces. Kept flat — apps and packages are the common cases; workspaces is for arbitrary custom groups like "Integrations" or "Plugins".
All three drive the home page card grid (via home.showcase), the auto-generated landing card on their parent, and the workspace introduction page.
Workspace
WorkspaceGroup
OpenAPISpec
Per-page or per-workspace OpenAPI integration. The same shape lives on Page.openapi and Workspace.openapi — declare it once at the mount point you want the API operation pages to live under.
When declared on a Workspace, path must be nested under the workspace's own path — that's checked at validate time. See the OpenAPI reference for a full walkthrough.
socials
Root-level array of social links. Single source of truth — both topbar.socials and footer.socials reference this list via true.
SocialLink
The Rspress mode/content discriminator is no longer exposed — every link is a URL link.
Built-in SocialLinkIcon values:
Any icon outside this set must be supplied as { svg: '<svg>...</svg>' }.
Boolean reference pattern
topbar.socials and footer.socials accept either true (reuse root socials) or SocialLink[] (override with a specific list for that surface).
topbar
Top navigation bar — nav items, primary CTA, social row, announcement banner.
nav: 'auto' rule
Auto-nav emits one top-level entry per root
pagesentry that has apath. Children are not flattened into dropdowns. Roots withnav.hidden: trueare skipped. Workspaces declared via top-levelapps/packages/workspacesare not included — they show on the home grid only. For dropdowns or workspace items in the topbar, use the explicitNavItem[]form.
NavItem
AnnouncementConfig
sidebar
Persistent sidebar chrome — links pinned above and below the nav tree, plus the optional promo card.
SidebarLink
Sidebar links use ButtonConfig directly — no separate type. The same text/href/variant/shape/icon vocabulary as every other button surface.
SidebarPromo
badges
Badge configuration — glob rules that apply a badge (or a named status) by route, plus the group flag for collapsible-doc groups. Badges render on the sidebar, breadcrumb, and section cards. A page's own frontmatter or defaults badge/status wins over a rule. See the Badges reference for the full model.
BadgeRule
Declare at least one of badge or status. match supports *, **, and ?.
statuses
The named status registry — the semantic layer over badges. A status is a reusable, documented preset referenced by id from a page's status field. Entries merge over the built-in defaults by id (matching ids override, new ids extend).
footer
Unified footer config — the old top-level footer and site.footer are now one block.
Smart copyright
copyright: true produces Copyright © <currentYear> <title>. using the top-level title and the year at build time. Pass a string to override verbatim, or a CopyrightConfig for structured company / DBA / year-range output.
CopyrightConfig
FooterColumn
Security note — every
hrefinfooter.*,sidebar.*, andtopbar.*is validated through a safe-URL helper that rejectsjavascript:,data:,vbscript:, andfile:schemes. Relative paths, fragment anchors,http://,https://,mailto:, andtel:are allowed.
editLink and reportLink
Per-page chrome — the "Edit on GitHub" and "Report an issue" links rendered under every doc page. Flattened to the top level to match the industry pattern (VitePress, Nextra). Set either to false to disable that action site-wide.
EditLinkConfig
ReportLinkConfig
Identical shape to EditLinkConfig. repo may be either "org/repo" shorthand or a full issues URL; default label is "Report an issue".
feedback
Controls the "Was this page helpful?" yes/no widget rendered at the bottom of every doc page. Off by default.
home
Home page layout — hero, proof strip, features grid, showcase grid, split section, final CTA, and the render-order layout list.
HomeHeroConfig
HomeHeroDemoConfig
A discriminated union covering both demo forms:
The image form paints an <img> into the demo container; the terminal form keeps the framework's terminal chrome and renders the supplied command + output lines.
HomeProofConfig
Renamed from home.trust / HomeTrustConfig — plain English over design jargon.
HomeFeaturesConfig
Each Feature:
HomeShowcaseConfig
Generalized card grid — the second home block. Replaces home.workspaces. Default source is the combined apps + packages + workspaces list; you can also point it at an arbitrary list of page paths.
HomeSplitConfig
A two-column split section (code/visual on one side, copy on the other). Pass false at the parent (home.split: false) to omit the section entirely.
HomeSplitVisual
HomeCtaConfig
HomeLayoutEntry
Shared home types
These small shapes are reused across multiple home blocks (features, showcase):
TruncateConfig values are maximum visible lines before CSS line-clamp clips with an ellipsis. HomeSectionHeading.label is the small uppercase kicker rendered above the title.
HomeSectionId
Renamed from the old 'hero' | 'trust' | 'features' | 'split' | 'workspaces' | 'cta'.
discover
Top-level cross-cutting discovery options. Only field is ignore — global glob patterns excluded from every page's auto-discovery.
Per-page discover.ignore is appended to this list — globals always apply.
templates
Directory or directories holding custom document templates used by ciderpress draft. Each is a .md/.mdx file with label/hint frontmatter; the filename is the template type. Paths are relative to the repo root.
A custom template whose filename matches a built-in (e.g. guide.md) overrides it. .mdx templates scaffold to .mdx files. Templates are validated by ciderpress templates check and as part of check/build. See Templates for the authoring format and the SDK.
devServer
Dev-server configuration — controls how ciderpress dev binds and how the dev URL is presented in the terminal and browser auto-open. All fields are optional.
CLI precedence: --port / --host / --url > devServer.{port,host,url} > built-in defaults.
Example — behind portless.sh
The dev server still binds localhost:6174; portless reverse-proxies the HTTPS hostname to that port. See the portless guide for setup.
Example — exposing to LAN / Docker
Shared primitives
Types reused across multiple top-level keys. Same shape, same meaning, everywhere.
IconConfig
Uniform across every position — brand.icon, Page.icon, Workspace.icon, WorkspaceGroup.icon, Feature.icon, ButtonConfig.icon. Either a plain Iconify identifier ('pixelarticons:book-open'), an Iconify id with explicit color, or an arbitrary image source.
TitleConfig
Uniform across every title field that supports derivation — Page.title and Workspace.title. Plain string for static titles, or a derivation rule for auto-discovered children. The transform hook receives the derived title and the filename slug. (WorkspaceGroup.title is a plain string only.)
ButtonConfig
Unified button vocabulary. Replaces the three old button shapes (HeroAction.theme, SidebarLink.style, and the third unnamed variant). Used by home.hero.actions, home.cta.actions, topbar.cta, sidebar.top / sidebar.bottom / sidebar.promo.cta.
ImageSource
Universal image source — string path or a fully described image object. Used by brand.favicon, brand.banner (string form), Workspace.badge, and anywhere else an image is rendered.
SortStrategy
Used by Page.discover.sort and Workspace.discover.sort.
'default' is the implicit fallback when discover.sort is omitted.
Frontmatter
Page.defaults (and Workspace.defaults) take a Frontmatter value. Same type as before — carries the page metadata fields Rspress understands (title, description, aside, editLink, pageType, …) plus any custom keys you want injected.
Per-file YAML frontmatter wins on conflict with defaults. See Frontmatter Fields for the full field schema.
References
- Frontmatter — per-page metadata schema
- Icon Colors — color values accepted by
IconConfig - Content — how
pagesmap your existing markdown into the site tree - Workspaces — when to use
apps,packages, orworkspaces - Themes — built-in theme names and custom theme definitions