MergeCal
Self-hosted · Google Calendar → CalDAV

All your calendars.One clean feed.

MergeCal combines every calendar you choose into a single read-only CalDAV collection, plus a private .ics URL. Subscribe once and every client stays in sync.

Read-only by designSyncs every 15 minutesYour server, your data

CalDAV connection

Read-only · live

Connected

Server URL

https://cal.example.com/caldav/

Username

you@example.com

Password

••••••••

Calendars in the merged feed

1 collection
Work84 events
Personal31 events
Family18 events
US Holidayspaused
Next sync in 12 minutes.ics ready
Works withApple CalendariPhone & iPadThunderbirdDAVx5Any CalDAV client

How it works

From a pile of calendars to one subscription.

Connect your Google account once. MergeCal keeps a local copy of the calendars you enable and serves them over standards you already use.

01

Connect Google

Sign in with Google and grant read-only Calendar access. No passwords are stored, only OAuth tokens.

02

Choose calendars

Enable the calendars you want. MergeCal syncs them incrementally, expands recurring events, and removes duplicates.

03

Subscribe anywhere

Add the CalDAV account or paste the private .ics URL into any calendar app. Changes arrive automatically.

Why MergeCal

Built to be boring in the best way.

No write access, no proprietary sync protocol, no surprises. Just a small read-only bridge between Google and the calendar clients you already trust.

OAuth tokens and CalDAV app passwords are encrypted at rest with a key derived from AUTH_SECRET. CalDAV is available only with the generated app password.

Merged + separate

One combined collection, plus a native CalDAV collection per source calendar with its Google color.

Incremental sync

Google sync tokens keep traffic low. Recurring events are expanded so every client sees plain VEVENTs.

Read-only

PUT, DELETE, and writes are rejected. Your Google calendars can never be modified by a client.

Deduplicated

The same event invited across several calendars appears once in the merged feed, preferring the owner’s copy.

Private feeds

Signed .ics URLs can be rotated at any time. Disable a calendar and it disappears from the merged feed.

Self-hosted

One Docker container, one SQLite file. Your calendar data never touches a third-party service beyond Google.

Ready in a minute

One calendar to subscribe to. Finally.

Connect Google, pick the calendars, copy the CalDAV details. MergeCal handles the rest in the background.

Get started