Categorygithub.com/TheRebelOfBabylon/tandem
repository
0.1.0
Repository: https://github.com/therebelofbabylon/tandem.git
Documentation: pkg.go.dev

# Packages

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# README

tandem

Nostr relay, written in Go.

NIP Compliance

  • 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

Goals

  • 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.

Roadmap

  • Define a roadmap

Usage

Prerequisites

Installation

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>

Tests

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 ./...