• 请不要在回答技术问题时复制粘贴 AI 生成的内容
jaydenWang
V2EX  ›  程序员

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

  •  2
     
  •   jaydenWang · 12h 13m ago · 1326 views

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

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

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

    功能点:

    • Markdown 原生所见即所得编辑,支持代码实时高亮,支持代码格式化
    • 增量加载文档,可以实现大文档秒开
    • 支持增量流式输入渲染
    • 支持段落内细粒度的离线、多端无冲突合并,不是段落级 LWW
    • 极其轻量(本来想控制在 20KB ,现在应该已经突破 20KB 了)

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

    30 replies    2026-07-24 01:27:38 +08:00
    TArysiyehua
        1
    TArysiyehua  
       12h 6m ago
    你这个在线体验可以稍微改改,增加图片,表格等等,而不仅仅是文本。
    yinyu
        2
    yinyu  
       12h 5m ago   ❤️ 1
    牛逼!!!!
    jaydenWang
        3
    jaydenWang  
    OP
       12h 2m ago
    @TArysiyehua 实际上是支持的,没有暴露便捷的方式。图片目前是可以复制粘贴进去的,表格有快捷键,不过被浏览器吞了,我想想优化一下
    Razio
        4
    Razio  
       12h 1m ago
    有点蒙,所见即所得指的是富文本编辑器,不是 markdown 编辑器吧。
    jaydenWang
        5
    jaydenWang  
    OP
       12h 0m ago
    @Razio Markdown 所见即所得编辑器
    w568w
        6
    w568w  
       11h 55m ago
    Wow ,这个强。做得好的话也许可以替代现在那些臃肿的 Electron App 里的 Markdown 渲染器,甚至替代 Typora 。

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


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

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

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

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

    不过 Mermaid 、LaTeX 肯定还是要适配
    lizhenda
        30
    lizhenda  
       3h 51m ago
    很厉害啊,满流畅的,期待进一步的完善体验。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   921 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 49ms · UTC 21:18 · PVG 05:18 · LAX 14:18 · JFK 17:18
    ♥ Do have faith in what you're doing.