Nostrautica docs

Nostrautica Protocol Registry

Status: Compact index of every custom event kind. docs/PROTOCOL-NIP.md is the normative specification: full per-kind content schemas, cryptographic constructions, ordering rules, and rationale live there; this document is a quick-reference table, generated from the typed CUSTOM_KIND_REGISTRY in packages/protocol/src/registry.ts.

Ordering (PROTOCOL-NIP.md §3.1): for any two events sharing (kind, author, d), the event with the higher created_at wins; on a tie, the event with the lexicographically lowest id wins. This rule applies everywhere, in the app and the coordinator, fetch paths and streaming subscriptions alike. Sender-mutable rumors (profile submissions, corrections, talk submissions) additionally carry an explicit rev/revision field that is the primary ordering key; the sender-chosen timestamp is only a tie-break (§3.3).

The custom kind ranges are 3160031611 (addressable) and 2160021610 (gift-wrapped rumors). All custom payloads carry v: 2; readers reject any payload or public event whose v is not exactly 2 (§2).

Addressable Events

Kind Name Author Protection and address Authority / lifecycle
31600 Event Networking Config E_id Public; d = calendar-event d Tags configure inbox, relays, Blossom, coordinator (+ install generation), limits, approval, matching, language, talks, chat, and retention. Only E_id may publish. Newest valid config is the root of trust for every other kind.
31601 Invite List E_id Public, hash-hidden; d = event d JSON invite hash list, ≤10,000 entries. Only E_id may publish. Voiding = republishing without the hash.
31602 Self-encrypted profile / reuse library Attendee account NIP-44 self-encrypted; blinded d Per-event self-copy (a = coordinate) and cross-event reuse library (a: null), same content schema.
31603 Directory Entry Coordinator, or E_id without one ECK-encrypted; ECK-blinded d One approved attendee's profile/media/transcripts/derived profile. Replaced when profile or derived output changes; NIP-09-deleted on revocation or withdrawal. Readers accept only the coordinator currently named in the newest 31600, or E_id.
31604 Roster Coordinator, or E_id without one ECK-encrypted; d = event d Approved-attendee index, current ECK version, per-device chat_keys, and the active Marmot nostr_group_id when chat is on. Latest valid roster wins; nostr_group_id is the authoritative event→group binding.
31605 Match List Coordinator NIP-44 coordinator→recipient; ECK-blinded d Directional match reasoning (+ optional icebreakers) for one recipient. Replaced after scoring or ECK rotation.
31606 Match Matrix Coordinator ECK-encrypted; d = event d Event-wide score-only matrix; published only when match_visibility: event. Deleted when visibility changes away from it.
31607 Members-only Event Post E_id ECK-encrypted; random stable d Official members-only post. Same d on edit; old ciphertext stays readable to whoever held the ECK version it was published under.
31608 Event Page E_id Public sections + optional ECK-encrypted private; d = event d Official menu and layout, plus sources: long-form feeds by other npubs the organizer folds into this event's official posts. Latest valid page wins.
31609 Event Theme E_id Public raw CSS; d = event d Organizer-controlled presentation. Not a secret-safe rendering boundary: clients must not render it on routes carrying secrets.
31610 Talk Coordinator, or E_id without one ECK-encrypted; talk/ECK-blinded d Moderated prerecorded talk, transcript, language, revision, status. Republished under a new address on ECK rotation; old address NIP-09-deleted.
31611 Coordinator Announcement Coordinator Public; d = nostrautica:coordinator Discovery name, capabilities, resolved-route privacy disclosure, relays, optional pricing. Latest announcement per coordinator wins.

Gift-Wrapped Rumors

Kind Name Seal author → recipient Ordering / notes
21600 Join Request Attendee account → E_inbox No revision field; optional invite proof (§7).
21601 Profile Submission Attendee account → E_inbox Carries rev (required): the primary ordering key over (rev, created_at, id) (§3.3).
21602 Key Grant E_id, or the coordinator currently named (current generation) in the newest 31600 → attendee ECK versions union-merge into local custody; never downgrades.
21603 Coordinator Grant (install) E_id → coordinator Carries gen (required, strictly increasing per coordinate); install authorization rules in §3.5.
21604 Admin Command E_id → coordinator Carries expires (required) and is ordered by a per-subject watermark, not arrival order (§3.4); includes the detach command.
21605 Organizer Grant E_id → co-organizer Grants full, irrevocable E_id/E_inbox/ECK custody; no scoped roles.
21606 Coordinator Status Coordinator → organizer, and optionally the affected attendee Poison/health status and/or a billing block; attendee-directed copies are scoped to that attendee's own items.
21607 Chat Device Attestation Attendee account → coordinator op:"add" requires a proof of possession signed by the chat device key (§10.2).
21608 Profile Correction Attendee account → E_inbox Carries rev (required); overrides bounded exactly like ai_profile.
21609 Talk Submission Attendee account → E_inbox Carries revision; a resubmission at the stored revision with different content is rejected (§3.3).
21610 Attendee Withdrawal Attendee account → E_inbox Attendee-initiated removal: the same effect chain as an organizer revoke, without organizer action.

Standard Events Used by the Application

The protocol additionally uses standard Nostr kinds: kind 0 metadata, 1 notes, 3 contacts, 5 deletions, 6 reposts, 13 seals, 14 NIP-17 direct-message rumors, 1059 gift wraps, 10000 mute lists, 10002 relay lists, 10050 DM relay lists, 10063 Blossom server lists, 24242 Blossom authorization, 30023 long-form posts, 30078 app data, 31923/31924/31925 NIP-52 event/calendar/RSVP records, and Marmot's 30443 key packages / 443/444/445 group messaging.

The 30078 app-data identifiers the application owns, all NIP-44 self-encrypted and user-private (§4.1):

d Contents
nostrautica:ev:<blinded> Per-event private settings: favorites, want-to-meet, met, notes (§7.3).
nostrautica:eventkeys:<blinded> Organizer custody backup: E_id/E_inbox nsecs and ECK versions.
nostrautica:keybackup Durable "account key was backed up" marker; existence alone is the signal.
nostrautica:blindseed The 32-byte seed the blinded-d construction derives from.
nostrautica:dmread Per-peer DM read positions, synced across the account's devices (§7.2). Replaceable, so writers must read-merge-write (per-peer maximum), never overwrite.

(nostrautica:-prefixed strings also appear as device-local localStorage/cache keys, theme, language, correction revisions, watch progress. Those are not relay records and are not listed here.)

The currently used custom set is exactly 31600 through 31611 and 21600 through 21610. Before a public release, re-check every custom kind against the Nostr NIPs registry.