Nostr Outbox Model vs Legacy Relay Mode

How mixed client strategies cause network fragmentation

The Problem

Nostr clients use two fundamentally different relay strategies:

Outbox Model (NIP-65)

Looks up each user's declared relays via kind:10002 events

Users: Bob, Diana, Frank

Legacy Mode

Only uses a fixed list of relays configured by the user

Users: Alice, Carol, Eve

When some clients use outbox and others don't, network fragmentation occurs.

Scenario 1: Legacy Users on Same Big Relays

What happens:

Alice and Carol both use legacy clients configured with the same popular relays. They can see each other because their relay sets happen to overlap.

✓ Communication works (by luck of relay overlap)

Scenario 2: Outbox User Posts to Personal Relay

What happens:

Bob uses the outbox model correctly and posts only to his declared outbox relays (his personal relay). Alice's legacy client only checks the big public relays she configured.

✗ Alice cannot see Bob's posts - she doesn't know he exists

Scenario 3: Reply Discovery Failure

What happens:

Diana replies to Carol's post. Diana's outbox client correctly sends the reply to Carol's inbox relays. But Alice's legacy client doesn't know to check Carol's inbox.

✗ Alice sees Carol's post but Diana's reply is invisible to her

Scenario 4: Mention Delivery Failure

What happens:

Eve mentions Bob in a post. Eve's legacy client doesn't look up Bob's inbox relays - it just posts to Eve's configured relays. Bob's outbox client checks his inbox relays for mentions, but Eve's post isn't there.

✗ Bob never sees Eve's mention of him

Scenario 5: The Centralization Trap

What happens:

To ensure visibility with legacy clients, users are forced to blast their posts to many big relays. This defeats Nostr's decentralization goal and creates censorship chokepoints.

⚠ Works but centralizes around ~5 mega-relays - censorship vulnerability

Silent Failures: "The Dog That Doesn't Bark"

The most dangerous aspect: users have no idea they're missing content.

👻 Missing Follows

Alice follows Bob. Her legacy client adds Bob's pubkey to her follow list but doesn't know where Bob posts. She thinks she's following him, but her feed shows nothing from Bob.

💬 Phantom Conversations

Carol sees a post with "47 replies" but her client only shows 12. The other 35 replies were sent to inbox relays by outbox clients. Carol thinks the conversation is quiet.

⭐ Lost Zaps & Reactions

Frank zaps Eve's post, sending it to Eve's inbox relay. Eve's legacy client doesn't check there. She never sees the zap or the sats.

🔗 Broken Quote Posts

Alice sees a quote-post referencing a note. She clicks it but gets "Note not found" - the original was on the author's personal outbox relay her client doesn't know about.

Summary of Problems

🔇 Silent Failures

Users don't know they're missing content. No errors, just empty feeds and incomplete threads.

💬 Broken Threads

Replies sent to inbox relays are invisible to legacy clients. Conversations appear fragmented.

👤 Profile Invisibility

Following someone doesn't mean you'll see their posts if they use different relays.

🏢 Forced Centralization

Users must post to big relays to be seen, creating censorship chokepoints.

📩 Lost Mentions

Mentions and DMs fail when clients don't deliver to recipient's inbox relays.

💸 Missing Zaps

Reactions and zaps sent to inbox relays never reach users on legacy clients.

The Solution

All clients should implement NIP-65 outbox model:

  1. Publish your relay list (kind:10002 event with read/write relays)
  2. Post to YOUR outbox relays (2-4 relays you control or trust)
  3. When fetching, look up each followed user's relay list and fetch from their outboxes
  4. Send replies/mentions to the recipient's inbox relays
  5. Spread kind:10002 events widely so others can discover your relays