Why EventKit Isn't Enough for Google Calendar

On macOS, Google Calendar reaches EventKit through CalDAV, and event types, colors, OOO, rooms and Meet get flattened. Why that gap is the reason hora exists.

3 min read
Rich event card squeezed through a CalDAV funnel into a flat grey EventKit block, while hora carries every detail across.

EventKit doesn't talk to Google. It reads whatever macOS already has, and macOS gets Google calendars through Internet Accounts, synced over CalDAV. Any app built on EventKit sees Google Calendar through two translations: Google's model goes into CalDAV/iCalendar, and then into EKEvent. The cost is that the richest provider gets flattened to the shared baseline.

If you build a calendar app for the Mac, EventKit looks like a gift. One framework, every account the user has added to macOS, and no OAuth or sync engine for you to maintain. I looked at it seriously when I started hora. Then I looked at what actually reaches EventKit when the account is Google.

How Google gets into EventKit

EventKit doesn't talk to Google. It reads whatever macOS already has, and macOS gets Google calendars through Internet Accounts: you add your Google account in System Settings, and Calendar syncs it over CalDAV. So any app built on EventKit sees Google Calendar through two translations: Google's model goes into CalDAV/iCalendar, and then into EKEvent.

CalDAV is a good open standard. That's why it exists: one protocol for iCloud, Fastmail, Nextcloud and Google. But a common protocol is, by definition, a common denominator. Google's own documentation says its CalDAV doesn't support free-busy lookups, tasks (VTODO) or custom properties, and incoming invitations land straight in your events rather than in a scheduling inbox.

What gets lost on the way

For me, what's missing is most of what makes Google Calendar Google Calendar at work:

  • Event types. Focus time, out-of-office and working location are distinct things in Google. Through CalDAV/EventKit they show up as plain events or not at all.
  • Color labels. The per-event colors you set in Google don't come through as Google colors.
  • Out of office. In Google, OOO declines meetings for you. Through EventKit it's just a block of time.
  • Location the way Google models it, including working location.
  • Meeting rooms and resources. Apple Calendar has no Google Room Scheduler.
  • Google Meet. You can't attach a Meet call when you create an event.
  • Freshness. Apple Calendar polls Google on a timer instead of getting push updates.

None of this is a bug in EventKit. It's doing exactly what it was designed to do: give apps one uniform view of many providers. The cost is that the richest provider gets flattened to the shared baseline.

Why that mattered enough to build hora

My whole working day runs on Google Calendar: rooms, Meet links, focus blocks, OOO, color-coded time blocks. Every native Mac calendar I tried either went through EventKit and lost those details, or was a wrapped web page. So I went the other way. hora talks directly to the Google Calendar API. Google stays the source of truth, a local cache keeps the app fast, and Google's own vocabulary (event types, conference data, colors, working locations) survives the round trip.

For push, hora registers a Google events.watch channel for each calendar. A small Cloudflare Worker turns Google's ping into a silent push, and the Mac fetches what changed, with a reconciliation pass behind it.

The trade-off I accepted

hora is Google-only: no iCloud, no Exchange, no generic CalDAV. If you want every provider in one app, a CalDAV/EventKit client is the better fit. The API also means OAuth, quotas, renewing channels and recovery syncs are all my problem now.

But if Google Calendar is where your day actually lives, the common denominator isn't enough. That gap is why hora exists. It works with Google Calendar, natively on the Mac.

If Google Calendar is where your week lives, try hora Calendar free for 14 days with the Direct download, no card required.

EventKit and Google Calendar FAQ

Does EventKit support Google Calendar?

Not directly. EventKit doesn't talk to Google. It reads whatever macOS already has, and macOS gets Google calendars through Internet Accounts: you add your Google account in System Settings, and Calendar syncs it over CalDAV.

Which Google Calendar features get lost through CalDAV and EventKit?

Event types (focus time, out-of-office and working location), Google color labels, OOO declining meetings for you, location the way Google models it, meeting rooms and resources, attaching Google Meet when you create an event, and push updates. Google's own documentation also says its CalDAV doesn't support free-busy lookups, tasks (VTODO) or custom properties.

Is this a bug in EventKit?

No. EventKit is doing exactly what it was designed to do: give apps one uniform view of many providers. The cost is that the richest provider gets flattened to the shared baseline.

Does Apple Calendar get push updates from Google?

No. Apple Calendar polls Google on a timer instead of getting push updates.

How does hora connect to Google Calendar?

hora talks directly to the Google Calendar API. Google stays the source of truth, a local cache keeps the app fast, and Google's own vocabulary (event types, conference data, colors, working locations) survives the round trip. For push, hora registers a Google events.watch channel for each calendar.

Does hora work with iCloud or Exchange?

No. hora is Google-only: no iCloud, no Exchange, no generic CalDAV. If you want every provider in one app, a CalDAV/EventKit client is the better fit.

Related stories

Google Calendar API vs CalDAV: Which Should You Use?
Engineering

Google CalDAV vs Calendar API: Which Should You Use?

Does Google Calendar support CalDAV? Yes. Compare Google CalDAV with the Calendar API, including sync, OAuth, event data, and multi-provider tradeoffs.

Maciej Szamowski11 min read
Google Calendar API in Swift: The Package I Missed
Engineering

Google Calendar API in Swift: The Package I Missed

I hand-built a Google Calendar API client in Swift, then migrated hora to Google's GTLR library. See the code, tradeoffs, and rate-limit lessons.

Maciej Szamowski10 min read
Real-Time Google Calendar Sync on macOS
Engineering

Real-Time Google Calendar Sync on macOS

How hora uses Google Calendar watch channels, a Cloudflare Worker, APNs, and fallback polling to keep its native Mac calendar fresh and reliable.

Maciej Szamowski10 min read
Stay in the loop

Want to stay updated?

Subscribe for hora news and updates for Mac, iPhone and iPad.