Fumadocs

Page

A page in your documentation

Page is the base element of a documentation, it includes Table of contents, Footer, and Breadcrumb.

Usage

import {
  DocsPage,
  DocsDescription,
  DocsTitle,
  DocsBody,
} from 'fumadocs-ui/page';
 
<DocsPage>
  <DocsTitle>title</DocsTitle>
  <DocsDescription>description</DocsDescription>
  <DocsBody>...</DocsBody>
</DocsPage>;

Page

The main layout of docs pages.

Title

Page title.

Description

Page description.

Body

It applies the Typography styles, wrap your content inside.

You can use this component without <DocsPage />.

import { DocsBody } from 'fumadocs-ui/page';
 
<DocsBody>
  <h1>This heading looks good!</h1>
</DocsBody>;

Category

Optional, display the other pages in its folder.

You can use this component without <DocsPage />.

import { DocsPage, DocsCategory } from 'fumadocs-ui/page';
import { getPages } from '@/app/source';
 
<DocsPage>
  <DocsCategory page={page} pages={getPages()} />
</DocsPage>;

Configurations

Full Mode

To extend the page to fill up all available space, pass full to the page component. This will force TOC to be shown as a popover.

import { DocsPage } from 'fumadocs-ui/page';
 
<DocsPage full>...</DocsPage>;

Table of Contents

An overview of all the headings in your document.

It requires an array of headings. For Markdown and MDX documents, You can obtain it using the TOC Utility. Content sources like Fumadocs MDX offer this out-of-the-box.

import { DocsPage } from 'fumadocs-ui/page';
 
<DocsPage toc={headings}>...</DocsPage>;

Options

Customise or disable TOC from your documentation with the tableOfContent option.

import { DocsPage } from 'fumadocs-ui/page';
 
<DocsPage tableOfContent={options}>...</DocsPage>;
PropTypeDefault
footer
ReactNode
-
header
ReactNode
-
single
boolean
true
enabled
boolean
-
component
ReactNode
-
style
"normal" | "clerk"
'normal'

Popover Mode

On smaller devices, it is shown on a popover instead. Customise it with the tableOfContentPopover option.

import { DocsPage } from 'fumadocs-ui/page';
 
<DocsPage tableOfContentPopover={options}>...</DocsPage>;
PropTypeDefault
footer
ReactNode
-
header
ReactNode
-
style
"normal" | "clerk"
'normal'
enabled
boolean
-
component
ReactNode
-

Last Updated Time

Display last updated time of the page.

import { DocsPage } from 'fumadocs-ui/page';
 
<DocsPage lastUpdate={new Date(lastModifiedTime)} />;

Since you might have different version controls (e.g. Github) or it's from remote sources like Sanity, Fumadocs UI doesn't display the last updated time by default.

For Github hosted documents, you can use the getGithubLastEdit utility.

import { DocsPage } from 'fumadocs-ui/page';
import { getGithubLastEdit } from 'fumadocs-core/server';
 
const time = await getGithubLastEdit({
  owner: 'fuma-nama',
  repo: 'fumadocs',
  path: `content/docs/${page.file.path}`,
});
 
<DocsPage lastUpdate={new Date(time)} />;

Note

You can also manually specify the last updated time of documents (e.g. using frontmatter). Don't forget to update the schema type on Fumadocs MDX.

Edit on GitHub

A shortcut to add "Edit on GitHub" button to TOC footer.

import { DocsPage } from 'fumadocs-ui/page';
 
<DocsPage
  editOnGithub={{
    owner: 'fuma-nama',
    repo: 'fumadocs',
    sha: 'main',
    // file path, make sure it's valid
    path: `content/docs/${page.file.path}`,
  }}
/>;

Footer is a navigation element that has two buttons to jump to the next and previous pages. When not specified, it shows the neighbour pages found from page tree.

Customise the footer with the footer option.

import { DocsPage, DocsBody } from 'fumadocs-ui/page';
 
<DocsPage footer={options}>
  <DocsBody>...</DocsBody>
</DocsPage>;
PropTypeDefault
enabled
boolean
-
component
ReactNode
-
items
{ previous?: { name: string; url: string; } | undefined; next?: { name: string; url: string; } | undefined; }
-

A navigation element, shown only when user is navigating in folders.

PropTypeDefault
enabled
boolean
-
component
ReactNode
-
full
boolean
false
includeRoot
boolean | { url: string; }
false
includeSeparator
boolean
false

MDX Page

In conjunction of Fumadocs MDX, you may create a page.mdx file and add the following.

export { withArticle as default } from 'fumadocs-ui/page';
 
## Hello World

This creates a page with MDX, with proper typography styles applied.

Last updated on

On this page

Edit on GitHub