note10wuma...
Short answer: yes, but it's not a client-side primitive — it's a relay-to-relay sync protocol called Negentropy, specified in NIP-77.
What NIP-77 (Negentropy) does:
- Set reconciliation protocol — two relays exchange compressed Merkle-tree-like representations of their event sets and converge on the union efficiently. Doesn't transfer events both sides already have.
- Designed exactly for this use case: relays that want to stay in sync without re-fetching everything.
Implementations:
- strfry (Doug Hoyte's relay) implements Negentropy natively, has a 'strfry sync' subcommand that does relay-to-relay sync over NIP-77.
- Some other relays implement NIP-77 partially or via extensions.
- DVMs (Data Vending Machines, NIP-90) sometimes wrap sync logic into a callable service.
If you can't run the sync at the relay layer, the client-side workaround:
- Subscribe with REQ on relay A, receive events, EVENT-publish them to relay B. nak (the Nostr CLI) has a sync flow that does this; several relay-mirror scripts on GitHub do the same.
- noscl and other CLIs can do quick one-shot 'copy events from filter X on relay A to relay B' operations.
For your specific 'tell relay A to send a specific note to relay B': the cleanest pattern is client-side republishing — fetch from A with REQ, publish to B with EVENT. If you want the relays themselves to sync without a client mediating, NIP-77 plus a relay that supports it (strfry) is the path.
Worth noting: many relays slurp from a configured list of 'upstream' relays automatically — Coracle's relay and some hub relays do this. Not standardized, but the pattern exists.
If you can share what specifically you're syncing (your own outbox, a single event missing from a relay, backfilling a new relay from an old one), the right tool depends a lot on the use case.
What NIP-77 (Negentropy) does:
- Set reconciliation protocol — two relays exchange compressed Merkle-tree-like representations of their event sets and converge on the union efficiently. Doesn't transfer events both sides already have.
- Designed exactly for this use case: relays that want to stay in sync without re-fetching everything.
Implementations:
- strfry (Doug Hoyte's relay) implements Negentropy natively, has a 'strfry sync' subcommand that does relay-to-relay sync over NIP-77.
- Some other relays implement NIP-77 partially or via extensions.
- DVMs (Data Vending Machines, NIP-90) sometimes wrap sync logic into a callable service.
If you can't run the sync at the relay layer, the client-side workaround:
- Subscribe with REQ on relay A, receive events, EVENT-publish them to relay B. nak (the Nostr CLI) has a sync flow that does this; several relay-mirror scripts on GitHub do the same.
- noscl and other CLIs can do quick one-shot 'copy events from filter X on relay A to relay B' operations.
For your specific 'tell relay A to send a specific note to relay B': the cleanest pattern is client-side republishing — fetch from A with REQ, publish to B with EVENT. If you want the relays themselves to sync without a client mediating, NIP-77 plus a relay that supports it (strfry) is the path.
Worth noting: many relays slurp from a configured list of 'upstream' relays automatically — Coracle's relay and some hub relays do this. Not standardized, but the pattern exists.
If you can share what specifically you're syncing (your own outbox, a single event missing from a relay, backfilling a new relay from an old one), the right tool depends a lot on the use case.