ActivityPub · iCal · WebFinger

The Open
Calendar
Protocol

Calendar events that travel freely across services — like Mastodon, but for events. Publish your calendar once, federate everywhere, subscribe from any client.

ActivityPub WebFinger iCal / VEVENT JSON-LD Open source
ActivityPub federation protocol
800k+ WordPress event sites to replace
iCal standard export format
1 open protocol, unlimited instances
// how it works

Federated calendars in three steps

No platform lock-in. No vendor account. Your calendar server speaks ActivityPub — the same open protocol powering Mastodon, Pixelfed, and PeerTube.

1

Publish your calendar in a standard format

Run a cal.pub instance (WordPress plugin, self-hosted server, or managed). Your events are published as ActivityPub objects and exposed as a .ics feed simultaneously. One publish, two protocols — works with every calendar app.

2

Events federate to other cal.pub instances

When you post an event, your instance sends it to follower inboxes across the network. Anyone who follows @yoga@schwitzkasten.cal.pub on any instance — or in their Mastodon client — gets the event in their feed. WebFinger discovery makes addressing seamless.

3

Anyone can subscribe, RSVP, or discover via so.cal.pub

Subscribers import your calendar into any iCal-compatible app. RSVPs flow back through ActivityPub. Public events surface automatically on so.cal.pub, the network's public discovery hub — no account required to browse.

// use cases

For every kind of calendar

From personal holiday tracking to community event hubs — cal.pub scales from a single calendar to a federated network of thousands.

👤

Personal calendar

Publish your public events — concerts, meetups, travels — as a subscribable feed. Friends and followers get updates in their own calendar apps without creating accounts.

maya.cal.pub
🏢

Team event calendar

Share sprint reviews, demos, and team socials across your organisation. Federate events to partner companies without shared tooling or vendor login.

team.company.cal.pub
🧘

Community events

Yoga studio class schedules, maker space open hours, music venue gigs — publish once, appear in local discovery feeds, let regulars subscribe via any calendar app.

schwitzkasten.cal.pub
📅

Booking pages

Federated availability pages with RSVP — no Calendly account required. Visitors see your free slots and book via a standard ActivityPub interaction.

book.me.cal.pub
// the ecosystem

Three layers, one open stack

cal.pub sits in a broader ecosystem of open infrastructure. Each layer is independent, interoperable, and fully open source.

foss.systems
catalog & hosting
calendar.solutions
discover & configure
cal.pub
federate & publish
so.cal.pub
discover events
coming soon

calendar.network — the decentralised registry

A self-registration hub where cal.pub instances announce themselves, aggregate public events, and build a federated directory of every participating calendar across the network.

calendar.network →
// for developers

Built on open standards

No proprietary API. No vendor lock-in. cal.pub speaks protocols that already exist — compose, extend, and integrate with the tooling you already use.

AP

ActivityPub

W3C recommendation powering the Fediverse. Calendar actors expose Inbox/Outbox endpoints. Events are ActivityStreams 2.0 objects — interoperable with Mastodon, Pixelfed, and any AP-compatible server.

WF

WebFinger

RFC 7033 discovery at .well-known/webfinger. Address any calendar instance with @calendar@domain — resolves across the Fediverse without a central registry.

iCal

iCalendar / VEVENT

RFC 5545 iCal export on every instance and calendar actor. Subscribe from Apple Calendar, Google Calendar, Thunderbird, or any .ics-capable client. Recurring events, RSVP PARTSTAT, timezone-aware.

LD

JSON-LD · Schema.org/Event

Every event page ships structured data using schema.org/Event vocabulary. SEO-friendly, machine-readable, and compatible with Google's rich event snippets and knowledge graph.

example · ActivityPub Event object
// GET https://schwitzkasten.cal.pub/events/yoga-monday-2026-07
{
  "@context": ["https://www.w3.org/ns/activitystreams",
             "https://schema.org"],
  "type": "Event",
  "id": "https://schwitzkasten.cal.pub/events/yoga-monday-2026-07",
  "name": "Monday Morning Yoga",
  "startTime": "2026-07-06T08:00:00+02:00",
  "endTime": "2026-07-06T09:15:00+02:00",
  "location": { "type": "Place", "name": "Schwitzkasten Studio, Munich" },
  "attributedTo": "https://schwitzkasten.cal.pub/users/yoga"
}
get started

Start federating your calendar today

The demo is live. The spec is open. The protocol is yours. No account, no vendor, no lock-in.