Routing
A shared convention for organizing your documents
Before reading
This guide only applies for content sources that uses loader()
API, such as Fumadocs MDX.
Overview
While Next.js handles routing, Fumadocs generates page slugs and sidebar items (page tree) from your content directory using loader()
.
You can define folders and pages similar to the file-system based routing of Next.js.
File
A MDX or Markdown file, you can customise its frontmatter.
name | description |
---|---|
title | The title of page |
description | The description of page |
icon | The name of icon, see Icons |
full | Fill all available space on the page (Fumadocs UI) |
Fumadocs MDX
You can use the schema
option to add frontmatter properties.
Slugs
The slugs of a page are generated from its file path.
path (relative to content folder) | slugs |
---|---|
./dir/page.mdx | ['dir', 'page'] |
./dir/index.mdx | ['dir'] |
Folder
Organize multiple pages, you can create a Meta file to customise folders.
Folder Group
By default, putting a file into folder will change its slugs. You can wrap the folder name in parentheses to avoid impacting the slugs of child files.
path (relative to content folder) | slugs |
---|---|
./(group-name)/page.mdx | ['page'] |
Meta
Customise folders by creating a meta.json
file in the folder.
name | description |
---|---|
title | Display name |
icon | The name of icon, see Icons |
pages | Folder items (see below) |
defaultOpen | Open the folder by default |
Pages
By default, folder items are sorted alphabetically.
You can control the order of items using pages
, items are not included unless they are listed inside.
Separator
Rest
Add a ...
item to include remaining pages (sorted alphabetically), or z...a
for descending order.
You can add !name
to prevent an item from being included.
Extract
You can extract the items from a folder with ...folder_name
.
Link
Use the syntax [Text](url)
to insert links, or [Icon][Text](url)
to add icon.
Icons
Since Fumadocs doesn't include an icon library, you have to convert the icon names to JSX elements in runtime, and render it as a component.
You can add an icon
handler to loader()
.
Root Folder
Marks the folder as a root folder, only items in the opened root folder will be considered.
For example, when you are in a root folder called framework
, the other folders (e.g. headless
) are not shown on the sidebar and other navigation elements.
Index pages will also be hidden unless it is listed in the pages
property.
Fumadocs UI
Fumadocs UI renders root folders as Sidebar Tabs, which allows user to switch between them.
Internationalization
You can add Markdown/meta files for different languages by attending .{locale}
to your file name, like page.cn.md
and meta.cn.json
.
Make sure to create a file for the default locale first, the locale code is optional (e.g. both get-started.mdx
and get-started.en.mdx
are accepted).
How is this guide?