Curated from mkdocs/mkdocs issues and
discussions, sorted by user demand
(reactions π + comments). Items already addressed by mkdocs-ng are excluded.
π₯ P0 β High Demand / Urgent Bugs
1. Remove CDNs from built-in themes
- Issue: mkdocs/mkdocs#2171
- π: 18 Β· π¬: 7
- Description: The built-in
mkdocs and readthedocs themes load fonts (e.g. Lato, Roboto Slab) and CSS from Google Fonts / CDNs. Users who self-host documentation want full offline / privacy-respecting operation without third-party requests. Some fonts are already bundled, but base.html still references external URLs.
- Labels:
Theme-mkdocs, Theme-readthedocs
2. Improve mkdocs serve performance & authoring experience
- Issue: mkdocs/mkdocs#3695
- π: 15 Β· π¬: 22
- Description: Opened by the maintainer of Material for MkDocs. Proposes collaborative improvements to
mkdocs serve: faster rebuilds, smarter watcher, better error messages, and lowering the friction of the write-build-check loop. Concrete ideas include incremental builds, file-system-level caching, and a plugin-friendly architecture for serve hooks.
3. Stable public Python API
- Issue: mkdocs/mkdocs#1240
- π: 10 Β· π¬: 8
- Description: There is no officially supported way to invoke MkDocs from Python code. Users currently call internal functions (e.g.
build_command(), serve_command()) or shell out via subprocess. A documented, stable API (e.g. mkdocs.build(), mkdocs.serve()) is needed for build-system integrations, CI scripts, and programmatic usage.
- Labels:
Enhancement, Needs design decision
4. Remove hardcoded Google Analytics from theme
- Issue: mkdocs/mkdocs#3630
- π: 8 Β· π¬: 1
- Description: The
mkdocs theme hardcodes a Google Analytics snippet via the analytics template tag block. This is out of place in a privacy-conscious static site generator. Proposal: drop the built-in GA support entirely and document how to add analytics via extrahead template overrides instead.
- Labels:
Cleanup
5. Support multiple INHERIT configs
- Issue: mkdocs/mkdocs#2624
- π: 8 Β· π¬: 3
- Description:
INHERIT currently accepts only a single file path. Users with complex setups want to compose configuration from multiple files (e.g. one for markdown extensions, one for plugins, one for extra settings). Proposal: allow INHERIT to accept a list of paths.
- Labels:
Configuration
6. Fix mkdocs serve --livereload not triggering automatically
- Issue: mkdocs/mkdocs#4055
- π: 25 Β· π¬: 6
- Description: In recent versions, livereload no longer works unless
--livereload is passed explicitly. mkdocs-ng partially addresses this through PRs restoring --livereload, but some users still report it not working by default. This may intersect with the Click version issue (#4032) and WSL-specific problems (#4081).
- Status in mkdocs-ng: β
--livereload flag restored; default behaviour should be verified
7. mkdocs serve does not watch files (Click β₯ 8.3.0 regression)
- Issue: mkdocs/mkdocs#4032
- π: 66 Β· π¬: 31
- Description: Starting with Click 8.3.0, file watching breaks entirely β changes no longer trigger a rebuild. Workaround is pinning
click<=8.2.1. This is the highest-reaction open issue by far.
- Status in mkdocs-ng: needs verification β
pyproject.toml currently allows click >=7.0; CI pins to 8.1.8 for min-version tests, but the runtime constraint does not prevent 8.3.0.
β‘ P1 β Important Features & Fixes
8. Live reload triggers on editor temp / hidden files
- Issue: mkdocs/mkdocs#2519
- π: 7 Β· π¬: 18
- Description: Editors like Vim create swap files (
.foo.md.swp) and hidden files that cause mkdocs serve to constantly rebuild even though those files aren't included in the output. The watcher should ignore dot-files and editor temp files by default, with an opt-in mechanism for directories like .well-known/.
- Labels:
Command - serve, Configuration
9. Add rel="external" to outbound links
- Issue: mkdocs/mkdocs#3914
- π: 7 Β· π¬: 0
- Description: External (absolute URL) links should be automatically annotated with
rel="external" so theme authors and users can style them differently (e.g. add an external-link icon). This became more important after Material for MkDocs switched to always using absolute URLs for navigation.
- Labels:
Enhancement
10. Cache busting for static assets
- Issue: mkdocs/mkdocs#1979
- π: 5 Β· π¬: 34
- Description: MkDocs has no built-in mechanism to append content hashes to CSS/JS filenames for cache busting. After a documentation site update, returning visitors may get stale cached assets. Implementation could be via a plugin (preferred by maintainers) or core feature.
- Labels:
Enhancement, Plugins
11. Decouple built-in search from core
- Issue: mkdocs/mkdocs#3698
- π: 5 Β· π¬: 8
- Description: The search plugin (based on lunr.js) is bundled with core MkDocs. lunr.js is unmaintained (last commit ~4 years ago) with known bugs. Proposal: extract search into a standalone installable package, decouple it from the core release cycle, and pave the way for a modern replacement.
- Labels:
Search
12. Decouple built-in themes from core
- Issue: mkdocs/mkdocs#3636
- π: 4 Β· π¬: 17
- Description: The core maintainers agreed to move the
readthedocs theme (and possibly mkdocs theme) into separate repos and installable packages. This simplifies core, allows themes to be versioned independently, and opens the door for new default themes.
- Labels:
Cleanup
13. Support root directory as docs_dir
- Issue: mkdocs/mkdocs#3450 / PR #3519
- π: 3 Β· π¬: 15
- Description: MkDocs currently forbids placing
mkdocs.yml inside the docs_dir. Users who want to use the project root as docs_dir (e.g. monorepos, projects with README.md as homepage) need to work around this restriction. The PR #3519 removes the validation check and auto-excludes config/site files from the docs.
- Labels:
Navigation
π P2 β Nice to Have
14. Support text fragment links (ignore them during validation)
- Issue: mkdocs/mkdocs#3952
- π: 3 Β· π¬: 0
- Description: Text fragment links (
#:~:text=β¦) are a modern web standard for linking to specific text on a page. MkDocs' anchor validator incorrectly reports them as broken anchors. The validator should recognize and skip #:~:text= fragments.
- Labels:
Validation
15. Auto-switch port when the default port is busy
- Issue: mkdocs/mkdocs#3496
- π: 3 Β· π¬: 0
- Description: If port 8000 is already in use,
mkdocs serve should automatically try the next available port (8001, 8002, β¦) instead of failing. A related PR (#3498) adds a manual port override flag, but automatic fallback is the desired UX.
- Labels:
Command - serve
16. Smart section titles when no nav is configured
- Issue: mkdocs/mkdocs#3356
- π: 3 Β· π¬: 6
- Description: When no
nav is defined in mkdocs.yml, section titles for sub-directories should be derived from the index page's title metadata or first heading, rather than displaying raw directory names. This is already a feature in Material for MkDocs (navigation.smart-section-titles), but should be available in core.
- Labels:
Navigation, Titles
17. Support GitHub-style Markdown Alerts
- Issue: mkdocs/mkdocs#3997
- π: 2 Β· π¬: 2
- Description: GitHub-flavored markdown alert blocks (
> [!NOTE], > [!TIP], > [!IMPORTANT], > [!WARNING], > [!CAUTION]) should render as styled callouts in MkDocs. This would improve portability of docs authored on GitHub to MkDocs sites.
18. Extend on_page_context with Jinja2 Environment reference
- Issue: mkdocs/mkdocs#3709
- π: 2 Β· π¬: 1
- Description: The
on_page_context plugin event should expose the Jinja2 Environment object so plugins can apply per-page template filters and globals. This is needed for multi-instance plugins (e.g. Material for MkDocs blog plugin) where each plugin instance needs to register its own template functions per page.
19. Deprecated options should emit INFO, not WARNING
- Issue: mkdocs/mkdocs#3696
- π: 2 Β· π¬: 5
- Description: The
Deprecated config helper emits WARNING messages, which break --strict mode. Since deprecated options are still functional (just discouraged), they should emit INFO-level messages so strict builds don't fail on deprecation notices alone.
20. Custom import paths for markdown_extensions
- Issue: mkdocs/mkdocs#3772
- π: 1 Β· π¬: 29
- Description: Users who write small project-specific Markdown extensions need a way to add the extension's directory to
sys.path from within mkdocs.yml, without requiring PYTHONPATH hacks or pip-installable packages. A config option like markdown_extensions_path: ["extensions/"] would suffice.
21. Respect display text when the same .md file appears in nav multiple times
- Issue: mkdocs/mkdocs#3710
- π: 2 Β· π¬: 3
- Description: When a file is referenced multiple times in
nav with different display names (e.g. - 'French Main Dishes': 'French Cuisine.md' and - 'French Desserts': 'French Cuisine.md'), MkDocs now overrides both entries with the first title encountered. Previously, each entry kept its set display text.
π§ P3 β Maintenance & Infrastructure
22. New default theme
- Issue: mkdocs/mkdocs#3680
- π: 0 Β· π¬: 6
- Description: The default
mkdocs theme is dated (Bootstrap 3). A new, modern, optionally installable default theme should be designed and shipped separately, as part of the theme decoupling effort (#3636).
23. Title source precedence controls
- Issue: mkdocs/mkdocs#3532
- π: 0 Β· π¬: 37
- Description: When a page has both a YAML
title meta field and an H1 heading, the precedence between them (and the nav display name) can be surprising. Users want more control over which source wins, ideally configurable per page or globally.
24. Fix use_directory_urls: true with Click β₯ 8.2.2
- Issue: mkdocs/mkdocs#4014
- π: 7 Β· π¬: 5
- Description: Click 8.2.2 changed path behavior that broke
use_directory_urls: true β generated links become page/index.html instead of page/. This is related to #4032 and may require pinning or fixing the Click integration.
- Status in mkdocs-ng: unknown β needs testing with Click β₯ 8.2.2
25. WSL: mkdocs serve fails to live reload
- Issue: mkdocs/mkdocs#4081
- π: 2 Β· π¬: 2
- Description: On WSL with ext4 filesystem, file-watching doesn't trigger livereload. May be related to the Click watcher regression (#4032) or filesystem notification limitations in WSL.
Last updated: 2026-04-29
Sources: mkdocs/mkdocs open issues, sorted by reactions
Curated from mkdocs/mkdocs issues and
discussions, sorted by user demand
(reactions π + comments). Items already addressed by mkdocs-ng are excluded.
π₯ P0 β High Demand / Urgent Bugs
1. Remove CDNs from built-in themes
mkdocsandreadthedocsthemes load fonts (e.g. Lato, Roboto Slab) and CSS from Google Fonts / CDNs. Users who self-host documentation want full offline / privacy-respecting operation without third-party requests. Some fonts are already bundled, butbase.htmlstill references external URLs.Theme-mkdocs,Theme-readthedocs2. Improve
mkdocs serveperformance & authoring experiencemkdocs serve: faster rebuilds, smarter watcher, better error messages, and lowering the friction of the write-build-check loop. Concrete ideas include incremental builds, file-system-level caching, and a plugin-friendly architecture for serve hooks.3. Stable public Python API
build_command(),serve_command()) or shell out viasubprocess. A documented, stable API (e.g.mkdocs.build(),mkdocs.serve()) is needed for build-system integrations, CI scripts, and programmatic usage.Enhancement,Needs design decision4. Remove hardcoded Google Analytics from theme
mkdocstheme hardcodes a Google Analytics snippet via theanalyticstemplate tag block. This is out of place in a privacy-conscious static site generator. Proposal: drop the built-in GA support entirely and document how to add analytics viaextraheadtemplate overrides instead.Cleanup5. Support multiple
INHERITconfigsINHERITcurrently accepts only a single file path. Users with complex setups want to compose configuration from multiple files (e.g. one for markdown extensions, one for plugins, one for extra settings). Proposal: allowINHERITto accept a list of paths.Configuration6. Fix
mkdocs serve --livereloadnot triggering automatically--livereloadis passed explicitly. mkdocs-ng partially addresses this through PRs restoring--livereload, but some users still report it not working by default. This may intersect with the Click version issue (#4032) and WSL-specific problems (#4081).--livereloadflag restored; default behaviour should be verified7.
mkdocs servedoes not watch files (Click β₯ 8.3.0 regression)click<=8.2.1. This is the highest-reaction open issue by far.pyproject.tomlcurrently allowsclick >=7.0; CI pins to8.1.8for min-version tests, but the runtime constraint does not prevent 8.3.0.β‘ P1 β Important Features & Fixes
8. Live reload triggers on editor temp / hidden files
.foo.md.swp) and hidden files that causemkdocs serveto constantly rebuild even though those files aren't included in the output. The watcher should ignore dot-files and editor temp files by default, with an opt-in mechanism for directories like.well-known/.Command - serve,Configuration9. Add
rel="external"to outbound linksrel="external"so theme authors and users can style them differently (e.g. add an external-link icon). This became more important after Material for MkDocs switched to always using absolute URLs for navigation.Enhancement10. Cache busting for static assets
Enhancement,Plugins11. Decouple built-in search from core
Search12. Decouple built-in themes from core
readthedocstheme (and possiblymkdocstheme) into separate repos and installable packages. This simplifies core, allows themes to be versioned independently, and opens the door for new default themes.Cleanup13. Support root directory as
docs_dirmkdocs.ymlinside thedocs_dir. Users who want to use the project root asdocs_dir(e.g. monorepos, projects withREADME.mdas homepage) need to work around this restriction. The PR #3519 removes the validation check and auto-excludes config/site files from the docs.Navigationπ P2 β Nice to Have
14. Support text fragment links (ignore them during validation)
#:~:text=β¦) are a modern web standard for linking to specific text on a page. MkDocs' anchor validator incorrectly reports them as broken anchors. The validator should recognize and skip#:~:text=fragments.Validation15. Auto-switch port when the default port is busy
mkdocs serveshould automatically try the next available port (8001, 8002, β¦) instead of failing. A related PR (#3498) adds a manual port override flag, but automatic fallback is the desired UX.Command - serve16. Smart section titles when no nav is configured
navis defined inmkdocs.yml, section titles for sub-directories should be derived from the index page's title metadata or first heading, rather than displaying raw directory names. This is already a feature in Material for MkDocs (navigation.smart-section-titles), but should be available in core.Navigation,Titles17. Support GitHub-style Markdown Alerts
> [!NOTE],> [!TIP],> [!IMPORTANT],> [!WARNING],> [!CAUTION]) should render as styled callouts in MkDocs. This would improve portability of docs authored on GitHub to MkDocs sites.18. Extend
on_page_contextwith Jinja2 Environment referenceon_page_contextplugin event should expose the Jinja2Environmentobject so plugins can apply per-page template filters and globals. This is needed for multi-instance plugins (e.g. Material for MkDocs blog plugin) where each plugin instance needs to register its own template functions per page.19. Deprecated options should emit
INFO, notWARNINGDeprecatedconfig helper emitsWARNINGmessages, which break--strictmode. Since deprecated options are still functional (just discouraged), they should emitINFO-level messages so strict builds don't fail on deprecation notices alone.20. Custom import paths for
markdown_extensionssys.pathfrom withinmkdocs.yml, without requiringPYTHONPATHhacks or pip-installable packages. A config option likemarkdown_extensions_path: ["extensions/"]would suffice.21. Respect display text when the same
.mdfile appears in nav multiple timesnavwith different display names (e.g.- 'French Main Dishes': 'French Cuisine.md'and- 'French Desserts': 'French Cuisine.md'), MkDocs now overrides both entries with the first title encountered. Previously, each entry kept its set display text.π§ P3 β Maintenance & Infrastructure
22. New default theme
mkdocstheme is dated (Bootstrap 3). A new, modern, optionally installable default theme should be designed and shipped separately, as part of the theme decoupling effort (#3636).23. Title source precedence controls
titlemeta field and an H1 heading, the precedence between them (and thenavdisplay name) can be surprising. Users want more control over which source wins, ideally configurable per page or globally.24. Fix
use_directory_urls: truewith Click β₯ 8.2.2use_directory_urls: trueβ generated links becomepage/index.htmlinstead ofpage/. This is related to #4032 and may require pinning or fixing the Click integration.25. WSL:
mkdocs servefails to live reloadLast updated: 2026-04-29
Sources: mkdocs/mkdocs open issues, sorted by reactions