Skip to main content
Version: 2.0.0-beta.18

πŸ“¦ plugin-content-docs

Provides the Docs functionality and is the default docs plugin for Docusaurus.


npm install --save @docusaurus/plugin-content-docs

If you use the preset @docusaurus/preset-classic, you don't need to install this plugin as a dependency.

You can configure this plugin through the preset options.


Accepted fields:

pathstring'docs'Path to data on filesystem relative to site dir.
editUrlstring | EditUrlFunctionundefinedBase URL to edit your site. The final URL is computed by editUrl + relativeDocPath. Using a function allows more nuanced control for each file. Omitting this variable entirely will disable edit links.
editLocalizedFilesbooleanfalseThe edit URL will target the localized file, instead of the original unlocalized file. Ignored when editUrl is a function.
editCurrentVersionbooleanfalseThe edit URL will always target the current version doc instead of older versions. Ignored when editUrl is a function.
routeBasePathstring'docs'URL route for the docs section of your site. DO NOT include a trailing slash. Use / for shipping docs without base path.
tagsBasePathstring'tags'URL route for the tags list page of your site. It is prepended to the routeBasePath.
includestring[]['**/*.{md,mdx}']Matching files will be included and processed.
excludestring[]See example configurationNo route will be created for matching files.
sidebarPathfalse | stringundefined (creates autogenerated sidebar)Path to sidebar configuration.
sidebarCollapsiblebooleantrueWhether sidebar categories are collapsible by default. See also Collapsible categories
sidebarCollapsedbooleantrueWhether sidebar categories are collapsed by default. See also Expanded categories by default
sidebarItemsGeneratorSidebarGeneratorOmittedFunction used to replace the sidebar items of type 'autogenerated' by real sidebar items (docs, categories, links...). See also Customize the sidebar items generator
numberPrefixParserboolean | PrefixParserOmittedCustom parsing logic to extract number prefixes from file names. Use false to disable this behavior and leave the docs untouched, and true to use the default parser. See also Using number prefixes
docLayoutComponentstring'@theme/DocPage'Root Layout component of each doc page.
docItemComponentstring'@theme/DocItem'Main doc container, with TOC, pagination, etc.
docTagsListComponentstring'@theme/DocTagsListPage'Root component of the tags list page
docTagDocListComponentstring'@theme/DocTagDocListPage'Root component of the "docs containing tag" page.
docCategoryGeneratedIndexComponentstring'@theme/DocCategoryGeneratedIndexPage'Root component of the generated category index page.
remarkPluginsany[][]Remark plugins passed to MDX.
rehypePluginsany[][]Rehype plugins passed to MDX.
beforeDefaultRemarkPluginsany[][]Custom Remark plugins passed to MDX before the default Docusaurus Remark plugins.
beforeDefaultRehypePluginsany[][]Custom Rehype plugins passed to MDX before the default Docusaurus Rehype plugins.
showLastUpdateAuthorbooleanfalseWhether to display the author who last updated the doc.
showLastUpdateTimebooleanfalseWhether to display the last date the doc was updated.
disableVersioningbooleanfalseExplicitly disable versioning even with versions. This will make the site only include the current version.
includeCurrentVersionbooleantrueInclude the current version of your docs.
lastVersionstringFirst version in versions.jsonSet the version navigated to in priority and displayed by default for docs navbar items.
onlyIncludeVersionsstring[]All versions availableOnly include a subset of all available versions.
versionsVersions{}Independent customization of each version's properties.
type EditUrlFunction = (params: {
version: string;
versionDocsDirPath: string;
docPath: string;
permalink: string;
locale: string;
}) => string | undefined;

