# DOMD [![npm version](https://img.shields.io/npm/v/@do-md/core-react.svg?style=flat-square&labelColor=2f2f2f&color=4493f8)](https://www.npmjs.com/package/@do-md/core-react) [![Core size](https://img.shields.io/badge/core%20Brotli-%E2%89%8820%20KB-5E81AC?style=flat-square&labelColor=2f2f2f)](https://www.npmjs.com/package/@do-md/core-react) **DOMD 是一款所见即所得 Markdown 编辑器,基于约 20 KB 的自研 Markdown 原生内核构建。** 面向日常写作、大型 Markdown 文档、多人实时同步,以及 AI 内容的流式写入。 * Brotli 压缩后约 20 KB,运行时只依赖 React 和 Immer * 20,000 行 Markdown 文档也能顺滑编辑、流式写入 * 输入和渲染同步完成:光标稳定,无明显延迟、无闪烁 * 支持段落内细粒度的离线、多端无冲突合并,不是段落级 LWW * 支持多编辑器实时同步、细粒度无冲突合并和远端光标 * 提供原生 macOS 应用、Quick Look 预览、本地优先 Web 编辑器,以及面向 agent 的 CLI [**在线试用**](https://www.domd.app/editor) 下载 macOS 版本:[Apple Silicon](https://github.com/do-md/domd/releases/latest/download/DOMD_aarch64.dmg) · [Intel](https://github.com/do-md/domd/releases/latest/download/DOMD_x86_64.dmg) [English](./README.md) · 简体中文 · [日本語](./README.ja.md) --- ## Markdown 原生内核 DOMD 的所见即所得编辑直接发生在 Markdown 之上。 Markdown 文档本身就是编辑状态的唯一来源。 DOMD 没有基于 ProseMirror、Slate、Lexical 这类通用富文本框架构建。解析、渲染、编辑、撤销/重做、AI 流式写入、分块文件加载,都会在内核中被建模为确定性的状态变化。 内容变化时,DOMD 只渲染真正发生变化的部分。整套编辑栈经过 Brotli 压缩后约 20 KB。 --- ## 离线无冲突合并 DOMD 支持段落内的细粒度无冲突合并,而不是把整段内容作为一个 LWW 值。两台设备可以离线修改同一段落中的不同位置,之后交换已保存的状态,双方修改都能保留下来。离线状态交换和实时同步共享同一套 CRDT 基础,也可以彼此独立地接入。 编辑器内核本身无需感知 CRDT。内核只输出常规编辑产生的结构化操作流;可选的 CRDT 插件监听这条操作流,把每次变化转换为嵌套 Yjs shared types 上的 transaction,并维护一个可合并的 `Y.Doc` 副本。Yjs 再把副本编码成可持久化、可传输、可按任意顺序应用的 document updates。由于 CRDT 边界只是操作流外的一层 adapter,业务层和交互层无需围绕 Yjs 重写:功能开发完成后,接入这个轻量插件即可获得段落内细粒度的 CRDT 合并能力。 [**试试双编辑器 CRDT 合并 Playground**](https://www.domd.app/playground/crdt) --- ## 实时同步 DOMD 可以让多个编辑器实时同步同一份 Markdown。细粒度编辑会传播到其他副本,并发修改通过 Yjs 自动收敛,远端光标也可以随内容一起同步。收到变化时,DOMD 不会替换整篇文档,而是只在真正受影响的节点上回放操作,因此实时编辑仍然保持局部渲染的性能特征。 内核为这条链路提供三个接入点:`subscribeRenderDataOps` 输出本地编辑操作,`applyExternalRenderDataOps` 增量应用远端操作,光标快照和订阅接口则提供 presence 数据。可选的 `realtime-sync` adapter 会在这些接口与嵌套的 Yjs shared types 之间双向翻译,形成可复用的同步、收敛和 presence 层。它独立于业务流程和产品状态,不同形态的编辑产品都可以接入,而无需重写 DOMD 的输入、历史记录或渲染系统。 [**试试实时同步 Playground**](https://www.domd.app/playground/live) --- ## 流式写入 AI 模型通常会一段一段输出 Markdown,而且经常会把语法切在中间。 DOMD 可以按 chunk 接收这些内容,并在写入过程中实时渲染。 未闭合的代码块、还没完成的表格、写到一半的列表,都可以在流式过程中正确显示。等真正的结束符到达时,内容会自然合并,不会闪烁,也不需要整篇重渲染。 DOMD 对 chunk 大小不敏感,即使在 20,000 行文档里持续流式写入,也能保持顺滑。 [**试试流式写入 Playground**](https://www.domd.app/playground) --- ## Markdown 原生输入框 DOMD 也可以作为 Markdown 原生输入框使用,适合评论框、Prompt 输入框、CMS 字段、聊天输入框、Issue 表单,以及任何需要结构化文本输入的地方。 用户输入 Markdown 时,内容会实时渲染成所见即所得效果,但底层 value 仍然保持为 Markdown。 在聊天输入场景中,可以用 `Enter` 提交,用 `Shift + Enter` 换行。 [**试试输入框 Playground**](https://www.domd.app/chat) --- ## 大文件性能 https://github.com/user-attachments/assets/d4cb6d94-6efe-4d5d-8a67-846be7f3cd45 打开一篇 5 KB 笔记,和打开一篇 1 MB Markdown 文档,在感知速度上几乎没有区别。 这里不是普通纯文本预览,而是完整的所见即所得 Markdown 渲染。 在 Finder 里选中 `.md` 文件后按空格,DOMD 自带的 Quick Look 扩展会接管 Markdown 渲染。 --- ## macOS DOMD 的 macOS 应用追求轻量、直接、接近系统原生体验。 打开一个渲染后的 `.md` 文件,感觉应该接近系统打开 `.txt` 文件:快、轻、没有额外负担。 DOMD 使用普通 Markdown 文件工作流:没有项目树,没有侧边栏,没有标签页,没有内置云同步服务,也不需要账号。文件始终留在你的设备上。 下载 macOS 版本:[**Apple Silicon**](https://github.com/do-md/domd/releases/latest/download/DOMD_aarch64.dmg) · [**Intel**](https://github.com/do-md/domd/releases/latest/download/DOMD_x86_64.dmg) --- ## Web 打开网页即可开始所见即所得 Markdown 编辑。 你也可以把 `.md` 文件直接拖进页面,在浏览器里本地编辑。所有处理都在本机完成,文件不会离开你的设备。 https://www.domd.app --- ## CLI macOS 版本内置 `domd-cli`,可以让 agent、脚本、启动器和自动化工具直接控制 DOMD 窗口。 这让 DOMD 不只是一个编辑器,也可以成为本地 Markdown 渲染界面。 `domd-cli` 支持打开新窗口、流式写入、改写选区等操作。模型的流式响应可以直接 pipe 到 `domd-cli insert`,token 会一边到达,一边写入文档,并实时渲染成富文本 Markdown。 页面顶部的演示视频,就是通过 Alfred workflow 调用 GPT API,然后把模型响应增量写入 DOMD 录制出来的。 --- ## 开发 ```bash npm install npm run dev ``` 开发原生 macOS 应用: ```bash npm run tauri dev ``` 目前暂不支持 Windows 原生构建。 完整开发和贡献说明见 [CONTRIBUTING.md](./CONTRIBUTING.md)。 --- ## License DOMD 是一个产品优先的项目。 应用层代码,包括 macOS 应用、Web 应用、辅助库和 DOMD 内核插件,均以 MIT License 开源,方便学习、个人使用、贡献和审查。 核心编辑器内核以独立 npm 包 [`@do-md/core-react`](https://www.npmjs.com/package/@do-md/core-react) 发布,并单独使用 PolyForm Noncommercial 1.0.0 许可证授权。该包提供 DOMD 的 Markdown 编辑和渲染能力。 你可以在以下场景中使用 `@do-md/core-react`: * 评估和试用 * 个人项目 * 非商业项目 * 非商业开源项目 * 实验和原型开发 商业使用需要提前获得书面授权。 这包括但不限于:商业产品集成、SaaS / 产品嵌入、重新分发,或将 DOMD 作为付费产品、SDK、编辑器组件、托管服务的一部分提供。 如需商业授权,请联系项目作者。 --- ## 反馈与贡献 * [GitHub Issues](https://github.com/do-md/domd/issues) * [GitHub Discussions](https://github.com/do-md/domd/discussions) * [Contributing guide](./CONTRIBUTING.md)