Dart Nostr Development Kit (NDK)

Build Status Coverage Pub License

NDK (Nostr Development Kit) is a Dart library that enhances the Nostr development experience.
NDK supplies you with high-level usecases like lists or metadata while still allowing you to use low-level queries enhanced with inbox/outbox (gossip) by default.
Our Target is to make it easy to build constrained Nostr clients, particularly for mobile devices.

Apps using NDK

➡️ Getting Started 🔗

Changelog 🔗


Features / what does NDK do?

  • 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
  • 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
  • nip05 caching
  • nip-47 Nostr wallet connect
  • nip-42 Authentication of clients to relays
  • nip-57 Zaps
  • blossom file support

not Included

  • ready to use feeds, you have to build them on your own (🚫 not planned)
  • create && manage keypairs. You have to provide them (🚫 not planned)
  • threading, you can do this on your own if you move ndk or only the event_verifier into its own thread (🔜 planned)
  • support for request overrides (you have to close and reopen requests) (🤔 unsure)

NIPs

  • x Event Builders / WebSocket Subscriptions (NIP-01)
  • x User Profiles (edit/follow/unfollow - NIP-02)
  • x Private Messages (NIP-04)
  • x Nostr Address (NIP-05)
  • x Event Deletion (NIP-09)
  • x Relay Info (NIP-11)
  • x Reactions (NIP-25)
  • x Lists (NIP-51)
  • x Relay List Metadata (NIP-65)
  • x Wallet Connect API (NIP-47)
  • x Zaps (NIP-57)
  • x Authentication of clients to relays (NIP-42)
  • x Encrypted Payloads (Versioned) (NIP-44)
  • Bech Encoding support (NIP-19)
  • Badges (NIP-58)

Libraries

