Powered by nostr-relay & NestJS.
A high-performance nostr relay, using PostgreSQL.
If you'd like to help me test the reliability of this relay implementation, you can add wss://nostr-relay.app to your relay list (it's free) 💜⚡️
Note: Please use the released version of this code. The latest version may contain changes to migration scripts and other elements that are not finalized.
🟢 Full implemented 🟡 Partially implemented 🔴 Not implemented
Feature | Status | Note |
---|---|---|
NIP-01: Basic protocol flow description | 🟢 | |
NIP-02: Contact List and Petnames | 🟢 | |
NIP-04: Encrypted Direct Message | 🟢 | |
NIP-09: Event Deletion | 🔴 | No real deletion in a distributed system |
NIP-11: Relay Information Document | 🟢 | |
NIP-13: Proof of Work | 🟢 | |
NIP-22: Event created_at Limits | 🟢 | |
NIP-26: Delegated Event Signing | 🟢 | |
NIP-28: Public Chat | 🟢 | |
NIP-40: Expiration Timestamp | 🟢 | |
NIP-42: Authentication of clients to relays | 🟢 | |
NIP-45: Counting results | 🔴 | |
NIP-50: Keywords filter | 🟢 |
You can see the API documentation at /api
endpoint.
TOP verb accepts a subscription id and filters as specified in NIP 01 for the verb REQ.
["TOP",<subscription_id>,<filters JSON>...]
And return the top N event IDs with the highest score (Scoring is determined by relay).
["TOP",<subscription_id>,<event id array>]
Example:
["TOP","test",{"search":"nostr bitcoin","kinds":[30023],"limit":10}]
["TOP","test",["2359f4bdfe0bd2353aa7702dc1af23279197694823b8b4916b904a9940334192","622a875c9f9a4696eb4050fa5b0bba3a9b0531ec4a27398245af7369e6d40da8","d8989c65d26511b2e3ea42b0ebfcaf0ea885cb958419df4ddb334cb72556f950","ffcb0c9e0ace0b5d3928f30395bc9832763f8b583f2b1beb696f7c199f9f94d2","287147867bd00299553fa91e110d40206eea19a9142a4283832ee67e1407e6f2","ffaea8bc3b08db32af97f1ff595e68eee8a2f7b0a4a66dc2eff330f450855f6c","cddbc6cd4a0589d4a593e99a3a94426c85c6867b47d7eb751ce419c27f079b76","f2291ac6d206e898965b9e4ba6bbe5bb10118e6a74bd9f9f13597813979a254b","a101a2a44938dbb0a611bc00bd7ed4cb44d682fea4c14618bd1148567cd6fcc3","21990a723b491b6c594438a2ecf5d5e4898212635f59e82f1c736d994a86e907"]]
Build image
./scripts/build.sh
Create .env
file based on example.env file
DATABASE_URL=postgresql://username:password@host:port/database
Run container
./scripts/run.sh
First of all, you need to have a PostgreSQL database running.
Clone the repository and install dependencies
git clone https://github.com/CodyTseng/nostr-relay-nestjs.git
cd nostr-relay-nestjs
npm install
Create .env
file based on example.env file
DATABASE_URL=postgresql://username:password@host:port/database
Execute migration scripts
npm run migration:run
Start the server
npm run start
You can view some simple relay metrics on /metrics
endpoint.
- Unit test
- RESTful API
- Metrics, Monitoring and Alerting
- Support multi nodes
- Support for Bitcoin Lightning Network payments
If you like this project, you can buy me a coffee :) ⚡️ codytseng@getalby.com ⚡️
This project is MIT licensed.