#48 开源文档工具 MkDocs 项目的崩塌与生态分裂始末

2026-04-02
  • https://www.mkdocs.org/
    • https://github.com/mkdocs/mkdocs
    • BSD-2-Clause license
    • 21.9K stars
    • Python
    • 当前版本:Version 1.6.1 (2024-08-30)
  • https://squidfunk.github.io/mkdocs-material/
    • https://github.com/squidfunk/mkdocs-material
    • MIT license
    • 26.4K stars
    • Python

MkDocs 是一个用 Python 编写的、快速、简洁且功能强大的静态网站生成器专门用于创建项目文档

它的核心设计理念是简单易用,其主要特点包括:

  1. 文档即源码:使用易于编写的 Markdown 格式来撰写内容,通过一个 YAML 配置文件 (mkdocs.yml) 来管理网站导航和设置。
  2. 即时预览:内置开发服务器,支持在编写文档时实时预览更改。
  3. 主题化:拥有丰富的主题系统(如广受欢迎的 Material for MkDocs 主题),可以轻松定制网站外观。
  4. 插件化架构:这是其早期获得成功的关键,允许通过插件扩展其功能(如支持代码文档生成、SEO优化等)。

核心工作流程非常简单:

  1. docs 文件夹中编写 Markdown 文件。
  2. 配置 mkdocs.yml 文件,定义网站结构。
  3. 运行 mkdocs build 命令生成一个完整的静态网站(通常是 HTML、CSS、JS 文件)。
  4. 可以轻松地将生成的站点部署到 GitHub Pages、Netlify 等托管服务。

MkDocs 因其极低的学习成本优雅的输出效果,长期以来是 Python 生态乃至更广技术社区中创建项目文档的首选工具之一

项目的崩塌与生态分裂始末

The Slow Collapse of MkDocs

这篇文章复盘了 Python 静态站点生成器 MkDocs 从 2014 年诞生到 2026 年陷入“慢速崩塌”的全过程。
核心矛盾在于:创始人回归后推行破坏生态的激进重构(v2),与社区长期维护者及插件生态爆发激烈冲突,最终导致项目分裂。

核心冲突:技术路线与社区治理的撕裂

  • v2 激进重构:创始人 @lovelydinosaur 主导的 MkDocs 2.0 计划移除插件系统,改为私有开发模式,被社区视为“开倒车”和背离开源精神。
  • 生态断裂:Material for MkDocs(最受欢迎的主题)因 v2 不兼容宣布进入维护模式,并另起炉灶开发 Zensical。
  • 权力斗争:前核心维护者 @oprypin 因权限被削与创始人产生激烈冲突,甚至上演了短暂的 PyPI 仓库“夺权”闹剧。

时间线:从繁荣到分裂

时间 关键事件 影响
2014-2021 项目诞生,@waylan 长期单核维护 项目成熟但进展缓慢
2021-2024 @oprypin 接手,进入活跃维护期 功能迭代稳定,生态繁荣
2024 创始人回归,@oprypin 被削权出走 核心开发停滞,社区分裂
2025-2026 MkDocs v2 公布(无插件),Material 停更 生态彻底崩塌,替代品涌现

当前格局:三分天下

MkDocs 的生态位已被三个竞品瓜分:

  1. ProperDocs (@oprypin):MkDocs 1.x 的延续,强调向下兼容和插件生态。
    • https://properdocs.org/
    • https://github.com/ProperDocs/properdocs
    • BSD-2-Clause license
    • 80 stars
    • Python
  2. Zensical (@squidfunk):Material 团队重写,性能更强,旨在成为下一代标准。

    • https://zensical.org/
    • https://github.com/zensical/zensical
    • MIT license
    • 4.1K stars
    • Rust

    Zensical is a modern static site generator designed to simplify building and maintaining project documentation. It's built by the creators of Material for MkDocs and shares the same core design principles and philosophy – batteries included, easy to use, with powerful customization options.

  3. MaterialX (@jaywhj):Material for MkDocs 的社区延续版本。

    • https://jaywhj.github.io/mkdocs-materialx/
    • https://github.com/jaywhj/mkdocs-materialx
    • MIT license
    • 87 stars
    • Python

