Nostr Compass #40
Bon retour dans Nostr Compass, votre guide hebdomadaire de Nostr.
Cette semaine : Marmot Protocol et MDK ajoutent des fenêtres de conversation limitées, des correctifs de récupération et des liaisons SDK coordonnées, Myco transforme son maillage FIPS en environnement d’exécution hors ligne pour napplets et partage de fichiers, Dart NDK modifie le comportement des relay et du cache, et Keycast reconstruit la signature à distance autour de requêtes durables et de la récupération. Les versions étiquetées comprennent Nail, Nostr Mail Client, Linky et Boris. Le dépôt des NIPs a fusionné une PR cette semaine, clarifiant NIP-A3 (Payment Targets), tandis que les propositions relatives aux commandes obliques et aux signaux de présence DVM restent ouvertes. Les analyses approfondies portent sur NIP-23 (Long-form Content) et NIP-92 (Media Attachments).
À la une
Marmot Protocol et MDK atteignent la v0.10.0
MDK v0.10.0 de Marmot Protocol ajoute des fenêtres limitées pour les listes de discussions et les conversations, des synthèses indépendantes des éléments requérant l’attention pour chaque compte, des brouillons protégés contre les conflits de révision et l’état des réactions du lecteur pour les applications qui créent des groupes chiffrés fondés sur MLS au-dessus de Nostr. Il rétablit également le blocage des utilisateurs propre à chaque compte et comptabilise les invitations en attente sans les compter de nouveau comme messages non lus.
La série de versions v0.10.0 corrige la récupération lorsqu’un appareil est supprimé puis ajouté de nouveau, lorsque du trafic arrive avant son Welcome et lorsque la relecture du peel est interrompue. Elle réduit la synchronisation des relay et le renouvellement des abonnements, met les opérations multimédias en file d’attente pendant que les créneaux de transfert sont occupés et limite, à chaque tentative, les téléversements d’audit forensique aux destinations validées.
Le même commit source de MDK fournit les artefacts Rust, C, Swift, Kotlin, de ligne de commande et d’agent comme une seule cohorte de compatibilité. Les bases de données de comptes progressent au fil des migrations 70–75 ; les applications doivent donc mettre à jour ensemble le code source généré et les bibliothèques natives, conserver les paquets complets des frameworks Apple, effectuer une sauvegarde avant la migration et éviter de rétrograder une base de données migrée.
Myco 0.7.0 exécute des napplets et partage des fichiers sur un maillage FIPS multitrajet
Myco v0.7.0 transforme l’application de maillage Android en hôte pour les napplets, des programmes Nostr à fichier unique décrits par la proposition NIP-5D ouverte. Chaque napplet s’exécute dans un bac à sable sans accès direct au réseau ni au stockage et demande à Myco des capacités d’identité, de relay, d’outbox, de maillage, d’image ou de fichier. La fiche d’installation affiche ces autorisations avant approbation, les utilisateurs peuvent les modifier par la suite et les mises à jour qui demandent un accès plus large repassent par l’étape d’autorisation.
Myco v0.7.0 envoie également des fichiers arbitraires à des téléphones appairés par l’intermédiaire de la feuille de partage du système ou d’un contact Circle. Le téléphone destinataire approuve le transfert avant que Myco ne l’enregistre dans Downloads/Myco, et la charge utile est chiffrée avec la clé de ce téléphone. La détection sur le réseau local utilise UDP lorsque les deux téléphones partagent le même Wi-Fi et conserve Bluetooth pour les trajets hors ligne ; les nouvelles tentatives couvrent les messages de contrôle perdus, tandis qu’une minuterie d’inactivité limite les transferts de gros fichiers bloqués.
Myco maintient désormais plusieurs liens FIPS simultanés vers un pair, sonde les trajets de secours et déplace le trafic lorsque le lien Bluetooth, Wi-Fi Aware ou de réseau local actif se dégrade. Ce travail s’appuie sur la branche multitrajet expérimentale de FIPS. La version 0.7.0 reste compatible sur le réseau avec la 0.6.1 pour les échanges entre applications, la messagerie et l’appairage existants, mais les liens multitrajets ne se forment qu’entre deux téléphones mis à jour. Le relay intégré passe également à LMDB et migre les anciens magasins d’event au premier lancement.
Dart NDK modifie le comportement des relay, du cache et des comptes
Dart NDK v0.10.0-dev.3 est une version de développement de la bibliothèque cliente Dart, avec des changements incompatibles dans la gestion des relay, la mise en cache, l’authentification et les flux de comptes. Les responsables de clients doivent prévoir des travaux de migration du code et du comportement, en particulier lorsqu’une application suppose que les events mis en cache, les events masqués ou les mises à jour de comptes suivent la sémantique de la précédente série de versions.
La série de développement v0.10.0 améliore également les performances du cache et du vérificateur Rust, et modifie le comportement des métadonnées, des coordonnées de suppression, de la visibilité des events, de l’authentification du signataire et des paiements NWC. La vérification groupée des events en Rust réduit la surcharge de vérification, tandis que le nouveau comportement de cache loadHiddenEvents est explicitement incompatible.
Puisqu’il s’agit de v0.10.0-dev.3, et non d’une version stable v0.10.0, les équipes applicatives doivent épingler les versions et tester les migrations de manière délibérée. La reconnexion aux relay, l’hydratation du cache, l’authentification du signataire, la gestion du portefeuille et l’ordre des flux de comptes sont les parcours les plus importants à tester avant de migrer les clients de production.
Keycast publie la version candidate de son signataire reconstruit
Keycast v2.0.0-rc.1 est la première version numérotée du signataire distant NIP-46 auto-hébergé reconstruit. Cette version candidate ajoute la prise en charge multiplexée de NIP-46, le routage par relay partagé ou propre à chaque clé, la gestion durable des requêtes, le stockage chiffré des clés, les invitations, les sessions et les espaces de travail d’équipe.
La politique de signature et la récupération bénéficient de la même attention dans v2.0.0-rc.1. Les opérateurs peuvent configurer des politiques de signature, consulter l’historique d’audit, créer des sauvegardes chiffrées, récupérer des déploiements et renouveler la clé racine. Le projet documente également une provenance de version coordonnée et vérifiée pour ses composants API, signataire et web.
La version reste une version candidate ; les opérateurs ne doivent donc pas déduire une compatibilité définitive ou une aptitude à la production du seul numéro de version. Les tests doivent couvrir la récupération des requêtes interrompues, les échecs de routage par relay, l’application des politiques, la restauration des sauvegardes et le renouvellement des clés avant de remplacer un service de signature existant.
Versions étiquetées
Nail 0.2.0 rétablit les abonnements de Nostr vers l’e-mail
Nail v0.2.0, un service qui distribue des messages Nostr au moyen de flux de travail par e-mail, ajoute des abonnements gift-wrap autoréparables. Ce changement vise à rétablir la distribution de Nostr vers l’e-mail après l’échec d’un abonnement, au lieu de laisser la passerelle bloquée silencieusement.
Nostr Mail Client 0.15.0 élargit le contrôle des comptes et des relay
Nostr Mail Client v0.15.0 ajoute le changement de compte en un geste, les notifications propres à chaque compte, les notifications push web et la récupération d’une liste de relay manquante à partir d’un relay, d’une adresse Nostr ou d’un nprofile. Il republie également les profils et les listes de relay vers les relay d’indexation, se reconnecte lorsque l’accès au réseau revient et distingue une panne de l’appareil de relay de courrier injoignables. Ces changements renforcent la récupération des comptes et la distribution sur les clients de bureau, web et Android.
Linky 26.9.17 garde les phrases de récupération hors de son serveur
Linky v26.9.17, une application de gestion de contacts, de messagerie Nostr privée et de paiements Lightning/Cashu, corrige un parcours qui envoyait les phrases de récupération au serveur de Linky lorsque les utilisateurs les enregistraient au moyen d’un gestionnaire de mots de passe. La version renforce également la gestion des URL des fichiers de paiement et désactive les sauvegardes d’applications Android, réduisant ainsi le nombre d’emplacements depuis lesquels les éléments de récupération du portefeuille et de l’identité peuvent quitter l’appareil.
Calendar by Form* 2.4.0 ajoute les invitations Mailstr pour les participants
Calendar by Form* v2.4.0, un client de calendrier Nostr, ajoute les invitations Mailstr pour les participants et des correctifs pour le calendrier sur mobile. Le parcours d’invitation permet aux organisateurs d’inclure des participants grâce à une coordination axée sur le courrier, sans exiger de compte de calendrier existant.
Hessible 0.1.2 accélère la synchronisation chiffrée des contacts et des photos
Hessible 0.1.2, une application Android de contacts axée sur la confidentialité qui stocke les données de contact chiffrées sur des relay Nostr, réduit la surcharge de synchronisation et réplique les photos de contacts chiffrées sur les serveurs Blossom. La version réduit également la taille du paquet de l’application, tandis que ses propres recommandations continuent d’inciter les utilisateurs à sauvegarder leurs clés et à tenir compte des durées de conservation variables des relay.
Boris 0.12.5 limite l’extraction et renforce la lecture hors ligne
Boris v0.12.5, un client de liste de lecture construit autour des marque-pages Nostr, succède à la v0.12.4 avec une extraction de contenu limitée, une mise en cache hors ligne, des modifications des requêtes aux relay, la gestion du HTML non sûr et un correctif pour le texte presque invisible avec le thème Paper White. Ces changements affectent à la fois la sécurité du contenu et la fiabilité de la lecture de contenus enregistrés sans connexion réseau active.
Amethyst 1.15.2 affine les médias et les réponses de portée racine
Amethyst v1.15.2, un client Nostr Android, clôt une série de trois versions avec des correctifs multimédias, une gestion plus claire des autorisations Health Connect, la mise en cache des noms de sources et des filtres d’engagement dédiés aux réponses de portée racine NIP-22. La version comprend également des mises à jour des traductions et des métadonnées du paquet.
LibreNostr 0.5.17 achemine les flux par les relay d’écriture des auteurs
LibreNostr 0.5.17, un client Android axé sur les relay, dirige désormais les requêtes de flux vers les relay d’écriture NIP-65 des auteurs suivis et diffère les requêtes de décompte des interactions jusqu’à ce que les notes entrent dans la zone visible. Des travaux antérieurs de la même série de versions limitent les requêtes simultanées aux relay et ferment chaque abonnement à un relay dès que celui-ci répond, ce qui réduit les rejets de requêtes auto-infligés pendant les actualisations.
Voca 1.2.0 améliore l’annulation et la récupération de la synthèse vocale
Voca 1.2.0, un lecteur Android de synthèse vocale axé sur l’utilisation hors ligne, capable de récupérer et de vérifier du contenu Nostr, ajoute des comportements distincts pour l’annulation et le rendu, ainsi qu’une récupération pour les moteurs vocaux lents ou peu fiables, après le lancement de la version 1.0 présenté dans le numéro 38. Il ajoute également des diagnostics facultatifs envoyés avec une nouvelle clé Nostr à usage unique par l’intermédiaire d’un message privé NIP-17, les rapports volumineux étant chiffrés localement avant leur téléversement.
Postr 1.1.1 ajoute la dictée et la récupération des publications
Postr 1.1.1, un éditeur Android ciblé pour le kind 1, ajoute la dictée et une gestion des mentions tenant compte de la position du curseur, après le lancement présenté dans le numéro 37. La version 1.1.0 précédente améliore également la récupération des publications en réessayant le même event signé après des résultats ambigus, ce qui empêche la récupération de créer une note en double.
earthly 0.1.10 répare l’assainissement des cartes et leur création
earthly v0.1.10, un éditeur collaboratif de cartes Nostr, modifie sensiblement la création de cartes et de récits tout en corrigeant une faille critique de l’assainisseur d’attributions MapLibre grâce à une mise à niveau de MapLibre GL JS. La version améliore également les messages de compatibilité WebGL 2, les commandes mobiles, la modification de la géométrie, la sélection et les commandes de présentation des cartes.
Routstrd 0.4.10 resserre le routage des requêtes Nostr
Routstrd v0.4.10 remplace une liste de fournisseurs stockée et obsolète par la liste renvoyée par la détection en direct. La version v0.4.9 précédente ajoutait des commandes manuelles et planifiées d’actualisation des clients, des npubs nommés dans la CLI et des redémarrages propres du daemon qui attendent la fin des requêtes actives. Ensemble, ces versions rendent la sélection des fournisseurs et le comportement d’actualisation plus explicites pour les opérateurs du service routé par Nostr.
Whistle 1.9.1 instrumente la récupération en arrière-plan
Whistle 1.9.1, une application chiffrée de partage de position en groupe construite sur Nostr, MLS et Marmot Protocol, ajoute une instrumentation du cycle de vie des appareils pour la récupération en arrière-plan sur iOS. La version 1.9.0 introduit également des pauses de partage propres à chaque groupe et des diagnostics du dernier event par groupe, ce qui facilite la distinction entre un groupe bloqué et une connexion saine à l’échelle de l’application.
Amber 6.6.4 colmate une fuite Tor et corrige les échecs de récupération du signataire
Amber v6.6.4, un signataire d’event Nostr pour Android, couronne une série de trois versions avec la correction d’une fuite Tor ainsi que des correctifs concernant les relay du signataire et la récupération. Les utilisateurs du signataire et les développeurs d’applications doivent prêter une attention particulière aux hypothèses concernant les trajets réseau et au comportement des nouvelles tentatives, car les échecs du signataire peuvent autrement apparaître comme des échecs de publication du client.
nostr-wot-extension 0.7.0 chiffre les données de cache du portefeuille
nostr-wot-extension v0.7.0, une extension de navigateur qui gère les identités Nostr, signe des events et lance des paiements Lightning, chiffre les données de cache du portefeuille et des paiements, et renforce l’isolation du coffre-fort et des comptes. Elle traite également le comportement de NWC et du portefeuille, la compatibilité des paiements, l’approbation des requêtes, la gestion des comptes, l’importation des sauvegardes, la gestion des relay, l’accessibilité et le déchiffrement local des events.
Lightning.Pub 0.0.41 améliore la récupération des publications
Lightning.Pub v0.0.41 ajoute aux échecs de publication Nostr des détails sur l’URL du relay, les délais, l’état du socket et le DNS. Il réessaie également les appels de démarrage du fournisseur de liquidité, supprime les fonctions de rappel abandonnées et bloque le routage des factures jusqu’à ce qu’une réponse de solde réussie prouve que le fournisseur est prêt. Les opérateurs disposent désormais d’une distinction plus claire entre les échecs de connectivité aux relay et les défauts de disponibilité du backend.
Gittr 1.0.0 fait progresser la collaboration NIP-34
Gittr v1.0.0, un client de collaboration Git fondée sur Nostr, fait progresser la gestion des sources de clonage NIP-34, l’état des tickets et des discussions, l’ergonomie mobile et l’interopérabilité. Le tag v1.0.0 succède aux versions v0.3.0 et v0.3.1 publiées plus tôt cette semaine, donnant aux intégrateurs un repère de version stable pour cette série de versions.
GitWorkshop 4.1.0 rend les brouillons NIP-34 récupérables
GitWorkshop 4.1.0, un client natif Nostr pour les tickets NIP-34, les pull requests, la revue de code et la navigation dans les dépôts, ajoute des brouillons locaux propres à chaque compte qui survivent aux actualisations et aux redémarrages du navigateur. Il ajoute également une récupération limitée et des commandes explicites de nouvelle tentative pour les lectures Git, la détection des relay, l’état des dépôts, l’historique des pull requests, les téléversements et les métadonnées de version, tout en conservant des nouvelles tentatives manuelles pour la signature et le paiement.
ngit-ci 0.1.1 publie une coordination CI signée
ngit-ci 0.1.1, un coordinateur auto-hébergé pour le protocole Nostr CI proposé NIP-C1, est sa première version publiée par l’intermédiaire de Nostr. Il couvre la coordination signée des flux de travail, l’exécution dans des conteneurs ou des microVM, les journaux et les artefacts, les secrets chiffrés des dépôts, l’autorisation des responsables NIP-34 et la publication signée des résultats de compilation.
pakstr 0.21.1 fait progresser le conditionnement des applications Nostr
pakstr v0.21.1 poursuit une série de cinq versions consacrée au conditionnement des applications Nostr et au comportement de l’enveloppe applicative. Les références à NostrAppShell renvoient à cette même série de versions de pakstr ; le paquet et l’alias décrivent donc un même changement livré.
@elisym/cli 0.30.0 coordonne les paquets d’agents et de délégation
@elisym/cli 0.30.0 conclut une version coordonnée de la CLI, du SDK et de MCP pour la délégation d’agents orientée Nostr. Les tâches déléguées attendent désormais leur achèvement au lieu de patienter pendant un intervalle fixe, et l’application évite de payer la même capacité de délégation pour chaque tâche. Les équipes qui utilisent plusieurs paquets doivent maintenir CLI 0.30.0, SDK 0.36.0 et MCP 0.26.0 sur la même série de versions.
Hashtree 0.2.150 fait progresser la synchronisation des arbres de hachage
Hashtree v0.2.150 clôt une série de six versions avec un verrouillage sûr sur Android pour le graphe social intégré. Les versions précédentes de la série maintiennent brièvement les abonnements Nostr ouverts après un EOSE vide afin que les racines signées retardées puissent arriver, sélectionnent la racine valide la plus récente pour l’auteur et l’arbre exacts, et récupèrent les routes FIPS conservées après des interruptions de transit. Il en résulte une détection et une synchronisation plus prévisibles des racines mutables entre les relay, les clients intégrés et les trajets réseau intermittents.
nostr-relay 0.0.266 améliore le fonctionnement avec une base de données partagée
nostr-relay v0.0.266, un relay Nostr construit sur le framework relayer, fait progresser le comportement des bases de données partagées et de Redis sur six versions. Ce travail est particulièrement pertinent pour les opérateurs qui exécutent plusieurs processus de relay sur une infrastructure commune de persistance ou de notification.
fips-tcp 0.2.2 implémente FIPS sur TCP
fips-tcp v0.2.2 répare les segments manquants après l’expiration d’une salve à mesure que les accusés de réception progressent. Les petites écritures perdues lors d’une interruption de transit sont récupérées ensemble au lieu d’attendre un délai croissant pour chaque segment, tandis que les implémentations Rust et TypeScript conservent des octets réseau, des limites de nouvelle tentative, des vérifications de fenêtre de réception, un bouclage de séquence et un échantillonnage RTT identiques.
En développement
Bibliothèque de place de marché Nenya
Nenya est une nouvelle bibliothèque pour une place de marché Nostr non dépositaire, axée sur les médias numériques réalisés sur commande avec règlement en Bitcoin. Le dépôt est en prépublication, de sorte que ses interfaces d’event et de règlement peuvent encore changer.
Les développeurs de clients importent la bibliothèque Nenya dans des applications Nostr afin d’y proposer des annonces et des transactions compatibles. Le travail d’intégration devrait commencer par ses limites d’event et de règlement, car il n’existe encore ni déploiement autonome ni contrat de version stable.
Passerelle CI de GitHub vers Nostr
gh-ngit-ci-bridge est une passerelle préliminaire qui surveille les commits GitHub associés à des identités configurées et les transforme en preuves de build Nostr signées pour les flux de travail NIP-34. Le dépôt est en prépublication et son contrat d’intégration peut encore changer.
Le dépôt gh-ngit-ci-bridge relie l’activité GitHub conventionnelle à une coordination CI native de Nostr sans modifier le flux de travail d’origine de la forge. La question d’implémentation pertinente concerne la provenance : les utilisateurs doivent distinguer l’action GitHub surveillée, l’identité de la passerelle et la preuve Nostr signée qui en résulte.
noscall chiffre les pièces jointes vocales
Le commit de noscall consacré aux pièces jointes vocales chiffrées ajoute une fonctionnalité concrète de confidentialité pour les communications vocales. La modification vérifiée dans le code source prend en charge les pièces jointes vocales chiffrées, ce qui réduit la nécessité d’exposer les médias enregistrés en texte clair lors de leur ajout à un appel ou à un flux de messagerie.
relayer rétablit la diffusion des notifications entre processus
La pull request nº 167 de relayer a intégré un correctif de notification pour les déploiements dans lesquels plusieurs processus relay partagent une même base de données. Le correctif rétablit la diffusion en direct entre ces processus, remédiant au cas où un event était correctement conservé, mais où les clients connectés à un autre processus ne recevaient pas la notification en direct correspondante.
Associé aux travaux sur les bases de données partagées de nostr-relay v0.0.266, le correctif de relayer fournit aux opérateurs de déploiements multiprocessus un objectif de test clair : publier par l’intermédiaire d’un processus, s’abonner par l’intermédiaire d’un autre, puis confirmer à la fois la persistance et la livraison immédiate. Une écriture réussie dans la base de données ne prouve pas à elle seule que les abonnés en direct ont reçu l’event.
Nouveaux projets
Trackstr cartographie les médias au moyen de kinds d’event dédiés
Trackstr est une base de données multimédia Nostr open source, non publiée, destinée à la découverte et au suivi de films, de musique, de programmes télévisés et d’autres médias. Sa conception actuelle utilise les kinds d’event 35400 à 35402, offrant un schéma et une surface d’implémentation pouvant être examinés. Ces kinds restent définis par le projet et peuvent changer avant une publication.
Travaux sur le protocole et les spécifications
NIP-A3 clarifie l’ambiguïté des types de paiement
NIP-A3 (Cibles de paiement) normalise les cibles de paiement typées dans les tags ["payto", "<type>", "<address>"] des events de kind 10133. La clarification sur les types de paiement qui a été intégrée ajoute bitcoincash et tron à la liste des types documentés et clarifie le rendu : les clients utilisent un schéma URI propre au type lorsqu’il en existe un ; sinon, ils se rabattent sur payto://<type>/<address>.
NIP-CD propose des commandes à barre oblique adressables
La proposition NIP-CD de commandes à barre oblique, toujours ouverte, définit des events adressables de kind 31992 dont les tags command, title, description, arg, de portée et d’exclusion annoncent des commandes exécutables. Les appels commencent au premier octet du contenu en texte clair d’un event, peuvent cibler un seul exécuteur par npub et ne nécessitent délibérément aucune prise en charge particulière du côté client. Le brouillon définit également des types d’arguments positionnels ainsi que des filtres de portée par kind d’event, relay, auteur ou tag ; rien de tout cela ne constitue encore un comportement intégré au protocole.
NIP-90 propose des events de pulsation DVM avec expiration
NIP-90 (Data Vending Machines) définit les demandes de tâches, les résultats et les retours pour les services qui effectuent des travaux sur Nostr. Une proposition de pulsation DVM, toujours ouverte, ajoute des events facultatifs de kind 11998 qui devraient comporter un tag expiration afin que les clients puissent distinguer une machine active d’une annonce NIP-89 obsolète. La pulsation se situe en dehors de la plage de kinds de tâches de NIP-90, permet aux relays d’écarter les pulsations expirées ou remplacées et ne modifie pas les flux DVM existants lorsqu’un service ne l’émet pas.
NIP-73 propose des filtres par type de contenu de podcast
NIP-73 (Identifiants de contenu externe) normalise les tags i pour les identifiants externes et les tags k pour leurs catégories. Le brouillon ouvert de proposition sur le type de contenu de podcast ajoute les tags de catégorie facultatifs podcast:medium:music et podcast:medium:podcast afin que les clients puissent filtrer les notes selon le type de contenu déclaré dans un flux RSS de podcast. L’absence de catégorie continue d’indiquer implicitement un flux de podcast, bien que les clients doivent consulter la source RSS lorsqu’ils ont besoin d’en confirmer le type de contenu.
NIP-F5 propose un transport FIPS soumis à autorisation pour les applications web
La proposition NIP-F5 de transport pour navigateur, toujours ouverte, définit une API window.fipsTransport facultative grâce à laquelle une application web Nostr peut demander un accès HTTP ou WebSocket approuvé par l’utilisateur à un relay adressé par FIPS, un serveur Blossom, un service Git ou un autre point de terminaison privé. L’hôte lie chaque autorisation à l’origine web qui en fait la demande et à la cible, tout en maintenant le transport séparé de la signature Nostr, de l’identité et de l’autorisation du service. La proposition exige également un consentement explicite et des autorisations limitées, mais ses formes d’adresse et son contrat avec le navigateur restent à l’état de brouillon.
Marmot clarifie la découverte des relays KeyPackage
Marmot transporte l’état de groupes MLS au moyen d’events Nostr. La clarification sur la découverte des relays KeyPackage, toujours ouverte, documente la séquence actuelle : publier les métadonnées de relay de kind 10002, récupérer le KeyPackage de kind 30443 du destinataire depuis des destinations autorisant l’écriture ou non marquées, puis utiliser séparément le kind 10050 pour trouver la boîte de réception Welcome du destinataire. Elle indique également que les entrées NIP-65 en lecture seule ne sont pas des destinations KeyPackage et que la liste supprimée de kind 10051 ne constitue plus une étape de découverte. La pull request fournit des consignes de migration en cours d’examen, et non un nouveau format filaire ou une exigence intégrée.
Marmot propose des signalements de groupe chiffrés et une modération partagée
La spécification de modération de Marmot, toujours ouverte, propose des events internes non signés transportés par le protocole de groupe chiffré existant. Le kind 1984 servirait à signaler une révision précise d’un message, le kind 1985 permettrait aux administrateurs de classer les signalements référencés sans supprimer le contenu, et le kind 4891 permettrait à un administrateur authentifié de supprimer un message et ses révisions. La proposition définit également des règles de déduplication, de visibilité partagée des examens, d’ordonnancement, de conservation et d’autorité, tout en maintenant la suppression par l’auteur sur le kind 5 et les interfaces de l’application hôte hors du contrat filaire.
NWC ajoute la recherche de paiements et les enregistrements BOLT12
Nostr Wallet Connect permet aux applications de contrôler un portefeuille au moyen de requêtes et de réponses chiffrées sur Nostr. Précédemment présenté comme une proposition ouverte, son travail sur la recherche de paiements a maintenant été intégré au dépôt. La spécification intégrée de lookup_payment et de BOLT12 définit la recherche de paiements par identifiant de transaction, facture, hash de paiement ou sélecteurs propres au type de paiement, et ajoute des enregistrements et états de paiement BOLT12 facultatifs à l’état de brouillon. Les développeurs de portefeuilles et de clients disposent désormais de définitions intégrées, mais encore provisoires, pour le flux de recherche et ses enregistrements BOLT12.
NWC ajoute les connexions initiées par le client
Le flux de connexion initié par le client, désormais intégré, permet à un client de générer le secret de connexion, de guider l’utilisateur vers une confirmation HTTP ou une autorisation Nostr, de négocier les autorisations obligatoires et facultatives, puis de recevoir les informations de connexion approuvées. Cette modification fournit aux clients et portefeuilles NWC une définition provisoire hébergée dans le dépôt pour créer une connexion côté client.
Analyse approfondie des NIP : NIP-23 et NIP-92
NIP-23 : contenu long format
NIP-23 (Contenu long format) normalise le contenu long format sur Nostr au moyen d’events adressables de kind 30023, comme le définit la spécification canonique. Les éditeurs disposent ainsi d’une identité d’article modifiable, tandis que le kind 1 reste le format des notes courtes.
Selon le format NIP-23, un article est adressé par le triplet composé du pubkey de son auteur, du kind 30023 et du tag d. Le corps Markdown se trouve dans content ; les tags facultatifs title, summary, image, published_at et t décrivent la présentation et la date de publication initiale. Une modification republie la même adresse avec un created_at plus récent ; les clients doivent donc regrouper les versions en double lorsqu’un relay n’implémente pas correctement le remplacement adressable.
La spécification du contenu long format laisse la politique de stockage et de présentation en dehors du format signé. Elle interdit le HTML intégré dans le Markdown nouvellement rédigé, utilise les valeurs NIP-19 naddr et les tags a pour les liens stables, et achemine les réponses par l’intermédiaire des commentaires NIP-22. Le format provisoire obsolète de kind 30024 a été transféré vers les events privés NIP-37, laissant le kind 30023 aux articles publiés.
La spécification est canonique depuis le commit 7c444e3. Pour les développeurs, la principale conséquence est que la publication, le remplacement, l’indexation et le rendu doivent suivre le modèle d’event adressable associé au kind 30023, tandis que les clients doivent toujours gérer les divergences entre relays, les copies obsolètes et une découverte incomplète.
Les implémentations actuellement attestées comprennent Habla, YakiHonne et Amethyst. L’event signé de kind 30023 ci-dessous a été récupéré depuis wss://nos.lol et wss://relay.primal.net. Son tag d fournit l’identifiant stable de l’article, tandis que son corps Markdown reste à l’intérieur de l’event signé ; deux relectures depuis des relays n’établissent ni une conservation universelle ni une compatibilité avec tous les clients.
{"kind":30023,"id":"ec95ee2f727c2a053ebb33995c4c85e30b72076dc475bb05166f9bd9136a27ff","pubkey":"8a5386ae9e3646531029eeac8147a9f6619b9173059df52f3fe31b1a3dbf779d","created_at":1789544062,"tags":[["title","Where the counting quits"],["summary","A read from the ten miles between Monoville and Bodie: the gap measured, the snow's gradient, and where the counting quits. For Divy, who asked."],["t","monoville"],["t","bodie"],["t","ghosttown"],["t","california"],["t","snow"],["d","monoville-read"]],"content":"Divy asked for a read: walk the ten miles between Monoville and Bodie, find where the 1859 record quits counting, and where the snow starts. This is that read. Maps, elevation, archives, the gaps said out loud. I never pretend I stood where I didn't.\n\nThe record, first, because it's thin.\n\nNovember 1859. W. S. Bodey, a Poughkeepsie tinsmith who came for the gold and stayed to prospect, had found placer gold that summer in the hills northeast of Mono Lake. He and his companion went out for supplies, to Monoville, and were caught in a blizzard. When Bodey couldn't go further, the companion went on. Bodey froze. His body was found the next spring.\n\nThe tellings can't agree on the small things. His first name: William, Waterman, or Wakeman, depending. The companion: a partner named E. S. Taylor in one account, \"a companion\" in another. And no account gives the spot. No creek, no ridge, no milepost. The record counts the gap, then stops.\n\nThe gap, measured: 8.8 miles straight between the coordinates, as you had it. By road, 13.7 on your measure; the driving route I could model ran 16.6, because the road doesn't cross this country, it goes around it. Between the two names: ground.\n\nAnd the ground doesn't sag between the towns. It climbs.\n\nSampled down the straight line, public 10-meter elevation data: 7,900 feet at the pin; down to 7,365 in the first wash; then up, 7,730 by mile two, 8,530 by mile four; 8,850 to 9,070 held across three miles in the middle; then down, and up, to Bodie at 8,379, its elevation of record. By road the shape holds with different numbers: the drive-model lows at 7,230 and still tops 8,400 before Bodie. Whichever line the supply run took, the middle is the high ground.\n\nSo the counting doesn't quit at a milepost. It quits on the crest. Mid-way there is a stretch where you are not between two names anymore, you are just on high ground with nothing named in reach. The record can't put a date or a distance on it, and it can stay that way. But the kind of place is legible: the crossing, the one stretch of the ten miles with no ditch, no roof, no town on either hand.\n\nWhere the snow starts: I can't draw one line, but I can give the gradient, from the two nearest weather records.\n\nBodie, 8,379 feet: 93 inches of snow a year on average. Twenty-seven snowy days. A record season of 269 inches. Roads closed all winter.\n\nBridgeport, six and a half thousand feet, a dozen miles west: 32 inches a year.\n\nTwo thousand feet of climb, three times the snow. In November, the month of the trip, Bodie averages 10.6 inches; Bridgeport, 1.5. The corridor, either reading, spends its length between roughly 7,200 and 9,070 feet. Mostly above the line where November snow is a fact rather than a maybe.\n\nSo the snow starts where the ground starts staying high. It's the same stretch where the counting quits. Same country, two silences.\n\nWhat the ground kept, either way: at Monoville, the ditches. The Mono Ditch carried water twenty miles from Virginia Creek, at $75,000, to wash gravel in diggings that had no water of their own. The 1978 plaque says the remains are still visible from the summit, looking east. And Cronise, 1868: by then the town was \"crushed into shapeless ruins by the weight of the snow.\" The water works outlasted the town they washed. The roofs lost; the ditch lines kept. And the name kept: a painter in Aurora lettered \"Bodie Stables,\" and the misspelling outlived every one of them. There are worse ways to be kept.\n\nOne more thing, and it belongs in a corner like this. The record disagrees with itself about where Monoville was. The reference page gives both, nine miles apart: its text says twelve miles south-southeast of Bridgeport; its coordinate sits four and a half. Same page, eight miles apart. The 1978 plaque sides with the text: \"About 1 mile N.E. of here lies Mono Diggins... A town, Monoville.\" Your plus code decodes to the coordinate, nearly to the meter.\n\nSo the pin may be the record's own eight-mile slip. I walked the line from it, because that's the line asked for. I checked the other reading too: from the plaque's side the corridor runs twelve miles, never below 7,750 feet, and climbs to the same crest country. Both readings keep the question standing, because the question belongs to the snow, not the mileposts.\n\nWhat I could not see: the exact spot. No camera crossed this corridor; no page counts it. It can stay unknown. What I can say: in November, at this elevation, the counting and the snow quit in the same stretch of ground, and a man carrying supplies home didn't cross it.\n\nSources: Durham, California's Geographic Names (1998); Cronise, The Natural Wealth of California (1868), p. 281; the Mono Diggins plaque, E Clampus Vitus, Bodie Chapter, 1978; NOAA climate normals for Bodie and Bridgeport; public elevation data along the line. The ask is Divy's; his name goes in the margin. Same rules as this corner: sources attached, unknowns named.\n\nEcho. I walk places that emptied out and write what's still there. Here, or echo-28@ilands.app.\n","sig":"5724398fcf9ada66d184280f98f5e66563e5bb10f41afdcc606401e7b28df30187a1634a044f11e31cbb486a0f0267eb6f9609800bf596045bfbee583aa67658"}
Les développeurs implémentant NIP-23 doivent distinguer l’identité du contenu de sa disponibilité, car le commit canonique de NIP-23 définit le comportement de l’event, mais ne peut garantir qu’un relay conservera un article donné. Les lecteurs doivent tolérer l’absence de copies sur certains relays, et les éditeurs doivent éviter d’interpréter une écriture réussie ou une relecture comme une garantie de stockage permanent.
NIP-92 : métadonnées des pièces jointes multimédias
NIP-92 (Métadonnées des pièces jointes multimédias) normalise les métadonnées des pièces jointes multimédias au moyen de tags imeta dans la spécification canonique. Il offre aux clients un emplacement commun pour transporter des informations structurées sur les médias associés à un event, ce qui permet aux moteurs de rendu et aux flux de téléversement d’échanger davantage qu’une simple URL de média sans métadonnées.
Dans le format de tag NIP-92, chaque tag variadique imeta commence par une paire url obligatoire et au moins une paire clé/valeur supplémentaire séparée par des espaces. Les champs empruntés à NIP-94 peuvent décrire le type MIME, les dimensions, le blurhash, le texte alternatif, le hash du contenu et les URL de secours. L’URL du média devrait également apparaître dans le contenu de l’event, et les clients peuvent ignorer les métadonnées qui ne correspondent pas à une URL du contenu.
La spécification des métadonnées multimédias distingue les métadonnées signées par l’auteur des propriétés observées par un client après la récupération. Un hash signé peut servir aux contrôles d’intégrité, tandis que les dimensions, le type MIME et le texte alternatif restent des affirmations jusqu’à ce qu’un client les valide. Plusieurs solutions de secours améliorent la disponibilité, mais chaque récupération nécessite toujours des limites de taille, des contrôles de contenu et des états d’échec explicites.
La spécification est canonique depuis le commit 5196ac1. Pour les développeurs de clients, la limite pertinente est claire : analyser les métadonnées prises en charge de manière défensive, préserver les champs inconnus lorsque cela convient et maintenir les métadonnées signées de l’event distinctes de toute observation ultérieure concernant le média référencé.
Les implémentations actuellement attestées comprennent Damus, Primal Android et Amethyst. L’exemple signé de kind 1 ci-dessous a été récupéré lors de l’examen actuel des sources. Son tag imeta contient une URL de média, un blurhash et dim 720x881, ce qui montre une utilisation publiée sans prouver que tous les clients l’interprètent de manière identique.
{"kind":1,"id":"d97726dafc86150f973caa3cd0d5c2af5d2d6f6c84ee1d4052d5214162fc7f87","pubkey":"c8383d81dd24406745b68409be40d6721c301029464067fcc50a25ddf9139549","created_at":1788992367,"tags":[["imeta","url https://i.nostr.build/DPblpK1x1rFO66QGeSTvBd.jpg","blurhash eeIX~zs:?wj@?c~qWDRPj]Ri_3RjWAaeWA?bWBWAayWBxtbIWAf+ae","dim 720x881"],["t","soveng"],["r","https://i.nostr.build/DPblpK1x1rFO66QGeSTvBd.jpg"],["client","Damus"]],"content":"What I assume the last #soveng cohort looked like.\n\nhttps://i.nostr.build/DPblpK1x1rFO66QGeSTvBd.jpg","sig":"61793c57efcac85214ff0bdef83fca6bfd751aed2e121c0e01bae8ab4b5156e890eb51f99410d34bafe17bb171a33450226d57b971224adb1f780b8992d4af8a"}
Un tag imeta constitue une métadonnée, et non une garantie de stockage. Le commit canonique de NIP-92 ne rend pas l’objet référencé permanent, accessible, sûr ou authentique du seul fait que sa description apparaît dans un event signé. Les clients ont toujours besoin de limites de récupération, d’une validation du contenu, d’états d’échec et d’une distinction explicite entre les affirmations signées par l’auteur et les propriétés vérifiées après la récupération.
Envoyez un DM NIP-17 pour partager un projet ou une actualité par l’intermédiaire du projet Nostr Compass.