The problem
A work calendar, a personal calendar, a client account, and a shared family calendar all know a different slice of the day. Each one can look open while the person behind it is already booked somewhere else. Native sharing helps inside one provider, but it rarely produces one trustworthy schedule across every account.
Calopod keeps the calendars separate and gives you one view of the schedule.
The product language
Calopod starts with Connections, the calendar accounts or local providers already in use. A user selects the calendars that should contribute, then creates Arms: publish relationships from those sources into a writable target. Every Arm has a Rule that says exactly what it may expose.
A Busy Arm publishes only timing and a generic Busy title. A Full details Arm can carry the event fields needed for a trusted destination. The designated Main calendar uses that same machinery to provide one complete view, while Availability derives merged Busy and Free intervals directly from the selected sources.
What works today
The current technical preview is a signed, notarized command-line release for Apple Silicon Macs. It uses calendars from accounts already configured in macOS, guides setup (a basic Main and Busy pair, or custom routes between calendars you already use), previews changes before writing, and can run the same sync engine automatically in the signed-in user's session.
It has an inbox that gathers unanswered invitations, Maybe replies, changes since you responded, and conflicts. For Google and Microsoft invitations it can send an explicit Yes, No, or Maybe, and it never sends a reply on its own.
It also reports unified Availability, keeps a private SQLite operational ledger, exposes generic health diagnostics, and supports local backup and recovery without exporting calendar details or credentials.
Safety before convenience
Calopod never edits source events, apart from a reply you choose to send to an invitation. Managed copies carry signed ownership markers, and updates or removals require proof that Calopod created the target. Mirrors are excluded from source ingestion, unsafe cycles are rejected, and a shared process lock prevents manual and automatic sync from writing at the same time.
The Busy Rule is a hard disclosure boundary. Source titles, notes, locations, attendees, organizers, meeting links, and account identifiers are removed before the target payload exists.
Built with
Swift 6, EventKit for the default local provider, GRDB and SQLite for durable operational state, Keychain for credentials and ownership keys, and launchd for the per-user background service. Google Calendar and Microsoft Graph provider adapters share the same core, while production registrations remain later distribution work.
The first release stays deliberately terminal-first. That makes the core behavior, failure modes, and privacy boundaries observable before a native Mac interface is layered on top.