GEML 调研图解 · awesome-markdown 清单 · 2026-09-30 · English · 全部图解 · GEML 首页

Markdown 变体版图

mundimark/awesome-markdown 收录了一批想修补或取代 Markdown 的项目,GEML 自己也在它的「Beyond Markdown」一节里。这一页逐个看它们做了什么,和 GEML 在哪里撞车,在哪里走的是另一条路。清单外有几个项目离 GEML 更近,也一并放进来,单独标出。

结论。没有哪个项目同时做了 GEML 的三件事:一种带类型的块,每块有可寻址的 id,引用在构建时和每次写入前都被检查,出错就拦下。

单看其中一件,都有人做得比 GEML 早或比 GEML 深。通用块和属性是 Djot、Pandoc、MyST、Markdoc 的共识;带规则 id 的校验,Markdoc、mystmd、Carve 都有;按选择器查询和改写 Markdown,mq 做得比 geml get 更像一门语言。GEML 的不同在于把这三件事绑在一起,再加上按块写入的命令行、MCP 和块级历史。

功能上最接近的是 Carve,但它的影响力还很小。它和 GEML 在清单的同一节,今年 5 月才创建,已经有 lint、JSON AST、补丁式编辑、MCP 服务和 agent skill,推进得很快;但只有 32 个 star,也没有找到外部用户。结合影响力看,它是值得跟踪的项目,眼下不是主要对手。它和 GEML 的差别在三点:地址是标题 id 和 AST 路径,写入交给补丁确认,不兼容 Markdown。

看板

25 个项目,各自和 GEML 的关系

思路相撞 同一个问题,相近的解法。部分重叠 在某一件事上同路。可借鉴 有 GEML 缺的东西。另一条路 目标或层次不同,或是 GEML 的底座。前四组来自清单,最后一组是清单外补充的。

