Skip to main content

Installation options

Cal.com offers multiple deployment options to fit your needs:

Cal.com Cloud

Managed hosting with automatic updates and enterprise SLA

Docker

Containerized deployment for any infrastructure

Vercel

One-click deploy on Vercel’s edge network

Railway

Simple deployment with automatic scaling

Manual setup

Full control over your development environment

Prerequisites

Before installing Cal.com, ensure you have:
  • Database: PostgreSQL 13 or newer
  • Node.js: Version 18.x or newer
  • Environment variables: See configuration section

Cal.com Cloud

The fastest way to get started with zero setup:
1

Sign up

Visit cal.com/signup to create your account.
2

Choose a plan

  • Free: Unlimited bookings, basic features
  • Pro: Advanced workflows, integrations, and support
  • Teams: Team scheduling and collaboration
  • Enterprise: SSO, SAML, dedicated support
View pricing →
3

Start scheduling

Your account is ready immediately - no installation required.
Cloud benefits: Automatic updates, 99.9% uptime SLA, managed database backups, and enterprise security compliance.

Docker deployment

Quick start with Docker Compose

The recommended way to self-host Cal.com:
1

Clone the repository

git clone https://github.com/calcom/cal.com.git
cd cal.com
2

Configure environment variables

cp .env.example .env
Required environment variables:
# Generate secrets
NEXTAUTH_SECRET=$(openssl rand -base64 32)
CALENDSO_ENCRYPTION_KEY=$(openssl rand -base64 24)

# Database (default for docker-compose)
DATABASE_URL="postgresql://unicorn_user:magical_password@database:5432/calendso"

# Application URL
NEXT_PUBLIC_WEBAPP_URL="http://localhost:3000"

# Web Push notifications (optional)
npx web-push generate-vapid-keys
NEXT_PUBLIC_VAPID_PUBLIC_KEY="your_public_key"
VAPID_PRIVATE_KEY="your_private_key"
Never commit real secrets to version control. Use .env (git-ignored) for actual credentials.
3

Start the services

Full stack (includes database):
docker compose up -d
Application only (with external database):
docker compose up -d calcom
Services included:
  • calcom: Main application (port 3000)
  • database: PostgreSQL database (port 5432)
  • studio: Prisma Studio for database management (port 5555)
4

Access Cal.com

  1. Visit http://localhost:3000
  2. Complete the setup wizard
  3. Create your admin account
Access Prisma Studio at http://localhost:5555 to view and edit database records directly.

Docker configuration

Customize your Docker deployment:
Specify a custom image or tag:
docker-compose.yml
services:
  calcom:
    image: calcom/cal.com:latest
    # or for ARM architecture
    image: calcom/cal.com:v5.6.19-arm
ARM images use the -arm suffix. Check Docker Hub for available tags.
Connect to an existing PostgreSQL database:
.env
DATABASE_URL="postgresql://user:password@your-db-host:5432/calcom"
DATABASE_DIRECT_URL="postgresql://user:password@your-db-host:5432/calcom"
Then start only the application:
docker compose up -d calcom
For production, consider:
  1. Remove Prisma Studio (security):
    # Comment out or remove the studio service
    # studio:
    #   ...
    
  2. Use external database with connection pooling (PgBouncer)
  3. Set proper URLs:
    NEXT_PUBLIC_WEBAPP_URL="https://cal.yourdomain.com"
    NEXTAUTH_URL="https://cal.yourdomain.com"
    
  4. Enable SSL for database connections:
    DATABASE_URL="postgresql://user:pass@host:5432/db?sslmode=require"
    
  5. Configure email (SendGrid, SMTP):
    EMAIL_FROM="[email protected]"
    EMAIL_SERVER_HOST="smtp.sendgrid.net"
    EMAIL_SERVER_PORT=587
    EMAIL_SERVER_USER="apikey"
    EMAIL_SERVER_PASSWORD="your_sendgrid_api_key"
    

Updating Docker deployment

1

Stop services

docker compose down
2

Pull latest changes

git pull
docker compose pull
3

Restart services

docker compose up -d

Vercel deployment

Vercel Pro required: The free plan doesn’t support the number of serverless functions Cal.com requires.
1

Prepare database

Set up a PostgreSQL database:
2

Deploy to Vercel

Deploy with VercelOr manually:
git clone https://github.com/calcom/cal.com.git
cd cal.com
vercel
3

Configure environment variables

Add these in Vercel project settings:
DATABASE_URL=your_postgres_connection_string
NEXT_PUBLIC_WEBAPP_URL=https://your-app.vercel.app
NEXTAUTH_URL=https://your-app.vercel.app
NEXTAUTH_SECRET=your_secret_here
CALENDSO_ENCRYPTION_KEY=your_encryption_key
CRON_API_KEY=your_cron_api_key
4

Deploy

