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

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

  •  2
     
  •   jaydenWang · 1 day ago · 1998 views

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

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

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

    功能点:

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

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

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

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


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

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

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

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

    4. 中文输入法选字界面下多按几次 backspace & ctrl+z ,页面直接挂了
    jaydenWang
        32
    jaydenWang  
    OP
       9h 18m ago
    @xuld 感谢反馈,会尽快修复
    edisonwong
        33
    edisonwong  
       8h 12m ago
    题外问个问题,打包 dmg 分发给别人下载的时候,OP 是不是也是买了开发者计划做了签名+公证?
    jaydenWang
        34
    jaydenWang  
    OP
       8h 3m ago
    @edisonwong 对的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2918 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 50ms · UTC 10:58 · PVG 18:58 · LAX 03:58 · JFK 06:58
    ♥ Do have faith in what you're doing.