Fumadocs vs Livemark

Updated May 16, 2026

Fumadocs is a Next.js-based docs framework built around the App Router. It splits responsibilities across separate packages: fumadocs-core (headless logic), fumadocs-ui (default UI components), and fumadocs-mdx (content source loader).

At a glance

AxisLivemarkFumadocs
Language / runtimeTypeScript / Node 24+TypeScript / Node 18+
UI frameworkReact 19React 18/19 (Next.js App Router)
Build toolVite + TanStack StartNext.js (Turbopack/Webpack)
Content formatMarkdown + MDXMarkdown + MDX
LicenseMIT, self-hostedMIT, self-hosted
Output modelPrerendered static (SSR-capable)Static or SSR (Next.js modes)

Architecture

Livemark wraps Vite + TanStack Start. Routes, prerender, and component overrides are all from TanStack Start; Livemark adds content-collections for content loading and a default sidebar/layout/component layer on top.

Fumadocs assumes you already have (or want) a Next.js application. It's not a self-contained CLI — you scaffold a Next project, install Fumadocs packages, and wire fumadocs-core and fumadocs-ui into your App Router. Content is read by fumadocs-mdx from .md/.mdx files and surfaced as typed objects.

The package split is intentional: fumadocs-core exposes hooks and primitives without UI, so projects can swap fumadocs-ui for a custom UI without forking.

Content layout is unconstrained on the Livemark side: it scans by glob (include/exclude in livemark.config.ts), and each article's URL is set by a path: frontmatter field rather than its file location. There's no required docs/ folder — a project can pull articles from README.md, docs/, blog/, package READMEs, or anywhere else. Fumadocs reads from a single configured content directory (defined in fumadocs-mdx's source plugin); routes are derived from file paths under that root.

Content surface

Both tools accept Markdown + MDX with frontmatter and embedded React components.

Fumadocs uses fumadocs-mdx (a custom MDX loader) which produces TypeScript-typed content objects with full IntelliSense for frontmatter. Custom components live alongside your Next app code.

Livemark uses content-collections under the hood for the same purpose: validated frontmatter (via Zod schemas) and typed article exports.

Frontmatter shape differs: Fumadocs uses title, description, icon, full. Livemark uses path, order, icon, sidebar, date, tags.

Feature matrix

CapabilityLivemarkFumadocs
VersioningNoPartial (via separate content sources)
Internationalization (i18n)NoYes (built-in)
SearchYes (Orama, client-side)Yes (Orama-based, optional Algolia)
OpenAPI renderingNoYes (fumadocs-openapi)
BlogYes (built-in section type)No (use Next routes)
ChangelogYes (section type)No
SitemapYesVia Next.js sitemap.ts
RSSYes (per blog section)Via Next.js routes
ThemesComponent overrides via .livemark/Swap fumadocs-ui or override per-component
Custom routes.livemark/routes/ (TanStack Router)Any Next App Router page
Standalone CLIYes (livemark build)No (Next.js commands)

Output & deployment

Livemark prerenders every route at build time. The output is a static directory you deploy anywhere — see Deployment.

Fumadocs inherits Next.js's output modes: full static export (output: 'export'), hybrid SSG/SSR, or fully dynamic. Deployment matches whatever Next.js supports — Vercel is the default target, but any Node host or Cloudflare Workers (via OpenNext) works.

See also

Created with and Livemark