多人协作编辑
多人协作编辑功能允许多个用户同时编辑同一个文档,并且文档内容是实时传输到服务器端的,可以在服务器端直接入库,无需再由客户端发起保存请求。
多人协作编辑需要服务器端软件Umo Editor Server的支持,当然您也可以自定义服务商。
效果截图

演示视频
特点及优势
- 支持私有化部署,您可以私有化部署或者自定义服务商,实现数据的安全性和可控性;
- 支持实时离线和在线协作,当用户离线后再次连接时,仍然可以同步文档更改的内容;
- 通过 WebSocket 与服务器进行实时通信,实现文档内容的实时同步;
- 可通过 Webhook 与其他应用进行通信,实现文档内容及评论等信息的同步;
- 支持文档评论协作,用户可以对文档进行评论,评论内容也会实时同步到服务器端;
- Umo Editor Server 可支持 100000+ 用户同时在线编辑,实现高效的多人协作,支持集群部署。
使用场景
- 会议纪要多人共编:主持人定框架,参会人补充要点
- 需求/PRD 评审共编:一边讨论一边落笔,减少多版本来回拷贝
- 合同/制度协作撰写:多角色并行修改,集中在一个版本里收敛
- 论文/报告合写:章节分工编辑,统一格式与目录结构
- 运营/市场文案协作:多人同时优化语句与排版,快速发布
- 售前方案联合编写:销售、产品、交付共同补齐内容与附件
- 教学/培训材料共建:讲师与助教协同完善案例与练习题
- 跨地区项目周报:异地成员实时补齐进度与风险
- 客服/知识库维护:多人同步更新 FAQ,减少内容冲突
- 制度宣贯资料维护:持续迭代同一份文档并保留协作痕迹
与其他功能协同使用
文档批注/评论(comments)
- 协作负责“共同编辑”,评论负责“讨论与结论沉淀”:文档批注/评论
- 结合 @ 提醒,把需要确认的问题定点抛给负责人
文档修订(revision)
- 协作中开启修订,便于审阅“是谁改了什么”,再集中接受/拒绝定稿:文档修订
- 审阅阶段按修订人过滤,分角色逐步收敛
文档历史版本(versions)
- 用版本保存里程碑,用协作承接过程编辑:文档历史版本
- 阶段验收/发布前创建版本,便于回溯与对比
文档表单(form)
- 多人可共同设计表单模板,或在预填基础上协作补录业务字段:文档表单
- 对于审批单、登记表、病历等文档化录入场景,协作与表单能力可以组合使用
AI(ai)
- 协作写作时,用 AI 做段落润色/重写/扩写,把结果写回正文:AI 功能
- 结合评论,把 AI 建议作为讨论依据,最后由协作者落地修改
默认配置
const defaultOptions = {
// 多人协作编辑相关配置
document: {
id: '', // 多人协作场景下,文档 ID 是必填的,用于唯一标识一个文档
},
collaboration: {
enabled: false,
showLoading: true,
provider: {},
},
onCollaborationEvent(name, payload, context) {
console.log('onCollaborationEvent', { name, payload, context })
},
}不支持的配置
当开启了在线协作功能时,不支持以下配置:
const defaultOptions = {
document: {
content: '',
autoSave: {
// ...
},
},
onSave() {
// ...
},
}因为在多人协作的场景中,文档内容是实时传输到服务器端的,可以在服务器端直接入库,无需再由客户端发起保存请求。
配置说明
collaboration
多人协作编辑的相关配置,其实现思路和原理可以参考:https://tiptap.dev/docs/hocuspocus 。
collaboration.enabled
说明:是否启用在线协作。
类型:Boolean
collaboration.provider
说明:在线协作服务商配置。Umo Editor Next 默认提供了基于 Express 一个 Nodejs 的服务器端(见:Umo Editor Server),包含了 Hocuspocus Server,该选项支持 Hocuspocus Server 的所有配置。
类型:Object
配置:同 Hocuspocus Server 的配置,见 https://tiptap.dev/docs/hocuspocus/provider/configuration 。
collaboration.showLoading
说明:是否开启协作首屏 loading。开启后,编辑区在文档内容尚不可用时会显示 loading 遮罩;当远端首屏同步完成,或开启 collaboration.provider.enableIndexedDB 后本地缓存已恢复时,loading 会自动消失。 v13.0.2 新增
类型:Boolean
默认值:true
collaboration.provider.enableIndexedDB
说明:是否开启协同离线存储。开启后,已缓存过的文档在下次进入时可优先从本地恢复;若本地缓存已恢复,即使远端服务暂时未连接,编辑区也不会继续被首屏 loading 遮罩。v13.0.0 新增
类型:Boolean
默认值:false
onCollaborationEvent
说明:统一监听协作 provider 事件。该回调会在内部协同状态更新后触发,适合用来接入业务日志、连接状态提示、自定义埋点或异常告警。 v13.0.2 新增
类型:Function
参数:
name:String,事件名称;payload:Any,事件原始参数;context:Object,当前协作上下文,包含provider、editor、collaboration。
示例:
const options = {
collaboration: {
enabled: true,
provider: {
parameters: {
documentId: '1',
},
},
},
onCollaborationEvent(name, payload, context) {
console.log('onCollaborationEvent', {
name,
payload,
provider: context.provider,
loading: context.collaboration?.loading,
synced: context.collaboration?.synced,
})
},
}支持的事件名称:
open:当 WebSocket 连接被创建时触发。connect:当 provider 成功连接到服务端时触发。authenticated:当客户端鉴权成功时触发。authenticationFailed:当客户端鉴权失败时触发。status:当连接状态发生变化时触发。message:当收到服务端消息时触发。outgoingMessage:当消息即将发送到服务端时触发。synced:当 Y.js 文档首次完成同步时触发。close:当 WebSocket 连接关闭时触发。disconnect:当 provider 断开连接时触发。destroy:当 provider 即将被销毁时触发。awarenessUpdate:当 awareness 信息更新时触发。awarenessChange:当 awareness 状态发生变化时触发。stateless:当收到无状态消息时触发。
方法列表
方法的使用示例请参考:方法列表。
getCollaboration
说明:获取在线协作相关信息。
参数:无
返回值:Object 或 undefined,Object 包含以下信息:
connect:Boolean,是否与服务商连接成功;users:Array,当前文档协作用户列表;loading:Boolean,是否仍处于协作首屏同步阶段;当collaboration.showLoading !== false且值为true时,编辑区会显示 loading,并将编辑器临时切换为只读,避免误操作; v13.0.2 新增synced:Boolean,协作数据是否已完成首屏同步; v13.0.2 新增localReady:Boolean,本地 IndexedDB 缓存是否已恢复;当开启collaboration.provider.enableIndexedDB且值为true时,表示本地缓存已可用。 v13.0.2 新增connectionFailed:Boolean,协作首屏阶段是否出现连接失败;当值为true且本地缓存尚未恢复时,编辑区会显示“未连接到服务器”提示。 v13.0.2 新增provider:Object,服务商信息,获得服务商信息后,可以通过监听相关事件,来实现更多个性化需求,参考:https://tiptap.dev/docs/hocuspocus/provider/events#option-2-binding 。