An open API service indexing awesome lists of open source software.

https://github.com/codytseng/nostr-relay-tray

a nostr relay for desktop
https://github.com/codytseng/nostr-relay-tray

electron nostr relay sqlite3

Last synced: about 1 month ago
JSON representation

a nostr relay for desktop

Awesome Lists containing this project

README

        




nostr-relay-tray


nostr-relay-tray




A nostr relay for desktop, available on macOS, Windows, and Linux.

powered by nostr-relay



## Features

- **Fully Featured** – A complete Nostr relay with all essential functionalities.
- **Zero-Config Start** – Instantly launch your own relay.
- **Granular Control** – Precisely manage which events to accept or reject.
- **Instant Public Access** – Open your relay to the world with a single click.
- **Full-Text Search** – Quickly find events with powerful search capabilities.
- **Cross-Platform** – Available on macOS, Windows, and Linux.

## Download

Download the latest release from the [Releases page](https://github.com/CodyTseng/nostr-relay-tray/releases).

> **Note:** Since the app is unsigned, you may need to manually allow it to run in your system settings.

### Running on Apple Silicon

If you encounter the error: "nostr-relay-tray is damaged and can't be opened. You should move it to the Bin.", run the following command in your terminal:

```bash
sudo xattr -rd com.apple.quarantine /Applications/nostr-relay-tray.app
```

Then, try launching the app again.

## Build from source

You can also compile the app from source.

> Note: Node.js >= 20 is required.

```bash
# Clone this repository
git clone https://github.com/CodyTseng/nostr-relay-tray.git

# Go into the repository
cd nostr-relay-tray

# Install dependencies
npm install

# Build the app
npm run build:mac
# or npm run build:win
# or npm run build:linux
```

The executable file will be in the `dist` folder.

## Flexible event filtering

nostr-relay-tray provides a flexible event filtering mechanism, allowing you to precisely control which events are accepted. The mechanism works in two layers:

```
Incoming Event


┌───────────────┐
│ Block Rules │ ❌ If blocked, event is rejected.
└───────────────┘
│ (not blocked)

┌─────────────────────────────────────────┐
│ Only one needs to pass │
├─────────────┬─────────────┬─────────────┤
│ Allow Rules │ WoT │ PoW │
└─────────────┴─────────────┴─────────────┘


Event Accepted ✅
```

### Layer 1

- If block rules exist, any matching event is immediately rejected.
- If no block rules are defined, this layer is skipped, and the event proceeds to the second layer.

### Layer 2

This layer consists of three independent filters:

- Allow Rules: Accepts events that meet predefined conditions.
- Web of Trust (WoT): Accepts events from trusted users or relays.
- Proof of Work (PoW): Accepts events that meet a certain computational difficulty.

Filtering logic:

- If at least one filter is enabled, the event must pass at least one.
- If all filters are disabled, the event is automatically accepted.

## Screenshot

![screenshot](./screenshots/screenshot-1.png)

![screenshot](./screenshots/screenshot-2.png)

![screenshot](./screenshots/screenshot-3.png)

![screenshot](./screenshots/screenshot-4.png)

## Donate

If you like this project, you can buy me a coffee :)

lightning: ⚡️ [email protected] ⚡️

bitcoin: bc1qx8kvutghdhejx7vuvatmvw2ghypdungu0qm7ds

## Icon Attribution

The ostrich element within the icon is sourced from [nostr_icons](https://github.com/satscoffee/nostr_icons). Special thanks to satscoffee for providing such a beautiful ostrich.

## License

MIT