Skip to main content

Docusaurus

A guide to using Docusaurus for documentation sites.

What is Docusaurus?​

Docusaurus is a static site generator built by Meta specifically for documentation websites. It's a complete framework that:

  • Converts Markdown files into a fully functional website
  • Provides a pre-built UI (navbar, sidebar, search, dark mode)
  • Handles routing, bundling, and optimization
  • Outputs static HTML/CSS/JS that can be hosted anywhere

Architecture​

Not Next.js​

Docusaurus is not built on Next.js - they're separate frameworks:

FrameworkPurposeBuilt On
DocusaurusDocumentation sitesReact + custom SSG
Next.jsFull-stack web appsReact
NextraDocs (Next.js-based)Next.js

Quick Start​

Create a New Site​

npx create-docusaurus@latest my-docs classic
cd my-docs
npm start

Project Structure​

my-docs/
├── docs/ # Markdown documentation
│ ├── intro.md
│ └── tutorial/
├── src/
│ ├── css/custom.css # Custom styles
│ └── pages/ # Custom React pages
├── static/ # Static assets (images, etc.)
├── docusaurus.config.js # Main configuration
├── sidebars.js # Sidebar structure
└── package.json

Configuration​

docusaurus.config.js​

The main configuration file controls everything:

const config = {
// Site metadata
title: 'My Docs',
tagline: 'Documentation for my project',
url: 'https://docs.example.com',
baseUrl: '/',

// Build settings
future: {
v4: true,
experimental_faster: true, // 2-5x faster builds
},

// Presets bundle common plugins
presets: [
[
'classic',
{
docs: {
sidebarPath: './sidebars.js',
editUrl: 'https://github.com/user/repo/tree/main/',
},
theme: {
customCss: './src/css/custom.css',
},
},
],
],

// Theme configuration
themeConfig: {
navbar: { /* ... */ },
footer: { /* ... */ },
colorMode: {
defaultMode: 'dark',
respectPrefersColorScheme: true,
},
},
};

sidebars.js​

Controls the sidebar navigation:

// Auto-generate from folder structure
const sidebars = {
docs: [
{
type: 'autogenerated',
dirName: '.',
},
],
};

// Or define manually
const sidebars = {
docs: [
'intro',
{
type: 'category',
label: 'Getting Started',
items: ['installation', 'configuration'],
},
],
};

Writing Content​

Frontmatter​

Every markdown file can have frontmatter:

---
sidebar_position: 1
sidebar_label: 'Custom Label'
title: 'Page Title'
description: 'SEO description'
tags: [guide, tutorial]
---

# Your Content Here

Admonitions​

Built-in callout boxes:

:::note
This is a note.
:::

:::tip
This is a tip.
:::

:::warning
This is a warning.
:::

:::danger
This is dangerous!
:::

:::info
This is informational.
:::

Renders as:

note

This is a note.

tip

This is a tip.

warning

This is a warning.

Code Blocks​

Syntax highlighting with titles and line highlighting:

```javascript title="example.js"
// highlight-next-line
const highlighted = true;

function example() {
// highlight-start
const multiLine = 'highlighted';
return multiLine;
// highlight-end
}
```

Tabs​

Group related content:

import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';

<Tabs>
<TabItem value="npm" label="npm" default>
npm install package
</TabItem>
<TabItem value="yarn" label="yarn">
yarn add package
</TabItem>
</Tabs>

Mermaid Diagrams​

Create diagrams in markdown (requires @docusaurus/theme-mermaid):

```mermaid
flowchart LR
A[Start] --> B{Decision}
B -->|Yes| C[Action 1]
B -->|No| D[Action 2]
```

Renders as:


Plugins​

Add offline search without Algolia:

npm install @easyops-cn/docusaurus-search-local
// docusaurus.config.js
plugins: [
[
'@easyops-cn/docusaurus-search-local',
{
hashed: true,
language: ['en'],
highlightSearchTermsOnTargetPage: true,
},
],
],

Mermaid Diagrams​

npm install @docusaurus/theme-mermaid
// docusaurus.config.js
markdown: {
mermaid: true,
},
themes: ['@docusaurus/theme-mermaid'],
themeConfig: {
mermaid: {
theme: { light: 'neutral', dark: 'dark' },
},
},

Faster Builds​

npm install @docusaurus/faster
// docusaurus.config.js
future: {
v4: true,
experimental_faster: true,
},

Deployment​

Build for Production​

npm run build

Outputs to build/ directory.

Vercel​

  1. Push to GitHub
  2. Import project in Vercel
  3. Build settings are auto-detected
  4. Add custom domain if needed

GitHub Pages​

// docusaurus.config.js
const config = {
url: 'https://username.github.io',
baseUrl: '/repo-name/',
organizationName: 'username',
projectName: 'repo-name',
deploymentBranch: 'gh-pages',
};
GIT_USER=username npm run deploy

Common Commands​

CommandDescription
npm startStart dev server
npm run buildBuild for production
npm run serveServe production build locally
npm run clearClear cache
npm run swizzleCustomize theme components

Tips​

Organize with Categories​

Use _category_.json in folders:

{
"label": "Getting Started",
"position": 1,
"collapsed": false
}

Custom CSS​

Override theme variables in src/css/custom.css:

:root {
--ifm-color-primary: #2e8555;
--ifm-code-font-size: 95%;
}

[data-theme='dark'] {
--ifm-color-primary: #25c2a0;
}

Assets​

Put images in static/img/ and reference them:

![Alt text](/img/screenshot.png)

Resources​