ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

深入DocFlow架构:Next.js 16 + Tiptap 3 + Yjs如何构建现代协同编辑器

深入DocFlow架构:Next.js 16 + Tiptap 3 + Yjs如何构建现代协同编辑器 深入DocFlow架构Next.js 16 Tiptap 3 Yjs如何构建现代协同编辑器【免费下载链接】DocFlowDocFlow is an AI-powered documentation platform built with Tiptap and Next.js, designed for real-time collaboration ⚡, smart writing assistance , and a flexible plugin system .项目地址: https://gitcode.com/gh_mirrors/doc/DocFlowDocFlow 是一个开源的 AI 文档协同编辑平台它把 Notion 式的块级编辑、飞书式的实时协作和 AI 智能写作融为一体。这篇文章将从架构视角拆解这款现代协同编辑器它是如何用 Next.js 16 扛起文档应用骨架用 Tiptap 3 打造可扩展的编辑器内核再借助 Yjs CRDT 让多人编辑像本地编辑一样顺滑读完这篇协同编辑器架构解析你不仅能看懂 DocFlow 的设计思路还能把它迁移到自己的项目中。整体架构现代协同编辑器的三层骨架DocFlow 采用 pnpm workspaces Turborepo 的 Monorepo 结构代码分为「应用层」和「插件层」目录职责apps/DocFlowNext.js 16 主应用包含编辑器、协作、AI、文档管理等全部页面packages/alert可独立发布的提示插件包packages/bilibili视频嵌入插件包packages/transformer文档格式转换引擎ProseMirror / Tiptap JSON 互转这种拆分让编辑器能力以插件包的形式沉淀后续可以发布到 npm 供社区复用。仓库根目录的 package.json 通过 Turbo 统一调度 dev / build / lintpnpm-workspace.yaml 定义了工作区。从技术栈看DocFlow 的三层架构非常清晰框架层Next.js 16 App Router React 19负责路由、渲染与安全编辑器层Tiptap 3基于 ProseMirror提供块级编辑与 40 扩展协同层Yjs Hocuspocus负责数据同步、光标与在线状态Next.js 16文档应用的高效骨架DocFlow 是典型的 Next.js 16 实战案例。应用的入口配置在 next.config.ts可以看到几个值得学习的设计1. 新一代 proxy 鉴权Next.js 16 用proxy.ts取代了旧的middleware.ts。DocFlow 在 proxy.ts 中实现了一套轻量鉴权读取auth_tokenCookie、判断有效期、对/docs、/dashboard等受保护路由进行拦截未登录用户跳转到登录页并携带redirect_to参数实现登录后回跳。公开路由首页、博客、分享页则直接放行避免死循环。2. 开箱即用的性能优化配置中启用了optimizePackageImports对 lucide-react、recharts 等大型依赖做按需打包、optimizeCss与optimizeServerReact图片统一走 AVIF/WebP 格式并对静态资源设置了 1 年强缓存。构建脚本使用next build --turbo充分享受 Turbopack 带来的速度提升。3. 分层监控与安全头通过 instrumentation.ts 接入 Sentry 做错误监控同时在响应头中写入X-Frame-Options、X-Content-Type-Options等安全策略为文档数据保驾护航。Tiptap 3可无限扩展的编辑器内核DocFlow 的编辑器完全建立在 Tiptap 3 之上。Tiptap 3 的核心思路是「一切皆扩展」标题、列表、代码块、表格、图片、数学公式都是扩展你可以按需组合甚至开发自己的自定义节点。DocFlow 把全部扩展集中在一个数组里代码见 extension-kit.ts它一口气注册了 40 扩展这里挑几个亮点块级编辑体验DraggableBlockDragHandler实现拖拽调整块顺序SlashCommand提供/快捷命令菜单UniqueID为每个块分配稳定 ID富媒体能力ImageBlock、TableImage、Youtube、MathLiveExtension专业数学公式编辑器一应俱全智能写作辅助Mention支持提及成员AgentSuggestion提供 AI 建议SearchAndReplace支持全文查找替换粘贴体验优化MarkdownPaste、JsonPaste让你从 Markdown 或富文本粘贴时自动转换格式如果你想扩展 DocFlow只需在src/extensions/目录新增一个扩展文件再挂到ExtensionKit数组中即可这也是 Tiptap 3 扩展机制的最大魅力。Yjs CRDT实时协同编辑的技术核心多人同时编辑同一篇文档最怕的就是「最后写入覆盖前一个」。DocFlow 用Yjs CRDT无冲突复制数据类型解决了这个难题——每个用户的操作都是原子的多个用户同时修改同一段落Yjs 会自动合并保证所有端最终看到一致的结果且全程无需上锁。在 DocFlow 中协同数据流是这样跑的编辑器使用Collaboration扩展把 Yjs 文档绑定到 ProseMirror 状态CollaborationCaret扩展负责渲染远端用户的彩色光标服务端通过 Hocuspocus 提供 WebSocket 同步通道本地通过y-indexeddb持久化离线缓存值得注意的是DocFlow 的 Yjs 文档按「字段」隔离——field: content只同步正文内容避免协作时互相干扰。相关依赖yjs、y-prosemirror、y-webrtc、hocuspocus都可以在 apps/DocFlow/package.json 中看到。协同编辑会话建立的三个阶段DocFlow 的协同启动流程设计得非常讲究核心逻辑在 useCollaboration.ts可以概括为三个阶段第一阶段本地秒开。进入文档后首先用IndexeddbPersistence从浏览器本地恢复文档快照让用户立刻看到内容无需等待网络。第二阶段服务端同步。本地恢复完成后才创建 HocuspocusProvider 连接 WebSocket 服务与服务器交换增量更新实现「本地优先、增量合并」大幅减少首次同步的数据量。第三阶段编辑就绪。isCollaborationBootstrapReady本地恢复 服务端同步都完成后编辑器才真正初始化并挂载Collaboration扩展此时所有在线用户看到的都是最新内容。同时通过 Yjs 的 Awareness 机制广播当前用户信息姓名、头像、光标颜色其余用户实时出现在「在线成员」列表里——这就是 DocumentHeader 中协作头像和彩色光标的数据来源。权限控制从 HTTP 鉴权到实时只读协同编辑器最棘手的问题之一是权限变更后正在编辑的人怎么处理DocFlow 给出了一个优雅的答案。进入文档时useDocumentPermission.ts 先通过 HTTP 请求拿到文档权限VIEW / COMMENT / EDIT / NONE。连接 WebSocket 后服务端还会通过 stateless 消息推送server:permission告诉客户端权威的只读状态。页面里有一套优先级判断逻辑见 docs/[room]/page.tsxURL 只读参数 服务端实时权限 HTTP 兜底权限。更聪明的是当权限变化时编辑器实例不会销毁重建而是调用editor.setEditable()动态切换编辑/只读用户甚至感觉不到中断。顶部还会出现醒目的「只读模式」提示条。历史版本与自动快照文档写坏了怎么办DocFlow 内置了完整的快照体系见 useEditorHistory.ts自动快照内容变化后每 5 分钟自动创建一个快照卸载保存离开页面时若内容有变更自动补存一次手动管理支持创建、恢复、删除、清空快照恢复后通过 Yjs 增量更新同步给所有协作者配合 HistoryPanel 界面用户可以像「时间机器」一样随时回到文档的任何历史版本。插件系统把能力拆成独立 npm 包DocFlow 的野心不止于一个编辑器。在packages/目录下它把通用能力抽成了独立插件包transformer文档格式转换引擎支持 ProseMirror / Tiptap JSON 与多种格式互转是导出 DOCX、PDF 的基础alert提示块组件对应编辑器里的「提示/警告」块bilibiliB 站视频嵌入一行配置即可插入视频卡片这种「应用 插件包」的 Monorepo 模式让团队可以独立开发、独立发布、独立测试每个能力也为未来的插件市场打下了基础。总结现代协同编辑器的可复制架构回顾 DocFlow 的整体设计它的成功在于把三件最难的事做到了「各司其职」Next.js 16管好应用骨架、路由与安全Tiptap 3管好编辑体验与扩展生态Yjs Hocuspocus管好数据同步与实时协作对想学习协同编辑器的开发者来说DocFlow 是一份极佳的参考实现从权限控制、本地缓存、增量同步到插件化工程每一层都有清晰的代码可循。如果你想本地跑起来看看效果可以克隆仓库并启动开发服务器git clone https://gitcode.com/gh_mirrors/doc/DocFlow cd DocFlow pnpm install pnpm dev然后打开http://localhost:3000开两个浏览器窗口编辑同一篇文档就能亲眼见证 Yjs 的实时协同魔法了。祝你在构建自己的协同编辑器路上一帆风顺【免费下载链接】DocFlowDocFlow is an AI-powered documentation platform built with Tiptap and Next.js, designed for real-time collaboration ⚡, smart writing assistance , and a flexible plugin system .项目地址: https://gitcode.com/gh_mirrors/doc/DocFlow创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进