A work calendar, a university timetable, a personal one, maybe a booking tool. Clients should see when you are busy, family where you are, and nobody should see more than that. Calendar apps share a whole calendar or nothing. calman reads the calendar links you already have and publishes one subscription link per audience.
calman
One private link for all your calendars, with a different level of detail for each audience.
Clients see when you're busy. Family sees where you are.
ProductsWeb appRust, Cloudflare Workers, SolidStartFree and Pro, closed source
The problem
How it works
Add any calendar you can subscribe to as an ICS or webcal link: Google, Outlook, iCloud, a timetable, a system with no app integrations. calman only reads those links. No OAuth, no write access, and source links are encrypted at rest.
Each feed picks its sources and, per source, one of four levels of detail:
| Level | The feed shows |
|---|---|
| full | titles, times, locations and descriptions as they are |
| relabel | times with the source's label instead of each title |
| busy | blocks of busy time, nothing else |
| hidden | nothing from this source |
Attendees, organizers and alarms are always stripped. Subscribers add the feed's link to Google, Apple, Outlook or any other calendar app. Replacing a link stops updates for everyone who had the old one.
Under it is a portable Rust engine: lenient .ics parsing with per-event error isolation, IANA and Windows time zone names, recurrence expansion, busy-block merging and deterministic output. It runs as two Cloudflare Workers, one for the app and one that refreshes sources and serves feeds.
Plans
Free has 3 sources and 2 feeds, refreshed every 2 hours, with full, relabel and hidden. Pro is $5 a month or $48 a year: 30 sources, unlimited feeds, busy-only blocks, per-feed overrides, and refresh every 15 minutes plus a manual refresh. Google itself re-reads subscribed calendars only every 12 to 24 hours.
Status
Live at calman.wykw.it. The source is not public.