跳过正文
  1. Posts/

mkdocs-ng 维护进展:v1.7.x 修复总结与下一步计划

·2510 字·6 分钟· ·
沈显鹏
作者
沈显鹏
Engineer. Builder. Maintainer.
目录
MkDocs NG - 这篇文章属于一个选集。
§ 2: 本文

大家好,我是沈工。

上个月我写了那篇正式维护 MkDocs 的文章,宣布 fork 了 MkDocs 并开始在 mkdocs-ng 下发包。

当时发的是 v1.7.0。到现在已经发了四个版本,一路到了 v1.7.3。这篇文章就是把这几个版本的改动整理一下,同步给社区,顺便聊聊 v1.8.0 的计划。

版本更新总览
#

从 4 月 24 日到 5 月 9 日,发布了四个版本:

版本日期主要改动
v1.7.02026-04-24首次发布:rebrand 为 mkdocs-ng,支持 Python 3.13/3.14
v1.7.12026-04-25Bug 修复:anchor 校验、serve 清理、颜色模式;移除 mergedeep
v1.7.22026-04-27Bug 修复:symlink、IPv6 格式 URL、导航下拉箭头
v1.7.32026-05-09Bug 修复:Click 兼容、livereload、搜索 HTML 标签;新增 content_title API

下面按版本详细介绍。


v1.7.0(2026-04-24)
#

这是 mkdocs-ng 的第一个版本。主要改动是 rebrand:包名从 mkdocs 变为 mkdocs-ng,文档和仓库链接更新到 mkdocs-ng 组织下。CLI 命令仍然是 mkdocs,配置文件仍然是 mkdocs.yml

此外:

  • 修复了 mkdocs serve --livereload 参数无法识别的问题
  • 添加了 Python 3.13 和 3.14 的支持(声明及 CI 测试)
  • 搭建了维护基础设施:issue 模板、Dependabot、Release Drafter、pre-commit hooks

安装方式:

pip install -U mkdocs-ng

v1.7.1(2026-04-25)
#

四个 Bug 修复和一个依赖清理。

--strict 模式下的 anchor 校验

