Skip to content

Migration Guide

Moving from MkDocs/Material to DocsForge is straightforward for most sites. This guide covers what migrates easily and what requires effort.

Easy to Migrate (Zero/Low Effort)

FeatureStatusNotes
Markdown content DirectAll .md files work as-is
Navigation (nav) Directnav: section copies over directly
Theme settings DirectColors, fonts, logos, favicons
Extra CSS/JS Directextra_css, extra_javascript
Markdown extensions Directadmonition, pymdownx, etc.
Search DirectBuilt-in, no config needed
Tags Directtags: plugin built-in
Git revision info DirectGit dates displayed automatically
PWA / Service Worker DirectBuilt-in, auto-generated
Sitemap DirectAuto-generated

Requires Some Effort

FeatureStatusMigration Path
Custom hooks AdaptRewrite as DocsForge plugins or use hooks: if compatible
Custom plugins AdaptCheck if DocsForge has equivalent; otherwise rewrite
Custom templates AdaptTemplate paths differ; check docsforge/templates/
Insiders features AdaptMany are included in DocsForge; check feature parity
Privacy plugin Built-inDocsForge includes privacy features by default
Optimize plugin Built-inAsset optimization runs automatically post-build
Tags layout ChangedCustom tag templates moved from fragments/tags/{layout}/ to fragments/tags/{layout}-tag.html and fragments/tags/{layout}-listing.html (flattened directory structure)

Requires Significant Effort

FeatureStatusNotes
Post-build scripts CustomNode.js/Python scripts that modify built HTML need porting
Deep MkDocs internals CustomPlugins that monkey-patch MkDocs classes
Custom extensions CustomPython markdown extensions with MkDocs-specific logic

MkDocs Plugin Migration Guide

MkDocs plugins are not compatible with DocsForge. Below is a mapping of common MkDocs plugins to their DocsForge equivalents or workarounds.

Built-in (Zero Effort)

These MkDocs plugins have direct built-in equivalents in DocsForge — remove from plugins: and they load automatically:

MkDocs PluginDocsForgeNotes
search Built-inLunr.js search, same behavior. Remove from config.
tags Built-inSame tags: front matter, same tag pages. Remove from config.
blog Built-inBlog with authors, categories, archives, RSS. Remove from config.
minify Built-inHTML/CSS/JS minification runs automatically post-build.
meta Built-inOpenGraph metadata, social previews. Included by default.
privacy Built-inExternal asset downloading and inlining (Google Fonts, CDN resources).

Config-Compatible (Copy Plugin Config)

These MkDocs plugins are not supported, but their features can be replicated with DocsForge's built-in capabilities:

MkDocs PluginDocsForge Equivalent
git-revision-date-localizedBuilt-in — every page shows git revision dates automatically
git-authorsBuilt-in — author info extracted from git history
macrosUse Jinja2 templates or extra: config variables
redirectsUse web server redirects (Netlify _redirects, nginx config, etc.)
awesome-pagesNavigation is auto-discovered when nav: is omitted; use nav: for explicit ordering
section-indexBuilt-in — section index pages work automatically
tooltipster-linksBuilt-in — tooltips on reference links are included in the theme
embed-externalUse standard Markdown links or pymdownx.snippets
include-markdownBuilt-in — pymdownx.snippets is enabled by default
mkdocstringsNot built-in; use pymdownx.snippets or a custom post-build script

No Direct Equivalent (Requires Custom Work)

MkDocs PluginWorkaround
mkdocs-material/plugins/socialNot built-in. Requires Pillow + CairoSVG. Install with pip install docsforge[imaging] and configure social: plugin manually.
mkdocs-redirectsUse server-level redirects (Cloudflare _redirects, nginx, etc.)
mkdocs-awesome-pagesManually specify nav: structure
mkdocs-glightboxImage lightbox not built-in. Use theme's built-in image zoom if available.
mkdocs-pdf-exportUse docsforge build --pdf (see PDF export setup)
mkdocs-static-i18nUse the built-in material/i18n plugin (see Internationalization setup)
mkdocs-videoUse standard HTML <video> tags in Markdown
mkdocs-galleryUse standard Markdown image syntax
mkdocs-jupyterNot supported. Export notebooks to Markdown first.
mkdocs-swagger-ui-tagNot supported. Use a custom plugin or embed Swagger UI HTML directly.

Custom MkDocs Plugins

Plugins that extend MkDocs' BasePlugin class or hook into MkDocs events (on_page_markdown, on_page_content, etc.) need to be rewritten for DocsForge's plugin system:

  1. DocsForge uses the same event names (on_page_markdown, on_post_build, etc.) — many MkDocs plugins can be adapted by changing the import from mkdocs.plugins to docsforge.core.plugin_base.
  2. The config schema uses DocsForge's Config class instead of MkDocs' BaseConfig.
  3. See the plugin development guide for details.

Markdown Extensions

All MkDocs-compatible Markdown extensions work directly. DocsForge uses the same python-markdown package with pymdown-extensions. Copy your markdown_extensions: block as-is:

markdown_extensions:
  - admonition
  - pymdownx.superfences
  - pymdownx.tabbed:
      alternate_style: true
  - pymdownx.tasklist:
      custom_checkbox: true
  # ... all your existing extensions work unchanged

The 31 most common extensions are already pre-enabled — you only need to list them if you want custom configuration.

Config Key Migration

