Calendar Events
NIP-52 brings calendar functionality to Nostr — date-based events, time-based events, calendars (collections of events), and RSVP responses. It is what powers conference schedules, meetup pages, and shared calendars on clients like Amethyst and Flockstr.
NIP-52: Calendar Events
Status: Final Category: Social Features
Overview
NIP-52 defines how to publish, share, and respond to calendar events on Nostr. It is the basis for any event-listing or scheduling feature in a Nostr client — conference schedules, meetup pages, livestream announcements, and personal calendars.
Three event kinds are introduced:
- kind 31922 — date-based event (an all-day event, no time component)
- kind 31923 — time-based event (specific start and end times)
- kind 31924 — calendar (a collection of events)
- kind 31925 — calendar event RSVP
All four are parameterised replaceable events (see NIP-33), meaning each event has a stable d tag that lets the author update it later without losing references.
Why It Matters
Before NIP-52, every Nostr client that wanted to surface events had to invent its own format. Amethyst’s calendar, Flockstr’s meetup pages, and various conference companion apps were all incompatible.
NIP-52 standardises the shape so an event published from one client appears correctly in another. A meetup organiser can post once and have it show up across the ecosystem.
Event Structure
Date-based event (kind 31922)
{
"kind": 31922,
"tags": [
["d", "unique-id"],
["title", "Bitfest UK 2026"],
["start", "2026-11-21"],
["end", "2026-11-23"],
["location", "Manchester, UK"],
["t", "bitcoin"], ["t", "nostr"]
],
"content": "UK's first Nostr conference..."
}
Time-based event (kind 31923)
{
"kind": 31923,
"tags": [
["d", "monthly-london-meetup-april"],
["title", "Nostr London Meetup"],
["start", "1714155600"],
["end", "1714165200"],
["start_tzid", "Europe/London"],
["location", "Cyphermunk House"]
],
"content": "Monthly London Nostr meetup..."
}
start / end for time-based events use unix timestamps. Date-based events use ISO 8601 date strings without a time component.
RSVP (kind 31925)
{
"kind": 31925,
"tags": [
["a", "31923:<pubkey>:monthly-london-meetup-april"],
["status", "accepted"]
]
}
status can be accepted, tentative, or declined.
Practical Uses
- Conference schedules — each talk is a kind 31923 event linked to a kind 31924 calendar
- Recurring meetups — publish a fresh kind 31923 each month with the same
dtag pattern - Personal calendars — a kind 31924 calendar listing your public commitments
- Livestream announcements — a kind 31923 with a livestream URL in
content
Client Support
- Amethyst (Android) — full calendar UI for browsing and RSVPing to events; v1.06.0 added native calendar with appointment creation
- Flockstr — dedicated event/meetup client built around NIP-52
- YakiHonne — surfaces NIP-52 events alongside long-form content
Trade-offs and Open Questions
- Time zones — date-based events have no timezone; time-based events use
start_tzidbut support varies - Recurrence — there is no native repeat-rule (
RRULE) yet; recurring events typically post a new event for each occurrence - Discovery — without NIP-50 search or curated lists, events scale poorly past local communities
For UK community events that we surface on this site, see the Events directory.
Related NIPs
- NIP-01 — protocol basics
- NIP-33 — parameterised replaceable events (the foundation NIP-52 builds on)
- NIP-51 — lists (used to bookmark and share calendars)
Last updated: April 2026 Official specification: GitHub
Client Support
This NIP is supported by the following clients: