Introduzione a nostrfy
Cos’è nostrfy, cosa fa di serie e le idee alla base del motore relay Nostr tutto-in-uno scritto in Rust.
nostrfy è un server relay per il protocollo Nostr. Memorizza gli eventi inviati dai client (post, reazioni, profili…) e li distribuisce in risposta alle sottoscrizioni.
Funzionalità principali
- Semplice e stabile — scritto in Rust; un unico binario fa tutto.
- Archiviazione e ricerca rapide — database LMDB con indice di ricerca full-text (NIP-50).
- Ampio supporto NIP — 36 NIP implementati, più il file server Blossom: eliminazione, proof-of-work, delega, gruppi, ricerca e un’API di gestione.
- Facile da gestire — modalità demone, rotazione dei log, ricaricamento a caldo della configurazione (SIGHUP), statistiche in tempo reale, API REST e metriche Prometheus.
- Migrazione facile — un comando importa un strfry database: dry-run, unione delle impostazioni e ripetizioni sicure (guida alla migrazione).
Cosa ottieni di serie
Un unico binario nostrfy su un’unica porta fornisce:
- Il relay WebSocket e il documento informativo NIP-11.
- Un’API REST in sola lettura su
/api/v1/...— il suo thread di lettura dedicato garantisce che il traffico REST non blocchi mai gli abbonati WebSocket. - Il file server Blossom (hosting multimediale) su un hostname dedicato.
- L’RPC di gestione NIP-86, il controllo dello stato e Prometheus
/metrics.
Profilo delle risorse
nostrfy è stato verificato su un 0.25 vCPU / 512 MB VPS. La mappa di memoria LMDB è una prenotazione virtuale sparsa da 1 TiB — il disco fisico cresce solo con i dati reali — e la memoria del processo resta stabile: un relay con un database da 252 MB occupava 7,9 MB di RSS privato.
Un assaggio rapido
Tre comandi per installare, inizializzare e avviare:
sh
curl -fsSL https://raw.githubusercontent.com/iqbqioza/nostrfy/main/install.sh | sh
nostrfy --config nostrfy.toml init
nostrfy --config nostrfy.toml startPoi verifica che il relay sia attivo:
sh
curl http://127.0.0.1:8080/healthPoi recupera il documento NIP-11:
sh
curl -H "Accept: application/nostr+json" http://127.0.0.1:8080/