Configuration
Every option in feastdocs.config.mjs.
One file configures the site: feastdocs.config.mjs at the project root. It is read
by the content build and emitted as a typed module the app imports, so both halves
of the framework always agree.
export default {
title: 'FeastDocs',
tagline: 'Documentation that lives next to the code.',
logo: null,
docsDir: 'docs',
navbar: {
links: [{ label: 'Docs', to: '/intro' }],
},
footer: {
text: '© 2026 FeastDocs',
links: [],
},
theme: {
defaultMode: 'system',
accent: '#f0812c',
accentDark: '#ff9d52',
},
sidebar: {
autoCollapse: false,
},
editUrl: null,
showLastUpdated: true,
};Site
| Option | Type | Effect |
|---|---|---|
title |
string | Navbar brand and the suffix of every browser title |
siteUrl |
string | null | Public origin (e.g. https://docs.example.com). Enables SEO output at build time: prerendered HTML per page, canonical/Open Graph tags, sitemap.xml, robots.txt |
tagline |
string | Fallback meta description for pages without one |
logo |
string | null | Path to an image inside public/, shown before the title |
docsDir |
string | Where the content lives, relative to the project root |
Navbar and footer
Links take either to for an internal route or href for an external URL. External
links open in a new tab and are marked as such.
navbar: {
links: [
{ label: 'Docs', to: '/intro' },
{ label: 'API', to: '/reference/configuration' },
{ label: 'Repository', href: 'https://dev.azure.com/example' },
],
}Theme
| Option | Type | Effect |
|---|---|---|
defaultMode |
'system' | 'light' | 'dark' |
What a first-time reader gets |
accent |
CSS colour | Accent in light mode |
accentDark |
CSS colour | Accent in dark mode |
Both accents are written to :root as custom properties at startup, so they are
available to every stylesheet — including page-scoped SCSS.
A reader's own choice is stored in localStorage and wins over defaultMode from
then on. A small inline script in index.html applies it before Angular boots, so
there is no white flash on load.
System default and the first paint
The pre-boot script trusts a stored choice, and otherwise follows the operating
system. If you set defaultMode: 'light' while the reader's OS is dark, the very
first frame may be dark before the configured default takes over.
Editing and metadata
| Option | Type | Effect |
|---|---|---|
editUrl |
string | null | Base URL of a repo file view; the page's source path is appended |
showLastUpdated |
boolean | Show the source file's modification date in the page footer |
editUrl: 'https://github.com/acme/docs/edit/main/',Where the date comes from
showLastUpdated reads the file's modification time on disk. In a fresh clone or a
clean CI checkout that is the checkout time, not the last edit — if the real
authoring date matters, drive it from your VCS instead.
GitHub
| Option | Type | Effect |
|---|---|---|
github.repo |
string | null | owner/name; enables the content manager's GitHub mode (web edits become commits) |
github.branch |
string | Branch that web edits are committed to (default main) |
See Use it for your own docs for a full setup walk-through, including CI.
Sidebar
autoCollapse is reserved for collapsing every category except the active one.
Collapse state is otherwise per-reader: expanding or collapsing a category is
remembered in localStorage, and the branch containing the current page is always
revealed.
Layout and spacing
Layout is not configured here — it lives in the design tokens, because that is where CSS belongs:
:root {
--fd-content-max: 940px;
--fd-sidebar-width: 320px;
--fd-toc-width: 240px;
}See Styling for the full token list.