自托管服务
calcom/cal.diy avatar
calcom/cal.diy

Cal.diy:去掉企业功能的 Cal.com 自托管版,适合个人,别用于生产

cal.diy 打包了 Cal.com 的日程安排界面和日历集成,用于个人、非生产自托管。

48,488 个 Star15,133 个 ForkTypeScriptMIT

秒懂

它是什么?
Cal.diy 是 Cal.com 的社区分支,移除了所有企业版代码,以 MIT 协议发布。它适合个人自托管,但不适合生产环境,也不提供托管服务。
适合谁用?
Cal.diy 适合熟悉服务器管理、数据库和安全配置的个人开发者,他们想要一个完全开源、无许可证限制的日程安排工具,并且愿意自己维护。不适合需要团队协作、组织管理、SSO 或工作流的企业用户,这些功能已被移除。
能商用吗?
可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库最近一次提交在 2 天前。
用什么语言写的?
主要是 TypeScript(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。

开源项目深度解析

一个去掉了企业功能的 Cal.com 分支

Cal.diy 是 Cal.com 的开源社区版,它的定位非常明确:把 Cal.com 中所有企业版代码移除,只保留个人日程安排和日历集成的核心功能。它没有团队、组织、洞察、工作流、SSO/SAML 这些企业功能,也不需要任何许可证密钥。整个代码库以 MIT 协议发布,没有 Open Core 那种免费版和商业版的分裂。它面向的是想完全掌控自己日程基础设施的个人用户,而不是需要商业支持的公司。注意,它没有托管版本,你必须自己运行在自有基础设施上。

技术栈与架构:Next.js 加 tRPC 的典型组合

从 README 的 Built With 部分可以看出,Cal.diy 使用了 Next.js、tRPC、React、Tailwind CSS、Prisma 和 Daily.co。这意味着它的前端是 React 服务端渲染应用,API 层通过 tRPC 实现类型安全的远程过程调用,数据库访问用 Prisma ORM。Daily.co 用于视频会议集成,但这不是核心功能,只是可选集成之一。整个应用是一个单体 Next.js 项目,数据库用 PostgreSQL,版本要求 13 以上。没有看到微服务或消息队列的痕迹,所以架构相对简单,适合个人部署。

安装与配置:两条路径,一条简单一条手动

安装有两种方式。第一种是快速开发启动:运行 yarn dx,它需要 Docker 和 Docker Compose,会启动一个本地 Postgres 实例并创建几个测试用户,包括 free@example.com、pro@example.com、admin@example.com 等,密码都是明文写在 README 里的。你可以在 localhost:3000 登录。第二种是手动安装:克隆仓库,用 yarn 安装依赖,复制 .env.example 到 .env,然后用 openssl rand -base64 32 生成 NEXTAUTH_SECRET,用 openssl rand -base64 24 生成 CALENDSO_ENCRYPTION_KEY。Windows 用户需要特别注意,packages/prisma/.env 是一个符号链接,必须替换成真实文件,否则 Prisma 会报错 unexpected character / in variable name。这是一个真实的坑,文档专门提了。

密钥管理:两个必须自己生成的密钥

NEXTAUTH_SECRET 和 CALENDSO_ENCRYPTION_KEY 是两个关键的配置项。前者用于 NextAuth 的会话签名,后者用于加密日历集成相关的敏感数据。README 明确给出了生成命令,但没有任何关于如何安全存储这些密钥的说明。没有托管版本,也没有密钥管理服务。如果你丢失了 CALENDSO_ENCRYPTION_KEY,已经加密的集成凭据可能无法解密,这会导致日历连接失效。在自托管场景下,密钥备份是你自己的责任。文档没有提到轮换策略,所以请把这两个密钥当作长期凭证来对待。

日志级别:一个调试用的环境变量

开发调试时,你可以设置 NEXT_PUBLIC_LOGGER_LEVEL 来控制 tRPC 查询和变更的日志详细程度。级别从 0 到 6,对应 silly 到 fatal。设置后,只会记录该级别及更高级别的日志。例如设为 2,会记录 debug、info、warn、error、fatal。这个变量是 NEXT_PUBLIC_ 前缀,意味着它会被打包进客户端代码,所以不要在里面放任何敏感信息。文档建议在 .env 文件中用 echo 追加,比如 echo 'NEXT_PUBLIC_LOGGER_LEVEL=3' >> .env。这个功能对排查集成问题有帮助,但生产环境建议设为 5 或 6,减少日志噪音。

与 Cal.com 的差异:功能裁剪的代价

Cal.diy 移除了 Teams、Organizations、Insights、Workflows、SSO/SAML 这些企业功能。这意味着如果你需要多人协作的日程管理,或者需要统一的组织级设置,这个分支不适合。它也没有许可证验证机制,所有功能开箱即用,这是一个优势,但也意味着没有官方的商业支持。Cal.com 本身有托管服务和企业版,这是官方推荐的路径。如果你需要的是企业级日程基础设施,README 直接建议你去用 Cal.com,而不是 Cal.diy。这个分支的定位是个人和非生产环境,这个限制不是隐藏的,而是写在最前面的警告里。

维护与升级成本:跟随上游但滞后

从仓库的活动看,最近一次推送是 2026 年 3 月 1 日,发布了 v6.2.0,之前是 v6.1.16 和 v6.1.15,更新频率大约每月一次。但这只是当前观察,不能保证未来的节奏。由于是社区维护,没有商业公司的承诺,你无法预期定期的安全补丁。每次升级可能需要处理数据库迁移,因为使用了 Prisma,迁移脚本是自动的,但你需要测试。许可证是 MIT,这意味着你可以自由修改和分发,但没有任何担保。如果你在生产环境使用,你需要自己承担所有风险,包括安全漏洞和功能缺失。

替代方案:直接用 Cal.com 或考虑其他日程工具

如果你需要企业功能,直接的替代方案就是 Cal.com 本身,它有托管版本和企业版,提供团队、组织、SSO 等。另一个思路是选择其他开源日程安排工具,比如 Radicale 或 Baikal,它们更轻量,只做 CalDAV 服务器,不提供 Cal.com 那样的前端界面和集成。Cal.diy 的优势在于它保留了 Cal.com 的完整前端体验和大量日历集成(如 Google Calendar、Outlook 等),但你需要自己配置集成凭证。如果你只需要一个简单的日历共享,Radicale 可能更省事,但它没有 Cal.com 那种预约链接和自动提醒功能。选择取决于你想要多复杂的功能。

编辑结论

Cal.diy 适合熟悉服务器管理、数据库和安全配置的个人开发者,他们想要一个完全开源、无许可证限制的日程安排工具,并且愿意自己维护。不适合需要团队协作、组织管理、SSO 或工作流的企业用户,这些功能已被移除。不适合没有运维经验的人,因为你需要自己处理 PostgreSQL、环境变量和密钥管理。在部署前,请先检查你的 Node.js 版本(需 >=18.x)、PostgreSQL 版本(需 >=13.x),并确保已正确生成 NEXTAUTH_SECRET 和 CALENDSO_ENCRYPTION_KEY。如果你需要商业支持或企业级功能,直接使用 Cal.com 的托管服务或企业版,而不是这个分支。

官方来源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社区笔记

社区笔记