Skip to content

Kind 31923: Time-Based Calendar Event

Overview

Time-based calendar events represent occurrences that span between a specific start time and end time. Unlike date-based calendar events, these include precise timestamps and can optionally specify time zones, making them suitable for meetings, appointments, and other time-specific events.

Specification

PropertyValue
Kind Number31923
Event RangeAddressable
Defined inNIP-52

Content Format

The content field should contain a detailed description of the calendar event. While required, it can be an empty string.

Tags

Tag NameDescriptionFormatRequired
dUniversally unique identifier (UUID)["d", "<UUID>"]Yes
titleTitle of the calendar event["title", "<title of calendar event>"]Yes
startInclusive start Unix timestamp in seconds["start", "<Unix timestamp in seconds>"]Yes
endExclusive end Unix timestamp in seconds["end", "<Unix timestamp in seconds>"]No
start_tzidTime zone of the start timestamp["start_tzid", "<IANA Time Zone Database identifier>"]No
end_tzidTime zone of the end timestamp["end_tzid", "<IANA Time Zone Database identifier>"]No
summaryBrief description of the calendar event["summary", "<brief description>"]No
imageURL of an image to use for the event["image", "<string with image URI>"]No
locationLocation of the calendar event["location", "<location>"]No
gGeohash to associate with a searchable physical location["g", "<geohash>"]No
pPubkey of a participant with optional relay URL and role["p", "<32-bytes hex of a pubkey>", "<optional recommended relay URL>", "<role>"]No
lLabel to categorize calendar event["l", "<label>", "<optional namespace>"]No
tHashtag to categorize calendar event["t", "<tag>"]No
rReferences / links to web pages, documents, etc.["r", "<url>"]No

Client Behavior

Clients should:

  • Generate a UUID when creating a new time-based calendar event
  • Ensure that the start timestamp is before the end timestamp (if provided)
  • If no end timestamp is provided, treat the calendar event as instantaneous
  • If start_tzid is provided but end_tzid is omitted, use the same time zone for both timestamps
  • Allow users to discover and interact with calendar events
  • Support display and interpretation of different time zones

Relay Behavior

Relays should handle these events like any other addressable event, allowing them to be retrieved, updated, and deleted according to standard Nostr protocols.

Use Cases

  • Meetings and appointments
  • Video calls and webinars
  • Concerts and time-specific performances
  • Any event where the specific time is important
  • Events that span across time zones

Example

json
{
  "id": "e2c7909bd47fce336edee4ccd32894181d08ea2c4f33b27f1f80149ae28f4d56",
  "pubkey": "79dff8f82963424e1852174ed276b6715c4ccc9777e489234a363a43d7c73143",
  "created_at": 1671217411,
  "kind": 31923,
  "tags": [
    ["d", "7d9fea92-da3b-4f2d-9db8-e27c1b8cd391"],
    ["title", "Nostr Protocol Discussion"],
    ["summary", "Weekly sync about Nostr protocol development"],
    ["start", "1683036000"],
    ["end", "1683039600"],
    ["start_tzid", "America/Los_Angeles"],
    ["end_tzid", "America/Los_Angeles"],
    ["location", "https://meet.example.com/nostr-weekly"],
    ["p", "32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245", "", "organizer"],
    ["p", "fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52", "", "participant"],
    ["l", "videocall", "com.example.meetings"],
    ["t", "nostr"],
    ["t", "development"],
    ["r", "https://pad.example.com/nostr-meeting-notes"]
  ],
  "content": "We'll discuss the latest NIPs, review implementation progress, and plan for upcoming features. Please prepare updates on your assigned tasks.",
  "sig": "a52e89981edca7c360c9c172bc35af902c6e2f5aabc13c3e70c2c98ef7ae83d15bd84ff58c796ab07eecc72c6c54c4174e7fb8be7c7719b5794824fe2db5637d"
}

References

Notes

  • The name tag is deprecated in favor of the title tag but may still be used if title is not available.
  • Clients are responsible for translating between time zones and handling daylight savings adjustments.
  • NIP-52 intentionally does not support recurring calendar events due to their complexity.