思路相撞 2 部分重叠 9 可借鉴 3 另一条路 11
项目它是什么和 GEML 的关系判断
新一代轻量标记语言 · 清单「Beyond Markdown」一节
1Carve2026-05 · 32 star基于 Djot 的「后 Markdown」。有 EBNF 语法、2,200 个测试用例、JS/Rust/PHP 三套实现,还有 lint、JSON AST、补丁式编辑、MCP 服务和 agent skill。同一节里重叠最多:检查坏引用、让 agent 选取和编辑都做了。地址是标题 id 或 AST 路径,不是任意块上作者写的 id;交叉引用只能指向标题和带编号的题注。思路相撞
2Djot2022 · 2,046 starJohn MacFarlane 为修 CommonMark 的解析难点而做,加了属性、通用容器、行内容器。Pandoc 从 3.1.12 起能读写它。「通用块加属性」同路。没有块寻址,#id 引用不检查,没有嵌入语法,扩展只能写 AST 过滤器。部分重叠
3VersaDok2025 · 17 starkramdown 作者的新语言,<<< >>> 通用块,::名字: 扩展块可以接管原始正文。作者自称 alpha。扩展块是四个里唯一接近「类型决定正文怎么读」的。没有检查,没有寻址。部分重叠
4Texti2017 · 9 star把 Markdown、维基标记和 LaTeX 合在一起的提案,标题改成 == 标题 ==。2017 年的草案,解析器是空模块,此后停更。另一条路
老牌语法扩展 · 清单「Markdown Syntax Extensions」与「Libraries」
5MultiMarkdown加了元数据、表格、脚注、交叉引用、整文件嵌入 {{file}}。第 7 版在预发布。功能清单和 GEML 有交集,但每样都是一种特例语法。另一条路
6Markdown ExtraPHP Markdown 的扩展:标题 {#id}、围栏代码、表格、定义列表、缩写。GEML 标题上的 {#id} 就是这一脉的写法。另一条路
7Markdown Extended想把 Extra 和 MultiMarkdown 合成一份规范的 PHP 解析器。2024 年后没更新。同上。另一条路
8CriticMarkup在正文里写修订:增、删、替换、批注、高亮。GEML 有修订历史,但表达不了「还没被接受的建议」。可借鉴
9kramdown · Pandockramdown 的属性列表 {: #id};Pandoc 的 fenced div、JSON AST 和过滤器。通用块和「文档先变成 AST」这条路的前辈。部分重叠
规范化的方言 · 清单 CommonMark、GFM、VFMD 三节
10CommonMark一份无歧义的 Markdown 规范和测试集。GEML 的散文部分从这里继承,是底座不是对手。另一条路
11GFMCommonMark 加表格、任务列表、删除线、自动链接。GEML 直接读 .md 时,在两套语法分歧的地方按 Markdown 的规则读,GitHub 的标题锚点也能作为链接目标。另一条路
12VFMD另一份无歧义规范。2016 年以后没有更新。另一条路
工具 · 清单各节
13mq2025 · 1,040 star用类似 jq 的语法查询和改写 Markdown,附 MCP 服务。和 geml get/find/list 做的是同一件事。地址按选择器和标题文字推出,MCP 故意只读。思路相撞
14darnlink2026-07 · 19 star用 UUID 锚住文件,文件搬家后自动修链接,可以当 CI 门。文件级的引用检查与修复。GEML 能发现跨文档引用断了,但不会修。可借鉴
15mdcode2024 · 28 star代码块和源文件双向同步,按 region 取片段。和 code {src=} 同一件事,还能把改动推回源文件。可借鉴
16markedppMarkdown 预处理:目录、标题编号、!include。嵌入的粗粒度版本,找不到文件时原样保留,不报错。另一条路
17Slidev48,891 star在 Markdown 幻灯片里用 Vue 组件。2026-07 起自带 MCP,按页读写。「按单元读写」的 MCP 同路。单元是页,地址是页码,插入一页后就变了。部分重叠
18demarkus2026-02 · 16 star基于 QUIC 的 Markdown 协议与服务器,给 agent 当带版本的记忆。agent 读写和版本历史同路。按标题 slug 读一节,写入只能整篇。部分重叠
19MarkWay让网站给 agent 返回 Markdown 而不是 HTML 的约定。只有「Markdown 是给 agent 的格式」这个前提相同。没有代码。另一条路
20mk-notes把 Markdown 单向同步到 Notion。几乎不重叠,2025-12 以后停更。另一条路
清单外补充 · 离 GEML 更近的几个
21MarkdocStripe · 8,494 star文档里只写 tag 和属性,含义由宿主的 schema 定义,并逐项校验,错误有稳定 id。设计上最接近 GEML:声明式、封闭、可校验。没有块寻址和写入命令。部分重叠
22MySTJupyter Book 的 Markdown:directive 注册表、带标签的交叉引用。通用块和规则 id 同路,坏引用只报警。部分重叠
23Quarto基于 Pandoc 的科技出版系统,代码块可执行,图表有交叉引用。计算文档的方向;GEML 只有表格里的计算列和汇总行。部分重叠
24AsciiDoc带属性的块、include::、<<xref>>,一门完整的文档语言。块和嵌入同路,坏引用默认不显示。部分重叠
25MDX19,809 star在 Markdown 里写 JSX 组件。文档即程序,和 GEML 的封闭词汇表是两条路。另一条路
通用块

大家都走到了「一种通用块加属性」

Markdown 的块是一个个特例:代码、引用、列表、表格各有各的规则。后来者几乎都收敛到同一个办法:一种通用容器,用属性区分用途。区别在于类型集合是开放还是封闭、id 有没有规则、块里的正文怎么解析。

同一个「警告框」,五种写法 思路相撞 左边四个来自 Djot、Pandoc、MyST、Markdoc,右边是 GEML。
Djot通用 div + 属性
{#warn .warning}
::: warning
别在生产库上跑这条命令。
:::
Pandoc Markdownfenced div
::: {#warn .warning}
别在生产库上跑这条命令。
:::
MySTdirective,清单外
```{warning}
:name: warn
别在生产库上跑这条命令。
```
Markdoctag,清单外
{% callout type="warning" #warn %}
别在生产库上跑这条命令。
{% /callout %}
GEML一种带类型的块
=== note {#warn}
别在生产库上跑这条命令。
===

=== table {#cost format=csv header=1}
Item,Cost
Hosting,120
===

=== data {#vars format=json}
{"owner": "docs"}
===
类型id正文
Djot开放,class 随便写属性 #id,不强制一律按 Djot 解析
Carve提示类有固定名,其余变成 div属性 #id 或标题 slug一律按 Carve 解析
VersaDok::名字: 扩展块由处理器定义属性 #id扩展可以接管原始行
Pandoc开放,交给过滤器属性 #id,不强制一律按 Markdown 解析
MyST注册表,未知 directive 报警:name: 或 (label)=每个 directive 自定
Markdocschema 声明,未知 tag 报错属性 #id按 Markdoc 解析
GEML规范列出,profile 扩展,未知类型报警{#id},重复即 error按类型:代码、表格、数据是原样文本,note 是散文
重叠
「一种块语法覆盖所有特例」不是 GEML 独有的想法。Djot 的作者 John MacFarlane 也是 CommonMark 和 Pandoc 的作者,他在《Beyond Markdown》里提出的方向和 GEML 的出发点几乎一样。
区别
GEML 的块按类型决定正文怎么读:表格和数据的正文是原样文本,交给对应的解析器,不会被当成 Markdown。Djot、Carve、Pandoc 的 div 只是容器,里面永远是标记语言;只有 VersaDok 的扩展块能接管原始行。这一点决定了 GEML 能在表格上算列、在数据上按坐标取值。四个新语言都没有一种块语法同时覆盖代码、表格、数学和数据,表格和数学仍然各有特例语法。
启示
Djot、Carve、VersaDok 的属性可以挂在任何元素上,包括行内。GEML 的属性只挂在块和标题上,行内元素没有 id。行内是否要可寻址,值得在待讨论里留一个位置。
引用

id 大家都有,把坏引用当错误的很少

几乎每个变体都能给块起 id、链接过去。分歧在于:链接指向一个不存在的 id 时,工具说什么。

一个指向不存在目标的引用 部分重叠 同一个错误,在七套工具里的待遇。消息原文取自各项目的源码和文档。
各家的写法
Djot / Pandoc:见 [预算](#budjet)
MyST:见 {ref}`budjet`
Quarto:见 @fig-budjet
AsciiDoc:见 <<budjet>>
工具找不到目标时
Djot不检查 #id djot.js 只对找不到的引用式链接报警
Pandoc不检查 照样输出一个断链
Carvelint carve lint 报 broken-crossref 并非零退出;交叉引用只能指向标题和带编号的题注
mystmdwarning 规则 id referenceTargetResolves
Quartowarning Unable to resolve crossref
Asciidoctorinfo possible invalid reference,默认不显示
Markdoc不管链接 只校验 tag、属性、变量,错误有稳定 id 如 attribute-undefined
GEML
# 预算 {#budget}

托管费每月 120 元。

# 附录 {#appendix}

见 [[#budjet]]。
$ geml check refs.geml
error: unresolved reference `#budjet` (line 7)
1 error(s)                                     exit 1

$ geml set refs.geml '#budget' --in new.geml
error: refused by an error the document ALREADY had, which
this edit did not cause: unresolved reference `#budjet` …;
not written — repair it first

改的是 #budget 一节,坏引用在 #appendix,写入照样被拒。诊断码 unresolved-reference 在规范附录 A 里,严重度是 error。写入者不会在一份已经坏掉的文档上继续叠改动。

重叠
给错误一个稳定的规则 id,这件事 Markdoc(tag-placement-invalid 这类)、mystmd(referenceTargetResolves)和 Carve(broken-crossref)都做了,思路和 GEML 附录 A 的诊断目录一致。Carve 的 lint 还会非零退出,可以当 CI 门,这一点和 geml check 一样。
区别
多数工具把坏引用当提醒,GEML 当错误。更大的区别是位置:别人的检查是一个单独的命令,GEML 把检查放在写入的路径上,每次写入前整份重查。对人来说是严格了一点;对一个一次改一块的 agent,这是它确认自己没有弄坏别处的办法。
查询

查询与改写:按选择器,还是按 id

不写整篇、只取或只改一部分,是 GEML 命令行的核心。清单里有两个工具在做相邻的事:mq 用类似 jq 的语法查询和改写 Markdown,darnlink 用 UUID 锚住链接,文件挪走了也能修回来。

取出「安装」这一节,再改它 思路相撞 mq 的例子来自它的 README 和 cookbook;GEML 一侧是实跑输出。
mqRust · 1,040 star
$ mq '.h(2)' README.md                     # 所有二级标题
$ mq '.code("rust")' README.md              # 所有 rust 代码块
$ mq 'section::section("Installation")' README.md
$ mq -U '…' README.md                     # 改写后把整篇打到 stdout
地址
节点类型、内容谓词、标题文字。没有稳定 id,标题一改名,section("Installation") 就找不到了。
写回
-U 只输出到 stdout;写回文件要靠配套的 mq-mount 加 --write,或 mq-db 加 --write-back。写之前不做检查。
agent
有 mq-mcp,README 把「LLM 工作流」列在第一位。它的 MCP 故意不开放写入,理由是 agent 的工具调用可能无人值守。
GEML实跑
$ geml list doc.geml
#install                 heading  h1    L1-8   安装
#install-before-upgrade  prose          L3-3
#upgrade                 heading  h2    L5-8   升级
#usage                   heading  h1    L9-12  用法

$ geml find 升级 .
doc.geml	#upgrade

$ geml get doc.geml '#install' --head
# 安装 {#install}

$ geml rename doc.geml '#install' '#setup'
# 安装 {#setup}
见 [[#setup]]。                  # 引用一起改

$ geml list doc.geml --within '#install'
#install-before-upgrade  prose          L3-3
#upgrade                 heading  h2    L5-8  升级

$ geml get complex-form.geml '=== form-field {type=date}'
4 `form-field` blocks (L48-49 #founded · L99-101 #iso-expiry · …)

地址是作者写下的 #id,标题改名不影响它;没写 id 的段落也有一个由位置推出的地址,如 #install-before-upgrade。选择器还能按属性筛、用 --within 限定在一节里,最后一条取自仓库里 GEP-0008 的表单示例。每次写入先整份重新检查。

重叠
mq 是清单里离 geml get/find/list 最近的工具,也同样有命令行和 MCP 两个入口。GEML 的选择器可以按类型、属性和内容地址筛,比如 === code {lang=rust}、{.warn},也可以用 --within 限定在某一节里;mq 多出的是管道和 map,以及 .h(1..3) 这样按标题层级选取。
区别
mq 查询的是「任意 Markdown」,所以地址只能从内容推出来。GEML 让作者写下 id,地址才稳定,写入才能被检查。mq-mcp 不开放写入,GEML 开放写入但每次都过检查门,还有块级历史兜底。这是对「agent 能不能自己写」的两种回答。
链接的目标挪了位置 可借鉴 darnlink 把身份放在文件上,GEML 把身份放在块上。两者各管一半。
darnlinkPython · 2026-07 创建
<!-- 目标文件的 frontmatter -->
---
uuid: 7f3a1e2c-…
---

<!-- 引用方 -->
[设计文档](docs/design.md) <!-- uuid: 7f3a1e2c-… -->
$ darnlink check .      # 0 干净 · 2 完整性问题 · 3 有未锚定的链接
$ darnlink . --write    # 文件挪走后,按 UUID 把路径改回来
GEML
见 [[design.geml#arch]]。
发生了什么GEMLdarnlink
块的 id 改了名geml rename 改掉每一处引用不管块
目标文件挪了位置error 报出来,但不会修按 UUID 找回新路径并改写
当作 CI 门geml check 非零退出darnlink check 非零退出,附 pre-commit 钩子
启示
GEML 能发现跨文档引用断了,但文件搬家以后只能人工改路径。darnlink 的做法是给文件一个不随路径变的身份。GEML 可以借这个思路:在 meta 里放一个文档 id,geml 在根目录下按它找回搬走的文件。这件事今天在 GEML 里没有位置,值得进待办。
嵌入

嵌入与同步:拉进来,还是推回去

把别处的内容放进文档,是最常见的扩展需求。清单里 mdcode、Slidev、markedpp、MultiMarkdown 各有一种写法,清单外的 AsciiDoc 也有。分歧有两处:引用的是行号还是名字,找不到时报不报错。

从源文件取一段代码,从另一份文档取一节 部分重叠
mdcode双向同步
```go file=main_test.go region=example
…
```

源文件里用 #region example 注释圈出一段。mdcode update 把源码拉进文档,mdcode extract 把文档里的改动推回源文件。

Slidev
<<< @/snippets/demo.ts#region-name {2,3|5}
---
src: ./other.md#2,5-7      按页码取另一份幻灯片
---
markedpp · MultiMarkdown · AsciiDoc
!include (test.js lang=javascript)   markedpp,找不到就原样留着
{{chapter2.md}}                      MultiMarkdown 整文件嵌入
include::part.adoc[tag=intro]        AsciiDoc,按 tag 取一段
GEML
=== code {#add lang=js src=src/math.js#L1-3}
===

=== code {#gone lang=js src=src/math.js#L40-45}
===

=== embed {src=guide.geml#install part=intro}
===
$ geml check code.geml
error: code source `src/math.js#L40-45`: the file has 7 line(s),
so lines 40-45 no longer exist — the range is stale (line 6)
1 error(s)

embed 按 id 取另一份文档的一节,part= 选整节、标题、导语或正文。被嵌文档先按它自己的规则独立解析,引用也受检。

重叠
从源文件取代码在四个项目里都有,按名字取一段(mdcode 和 Slidev 的 region,AsciiDoc 的 tag)比 GEML 的行号更抗漂移。
区别
GEML 在行号漂移时报 error,markedpp 在找不到时静默保留原文。GEML 的 embed 按块 id 取内容;Slidev 按页码,MultiMarkdown 按整个文件。
启示
两件事可以学。一是按名字而不是按行号引用源码的一段,比如识别源文件里的 region 注释,这样源码加了几行也不会漂。二是 mdcode 的反向同步,文档里改了示例代码,可以写回源文件。
扩展

组件和扩展点:代码进文档,还是词汇进文档

想在 Markdown 里放一张图表、一个表单、一段交互,有两条路。一条是让文档直接写组件代码,另一条是让文档只写声明,由渲染器按一份词汇表去解释。

在文档里放一张图表 另一条路 MDX 和 Slidev 让文档引入组件;GEML 让文档声明一个类型,由 profile 定义它的属性和含义。
MDX清单外
import { Chart } from './Chart.jsx'

# 季度营收

<Chart data={rows} type="bar" />
Slidev清单里
---
layout: two-cols
---
# 季度营收
<BarChart :data="rows" />
GEML
=== table {#q format=csv header=1}
Quarter,Revenue
Q1,120
Q2,180
===

=== diagram {#rev format=geml-chart data=#q type=bar x=Quarter y=Revenue}
===

图表的数据是同一文档里的表格,按 #q 引用,引用受检。没有可执行代码,GEML 规范第 1 节写明「没有原始 HTML 的后门」。

区别
MDX 和 Slidev 的表达力没有上限,代价是文档就是程序:要运行时、要打包,也要信任作者的代码。GEML 选择封闭:类型和属性写在规范或 profile 里,未知的类型报警,文档本身永远可以安全地解析、检查、交给 agent 改。
重叠
Markdoc 走的是 GEML 这条路:文档里只有 tag 和属性,tag 的含义由宿主的 schema 定义,并且会被校验。它是清单外离 GEML 设计最近的项目,只是没有块寻址和写入命令。
agent

面向 agent:2026 年大家都做了 MCP

「让 agent 只读写一部分,不整篇重写」在今年成了共识。Slidev 在 7 月加了 MCP,Carve 的 MCP 是 9 月建的,mq 和 demarkus 也各有一个。差别在三个地方:地址稳不稳,写之前查不查,改坏了能不能退回去。

五个 MCP 服务,同一组问题 思路相撞 数据来自各项目的 README 和 MCP 源码,截至 2026-09-30。
服务读的单位怎么写地址写之前历史
Carve
carve-mcp,14 个工具
标题、脚注、某类节点、AST 路径生成带源码哈希的可撤销补丁,不直接写文件标题 id 或 AST 路径可调 lint;补丁在源码变了时作废撤销补丁
Slidev
内置,2026-07
一页幻灯片改、插、删、移一页,写回 .md页码,插入一页后后面的都变无无
demarkus
15 个工具
整篇,或按标题 slug 取一节;大文档先给提纲整篇发布或追加,带预期版本,冲突时给合并候选路径、内容哈希、标题 slug版本冲突检测整篇,服务器端哈希链
mq
mq-mcp
一节或一类节点不开放写入选择器、标题文字不适用无
GEML
11 个工具
一块、一节、一个坐标按块、按节直接写文件作者写的 #id整份文档重新检查,坏了就拒;选择器带上内容地址时,内容变了就不写按块,.gemlhistory
重叠
GEML 的「按块读写 + MCP」不再是独有的卖点。分量最重的证据是近五万 star 的 Slidev,它已经内置了按页读写的 MCP;Carve 连 agent skill 都有,只是社区还很小。
区别
只有 GEML 的地址是作者写下、不随位置和标题文字变的 id,也只有 GEML 在写入的那一刻检查整份文档。Carve 走的是另一种安全:不直接写,交出一个带哈希的补丁让人或程序确认。
启示
Carve 的源码哈希和 demarkus 的预期版本,防的是 agent 先读了一块、别人随后改了它、agent 再写回去。GEML 的选择器 === note@<hex> {#id} 能做同样的校验,内容一变就选不中、不写;还缺的是 get --json 和 MCP 把这个哈希直接交给调用方。
修订

改动记在正文里,还是记在旁边

CriticMarkup 是清单「语法扩展」一节里唯一和修订有关的项目。

一处修改建议 可借鉴
CriticMarkup
托管费每月 {~~120~>150~~} 元。
{>>按新报价改的<<}
{++含备份。++}

增 {++ ++}、删 {-- --}、替换 {~~ ~> ~~}、批注 {>> <<}、高亮 {== ==}。标记留在正文里,接受或拒绝之后才消失。

GEML
$ geml history save doc.geml -m "按新报价改"
$ geml history get doc.geml --json
[ { "id": "20260930T…", "summary": "按新报价改", "offset": 0, "current": true }, … ]
$ geml revert doc.geml '#cost' --rev 20260930T…

历史在 .gemlhistory 边车里,按块回滚。正文保持干净,但「建议还没被接受」这种状态,GEML 表达不了。

启示
GEML 有修订历史,没有待审的建议。agent 提一处改动、等人确认,今天只能直接写进去再回滚。CriticMarkup 的「提议态」可以作为一个 profile 的候选:建议挂在块 id 上,接受时走一次普通写入。
启示

对 GEML 意味着什么

四件事:什么是真正独有的,谁是要正视的对手,哪些东西值得借,哪些不必担心。

独有 三件事绑在一起

带类型的块、作者写下的稳定 id、写入前整份检查,这三件事单拿出来都有人做过,放在一起的只有 GEML。再加上按块写入的命令行和 MCP、块级历史,以及直接读现有 .md 的能力:Carve 和 Djot 都要求先把文档转换过去,GEML 不用。

最近 Carve:功能近,影响小

同一节、同一套说法:lint、JSON AST、补丁式编辑、MCP、agent skill。它今年 5 月才创建,已有 64 个仓库、2,200 个测试用例、三套实现,9 月底一天几十个提交;但只有 32 个 star,没有找到外部用户。结合影响力看,它是要跟踪的项目,不是眼下的主要对手。它和 GEML 的差别在任意块的稳定地址、写入即检查、兼容现有 Markdown 这三点,讲 GEML 时这三点也该放在语法之前。

影响力 按影响力看

思路相撞的两个都小:Carve 32 个 star,mq 1,040 个。影响大的是 Slidev(48,891)、Pandoc(46,456)、MDX(19,809)和 Markdoc(8,494)。评估对 GEML 的影响时,以后者为准:Slidev 说明按单元读写的 MCP 已经进了主流工具;Markdoc 是讲 GEML 时最好的参照系。

可借鉴 六件 GEML 还没有的事

行内元素的属性和 id(Djot、Carve);按名字引用源码片段(mdcode、Slidev 的 region,AsciiDoc 的 tag);把文档里的代码改动推回源文件(mdcode);文件搬家后修复跨文档引用(darnlink);待审的修改建议(CriticMarkup);把内容哈希交给调用方做写前校验(Carve、demarkus)。

不必担心 底座和另一层

CommonMark、GFM、VFMD 是 GEML 散文部分的来源;MultiMarkdown、Markdown Extra 这些老扩展是特例语法的集合,GEML 已经把它们收进一种块里。MDX 是「文档即程序」的另一条路。MarkWay 和 mk-notes 在协议和同步这一层,不在文档格式这一层。

建议
「可借鉴」里的六件事,按项目的规矩都应在设计文档里有名字和阶段。其中两件最小、最贴近现有功能:让 get --json 和 MCP 返回内容哈希,配合选择器里的内容地址做写前校验;按 region 引用源码,补在 code {src=} 上。
依据

仓库数据与探针

仓库数据取自 GitHub API,时间 2026-09-30。「最近推送」是仓库最后一次 push 的日期,不一定是最后一次功能提交。

项目仓库star创建最近推送许可证
Carvemarkup-carve/carve322026-05-132026-09-30MIT
Djotjgm/djot2,0462022-07-112026-07-01MIT
VersaDokgettalong/versadok172025-01-092026-07-05MIT
Textitexti/texti.github.io92017-07-142018-08-04CC0
MultiMarkdown 6 / 7fletcher/MultiMarkdown-7678 / 562017-01-192026-09-22见仓库
Markdown Extramichelf/php-markdown3,4622010-06-062025-06-17见仓库
Markdown Extendede-picas/markdown-extended382013-06-022024-03-02见仓库
CriticMarkupCriticMarkup/CriticMarkup-toolkit8492013-01-102021-03-04见仓库
kramdowngettalong/kramdown1,7822008-11-302026-01-31见仓库
Pandocjgm/pandoc46,4562010-03-202026-09-29GPL-2.0
CommonMarkcommonmark/commonmark-spec5,1492014-08-142026-04-27见仓库
GFMgithub/cmark-gfm1,1332016-12-012026-09-28见仓库
VFMDvfmd/vfmd-spec322013-09-012016-10-29未声明
mqharehare/mq1,0402025-02-242026-09-30MIT
darnlinktxemi/darnlink192026-07-112026-09-27GPL-3.0
mdcodeszkiba/mdcode282024-01-082026-02-23MIT
markedppcommenthol/markedpp392014-09-012025-08-18MIT
Slidevslidevjs/slidev48,8912021-04-242026-09-16MIT
demarkuslatebit-io/demarkus162026-02-142026-09-30README 写 AGPL-3.0
MarkWayRaysunKR/MarkWay22026-03-312026-06-03MIT
mk-notesMyastr0/mk-notes1252025-01-292025-12-23MIT
Markdocmarkdoc/markdoc8,4942022-05-092026-09-16MIT
MySTjupyter-book/mystmd5252020-07-212026-09-28MIT
Quartoquarto-dev/quarto-cli6,0332020-09-252026-09-30见仓库
AsciiDocasciidoctor/asciidoctor5,2182012-06-012026-09-01见仓库
MDXmdx-js/mdx19,8092017-12-242026-09-29MIT
GEML 探针覆盖结果页面里对应
refs.geml · new.geml坏引用在另一节,改本节1 error 写入被拒id 与引用检查
code.geml · src/math.js行号范围取代码,范围过期1 error 范围过期嵌入与同步
doc.geml · complex-form.gemllist、list --within、find、get --head、rename;属性过滤0 诊断查询与改写
samples.gemlnote、table、data、geml-chart 的写法0 诊断通用块 · 组件与扩展点