Docs:面向实时协作的开源协同文本编辑器(suitenumerique/docs)
Docs 是由法国 DINUM 与德国 ZenDiS 联合发起的开源协同编辑器,定位为 Notion / Google Docs 的自托管替代方案,强调实时协作、结构化文档与子文档、知识组织与数据自主可控,面向公共机构、企业与开放社区,采用 MIT 许可证。
社区作者 · zZz
它解决什么问题
项目定位
Docs(配图 1)是一个开源协同编辑器,帮助团队实时地共同撰写、组织与分享知识。官方将其描述为 Notion、Google Docs 一类工具的开源替代品,重点关注:
- 实时协作
- 干净、结构化的文档
- 知识组织
- 数据所有权与自托管
主要面向公共组织、公司和开放社区。
功能概览
**写作**
- 富文本与 Markdown 编辑
- 斜杠命令与块(block)系统
- 排版格式化
- 离线编辑
- 可选的 AI 写作助手(改写、摘要、翻译、修正错别字)
**协作**(配图 2 为实时协作演示)
- 实时光标与在线状态(presence)
- 评论与分享
- 细粒度访问控制
**知识管理**
- 子页面与层级结构
- 内容可搜索
**演示(Presentations)**
- 基于分隔符( --- )的简单结构
- 全屏选项
- PDF 导出
- 键盘导航
- 可从某个块开始演示
- 演示链接(配图 3 为幻灯片模式演示)
**导出/导入**
- 导入:.docx、.md
- 导出:.docx、.odt、.pdf
AI 功能
Docs 的 AI 功能是可选的,且与模型、网关无关(model agnostic、gateway agnostic):既可以自建,也可以直接使用自己的 AI 服务商。配置只需一个 API key 和一个 URL。
- **V1:选中即替换(配图 4)**。简单的工作流:你的选区既是上下文也是给模型的指令,AI 的反馈替换你的选区,并针对 Docs 的格式做了优化。
- **V2:AI 工具栏、AI 光标(beta,配图 5)**。基于 BlockNote AI 集成,包含:选区处出现可输入提示词、接受、拒绝、迭代 AI 反馈的 AI 工具栏;一个像另一位协作者那样与文档交互的 AI 光标;以及在选区之上叠加使用文档上下文。
互操作性
Docs 提供资源服务器 API 和服务器到服务器(server to server)API,可实现丰富的集成。一个具体例子是 Meet 的会议转录(配图 6):如果你运行了 Meet 实例,只需简单配置(DJANGO_SERVER_TO_SERVER_API_TOKENS),就可以把会议转录推送到 Docs,并授权给请求该内容的用户。
许可与 GPL 组件提示
本项目以 MIT 许可证发布(见 LICENSE)。官方说明:Docs 是公共驱动的倡议,选择该许可证是为了邀请私营部门使用、销售并为项目做出贡献。
**警告**:部分高级功能(例如“导出为 PDF”)依赖 BlockNote 的 XL 包,这些包以 GPL 授权,与 MIT 不兼容。可以使用以下方式在缺少这些包的条件下构建 Docs:
PUBLISH_AS_MIT=true这会构建一个不含非 MIT 功能的 Docs 镜像。更多细节见环境变量说明。
技术栈
Docs 构建于 Django Rest Framework、Next.js、ProseMirror、BlockNote.js、HocusPocus 和 Yjs 之上。项目方是 BlockNote.js 与 Yjs 的赞助者。
生态与合作(配图 7)
Docs 是法国政府(DINUM)与德国政府(ZenDiS)共同领导的联合倡议成果,目前正在引入荷兰(荷兰 🇳🇱 正在 onboarding),并持续寻找新的公共合作伙伴。
参与贡献
项目由社区驱动,欢迎 PR。提供贡献指南、翻译入口与 Matrix 聊天渠道;公开路线图可查看即将推出的功能、优先级与长期方向。
— 本文由 AI 根据公开来源辅助整理,命令、版本与许可证请在使用前到原始页面复核。
安装 / 开始使用
在线试用(无需安装)
- 打开一个在线演示文档
- 浏览公共实例
自托管
Docs 支持 Kubernetes、Docker Compose,以及社区提供的 Nix、YunoHost 等方式。起步请参考官方 Installation guide。
注意:部分高级功能(例如“导出为 PDF”)依赖 BlockNote 的 XL 包,这些包以 GPL 授权、与 MIT 不兼容。可通过以下方式在缺少这些包的条件下构建:
PUBLISH_AS_MIT=true这会构建一个不含非 MIT 功能的 Docs 镜像。更多细节见环境变量文档。
本地开发(面向贡献者)
注意:此方式仅用于开发与测试。它使用 Minio 作为 S3 兼容的存储后端,也可以使用任何 S3 兼容服务。
1. 准备环境(Prerequisites)
DockerDocker Compose- GNU Make
验证安装:
docker -v
docker compose version如果遇到权限错误,可能需要使用 sudo,或将你的用户加入 docker 组。
2. 初始化项目(Bootstrap)
最简单的方式是使用 GNU Make:
make bootstrap FLUSH_ARGS='--no-input'该命令会构建 app-dev 与 frontend-dev 容器、安装依赖、执行数据库迁移并编译翻译。建议在拉取新代码后再次运行该命令。
3. 启动服务
make run然后打开:https://localhost:3000
默认凭据(仅开发环境):
- username: impress
- password: impress
4. 前端开发模式
做前端开发时,在 Docker 之外运行通常更方便:
make frontend-development-install
make run-frontend-development5. 仅后端
启动除前端容器之外的所有服务:
make run-backend6. 测试与 Lint
make frontend-test
make frontend-lint后端测试可以在不使用 docker 的情况下运行,便于在 PyCharm 或 VSCode 中配置执行。脱离 docker 测试时,需要覆盖一些在 docker 内外取值不同的 URL 与端口变量:env.d/development/common 包含全部变量,其中一部分必须被 env.d/development/common.test 中的值覆盖。
7. 演示内容
创建一个基础演示站点:
make demo8. 查看全部 Make 目标
make help9. Django admin
创建超级用户:
make superuserAdmin UI 地址:http://localhost:8071/admin
常见问题
- **权限错误**:可能需要 sudo,或把用户加入 docker 组。
**拉取新代码后行为异常**:建议重新执行
make bootstrap FLUSH_ARGS='--no-input'。
- **默认密码不能用**:impress / impress 仅限开发环境使用。
- **导出 PDF 等高级功能不可用**:可能是以 PUBLISH_AS_MIT=true 构建,去除了依赖 GPL 包的 XL 功能。
- **AI 功能未启用**:AI 功能是可选的,需要配置 API key 与 URL,可自建也可使用自有服务商。
