自研 20KB Markdown 所见即所得编辑器内核发布 0.3.0 版本,支持 CRDT 无冲突合并,期待可以接入到大家的产品中

jaydenWang 2026-07-23 17:05 1

项目在持续维护迭代,最近的版本优化了很多编辑体验、手机端编辑体验。功能上主要支持了业务无关 CRDT 合并。内核支持npm安装,后续会考虑把插件发单独npm


项目地址: https://github.com/do-md/domd


在线体验: https://www.domd.app


功能点:



  • Markdown 原生所见即所得编辑,支持代码实时高亮,支持代码格式化

  • 增量加载文档,可以实现大文档秒开

  • 支持增量流式输入渲染

  • 支持段落内细粒度的离线、多端无冲突合并,不是段落级 LWW

  • 极其轻量(本来想控制在 20KB ,现在应该已经突破 20KB 了)


期待有需求的可以接入到 domd 内核,内核目前还是 PolyForm Noncommercial 1.0.0 许可,如果大家评估可以接入,我可以出一份正式的免费授权

最新回复 (34)
  • TArysiyehua 07-23 17:12
    1
    你这个在线体验可以稍微改改,增加图片,表格等等,而不仅仅是文本。
  • yinyu 07-23 17:13
    2
    牛逼!!!!
  • jaydenWang 楼主 07-23 17:16
    3
    @TArysiyehua 实际上是支持的,没有暴露便捷的方式。图片目前是可以复制粘贴进去的,表格有快捷键,不过被浏览器吞了,我想想优化一下
  • Razio 07-23 17:17
    4
    有点蒙,所见即所得指的是富文本编辑器,不是 markdown 编辑器吧。
  • jaydenWang 楼主 07-23 17:18
    5
    @Razio Markdown 所见即所得编辑器
  • w568w 07-23 17:23
    6
    Wow ,这个强。做得好的话也许可以替代现在那些臃肿的 Electron App 里的 Markdown 渲染器,甚至替代 Typora 。

    有考虑过支持模块化编辑吗?比如「每个段落把鼠标移动上去,左边会出现把手,单击可以折叠,按住可以任意拖动到其他位置」这种体验。
  • jaydenWang 楼主 07-23 17:26
    7
    @w568w 目前数据结构和编辑体验是模块化的,支持无限嵌套。移动出现把手,单击可折叠可拖拽后续应该会以插件的形式支持,内核架构上目前是支持的
  • TArysiyehua 07-23 17:44
    8
    @jaydenWang 因为是演示嘛,所以你这个样例最起码要支持大部分 markdown 常见的格式,来体现你的渲染性能
  • jaydenWang 楼主 07-23 17:48
    9
    @TArysiyehua 确实,我后面加一下。现在想体验性能的话,可以直接拖一个 md 进去,是可以直接渲染编辑的,或者复制粘贴一段文本
  • shuimuzi 07-23 18:03
    10
    问一下大佬 CRDT 是自己实现的,还是用的 yjs
  • jokcylou 07-23 18:10
    11
    能自定义节点渲染么
  • Sezxy 07-23 18:11
    12
    有个 bug 输入" [html]( https://bai " 然后 backspace 删除


    再继续删除
  • Sezxy 07-23 18:13
    13
    另外输入表格格式,没法预览转换
  • jaydenWang 楼主 07-23 18:16
    14
    @shuimuzi 目前是通过插件的形式直接将内核操作产生的 patch 翻译成 yjs 的 OP ,产生 CRDT 数据。内核架构层不感知 yjs 和 CRDT ,理论上可以切换到其他的 CRDT 引擎
  • jaydenWang 楼主 07-23 18:17
    15
    @jokcylou 有在慢慢支持和开放
  • jaydenWang 楼主 07-23 18:18
    16
    @Sezxy 偶先过,我尽快修复
  • jaydenWang 楼主 07-23 18:24
    17
    @Sezxy 直接输入应该不行(有一个快捷键,不过被浏览器吞了),可以粘贴一个表格文档试试,或者直接拖拽一个 md 到页面中
  • Sezxy 07-23 18:29
    18
    1. 输入
    2. 剪切刚输入的表格文本
    3. 粘贴
  • wang93wei 07-23 18:53
    19
    链接不支持渲染
  • jaydenWang 楼主 07-23 19:14
    20
    @wang93wei 无法加载你们的图片,是我梯子的原因吗?
  • ota 07-23 20:49
    21
    GFM 都支持不?
  • ota 07-23 20:54
    22
    不支持 html 安全标签。
    对 GFM 支持有限。
  • jaydenWang 楼主 07-23 21:06
    23
    @ota GFM 支持度大概是 80%。HTML 暂时屏蔽了,后续优化编辑体验后会开放
  • jaydenWang 楼主 07-23 21:07
    24
    @ota 随着版本迭代,GFM 是要做到 100%支持的
  • garyox64 07-23 22:29
    25
    和现存的技术栈区别是啥,tiptap 之类,我最近写编辑器也很烦,很多都要额外适配,mermaid 之类的,latex
  • ivyliner 07-23 23:05
    26
    @jaydenWang 怎么获取免费授权 ?
  • yjxjn 07-23 23:11
    27
    @garyox64 我用的 codemirror
  • jaydenWang 楼主 07-23 23:52
    28
    @ivyliner 目前是要就给,大概流程是把你的产品告诉我,我让 AI 出一份具有法律意义的授权文案
  • jaydenWang 楼主 07-24 00:20
    29
    @garyox64 最大的区别就是,DOMD 不是在 Tiptap / ProseMirror 上改出来的,而是从零按照 Markdown 编辑器设计了一套架构。

    所以像 AI 增量流式输入、段落内 CRDT 合并这些能力,不是后来为了赶 AI 需求硬打进去的补丁,而是底层数据结构本来就适合做。少了通用富文本框架的负担,包更小、链路更短,输入和渲染同步,编辑起来更跟手,也几乎没有多一帧的抖动。

    更底层一点,粗略类比的话,ProseMirror 这类 transaction-driven 编辑器更接近命令式更新,也可以理解成一套基于 schema 和 transaction 的编辑数据库:每次插入、删除或修改格式,都要表达成明确的操作。

    DOMD 的思路则更接近 React 的声明与 reconciliation:不是逐条控制这次具体改了哪个节点,而是重新声明当前 Markdown ,再由 diff/reconcile 自动找出需要复用和更新的部分。

    不过 Mermaid 、LaTeX 肯定还是要适配
  • lizhenda 07-24 01:27
    30
    很厉害啊,满流畅的,期待进一步的完善体验。
  • xuld 07-24 09:25
    31
    刚才试用了下编辑器,10 秒内就发现了好多 bug:

    1. 输入 aaa[bbb](ccc) 后,再继续输入中文,比如“的”
    bug: 内容就变成了“aa 的[bbb](ccc)的”

    2. 然后 **撤销** 一次
    bug: 撤销后光标位置飘到了行首

    3. 继续在行尾输入几个字,然后选中刚才输入的 bbb
    bug: 无法正确选择 bbb

    4. 中文输入法选字界面下多按几次 backspace & ctrl+z ,页面直接挂了
  • jaydenWang 楼主 07-24 09:40
    32
    @xuld 感谢反馈,会尽快修复
  • edisonwong 07-24 10:45
    33
    题外问个问题,打包 dmg 分发给别人下载的时候,OP 是不是也是买了开发者计划做了签名+公证?
  • jaydenWang 楼主 07-24 10:55
    34
    @edisonwong 对的
* 帖子来源V2EX
返回