Migrating from Docusaurus to docmd
Docusaurus is a popular React-based documentation framework. docmd provides a fast, zero-config alternative. It compiles significantly faster and doesn’t require React components to render rich features.
Step 1: Run the Migration Engine
Run the following command at the root of your existing Docusaurus project:
npx @docmd/core migrate --docusaurus
What Happens Automatically
- Backup: Your entire project (excluding
node_modulesand.git) is safely moved into a newdocusaurus-backup/directory. - Content Migration: Your
docs/folder is restored to the root directory for docmd to use. - Config Generation: A
docmd.config.jsonis generated, extracting your sitetitlefrom your Docusaurus configuration.
Step 2: Test the Setup
Once the command finishes, you can immediately preview your Markdown content in docmd:
npx @docmd/core dev
Your Markdown files will compile, but your navigation sidebar will be empty.
Step 3: Manual Configuration
Docusaurus has complex programmatic configurations that docmd does not try to guess. You must map these manually.
1. Navigation Setup
Docusaurus sidebars are often auto-generated or configured in sidebars.js.
Action required: Create a navigation.json inside your new docs/ directory to structure your docmd sidebar. See the Navigation Guide.
2. Replacing MDX Components
Docusaurus relies heavily on MDX (.mdx) to render custom React components. docmd is purely Markdown-driven and does not use React.
Action required: Convert any custom <MyReactComponent /> tags into standard Markdown or use docmd’s native Containers.
Example: Converting Admonitions
Docusaurus:
:::tip My Tip
This is a helpful tip.
:::
Docusaurus admonition syntax works without any modification. The following aliases are fully supported:
:::note→ renders ascallout info:::tip→ renders ascallout tip:::info→ renders ascallout info:::caution→ renders ascallout warning:::danger→ renders ascallout danger
Spaceless syntax is also supported. Your existing Docusaurus admonitions will render correctly in docmd without changes.
docmd native syntax (optional, provides more features like custom icons):
::: callout tip "My Tip"
This is a helpful tip.
:::
Example: Converting Tabs
Docusaurus:
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
<Tabs>
<TabItem value="apple" label="Apple" default>
This is an apple.
</TabItem>
<TabItem value="orange" label="Orange">
This is an orange.
</TabItem>
</Tabs>
docmd: (Convert to the native docmd tabs container syntax)
::: tabs
== tab "Apple"
This is an apple.
== tab "Orange"
This is an orange.
:::
3. Localisation (i18n)
If you used Docusaurus’s i18n features, your translated files were likely in i18n/locale/docusaurus-plugin-content-docs/current/.
Action required: Move these files into docmd’s directory structure (docs/en/, docs/es/, etc.) and configure the locales in docmd.config.json. See the Localisation Guide.
Next Steps
- Explore the Layout & UI settings to match your Docusaurus theme.
- Convert React-based hero headers into docmd Hero Containers.