{"id":25891627,"url":"https://github.com/lnbits/nostrrelay","last_synced_at":"2025-03-02T20:28:52.002Z","repository":{"id":65757439,"uuid":"594072397","full_name":"lnbits/nostrrelay","owner":"lnbits","description":"One click nostr relay","archived":false,"fork":false,"pushed_at":"2024-11-08T11:43:00.000Z","size":593,"stargazers_count":35,"open_issues_count":7,"forks_count":7,"subscribers_count":9,"default_branch":"main","last_synced_at":"2024-11-08T12:32:29.520Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lnbits.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-01-27T14:36:27.000Z","updated_at":"2024-10-14T06:39:53.000Z","dependencies_parsed_at":"2024-04-12T11:29:25.827Z","dependency_job_id":"7618b351-a1ff-4c13-8ea0-6c6cbd141df2","html_url":"https://github.com/lnbits/nostrrelay","commit_stats":null,"previous_names":["lnbits/nostrrelay"],"tags_count":32,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lnbits%2Fnostrrelay","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lnbits%2Fnostrrelay/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lnbits%2Fnostrrelay/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lnbits%2Fnostrrelay/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lnbits","download_url":"https://codeload.github.com/lnbits/nostrrelay/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241567283,"owners_count":19983466,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-03-02T20:28:51.443Z","updated_at":"2025-03-02T20:28:51.989Z","avatar_url":"https://github.com/lnbits.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Nostr Relay\n\n### One click and spin up your own Nostr relay. Share with the world, or use privately.\n\n**Configure**:\n\n- Free Plan: with limitted storage (limit can be changed)\n- Paid Plan: `pay to join` and `pay for storage`\n- Storage Limit (can buy more)\n- Rate Limit\n- Filter Limit\n- Allow/Block accounts\n- Optional Auth for `Events` and `Filters`\n\n## Supported NIPs\n\n- [x] **NIP-01**: Basic protocol flow\n- [x] **NIP-02**: Contact List and Petnames\n  - `kind: 3`: delete past contact lists as soon as the relay receives a new one\n- [x] **NIP-04**: Encrypted Direct Message\n  - if `AUTH` enabled: send only to the intended target\n- [x] **NIP-09**: Event Deletion\n- [x] **NIP-11**: Relay Information Document\n  - \u003e **Note**: the endpoint is NOT on the root level of the domain. It also includes a path (eg https://lnbits.link/nostrrelay/)\n- [ ] **NIP-12**: Generic Tag Queries\n  - todo\n- [x] **NIP-15**: End of Stored Events Notice\n- [x] **NIP-16**: Event Treatment\n  - [x] Regular Events\n  - [x] Replaceable Events\n  - [x] Ephemeral Events\n- [x] **NIP-20**: Command Results\n  - todo: use correct prefixes\n- [x] **NIP-22**: Event created_at Limits\n- [ ] **NIP-26**: Delegated Event Signing\n  - not planned\n- [x] **NIP-28** Public Chat\n  - `kind: 41`: handled similar to `kind 0` metadata events\n- [ ] **NIP-33**: Parameterized Replaceable Events\n  - todo\n- [ ] **NIP-40**: Expiration Timestamp\n  - todo\n- [x] **NIP-42**: Authentication of clients to relays\n  - todo: use correct prefix\n- [ ] **NIP-50**: Search Capability\n  - todo\n\n## Create Relay\n\nCreating a new relay is straightforward. Just click `New Relay` then enter the Relay Info.\n\n\u003e **Note**: admin users can select a relay id. Regular users will be assigned a generated relay id.\n\u003e The relay can be activated/deactivated.\n\n- **New Relay Dialog**\n  - ![image](https://user-images.githubusercontent.com/2951406/219601417-9292d5b9-d96c-4ff6-a6fd-6c8b37b9872d.png)\n\n## Configure Relay\n\nFind your Relay in the list and click the expand button (`+`) to configure it.\n\n### Relay Info\n\nThis tab contains data according to `NIP-11` (Relay Information Document).\n\n\u003e **Note**: the `domain` is added automatically and shoud be corrected manually if needed. This value is used for `NIP-42` (Authentication of clients to relays)\n\n- **Relay Info Tab**\n  - ![image](https://user-images.githubusercontent.com/2951406/219601945-f3987de0-ed0c-48d5-b31e-44d8356cfa9a.png)\n\n### Payment\n\nBy default the relay is free to access, but it can be configured to ask for payments.\nIt is encourage to also activate the `Require Auth` option for paid relays.\n\n\u003e **Note**: check the info button (`I`) tooltip for a description of each field.\n\n- **Payment Config Tab**\n  - ![image](https://user-images.githubusercontent.com/2951406/219609779-1513ad00-e816-4b4f-8e1e-459e5e1c586f.png)\n\nClick on the Relay ID (or visit `https://{your_domain}/nostrrelay/${relay_id}`) for the Relay public page.\nHere the entry and storage fees can be paid.\n\n- **Relay Public Page**\n  - ![image](https://user-images.githubusercontent.com/2951406/219610594-ec2984ca-2c09-4187-91c3-96a25e8b5722.png)\n\n### Config\n\nConfigure `NIP-22` (_Event `created_at` Limits_), `NIP-42` (_Authentication of clients to relays_) and other Relay parameters.\n\nSome configurations are not standard (`NIPs`) but they help control what clients are allowed to do, thus blocking (some) attack vectors.\n\n\u003e **Note**: check the info button (`I`) tooltip for a description of each field.\n\n- **Config Tab**\n  - ![image](https://user-images.githubusercontent.com/2951406/219611794-57066899-5bc3-4439-ad98-af6fd4130ee9.png)\n\n### Accounts\n\nAllows the Relay operator to `Block` or `Allow` certain accounts.\n\nIf an account is `allowed` then it is not required to `pay to join`.\n\nWhen an account is `blocked` it does not matter if it `paid to join` or if it is `allowed`.\n\n- **Accounts Tab**\n  - ![image](https://user-images.githubusercontent.com/2951406/219615500-8ca98580-dc3d-4163-b321-ae9279d47a98.png)\n\n## Development\n\nCreate Symbolic Link:\n\n```\nln -s /Users/my-user/git-repos/nostr-relay-extension/ /Users/my-user/git-repos/lnbits/lnbits/extensions/nostrrelay\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flnbits%2Fnostrrelay","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flnbits%2Fnostrrelay","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flnbits%2Fnostrrelay/lists"}