# meta/docusaurus architecture

> Architecture diagram of the GitHub repository meta/docusaurus, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-09). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/meta/docusaurus
- Repository: https://github.com/meta/docusaurus

## Overview

Docusaurus is a framework for building and maintaining project websites. The user-facing workflow begins by initializing a site, configuring content and appearance, and building or serving a website with docs, blog posts, and custom pages. Internally, content plugins prepare route data; the core client renders routes using a theme. Localization and optional integrations extend this flow. The tree and excerpts support several specific plugin calls, but do not expose the full core build orchestration, so unverified runtime links are omitted rather than inferred.

Main entry points: [`packages/docusaurus-plugin-content-blog/src/routes.ts`](https://github.com/meta/docusaurus/blob/main/packages/docusaurus-plugin-content-blog/src/routes.ts) (Blog routes), [`packages/docusaurus/src/client/App.tsx`](https://github.com/meta/docusaurus/blob/main/packages/docusaurus/src/client/App.tsx) (Client application), [`packages/docusaurus-plugin-content-docs/src/routes.ts`](https://github.com/meta/docusaurus/blob/main/packages/docusaurus-plugin-content-docs/src/routes.ts) (Docs routes), [`packages/create-docusaurus/src/index.ts`](https://github.com/meta/docusaurus/blob/main/packages/create-docusaurus/src/index.ts) (Site initializer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_setup["Site setup"]
  node_initializer["Site initializer<br/>[index.ts]"]
  node_core["Docusaurus core"]
  node_route_codegen["Route generation<br/>[codegenRoutes.ts]"]
end

subgraph group_content["Content processing"]
  node_mdx["Markdown processing<br/>[processor.ts]"]
  node_docs["Docs content<br/>[docs.ts]"]
  node_blog["Blog content<br/>[blogUtils.ts]"]
  node_blog_authors["Blog authors<br/>[authors.ts]"]
  node_blog_routes["Blog routes<br/>[routes.ts]"]
  node_docs_routes["Docs routes<br/>[routes.ts]"]
  node_pages["Custom pages<br/>[routes.ts]"]
end

subgraph group_runtime["Site runtime"]
  node_client["Client application<br/>[App.tsx]"]
  node_theme["Classic theme"]
  node_website["Generated website"]
end

subgraph group_features["Site capabilities"]
  node_localization["Translations<br/>[update.mjs]"]
  node_search["Algolia search"]
  node_redirects["Client redirects"]
  node_sitemap["Sitemap<br/>[createSitemap.ts]"]
  node_pwa["Progressive web app<br/>[index.ts]"]
end

subgraph group_integrations["Extensions"]
  node_analytics["Analytics extensions<br/>[index.ts]"]
end

node_author(("Site author"))

node_author -->|"initializes site"| node_initializer
node_blog_routes -->|"paginates posts"| node_blog
node_blog_routes -->|"groups authors"| node_blog_authors
node_docs_routes -->|"uses doc data"| node_docs
node_client -->|"renders site"| node_website
node_client -->|"renders theme"| node_theme
node_author -->|"builds website"| node_website

click node_initializer "https://github.com/meta/docusaurus/blob/main/packages/create-docusaurus/src/index.ts"
click node_core "https://github.com/meta/docusaurus/tree/main/packages/docusaurus/src"
click node_route_codegen "https://github.com/meta/docusaurus/blob/main/packages/docusaurus/src/server/codegen/codegenRoutes.ts"
click node_mdx "https://github.com/meta/docusaurus/blob/main/packages/docusaurus-mdx-loader/src/processor.ts"
click node_docs "https://github.com/meta/docusaurus/blob/main/packages/docusaurus-plugin-content-docs/src/docs.ts"
click node_blog "https://github.com/meta/docusaurus/blob/main/packages/docusaurus-plugin-content-blog/src/blogUtils.ts"
click node_blog_authors "https://github.com/meta/docusaurus/blob/main/packages/docusaurus-plugin-content-blog/src/authors.ts"
click node_blog_routes "https://github.com/meta/docusaurus/blob/main/packages/docusaurus-plugin-content-blog/src/routes.ts"
click node_docs_routes "https://github.com/meta/docusaurus/blob/main/packages/docusaurus-plugin-content-docs/src/routes.ts"
click node_pages "https://github.com/meta/docusaurus/blob/main/packages/docusaurus-plugin-content-pages/src/routes.ts"
click node_client "https://github.com/meta/docusaurus/blob/main/packages/docusaurus/src/client/App.tsx"
click node_theme "https://github.com/meta/docusaurus/tree/main/packages/docusaurus-theme-classic/src"
click node_localization "https://github.com/meta/docusaurus/blob/main/packages/docusaurus-theme-translations/update.mjs"
click node_search "https://github.com/meta/docusaurus/blob/main/packages/docusaurus-theme-search-algolia/src/client/useSearchResultUrlProcessor.ts"
click node_redirects "https://github.com/meta/docusaurus/blob/main/packages/docusaurus-plugin-client-redirects/src/writeRedirectFiles.ts"
click node_sitemap "https://github.com/meta/docusaurus/blob/main/packages/docusaurus-plugin-sitemap/src/createSitemap.ts"
click node_pwa "https://github.com/meta/docusaurus/blob/main/packages/docusaurus-plugin-pwa/src/index.ts"
click node_analytics "https://github.com/meta/docusaurus/blob/main/packages/docusaurus-plugin-google-gtag/src/index.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_initializer,node_core,node_route_codegen toneBlue
class node_mdx,node_docs,node_blog,node_blog_authors,node_blog_routes,node_docs_routes,node_pages toneAmber
class node_client,node_theme,node_website toneMint
class node_localization,node_search,node_redirects,node_sitemap,node_pwa toneRose
class node_analytics,node_author toneIndigo
```

## Components

### Site setup

- [Site initializer](https://github.com/meta/docusaurus/blob/main/packages/create-docusaurus/src/index.ts): `packages/create-docusaurus/src/index.ts`
- [Docusaurus core](https://github.com/meta/docusaurus/tree/main/packages/docusaurus/src): `packages/docusaurus/src`
- [Route generation](https://github.com/meta/docusaurus/blob/main/packages/docusaurus/src/server/codegen/codegenRoutes.ts): `packages/docusaurus/src/server/codegen/codegenRoutes.ts`

### Content processing

- [Markdown processing](https://github.com/meta/docusaurus/blob/main/packages/docusaurus-mdx-loader/src/processor.ts): `packages/docusaurus-mdx-loader/src/processor.ts`
- [Docs content](https://github.com/meta/docusaurus/blob/main/packages/docusaurus-plugin-content-docs/src/docs.ts): `packages/docusaurus-plugin-content-docs/src/docs.ts`
- [Blog content](https://github.com/meta/docusaurus/blob/main/packages/docusaurus-plugin-content-blog/src/blogUtils.ts): `packages/docusaurus-plugin-content-blog/src/blogUtils.ts`
- [Blog authors](https://github.com/meta/docusaurus/blob/main/packages/docusaurus-plugin-content-blog/src/authors.ts): `packages/docusaurus-plugin-content-blog/src/authors.ts`
- [Blog routes](https://github.com/meta/docusaurus/blob/main/packages/docusaurus-plugin-content-blog/src/routes.ts): `packages/docusaurus-plugin-content-blog/src/routes.ts`
- [Docs routes](https://github.com/meta/docusaurus/blob/main/packages/docusaurus-plugin-content-docs/src/routes.ts): `packages/docusaurus-plugin-content-docs/src/routes.ts`
- [Custom pages](https://github.com/meta/docusaurus/blob/main/packages/docusaurus-plugin-content-pages/src/routes.ts): `packages/docusaurus-plugin-content-pages/src/routes.ts`

### Site runtime

- [Client application](https://github.com/meta/docusaurus/blob/main/packages/docusaurus/src/client/App.tsx): `packages/docusaurus/src/client/App.tsx`
- [Classic theme](https://github.com/meta/docusaurus/tree/main/packages/docusaurus-theme-classic/src): `packages/docusaurus-theme-classic/src`
- **Generated website**

### Site capabilities

- [Translations](https://github.com/meta/docusaurus/blob/main/packages/docusaurus-theme-translations/update.mjs): `packages/docusaurus-theme-translations/update.mjs`
- [Algolia search](https://github.com/meta/docusaurus/blob/main/packages/docusaurus-theme-search-algolia/src/client/useSearchResultUrlProcessor.ts): `packages/docusaurus-theme-search-algolia/src/client/useSearchResultUrlProcessor.ts`
- [Client redirects](https://github.com/meta/docusaurus/blob/main/packages/docusaurus-plugin-client-redirects/src/writeRedirectFiles.ts): `packages/docusaurus-plugin-client-redirects/src/writeRedirectFiles.ts`
- [Sitemap](https://github.com/meta/docusaurus/blob/main/packages/docusaurus-plugin-sitemap/src/createSitemap.ts): `packages/docusaurus-plugin-sitemap/src/createSitemap.ts`
- [Progressive web app](https://github.com/meta/docusaurus/blob/main/packages/docusaurus-plugin-pwa/src/index.ts): `packages/docusaurus-plugin-pwa/src/index.ts`

### Extensions

- [Analytics extensions](https://github.com/meta/docusaurus/blob/main/packages/docusaurus-plugin-google-gtag/src/index.ts): `packages/docusaurus-plugin-google-gtag/src/index.ts`

### Other components

- **Site author**

## Connections

- Site author → Site initializer: initializes site (evidence: `README.md`)
- Blog routes → Blog content: paginates posts (evidence: `packages/docusaurus-plugin-content-blog/src/routes.ts`)
- Blog routes → Blog authors: groups authors (evidence: `packages/docusaurus-plugin-content-blog/src/routes.ts`)
- Docs routes → Docs content: uses doc data (evidence: `packages/docusaurus-plugin-content-docs/src/routes.ts`)
- Client application → Generated website: renders site (evidence: `packages/docusaurus/src/client/App.tsx`)
- Client application → Classic theme: renders theme (evidence: `packages/docusaurus/src/client/App.tsx`)
- Site author → Generated website: builds website (evidence: `README.md`)
