calcom/cal.com
Cal.diy
Cal.diy is the community-driven, MIT-licensed scheduling platform — a fork of Cal.com with all enterprise/commercial code removed. It is a self-hosted Next.js application backed by PostgreSQL, designed for individuals and self-hosters who want full control over their scheduling infrastructure without proprietary "Open Core" constraints.
The project lives at github.com/calcom/cal.com (the calcom/cal.com repository hosts the Cal.diy codebase per the current README.md). It powers user signups, event-type configuration, calendar federation, slot computation, bookings, video calls, embeds, and over 100 integrations with calendars, conferencing tools, payment providers, CRMs, and analytics services.
What this codebase does
- Schedules meetings — public booking pages, group bookings, round-robin assignment, recurring events, managed event types, and seat-based events. The
EventTypePrisma model inpackages/prisma/schema.prismais the single source of truth for what an organizer offers. - Federates calendars — pulls free/busy from Google, Microsoft 365 / Exchange, Apple, Lark, Feishu, CalDAV, and ICS feeds, and writes back confirmed events to chosen destination calendars.
- Hosts video calls — first-party Daily.co video (
packages/app-store/dailyvideo) plus Zoom, Google Meet, Office 365 Video, Webex, Jitsi, and ~25 other conferencing apps. - Exposes APIs — a Next.js + tRPC layer for the web app, plus a separate NestJS service in
apps/api/v2that powers the REST API documented atapps/api/docs/. - Provides embeds and SDK atoms — JavaScript snippet, React component, and Web Components in
packages/embeds/*, plus high-level "atom" React components for the Cal.com Platform SDK inpackages/platform/atoms. - Ships an App Store — over 100 third-party integrations live in
packages/app-store/*, each wired in viapackages/app-store-cli.
Tech stack at a glance
- Language: TypeScript (strict). 3,800+
.tsfiles and 1,100+.tsxfiles, organized as a Yarn 4 + Turborepo monorepo. - Framework: Next.js 13+ App Router for
apps/web. NestJS forapps/api/v2. MintLify forapps/docs. - Database: PostgreSQL via Prisma ORM. The schema (
packages/prisma/schema.prisma) defines 100 models and 46 enums. - API layer: tRPC for type-safe internal calls (
packages/trpc/server/routers), plus REST/OpenAPI forapps/api/v2. - Auth: NextAuth.js with email/password, magic links, Google, GitHub, SAML (removed in Cal.diy), and a custom Prisma adapter (
packages/features/auth/lib/next-auth-custom-adapter.ts). - UI: Tailwind CSS, shared components in
packages/ui, internal feature components scattered throughpackages/features/*. - Testing: Vitest for unit tests, Playwright for E2E, Jest for
apps/api/v2. - Tooling: Biome for formatting and linting, Turbo for task orchestration, Husky + lint-staged for git hooks, Sentry for error tracking, Trigger.dev for background jobs.
Quick links
- Architecture — system diagram and how the pieces fit together
- Getting started — prerequisites, install, build, test
- Glossary — project-specific vocabulary
- Apps —
web,api/v2,docs - Packages — workspaces under
packages/ - Features — cross-cutting capabilities
- Primitives — domain models that appear across systems
- How to contribute
Audience for this wiki
This wiki is written for engineers landing in the codebase for the first time — what each subsystem does, where it lives, and where to start when you need to change it. It is not a user-facing manual. For end-user docs, see the MintLify content under apps/docs/content/.
Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.