之前用 mkdocs build -v --strict 严格检查链接时,有两个问题:被 exclude 的页面仍然会被检查,导致误报;anchor 缺失只输出 WARNING 而没有返回非零退出码,CI 里拦不住。这两个问题都修了。(#30#32

mkdocs serve 退出时清理临时目录

mkdocs serve 退出后会在 /tmp 下留下构建产生的临时目录,之前只在正常退出时清理,收到 SIGTERM 时不会。现在 SIGTERM 也会触发清理了。(#36

禁用 highlightjs 时颜色模式切换失效

内置主题的深色/浅色模式切换按钮依赖于 highlightjs 的加载状态。如果你在 mkdocs.yml 里禁用了 highlightjs,切换按钮就会失效。现在两者解耦了。(#39

移除 mergedeep 依赖

mergedeep 是一个不再维护的第三方库,被替换成了内联的 deep-merge 工具函数。少了一个外部依赖,也消除了潜在的供应链风险。(#29


v1.7.2(2026-04-27)
#

三个 Bug 修复。

损坏的 symlink 导致构建崩溃

文档目录里如果有一个指向已删除文件的符号链接(dangling symlink),整个 mkdocs build 会直接崩溃。现在这种 symlink 会被跳过,构建继续进行。(#46#43

格式错误的 URL 导致构建崩溃

mkdocs.yml 里如果配了一个格式不对的 URL——比如不完整的 IPv6 地址 https://[::1——整个构建也会崩溃。现在改成了输出清晰的 warning,不再中断构建。(#45

导航栏下拉子菜单箭头不可见

Material 主题的导航栏中,有子菜单的项右侧应该有一个小箭头图标。之前这个箭头莫名消失了,用户看不出那里有子菜单。已修复。(#44


v1.7.3(2026-05-09)
#

四个 Bug 修复,一个新增 API。

新版 Click 导致 CLI 默认值异常

从 Click 8.3.0 开始,默认参数的处理逻辑变了,导致 mkdocs serve--livereloadmkdocs build--strict--use-directory-urls 等参数行为异常——你在 mkdocs.yml 里配好的值会被命令行默认值覆盖。修了。(#60

Livereload 对编辑器临时文件过度敏感

vim 的 swap 文件(.md.swp)、Emacs 的自动保存文件(#file.md#)、tilde 备份文件(file.md~)这些编辑器产生的临时文件每次变更都会触发 livereload 重建。现在这些文件被忽略了,写文档时不再频繁刷页面。(#55

边界 case 的 HTML markup 导致构建崩溃

Markdown 里写了 <<>> 这种边界标记时,Python 标准库的 html.parser 会抛出 AssertionError,导致整个构建中断。已修复。(#51

搜索结果中显示原始 HTML 标签

页面的 title 里如果包含 HTML 标签(比如 `<code>` 包裹的命令名),搜索索引会原样收录这些标签,导致搜索结果中出现一坨 HTML 源码。现在搜索索引里的标题会自动 strip HTML 标签。(#53

新增 page.content_title 属性

给 plugin 开发者提供了一个新 API:page.content_title,可以直接拿到页面第一个标题的纯文本(HTML 标签已被 strip)。以前 plugin 作者得自己在 on_page_content 里写正则解析 H1,现在直接访问属性就行。(#52


完整 changelog 见:mkdocs-ng Release Notes


关于 v1.8.0
#

v1.7.x 系列的核心任务是修 Bug、稳定基础。现在这些差不多了,接下来的 v1.8.0 会是一个含功能改动的版本。以下是目前的计划。

放弃 Python 3.8 和 3.9

Python 3.8 已经在 2024 年 10 月 EOL,3.9 也即将在 2025 年 10 月 EOL。v1.8.0 会把这些已经失去官方支持的 Python 版本从支持矩阵里去掉,把最低支持版本提到 Python 3.10。这意味着可以用 | 类型联合语法、match/case 等更现代的写法,对后续维护和功能开发都有好处。(#33

移除内置主题的外部 CDN 依赖

mkdocsreadthedocs 两个内置主题会从 Google Fonts 和 CDN 加载字体和 CSS。对于需要完全离线或注重隐私的部署场景来说,这是个长期痛点(上游 issue 18 个 👍)。v1.8.0 计划把必需的资源打包进主题里,不再发起第三方请求。(mkdocs/mkdocs#2171

提供稳定的 Python API

MkDocs 目前没有一个官方支持的 Python API——想在代码里调用构建或 serve,要么用内部函数,要么走 subprocess。v1.8.0 计划提供一个文档化的公开 API(比如 mkdocs.build()mkdocs.serve()),方便 CI 脚本和 build system 集成。(mkdocs/mkdocs#1240

自动生成的导航使用 index 页面标题

mkdocs.yml 没有显式配置 nav 时,MkDocs 会用目录名作为导航栏的分组标题。改成用 index 页面的标题会更自然——比如 about/ 目录下 index.md 标题是「关于本项目」,导航栏就显示「关于本项目」而不是 about。(#54

清理更多过期依赖

继 v1.7.1 去掉 mergedeep 之后,v1.8.0 计划继续审计和清理不再维护的依赖项,减少外部依赖的总体数量。

完整的功能计划在 MkDocs-NG Feature Plan 里持续更新。如果你在用的 MkDocs 有什么一直想修但上游没动静的问题,可以到那个 issue 下面留言,或者在仓库里单独提 issue。


怎么切过来
#

如果你之前在用的还是上一代的 mkdocs 包:

pip uninstall mkdocs
pip install mkdocs-ng

CLI 命令、配置文件、插件命名空间——全部保持不变。唯一的变化是包名从 mkdocs 变成了 mkdocs-ng

如果用的是 requirements.txtpyproject.toml

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

Material for MkDocs 用户也一样:

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

仓库地址:

欢迎提 issue、给 Star,也欢迎转给还在用 MkDocs 的朋友。


转载本站文章请注明作者和出处,请勿用于任何商业用途。欢迎关注公众号「沈显鹏」

MkDocs NG - 这篇文章属于一个选集。
§ 2: 本文

相关文章

pi 项目里那些反直觉的设计:从 AGENTS.md 到「先把你的 PR 关掉」

·5526 字·12 分钟
读完 Mario Zechner 的「I’ve sold out」,又翻了 pi 仓库里的 AGENTS.md 和 CONTRIBUTING.md,我发现这个项目在很多地方都和常见的开源协作方式不太一样。新贡献者的 issue 和 PR 默认关闭、周末不 review、不懂代码就别提 PR。看起来很强硬,但背后其实是在认真处理一个问题:AI 时代,开源项目要怎么避免被低质量贡献拖垮。