NIP-52

Calendar Events

final social features

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.

Author
tyiu, vitorpamplona
Last Updated
25 April 2026
Official Spec
View on GitHub →

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 d tag 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_tzid but 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.


  • 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:

amethyst flockstr yakihonne
View all clients →

Related NIPs

NIP-01 NIP-33 NIP-51
← Browse All NIPs