根本原因复盘

  • 治理失败:创始人长期缺席后突然回归“夺权”,无视社区贡献者的历史功绩和现有生态。
  • 技术独裁:在未达成共识的情况下,强行推行破坏性变更,且拒绝公开协作。
  • 生态反噬:当核心工具(Material)与上游(MkDocs)决裂,用户被迫用脚投票,导致项目事实性死亡。

#47 Sublime Text

2025-09-29

Ubuntu 上 VSCode 打不开,应该是哪里报错了。
没空折腾,就直接安装一个 Subline Text 满足基本文档编辑需求。

-> % wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo tee /etc/apt/keyrings/sublimehq-pub.asc > /dev/null

-> % echo -e 'Types: deb\nURIs: https://download.sublimetext.com/\nSuites: apt/stable/\nSigned-By: /etc/apt/keyrings/sublimehq-pub.asc' | sudo tee /etc/apt/sources.list.d/sublime-text.sources
Types: deb
URIs: https://download.sublimetext.com/
Suites: apt/stable/
Signed-By: /etc/apt/keyrings/sublimehq-pub.asc

-> % sudo apt update
-> % sudo apt search sublime
-> % sudo apt install sublime-text
  1. Ctrl + Shift + P,输入 Install Package Control
  2. Ctrl + Shift + P,输入 Package Control: Install Package,弹出来的搜索框中输入 ChineseLocalizations,选中点击安装。
  3. 几秒之后,等中文包安装好,UI 就换成中文显示了。

备注:快捷键

Shift + Alt + Up/Down: 多行编辑

#46 网络工具:sunny

2025-05-24

几年前就用过 sunny,这次因为一些特殊场景又要用到网络穿透,又捡起来了。

  1. 先在他们官网上创建隧道(选择本地地址,还有远程端口)
  2. 下载 sunny 程序(他们定制的 ngrok 客户端)
  3. 执行他们隧道管理页面提供的命令 sunny --server=free.idcfengye.com:4443 --key=xxxx 就行了

如果临时使用一下的话,nuhup + & 就够:

nuhup sunny --server=free.idcfengye.com:4443 --key=xxx &

如果要求更高,那就用 systemd 保活:

sudo vim /etc/systemd/system/sunny-eqr.service
sudo chmod 644 /etc/systemd/system/sunny-eqr.service
sudo systemctl enable sunny-eqr.service
sudo systemctl start sunny-eqr.service
sudo systemctl status sunny-eqr.service

需要吧把注删除
[Service]
ExecStart=/home/catroll/Documents/Mine/sunny --server=free.idcfengye.com:4443 --key=xxx
Restart=always
RestartSec=3
# 每10秒检查一次 (程序不支持 watchdog 协议)
# WatchdogSec=10
# 启动前等待2秒
ExecStartPre=/bin/sleep 2
# 自定义停止命令
ExecStop=/usr/bin/pkill -f sunny
# 限制最大内存使用
MemoryMax=512M
# 限制CPU使用率
CPUQuota=80%

先配置 ssh 证书信任,然后就关闭密码登录,后续就通过证书认证。

# 将自己的公钥配置到服务器上(在本地执行)
ssh-copy-id -i /path/to/id_rsa -p 10022 admin@free.idcfengye.com

# 修改服务器 ssh 配置(在服务器执行)
# PermitRootLogin no
# PasswordAuthentication no
sudo vim /etc/ssh/sshd_config
sudo systemctl restart sshd

# 测试链接情况(在本地执行)
ssh -i /path/to/id_rsa -p 10022 admin@free.idcfengye.com

#45 DBeaver on MacBook

2024-06-24

今天,办公电脑出了故障(电源坏了),我切换到 MacBook 工作。
用了很多年的 HeidiSQL 没有 Mac 版本,只能用跨平台的 DBeaver 社区版了。

