Skip to main content
  1. Posts/

mkdocs-ng Maintenance Progress — v1.7.x Fix Summary and Next Steps

·1238 words·3 mins· ·
Xianpeng Shen
Author
Xianpeng Shen
Engineer. Builder. Maintainer.
Table of Contents
MkDocs NG - This article is part of a series.
Part 2: This Article

Hello everyone, I’m Shen Gong.

Last month, I wrote the article Officially Maintaining MkDocs, announcing that I had forked MkDocs and started publishing packages under mkdocs-ng.

At that time, v1.7.0 was released. Since then, four versions have been released, all the way to v1.7.3. This article summarizes the changes in these versions, provides an update to the community, and discusses the plans for v1.8.0.

Version Update Overview
#

From April 24th to May 9th, four versions were released:

VersionDateMajor Changes
v1.7.02026-04-24First release: rebranded as mkdocs-ng, added Python 3.13/3.14 support
v1.7.12026-04-25Bug Fixes: anchor validation, serve cleanup, color mode; removed mergedeep
v1.7.22026-04-27Bug Fixes: symlink, malformed IPv6 URLs, navigation dropdown arrow
v1.7.32026-05-09Bug Fixes: Click compatibility, livereload, search HTML tags; added content_title API

Details are provided by version below.


v1.7.0 (2026-04-24)
#

This is the first version of mkdocs-ng. The main change is the rebrand: the package name changed from mkdocs to mkdocs-ng, and documentation and repository links were updated to the mkdocs-ng organization. The CLI command remains mkdocs, and the configuration file remains mkdocs.yml.

In addition:

  • Fixed an issue where the mkdocs serve --livereload parameter was not recognized.
  • Added support for Python 3.13 and 3.14 (declaration and CI testing).
  • Set up maintenance infrastructure: issue templates, Dependabot, Release Drafter, pre-commit hooks.

Installation method:

pip install -U mkdocs-ng

v1.7.1 (2026-04-25)
#

Four bug fixes and one dependency cleanup.

Anchor validation in --strict mode

