--- sidebar_position: 0 description: API reference for Docusaurus configuration file. slug: /api/docusaurus-config --- # `docusaurus.config.js` import APITable from '@site/src/components/APITable'; :::info Refer to the Getting Started [**Configuration**](../configuration.mdx) for examples. ::: ## Overview {#overview} `docusaurus.config.js` contains configurations for your site and is placed in the root directory of your site. :::note With a [TypeScript](../typescript-support.mdx) Docusaurus codebase your config file may be called `docusaurus.config.ts`. The syntax is broadly identical to the `js` config file with the addition of types. You can see an example on the [Docusaurus Website](https://github.com/facebook/docusaurus/blob/main/website/docusaurus.config.ts) itself. ::: This file is run in Node.js and should export a site configuration object, or a function that creates it. The `docusaurus.config.js` file supports: - [**ES Modules**](https://flaviocopes.com/es-modules/) - [**CommonJS**](https://flaviocopes.com/commonjs/) - [**TypeScript**](../typescript-support.mdx#typing-config) Examples: ```js title="docusaurus.config.js" export default { title: 'Docusaurus', url: 'https://docusaurus.io', // your site config ... }; ``` ```js title="docusaurus.config.js" export default async function createConfigAsync() { return { title: 'Docusaurus', url: 'https://docusaurus.io', // your site config ... }; } ``` :::tip Refer to [**Syntax to declare `docusaurus.config.js`**](../configuration.mdx#syntax-to-declare-docusaurus-config) for a more exhaustive list of examples and explanations. ::: ## Required fields {#required-fields} ### `title` {#title} - Type: `string` Title for your website. Will be used in metadata and as browser tab title. ```js title="docusaurus.config.js" export default { title: 'Docusaurus', }; ``` ### `url` {#url} - Type: `string` URL for your website. This can also be considered the top-level hostname. For example, `https://facebook.github.io` is the URL of https://facebook.github.io/metro/, and `https://docusaurus.io` is the URL for https://docusaurus.io. This field is related to the [`baseUrl`](#baseUrl) field. ```js title="docusaurus.config.js" export default { url: 'https://docusaurus.io', }; ``` ### `baseUrl` {#baseUrl} - Type: `string` Base URL for your site. Can be considered as the path after the host. For example, `/metro/` is the base URL of https://facebook.github.io/metro/. For URLs that have no path, the baseUrl should be set to `/`. This field is related to the [`url`](#url) field. Always has both leading and trailing slash. ```js title="docusaurus.config.js" export default { baseUrl: '/', }; ``` ## Optional fields {#optional-fields} ### `favicon` {#favicon} - Type: `string | undefined` Path to your site favicon; must be a URL that can be used in link's href. For example, if your favicon is in `static/img/favicon.ico`: ```js title="docusaurus.config.js" export default { favicon: '/img/favicon.ico', }; ``` ### `trailingSlash` {#trailingSlash} - Type: `boolean | undefined` Allow to customize the presence/absence of a trailing slash at the end of URLs/links, and how static HTML files are generated: - `undefined` (default): keeps URLs untouched, and emit `/docs/myDoc/index.html` for `/docs/myDoc.md` - `true`: add trailing slashes to URLs/links, and emit `/docs/myDoc/index.html` for `/docs/myDoc.md` - `false`: remove trailing slashes from URLs/links, and emit `/docs/myDoc.html` for `/docs/myDoc.md` :::tip Each static hosting provider serves static files differently (this behavior may even change over time). Refer to the [deployment guide](../deployment.mdx) and [slorber/trailing-slash-guide](https://github.com/slorber/trailing-slash-guide) to choose the appropriate setting. ::: ### `i18n` {#i18n} - Type: `Object` The i18n configuration object to [localize your site](../i18n/i18n-introduction.mdx). Example: {/* cSpell:ignore فارسی */} ```js title="docusaurus.config.js" export default { i18n: { defaultLocale: 'en', locales: ['en', 'fa'], path: 'i18n', localeConfigs: { en: { label: 'English', direction: 'ltr', htmlLang: 'en-US', calendar: 'gregory', path: 'en', }, fa: { label: 'فارسی', direction: 'rtl', htmlLang: 'fa-IR', calendar: 'persian', path: 'fa', }, }, }, }; ``` - `defaultLocale`: The locale that (1) does not have its name in the base URL (2) gets started with `docusaurus start` without `--locale` option (3) will be used for the `` tag - `locales`: List of locales deployed on your site. Must contain `defaultLocale`. - `path`: Root folder which all locale folders are relative to. Can be absolute or relative to the config file. Defaults to `i18n`. - `localeConfigs`: Individual options for each locale. - `label`: The label displayed for this locale in the locales dropdown. - `direction`: `ltr` (default) or `rtl` (for [right-to-left languages](https://developer.mozilla.org/en-US/docs/Glossary/rtl) like Farsi, Arabic, Hebrew, etc.). Used to select the locale's CSS and HTML meta attribute. - `htmlLang`: BCP 47 language tag to use in `` (or any other DOM tag name) and in `` - `calendar`: the [calendar](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/calendar) used to calculate the date era. Note that it doesn't control the actual string displayed: `MM/DD/YYYY` and `DD/MM/YYYY` are both `gregory`. To choose the format (`DD/MM/YYYY` or `MM/DD/YYYY`), set your locale name to `en-GB` or `en-US` (`en` means `en-US`). - `path`: Root folder that all plugin localization folders of this locale are relative to. Will be resolved against `i18n.path`. Defaults to the locale's name. Note: this has no effect on the locale's `baseUrl`—customization of base URL is a work-in-progress. ### `noIndex` {#noIndex} - Type: `boolean` This option adds `` to every page to tell search engines to avoid indexing your site (more information [here](https://moz.com/learn/seo/robots-meta-directives)). Example: ```js title="docusaurus.config.js" export default { noIndex: true, // Defaults to `false` }; ``` ### `onBrokenLinks` {#onBrokenLinks} - Type: `'ignore' | 'log' | 'warn' | 'throw'` The behavior of Docusaurus when it detects any broken link. By default, it throws an error, to ensure you never ship any broken link. :::note The broken links detection is only available for a production build (`docusaurus build`). ::: ### `onBrokenAnchors` {#onBrokenAnchors} - Type: `'ignore' | 'log' | 'warn' | 'throw'` The behavior of Docusaurus when it detects any broken anchor declared with the `Heading` component of Docusaurus. By default, it prints a warning, to let you know about your broken anchors. ### `onBrokenMarkdownLinks` {#onBrokenMarkdownLinks} - Type: `'ignore' | 'log' | 'warn' | 'throw'` The behavior of Docusaurus when it detects any broken Markdown link. By default, it prints a warning, to let you know about your broken Markdown link. ### `onDuplicateRoutes` {#onDuplicateRoutes} - Type: `'ignore' | 'log' | 'warn' | 'throw'` The behavior of Docusaurus when it detects any [duplicate routes](/guides/creating-pages.mdx#duplicate-routes). By default, it displays a warning after you run `yarn start` or `yarn build`. ### `tagline` {#tagline} - Type: `string` The tagline for your website. ```js title="docusaurus.config.js" export default { tagline: 'Docusaurus makes it easy to maintain Open Source documentation websites.', }; ``` ### `organizationName` {#organizationName} - Type: `string` The GitHub user or organization that owns the repository. You don't need this if you are not using the `docusaurus deploy` command. ```js title="docusaurus.config.js" export default { // Docusaurus' organization is facebook organizationName: 'facebook', }; ``` ### `projectName` {#projectName} - Type: `string` The name of the GitHub repository. You don't need this if you are not using the `docusaurus deploy` command. ```js title="docusaurus.config.js" export default { projectName: 'docusaurus', }; ``` ### `deploymentBranch` {#deploymentBranch} - Type: `string` The name of the branch to deploy the static files to. You don't need this if you are not using the `docusaurus deploy` command. ```js title="docusaurus.config.js" export default { deploymentBranch: 'gh-pages', }; ``` ### `githubHost` {#githubHost} - Type: `string` The hostname of your server. Useful if you are using GitHub Enterprise. You don't need this if you are not using the `docusaurus deploy` command. ```js title="docusaurus.config.js" export default { githubHost: 'github.com', }; ``` ### `githubPort` {#githubPort} - Type: `string` The port of your server. Useful if you are using GitHub Enterprise. You don't need this if you are not using the `docusaurus deploy` command. ```js title="docusaurus.config.js" export default { githubPort: '22', }; ``` ### `themeConfig` {#themeConfig} - Type: `Object` The [theme configuration](./themes/theme-configuration.mdx) object to customize your site UI like navbar and footer. Example: ```js title="docusaurus.config.js" export default { themeConfig: { docs: { sidebar: { hideable: false, autoCollapseCategories: false, }, }, colorMode: { defaultMode: 'light', disableSwitch: false, respectPrefersColorScheme: true, }, navbar: { title: 'Site Title', logo: { alt: 'Site Logo', src: 'img/logo.svg', width: 32, height: 32, }, items: [ { to: 'docs/docusaurus.config.js', activeBasePath: 'docs', label: 'docusaurus.config.js', position: 'left', }, // ... other links ], }, footer: { style: 'dark', links: [ { title: 'Docs', items: [ { label: 'Docs', to: 'docs/doc1', }, ], }, // ... other links ], logo: { alt: 'Meta Open Source Logo', src: 'img/meta_oss_logo.png', href: 'https://opensource.fb.com', width: 160, height: 51, }, copyright: `Copyright © ${new Date().getFullYear()} Facebook, Inc.`, // You can also put own HTML here }, }, }; ``` ### `plugins` {#plugins} - Type: `PluginConfig[]` ```ts type PluginConfig = string | [string, any] | PluginModule | [PluginModule, any]; ``` See [plugin method references](./plugin-methods/README.mdx) for the shape of a `PluginModule`. ```js title="docusaurus.config.js" export default { plugins: [ 'docusaurus-plugin-awesome', ['docusuarus-plugin-confetti', {fancy: false}], () => ({ postBuild() { console.log('Build finished'); }, }), ], }; ``` ### `themes` {#themes} - Type: `PluginConfig[]` ```js title="docusaurus.config.js" export default { themes: ['@docusaurus/theme-classic'], }; ``` ### `presets` {#presets} - Type: `PresetConfig[]` ```ts type PresetConfig = string | [string, any]; ``` ```js title="docusaurus.config.js" export default { presets: [], }; ``` ### `markdown` {#markdown} The global Docusaurus Markdown config. - Type: `MarkdownConfig` ```ts type MarkdownPreprocessor = (args: { filePath: string; fileContent: string; }) => string; type MDX1CompatOptions = | boolean | { comments: boolean; admonitions: boolean; headingIds: boolean; }; export type ParseFrontMatter = (params: { filePath: string; fileContent: string; defaultParseFrontMatter: ParseFrontMatter; }) => Promise<{ frontMatter: {[key: string]: unknown}; content: string; }>; type MarkdownAnchorsConfig = { maintainCase: boolean; }; type MarkdownConfig = { format: 'mdx' | 'md' | 'detect'; mermaid: boolean; preprocessor?: MarkdownPreprocessor; parseFrontMatter?: ParseFrontMatter; mdx1Compat: MDX1CompatOptions; remarkRehypeOptions: object; // see https://github.com/remarkjs/remark-rehype#options anchors: MarkdownAnchorsConfig; }; ``` Example: ```js title="docusaurus.config.js" export default { markdown: { format: 'mdx', mermaid: true, preprocessor: ({filePath, fileContent}) => { return fileContent.replaceAll('{{MY_VAR}}', 'MY_VALUE'); }, parseFrontMatter: async (params) => { const result = await params.defaultParseFrontMatter(params); result.frontMatter.description = result.frontMatter.description?.replaceAll('{{MY_VAR}}', 'MY_VALUE'); return result; }, mdx1Compat: { comments: true, admonitions: true, headingIds: true, }, anchors: { maintainCase: true, }, }, }; ``` ```mdx-code-block ``` | Name | Type | Default | Description | | --- | --- | --- | --- | | `format` | `'mdx' \| 'md' \| 'detect'` | `'mdx'` | The default parser format to use for Markdown content. Using 'detect' will select the appropriate format automatically based on file extensions: `.md` vs `.mdx`. | | `mermaid` | `boolean` | `false` | When `true`, allows Docusaurus to render Markdown code blocks with `mermaid` language as Mermaid diagrams. | | `preprocessor` | `MarkdownPreprocessor` | `undefined` | Gives you the ability to alter the Markdown content string before parsing. Use it as a last-resort escape hatch or workaround: it is almost always better to implement a Remark/Rehype plugin. | | `parseFrontMatter` | `ParseFrontMatter` | `undefined` | Gives you the ability to provide your own front matter parser, or to enhance the default parser. Read our [front matter guide](../guides/markdown-features/markdown-features-intro.mdx#front-matter) for details. | | `mdx1Compat` | `MDX1CompatOptions` | `{comments: true, admonitions: true, headingIds: true}` | Compatibility options to make it easier to upgrade to Docusaurus v3+. | | `anchors` | `MarkdownAnchorsConfig` | `{maintainCase: false}` | Options to control the behavior of anchors generated from Markdown headings | | `remarkRehypeOptions` | `object` | `undefined` | Makes it possible to pass custom [`remark-rehype` options](https://github.com/remarkjs/remark-rehype#options). | ```mdx-code-block ``` ### `customFields` {#customFields} Docusaurus guards `docusaurus.config.js` from unknown fields. To add a custom field, define it on `customFields`. - Type: `Object` ```js title="docusaurus.config.js" export default { customFields: { admin: 'endi', superman: 'lol', }, }; ``` Attempting to add unknown fields in the config will lead to errors during build time: ```bash Error: The field(s) 'foo', 'bar' are not recognized in docusaurus.config.js ``` ### `staticDirectories` {#staticDirectories} An array of paths, relative to the site's directory or absolute. Files under these paths will be copied to the build output as-is. - Type: `string[]` Example: ```js title="docusaurus.config.js" export default { staticDirectories: ['static'], }; ``` ### `headTags` {#headTags} An array of tags that will be inserted in the HTML ``. The values must be objects that contain two properties; `tagName` and `attributes`. `tagName` must be a string that determines the tag being created; eg `"link"`. `attributes` must be an attribute-value map. - Type: `{ tagName: string; attributes: Object; }[]` Example: ```js title="docusaurus.config.js" export default { headTags: [ { tagName: 'link', attributes: { rel: 'icon', href: '/img/docusaurus.png', }, }, ], }; ``` This would become `` in the generated HTML. ### `scripts` {#scripts} An array of scripts to load. The values can be either strings or plain objects of attribute-value maps. The ` <% }); %> <%~ it.postBodyTags %> `, }; ``` ### `titleDelimiter` {#titleDelimiter} - Type: `string` Will be used as title delimiter in the generated `` tag. Example: ```js title="docusaurus.config.js" export default { titleDelimiter: '🦖', // Defaults to `|` }; ``` ### `baseUrlIssueBanner` {#baseUrlIssueBanner} - Type: `boolean` When enabled, will show a banner in case your site can't load its CSS or JavaScript files, which is a very common issue, often related to a wrong `baseUrl` in site config. Example: ```js title="docusaurus.config.js" export default { baseUrlIssueBanner: true, // Defaults to `true` }; ``` ![A sample base URL issue banner. The style is very raw since the stylesheets failed to load. The text says "Your Docusaurus site did not load properly... Current configured baseUrl = / (default value); We suggest trying baseUrl = /build/](/img/baseUrlIssueBanner.png) :::warning This banner needs to inline CSS / JS in case all asset loading fails due to wrong base URL. If you have a strict [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP), you should rather disable it. :::