type PrefixParser = (filename: string) => {
filename: string;
numberPrefix?: number;

type CategoryIndexMatcher = (doc: {
fileName: string;
directories: string[];
extension: string;
}) => boolean;

type SidebarGenerator = (generatorArgs: {
item: {type: 'autogenerated'; dirName: string}; // the sidebar item with type "autogenerated"
version: {contentPath: string; versionName: string}; // the current version
docs: Array<{
id: string;
title: string;
frontMatter: DocFrontMatter & Record<string, unknown>;
source: string;
sourceDirName: string;
sidebarPosition?: number | undefined;
}>; // all the docs of that version (unfiltered)
numberPrefixParser: PrefixParser; // numberPrefixParser configured for this plugin
categoriesMetadata: Record<string, CategoryMetadata>; // key is the path relative to the doc directory, value is the category metadata file's content
isCategoryIndex: CategoryIndexMatcher; // the default category index matcher, that you can override
defaultSidebarItemsGenerator: SidebarGenerator; // useful to re-use/enhance default sidebar generation logic from Docusaurus
}) => Promise<SidebarItem[]>;

type Versions = Record<
string, // the version's ID
label: string; // the label of the version
path: string; // the route path of the version
banner: 'none' | 'unreleased' | 'unmaintained'; // the banner to show at the top of a doc of that version
badge: boolean; // show a badge with the version name at the top of a doc of that version
className; // add a custom className to the <html> element when browsing docs of that version

Example configuration​

You can configure this plugin through preset options or plugin options.


Most Docusaurus users configure this plugin through the preset options.

If you use a preset, configure this plugin through the preset options:

module.exports = {
presets: [
docs: {
path: 'docs',
breadcrumbs: true,
// Simple use-case: string editUrl
// editUrl: '',
// Advanced use-case: functional editUrl
editUrl: ({versionDocsDirPath, docPath}) =>
editLocalizedFiles: false,
editCurrentVersion: false,
routeBasePath: 'docs',
include: ['**/*.md', '**/*.mdx'],
exclude: [
sidebarPath: 'sidebars.js',
async sidebarItemsGenerator({
}) {
// Use the provided data to generate a custom sidebar slice
return [
{type: 'doc', id: 'intro'},
type: 'category',
label: 'Tutorials',
items: [
{type: 'doc', id: 'tutorial1'},
{type: 'doc', id: 'tutorial2'},
numberPrefixParser(filename) {
// Implement your own logic to extract a potential number prefix
const numberPrefix = findNumberPrefix(filename);
// Prefix found: return it with the cleaned filename
if (numberPrefix) {
return {
filename: filename.replace(prefix, ''),
// No number prefix found
return {numberPrefix: undefined, filename};
docLayoutComponent: '@theme/DocPage',
docItemComponent: '@theme/DocItem',
remarkPlugins: [require('remark-math')],
rehypePlugins: [],
beforeDefaultRemarkPlugins: [],
beforeDefaultRehypePlugins: [],
showLastUpdateAuthor: false,
showLastUpdateTime: false,
disableVersioning: false,
includeCurrentVersion: true,
lastVersion: undefined,
versions: {
current: {
label: 'Android SDK v2.0.0 (WIP)',
path: 'android-2.0.0',
banner: 'none',
'1.0.0': {
label: 'Android SDK v1.0.0',
path: 'android-1.0.0',
banner: 'unmaintained',
onlyIncludeVersions: ['current', '1.0.0', '2.0.0'],

Markdown front matter​

Markdown documents can use the following Markdown front matter metadata fields, enclosed by a line --- on either side.

Accepted fields:

idstringfile path (including folders, without the extension)A unique document id.
titlestringMarkdown title or idThe text title of your document. Used for the page metadata and as a fallback value in multiple places (sidebar, next/previous buttons...). Automatically added at the top of your doc if it does not contain any Markdown title.
pagination_labelstringsidebar_label or titleThe text used in the document next/previous buttons for this document.
hide_titlebooleanfalseWhether to hide the title at the top of the doc. It only hides a title declared through the front matter, and have no effect on a Markdown title at the top of your document.
hide_table_of_contentsbooleanfalseWhether to hide the table of contents to the right.
toc_min_heading_levelnumber2The minimum heading level shown in the table of contents. Must be between 2 and 6 and lower or equal to the max value.
toc_max_heading_levelnumber3The max heading level shown in the table of contents. Must be between 2 and 6.
pagination_nextstring | nullNext doc in the sidebarThe ID of the documentation you want the "Next" pagination to link to. Use null to disable showing "Next" for this page.
pagination_prevstring | nullPrevious doc in the sidebarThe ID of the documentation you want the "Previous" pagination to link to. Use null to disable showing "Previous" for this page.
parse_number_prefixesbooleannumberPrefixParser plugin optionWhether number prefix parsing is disabled on this doc. See also Using number prefixes.
custom_edit_urlstringComputed using the editUrl plugin optionThe URL for editing this document.
keywordsstring[]undefinedKeywords meta tag for the document page, for search engines.
descriptionstringThe first line of Markdown contentThe description of your document, which will become the <meta name="description" content="..."/> and <meta property="og:description" content="..."/> in <head>, used by search engines.
imagestringundefinedCover or thumbnail image that will be used when displaying the link to your post.
slugstringFile pathAllows to customize the document url (/<routeBasePath>/<slug>). Support multiple patterns: slug: my-doc, slug: /my/path/myDoc, slug: /.
tagsTag[]undefinedA list of strings or objects of two string fields label and permalink to tag to your docs.
type Tag = string | {label: string; permalink: string};


id: doc-markdown
title: Docs Markdown Features
hide_title: false
hide_table_of_contents: false
sidebar_label: Markdown
sidebar_position: 3
pagination_label: Markdown features
description: How do I find you when I cannot solve this problem
- docs
- docusaurus
slug: /myDoc

# Markdown Features

My Document Markdown content


Read the i18n introduction first.

Translation files location​

  • Base path: website/i18n/[locale]/docusaurus-plugin-content-docs
  • Multi-instance path: website/i18n/[locale]/docusaurus-plugin-content-docs-[pluginId]
  • JSON files: extracted with docusaurus write-translations
  • Markdown files: website/i18n/[locale]/docusaurus-plugin-content-docs/[versionName]

Example file-system structure​

β”‚ # translations for website/docs
β”œβ”€β”€ current
β”‚ β”œβ”€β”€ api
β”‚ β”‚ └──
β”‚ └──
β”œβ”€β”€ current.json
β”‚ # translations for website/versioned_docs/version-1.0.0
β”œβ”€β”€ version-1.0.0
β”‚ β”œβ”€β”€ api
β”‚ β”‚ └──
β”‚ └──
└── version-1.0.0.json