Push to your repository or trigger deployment in Vercel dashboard.

Railway deployment

One-click deploy with automatic database provisioning: Deploy on Railway
1

Click deploy button

Railway will:
  • Fork the Cal.com repository to your GitHub
  • Create a PostgreSQL database
  • Set up environment variables
  • Deploy the application
2

Configure custom domain

In Railway settings:
  1. Add your custom domain
  2. Update NEXT_PUBLIC_WEBAPP_URL environment variable
  3. Redeploy
Read Railway’s detailed guide →

Manual setup

For local development or custom deployments:
1

Clone repository

git clone https://github.com/calcom/cal.com.git
cd cal.com
Windows users: Use Git Bash with admin privileges:
git clone -c core.symlinks=true https://github.com/calcom/cal.com.git
See symbolic link troubleshooting →
2

Install dependencies

yarn install
Node version: Use nvm use to switch to the required Node.js version (specified in .nvmrc).
3

Configure environment

cp .env.example .env
Generate secrets:
# NEXTAUTH_SECRET (32 bytes)
openssl rand -base64 32

# CALENDSO_ENCRYPTION_KEY (24 bytes)
openssl rand -base64 24
Set database URL:
DATABASE_URL="postgresql://user:password@localhost:5432/calendso"
4

Set up database

Option 1: Quick start with Docker (recommended)
yarn dx
This starts:
  • PostgreSQL database
  • Mailhog (email testing)
  • Seeds test users
Option 2: Manual database setup
# Install PostgreSQL locally
# Then run migrations
yarn workspace @calcom/prisma db-migrate
5

Start development server

yarn dev
Access at http://localhost:3000

Test users (with yarn dx)

Development environment includes pre-seeded users:
EmailPasswordRole
[email protected]freeFree user
[email protected]proPro user
[email protected]trialTrial user
[email protected]ADMINadmin2022!Admin
[email protected]onboardingIncomplete setup
View all seeded users in Prisma Studio: yarn db-studiohttp://localhost:5555

Environment variables

Required variables

Minimum configuration for Cal.com to run:
.env
# Database
DATABASE_URL="postgresql://user:password@host:5432/calendso"
DATABASE_DIRECT_URL="postgresql://user:password@host:5432/calendso"

# Application
NEXT_PUBLIC_WEBAPP_URL="http://localhost:3000"
NEXTAUTH_URL="http://localhost:3000"

# Secrets (generate with openssl)
NEXTAUTH_SECRET="your-32-byte-secret"
CALENDSO_ENCRYPTION_KEY="your-24-byte-encryption-key"

# Cron jobs
CRON_API_KEY="your-random-api-key"

Calendar integrations

  1. Create project in Google Cloud Console
  2. Enable Google Calendar API
  3. Configure OAuth consent screen
  4. Create OAuth 2.0 credentials
  5. Add redirect URIs:
    • https://your-domain.com/api/integrations/googlecalendar/callback
    • https://your-domain.com/api/auth/callback/google
  6. Download JSON credentials
.env
GOOGLE_API_CREDENTIALS='{"web":{"client_id":"...","client_secret":"..."}}'
GOOGLE_LOGIN_ENABLED=true
Detailed setup guide →
  1. Register app in Azure Portal
  2. Set redirect URI: https://your-domain.com/api/integrations/office365calendar/callback
  3. Create client secret
  4. Add API permissions:
    • Calendars.Read
    • Calendars.ReadWrite
.env
MS_GRAPH_CLIENT_ID="your-client-id"
MS_GRAPH_CLIENT_SECRET="your-client-secret"
No API keys required. Users connect individually with:
  • Server: caldav.icloud.com
  • Username: Apple ID email
  • Password: App-specific password
Generate app-specific password →

Video conferencing

  1. Create app on Zoom Marketplace
  2. Choose “General App” → “User-managed”
  3. Add OAuth redirect URL: https://your-domain.com/api/integrations/zoomvideo/callback
  4. Add scopes:
    • meeting:write:meeting
    • user:read:settings
.env
ZOOM_CLIENT_ID="your-client-id"
ZOOM_CLIENT_SECRET="your-client-secret"
  1. Visit Daily.co Partnership Form
  2. Get API key from dashboard
.env
DAILY_API_KEY="your-api-key"
DAILY_SCALE_PLAN=true  # If you have Scale plan

Email configuration