Previously, when strictly checking links using mkdocs build -v --strict, there were two issues: excluded pages were still checked, leading to false positives; and missing anchors only output a WARNING without returning a non-zero exit code, which couldn’t be caught in CI. Both issues have been fixed. (#30, #32)

Clean up temporary directory on mkdocs serve exit

After mkdocs serve exits, it leaves behind temporary build directories in /tmp. Previously, cleanup only occurred on normal exit, not when a SIGTERM was received. Now, SIGTERM also triggers cleanup. (#36)

Color mode switch fails when highlightjs is disabled

The dark/light mode toggle button in the built-in themes depended on highlightjs’s loading status. If you disabled highlightjs in mkdocs.yml, the toggle button would stop working. Now, they are decoupled. (#39)

Remove mergedeep dependency

mergedeep is an unmaintained third-party library that has been replaced with an inline deep-merge utility function. This reduces an external dependency and eliminates a potential supply chain risk. (#29)


v1.7.2 (2026-04-27)
#

Three bug fixes.

Broken symlink causes build to crash

If there was a dangling symlink (pointing to a deleted file) in the documentation directory, the entire mkdocs build would crash. Now, such symlinks are skipped, and the build continues. (#46, #43)

Malformed URL causes build to crash

If a malformed URL was configured in mkdocs.yml — for example, an incomplete IPv6 address like https://[::1 — the entire build would also crash. This has been changed to output a clear warning, no longer interrupting the build. (#45)

Navigation dropdown submenu arrow invisible

In the Material theme’s navigation bar, items with submenus should have a small arrow icon on the right. Previously, this arrow inexplicably disappeared, making it unclear to users that there were submenus. This has been fixed. (#44)


v1.7.3 (2026-05-09)
#

Four bug fixes, one new API.

New Click version causes abnormal CLI default values

Starting with Click 8.3.0, the default parameter handling logic changed, causing abnormal behavior for parameters like mkdocs serve’s --livereload and mkdocs build’s --strict and --use-directory-urls — values configured in mkdocs.yml would be overridden by command-line defaults. Fixed. (#60)

Livereload overly sensitive to editor temporary files

Editor-generated temporary files such as vim’s swap files (.md.swp), Emacs’s auto-save files (#file.md#), and tilde backup files (file.md~) would trigger a livereload rebuild on every change. Now these files are ignored, preventing frequent page refreshes while writing documentation. (#55)

Edge case HTML markup causes build to crash

When <<>> or similar edge case markup was used in Markdown, Python’s standard html.parser library would raise an AssertionError, interrupting the entire build. Fixed. (#51)

Raw HTML tags displayed in search results

If a page’s title contained HTML tags (e.g., a command name wrapped in `<code>`), the search index would include these tags verbatim, leading to a mess of HTML source in search results. Now, titles in the search index automatically strip HTML tags. (#53)

Added page.content_title attribute

A new API, page.content_title, has been provided for plugin developers to directly get the plain text of the first heading on a page (HTML tags are stripped). Previously, plugin authors had to write regex to parse H1s themselves in on_page_content; now, they can simply access the attribute. (#52)


Full changelog available at: mkdocs-ng Release Notes


About v1.8.0
#

The core mission for the v1.7.x series was bug fixing and stabilizing the foundation. Now that these are mostly done, the upcoming v1.8.0 will be a feature-rich version. Here’s the current plan.

Dropping Python 3.8 and 3.9

Python 3.8 reached EOL in October 2024, and 3.9 will reach EOL in October 2025. v1.8.0 will remove these officially unsupported Python versions from the support matrix, raising the minimum supported version to Python 3.10. This means we can use more modern syntax like | type union and match/case, which will benefit future maintenance and feature development. (#33)

Remove external CDN dependencies from built-in themes

The mkdocs and readthedocs built-in themes load fonts and CSS from Google Fonts and CDNs. For deployment scenarios requiring complete offline access or privacy, this has been a long-standing pain point (18 👍 on the upstream issue). v1.8.0 plans to bundle necessary resources within the themes, eliminating third-party requests. (mkdocs/mkdocs#2171)

Provide a stable Python API

MkDocs currently lacks an officially supported Python API — to call build or serve in code, one must either use internal functions or subprocess. v1.8.0 plans to provide a documented public API (e.g., mkdocs.build(), mkdocs.serve()) to facilitate integration with CI scripts and build systems. (mkdocs/mkdocs#1240)

Automatically generated navigation uses index page title

When nav is not explicitly configured in mkdocs.yml, MkDocs uses directory names as navigation group titles. Changing this to use the index page’s title would be more natural — for example, if index.md in the about/ directory has the title “About This Project”, the navigation bar would display “About This Project” instead of about. (#54)

Clean up more outdated dependencies

Following the removal of mergedeep in v1.7.1, v1.8.0 plans to continue auditing and cleaning up unmaintained dependencies to reduce the overall number of external dependencies.

The complete feature plan is continuously updated in MkDocs-NG Feature Plan. If you’re using MkDocs and have any persistent issues that haven’t been addressed upstream, you can leave a comment in that issue or open a separate issue in the repository.


How to Switch Over
#

If you were previously using the old mkdocs package:

pip uninstall mkdocs
pip install mkdocs-ng

The CLI commands, configuration files, and plugin namespaces all remain unchanged. The only change is the package name from mkdocs to mkdocs-ng.

If you are using requirements.txt or pyproject.toml:

- mkdocs>=1.6.0
+ mkdocs-ng>=1.7.3

The same applies to Material for MkDocs users:

pip uninstall mkdocs-material
pip install mkdocs-ng-material

Repository addresses:

Feel free to open issues, give a Star, and share with friends still using MkDocs.


Please cite the author and source when reproducing articles from this site. Do not use for any commercial purposes. Welcome to follow my WeChat Official Account “沈显鹏”.

MkDocs NG - This article is part of a series.
Part 2: This Article

Related

Counter-intuitive Designs in the pi project — From AGENTS.md to "Just Close Your PR First"

·3009 words·15 mins
After reading Mario Zechner’s “I’ve sold out” and then reviewing AGENTS.md and CONTRIBUTING.md in the pi repository, I found that this project differs from common open-source collaboration methods in many ways. New contributors’ issues and PRs are closed by default, no reviews on weekends, and don’t submit PRs if you don’t understand the code. It seems tough, but behind it is a serious attempt to address a problem: how open-source projects can avoid being bogged down by low-quality contributions in the AI era.

AI Agent, or Automation?

·847 words·4 mins
In today’s era of rapid AI technological advancement, many companies are chasing the AI wave. But do we truly understand the distinction between “Automation” and “AI Agent”? This article will explore, from a practical application perspective, in which scenarios deterministic automation should be used, and in which scenarios AI Agents should be introduced. Through comparative analysis, we hope to help readers make more informed technical choices in this “all-in-AI” era.