Requirements
flexcal is a fully open-source, self-hosted scheduling platform, forked from cal.com and licensed under the AGPLv3. There is no license key and no vendor account: every feature that ships works out of the box. There is also no hosted version, so running it is on you.
Teams, organizations, workflows, the Platform API v2, SAML single sign-on, paid bookings and subscription billing are not part of this codebase. Google and Microsoft (Entra ID) single sign-on are supported, alongside password and magic-link login. See the open issues for what is being worked on.
What it needs
Section titled “What it needs”flexcal is a Next.js application backed by PostgreSQL. Running it is lightweight; building it from source is the demanding part.
Software
Section titled “Software”| Component | Version | Notes |
|---|---|---|
| Node.js | >= 20 | Runtime for the web app |
| Bun | >= 1.3.14 | The only supported package manager, pinned via packageManager in package.json |
| PostgreSQL | >= 13 | Any managed or self-run instance works |
| Git | any recent | Needed to clone the repository |
Only Docker and Docker Compose are needed if you run the published image rather than building from source.
Operating system
Section titled “Operating system”Anything that runs Node.js works: Linux, macOS, Windows and BSD are all known to work. For production, Linux is the sensible choice.
Hardware
Section titled “Hardware”Serving flexcal is modest: 2 vCPUs and 2–4 GB of RAM is enough for a small instance.
Building from source is much heavier. The Next.js build wants a large Node heap:
export NODE_OPTIONS="--max-old-space-size=16384"Adjust the number to the RAM you are willing to give the build.
The Docker build uses the MAX_OLD_SPACE_SIZE build argument for the same purpose (default 6144).
Which install path?
Section titled “Which install path?”- Docker — recommended. A published multi-arch image plus a Compose file with Postgres.
- From source — build and run the app directly on a host.
- Development setup — a local environment for working on flexcal itself.