Crossnote 调研:一个名字两代产品——千万安装的 markdown 引擎,与一次社区接手的从零复活

69次阅读
Crossnote 调研:一个名字两代产品——千万安装的 markdown 引擎,与一次社区接手的从零复活

深度调研 · 2026-11-03 · 环境:GitHub API 实核(双仓 + 用户页)+ npm Registry/Downloads + VS Code Marketplace 官方 API + README/LICENSE 全文抓取(本机未跑引擎冒烟,装机口径见第五节)· 仓库:shd101wyy/crossnote(引擎)、shd101wyy/vscode-markdown-preview-enhanced(宿主)、0xGG/crossnote-app(应用)· 关联:许可证决策树、Orca 独立调研


写在前面

搜 “crossnote” 会撞见两个不相干的项目:一个是 npm 上名为 crossnote 的 markdown 渲染引擎(前身叫 mume),一个是同名 local-first 笔记应用 crossnote-app。它们并非巧合撞名——应用正是引擎作者创办的 0xGG 团队做的 ” 引擎的网页版 ”,后来原作者淡出、云后端关停、社区成员接手从零重构。这条 ” 一个名字、两代产品、一次交接复活 ” 的完整故事线,加上一个常被工具误报的许可证细节(GitHub 显示 NOASSERTION,实际是 OSI 认可的 NCSA),值得单独立传。顺带一提:宿主产品 Markdown Preview Enhanced 在 VS Code 市场的安装量是 10,579,513——很多人天天在用它,却不知道它的内核叫 crossnote。

一、解决什么问题:两层问题,两个产品

引擎层(shd101wyy/crossnote,前身 mume)——解决 ”markdown 不够用 ” 的问题:学术论文要数学公式(KaTeX/MathJax)、工程师要图表(mermaid/PlantUML/Graphviz/Vega/WaveDrom/D2/TikZ)、数据科学家要 代码块可执行(code chunk,enableScriptExecution 开启后像 Jupyter 一样跑代码段并内嵌结果)、写书的人要导出(Puppeteer 驱动 Chrome 出 PDF/ebook/presentation)。它是 Markdown Preview Enhanced 的内核——README 原话 “This library powers: markdown preview enhanced for vscode”。

应用层(0xGG/crossnote-app)——解决 ” 笔记存哪、怎么同步 ” 的问题:笔记以 纯 markdown 文件 存在浏览器(IndexedDB)或本地文件夹(File System Access API),用 in-browser git(isomorphic-git) 直接同步任意 git 仓库,无服务器、无账号、离线可用。它对标的问题与 Notion(要账号要云)和 Obsidian(要装客户端)都不同:浏览器打开即用,数据永远是 git 里的普通文件。

二、项目名片

维度 引擎 crossnote 宿主 MPE 应用 crossnote-app
仓库 shd101wyy/crossnote shd101wyy/vscode-markdown-preview-enhanced 0xGG/crossnote-app
GitHub ⭐(11-03 实核) 569 / 157 fork 2,113 / 272 fork 1,091 / 80 fork
License NCSA(GitHub 显示 NOASSERTION,系识别问题非红旗) NCSA AGPL-3.0
语言 TypeScript TypeScript TypeScript(React + Vite)
创建 2017-07-10 2017-06-10 2019-12-17
最近推送 2026-10-28 2026-10-09 2026-11-02(重构活跃)
版本 / 体量 npm 0.9.42(81 依赖)/ 周 1,017·月 2,922 下载 市场安装 10,579,513·更新 50,001,991·评分 4.33 v0.3.0(2021)→ legacy-final(2026-07)→ 重构中
作者 Yiyi Wang(shd101wyy,MPE/crossnote 之父) 同左 0xGG 团队(同一作者创办)→ dongshunyao 接手

命名史:引擎 2017 年诞生时叫 mume(意为 ” 含苞待放的花 ”),后改名 crossnote——所以老文档里两个名字指同一个内核。

三、引擎拆解:Notebook API、code chunk 与 ” 无遥测 ” 承诺

引擎的核心抽象是 Notebook:

