# MkDocs — Project Documentation with Markdown > MkDocs turns a folder of Markdown files into a fast static documentation site. With themes like Material for MkDocs, plugins, and search built in, it is the go-to choice for technical docs that need to stay close to the code. ## Install Save in your project root: # MkDocs — Project Documentation with Markdown ## Quick Use ```bash pip install mkdocs mkdocs-material mkdocs new mydocs cd mydocs mkdocs serve # http://127.0.0.1:8000 with live reload mkdocs build # static site in ./site mkdocs gh-deploy # push to gh-pages branch ``` ## Introduction MkDocs is the most popular static site generator specifically built for project documentation. Unlike generic SSGs (Hugo, Jekyll), it ships with docs-focused features out of the box: navigation YAML, search, doc-site themes, and a rich plugin ecosystem. The Material for MkDocs theme is so widely used it powers the docs for FastAPI, Pydantic, DVC, and thousands more. With over 20,000 GitHub stars (plus 21,000 for Material), MkDocs is the default for Python-adjacent projects and a safe choice for any technical team that writes Markdown. ## What MkDocs Does MkDocs reads a `mkdocs.yml` config, converts your `docs/` folder of Markdown into a static HTML site, and serves it with a dev server or builds to `./site`. Themes, plugins, and Markdown extensions cover navigation, search, versioning, API reference generation, and diagrams. ## Architecture Overview ``` docs/ index.md guide/intro.md mkdocs.yml (nav + theme + plugins) | [MkDocs build] | Markdown --> HTML via Python-Markdown + extensions | Theme (Material, ReadTheDocs, mkdocs-classic) | ./site/ static HTML + search index | Deploy -> GitHub Pages / Netlify / Nginx / S3 ``` ## Self-Hosting & Configuration ```yaml # mkdocs.yml site_name: My Project site_url: https://docs.example.com repo_url: https://github.com/me/my-project theme: name: material features: - navigation.instant - navigation.tabs - content.code.copy - search.suggest palette: - scheme: default primary: indigo markdown_extensions: - admonition - pymdownx.superfences: custom_fences: - name: mermaid class: mermaid - pymdownx.tabbed: alternate_style: true plugins: - search - mkdocstrings: handlers: python: options: show_source: false nav: - Home: index.md - Guide: - guide/intro.md - guide/config.md - API: reference/ ``` ## Key Features - **Markdown-first** — write docs in plain Markdown, no custom DSL - **Live preview** — `mkdocs serve` auto-reloads on save - **Themes** — Material (most popular), ReadTheDocs, custom - **Plugins** — mkdocstrings (Python API docs), versioning, i18n, redirects - **Search** — built-in client-side search with no server needed - **Deploy anywhere** — static HTML works on GitHub Pages, Netlify, S3, CDN - **Mermaid & diagrams** — via Material for MkDocs out of the box - **Versioning** — `mike` plugin for multiple doc versions side-by-side ## Comparison with Similar Tools | Feature | MkDocs | Docusaurus | Sphinx | VitePress | GitBook | |---|---|---|---|---|---| | Input | Markdown | MDX | reST (or MD) | Markdown | Markdown | | Setup | Very Low | Low | Moderate | Low | Managed | | Auto API docs | mkdocstrings | manual | autodoc (Python first-class) | manual | manual | | Theme quality | Excellent (Material) | Excellent | Good | Excellent | Excellent | | Search | Built-in | Via plugin | Built-in | Built-in | Built-in | | Best For | Python/any projects | React shops | Python libs | Vue/VitePress shops | SaaS docs | ## FAQ **Q: MkDocs vs Docusaurus?** A: MkDocs is simpler and Markdown-only — great for small/medium projects. Docusaurus uses MDX (Markdown + React) and fits teams that want interactive docs. Both produce beautiful sites; pick by team preference. **Q: How do I version docs?** A: Install `mike` (`pip install mike`) and deploy with `mike deploy 1.0 latest --push`. You get a version selector in Material theme automatically. **Q: Can I auto-generate API reference from Python docstrings?** A: Yes. `mkdocstrings` pulls docstrings and types, rendering them in Material style. It reads Google, NumPy, and Sphinx-style docstrings. **Q: Is MkDocs limited to Python projects?** A: Not at all. MkDocs is written in Python but the output is generic Markdown → HTML. It is used for projects in Go, Rust, JS, and non-code teams. ## Sources - GitHub: https://github.com/mkdocs/mkdocs - Docs: https://www.mkdocs.org - Material theme: https://github.com/squidfunk/mkdocs-material - License: BSD-2-Clause --- Source: https://tokrepo.com/en/workflows/690157c6-37b5-11f1-9bc6-00163e2b0d79 Author: AI Open Source