calcom/cal.com
Deployment
How Cal.diy ships from main to a running instance. The repo is designed to be self-hostable on a single Postgres dependency, but it also supports more elaborate setups with Redis, Trigger.dev, Sentry, Checkly, and a separate API v2 service.
Topology
A minimal deployment is one process running apps/web plus a Postgres database. A full Cal.com production deployment fans out into:
- The Next.js web app (multiple replicas, behind a load balancer)
- The NestJS API v2 service (separate replicas)
- The MintLify docs site
- A Redis instance (rate limiting, caches, BullMQ in API v2)
- Trigger.dev for heavy background jobs
- Sentry for error reporting
- Checkly synthetics
Container images
Dockerfile at the repo root builds the web app. apps/api/v2/Dockerfile builds the API v2 service. The docker-compose.yml at the root spins up Postgres for local dev plus optional services.
Vercel
The web app is also Vercel-friendly:
apps/web/vercel.jsondeclares the framework + build command.apps/web/vercel-webhook.controller.ts(in API v2) handles deploy promotion notifications.app.jsonat the repo root is a Heroku-style manifest also used for one-click deploys.
Deploy helpers
scripts/staging-deploy.sh— staging deployment pipelinescripts/start.sh— runtime entry scriptscripts/vercel.shdeploy/— additional deploy infra (Helm charts, Kubernetes manifests)Procfile— Heroku entrypoint.gitpod.yml— one-click Gitpod environment
Environment
.env.example at the repo root is the canonical list of required environment variables. It is broken into sections (database, auth, email, integrations, etc.). .env.appStore.example lists per-integration keys.
yarn env-check:common and yarn env-check:app-store validate .env against the example.
The i-* yarn scripts (i-dev, i-dx, i-gen-web-example-env) wrap commands with Infisical (infisical run --) for secret injection in CI.
Database migrations
yarn workspace @calcom/prisma prisma migrate deployRun before each deploy. The CI workflow .github/workflows/check-prisma-migrations.yml ensures every PR with a schema change includes a migration. auto-migrations.ts runs pending migrations on boot in some self-hosted modes.
Cron
The .github/workflows/cron-*.yml workflows are GitHub Actions schedules that hit internal HTTP endpoints. If you deploy outside GitHub, replicate them with your own scheduler (cron / Cloud Scheduler / etc.) hitting:
/api/cron/booking-reminders/api/cron/schedule-email-reminders/api/cron/schedule-sms-reminders/api/cron/schedule-whatsapp-reminders/api/cron/monthly-digest-email/api/cron/check-sms-prices/api/cron/sync-app-meta/api/cron/webhooks-triggers/api/cron/change-time-zone/api/cron/downgrade-users/api/cron/stale-issue
Each is gated by a shared secret in .env.
Trigger.dev
packages/features/trigger.config.ts declares the heavy-duty background jobs. Deploy with:
yarn deploy:trigger:staging
yarn deploy:trigger:prodSynthetic monitoring
checkly.config.ts plus __checks__/ define Checkly synthetic checks that run against the deployed staging URL. These are not part of the build pipeline; they execute on Checkly's infrastructure.
Releases
The repo uses Changesets (.changeset/, @changesets/cli). The Yarn scripts:
yarn changesets-add
yarn changesets-version
yarn changesets-release # builds @calcom/atoms with extra Node memory and publishesThe release workflow lives in .github/workflows/changesets.yml and .github/workflows/draft-release.yml. Tags follow semver (latest tag at the time of writing: v6.2.0). Changesets publishes the public packages (@calcom/embed-core, @calcom/embed-react, @calcom/embed-snippet, @calcom/atoms, @calcom/platform-types, @calcom/platform-libraries, @calcom/platform-enums, @calcom/platform-utils, @calcom/platform-constants).
Self-hosting
The repo's README.md is the authoritative self-hosting guide. The README starts with a warning that Cal.diy is intended for personal/non-production use; for commercial workloads the project recommends managed Cal.com.
Related pages
Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.