Nostr relay, written in Go.
- NIP-01
- NIP-02: Follow List
- NIP-05: Mapping Nostr keys to DNS-based Internet Identifiers
- NIP-09: Event Deletion Request
- NIP-11: Relay Information Document
- NIP-13: Proof of Work
- NIP-17: Private Direct Messages
- NIP-29: Relay-based Groups
- NIP-40: Expiration Timestamp
- NIP-42: Authentication of clients to relays
- NIP-45: Event Counts
- NIP-50: Search Capability*
- NIP-56: Reporting
- NIP-64: Chess (Portable Game Notation)
- NIP-65: Relay List Metadata**
- NIP-70: Protected Events
- NIP-86: Relay Management API
- NIP-96: HTTP File Storage Integration
* = Search is not ordered by quality or treated differently for each kind. Applies only to content field and no special syntax is used (not even * for wildcard)
** = tandem does not currently disallow any users from submitting lists
- Easy to deploy: anyone's Uncle Jim with any sliver of IT knowledge should be able to deploy a relay.
- Easy to moderate: blocking IPs, whitelisting pubkeys, setting up specific moderation rules, all should be achievable without code knowledge.
- Community driven: nostr's main usecase is as a global townsquare but it can also be used to create small communities. tandem's main goal is to serve the latter usecase.
- Define a roadmap
Define a configuration file:
[http]
host=localhost # env var: HTTP_HOST
port=5150 # env var: HTTP_PORT
[log]
level=info # env var: LOG_LEVEL, one of debug|info|error, default: info
log_file_path=/path/to/file.log # env var: LOG_FILE_PATH, optional
[storage]
uri="edgedb://edgedb:<password>@localhost:10701/main" # env var: STORAGE_URI, replace with your edgedb credentials, one of edgedb|memory
skip_tls_verify=true # env var: STORAGE_SKIP_TLS_VERIFY, default: false
Run:
$ tandem -config <path_to_toml_file>
with edgedb
$ STORAGE_URI=<your_uri> go test -v -tags=storage,edgedb ./...
with memorydb
$ STORAGE_URI="memory://" go test -v -tags=storage,memory ./...
without storage
$ go test -v ./...