Dart Nostr Development Kit (NDK)
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)
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/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/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