Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork10
A high-performance nostr relay, using PostgreSQL
License
CodyTseng/nostr-relay-nestjs
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
Powered bynostr-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
If you want to enable the WoT feature, you need to set the following environment variables:
WOT_TRUST_ANCHOR_PUBKEY: The public key of the trust anchor. Trust anchor is the root of the trust net.WOT_TRUST_DEPTH: The depth of the trust net. If the trust depth is 1, the trust net will include the trust anchor and the trust anchor's following users. If the trust depth is 2, the trust net will include the trust anchor, the trust anchor's following users, and the trust anchor's following users' following users. Now the maximum trust depth is 2.WOT_FETCH_FOLLOW_LIST_FROM: Comma-separated list of relay URLs to fetch follow list from (e.g., WOT_FETCH_FOLLOW_LIST_FROM=wss://nostr-relay.app,wss://relay.damus.io). This environment variable is optional. The relay will always fetch the follow list from the local database first.
You can see the API documentation at/api endpoint.Example
TOP verb accepts a subscription id and filters as specified inNIP 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 onexample.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.gitcd nostr-relay-nestjsnpm installCreate.env file based onexample.env file
DATABASE_URL=postgresql://username:password@host:port/database
Execute migration scripts
npm run migration:run
Start the server
npm run start
It is best practice to not run services as root where possible. If you want to ignore that, remove the User and Group lines from the service file. Otherwise, start with creating a locked down user to run the service as
useradd --shell /bin/false nestjsusermod -L nestjschown -R nestjs:nestjs /opt/nostr-relay-nestjschmod g+s /opt/nostr-relay-nestjs
The last two lines assume you cloned the project to /opt/nostr-relay-nestjs, update them as needed.
To create the service file, copy and paste the below to /etc/systemd/system/nostr-relay-nestjs.service
[Unit]Description=Nostr Relay Nestjs ServiceAfter=network.target[Service]User=nestjsGroup=nestjsExecStart=/usr/bin/npm run startWorkingDirectory=/opt/nostr-relay-nestjsRestart=alwaysMemoryMax=2G[Install]WantedBy=multi-user.targetRunsudo systemctl daemon-reload
Start, stop or check status withsystemctl start|stop|status nostr-relay-nestjs
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.
About
A high-performance nostr relay, using PostgreSQL
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors4
Uh oh!
There was an error while loading.Please reload this page.
