Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/TheRebelOfBabylon/tandem
Nostr relay, written in Go
https://github.com/TheRebelOfBabylon/tandem
Last synced: 4 days ago
JSON representation
Nostr relay, written in Go
- Host: GitHub
- URL: https://github.com/TheRebelOfBabylon/tandem
- Owner: TheRebelOfBabylon
- License: mit
- Created: 2022-11-08T18:23:59.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2024-12-05T02:23:42.000Z (9 days ago)
- Last Synced: 2024-12-05T03:22:44.679Z (9 days ago)
- Language: Go
- Size: 188 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-nostr - tandem - WIP: community focused relay written in Go (Relays / Implementations)
README
# tandem
Nostr relay, written in Go.# NIP Compliance
- [x] NIP-01
- [x] 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
- [x] NIP-50: Search Capability*
- [ ] NIP-56: Reporting
- [ ] NIP-64: Chess (Portable Game Notation)
- [x] 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
- [edgedb](https://www.edgedb.com/)## Installation
Define a configuration file:
```toml
[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:@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:
```shell
$ tandem -config
```# Tests
with edgedb
```shell
$ STORAGE_URI= go test -v -tags=storage,edgedb ./...
```with memorydb
```shell
$ STORAGE_URI="memory://" go test -v -tags=storage,memory ./...
```without storage
```shell
$ go test -v ./...
```