AGPL-3.0

Read the code that touches your calendar

CalSync is open source end to end and free for everyone. Run the hosted instance for convenience, or deploy the identical code on infrastructure you control — same features either way.

Self-hosting in five steps

1. Clone and install

Node 20 or newer. No global tooling required.

git clone github.com/calsync/calsync
cd calsync
npm install

2. Set one variable

The public URL of your instance is the only thing CalSync needs from the environment. Everything else is configured in the app itself. SQLite is used unless you point DATABASE_URL at Postgres.

cp .env.example .env
# APP_URL="https://calendar.example.com"

3. Create the database

Use db:push for a real deployment and setup if you would like sample data to explore first.

npm run db:push        # empty instance
# or
npm run setup          # with a seeded demo workspace

4. Run it

Opening an empty instance starts the setup wizard: create your administrator account, confirm the instance settings, and connect Google and Microsoft with the click-by-click instructions built into the page.

npm run dev            # http://localhost:3000
# or
npm run build && npm start

5. Schedule syncs

The token is generated for you and shown under Administration → Instance, with the full command ready to copy. Any scheduler works — cron, systemd timers, Vercel Cron or a Kubernetes CronJob.

* * * * * curl -fsS \
  -H "Authorization: Bearer $TOKEN" \
  https://your-domain/api/cron/sync
Prefer containers?

One command on Coolify, Docker or any VPS

The repository ships a production image and two compose files — app plus Postgres, or a single container backed by SQLite. The container applies its own database schema on start, runs as a non-root user and exposes a health check, so there is no migration step to remember.

On Coolify, point a Docker Compose resource at the repo. It generates the domain, database password and app secret for you, then the setup wizard takes over.

# app + Postgres
docker compose up -d --build

# or a single container with SQLite
docker compose -f docker-compose.sqlite.yml up -d --build

What you are actually running

Next.js 16 & React 19

App Router, server components and server actions. TypeScript throughout, with Tailwind v4 and shadcn/ui for the interface.

Prisma & SQL

SQLite for local development, Postgres for production. The schema is one readable file, and instance configuration lives in the database rather than in environment variables.

Deploy anywhere

A standard Node server. Vercel, Fly, Railway, Docker on your own box — anything that can run Next.js and reach a database.

The licence, plainly

CalSync is free software under the GNU Affero General Public License v3. In practice:

  • Use it privately or commercially, modify it, deploy it — no fee, no permission needed.
  • If you run a modified version as a network service, publish your changes under the same licence.
  • Internal deployments with no modifications carry no publishing obligation.

Contributing

The most valuable contributions are new calendar providers, timezone and recurrence edge cases, and accessibility fixes. Open an issue before large changes so nobody duplicates work.