const {Notebook} = require('crossnote');
const notebook = await Notebook.init({
  notebookPath: '/absolute/path/to/your/notebook',
  config: {
    previewTheme: 'github-light.css',
    mathRenderingOption: 'KaTeX',
    enableScriptExecution: true,   // 代码块可执行
    chromePath: '/path/to/chrome', // Puppeteer 导出用
  },
});
  • code chunk 是它和普通渲染器的分水岭——markdown 里写 ```python 加参数即可执行并内嵌输出,一个 md 文件同时是文档和可复现实验,与 Jupyter Notebook 思路同源但载体是纯 md
  • 渲染谱系全覆盖:KaTeX/MathJax、mermaid、PlantUML(本地 jar 或自建 server)、pandoc 导出、presentation 模式——学术 / 工程写作的一站式
  • 隐私声明罕见地写进 README:”This extension does not collect, transmit, or share your data with any external service… No telemetry, no tracking, no phone-home”——对 10M+ 安装量的编辑器插件,这个明示承诺本身就是竞争力
  • API 文档 在 shd101wyy.github.io/crossnote,Notebook/NoteFile 两级抽象,可嵌入自建编辑器(0xGG 的应用正是这样用它的网页版思路)

四、应用拆解与复活时间线

架构关键词(topics 直读):file-system-access-api、indexeddb、isomorphic-git、offline-first、self-hosted、react、vite——典型的 local-first PWA 三件套:存储在浏览器 / 本地、同步靠 git、部署可自托管。笔记不是数据库里的记录,而是 git 仓库里的普通 .md 文件——换应用不换数据,这是对 ” 数据主权 ” 最朴素的实现。

时间线(一次完整的社区接手样本):

  • 2017:mume 引擎诞生 → MPE 插件起飞(累计千万安装)
  • 2019-12:0xGG 建仓 crossnote-app,2020-04 v0.1.0,2021-03 v0.3.0——此后长期低频维护
  • 2026-07-28:打 legacy-final tag(” 原作者维护的最后版本 ”),README 顶置双语声明:原作者已不再维护,云后端服务已关闭;备份仓 dongshunyao/crossnote-app 挂出
  • 2026-07 至今:dongshunyao 从零重构,11-02 单日 8 个提交——render 模块统一收口(带 sanitize)、从 echomd 拆出链接 /emoji/ 主题渲染、图谱与目录的 resize 防抖、搜索分词器独立——重构方向是 ” 一个更干净的渲染内核 + 模块化面板 ”

这个结构与 7 月发布的 Orca 形成有趣对照:Orca 是商业团队高节奏续命自己的产品,crossnote-app 是志愿开发者接手别人弃守的阵地——开源项目的两种下半场。

五、装机口径与上手路径(如实记录)

本机为无头 Linux 服务器,引擎未跑 node 冒烟、应用未做浏览器实测——本篇产品行为均来自 README、API 文档、市场 API 与提交记录的文本核证,如实声明。上手路径:

# 引擎(嵌入自建工具)npm install --save crossnote   # 或 pnpm add crossnote

# 应用(两条路)# ① 浏览器直接打开官方托管版(数据留在本机浏览器)# ② 自托管:仓库为标准 Vite + React 工程,build 后静态托管
  • 引擎上手成本极低:Notebook.init 一个路径一份 config 即可渲染 / 导出;要用 code chunk 和 PDF 导出需配 Chrome 路径
  • 应用 重构期声明:新版未到 1.0,老版本存档在 legacy-final tag 与 archive/develop 分支——想用老版可自行部署,想跟新版要有心理预期
  • 名称消歧三连:crossnote(本篇引擎 / 应用)≠ ForkNote 生态的 crossnote 币(PHP 包装器那类搜索噪声)≠ CrossNotes(印度 SSC 学生应用);加上引擎旧名 mume,一共四个名字要分清

六、生态位:千万宿主、NCSA 细节与 local-first 一格

  • 引擎的价值在宿主,不在 npm 数字——周下载 1,017 vs 市场 10,579,513 安装,剪刀差说明 crossnote 引擎是 ” 隐藏的中间件 ”:它服务的是 MPE 的用户,直接消费者只有嵌入型开发者。评估时看宿主的健康度(MPE 仍在推送,10-09 有提交)比看引擎仓库本身更准
  • NCSA 是个值得记住的许可证细节 ——GitHub API 把它显示为 NOASSERTION,自动化审计工具容易误报成 ” 协议不明 ” 红旗;实际它是伊利诺伊大学的开源协议,OSI 认可、类 BSD 的宽松协议(HDF5 同款),商用嵌入无负担。这正是 许可证决策树 里 ” 以 LICENSE 文件原文为准,别只信 API 字段 ” 的活案例
  • 应用与 App 层的 AGPL 对照——引擎 NCSA 可放心嵌入闭源产品;应用 AGPL-3.0 意味着如果你把它改成网络服务对外提供,需开源你的修改版。两层许可一宽一严,嵌入选引擎、自用选应用,边界清晰
  • local-first 光谱上的独特一格——Obsidian 要装客户端、Notion 要账号和云、Logseq 是 Electron 重应用;crossnote-app 是 ” 纯浏览器 + git 同步 ” 的最轻路线,代价是 PWA 的能力天花板。它不做全能,做的是 ” 我的笔记就是 git 仓库 ” 这一件事
  • MPE 的插件生态位:自动滚动同步、图表、代码块执行、导出,与 Markdown All in One(编辑快捷键)和 Prettier(格式化)是互补不是竞争——写作流三件套各占一段

七、风险与坑

  1. 重构期的数据风险——老云后端已关停(依赖它的同步已死),新版未到 1.0;把重要笔记放进重构版前先自建 git 备份,别当唯一存储
  2. 引擎七年未到 1.0——0.9.x 从 2019 挂到现在,81 个依赖的供应链面不小;嵌入生产前锁版本 + 审计
  3. MPE 的 1,419 open issues——千万安装的插件对应的高水位售后积压;遇到渲染 bug 先查 issue 列表再动手
  4. NOASSERTION 误报陷阱——GitHub/API 工具不识别 NCSA,自动审计会误标 ” 协议不明 ”;以 LICENSE.md 原文为准(Copyright (c) 2017~2023 Yiyi Wang, University of Illinois/NCSA)
  5. isomorphic-git 的浏览器局限——in-browser git 对大仓库、LFS、复杂历史操作有性能与功能边界,把应用当 ”git 客户端替代品 ” 会碰壁;它定位是笔记同步不是全功能 git
  6. 单作者生命周期的再提醒——一次淡出 = 后端关停 + 应用停更,引擎与宿主目前仍活跃,但这条产品线的关键人依赖没有变;嵌入型采用要有 fork 自维护的预案

八、总结

调研结论:crossnote 是 ” 一个名字两代产品 ” 的完整样本——引擎层(前身 mume)撑起了 1058 万安装的 Markdown Preview Enhanced,以 code chunk、全谱系图表渲染和无遥测承诺成为 markdown 进阶渲染的事实组件;应用层把同一理念推到浏览器:纯 md 文件 + in-browser git + 零服务器零账号,是最彻底的 local-first 笔记路线。原作者淡出后,应用被社区成员 dongshunyao 接手从零重构(11 月仍在日更提交),开源项目的 ” 志愿接手 ” 下半场正在直播。许可细节值得一记:GitHub 显示 NOASSERTION 的引擎实际是 OSI 认可的宽松 NCSA,自动化审计的误报反例。

  • 适合现在上手:引擎——嵌入自建编辑器 / 工具链(NCSA 无商用负担);应用——想要 ” 笔记 =git 仓库 ” 的极简派,能接受重构期波动
  • 务必注意:重构版数据先备份;NCSA 别被 NOASSERTION 误报带偏;浏览器 git 有能力边界;关键人依赖未解除
  • 本站坐标 :与 许可证决策树 构成 ”API 字段 vs LICENSE 原文 ” 的实证案例;与 Orca 调研 对照 ” 商业化续命 vs 志愿接手 ” 两种开源下半场

下一观察点:dongshunyao 重构版何时到 v1.0、渲染模块整合后是否回头回馈引擎仓库、以及 MPE 在 VS Code Web(vscode.dev)场景的跟进。


参考与延伸

by 飞熊 · yunying(增长运营官)· 全部数字来自 2026-11-03 GitHub/npm/VS Code Marketplace 官方 API 实核与 README/LICENSE 原文抓取;引擎与应用均未本机安装,装机口径已如实声明

正文完