Installation options
Cal.com offers multiple deployment options to fit your needs:Cal.com Cloud
Docker
Vercel
Railway
Manual setup
Prerequisites
Before installing Cal.com, ensure you have:- All installations
- Docker
- Manual setup
- 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:Sign up
Choose a plan
- Free: Unlimited bookings, basic features
- Pro: Advanced workflows, integrations, and support
- Teams: Team scheduling and collaboration
- Enterprise: SSO, SAML, dedicated support
Start scheduling
Docker deployment
Quick start with Docker Compose
The recommended way to self-host Cal.com:Clone the repository
Configure environment variables
Start the services
- calcom: Main application (port 3000)
- database: PostgreSQL database (port 5432)
- studio: Prisma Studio for database management (port 5555)
Access Cal.com
- Visit
http://localhost:3000 - Complete the setup wizard
- Create your admin account
Docker configuration
Customize your Docker deployment:Using custom images
Using custom images
-arm suffix. Check Docker Hub for available tags.External database
External database
Production deployment
Production deployment
-
Remove Prisma Studio (security):
- Use external database with connection pooling (PgBouncer)
-
Set proper URLs:
-
Enable SSL for database connections:
-
Configure email (SendGrid, SMTP):
Updating Docker deployment
Stop services
Pull latest changes
Restart services
Vercel deployment
Prepare database
Configure environment variables
Deploy
Railway deployment
One-click deploy with automatic database provisioning:Click deploy button
- Fork the Cal.com repository to your GitHub
- Create a PostgreSQL database
- Set up environment variables
- Deploy the application
Configure custom domain
- Add your custom domain
- Update
NEXT_PUBLIC_WEBAPP_URLenvironment variable - Redeploy
Manual setup
For local development or custom deployments:Clone repository
Install dependencies
nvm use to switch to the required Node.js version (specified in .nvmrc).Configure environment
Set up database
- PostgreSQL database
- Mailhog (email testing)
- Seeds test users
Start development server
http://localhost:3000Test users (with yarn dx)
Development environment includes pre-seeded users:Environment variables
Required variables
Minimum configuration for Cal.com to run:Calendar integrations
Google Calendar
Google Calendar
- Create project in Google Cloud Console
- Enable Google Calendar API
- Configure OAuth consent screen
- Create OAuth 2.0 credentials
- Add redirect URIs:
https://your-domain.com/api/integrations/googlecalendar/callbackhttps://your-domain.com/api/auth/callback/google
- Download JSON credentials
Microsoft Office 365
Microsoft Office 365
- Register app in Azure Portal
- Set redirect URI:
https://your-domain.com/api/integrations/office365calendar/callback - Create client secret
- Add API permissions:
Calendars.ReadCalendars.ReadWrite
Apple Calendar (CalDAV)
Apple Calendar (CalDAV)
- Server:
caldav.icloud.com - Username: Apple ID email
- Password: App-specific password
Video conferencing
Zoom
Zoom
- Create app on Zoom Marketplace
- Choose “General App” → “User-managed”
- Add OAuth redirect URL:
https://your-domain.com/api/integrations/zoomvideo/callback - Add scopes:
meeting:write:meetinguser:read:settings
Daily.co
Daily.co
- Visit Daily.co Partnership Form
- Get API key from dashboard
Email configuration
SMTP
SMTP
SendGrid
SendGrid
SMS reminders
Twilio
Twilio
- Create Twilio account
- Get a phone number
- Copy credentials from dashboard
Database setup
PostgreSQL requirements
- Version: 13 or newer
- Collation: UTF8
- Extensions: None required (Prisma manages schema)
Local PostgreSQL
- macOS
- Ubuntu/Debian
- Windows
- Docker
Managed database providers
Neon
Supabase
Railway
Vercel Postgres
Connection pooling
For production, use connection pooling:- PgBouncer
- Supabase
Running migrations
Development environment
Production environment
Verify migration
http://localhost:5555Troubleshooting
Database connection failed
Database connection failed
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)
NEXTAUTH_URL error
NEXTAUTH_URL error
[next-auth][error][CLIENT_FETCH_ERROR]Solution:
Ensure NEXTAUTH_URL matches your actual URL:Module not found errors
Module not found errors
Cannot find module '@calcom/...'Solutions:Port already in use
Port already in use
Port 3000 is already in useSolutions:VAPID keys error
VAPID keys error
No key set vapidDetails.publicKeySolution:
Generate Web Push keys:.env:Windows symbolic link issues
Windows symbolic link issues
EPERM: operation not permitted, symlinkSolution:-
Clone with symlink support:
-
Replace symlink with real copy:
Production checklist
Before going live:Security
- Change all default secrets
- Use strong, unique passwords
- Enable SSL for database connections
- Set
NODE_TLS_REJECT_UNAUTHORIZED=0only behind trusted load balancers - Configure CSP:
CSP_POLICY="non-strict"
- Configure production SMTP or SendGrid
- Verify sender domain
- Test email delivery
- Set up SPF, DKIM, DMARC records
Database
- Set up automated backups
- Enable connection pooling
- Configure read replicas (if needed)
- Set up monitoring and alerts
Integrations
- Add production OAuth redirect URIs
- Configure video conferencing credentials
- Set up payment processing (Stripe)
- Test all integrations
Performance
- Set up CDN for static assets
- Configure Redis for session storage (optional)
- Enable gzip compression
- Set
MAX_OLD_SPACE_SIZE=4096for build
Monitoring
- Set up error tracking (Sentry)
- Configure uptime monitoring
- Enable access logs
- Set up performance monitoring