brew install --cask dbeaver-community
  1. 安装目录:

    Windows: C:\Users\nosch\AppData\Local\DBeaver
    MacOS: /Applications/DBeaver.app/

  2. 配置文件目录:

    Windows: C:\Users\nosch\AppData\Roaming\DBeaverData
    Ubuntu: ~/snap/dbeaver-ce/current/.local/share/DBeaverData
    MacOS: ~/Library/Application Support/DBeaverData

    $ tree -a
    .
    ├── .workspaces
    ├── drivers // 驱动相关,忽略
    ├── secure
    │   └── secure_storage
    ├── settings
    │   └── global-settings.ini
    └── workspace6
        ├── .metadata // 忽略
        └── General
            ├── .dbeaver
            │   ├── credentials-config.json
            │   ├── data-sources.json
            │   └── project-settings.json
            ├── .project
            └── .settings
                └── org.eclipse.core.resources.prefs
    

    PS: 默认给我创建的工作区叫做:workspace6
    PS:用户配置在 workspace6/General/.dbeaver/ 目录,连接信息在 data-sources.json 中,但是密码是加密的,保存在 credentials-config.json 中。

  3. 创建第一个 MySQL 数据库连接时,需要下载 MySQL 驱动。
    DBeaver 支持几十种不同的库,包括 NoSQL,例如 MongoDB 和 Redis,不过 NoSQL 功能需要付费,每个月几十刀。

从 HeidiSQL 导出配置文件到 DBeaver

我之前有一个脚本导出 HeidiSQL 数据库配置到 JSON 文件中。
这次直接写一个脚本来从 JSON 同步到 DBeaver 配置文件。

配置文件同步

ln -sf ~/Documents/Mine/Sync/DBeaver ~/Library/DBeaverData/workspace6/General

#43 赞美内网云

2023-03-31

之前用过 Sunny-Ngrok,注册一个账号,有免费的套餐,有很多种方式部署使用。
刚发现现在要搞实名认证,而且只有付费才能使用。

在网上搜索了一下,发现一个好用的内网穿透工具:内网云。免费,然后更方便。
不需要注册,用的 SSH 方案,只需要一行 ssh 命令,做一个远程端口转发,就能实现内网穿透。
给了我这样的开发者非常大的便利。希望能一直用下去~

ssh -R 80:127.0.0.1:8080 sh@sh3.neiwangyun.net
Welcome to network server by neiwangyun.net
current server node : sh3.neiwangyun.net
----------------------------------------------------------
Basic Tunnel Information
  username      : sh
  type          : anonymous
  subdomain     : sxxelgxzm6efshsh3.neiwangyun.net
  remote_ip     : 121.60.84.218
  bandwidth     : 2 Mbps
  expire_time   : 2 hours
  unid          : d8scvjne5lt2c3svr2rny...
----------------------------------------------------------
Local Server
  local server: 127.0.0.1:8000
----------------------------------------------------------
Access to the Tunnel
  cname         : not support
  http          : http://sxxelgxzm6efshsh3.neiwangyun.net
  https         : https://sxxelgxzm6efshsh3.neiwangyun.net
  ipport        : sxxelgxzm6efshsh3.neiwangyun.net:25207
----------------------------------------------------------
Ctrl+C Exit Process

#40 常用工具汇总

2021-11-18

编辑器

  • VSCode
  • JetBrains 全家桶

SSH

数据库 GUI

Redis GUI

虚拟化与容器

  • VirtualBox
  • Vagrant
  • Docker

编程相关

  • gitg
  • Beyond Compare 可以一直试用
  • Meld Linux 下的简化版 Beyond Compare

其他

在线服务

#39 Git 命令

2021-08-04

看到有篇文章说是 git “新增”了 switch 和 restore 两个命令,仔细一看,原来就是 2019 年就引入了的两个命令,不过我确实没有用过。

这里重新整理一下现在 git 的命令。

git version
git version 2.30.2

apt list --installed | grep ^git
git-doc/hirsute,hirsute,now 1:2.30.2-1ubuntu1 all [已安装]
git-extras/hirsute,hirsute,now 6.1.0-1 all [已安装]
git-flow/hirsute,hirsute,now 1.12.3-1 all [已安装]
git-man/hirsute,hirsute,now 1:2.30.2-1ubuntu1 all [已安装,自动]
git-svn/hirsute,hirsute,now 1:2.30.2-1ubuntu1 all [已安装]
git/hirsute,now 1:2.30.2-1ubuntu1 amd64 [已安装]
gitg/hirsute,now 3.32.1-1 amd64 [已安装]
gitk/hirsute,hirsute,now 1:2.30.2-1ubuntu1 all [已安装]