Hover Me
This card uses a glassy gradient background. Hover over it to see the elevation effect.
starlight-fumadocs provides a premium, Mintlify-inspired aesthetic out of the box, with deeply integrated styling for all core Starlight components. This guide explains how the design system works and how you can customize it.
This theme automatically upgrades standard Starlight UI components to a premium aesthetic without requiring any extra configuration.
Markdown tables are redesigned for high data readability and responsiveness:
100% width on desktop. On mobile, it gracefully transforms into a swipable horizontal carousel.| Component | Default Starlight | Theme Upgraded |
|---|---|---|
| Tables | Block layout, heavy borders | Full-width, horizontal rules, zebra |
| Code Blocks | Colorful macOS dots | Monochrome dots, inset shadows |
| Cards | Solid backgrounds | Glassmorphic gradient, float effect |
| Steps | Basic timeline | 2px connector, 2rem cutout circles |
Powered by Expressive Code, all code blocks have been heavily refined:
# Notice the sleek, monochrome window controls on the left!echo "This theme is incredibly minimal."When using Starlightâs <Card> or <LinkCard> components:
translateY(-2px)) and illuminates the border with your themeâs primary accent color.Hover Me
This card uses a glassy gradient background. Hover over it to see the elevation effect.
The <Steps> component is upgraded into a prominent vertical timeline:
2px vertical timeline connector.box-shadow cutout trick to prevent the timeline from bleeding through.astro.config.mjs to include the plugin.Starlight <Badge> components are transformed into modern pills:
default variant uses a clean, muted slate-grey tint, perfect for unobtrusive tags.Examples:
The theme uses a centralized token system tailored for a sleek, modern look. The most important tokens are the --mint-* variables, which control surfaces, borders, and rounded corners globally.
:root { /* Control the global roundness (e.g., 8px for modern, 4px for sharp) */ --mint-radius: 8px; --mint-radius-lg: 12px;
/* Surfaces and borders */ --mint-surface: rgba(255, 255, 255, 0.05); --mint-surface-hover: rgba(255, 255, 255, 0.08); --mint-border: rgba(255, 255, 255, 0.07); --mint-border-strong: rgba(255, 255, 255, 0.12);}To ensure your overrides work perfectly, starlight-fumadocs uses the @layer fuma-theme cascade layer.
Any custom CSS you write outside of a layer will automatically override the theme. If you use layers in your own project, simply ensure your overrides layer comes after fuma-theme:
/* Define the order of precedence */@layer starlight, fuma-theme, my-overrides;
@layer my-overrides { /* Your custom styles here */}The Table of Contents features a custom, high-performance âsnakeâ physics engine.
The colors automatically adapt to your themeâs light and dark mode tokens, but you can override them manually:
:root { /* The vertical rail background and curve line */ --mint-border: rgba(255, 255, 255, 0.07);
/* The active gliding snake indicator */ --glide-indicator-color: var(--sl-color-accent);}The theme features a premium Root Navigation switcher (breadcrumb-style) at the top of the sidebar. You can customize the icons and colors for each documentation group.
starlight-fumadocs is fully compatible with starlight-plugin-icons. If you want to use icons in your sidebar items (folders and files), simply install the plugin:
npm install starlight-plugin-iconsastro.config.mjs:import { starlightIconsPlugin, starlightIconsIntegration } from "starlight-plugin-icons";
export default defineConfig({ integrations: [ starlightIconsIntegration(), starlight({ plugins: [starlightIconsPlugin()], }), ],});You can specify icons and colors for your top-level groups in the starlightFumadocs plugin options.
starlightFumadocs({ rootNav: { groups: { "Getting Started": { icon: "open-book", // Starlight built-in icon color: "#facc15", // Custom theme color for this group description: "New to the project?", }, Advanced: { icon: "i-ph:palette-duotone", // Plugin-based icon (optional) color: "#3b82f6", }, }, },});The theme is designed to look premium out-of-the-box without any manual configuration:
The theme includes a unified focus ring system for accessibility. You can customize the focus ringâs color globally:
:focus-visible { outline: 2px solid var(--sl-color-accent); outline-offset: 2px;}starlight-fumadocs includes several advanced features that bring a highly interactive experience to your Starlight site.
The theme automatically transforms your sidebar based on the current page. It identifies the top-level folder (group) and filters the sidebar to show only the items within that group. This creates a âsub-siteâ feel where each major section of your docs has its own dedicated navigation context.
A custom breadcrumb system is automatically injected at the top of your pages.
The sticky, glassmorphic header has intelligent visibility logic:
All code blocks (powered by Expressive Code) automatically receive a fullscreen toggle button.
Use the <BrowserPreview /> component to showcase live demos or website previews with desktop, tablet, and mobile toggles.
import { BrowserPreview } from 'starlight-fumadocs/components';
<BrowserPreview url="https://example.com" title="My App" height="500px" />The theme includes native support for D2 diagrams via astro-d2.
Use the <Callout /> component for highlighted notes.
info, warning, error, success, idea.import { Callout } from 'starlight-fumadocs/components';
<Callout type="idea">This is a cool idea!</Callout>You can easily inject a custom section (like a âConnectâ block with GitHub and LinkedIn links) at the bottom of your right sidebar. Because starlight-fumadocs safely handles component overrides, you just override Starlightâs TableOfContents component.
src/components/ConnectTOC.astro:---import Default from 'starlight-fumadocs/overrides/TableOfContents.astro';import { Icon } from '@astrojs/starlight/components';---
<!-- 1. Render the premium Glide TOC first --><Default {...Astro.props} />
<!-- 2. Add your custom content below it --><div class="connect-section"> <h3>Connect</h3> <ul> <li> <a href="https://github.com/yourusername" target="_blank"> <Icon name="github" /> GitHub </a> </li> </ul></div>
<style> .connect-section { margin-top: 2rem; padding-top: 1.5rem; border-top: 1px solid var(--sl-color-hairline); } h3 { font-size: 0.875rem; font-weight: 600; color: var(--sl-color-white); margin-bottom: 1rem; } ul { list-style: none; padding: 0; margin: 0; display: flex; gap: 1rem; } a { display: flex; align-items: center; gap: 0.375rem; color: var(--sl-color-gray-3); text-decoration: none; font-size: 0.8125rem; font-weight: 500; transition: color 0.15s ease; } a:hover { color: var(--sl-color-white); }</style>astro.config.mjs:export default defineConfig({ integrations: [ starlight({ plugins: [starlightFumadocs()], components: { TableOfContents: './src/components/ConnectTOC.astro', }, }), ],});You can override the functional color palette in your CSS:
:root { --fuma-color-info: oklch(62.3% 0.214 259.815); --fuma-color-success: oklch(72.3% 0.219 149.579);}The theme is natively optimized for Geist Sans and Geist Mono. If you wish to use them, ensure they are installed in your project:
:root { --sl-font: "Geist Sans", var(--sl-font-system); --sl-font-mono: "Geist Mono", var(--sl-font-system-mono);}