Getting started
A tour of the most-used Fumadocs MDX components. Delete or rewrite this page once the project has real content.
This page exists so the freshly-forked template has at least one
non-trivial page to look at. It is also a quick reference for the
Fumadocs components you'll reach for first. The full syntax
reference lives in docs/markdown.md inside the repo (not
published — contributor reference only).
Frontmatter
Every page starts with YAML frontmatter. The schema is defined in
source.config.ts and extended in this template with an optional
image field for per-page social cards.
---
title: Page title # required
description: One-line summary # optional, used in <meta> + sidebar
image: # optional, overrides the default OG card
url: /screenshots/feature.png # absolute path under public/, or full URL
alt: Feature screenshot # optional, falls back to the page title
width: 1200 # optional
height: 630 # optional
full: true # optional, removes the TOC sidebar
icon: Sparkles # optional, lucide icon name (sidebar)
---When image is omitted, the page falls back to
NEXT_PUBLIC_OG_IMAGE (default /og-default.png). When present,
it becomes the page's Open Graph and Twitter card image — the URL
is absolutized against NEXT_PUBLIC_SITE_URL automatically.
The same fields also feed the page's JSON-LD output: title and
description become a TechArticle for search engines and AI
crawlers, the slug path becomes a BreadcrumbList. Nothing extra
to author per page — it's automatic in
src/app/(docs)/[[...slug]]/page.tsx.
Headings and paragraphs
Use ATX headings (# heading). Heading levels nest naturally —
## for top-level sections of a page, ### for subsections, ####
when you really need it. Keep prose paragraphs short. Fumadocs styles
the rest.
Callouts
An info callout. Use this for context the reader can act on but isn't required reading.
A warning callout. Use this when ignoring the note will cost the reader time.
An error callout. Reserve this for "this will break things" notes.
Code blocks
Code blocks accept a title and per-line annotations.
type DocPage = {
title: string;
description?: string;
slug: string;
};
export function buildIndex(pages: DocPage[]): string {
return pages.map((p) => `- [${p.title}](${p.slug})`).join("\n");
}pnpm install
pnpm devTables
| Concern | Behaviour |
|---|---|
| Auth | Cookie for browsers, Authorization: Token header for clients. |
| Throttle | 300 requests / minute for authenticated users. |
| Format | JSON, UTF-8, no BOM. |
Tabs
pnpm installThis project rejects npm via a preinstall guard. Use pnpm.
This project rejects yarn via a preinstall guard. Use pnpm.
Steps
Clone the template
git clone <template-url> my-project-docs
cd my-project-docsAdjust branding and config
See the "Adjust on a new project" section in the repo README for
the full checklist (package.json, Makefile, docker compose,
public/ images, public/manifest.json).
Replace this content
Delete or rewrite the pages under content/docs/. Start with
index.mdx, then add subdirectories for each section the
project needs.
Cards
Fumadocs UI
Component reference for the underlying docs framework.
Next.js
The framework this template builds on.
Where to go next
- LLM Access — machine-readable endpoints for AI assistants.
- Delete this page (
content/docs/getting-started.mdx) once the project has real onboarding content.