--- sidebar_position: 1 slug: /api/plugins/@docusaurus/plugin-content-docs --- # 📦 plugin-content-docs import APITable from '@site/src/components/APITable'; Provides the [Docs](../../guides/docs/docs-introduction.mdx) functionality and is the default docs plugin for Docusaurus. ## Installation {#installation} ```bash npm2yarn npm install --save @docusaurus/plugin-content-docs ``` :::tip 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](../../using-plugins.mdx#docusauruspreset-classic). ::: ## Configuration {#configuration} Accepted fields: ```mdx-code-block ``` | Name | Type | Default | Description | | --- | --- | --- | --- | | `path` | `string` | `'docs'` | Path to the docs content directory on the file system, relative to site directory. | | `editUrl` | string \| EditUrlFunction | `undefined` | Base 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. | | `editLocalizedFiles` | `boolean` | `false` | The edit URL will target the localized file, instead of the original unlocalized file. Ignored when `editUrl` is a function. | | `editCurrentVersion` | `boolean` | `false` | The edit URL will always target the current version doc instead of older versions. Ignored when `editUrl` is a function. | | `routeBasePath` | `string` | `'docs'` | URL route for the docs section of your site. **DO NOT** include a trailing slash. Use `/` for shipping docs without base path. | | `tagsBasePath` | `string` | `'tags'` | URL route for the tags list page of your site. It is prepended to the `routeBasePath`. | | `include` | `string[]` | `['**/*.{md,mdx}']` | Array of glob patterns matching Markdown files to be built, relative to the content path. | | `exclude` | `string[]` | _See example configuration_ | Array of glob patterns matching Markdown files to be excluded. Serves as refinement based on the `include` option. | | `sidebarPath` | false \| string | `undefined` | Path to sidebar configuration. Use `false` to disable sidebars, or `undefined` to create a fully autogenerated sidebar. | | `sidebarCollapsible` | `boolean` | `true` | Whether sidebar categories are collapsible by default. See also [Collapsible categories](/docs/sidebar/items#collapsible-categories) | | `sidebarCollapsed` | `boolean` | `true` | Whether sidebar categories are collapsed by default. See also [Expanded categories by default](/docs/sidebar/items#expanded-categories-by-default) | | `sidebarItemsGenerator` | SidebarGenerator | _Omitted_ | Function used to replace the sidebar items of type `'autogenerated'` with real sidebar items (docs, categories, links...). See also [Customize the sidebar items generator](/docs/sidebar/autogenerated#customize-the-sidebar-items-generator) | | `numberPrefixParser` | boolean \| PrefixParser | _Omitted_ | Custom 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](/docs/sidebar/autogenerated#using-number-prefixes) | | `docsRootComponent` | `string` | `'@theme/DocsRoot'` | Parent component of all the docs plugin pages (including all versions). Stays mounted when navigation between docs pages and versions. | | `docVersionRootComponent` | `string` | `'@theme/DocVersionLayout'` | Parent component of all docs pages of an individual version (doc pages with sidebars, tags pages). Stays mounted when navigation between pages of that specific version. | | `docRootComponent` | `string` | `'@theme/DocPage'` | Parent component of all doc pages with sidebars (regular docs pages, category generated index pages). Stays mounted when navigation between such pages. | | `docItemComponent` | `string` | `'@theme/DocItem'` | Main doc container, with TOC, pagination, etc. | | `docTagsListComponent` | `string` | `'@theme/DocTagsListPage'` | Root component of the tags list page | | `docTagDocListComponent` | `string` | `'@theme/DocTagDocListPage'` | Root component of the "docs containing tag X" page. | | `docCategoryGeneratedIndexComponent` | `string` | `'@theme/DocCategoryGeneratedIndexPage'` | Root component of the generated category index page. | | `remarkPlugins` | `any[]` | `[]` | Remark plugins passed to MDX. | | `rehypePlugins` | `any[]` | `[]` | Rehype plugins passed to MDX. | | `beforeDefaultRemarkPlugins` | `any[]` | `[]` | Custom Remark plugins passed to MDX before the default Docusaurus Remark plugins. | | `beforeDefaultRehypePlugins` | `any[]` | `[]` | Custom Rehype plugins passed to MDX before the default Docusaurus Rehype plugins. | | `showLastUpdateAuthor` | `boolean` | `false` | Whether to display the author who last updated the doc. | | `showLastUpdateTime` | `boolean` | `false` | Whether to display the last date the doc was updated. | | `breadcrumbs` | `boolean` | `true` | Enable or disable the breadcrumbs on doc pages. | | `disableVersioning` | `boolean` | `false` | Explicitly disable versioning even when multiple versions exist. This will make the site only include the current version. Will error if `includeCurrentVersion: false` and `disableVersioning: true`. | | `includeCurrentVersion` | `boolean` | `true` | Include the current version of your docs. | | `lastVersion` | `string` | First version in `versions.json` | The version navigated to in priority and displayed by default for docs navbar items. | | `onlyIncludeVersions` | `string[]` | All versions available | Only include a subset of all available versions. | | `versions` | VersionsConfig | `{}` | Independent customization of each version's properties. | ```mdx-code-block ``` ### Types {#types} #### `EditUrlFunction` {#EditUrlFunction} ```ts type EditUrlFunction = (params: { version: string; versionDocsDirPath: string; docPath: string; permalink: string; locale: string; }) => string | undefined; ``` #### `PrefixParser` {#PrefixParser} ```ts type PrefixParser = (filename: string) => { filename: string; numberPrefix?: number; }; ``` #### `SidebarGenerator` {#SidebarGenerator} ```ts type SidebarGenerator = (generatorArgs: { /** The sidebar item with type "autogenerated" to be transformed. */ item: {type: 'autogenerated'; dirName: string}; /** Useful metadata for the version this sidebar belongs to. */ version: {contentPath: string; versionName: string}; /** All the docs of that version (unfiltered). */ docs: { id: string; title: string; frontMatter: DocFrontMatter & Record; source: string; sourceDirName: string; sidebarPosition?: number | undefined; }[]; /** Number prefix parser configured for this plugin. */ numberPrefixParser: PrefixParser; /** The default category index matcher which you can override. */ isCategoryIndex: CategoryIndexMatcher; /** * key is the path relative to the doc content directory, value is the * category metadata file's content. */ categoriesMetadata: {[filePath: string]: CategoryMetadata}; /** * Useful to re-use/enhance the default sidebar generation logic from * Docusaurus. */ defaultSidebarItemsGenerator: SidebarGenerator; // Returns an array of sidebar items — same as what you can declare in // sidebars.js, except for shorthands. See https://docusaurus.io/docs/sidebar/items }) => Promise; type CategoryIndexMatcher = (param: { /** The file name, without extension */ fileName: string; /** * The list of directories, from lowest level to highest. * If there's no dir name, directories is ['.'] */ directories: string[]; /** The extension, with a leading dot */ extension: string; }) => boolean; ``` #### `VersionsConfig` {#VersionsConfig} ```ts type VersionConfig = { /** * The base path of the version, will be appended to `baseUrl` + * `routeBasePath`. */ path?: string; /** The label of the version to be used in badges, dropdowns, etc. */ label?: string; /** The banner to show at the top of a doc of that version. */ banner?: 'none' | 'unreleased' | 'unmaintained'; /** Show a badge with the version label at the top of each doc. */ badge?: boolean; /** Prevents search engines from indexing this version */ noIndex?: boolean; /** Add a custom class name to the element of each doc */ className?: string; }; type VersionsConfig = {[versionName: string]: VersionConfig}; ``` ### Example configuration {#ex-config} You can configure this plugin through preset options or plugin options. :::tip Most Docusaurus users configure this plugin through the preset options. ::: ```js config-tabs // Preset Options: docs // Plugin Options: @docusaurus/plugin-content-docs const config = { path: 'docs', breadcrumbs: true, // Simple use-case: string editUrl // editUrl: 'https://github.com/facebook/docusaurus/edit/main/website/', // Advanced use-case: functional editUrl editUrl: ({versionDocsDirPath, docPath}) => `https://github.com/facebook/docusaurus/edit/main/website/${versionDocsDirPath}/${docPath}`, editLocalizedFiles: false, editCurrentVersion: false, routeBasePath: 'docs', include: ['**/*.md', '**/*.mdx'], exclude: [ '**/_*.{js,jsx,ts,tsx,md,mdx}', '**/_*/**', '**/*.test.{js,jsx,ts,tsx}', '**/__tests__/**', ], sidebarPath: 'sidebars.js', async sidebarItemsGenerator({ defaultSidebarItemsGenerator, numberPrefixParser, item, version, docs, isCategoryIndex, }) { // 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 { numberPrefix, filename: filename.replace(prefix, ''), }; } // No number prefix found return {numberPrefix: undefined, filename}; }, docLayoutComponent: '@theme/DocPage', docItemComponent: '@theme/DocItem', remarkPlugins: [require('./my-remark-plugin')], 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-front-matter} Markdown documents can use the following Markdown [front matter](../../guides/markdown-features/markdown-features-intro.mdx#front-matter) metadata fields, enclosed by a line `---` on either side. Accepted fields: ```mdx-code-block ``` | Name | Type | Default | Description | | --- | --- | --- | --- | | `id` | `string` | file path (including folders, without the extension) | A unique document ID. | | `title` | `string` | Markdown title or `id` | The 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_label` | `string` | `sidebar_label` or `title` | The text used in the document next/previous buttons for this document. | | `sidebar_label` | `string` | `title` | The text shown in the document sidebar for this document. | | `sidebar_position` | `number` | Default ordering | Controls the position of a doc inside the generated sidebar slice when using `autogenerated` sidebar items. See also [Autogenerated sidebar metadata](/docs/sidebar/autogenerated#autogenerated-sidebar-metadata). | | `sidebar_class_name` | `string` | `undefined` | Gives the corresponding sidebar label a special class name when using autogenerated sidebars. | | `sidebar_custom_props` | `object` | `undefined` | Assign [custom props](../../guides/docs/sidebar/index.mdx#passing-custom-props) to the sidebar item referencing this doc | | `displayed_sidebar` | `string` | `undefined` | Force the display of a given sidebar when browsing the current document. Read the [multiple sidebars guide](../../guides/docs/sidebar/multiple-sidebars.mdx) for details. | | `hide_title` | `boolean` | `false` | Whether 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_contents` | `boolean` | `false` | Whether to hide the table of contents to the right. | | `toc_min_heading_level` | `number` | `2` | The 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_level` | `number` | `3` | The max heading level shown in the table of contents. Must be between 2 and 6. | | `pagination_next` | string \| null | Next doc in the sidebar | The ID of the documentation you want the "Next" pagination to link to. Use `null` to disable showing "Next" for this page. | | `pagination_prev` | string \| null | Previous doc in the sidebar | The ID of the documentation you want the "Previous" pagination to link to. Use `null` to disable showing "Previous" for this page. | | `parse_number_prefixes` | `boolean` | `numberPrefixParser` plugin option | Whether number prefix parsing is disabled on this doc. See also [Using number prefixes](/docs/sidebar/autogenerated#using-number-prefixes). | | `custom_edit_url` | string \| null | Computed using the `editUrl` plugin option | The URL for editing this document. Use `null` to disable showing "Edit this page" for this page. | | `keywords` | `string[]` | `undefined` | Keywords meta tag for the document page, for search engines. | | `description` | `string` | The first line of Markdown content | The description of your document, which will become the `` and `` in ``, used by search engines. | | `image` | `string` | `undefined` | Cover or thumbnail image that will be used when displaying the link to your post. | | `slug` | `string` | File path | Allows to customize the document URL (`//`). Support multiple patterns: `slug: my-doc`, `slug: /my/path/myDoc`, `slug: /`. | | `tags` | `Tag[]` | `undefined` | A list of strings or objects of two string fields `label` and `permalink` to tag to your docs. | | `draft` | `boolean` | `false` | Draft documents will only be available during development. | | `unlisted` | `boolean` | `false` | Unlisted documents will be available in both development and production. They will be "hidden" in production, not indexed, excluded from sitemaps, and can only be accessed by users having a direct link. | | `last_update` | `FileChange` | `undefined` | Allows overriding the last updated author and/or date. Date can be any [parsable date string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse). | ```mdx-code-block ``` ```ts type Tag = string | {label: string; permalink: string}; ``` ```ts type FileChange = {date: string; author: string}; ``` Example: ```md --- 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 custom_edit_url: https://github.com/facebook/docusaurus/edit/main/docs/api-doc-markdown.md description: How do I find you when I cannot solve this problem keywords: - docs - docusaurus image: https://i.imgur.com/mErPwqL.png slug: /myDoc last_update: date: 1/1/2000 author: custom author name --- # Markdown Features My Document Markdown content ``` ## i18n {#i18n} Read the [i18n introduction](../../i18n/i18n-introduction.mdx) first. ### Translation files location {#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`](../../cli.mdx#docusaurus-write-translations-sitedir) - **Markdown files**: `website/i18n/[locale]/docusaurus-plugin-content-docs/[versionName]` ### Example file-system structure {#example-file-system-structure} ```bash website/i18n/[locale]/docusaurus-plugin-content-docs │ │ # translations for website/docs ├── current │ ├── api │ │ └── config.md │ └── getting-started.md ├── current.json │ │ # translations for website/versioned_docs/version-1.0.0 ├── version-1.0.0 │ ├── api │ │ └── config.md │ └── getting-started.md └── version-1.0.0.json ```