Replying to Avatar PABLOF7z

📢 NDK 1.0 is out!

Codename: Outbox ✅

When I set out to write NDK my main goal was implementing the gossip protocol, now known as *outbox model*. I wanted nostr applications to have decentralizing tendencies by *default*; transparent to the developer.

After a few failed attempts, it's finally here, which, paired with a bunch of non-backward compatible changes, prompts me to do a major version bump.

# What is outbox model?

In short, the outbox model allows nostr to fragment, instead of everybody coalescing around a few popular relay and using things like Blastr. Nostr simply doesn't work without the outbox model.

# Main changes:

* Outbox model support, obviously.

* `fetchEvent(s)` is now faster, (particularly with queries using exclusively `ids` filters).

* Fixed unstable relay back-off code (credit goes to nostr:npub1az9xj85cmxv8e9j9y80lvqp97crsqdu2fpu3srwthd99qfu9qsgstam8y8 for the valuable testing infrastructure)

* Defaults to blacklisting wss://brb.io #censorship (credit goes to nostr:npub1az9xj85cmxv8e9j9y80lvqp97crsqdu2fpu3srwthd99qfu9qsgstam8y8 for the widely hinted-at dead relay)

* Subscription aggregation now works when multiple filters run at the same time

* Subscriptions that should close when EOSEd are now closed when each individual relay EOSEs instead of waiting for all of them to EOSE.

* A better algorithm on when to signal a subscription's EOSE. The margin that NDK now gives to relays to EOSE is now a function of how many of the connected relays in the relay set have EOSEd (accounting for relays that are still sending events).

* There are *many* more changes that I needed to do to accommodate for this that I don't remember now.

Some of the most glaring breaking changes:

* `ndk.subscribe` now defaults to keeping the subscription alive; the default of closing subscriptions on EOSE was bothering me

* NDKUser changes the `hexpubkey` from a function to a getter, so wherever you were using `user.hexpubkey()` needs to change to `user.hexpubkey`.

# Enabling outbox model

Outbox model comes disabled by default *for now*, as soon as I test it more throughogly it will be the default.

To enable it you need to instantiate NDK with:

```

const ndk = new NDK({

explicitRelayUrls: [...],

outboxRelayUrls: ["wss://purplepag.es"],

enableOutboxModel: true,

})

```

The outbox model will largely be transparent to you and will work on the background once you enable it.

This changes everything

nostr:nevent1qqs8r0jpp6tgspz2hfsrc3hdrw29lzccwnrdp82eyt28mxanargqtqcpzdmhxue69uhkummnw3ezud3c8qhx7un8qgs04xzt6ldm9qhs0ctw0t58kf4z57umjzmjg6jywu0seadwtqqc75srqsqqqqqpjtwlvg

Reply to this note

Please Login to reply.

Discussion

No replies yet.