MkDocs / Material KeyDocsForgeNotes
mkdocs.ymldocsforge.ymlRename the file
theme.name: materialtheme.name: materialSame — DocsForge bundles Material
theme.featurestheme.featuresSame — all Material features supported
theme.palettetheme.paletteSame — color scheme configuration
theme.fonttheme.fontSame — font configuration
theme.favicontheme.faviconSame — relative to docs_dir
theme.logotheme.logoSame — relative to docs_dir
theme.icon.logotheme.icon.logoSame — Material icon reference
markdown_extensionsmarkdown_extensionsSame — fully compatible
pluginspluginsPartial — built-in plugins work; third-party need porting
extra_cssextra_cssSame
extra_javascriptextra_javascriptSame
extraextraSame — custom template variables
site_dirsite_dirSame
docs_dirdocs_dirSame
hookshooksSame — but MkDocs hook format may differ
INHERIT❌ Not supportedUse YAML anchors instead
validationvalidationSame
watchwatchSame — extra paths to watch during serve

Deprecated / Removed Keys

KeyStatusReplacement
strict SupportedUse strict: true in config or docsforge build --strict on the CLI
config_file_pathInternalNot needed in user config
site_description SupportedSame key
site_author SupportedSame key
copyright SupportedSame key
repo_url SupportedSame key
repo_name SupportedSame key
edit_uri SupportedSame key
remote_branch❌ RemovedUse GitHub Actions for deployment
remote_name❌ RemovedUse GitHub Actions for deployment
use_directory_urls SupportedSame key (default: true)
dev_addr SupportedSame key (default: 127.0.0.1:8000)
site_url RequiredMust be set for social cards, sitemap, RSS

OI Wiki uses several advanced features. Here's how each maps:

OI Wiki FeatureDocsForge EquivalentEffort
hooks/on_env.py (nav_math filter)Custom plugin or hookMedium
toggle-sidebar pluginTheme customizationLow
document-offsets-injection extensionBuilt-in or custom pluginMedium
extra: disqusDisqus integration (manual)Low
extra: pagetimeBuilt-in git date displayNone
_static/css/extra.cssextra_css — direct copyNone
_static/js/math-csr.jsextra_javascript — direct copyNone
MathJax external CDNBuilt-in KaTeX or MathJaxLow
Post-build Node scriptsCustom build pipelineHigh

Estimated Migration Effort

  • Basic content + styling: < 1 hour
  • Custom hooks + extensions: 2–4 hours
  • Post-build pipeline: 4–8 hours
  • Full OI Wiki migration: ~1–2 days for a developer familiar with both systems

Feature Parity: Material vs DocsForge

FeatureMaterialDocsForge
Material theme (included)
Search (built-in)
Tags (built-in)
Social cards (Insiders)❌ Not built-in
Blog (Insiders) (built-in)
Privacy plugin (Insiders) (built-in)
Optimize plugin (Insiders) (auto post-build)
PWA / Offline (Insiders) (built-in)
Git revision dates (plugin) (built-in)
Minification (Insiders) (auto)
Built-in icons (58MB bundled)
Instant navigation
Custom admonitions
Mermaid diagrams (plugin) (built-in)
Code annotations (Insiders) (built-in)
Content tabs
Data tables
Tooltips

Step-by-Step Migration

1. Backup Your Site

cp mkdocs.yml mkdocs.yml.bak
git add -A && git commit -m "backup before docsforge migration"

2. Create docsforge.yml

Copy your mkdocs.yml to docsforge.yml. Most settings work directly:

site_name: Your Site
site_url: https://yourdomain.com
copyright: Copyright © 2025

nav:
  - Home: index.md
  # ... copy your nav structure

# Theme settings work as-is
theme:
  name: material
  palette:
    - media: "(prefers-color-scheme: light)"
      scheme: default
      primary: indigo
      accent: indigo
      toggle:
        icon: material/brightness-7
        name: Switch to dark mode
    - media: "(prefers-color-scheme: dark)"
      scheme: slate
      primary: indigo
      accent: indigo
      toggle:
        icon: material/brightness-4
        name: Switch to light mode

# Extra CSS/JS copy directly
extra_css:
  - stylesheets/extra.css
extra_javascript:
  - javascripts/extra.js

# Markdown extensions copy directly
markdown_extensions:
  - admonition
  - pymdownx.superfences
  - pymdownx.tabbed:
      alternate_style: true
  # ... etc

plugins:
  - tags
  - search
  # - blog        # built-in, customize only if needed

3. Convert Config Keys

DocsForge uses docsforge.yml with the same schema as mkdocs.yml. Replace these keys:

MkDocsDocsForge
mkdocs.ymldocsforge.yml
site_dirsite_dir (same)
docs_dirdocs_dir (same)
pluginsplugins (same)

4. Install DocsForge

pip install docsforge

5. Build and Test

cd your-project
docsforge build
# Check site/ directory
docsforge serve

6. Deploy

DocsForge outputs static HTML to site/ — deploy to any static host. See Deployment Guide for platform-specific instructions.

Troubleshooting

IssueCauseFix
plugin not foundPlugin not in DocsForgeCheck feature parity or install separately
theme not foundMaterial theme pathDocsForge bundles Material; use name: material
Custom hook failsMkDocs API differencesUpdate hook to use DocsForge APIs
CSS/JS not loadingPath resolutionCheck paths relative to docs_dir
Search not workingMissing indexEnsure search plugin is in plugins:

Getting Help