Skip to main content
Docusaurus

Search documentation

Type to search this documentation.

On this pageOverview

Docs Multi-instance

The @docusaurus/plugin-content-docs plugin can support multi-instance.

Sometimes you want a Docusaurus site to host 2 distinct sets of documentation (or more).

These documentations may even have different versioning/release lifecycles.

If you build a cross-platform mobile SDK, you may have 2 documentations:

  • Android SDK documentation (v1.0, v1.1)
  • iOS SDK documentation (v1.0, v2.0)

In this case, you can use a distinct docs plugin instance per mobile SDK documentation.

Sometimes, you want some documents to be versioned, while other documents are more "global", and it feels useless to version them.

We use this pattern on the Docusaurus website itself:

Suppose you have 2 documentations:

  • Product: some versioned doc about your product
  • Community: some unversioned doc about the community around your product

In this case, you should use the same plugin twice in your site configuration.

When using the preset:

docusaurus.config.js
export default {  presets: [    [      '@docusaurus/preset-classic',      {        docs: {          // id: 'product', // omitted => default instance          path: 'product',          routeBasePath: 'product',          sidebarPath: './sidebarsProduct.js',          // ... other options        },      },    ],  ],  plugins: [    [      '@docusaurus/plugin-content-docs',      {        id: 'community',        path: 'community',        routeBasePath: 'community',        sidebarPath: './sidebarsCommunity.js',        // ... other options      },    ],  ],};

When not using the preset:

docusaurus.config.js
export default {  plugins: [    [      '@docusaurus/plugin-content-docs',      {        // id: 'product', // omitted => default instance        path: 'product',        routeBasePath: 'product',        sidebarPath: './sidebarsProduct.js',        // ... other options      },    ],    [      '@docusaurus/plugin-content-docs',      {        id: 'community',        path: 'community',        routeBasePath: 'community',        sidebarPath: './sidebarsCommunity.js',        // ... other options      },    ],  ],};

Don't forget to assign a unique id attribute to plugin instances.

Each plugin instance will store versioned docs in a distinct folder.

The default plugin instance will use these paths:

  • website/versions.json
  • website/versioned_docs
  • website/versioned_sidebars

The other plugin instances (with an id attribute) will use these paths:

  • website/[pluginId]_versions.json
  • website/[pluginId]_versioned_docs
  • website/[pluginId]_versioned_sidebars

Each plugin instance will have its own CLI command to tag a new version. They will be displayed if you run:

npm2yarn
npm run docusaurus -- --help

To version the product/default docs plugin instance:

npm2yarn
npm run docusaurus docs:version 1.0.0

To version the non-default/community docs plugin instance:

npm2yarn
npm run docusaurus docs:version:community 1.0.0

Each docs-related theme navbar items take an optional docsPluginId attribute.

For example, if you want to have one version dropdown for each mobile SDK (iOS and Android), you could do:

docusaurus.config.js
export default {  themeConfig: {    navbar: {      items: [        {          type: 'docsVersionDropdown',          docsPluginId: 'ios',        },        {          type: 'docsVersionDropdown',          docsPluginId: 'android',        },      ],    },  },};
Suggest an edit

Propose a replacement for this page. The site team reviews it before applying any changes.

Export
Documentation menu