ndk 0.1.0-dev993 ndk: ^0.1.0-dev993 copied to clipboard
Nostr Development Kit - the most performant lib for all your nostr usecases
Dart Nostr Development Kit
Getting started #
Add the following to your pubspec.yaml
file:
dependencies:
ndk: any
Usage #
Ndk ndk = Ndk(NdkConfig(
eventVerifier: Bip340EventVerifier(),
cache: MemCacheManager(),
));
NdkResponse response = ndk.requests.query(filters: [
Filter(kinds: [Nip01Event.TEXT_NODE_KIND], limit: 10)
]);
await for (final event in response.stream) {
print(event);
}
Features (WIP) / what does dart_ndk do? (clear borders) #
- return nostr data based on filters (any kind).
- automatically discover the best relays to satisfy the provided request (using gossip)
- specify desired coverage on each request (e.g. x relays per pubkey)
- publish nostr events to optimal relays or explicit relays
- cache responses to save network bandwidth
- stream directly from cache and network (if needed)
- query and subscription, e.g., get data once; subscribe to data.
- plugin cache interface, bring your own db or use included ones:
inMemory, isarDb
- plug in verifier interface, bring your own event verifier, or use included ones:
bip340, rust
- plug in event signer interface, bring your own event signer, or use included ones:
bip340, amber
- contact list support, you can convert nostr_event to contact_list
- nip51 list support, you can convert nostr_event to nip51_list
not Included #
- ready to use feeds, you have to build them on your own @see examples
- file upload
- nip05 caching
- create && manage keypairs. You have to provide them
- threading, you can do this on your own if you move dart_ndk or only the event_verifier into its own thread
- easy way to get latest contact(or any) list / stream
- easy way to get metadata or publish your own
- support for request overrides (you have to close and reopen requests)
Gossip/outbox model of relay discovery and connectivity #
The simplest characterization of the gossip model is just this: reading the posts of people you follow from the relays that they wrote them to.
more details on https://mikedilger.com/gossip-model/
NIPs #
- ✅ Event Builders / WebSocket Subscriptions (NIP-01)
- ✅ User Profiles (edit/follow/unfollow - NIP-02)
- ✅ Private Messages (NIP-04)
- ✅ Nostr Address (NIP-05)
- ✅ Event Deletion (NIP-09)
- ✅ Relay Info (NIP-11)
- ✅ Reactions (NIP-25)
- ✅ Lists (NIP-51)
- ✅ Relay List Metadata (NIP-65)
- ❌ Bech Encoding support (NIP-19)
- ❌ Wallet Connect API (NIP-47)
- ❌ Zaps (private, public, anon, non-zap) (NIP-57)
- ❌ Badges (NIP-58)
common terminology #
term | explanation | simmilar to |
---|---|---|
broadcastEvent | push event to nostr network/relays | postEvent, publishEvent |
JIT | Just In Time, e.g. as it happens | - |
query | get data once and close the request | get request |
subscription | stream of events as they come in | stream of data |
bootstrapRelays | default relays to connect when nothing else is specified | seed relays, initial relays |