config/blossom_config
config/bootstrap_relays
config/broadcast_defaults
config/logger_defaults
config/metadata_defaults
config/nip_05_defaults
config/relay_defaults
config/request_defaults
config/rx_defaults
config/user_relay_list_defaults
data_layer/data_sources/http_request
data_layer/data_sources/websocket
data_layer/data_sources/websocket_client
data_layer/models/nip_05_model
data_layer/repositories/blossom/blossom_impl
data_layer/repositories/cache_manager/mem_cache_manager
data_layer/repositories/lnurl_http_impl
data_layer/repositories/nip_05_http_impl
data_layer/repositories/nostr_transport/websocket_client_nostr_transport
data_layer/repositories/nostr_transport/websocket_client_nostr_transport_factory
data_layer/repositories/nostr_transport/websocket_nostr_transport
data_layer/repositories/nostr_transport/websocket_nostr_transport_factory
data_layer/repositories/signers/bip340_event_signer
data_layer/repositories/verifiers/bip340_event_verifier
domain_layer/entities/account
domain_layer/entities/blossom_blobs
domain_layer/entities/broadcast_response
domain_layer/entities/broadcast_state
domain_layer/entities/connection_source
domain_layer/entities/contact_list
domain_layer/entities/event_filter
domain_layer/entities/filter
domain_layer/entities/global_state
domain_layer/entities/jit_engine_relay_connectivity_data
domain_layer/entities/metadata
domain_layer/entities/ndk_file
domain_layer/entities/ndk_request
domain_layer/entities/nip_01_event
domain_layer/entities/nip_05
domain_layer/entities/nip_51_list
domain_layer/entities/nip_65
domain_layer/entities/pubkey_mapping
domain_layer/entities/read_write
domain_layer/entities/read_write_marker
domain_layer/entities/relay
domain_layer/entities/relay_connectivity
domain_layer/entities/relay_info
domain_layer/entities/relay_set
domain_layer/entities/relay_stats
domain_layer/entities/request_response
domain_layer/entities/request_state
domain_layer/entities/tuple
domain_layer/entities/user_relay_list
domain_layer/repositories/blossom
domain_layer/repositories/cache_manager
domain_layer/repositories/event_signer
domain_layer/repositories/event_verifier
domain_layer/repositories/lnurl_transport
domain_layer/repositories/nip_05_repo
domain_layer/repositories/nostr_transport
domain_layer/usecases/accounts/accounts
domain_layer/usecases/broadcast/broadcast
domain_layer/usecases/cache_read/cache_read
domain_layer/usecases/cache_write/cache_write
domain_layer/usecases/engines/network_engine
domain_layer/usecases/files/blossom
domain_layer/usecases/files/blossom_user_server_list
domain_layer/usecases/files/files
domain_layer/usecases/follows/follows
domain_layer/usecases/jit_engine/jit_engine
domain_layer/usecases/jit_engine/relay_jit_broadcast_strategies/broadcast_strategies_shared
domain_layer/usecases/jit_engine/relay_jit_broadcast_strategies/relay_jit_broadcast_all
domain_layer/usecases/jit_engine/relay_jit_broadcast_strategies/relay_jit_broadcast_other_read
domain_layer/usecases/jit_engine/relay_jit_broadcast_strategies/relay_jit_broadcast_own
domain_layer/usecases/jit_engine/relay_jit_broadcast_strategies/relay_jit_broadcast_specific
domain_layer/usecases/jit_engine/relay_jit_request_strategies/relay_jit_blast_all_strategy
domain_layer/usecases/jit_engine/relay_jit_request_strategies/relay_jit_pubkey_strategy
domain_layer/usecases/jit_engine/relay_jit_request_strategies/relay_jit_strategies_shared
domain_layer/usecases/lists/lists
domain_layer/usecases/lnurl/lnurl
domain_layer/usecases/lnurl/lnurl_response
domain_layer/usecases/metadatas/metadatas
domain_layer/usecases/nip05/verify_nip_05
domain_layer/usecases/nip42/auth_event
domain_layer/usecases/nwc/consts/bitcoin_network
domain_layer/usecases/nwc/consts/budget_renewal_period
domain_layer/usecases/nwc/consts/error_code
domain_layer/usecases/nwc/consts/nwc_kind
domain_layer/usecases/nwc/consts/nwc_method
domain_layer/usecases/nwc/consts/transaction_type
domain_layer/usecases/nwc/nostr_wallet_connect_uri
domain_layer/usecases/nwc/nwc
domain_layer/usecases/nwc/nwc_connection
domain_layer/usecases/nwc/nwc_notification
domain_layer/usecases/nwc/requests/get_balance
domain_layer/usecases/nwc/requests/get_budget
domain_layer/usecases/nwc/requests/get_info
domain_layer/usecases/nwc/requests/list_transactions
domain_layer/usecases/nwc/requests/lookup_invoice
domain_layer/usecases/nwc/requests/make_invoice
domain_layer/usecases/nwc/requests/multi_pay_invoice
domain_layer/usecases/nwc/requests/multi_pay_keysend
domain_layer/usecases/nwc/requests/nwc_request
domain_layer/usecases/nwc/requests/pay_invoice
domain_layer/usecases/nwc/requests/pay_keysend
domain_layer/usecases/nwc/responses/get_balance_response
domain_layer/usecases/nwc/responses/get_budget_response
domain_layer/usecases/nwc/responses/get_info_response
domain_layer/usecases/nwc/responses/list_transactions_response
domain_layer/usecases/nwc/responses/lookup_invoice_response
domain_layer/usecases/nwc/responses/make_invoice_response
domain_layer/usecases/nwc/responses/nwc_response
domain_layer/usecases/nwc/responses/pay_invoice_response
domain_layer/usecases/nwc/tlv_record
domain_layer/usecases/relay_manager
domain_layer/usecases/relay_sets/relay_sets
domain_layer/usecases/relay_sets_engine
domain_layer/usecases/requests/concurrency_check
domain_layer/usecases/requests/requests
domain_layer/usecases/requests/verify_event_stream
domain_layer/usecases/stream_response_cleaner/stream_response_cleaner
domain_layer/usecases/user_relay_lists/user_relay_lists
domain_layer/usecases/zaps/invoice_response
domain_layer/usecases/zaps/zap_receipt
domain_layer/usecases/zaps/zap_request
domain_layer/usecases/zaps/zaps
entities
exports all entities, intended usage: import 'package:ndk/entities.dart' as ndk_entities;
ndk
presentation_layer/init
presentation_layer/ndk
presentation_layer/ndk_config
shared/event_filters/tag_count_event_filter
shared/helpers/list_casting
shared/helpers/relay_helper
shared/logger/logger
shared/nips/nip01/bip340
shared/nips/nip01/client_msg
shared/nips/nip01/helpers
shared/nips/nip01/key_pair
shared/nips/nip04/nip04
shared/nips/nip09/deletion
shared/nips/nip19/hrps
shared/nips/nip19/nip19
shared/nips/nip25/reactions
shared/nips/nip44/nip44
shared/nips/nip44/utils
shared/nips/nip50/nip50
shared/nips/nip65/relay_ranking