MDX.org.ai
UI Componentsmdxui

@mdxui/fumadocs

Fumadocs React components for mdxe

@mdxui/fumadocs

React components and utilities for building Fumadocs-powered documentation with mdxe.

Installation

npm install @mdxui/fumadocs

Usage

import { DocsLayout, DocsPage } from '@mdxui/fumadocs'
import { source } from '@/lib/source'
 
export default function Layout({ children }) {
  return (
    <DocsLayout tree={source.pageTree}>
      {children}
    </DocsLayout>
  )
}

Components

DocsLayout

Main layout component for documentation sites.

import { DocsLayout } from '@mdxui/fumadocs'
 
<DocsLayout
  tree={pageTree}
  nav={{
    title: 'My Docs',
    links: [
      { text: 'GitHub', url: 'https://github.com/...' },
    ],
  }}
  sidebar={{
    defaultOpen: true,
  }}
>
  {children}
</DocsLayout>

DocsPage

Page wrapper with TOC and navigation.

import { DocsPage, DocsBody, DocsTitle } from '@mdxui/fumadocs'
 
export default function Page({ page }) {
  return (
    <DocsPage
      toc={page.data.toc}
      prev={page.prev}
      next={page.next}
    >
      <DocsTitle>{page.data.title}</DocsTitle>
      <DocsBody>
        <page.data.body />
      </DocsBody>
    </DocsPage>
  )
}

MDX Components

Pre-styled components for MDX content.

import {
  Callout,
  Card,
  Cards,
  Tab,
  Tabs,
  Steps,
  Step,
  Accordions,
  Accordion,
  TypeTable,
  ImageZoom,
} from '@mdxui/fumadocs'
 
const components = {
  Callout,
  Card,
  Cards,
  Tab,
  Tabs,
  Steps,
  Step,
  Accordions,
  Accordion,
  TypeTable,
  ImageZoom,
}

Features

Callouts

<Callout type="info">
  This is an informational callout.
</Callout>
 
<Callout type="warning">
  Be careful with this operation.
</Callout>
 
<Callout type="error">
  This action is irreversible.
</Callout>

Tabs

<Tabs items={['npm', 'pnpm', 'yarn']}>
  <Tab value="npm">
    ```bash
    npm install package
    ```
  </Tab>
  <Tab value="pnpm">
    ```bash
    pnpm add package
    ```
  </Tab>
  <Tab value="yarn">
    ```bash
    yarn add package
    ```
  </Tab>
</Tabs>

Cards

<Cards>
  <Card title="Getting Started" href="/docs/getting-started">
    Learn how to set up your project.
  </Card>
  <Card title="API Reference" href="/docs/api">
    Explore the full API documentation.
  </Card>
</Cards>

Steps

<Steps>
  <Step>
    ### Install dependencies
 
    ```bash
    npm install @mdxui/fumadocs
    ```
  </Step>
  <Step>
    ### Configure your project
 
    Create a `source.ts` file.
  </Step>
  <Step>
    ### Start building
 
    You're ready to create documentation!
  </Step>
</Steps>

Type Table

<TypeTable
  type={{
    name: { type: 'string', description: 'The name property' },
    age: { type: 'number', default: '0', description: 'The age property' },
    active: { type: 'boolean', default: 'true' },
  }}
/>

Integration

With @mdxdb/fumadocs

// lib/source.ts
import { createSource } from '@mdxdb/fumadocs'
import { createDatabase } from '@mdxdb/fs'
 
const db = createDatabase({ path: './docs' })
export const source = createSource(db, { baseUrl: '/docs' })
// app/docs/layout.tsx
import { DocsLayout } from '@mdxui/fumadocs'
import { source } from '@/lib/source'
 
export default function Layout({ children }) {
  return (
    <DocsLayout tree={source.pageTree}>
      {children}
    </DocsLayout>
  )
}
// app/docs/[[...slug]]/page.tsx
import { DocsPage, DocsBody } from '@mdxui/fumadocs'
import { source } from '@/lib/source'
import { notFound } from 'next/navigation'
 
export default function Page({ params }) {
  const page = source.getPage(params.slug)
  if (!page) notFound()
 
  const MDX = page.data.body
 
  return (
    <DocsPage toc={page.data.toc}>
      <DocsBody>
        <MDX />
      </DocsBody>
    </DocsPage>
  )
}

Customization

Theme

import { DocsLayout } from '@mdxui/fumadocs'
 
<DocsLayout
  theme={{
    colors: {
      primary: '#0070f3',
      background: '#ffffff',
    },
    fonts: {
      body: 'Inter, sans-serif',
      code: 'JetBrains Mono, monospace',
    },
  }}
>

Custom Components

import { DocsPage } from '@mdxui/fumadocs'
 
const customComponents = {
  // Override default heading
  h1: ({ children }) => (
    <h1 className="custom-h1">{children}</h1>
  ),
 
  // Custom code block
  pre: ({ children }) => (
    <CustomCodeBlock>{children}</CustomCodeBlock>
  ),
}
 
<DocsPage components={customComponents}>

On this page