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 — 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 — 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.