Cal.diy
Open-source scheduling app on exe.dev
Shelley handles the setup.
Prefer a terminal?
curl -fsSL https://exe.dev/deploy/cal-diy/prompt.txt | ssh exe.dev new --prompt=/dev/stdinRun Cal.diy on an exe.dev VM.
Cal.diy is an open-source, MIT-licensed scheduling platform from Cal.com. It works well for personal booking pages, team scheduling, and testing calendar workflows without needing a hosted Cal.com account.
What you get#
- Cal.diy from the official Docker image, with a PostgreSQL container, started with Docker Compose
- Its runtime variables and generated secrets in an
.envfile - Cal.diy at
https://my-cal-diy.exe.xyz:3000/, ready for the setup wizard
What's running, and where
https://my-cal-diy.exe.xyz:3000/
Cal.diy
Deploy with Shelley#
Click Deploy and Shelley will set up Cal.diy on a new VM, then check that it works. No config-file wrangling required.
Prefer a terminal?
curl -fsSL \
https://exe.dev/deploy/cal-diy/prompt.txt \
| ssh exe.dev new --prompt=/dev/stdinWhat Shelley is told
Set up Cal.diy on this VM by following the exe.dev recipe at https://exe.dev/deploy/cal-diy.md from top to bottom.
The recipe's example VM name is my-cal-diy. This VM's name is the output of `hostname`: use it wherever the recipe writes my-cal-diy. Skip the step that creates the VM; you are on it.
You are done when all of these are true. Check each one yourself:
- Cal.diy from the official Docker image, with a PostgreSQL container, started with Docker Compose
- Its runtime variables and generated secrets in an `.env` file
- Cal.diy at `https://my-cal-diy.exe.xyz:3000/`, ready for the setup wizard
Finish with the URLs I should open.
Also at /deploy/cal-diy/prompt.txt. The recipe it follows is /deploy/cal-diy.md.
Quick start#
Create a new Cal.diy VM from the Cal.diy starter.
How it works#
The starter installs Docker and runs the official Cal.diy Docker image with a PostgreSQL container. It writes the required runtime variables, generates secrets, and starts the stack with Docker Compose.
Cal.diy runs on port 3000. Use exe.dev's port-qualified proxy URL to open it in your browser:
https://<vm-name>.exe.xyz:3000/
This is different from many exe.dev starters that put nginx on port 8000. The Cal.diy starter keeps Next.js on port 3000 and exposes that port directly through the exe.dev proxy.
If you want Cal.diy to use the default URL with no port suffix, change the VM's default HTTP proxy port with the SSH lobby command:
ssh exe.dev share port <vm-name> 3000
After that, https://<vm-name>.exe.xyz/ will proxy to Cal.diy on port 3000. See the share port command docs for details.
Runtime variables#
The official Docker image supports runtime variables such as DATABASE_URL, NEXT_PUBLIC_WEBAPP_URL, NEXTAUTH_URL, NEXTAUTH_SECRET, and CALENDSO_ENCRYPTION_KEY. exe.dev VMs run Docker normally, so Docker Compose can pass these values through an .env file.
The Cal.diy README notes that if NEXT_PUBLIC_WEBAPP_URL differs from the value baked into the image at build time, startup may take a little longer while the container updates statically built files. That is expected.
First-time setup#
Open the app and complete the setup wizard to create your first user.
If the calendar connection step appears required and you do not want to connect a calendar yet, go directly to:
https://<vm-name>.exe.xyz:3000/event-types
Calendar integrations such as Google Calendar and Outlook require their own API credentials.
Operations#
The project lives at /home/exedev/cal.diy on the VM. Useful commands:
sudo docker compose ps
sudo docker compose logs -f caldiy
sudo docker compose restart caldiy
sudo docker compose pull
sudo docker compose up -d
Updated Oct 17, 2026 · Markdown · manifest.json · Something wrong? Tell us