Vendor lock-free stateless alternative to blastr with additional features:
- spam filtering (
spam.nostr.bandand azzamo.net) - events filtering
- kind
- author/mention
- PoW
- gossip
- tor/onion relays
- minimizes the risk of being rate-limited by the relay
- it checks whether event is already published on a certain relay
- relays ignore list
cargo install --locked broadcastrcargo install --locked --force --git https://github.com/codonaft/broadcastrbroadcastr --listen ws://localhost:8080 --relays https://codonaft.com/relays.json --read-relays wss://nostr.wine,wss://monitorlizard.nostr1.com,wss://relay.nostr.watch,wss://relaypag.es
💡 Usage 👁️
Usage: broadcastr --listen <listen> [--relays <relays>] [--read-relays <read-relays>] [--block-relays <block-relays>] [--max-relays <max-relays>] [--tor-proxy <tor-proxy>] [--proxy <proxy>] [--pubkeys <pubkeys>] [--no-mentions] [--event-kinds <event-kinds>] [--subscribe] [--max-events-by-author-per-min <max-events-by-author-per-min>] [--max-events-by-ip-per-min <max-events-by-ip-per-min>] [--min-pow <min-pow>] [--no-gossip-discovery] [--no-nip66-discovery] [--no-azzamo] [--no-nip11-requests] [--update-interval <update-interval>] [--max-backoff-interval <max-backoff-interval>] [--connect-timeout <connect-timeout>] [--request-timeout <request-timeout>] [--log-level <log-level>] [--max-tags <max-tags>] [--max-msg-size <max-msg-size>] [--tcp-backlog <tcp-backlog>] [--max-frame-size <max-frame-size>]
Broadcast Nostr events to other relays
Options:
--listen the listener ws URI (e.g. "ws://localhost:8080")
--relays relays or relay-list URIs (comma-separated, e.g.
"https://codonaft.com/relays.json,file:///path/to/relays-in-array.json,ws://1.2.3.4:5678")
--read-relays same, but for read-only relays; overrides entries of the
write relays
--block-relays same, but for ignored relays; put public URL to your
broadcastr here to avoid loops
--max-relays limit the connection pool
--tor-proxy connect to tor onion relays using socks5 proxy (e.g.
"127.0.0.1:9050")
--proxy make all connections using socks5 proxy
--pubkeys allow authors or mentioned authors only (comma-separated
hex/bech32/NIP-21 allow-list)
--no-mentions disallow mentions (of the allowed authors) by others
--event-kinds allow some event kinds only (comma-separated allow-list, e.g
"0,1,3,5,6,7,4550,34550")
--subscribe subscribe and automatically distribute events of the allowed
authors and event kinds
--max-events-by-author-per-min
limit events by author (default is 5)
--max-events-by-ip-per-min
limit events by IP (default is 50)
--min-pow pow difficulty limit (NIP-13)
--no-gossip-discovery
don't discover additional relays from user profiles
--no-nip66-discovery
don't discover additional relays using NIP-66
--no-azzamo don't use azzamo.net for spam filtering
--no-nip11-requests
consume less CPU but block possibly failing relays more
aggressively
--update-interval relays and spam-lists update interval (default is 15m)
--max-backoff-interval
max update backoff interval (default is 5m)
--connect-timeout connection timeout (default is 15s)
--request-timeout request timeout (default is 10s)
--log-level log level (default is info)
--max-tags max tags allowed for non kind 3 events (default is 32)
--max-msg-size event message size
--tcp-backlog max incoming connections per listener IP address
--max-frame-size ws frame size
-h, --help display usage information
- make it compatible with ordinary clients (besides
nak)- support delivery of multiple events over the same connection
- response with
varyheader
- support azzamo ban api
- use client IP (requires
X-Forwarded-FororX-Real-IPrequest header in your reverse proxy)- rate-limit
- allow-list
- which overrides pubkeys allow-list?
- disables rate-limit for tor exit nodes?
- use follower list as allow-list
- use REQ filter as allow-list?
- e.g. allow events that ping a certain npub
- limit number of
ptags for events by strangers to avoid spam
- limit number of
- e.g. allow events that ping a certain npub
- deduplicate concurrently sent events
- option to subscribe to a certain REQ filter and automatically broadcast such events
- with auto added
authorsandsince don't disconnect from relays specified in10002of the allowed npubs, keep reading from them?
- with auto added
- NIP-11
- custom relay info
- make it work behind reverse proxy
- custom http page or a redirect
- improve RAM usage
- run memory profiler
- disconnect from relays?
- that previousely didn't receive events with the same kind?
- that closed connections after we sent them event?
- option to disconnect after timeout?
- which are NIP-42-only ("auth-required"/"auth failed")
- ban relays that didn't receive the known kinds
- relays that fail due to TLS or DNS
- make sure we don't attempt to connect to faulty relays
- retry to connect with an exponential backoff?
- add metrics
- socks5/http proxy for all connections
- remove
spam.nostr.band? login to NIP-42 relays?- does it make sense transmitting someone else's events from a generated
nsec?
- does it make sense transmitting someone else's events from a generated
I'm currently investing all my time in FOSS projects.
If you found this repo useful and you want to support me, please
Your support keeps me going ❤️ (◕‿◕)
MIT/Apache-2.0