Cal.com
★ 48.9kA self-hosted alternative to Calendly
GNU Affero General Public License v3.0Open Source — No Paywall5 Containers — 5 containers — moderate hosting footprintDocker · Compose · SourceNeeds Postgres0 documented maintainers
About
Cal.diy is a community-maintained, MIT-licensed scheduling platform intended for people who want to run their own instance. It is presented as the open-source community edition of Cal.com, with...
Community Ratings
No ratings yetNew this week
Read recap →Weekly Recap — Oct 2, 2026 – Oct 9, 2026Oct 9, 2026
Features
- scheduling platform
- self-hosting
- local Postgres setup
- seeded test users
- admin user
- database migration
- email viewing during development
- logger level configuration
Details
- Last Updated
- Oct 10, 2026
- Created
- Mar 22, 2021
- Install Methods
- dockerdocker-composesource
- Requirements
- Node.js >=18.xPostgreSQL >=13.xYarnDockerDocker ComposeMailhog
- Authentication
- local
- API
- REST
- Runtime / Stack
- Nodejs
- Privacy & Independence
- No Cloud Required
- User Model
- Multi-User
- Deployment
Deployment: Docker Compose ✓5 Containers — moderate hosting footprintRuns as 5 containers
Run Cal.com with Docker Compose
Compose file from the Cal.com project repository.
5 services · database: postgres · infra: postgres, redis
no resource limits declared
needs persistent storage (2 volumes)
docker-compose.yml · @ d1ad4ea · scanned Jun 4, 2026
# Use postgres/example user/password credentials
volumes:
database-data:
redis-data:
networks:
stack:
name: stack
external: false
services:
database:
container_name: database
image: postgres
restart: always
volumes:
- database-data:/var/lib/postgresql
environment:
- POSTGRES_USER=unicorn_user
- POSTGRES_PASSWORD=magical_password
- POSTGRES_DB=calendso
networks:
- stack
redis:
container_name: redis
image: redis:latest
restart: always
volumes:
- redis-data:/data
networks:
- stack
ports:
- "${REDIS_PORT:-6379}:6379"
calcom:
image: calcom.docker.scarf.sh/calcom/cal.diy
build:
context: .
dockerfile: Dockerfile
args:
NEXT_PUBLIC_WEBAPP_URL: ${NEXT_PUBLIC_WEBAPP_URL}
NEXT_PUBLIC_API_V2_URL: ${NEXT_PUBLIC_API_V2_URL}
NEXT_PUBLIC_LICENSE_CONSENT: ${NEXT_PUBLIC_LICENSE_CONSENT}
NEXT_PUBLIC_WEBSITE_TERMS_URL: ${NEXT_PUBLIC_WEBSITE_TERMS_URL}
NEXT_PUBLIC_WEBSITE_PRIVACY_POLICY_URL: ${NEXT_PUBLIC_WEBSITE_PRIVACY_POLICY_URL}
NEXT_PUBLIC_SINGLE_ORG_SLUG: ${NEXT_PUBLIC_SINGLE_ORG_SLUG}
ORGANIZATIONS_ENABLED: ${ORGANIZATIONS_ENABLED}
CALCOM_TELEMETRY_DISABLED: ${CALCOM_TELEMETRY_DISABLED}
NEXTAUTH_SECRET: ${NEXTAUTH_SECRET}
CALENDSO_ENCRYPTION_KEY: ${CALENDSO_ENCRYPTION_KEY}
DATABASE_URL: ${DATABASE_URL}
DATABASE_DIRECT_URL: ${DATABASE_URL}
CSP_POLICY: ${CSP_POLICY}
restart: always
networks:
- stack
ports:
- 3000:3000
env_file: .env
environment:
- DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${DATABASE_HOST}/${POSTGRES_DB}
- DATABASE_DIRECT_URL=${DATABASE_URL}
depends_on:
- database
calcom-api:
container_name: calcom-api
build:
context: .
dockerfile: apps/api/v2/Dockerfile
args:
DATABASE_URL: ${DATABASE_URL}
DATABASE_DIRECT_URL: ${DATABASE_URL}
restart: always
networks:
- stack
ports:
- "${API_PORT:-80}:${API_PORT:-80}"
env_file: .env
environment:
- NODE_ENV=${NODE_ENV}
- API_PORT=${API_PORT:-80}
- API_URL=${API_URL}
- DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${DATABASE_HOST}/${POSTGRES_DB}
- DATABASE_READ_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${DATABASE_HOST}/${POSTGRES_DB}
- DATABASE_WRITE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${DATABASE_HOST}/${POSTGRES_DB}
- DATABASE_DIRECT_URL=${DATABASE_URL}
- NEXTAUTH_SECRET=${NEXTAUTH_SECRET}
- JWT_SECRET=${JWT_SECRET}
- REDIS_URL=${REDIS_URL}
- LOG_LEVEL=${LOG_LEVEL}
- API_KEY_PREFIX=${API_KEY_PREFIX}
- WEB_APP_URL=${WEB_APP_URL}
- IS_E2E=${IS_E2E:-false}
- REWRITE_API_V2_PREFIX=${REWRITE_API_V2_PREFIX:-true}
- CALCOM_LICENSE_KEY=${CALCOM_LICENSE_KEY}
- NEXT_PUBLIC_VAPID_PUBLIC_KEY=${NEXT_PUBLIC_VAPID_PUBLIC_KEY}
- VAPID_PRIVATE_KEY=${VAPID_PRIVATE_KEY}
- STRIPE_API_KEY=${STRIPE_API_KEY}
- STRIPE_WEBHOOK_SECRET=${STRIPE_WEBHOOK_SECRET}
- STRIPE_PRICE_ID_STARTER=${STRIPE_PRICE_ID_STARTER}
- STRIPE_PRICE_ID_STARTER_OVERAGE=${STRIPE_PRICE_ID_STARTER_OVERAGE}
- STRIPE_PRICE_ID_ESSENTIALS=${STRIPE_PRICE_ID_ESSENTIALS}
- STRIPE_PRICE_ID_ESSENTIALS_OVERAGE=${STRIPE_PRICE_ID_ESSENTIALS_OVERAGE}
- STRIPE_PRICE_ID_ENTERPRISE=${STRIPE_PRICE_ID_ENTERPRISE}
- STRIPE_PRICE_ID_ENTERPRISE_OVERAGE=${STRIPE_PRICE_ID_ENTERPRISE_OVERAGE}
- STRIPE_TEAM_MONTHLY_PRICE_ID=${STRIPE_TEAM_MONTHLY_PRICE_ID}
- IS_TEAM_BILLING_ENABLED=${IS_TEAM_BILLING_ENABLED:-false}
- AXIOM_DATASET=${AXIOM_DATASET}
- AXIOM_TOKEN=${AXIOM_TOKEN}
- LOGGER_BRIDGE_LOG_LEVEL=${LOGGER_BRIDGE_LOG_LEVEL}
- DOCS_URL=${DOCS_URL}
- GET_LICENSE_KEY_URL=${GET_LICENSE_KEY_URL}
depends_on:
- database
- redis
# Optional use of Prisma Studio. In production, comment out or remove the section below to prevent unwanted access to your database.
studio:
image: calcom.docker.scarf.sh/calcom/cal.diy
restart: always
networks:
- stack
ports:
- 5555:5555
env_file: .env
environment:
- DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${DATABASE_HOST}/${POSTGRES_DB}
- DATABASE_DIRECT_URL=${DATABASE_URL}
depends_on:
- database
command:
- npx
- prisma
- studio
# END SECTION: Optional use of Prisma Studio.
This file may be out of date. Check the Cal.com website for current setup steps.
Open-source health
FOSS with issues
agplv3-mixedopen-corecopyleft-clapoisoned-sourcevc-fundingmisleading-licensing
Source: isitreallyfoss.com · reviewed Jun 2025
Tags
Track your self-hosted stack
Bookmark software to try, rate tools you've used, and keep your collection in one place.
Metadata extracted from README on May 27, 2026
Related Software
Cal.diy
48.9k
Cal.diy is a community-driven, open-source scheduling platform for self-hosting personal scheduling infrastructure.
Calendar and ContactsSelf Hosting SolutionsScheduling and Bookings
5 Containers
Easy!Appointments
4.4k
Easy!Appointments is a self-hosted appointment scheduler for booking customers with businesses through a web interface.
Scheduling and BookingsCopyleft LicenseSelf Hosting Solutions+2
Manage My Damn Life
643
Manage my Damn Life (MMDL) is a self-hosted frontend for managing CalDAV tasks and calendars.
Calendar and ContactsCopyleft LicenseTask Management+2
calrs
314
calrs is a self-hostable scheduling platform for booking meetings from public links while syncing availability with CalDAV calendars.
Scheduling and BookingsCalendar and ContactsSelf Hosting Solutions
Single Container
EventSchedule
86
An open-source platform for publishing calendars, taking registrations, selling tickets, and managing event communities.
Polls and EventsScheduling and BookingsCalendar and Contacts+3
Fully FOSS
OpenEMR
5.5k
OpenEMR is a free and open source electronic health records and medical practice management application.
Health & FitnessScheduling and BookingsSelf Hosting Solutions+2
Rallly
5.3k
Rallly is a self-hostable meeting poll app for scheduling group meetings by collecting participants' availability.
Scheduling and BookingsPolls and EventsCopyleft License+2
Youtarr
1.7k
A self-hosted YouTube downloader that auto-downloads videos from subscribed channels and playlists, then organizes and syncs them with media servers like Plex, Jellyfin, and Emby.
Media ManagementMedia ServersAutomation Tools+2
2 Containers
openGym
9.3k
A self-hosted gym and body-weight tracker for planning workouts, logging sets and body weight, and syncing across devices with passkey login.
Health & FitnessSelf Hosting SolutionsAuthentication Services+1
3 Containers
Shelf
3.0k
Shelf is an open-source platform for tracking physical assets, bookings, custody, locations, and inventory across teams and organizations.
Inventory ManagementMaps and GPSCopyleft License+4
2 Containers
eLabFTW
1.4k
eLabFTW is a browser-based electronic lab notebook and research team manager with built-in database and API support.
CMS PlatformsCopyleft LicenseSelf Hosting Solutions+4
Cronicle
5.9k
A multi-server task scheduler and runner with a web-based UI for scheduled, repeating, and on-demand jobs.
Automation ToolsTask RunnersScheduling and Bookings+2