Gmail:
.env
EMAIL_SERVER_HOST="smtp.gmail.com"
EMAIL_SERVER_PORT=465
EMAIL_SERVER_USER="[email protected]"
EMAIL_SERVER_PASSWORD="your-app-password"
EMAIL_FROM="[email protected]"
Office 365:
.env
EMAIL_SERVER_HOST="smtp.office365.com"
EMAIL_SERVER_PORT=587
EMAIL_SERVER_USER="[email protected]"
EMAIL_SERVER_PASSWORD="your-password"
EMAIL_FROM="[email protected]"
Custom SMTP:
.env
EMAIL_SERVER_HOST="smtp.yourdomain.com"
EMAIL_SERVER_PORT=587
EMAIL_SERVER_USER="your-smtp-username"
EMAIL_SERVER_PASSWORD="your-smtp-password"
EMAIL_FROM="[email protected]"
For workflow emails and reminders:
  1. Create SendGrid account
  2. Verify sender email
  3. Create API key
.env
SENDGRID_API_KEY="your-api-key"
SENDGRID_EMAIL="[email protected]"
NEXT_PUBLIC_SENDGRID_SENDER_NAME="Your Company"

SMS reminders

  1. Create Twilio account
  2. Get a phone number
  3. Copy credentials from dashboard
.env
TWILIO_SID="your-account-sid"
TWILIO_TOKEN="your-auth-token"
TWILIO_MESSAGING_SID="your-messaging-service-sid"
TWILIO_PHONE_NUMBER="+1234567890"
NEXT_PUBLIC_SENDER_ID="YourCompany"  # Max 11 characters

Database setup

PostgreSQL requirements

  • Version: 13 or newer
  • Collation: UTF8
  • Extensions: None required (Prisma manages schema)

Local PostgreSQL

# Install via Homebrew
brew install postgresql@14
brew services start postgresql@14

# Create database
createdb calendso

Managed database providers

Neon

Serverless Postgres with generous free tier

Supabase

Open-source Firebase alternative with Postgres

Railway

Easy PostgreSQL with automatic backups

Vercel Postgres

Integrated with Vercel deployments

Connection pooling

For production, use connection pooling:
.env
# Pooled connection
DATABASE_URL="postgresql://user:pass@pooler:6543/calendso"

# Direct connection for migrations
DATABASE_DIRECT_URL="postgresql://user:pass@db:5432/calendso"

Running migrations

1

Development environment

yarn workspace @calcom/prisma db-migrate
2

Production environment

yarn workspace @calcom/prisma db-deploy
3

Verify migration

yarn db-studio
Opens Prisma Studio at http://localhost:5555

Troubleshooting

Error: P1001: Can't reach database serverSolutions:
  • Verify PostgreSQL is running
  • Check connection string format
  • Ensure database exists: createdb calendso
  • Test connection: psql $DATABASE_URL
  • Check firewall rules (cloud databases)
Error: [next-auth][error][CLIENT_FETCH_ERROR]Solution: Ensure NEXTAUTH_URL matches your actual URL:
# Development
NEXTAUTH_URL="http://localhost:3000"

# Production
NEXTAUTH_URL="https://cal.yourdomain.com"
Error: Cannot find module '@calcom/...'Solutions:
# Reinstall dependencies
rm -rf node_modules
yarn install

# Rebuild packages
yarn build

# Generate Prisma client
yarn workspace @calcom/prisma generate
Error: Port 3000 is already in useSolutions:
# Find process using port
lsof -ti:3000

# Kill process
kill -9 $(lsof -ti:3000)

# Or use different port
PORT=3001 yarn dev
Error: No key set vapidDetails.publicKeySolution: Generate Web Push keys:
npx web-push generate-vapid-keys
Add to .env:
NEXT_PUBLIC_VAPID_PUBLIC_KEY="your_public_key"
VAPID_PRIVATE_KEY="your_private_key"

Production checklist

Before going live:
1

Security

  • Change all default secrets
  • Use strong, unique passwords
  • Enable SSL for database connections
  • Set NODE_TLS_REJECT_UNAUTHORIZED=0 only behind trusted load balancers
  • Configure CSP: CSP_POLICY="non-strict"
2

Email

  • Configure production SMTP or SendGrid
  • Verify sender domain
  • Test email delivery
  • Set up SPF, DKIM, DMARC records
3

Database

  • Set up automated backups
  • Enable connection pooling
  • Configure read replicas (if needed)
  • Set up monitoring and alerts
4

Integrations

  • Add production OAuth redirect URIs
  • Configure video conferencing credentials
  • Set up payment processing (Stripe)
  • Test all integrations
5

Performance

  • Set up CDN for static assets
  • Configure Redis for session storage (optional)
  • Enable gzip compression
  • Set MAX_OLD_SPACE_SIZE=4096 for build
6

Monitoring

  • Set up error tracking (Sentry)
  • Configure uptime monitoring
  • Enable access logs
  • Set up performance monitoring

Next steps

Configuration guide

Advanced configuration options and environment variables

Quickstart

Get your first booking in 5 minutes

Integrations

Connect calendars, video, payments, and more

Contributing

Help improve Cal.com
Need help? Join our GitHub Discussions or contact support for enterprise assistance.

Build docs developers (and LLMs) love