Skip to content

docs-site-theme-status

The OpenClast docs site (docs-site/) uses Starlight’s default theme. The intended theme stack is:

PluginPurposeStatus
starlight-theme-obsidian (Fevol)Obsidian Publish visual aestheticBlocked — Astro v6 / Zod v4 compat issue
starlight-site-graph (Fevol)Interactive graph view + backlinksBlocked — same issue (bundled by theme)
starlight-obsidian (HiDeoo)Import knowledge-base/ as OFM vaultWorking
remark-mermaidjsMermaid diagram renderingWorking
@flowershow/remark-wiki-linkWikilink support across all pagesWorking

starlight-theme-obsidian@0.4.1 depends on starlight-site-graph@^0.5.0. When the theme initializes the graph plugin, it fails with:

Invalid options passed to "starlight-site-graph-integration" integration
Hint: Invalid input: expected map, received object

This is a Zod v4 serialization issue introduced by Astro v6 (which upgraded from Zod v3 to Zod v4). The graph plugin’s option schema uses Zod map() which changed behavior between versions.

When the fix lands, in docs-site/astro.config.mjs:

  1. Uncomment the import:
import starlightThemeObsidian from 'starlight-theme-obsidian';
  1. Uncomment the plugin:
plugins: [
starlightObsidian({ ... }),
starlightThemeObsidian(), // uncomment this
],
  1. Update versions:
Terminal window
cd docs-site && bun update starlight-theme-obsidian starlight-site-graph

If the upstream fix takes too long, we can approximate the Obsidian Publish aesthetic with custom CSS:

docs-site/src/styles/obsidian-theme.css
:root {
--sl-color-accent-low: #1a1a2e;
--sl-color-accent: #e85d26; /* magma orange — matches OpenClast brand */
--sl-color-accent-high: #f59e0b;
--sl-color-gray-1: #e8e6e3;
--sl-color-gray-5: #1a1a2e;
--sl-color-gray-6: #0f0f17;
--sl-color-black: #0f0f17;
}

Then add to astro.config.mjs:

starlight({
customCss: ['./src/styles/obsidian-theme.css'],
})

This gives us the OpenClast color palette without waiting on the theme plugin.

DECISION-005: Docs Theme Approach — ACCEPTED

  • Choice: Custom CSS theme with OpenClast brand palette (Option B)
  • Rationale: Zero dependency risk, self-owned, resilient to upstream breakage. Brand consistency now > graph view later.
  • Implementation: docs-site/src/styles/openclast-theme.css — overrides Starlight CSS variables for both dark and light mode
  • Graph view: Kept as future goal (starlight-site-graph stays in package.json but not wired into config)
  • Theme plugin: starlight-theme-obsidian removed from dependencies