Nostr Compass #20
Bentornati su Nostr Compass, la vostra guida settimanale a Nostr.
Questa settimana: GitWorkshop trasforma git-over-Nostr in una superficie di code review più completa con un pulsante di merge PR nel browser, Stars e following dei repository, un git explorer efficiente in banda, commenti di review inline di kind 1111 e stato delle notifiche cifrato multi-dispositivo. Routstrd lancia un daemon locale che scopre i provider di modelli tramite annunci Nostr di kind 38421 e li paga con Cashu. I rilasci tagged includono ngit v2.4.2, Wisp v1.0.0, grain v0.5.2 e v0.5.3, Mostro Core v0.10.0 e Mostro Mobile v1.2.5, marmot-ts v0.5.0, CruxCoach v0.1.3, Meiso v1.3.0, NoorNote, Nostria, Nostr Calendar, nos2x-fox, applesauce, nostr-double-ratchet e altro. Le modifiche non rilasciate coprono Amethyst Nests, nostream NIP-65 e NWC, il bootstrap udp:nat basato su Nostr di FIPS, l’osservabilità di strfry, le owner attestation di Sprout e i recipe pack di Zap Cooking. I nuovi progetti tracciati includono Nostrord, Clave, Treasures, smesh, Surveil, Fundstr, Nod City, deploy-nsite-to-pages e null–nostr. Il retrospettivo di fine mese copre gli April di Nostr dal 2021 al 2026.
Storie principali
GitWorkshop rilascia merge PR nel browser, following dei repository e un git explorer efficiente in banda
GitWorkshop, il layer di collaborazione basato sul web di Dan Conway per NIP-34 git-over-Nostr, ha rilasciato questa settimana una versione importante che avvicina il workflow molto di più a ciò che gli sviluppatori si aspettano da GitHub o GitLab, mantenendo commenti, elenchi di repository e notifiche all’interno di eventi Nostr firmati.
L’aggiunta principale è un tanto atteso pulsante di merge PR nel browser per i repository che usano relay GRASP. Il rilascio aggiunge anche Stars e following dei repository costruiti su reazioni ed elenchi NIP-51, con set di repository fissati pubblicati come eventi di kind 10617 che puntano ad annunci di repo di kind 30617 tramite tag a ordinati. Le pagine profilo possono ora presentare un elenco portatile di repository.
Un git explorer efficiente in banda sostituisce il precedente shallow clone nel browser. Il nuovo explorer si appoggia al sottostante protocollo client/server git su cui GRASP è costruito, quindi può gestire repository grandi senza forzare il browser a scaricare un pack completo. La ricerca copre ora nomi utente e metadati dei repository, alimentata da NIP-50 e da un’implementazione di relay ngit-indexer che scopre e sincronizza gli annunci di repository attraverso la rete. Un workflow di creazione di repository nel browser completa il percorso di scoperta e onboarding.
Gli strumenti di review sono ricostruiti attorno a una scheda Files Changed, un visualizzatore di diff per singola patch e un set di nuove primitive sperimentali. I commenti di code review inline usano kind 1111, costruito su NIP-22: ogni commento punta a un percorso file (tag f), a uno SHA di commit (tag c) e a un intervallo di righe selezionato (tag line), così un client può rendere il commento nella posizione corretta di un diff. Un secondo livello di primitive sperimentali è autorizzato per autori e manutentori dei repo e usa etichette NIP-32: rinominare il soggetto di un Issue o PR dopo la submission, aggiungere hashtag dopo la submission, fissare una CoverNote versionata in cima a un PR o Issue per un riepilogo modificabile e marcare come risolti i sottothread di discussione inline. Gli eventi Verdict e i blocchi suggestion restano in bozza e non sono ancora stati rilasciati.
Lo stato delle notifiche fra dispositivi è anch’esso sincronizzato tramite Nostr, ma con una svolta a tutela della privacy. GitWorkshop genera una keypair dedicata alle notifiche, cifra quella nsec e la memorizza dentro un evento di kind 30078. L’nsec di notifica firma poi gli effettivi eventi di stato delle notifiche. L’indirezione impedisce che il signer principale dell’utente venga bombardato da frequenti richieste di cifratura e decifratura per ogni azione di lettura o archiviazione, e impedisce agli osservatori esterni di vedere facilmente quando un utente tocca il proprio stato di notifica. Un utente può sincronizzare lo stato di lettura e archiviazione fra dispositivi; i relay vedono solo blob cifrati.
Routstrd lancia un router locale per l’inferenza su Nostr
Routstrd è un nuovo daemon TypeScript che offre agli strumenti locali un endpoint compatibile con OpenAI e instrada ogni richiesta a un provider Routstr concorrente. Il daemon scopre i provider tramite annunci Nostr di kind 38421 definiti nella spec RIP-02 di Routstr. Assegna poi un punteggio ai provider in base a prezzo, fiducia e performance recenti secondo RIP-06 e invia ogni richiesta all’opzione attualmente migliore.
Il pagamento passa attraverso un wallet Cashu locale gestito da cocod e finanziato con Lightning. Ciò offre al client un percorso di regolamento denominato in sats mantenendo la scoperta dei provider pubblica e permissionless attraverso i relay Nostr. Se un provider fallisce durante una sessione, Routstrd può ripiegare sul nodo classificato successivamente. Il percorso di installazione è bun install -g routstrd, seguito da routstrd onboard per la configurazione di wallet e relay.
La più ampia Routstr org mantiene il daemon, il software di nodo Python (routstr-core), una UI di chat e le specifiche di protocollo. Per gli utenti, la porta locale diventa l’interfaccia stabile: gli strumenti esistenti compatibili con OpenAI puntano a Routstrd, mentre il daemon gestisce scoperta dei provider, routing e pagamento.
Rilasci tagged
ngit v2.4.2 corregge la rilevazione del server GRASP per le submission di PR
ngit ha rilasciato v2.4.2 con una correzione per la rilevazione del server GRASP del repository, mantenendo la submission di PR sul percorso corretto quando una proposta usa il kind PR. Da notare che ngit attualmente imposta come default il kind Patch per la maggior parte delle modifiche, a meno che non siano grandi; il manutentore sta lavorando per cambiare il default. v2.4.1, rilasciata all’inizio della settimana, ha corretto errori fatal durante clone e fetch quando i dati git di un PR aperto non erano disponibili sui server git specificati per il repository.
Wisp v1.0.0 esce dalla beta
Wisp, un client Android in Kotlin e Jetpack Compose focalizzato su routing dei relay, privacy e una piccola UI nativa, ha rilasciato v1.0.0 seguita da v1.0.2. La milestone 1.0.0 raccoglie il toggle di denominazione fiat Normie Mode, il feed For You, la configurazione dei gruppi basata su relay NIP-29 e la trasmissione della relay-list NIP-65 trattate in Newsletter #19. v1.0.2 aggiunge il supporto Android 15 per page-size da 16 KB, una scheda di scansione QR nel drawer sheet, un pulsante di download per i controlli video inline e correzioni di performance per le liste di notifiche.
grain v0.5.2 risolve il lockup WebSocket, v0.5.3 continua le rifiniture
grain, il relay in Go di 0ceanSlim, ha rilasciato v0.5.2 come hotfix critico per un lockup WebSocket introdotto in v0.5.0, seguito poi da v0.5.3. Il lockup faceva bloccare le connessioni in alcuni percorsi di filter e WebSocket, quindi gli operatori su v0.5.1 o v0.5.0 dovrebbero aggiornarsi. grain traccia tutte le principali categorie di eventi Nostr, espone informazioni relay NIP-11, supporta controllo di accesso whitelist/blacklist, rate limit per kind, una dashboard web e una libreria client Go aggiunta nella linea v0.5.x.
Mostro Core v0.10.0 e Mostro Mobile v1.2.5 adottano il gift wrap NIP-59 a doppia chiave
Mostro Core v0.10.0 aggiunge il nuovo modulo gift-wrap NIP-59 con identità e chiavi di trade separate. Il codice di trasporto precedente usava una singola chiave di identità sia per l’identità del trade sia per il gift wrapping. v0.10.0 separa l’identità stabile del trade dalla chiave effimera di wrapping, così ogni trade può usare una chiave di trasporto fresca preservando l’identità necessaria al protocollo di trade. L’integrazione del daemon arriva tramite Mostro PR #718, e mostro-cli PR #165 porta la stessa migrazione al client a riga di comando.
Mostro Mobile v1.2.5 esce insieme al lavoro sul protocollo. PR #581 permette ai takers di filtrare le offerte in base all’età dell’account del maker, dando agli utenti un modo per evitare account maker appena creati nell’order book. PR #580 corregge le etichette di ruolo nei dettagli degli ordini cancellati, e PR #576 sistema i pulsanti di cancellazione cooperativa.
marmot-ts v0.5.0 rilascia i KeyPackage indirizzabili
marmot-ts ha rilasciato @internet-privacy/marmot-ts@0.5.0, la prima release con breaking-change pianificata per il client Marmot TypeScript. PR #68 aggiunge il supporto ai KeyPackage indirizzabili: KeyPackageManager può ora gestire sia i legacy eventi KeyPackage di kind 443 sia i nuovi di kind 30443. La release rimuove KeyPackageStore e le classi di storage dello stato di gruppo, sostituendole con store generici key-value passati a KeyPackageManager e MarmotGroup. Sposta inoltre la gestione di invite e gruppi su MarmotClient.invites e MarmotClient.groups, quindi chi incorpora direttamente ha bisogno di modifiche a costruttori e storage prima di aggiornare.
CruxCoach v0.1.3 rilascia il backup cifrato dei dati di arrampicata con Nostr e Blossom
CruxCoach è una nuova app Android open-source per scalatori di Kilter Board. La Kilter Board è una parete di allenamento interattiva le cui prese si illuminano via Bluetooth per mostrare le vie. L’app è stata lanciata il 14 aprile e ha raggiunto v0.1.3 il 26 aprile.
v0.1.3 aggiunge il backup cloud cifrato opzionale. L’account CruxCoach di un utente è una keypair Nostr, e la chiave privata funge anche da input per la chiave locale di cifratura del backup. L’app cifra i dati di arrampicata sul dispositivo e replica il ciphertext sui server di storage Blossom (blossom.primal.net e nostr.download). Le azioni di eliminazione remota chiamano il percorso di cleanup Blossom. Oltre al backup, CruxCoach usa il remote signing NIP-46 per il supporto Amber, i DM privati NIP-17 per il contatto in-app con lo sviluppatore, le relay-list NIP-65 per la scoperta dei relay e la libreria Quartz di Vitor Pamplona per la parte Nostr. Gli utenti possono installarla tramite Zapstore o APK Codeberg diretti.
Meiso v1.3.0 aggiunge sotto-attività, allegati Blossom e tagging NIP-89
Meiso è un task manager Flutter minimalista per Android che memorizza le attività come dati applicativi cifrati NIP-44 di kind 30078 sui relay Nostr. v1.3.0, rilasciata il 6 aprile, aggiunge sotto-attività con relazioni genitore/figlio, task link per blocks/blocked-by/related-to/duplicate-of, allegati immagine tramite Blossom ed endpoint di upload file HTTP NIP-96, un tag client di applicazione raccomandata NIP-89 sugli eventi pubblicati e uno strumento di sincronizzazione da riga di comando in Go. v1.3.0 corregge anche il comportamento del relay al cold-start e il riuso del client Amber.
NoorNote, Nostria, Nostr Calendar, nos2x-fox e rilasci di librerie
NoorNote ha pubblicato v0.8.7, v0.8.8 e v0.8.9. Queste release correggono la gestione del click di immagini e video nei repost citati, aggiungono il supporto lightbox per le immagini di articoli long-form e correggono la schermata di avvio desktop vuota. Nostria ha rilasciato v3.1.29, v3.1.30 e v3.1.31, aggiungendo la compressione delle immagini nell’editor di articoli, un toggle USD del wallet, controlli per le carte promozionali, il supporto PDF e rifiniture del layout mobile.
Nostr Calendar v1.4.1 disaccoppia la pubblicazione degli eventi del calendario dalla gestione della lista dei calendari e corregge il tracciamento degli inviti. nos2x-fox v1.19.0 aggiunge tempi di autorizzazione personalizzati per le grant di firma browser NIP-07 su Firefox. nostr-double-ratchet v0.0.97 rilascia nuovi binari. nostr-wot-sdk 0.9.0 monta NostrSessionProvider per impostazione predefinita, e nostr-tools PR #535 aggiunge il supporto al parsing multi-relay per le stringhe wallet-connect NIP-47.
A fine settimana, Amber v6.1.0-pre1 ha rilasciato una pre-release con un migliore layout di connessione di nuove app, correzioni al dialog del signer, gestione migliorata dei permessi di notifica e refactoring della selezione dell’account. nostr-vpn v0.3.14 ha rilasciato una build fresca con artefatti macOS Apple Silicon, Linux e Windows. Bitcredit Core v0.5.7-hotfix-1 e v0.5.8 hanno rilasciato correzioni consecutive per un problema di validazione dei blocchi orfani. Surveil v0.1.6 ha portato rifiniture UI mobile e una pagina About rivisitata; il progetto stesso è presentato più sotto.
applesauce 6.0.0 rimuove le vecchie event factory e aggiunge il parsing degli URI Blossom
applesauce, il toolkit Nostr TypeScript di hzrd149, ha rilasciato un treno di release 6.0.0 attraverso il monorepo. applesauce-core@6.0.0 rimuove la vecchia classe EventFactory e i vecchi helper buildEvent, modifyEvent e createEvent, spingendo i chiamanti verso le nuove classi factory in applesauce-core/factories e applesauce-common. Aggiunge anche la gestione di indirizzi IP e localhost al parsing dei link, espressioni regolari per URI Blossom BUD-10 e nuovi helper observable come timeoutWithIgnore, combineLatestBy, combineLatestByIndex e combineLatestByKey.
I rilasci a livello di pacchetto completano i pezzi specifici di Nostr. applesauce-content@6.0.0 aggiunge nodi URI Blossom BUD-10 per testo e Markdown, dando ai renderer un modo nativo di analizzare i riferimenti Blossom nel contenuto. applesauce-actions@6.0.0 aggiunge classi factory di base per le liste NIP-51 che coprono relay, utenti ed elementi, rendendo la costruzione di liste meno ad hoc. applesauce-wallet-connect@6.0.0 espone WalletConnect.connectURI, così le app possono accedere direttamente a un URI wallet-connect NIP-47 esistente.
Modifiche non rilasciate
Amethyst avanza le stanze audio Nests con i test di interop MoQ
Amethyst ha mergiato diverse PR focalizzate su Nests questa settimana, costruendo sullo stack di stanze audio Media over QUIC della scorsa settimana. PR #2622 aggiunge un harness di interop cross-client che esercita il client MoQ Amethyst contro l’implementazione web di riferimento. L’obiettivo è cogliere la divergenza a livello wire fra Android e browser prima che colpisca gli utenti. PR #2625 migliora il focus del parlante in picture-in-picture e lo stato della connessione, mentre PR #2620 chiarisce avatar, stato di mute e stato di parlante nella griglia dei partecipanti. A fine settimana, PR #2634 corregge il padding IME e gli window insets nella vista Nest a schermo intero e PR #2635 aggiunge il filtro di freschezza basato su presenza al feed Nests. Separatamente, PR #2627 rimuove l’implementazione C custom di secp256k1 di Amethyst e migra a libschnorr256k1.
nostream aggiunge il supporto alle relay list NIP-65 e ai pagamenti NWC
nostream ha mergiato tre PR notevoli dopo lo sprint da 53 PR della scorsa settimana. Il supporto ai metadati della relay list NIP-65 arriva in PR #585, così il relay può indicizzare e servire eventi di relay list di kind 10002. Un processore di pagamenti Nostr Wallet Connect segue in PR #539, aggiungendo un percorso pay-to-relay. La pulizia delle connessioni migliora in PR #438, che chiude un bug di connessioni morte in cui i socket con sottoscrizioni attive non venivano raccolti, causando la deriva dei conteggi delle sottoscrizioni sulle istanze long-running.
FIPS aggiunge il bootstrap udp:nat basato su Nostr
FIPS, il Free Internetworking Peering System coperto in precedenza in Newsletter #6 e Newsletter #10, ha mergiato PR #53 con il bootstrap udp:nat basato su Nostr. Il cambiamento consente ai nodi di pubblicare annunci Nostr, scambiare signaling offer/answer cifrato, scoprire indirizzi pubblici tramite STUN, eseguire hole punching UDP e consegnare il socket bucato al normale stack di trasporto FIPS. L’implementazione lega le identità del payload di signal all’effettivo sender Nostr, interroga i relay DM e advert configurati per il lookup della inbox e ripristina gli handoff di traversal adottati falliti così che i trasporti UDP orfani non restino vivi. Questo è il lavoro di annuncio Nostr e traversal NAT da tracciare nel repo canonico, jmcorgan/fips.
strfry aggiunge osservabilità per connessione
strfry ha mergiato PR #214, aggiungendo osservabilità per connessione e metriche a livello di connessione esportabili tramite Prometheus. PR #204 normalizza le etichette Prometheus, e PR #215 aggiunge una sezione Community Integrations alla documentazione che copre progetti di identità Namecoin costruiti sopra strfry.
Sprout aggiunge Owner Attestation e supporto multi-workspace
Sprout, il client Nostr di Block, ha mergiato PR #406 che implementa NIP-OA (Owner Attestation). La funzionalità dà a un agente autonomo una prova crittografica che una specifica pubkey umana ha autorizzato le sue azioni. PR #409 aggiunge il supporto multi-workspace all’app desktop, PR #411 aggiunge l’autocompletamento #channel al compose mobile, e PR #410 chiude una race window che poteva scartare messaggi di canale attivi. PR #413 introduce NIP-RS per la sincronizzazione dello stato di lettura cross-device, e le successive PR #420 e PR #422 collegano quello stato di lettura ai badge di non letti su mobile.
Zap Cooking aggiunge recipe pack, delete request e login via bunker
Zap Cooking ha mergiato una settimana produttiva di lavoro sulla pubblicazione di ricette. Le richieste di eliminazione NIP-09 per i Recipe Pack propri dell’utente arrivano in PR #367. L’affidabilità della pubblicazione migliora tramite PR #366, che forza ogni nuova ricetta sul relay garden e aggiunge una coda di retry per il recipe set condiviso. La pubblicazione one-click di pack redatti dall’autore arriva in PR #365, e PR #331 aggiunge il supporto al login via bunker NIP-46.
Whitenoise-rs cifra il proprio database locale
whitenoise-rs ha mergiato PR #758, aggiungendo la cifratura SQLCipher per il database Whitenoise su disco. Questo chiude un gap di sicurezza at-rest di vecchia data per lo stack del daemon Marmot. PR #775 espone le capability richieste del gruppo, PR #772 migra le operazioni sui media di gruppo a MediaOps di proprietà della sessione, e PR #773 estrae un holder SharedServices come parte del refactor delle session-ops. Sul lato mobile, whitenoise PR #577 abilita l’auto-riavvio al boot per il servizio foreground Android, correggendo il caso in cui il daemon non tornava dopo un riavvio del dispositivo.
Progetti tracciati e scoperti di recente
Nostrord: un client NIP-29 costruito con Kotlin Multiplatform e WASM
Nostrord è un nuovo client di group-chat NIP-29 che punta al caso d’uso di sostituto di Discord. I gruppi vivono su relay Nostr con membership, ruoli, moderazione e controllo di accesso applicati dal relay, quindi lo stato di gruppo è ospitato dal relay NIP-29 selezionato. Lo sviluppatore del client non controlla un database applicativo separato per quei gruppi. La web app gira su web.nostrord.com ed è costruita con Kotlin Multiplatform che compila in WebAssembly, con build native Android, iOS e desktop in sviluppo. Nostrord è un beneficiario di grant OpenSats e interopera con gli stessi relay NIP-29 usati da Flotilla, Chachi e 0xChat.
Clave porta il remote signing NIP-46 su iOS tramite APNs
Clave è un remote signer iOS in beta che firma eventi Nostr quando l’app non è aperta. La chiave privata resta nella Keychain dell’iPhone. Quando un client invia una richiesta di remote signing NIP-46, un proxy lato server consegna una Apple Push Notification, svegliando una Notification Service Extension per un massimo di 30 secondi. Quell’extension decifra la richiesta con la cifratura NIP-44, firma con la chiave della Keychain e pubblica la risposta. La registrazione del token del dispositivo usa l’HTTP Auth NIP-98 per impedire il dirottamento del token. Clave supporta il pairing bunker:// e nostrconnect://, livelli di fiducia per-client, override per-kind ed è stato testato con Nostur e noStrudel.
Treasures: geocaching decentralizzato su Nostr
Treasures è una piattaforma di geocaching in cui cache e ritrovamenti sono eventi Nostr firmati. I creatori di cache pubblicano eventi indirizzabili di kind 37516 con coordinate GPS. I finder registrano la scoperta scansionando un QR code attaccato alla cache fisica; il codice codifica la pubkey del creatore, il tag d della cache e una chiave privata di verifica usata come prova della visita fisica. Gli zap NIP-57 possono fluire dai finder ai creatori di cache, e l’app live è su treasures.to.
smesh v0.5.1: relay Nostr self-hosted, client e signer in uno stack unico
smesh è uno stack Nostr self-hosted scritto in Moxie, un linguaggio custom derivato da Go e TinyGo da mleku. Lo stack rilascia un binario relay nativo con supporto HTTP, WebSocket, AUTH, ricerca e Blossom; sm3sh, un web client compilato in moduli ES; e un’estensione browser signer con firma browser NIP-07 più supporto alla cifratura NIP-04 e NIP-44. Il lavoro recente include messaggistica di gruppo MLS (RFC 9420) in v0.5.0, riconciliazione di set negentropy per la sync dei relay e un engine di grafo Web of Trust. Il codice vive sulla forge self-hosted di mleku a git.smesh.lol, costruita con il suo strumento git-web. Il repo correlato gitea-nostr-auth è un bridge OAuth2/OIDC per Gitea: gli utenti si autenticano con un signer browser NIP-07, il bridge scopre i relay tramite NIP-65 e Gitea riceve claim di identità OIDC standard.
Surveil: un deck builder di Magic: The Gathering su Nostr
Surveil è un client Nostr per giocatori di Magic: The Gathering che consente agli utenti di cercare carte, costruire mazzi, scansionare carte cartacee su Android con OCR ML Kit on-device e condividere mazzi attraverso la rete. I mazzi sono pubblicati come eventi indirizzabili di kind 37381, e la spec dell’evento mazzo è documentata nel NIP.md del progetto. Il livello sociale è costruito da primitive Nostr standard: commenti threaded NIP-22 (kind 1111) associati a ogni mazzo, reazioni NIP-25 (kind 7), dati profilo NIP-78 (kind 30078) per le pagine dei giocatori, follow feed di kind 3 e fork che portano un tag a che riporta al mazzo originale. v0.1.6 è stato rilasciato questa settimana con rifiniture UI mobile, miglioramenti al life counter, una pagina About rivisitata e una relay pill sul banner hero del mazzo. La web app gira ovunque HTML statico sia servito, la build Android è distribuita tramite Zapstore, e gli eventi di kind 37381 sono anche indicizzati nativamente da Ditto come mazzi Magic. Il repo è su GitLab a chad.curtis/surveil.
Aggiunte minori: Fundstr, Nod City, deploy-nsite-to-pages e null–nostr
Fundstr è una piattaforma di finanziamento per creator su Nostr che usa Cashu ecash per pledge una tantum e ricorrenti, con definizioni di tier del creator e DM Nostr. Nod City è un sito di recensioni di servizi Bitcoin in cui le recensioni sono eventi Nostr firmati e i recensori possono ricevere zap; non è stato trovato un repo sorgente pubblico. deploy-nsite-to-pages è una GitHub Action che replica un nsite su GitHub Pages usando nsyte download, supportando nsite root di kind 15128 e named di kind 35128. null–nostr, scoperto anch’esso nei dati NIP-34 di questa settimana, è il client trattato nella recente ondata OpenSats come Nurunuru; supporta messaggistica di gruppo MLS, Amber, ricerca NIP-50, post protetti NIP-70, badge ProofMode e distribuzione Zapstore.
FIPS non è un progetto nuovo per Compass. È stato trattato in Newsletter #6 e Newsletter #10. Il database ora punta al repo canonico corretto, jmcorgan/fips, e la scoperta NIP-34 di questa settimana ha fatto emergere anche mirror git-over-Nostr correlati come fips e awesome-fips.
Lavoro di protocollo
Aggiornamenti NIP
Proposte e discussioni recenti nel repository NIPs:
Mergiate questa settimana:
NIP-34 git repositories: remove unused refs tag extension (PR #2325): Rimuove un’estensione di tag
refsda NIP-34 che era definita ma non usata. La pulizia riduce l’ambiguità implementativa per gli strumenti git-over-Nostr.NIP-34 git repositories: remove incorrect NIP-09 claim (PR #2326): Rimuove una dichiarazione errata secondo cui gli eventi di eliminazione NIP-09 possono resettare lo stato del repository. L’eliminazione NIP-09 è una richiesta di eliminazione evento lato client, non una macchina a stati del repository. La correzione impedisce agli implementatori NIP-34 di trattare gli hint di eliminazione come reset autoritativi del repo.
Lavoro aperto e guidato dalle implementazioni:
GitWorkshop kind
1111commenti di review inline: Il kind di commento di code review inline è documentato nelNIP.mddi GitWorkshop ed è ora in uso attivo, ma non è ancora stato proposto come NIP formale. Gli eventi Verdict (kind7321) e i blocchisuggestionrestano in bozza e non sono ancora stati rilasciati. Il feedback implementativo da GitWorkshop e ngit determinerà se le forme diventeranno un NIP git-review autonomo o resteranno una convenzione applicativa stratificata su NIP-34.Nostr mail core e Nostrmon: Due nuove bozze di NIP custom hanno circolato questa settimana. Nostr mail core propone il kind
1301per contenuti email RFC 2822, wrappati con NIP-59 per la consegna privata e ponte verso l’email legacy tramite pubkey di bridge risolte via NIP-05. Nostrmon delinea kind di eventi indirizzabili per regioni, mappe, creature, NPC, salvataggi giocatore e oggetti. Entrambe restano bozze custom, non NIP mergiati.NIP-67: EOSE Completeness Hint (PR #2317): La proposta continua a iterare sull’aggiunta di un marcatore positivo di completezza a
EOSE, permettendo ai relay di distinguere “eventi memorizzati consegnati integralmente” dai casi legacyEOSEin cui il relay non fa alcuna dichiarazione di completezza.
Sei April di Nostr
April dà una sezione trasversale pulita del percorso di sviluppo di Nostr: il documento di protocollo nel 2021, i primi lavori sui client nel 2022, l’ondata applicativa post-Damus nel 2023, la messaggistica privata e il lavoro git-over-Nostr nel 2024, Blossom e la pulizia della relay list nel 2025 e le grant focalizzate sull’adozione dei client nel 2026.
Aprile 2021: il documento di protocollo prima del repo NIPs
Fiatjaf ha pubblicato l’articolo originale su Nostr, “Notes and Other Stuff Transmitted by Relays”, il 20 novembre 2020. Quel primo testo conteneva già la forma centrale che ancora definisce il protocollo: gli utenti firmano eventi con chiavi, li pubblicano ai relay e leggono dai relay che scelgono. Il commit log di nostr-protocol/nostr mostra zero commit tra il 1° e il 30 aprile. L’attività si trova ai due lati: i commit di marzo 2021 hanno aggiunto i primi link “nostwitter” e un filtro kind, mentre quelli di maggio 2021 hanno riproposto NIP-02 e aggiunto la NIP authorship.
Nell’aprile 2021 non c’era un mercato client pubblico, nessuna rete di relay visibile, nessun repo NIPs. Il protocollo viveva ancora come un piccolo documento e pochi esperimenti. Nostr non era ancora diventato un social network o una piattaforma di sviluppo. Era ancora un modello relay/chiave/evento in attesa della sua prima ondata sostenuta di contributor.
Aprile 2022: i NIP vivevano ancora nel repo principale
L’aprile 2022 è stato l’ultimo mese prima che i NIP si spostassero fuori dal repo principale nostr-protocol/nostr. Poiché lo split non era ancora avvenuto, il repo dedicato nostr-protocol/nips non aveva storia di pull request in aprile. Nel repo principale, tre commit di aprile sono arrivati: “Update readme to add nip12” l'8 aprile di goswami1999, “add kinds list” il 25 aprile di jb55 e “add js formatting to sample code” il 28 aprile di steliosrammos.
Anche il lavoro sui client cominciava a prendere forma. I commit di Damus dell’aprile 2022 hanno aggiunto il primo comportamento chatroom, la gestione del profilo e le icone dell’app, mentre nostr-tools stava diventando il percorso di libreria JavaScript per i primi client ed esperimenti. Sul lato protocollo, le query di tag generiche NIP-12 hanno dato alla ricerca per tag un posto documentato, la kinds list ha spostato Nostr verso un modello a registry e migliori esempi JavaScript hanno reso la spec più facile da implementare per autori di client e librerie. Il 1° maggio, fiatjaf ha spostato i NIP nel repo dedicato. L’aprile 2022 è stato l’ultimo mese dell’era originale a repo unico.
Aprile 2023: espansione applicativa post-Damus
L’aprile 2023 è arrivato tre mesi dopo il lancio di Damus sull’App Store iOS del 31 gennaio 2023, e dopo che Jack Dorsey aveva postato la sua chiave pubblica Nostr. La rete aveva appena assorbito la sua prima grande ondata di crescita pubblica. Client come Damus, Snort, Iris, Coracle e Amethyst erano attivi, mentre gli operatori di relay stavano imparando cosa un social graph più grande faceva alle assunzioni su banda, spam, ricerca e moderazione.
L’aprile 2023 ha avuto una sola PR NIPs mergiata: PR #456, mergiata il 17 aprile, che aggiungeva link a entità bech32 NIP-19 alla gestione URI NIP-21. I commit circostanti mostrano la pressione applicativa dietro il lavoro di protocollo. L’aprile 2023 ha visto lavoro su NIP-45 COUNT, zap marker specifici per evento, NIP-15 marketplace, semantica di delegated delete NIP-26, file metadata NIP-94, gestione degli errori wallet-connect NIP-47 e NIP-30 custom emoji. La lista dei contributor si era allargata a includere fiatjaf, staab, pablof7z, Semisol, CodyTseng, sethforprivacy, mikedilger, AsaiToshiya, alexgleason, martindsq, frbittencourt e arkin0x.
Damus, Snort, Iris, Coracle e Amethyst non erano più demo attorno a una spec; erano client di produzione che affrontavano onboarding, feed, spam, zap, media e selezione dei relay. Il lavoro di protocollo dell’aprile 2023 si legge come il backlog che quei client hanno creato: zap, marketplace, file metadata, conteggio, emoji e link identitari hanno tutti spinto la spec oltre le semplici note e i semplici follow.
Aprile 2024: messaggistica privata, git-over-Nostr e supporto ai manutentori
L’aprile 2024 ha avuto due PR NIP mergiate. PR #1167, mergiata il 10 aprile, ha corretto terminologia confusa nel remote signing NIP-46, in cui client e signer hanno bisogno di linguaggio esatto per le azioni richieste e autorizzate. PR #1108, mergiata il 17 aprile, ha espanso i git repositories NIP-34 con eventi di stato, chiarimenti, manutentori opzionali, identificatori di repo e tag di discoverability. Quel passo ha reso git-over-Nostr più pratico per ngit e in seguito GitWorkshop.
NIP-17, precedentemente NIP-24, è atterrato il 24 aprile come messaggi sigillati e gift-wrapped per DM privati e piccole chat di gruppo. Il lavoro su client e librerie ha corso in parallelo: Amethyst, Primal, Gossip, nostr-tools, NDK e rust-nostr erano tutti attivi nello stesso periodo.
OpenSats ha anche annunciato supporto a lungo termine per gli sviluppatori Nostr nell’aprile 2024: PabloF7z il 9 aprile, Stuart Bowman il 12 aprile e hzrd149 il 15 aprile. Quelle grant hanno spostato il finanziamento dalle grant di progetto isolate verso la manutenzione sostenuta di relay, librerie e infrastruttura client.
Aprile 2025: pulizia densa dei NIP e formalizzazione di Blossom
L’aprile 2025 è stato il mese di protocollo più denso in questo retrospettivo, con sedici PR NIPs mergiate. Il mese è iniziato con PR #1846, che ha aggiunto transazioni e indirizzi blockchain a NIP-73, e PR #1865, che ha aggiunto i tag NIP-C0 alla tabella dei tag standardizzati. È continuato con PR #1801 e PR #1889, entrambe migliorativi delle indicazioni di ripubblicazione della relay list di kind 10002, e PR #1879, che ha ridotto e chiarito NIP-65.
PR #1822 ha aggiunto NIP-B7 per l’interazione Blossom, dando ai client Nostr e ai server Blossom un layer di coordinamento canonico dopo più di un anno di pratica informale. PR #1051 ha deprecato NIP-26, la spec di firma evento delegata. NIP-26 era stato difficile da implementare in modo sicuro ed era diventato meno attraente man mano che NIP-46 e altri pattern di signer maturavano.
Il resto del mese ha combinato pulizia con espansione applicativa: PR #1882 ha aggiunto campi di privacy policy e terms of service a NIP-11, PR #1849 ha espanso i bookmark web di kind 39701 sotto NIP-B0, PR #1891 ha aggiunto quel kind di bookmark al README, e PR #1895 ha aggiunto tag standardizzati NIP-B0. OpenSats ha annunciato la sua Eleventh Wave of Nostr Grants il 16 aprile, finanziando Swae, HAMSTR, Vertex, Nostr Double Ratchet e Nostr Game Engine. Primal, Coracle, noStrudel, nostr-tools, NDK e rust-nostr stavano anch’essi rilasciando in questo periodo, quindi la pulizia del protocollo si è affiancata al lavoro attivo su client e librerie.
Aprile 2026: hardening di NIP-34, badge e grant focalizzate sull’adozione
L’aprile 2026, il mese con cui si chiude questo numero, ha avuto quattro PR NIPs mergiate. La prima è stata PR #2276, mergiata il 1° aprile, che ha modificato i badge profilo NIP-58 al kind 10008 e aggiunto set di badge di kind 30008, rendendo l’assegnazione dei badge e le collezioni di badge più componibili. Un secondo cambiamento di usabilità git-over-Nostr è arrivato in PR #2312, mergiata il 10 aprile, che ha aggiunto la semantica URL di clone nostr:// a NIP-34. Le pulizie del 25 aprile, PR #2325 e PR #2326, hanno rimosso linguaggio NIP-34 inutilizzato e scorretto.
I commit correlati affilano le stesse superfici. Il 22 aprile, fiatjaf ha aggiunto una lista di server Blossom a NIP-51 e regolato l’editing dei metadati NIP-29 per corrispondere al comportamento PUT-style di Flotilla. Il 26 aprile, ha rinominato NIP-5A per chiarezza. L’aprile 2026 si è concentrato sul rendere superfici di protocollo già usate più facili da implementare e più difficili da fraintendere.
OpenSats ha annunciato la sua Sixteenth Wave of Nostr Grants l'8 aprile, sostenendo Amethyst Desktop, Nostr Mail, Nostrord, Nurunuru (null–nostr) e un rinnovo HAMSTR: client desktop, messaggistica email-like, UX di gruppo, onboarding giapponese e connettività off-grid.
Grazie per aver letto Nostr Compass #20. Mandateci un DM su Nostr con suggerimenti, correzioni o nuovi progetti da coprire.