Nostr Compass #20
Willkommen zurück bei Nostr Compass, deinem wöchentlichen Leitfaden zu Nostr.
Diese Woche: GitWorkshop macht Git-über-Nostr zu einer vollständigeren Code-Review-Oberfläche mit einem In-Browser-PR-Merge-Button, Stars und Repository-Following, einem bandbreiteneffizienten Git-Explorer, kind 1111 Inline-Review-Kommentaren und verschlüsseltem Multi-Device-Notification-State. Routstrd startet einen lokalen Daemon, der Modellanbieter über Nostr kind 38421 Ankündigungen entdeckt und sie mit Cashu bezahlt. Getaggte Releases umfassen ngit v2.4.2, Wisp v1.0.0, grain v0.5.2 und v0.5.3, Mostro Core v0.10.0 und 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 und mehr. Unveröffentlichte Änderungen umfassen Amethyst Nests, nostream NIP-65 und NWC, FIPS Nostr-basierten udp:nat-Bootstrap, strfry-Observability, Sprout Owner-Attestierungen und Zap Cooking Recipe Packs. Neu getrackte Projekte umfassen Nostrord, Clave, Treasures.
Leitartikel
GitWorkshop liefert In-Browser-PR-Merge, Repository-Following und einen bandbreiteneffizienten Git-Explorer
GitWorkshop, Dan Conways webbasierte Kollaborationsschicht für NIP-34 Git-über-Nostr, hat diese Woche ein großes Release veröffentlicht, das den Workflow deutlich näher an das heranbringt, was Entwickler von GitHub oder GitLab erwarten, während Kommentare, Repository-Listen und Benachrichtigungen weiterhin in signierten Nostr-Events liegen.
Die wichtigste Neuerung ist ein lange erwarteter In-Browser-PR-Merge-Button für Repositories, die GRASP-Relays nutzen. Das Release fügt außerdem Stars und Repository-Following hinzu, die auf Reaktionen und NIP-51 Listen basieren, wobei angepinnte Repository-Sets als kind 10617 Events veröffentlicht werden, die über geordnete a Tags auf kind 30617 Repo-Ankündigungen zeigen. Profilseiten können jetzt eine portable Liste von Repositories präsentieren.
Ein bandbreiteneffizienter Git-Explorer ersetzt den vorherigen In-Browser-Shallow-Clone. Der neue Explorer stützt sich auf das zugrunde liegende Git-Client/Server-Protokoll, auf dem GRASP aufbaut, sodass er große Repositories verarbeiten kann, ohne den Browser zu zwingen, ein vollständiges Pack zu laden. Die Suche deckt jetzt Benutzernamen und Repository-Metadaten ab, angetrieben von NIP-50 und einer ngit-indexer Relay-Implementierung, die Repository-Ankündigungen im Netzwerk entdeckt und synchronisiert. Ein In-Browser-Workflow zur Repository-Erstellung rundet den Entdeckungs- und Onboarding-Pfad ab.
Das Review-Tooling wurde rund um einen Files-Changed-Tab, einen Per-Patch-Diff-Viewer und eine Reihe experimenteller neuer Primitive neu aufgebaut. Inline-Code-Review-Kommentare verwenden kind 1111, aufgebaut auf NIP-22: jeder Kommentar zeigt auf einen Dateipfad (f Tag), einen Commit-SHA (c Tag) und einen ausgewählten Zeilenbereich (line Tag), sodass ein Client den Kommentar an der korrekten Position in einem Diff rendern kann. Eine zweite Stufe experimenteller Primitive ist auf Autor und Repo-Maintainer beschränkt und nutzt NIP-32 Labels: einen Issue- oder PR-Betreff nach der Einreichung umbenennen, nachträglich Hashtags hinzufügen, eine versionskontrollierte CoverNote als bearbeitbare Zusammenfassung an die Spitze eines PR oder Issue heften und Inline-Code-Diskussions-Subthreads als erledigt markieren. Verdict-Events und suggestion Blöcke bleiben im Entwurfsstadium und wurden noch nicht ausgeliefert.
Der Notification-State über Geräte hinweg wird ebenfalls über Nostr synchronisiert, allerdings mit einem datenschutzfreundlichen Kniff. GitWorkshop generiert ein dediziertes Notifications-Keypair, verschlüsselt diesen nsec und speichert ihn in einem kind 30078 Event. Der Notifications-nsec signiert dann die tatsächlichen Notification-State-Events. Diese Indirektion verhindert, dass der Haupt-Signer des Benutzers mit häufigen Verschlüsselungs- und Entschlüsselungsanfragen für jede Lese- oder Archivierungsaktion überschwemmt wird, und sie hindert außenstehende Beobachter daran, leicht zu sehen, wann ein Benutzer seinen Notification-State berührt. Ein Benutzer kann Lese- und Archivierungsstatus über Geräte hinweg synchronisieren; Relays sehen nur verschlüsselte Blobs.
Routstrd startet einen lokalen Router für Inferenz über Nostr
Routstrd ist ein neuer TypeScript-Daemon, der lokalen Werkzeugen einen OpenAI-kompatiblen Endpunkt bietet und jede Anfrage an einen konkurrierenden Routstr Provider routet. Der Daemon entdeckt Provider durch Nostr kind 38421 Ankündigungen, die in Routstrs RIP-02-Spezifikation definiert sind. Er bewertet Provider dann nach Preis, Vertrauen und jüngster Leistung unter RIP-06 und sendet jede Anfrage an die aktuell beste Option.
Die Zahlung läuft über eine lokale Cashu-Wallet, die von cocod verwaltet und mit Lightning gefundet wird. Das gibt dem Client einen in Sats denominierten Abrechnungspfad, während die Provider-Entdeckung öffentlich und permissionless über Nostr-Relays bleibt. Wenn ein Provider während einer Session ausfällt, kann Routstrd auf den nächstplatzierten Knoten zurückfallen. Der Installationspfad ist bun install -g routstrd, gefolgt von routstrd onboard für Wallet- und Relay-Setup.
Die breitere Routstr-Org pflegt den Daemon, die Python-Node-Software (routstr-core), eine Chat-UI und Protokollspezifikationen. Für Benutzer wird der lokale Port zur stabilen Schnittstelle: bestehende OpenAI-kompatible Werkzeuge zeigen auf Routstrd, während der Daemon Provider-Entdeckung, Routing und Zahlung übernimmt.
Getaggte Releases
ngit v2.4.2 behebt GRASP-Relay-Erkennung für PR-Einreichungen
ngit hat v2.4.2 mit einem Fix für die Repository-GRASP-Server-Erkennung veröffentlicht, wodurch PR-Einreichungen auf dem Happy Path bleiben, wenn ein Vorschlag das PR-kind verwendet. Beachte, dass ngit derzeit standardmäßig das Patch-kind für die meisten Änderungen verwendet, sofern sie nicht groß sind; der Maintainer arbeitet daran, den Standard zu ändern. v2.4.1, das früher in der Woche veröffentlicht wurde, behob fatal Fehler während Clone und Fetch, wenn die Git-Daten eines offenen PR auf den festgelegten Git-Servern des Repositorys nicht verfügbar waren.
Wisp v1.0.0 verlässt die Beta
Wisp, ein Kotlin- und Jetpack-Compose-Android-Client mit Fokus auf Relay-Routing, Datenschutz und einer schlanken nativen UI, veröffentlichte v1.0.0 und folgte mit v1.0.2. Der 1.0.0-Meilenstein sammelt den Normie-Mode Fiat-Denominierungsschalter, den For-You-Feed, die NIP-29 relay-basierte Gruppenkonfiguration und das NIP-65 Relay-List-Broadcasting, die in Newsletter #19 behandelt wurden. v1.0.2 fügt Unterstützung für Android 15 16-KB-Seitengröße, einen QR-Scan-Tab im Drawer-Sheet, einen Download-Button für Inline-Video-Kontrollen und Fixes für die Performance der Notification-Liste hinzu.
grain v0.5.2 behebt WebSocket-Lockup, v0.5.3 setzt Politur fort
grain, das Go-Relay von 0ceanSlim, veröffentlichte v0.5.2 als kritischen Hotfix für ein WebSocket-Lockup, das in v0.5.0 eingeführt wurde, und folgte dann mit v0.5.3. Das Lockup führte dazu, dass Verbindungen unter bestimmten Filter- und WebSocket-Pfaden hingen, sodass Betreiber auf v0.5.1 oder v0.5.0 upgraden sollten. grain trackt alle wichtigen Nostr-Event-Kategorien, stellt NIP-11 Relay-Informationen bereit, unterstützt Whitelist/Blacklist-Zugriffskontrolle, Per-kind-Rate-Limits, ein Web-Dashboard und eine Go-Client-Bibliothek, die in der v0.5.x-Linie hinzugefügt wurde.
Mostro Core v0.10.0 und Mostro Mobile v1.2.5 übernehmen NIP-59 Dual-Key Gift Wrap
Mostro Core v0.10.0 fügt das neue NIP-59 Gift-Wrap-Modul mit getrennten Identity- und Trade-Keys hinzu. Frühere Transportcode verwendete einen einzigen Identity-Key sowohl für Trade-Identity als auch für Gift-Wrapping. v0.10.0 trennt die stabile Trade-Identity vom ephemeren Wrapping-Key, sodass jeder Trade einen frischen Transport-Key verwenden kann, während die für das Trade-Protokoll benötigte Identity erhalten bleibt. Die Daemon-Integration landet über Mostro PR #718, und mostro-cli PR #165 bringt dieselbe Migration in den Command-Line-Client.
Mostro Mobile v1.2.5 wird zusammen mit der Protokollarbeit ausgeliefert. PR #581 lässt Taker Angebote nach dem Kontoalter des Makers filtern und gibt Benutzern eine Möglichkeit, neu erstellte Maker-Accounts im Orderbuch zu vermeiden. PR #580 korrigiert Rollen-Labels bei den Details stornierter Aufträge, und PR #576 räumt die Buttons für die kooperative Stornierung auf.
marmot-ts v0.5.0 liefert adressierbare KeyPackages
marmot-ts veröffentlichte @internet-privacy/marmot-ts@0.5.0, das erste geplante Breaking-Change-Release für den TypeScript-Marmot-Client. PR #68 fügt Unterstützung für adressierbare KeyPackages hinzu: KeyPackageManager kann jetzt sowohl legacy kind 443 als auch neue kind 30443 KeyPackage-Events verarbeiten. Das Release entfernt KeyPackageStore und die Group-State-Storage-Klassen und ersetzt sie durch generische Key-Value-Stores, die an KeyPackageManager und MarmotGroup übergeben werden. Es verschiebt außerdem Einladungs- und Gruppenverwaltung auf MarmotClient.invites und MarmotClient.groups, sodass direkte Embedder vor dem Upgrade Konstruktor- und Storage-Änderungen benötigen.
CruxCoach v0.1.3 liefert verschlüsseltes Backup für Kletterdaten mit Nostr und Blossom
CruxCoach ist eine neue Open-Source-Android-App für Kilter-Board-Kletterer. Das Kilter Board ist eine interaktive Trainingswand, deren Griffe über Bluetooth aufleuchten, um Routen anzuzeigen. Die App wurde am 14. April veröffentlicht und erreichte am 26. April v0.1.3.
v0.1.3 fügt ein optionales verschlüsseltes Cloud-Backup hinzu. Das CruxCoach-Konto eines Benutzers ist ein Nostr-Keypair, und der private Schlüssel dient gleichzeitig als Eingabe für den lokalen Backup-Verschlüsselungsschlüssel. Die App verschlüsselt Kletterdaten auf dem Gerät und spiegelt den Chiffretext auf Blossom-Storage-Server (blossom.primal.net und nostr.download). Delete-Remote-Aktionen rufen den Blossom-Cleanup-Pfad auf. Über das Backup hinaus verwendet CruxCoach NIP-46 Remote-Signing für Amber-Unterstützung, NIP-17 private DMs für den In-App-Entwicklerkontakt, NIP-65 Relay-Listen zur Relay-Entdeckung und Vitor Pamplonas Quartz-Bibliothek für Nostr-Plumbing. Benutzer können sie über Zapstore oder direkte Codeberg-APKs installieren.
Meiso v1.3.0 fügt Subtasks, Blossom-Anhänge und NIP-89-Tagging hinzu
Meiso ist ein minimalistischer Flutter-Task-Manager für Android, der Aufgaben als NIP-44 verschlüsselte kind 30078 Anwendungsdaten auf Nostr-Relays speichert. v1.3.0, veröffentlicht am 6. April, fügt Subtasks mit Eltern-Kind-Beziehungen, Task-Links für blocks/blocked-by/related-to/duplicate-of, Bildanhänge über Blossom und NIP-96 HTTP-File-Upload-Endpunkte, einen NIP-89 client Tag für empfohlene Anwendungen bei veröffentlichten Events und ein Go-Command-Line-Sync-Tool hinzu. v1.3.0 behebt außerdem das Cold-Start-Relay-Verhalten und die Wiederverwendung des Amber-Clients.
NoorNote, Nostria, Nostr Calendar, nos2x-fox und Bibliotheks-Releases
NoorNote veröffentlichte v0.8.7, v0.8.8 und v0.8.9. Diese Releases beheben das Handling von Bild- und Video-Klicks in zitierten Reposts, fügen Lightbox-Unterstützung für Bilder in Long-Form-Artikeln hinzu und beheben den leeren Desktop-Startbildschirm. Nostria veröffentlichte v3.1.29, v3.1.30 und v3.1.31, die Bildkompression im Artikel-Editor, einen Wallet-USD-Schalter, Promotional-Card-Kontrollen, PDF-Unterstützung und Politur des Mobile-Layouts hinzufügen.
Nostr Calendar v1.4.1 entkoppelt die Kalender-Event-Veröffentlichung von der Kalender-Listen-Verwaltung und behebt das Einladungs-Tracking. nos2x-fox v1.19.0 fügt benutzerdefinierte Autorisierungszeiträume für Firefox NIP-07 Browser-Signing-Grants hinzu. nostr-double-ratchet v0.0.97 liefert neue Binaries. nostr-wot-sdk 0.9.0 mountet NostrSessionProvider standardmäßig, und nostr-tools PR #535 fügt Multi-Relay-Parsing-Unterstützung für NIP-47 Wallet-Connect-Strings hinzu.
Spät in der Woche veröffentlichte Amber v6.1.0-pre1 ein Pre-Release mit einem verbesserten Connect-New-App-Layout, Signer-Dialog-Fixes, verbessertem Handling der Benachrichtigungsberechtigungen und einer überarbeiteten Kontoauswahl. nostr-vpn v0.3.14 veröffentlichte einen frischen Build mit macOS Apple Silicon, Linux und Windows Artefakten. Bitcredit Core v0.5.7-hotfix-1 und v0.5.8 lieferten Back-to-Back-Fixes für ein Validierungsproblem verwaister Blöcke. Surveil v0.1.6 brachte Politur für die mobile UI und eine überarbeitete About-Seite; das Projekt selbst wird unten vorgestellt.
applesauce 6.0.0 entfernt Legacy-Event-Factories und fügt Blossom-URI-Parsing hinzu
applesauce, hzrd149s TypeScript-Nostr-Toolkit, veröffentlichte einen 6.0.0-Release-Train über das Monorepo hinweg. applesauce-core@6.0.0 entfernt die Legacy-Klasse EventFactory und die alten Helpers buildEvent, modifyEvent und createEvent und drängt Aufrufer zu den neueren Factory-Klassen in applesauce-core/factories und applesauce-common. Es fügt außerdem IP-Adressen- und Localhost-Handling zum Link-Parsing hinzu, BUD-10 Blossom-URI-Regular-Expressions und neue Observable-Helpers wie timeoutWithIgnore, combineLatestBy, combineLatestByIndex und combineLatestByKey.
Paket-Level-Releases füllen die Nostr-spezifischen Teile aus. applesauce-content@6.0.0 fügt BUD-10 Blossom-URI-Nodes für Text und Markdown hinzu und gibt Renderern eine erstklassige Möglichkeit, Blossom-Referenzen in Inhalten zu parsen. applesauce-actions@6.0.0 fügt Basis-Factory-Klassen für NIP-51 Listen für Relays, Benutzer und Items hinzu und macht die Listenkonstruktion weniger ad hoc. applesauce-wallet-connect@6.0.0 exponiert WalletConnect.connectURI, sodass Apps direkt auf eine bestehende NIP-47 Wallet-Connect-URI zugreifen können.
Unveröffentlichte Änderungen
Amethyst treibt Nests-Audio-Räume mit MoQ-Interop-Tests voran
Amethyst mergte diese Woche mehrere Nests-fokussierte PRs, die auf dem Media over QUIC Audio-Room-Stack der letzten Woche aufbauen. PR #2622 fügt ein Cross-Client-Interop-Harness hinzu, das den Amethyst-MoQ-Client gegen die Referenz-Web-Implementierung ausführt. Ziel ist es, Android/Browser-Wire-Level-Divergenzen zu erkennen, bevor sie Benutzer treffen. PR #2625 verbessert Picture-in-Picture-Sprecher-Fokus und Verbindungsstatus, während PR #2620 Avatare, Mute-Status und Speaking-Status im Teilnehmer-Grid klärt. Spät in der Woche behebt PR #2634 IME-Padding und Window-Insets in der Full-Screen-Nest-Ansicht und PR #2635 fügt presence-basierte Frische-Filterung zum Nests-Feed hinzu. Separat entfernt PR #2627 Amethysts benutzerdefinierte C-secp256k1-Implementierung und migriert zu libschnorr256k1.
nostream fügt NIP-65 Relay-Listen-Unterstützung und NWC-Zahlungen hinzu
nostream mergte drei bemerkenswerte PRs nach dem 53-PR-Relay-Sprint der letzten Woche. NIP-65 Relay-Listen-Metadaten-Unterstützung landet in PR #585, sodass das Relay kind 10002 Relay-Listen-Events indexieren und ausliefern kann. Ein Nostr-Wallet-Connect-Zahlungsprozessor folgt in PR #539 und fügt einen Pay-to-Relay-Pfad hinzu. Das Verbindungs-Cleanup verbessert sich in PR #438, der einen Dead-Connection-Bug schließt, bei dem Sockets mit aktiven Subskriptionen nicht abgeräumt wurden, was zu einer Drift der Subskriptionszahlen auf lang laufenden Instanzen führte.
FIPS fügt Nostr-basierten udp:nat-Bootstrap hinzu
FIPS, das Free Internetworking Peering System, das zuvor in Newsletter #6 und Newsletter #10 behandelt wurde, mergte PR #53 mit Nostr-basiertem udp:nat-Bootstrap. Die Änderung lässt Nodes Nostr-Adverts veröffentlichen, verschlüsselte Offer/Answer-Signaling austauschen, öffentliche Adressen über STUN entdecken, UDP-Hole-Punching durchführen und den gepunchten Socket in den normalen FIPS-Transport-Stack übergeben. Die Implementierung bindet Signal-Payload-Identitäten an den tatsächlichen Nostr-Sender, fragt konfigurierte DM- und Advert-Relays für den Inbox-Lookup ab und rollt fehlgeschlagene adoptierte Traversal-Übergaben zurück, sodass verwaiste UDP-Transporte nicht am Leben bleiben. Dies ist die Nostr-Ankündigungs- und NAT-Traversal-Arbeit, die im kanonischen Repo jmcorgan/fips zu verfolgen ist.
strfry fügt Per-Connection-Observability hinzu
strfry mergte PR #214 und fügt Per-Connection-Observability und Verbindungs-Level-Metriken hinzu, die über Prometheus exportierbar sind. PR #204 normalisiert Prometheus-Labels, und PR #215 fügt einen Community-Integrations-Abschnitt zur Dokumentation hinzu, der Namecoin-Identity-Projekte abdeckt, die auf strfry aufbauen.
Sprout fügt Owner Attestation und Multi-Workspace-Unterstützung hinzu
Sprout, Blocks Nostr-Client, mergte PR #406 und implementiert NIP-OA (Owner Attestation). Das Feature gibt einem autonomen Agenten einen kryptografischen Beweis, dass ein spezifischer menschlicher pubkey seine Aktionen autorisiert hat. PR #409 fügt Multi-Workspace-Unterstützung zur Desktop-App hinzu, PR #411 fügt #channel-Autocomplete zum mobilen Compose hinzu, und PR #410 schließt ein Race-Fenster, das aktive Channel-Nachrichten fallenlassen konnte. PR #413 führt NIP-RS für die Cross-Device-Read-State-Synchronisation ein, und die Follow-up-PRs PR #420 und PR #422 verdrahten diesen Read-State in die mobilen Unread-Badges.
Zap Cooking fügt Recipe Packs, Lösch-Anfragen und Bunker-Login hinzu
Zap Cooking mergte eine produktive Woche der Rezeptveröffentlichungsarbeit. NIP-09 Lösch-Anfragen für die eigenen Recipe Packs eines Benutzers landen in PR #367. Die Veröffentlichungszuverlässigkeit verbessert sich durch PR #366, der jedes neue Rezept auf das Garden-Relay zwingt und eine Retry-Queue für das gemeinsame Rezept-Set hinzufügt. One-Click-authored Pack-Publishing landet in PR #365, und PR #331 fügt NIP-46 Bunker-Login-Unterstützung hinzu.
Whitenoise-rs verschlüsselt seine lokale Datenbank
whitenoise-rs mergte PR #758 und fügt SQLCipher-Verschlüsselung für die On-Disk-Whitenoise-Datenbank hinzu. Das schließt eine langbestehende At-Rest-Sicherheitslücke für den Marmot-Daemon-Stack. PR #775 exponiert die erforderlichen Gruppenfähigkeiten, PR #772 migriert Gruppen-Medien-Operationen auf sessionbesessene MediaOps, und PR #773 extrahiert einen SharedServices-Holder als Teil des Session-Ops-Refactors. Auf der mobilen Seite aktiviert whitenoise PR #577 Boot-Auto-Restart für den Android-Foreground-Service und behebt den Fall, dass der Daemon nach einem Geräteneustart nicht zurückkommen würde.
Neu getrackt und entdeckt
Nostrord: ein NIP-29-Client mit Kotlin Multiplatform und WASM
Nostrord ist ein neuer NIP-29 Gruppen-Chat-Client, der auf den Discord-Ersatz-Anwendungsfall abzielt. Gruppen leben auf Nostr-Relays mit relay-erzwungener Mitgliedschaft, Rollen, Moderation und Zugriffskontrolle, sodass der Gruppenzustand vom ausgewählten NIP-29-Relay gehostet wird. Der Client-Entwickler kontrolliert keine separate Anwendungsdatenbank für diese Gruppen. Die Web-App läuft unter web.nostrord.com und ist mit Kotlin Multiplatform gebaut, das zu WebAssembly kompiliert, mit nativen Android-, iOS- und Desktop-Builds in Entwicklung. Nostrord ist ein OpenSats Grant-Empfänger und interoperiert mit denselben NIP-29-Relays, die von Flotilla, Chachi und 0xChat verwendet werden.
Clave bringt NIP-46 Remote-Signing per APNs auf iOS
Clave ist ein iOS-Remote-Signer in der Beta, der Nostr-Events signiert, wenn die App nicht geöffnet ist. Der private Schlüssel bleibt im iPhone-Keychain. Wenn ein Client eine NIP-46 Remote-Signing-Anfrage sendet, liefert ein serverseitiger Proxy eine Apple Push Notification aus und weckt eine Notification Service Extension für bis zu 30 Sekunden. Diese Extension entschlüsselt die Anfrage mit NIP-44 Verschlüsselung, signiert mit dem Keychain-Schlüssel und veröffentlicht die Antwort. Die Device-Token-Registrierung nutzt NIP-98 HTTP-Auth, um Token-Hijacking zu verhindern. Clave unterstützt bunker:// und nostrconnect:// Pairing, Per-Client-Vertrauensstufen, Per-kind-Overrides und wurde mit Nostur und noStrudel getestet.
Treasures: dezentrales Geocaching auf Nostr
Treasures ist eine Geocaching-Plattform, bei der Caches und Funde signierte Nostr-Events sind. Cache-Ersteller veröffentlichen adressierbare kind 37516 Events mit GPS-Koordinaten. Finder loggen die Entdeckung, indem sie einen QR-Code scannen, der am physischen Cache angebracht ist; der Code kodiert den Ersteller-pubkey, den d Tag des Caches und einen Verifikations-Private-Key, der als Beweis des physischen Besuchs dient. NIP-57 Zaps können von Findern zu Cache-Erstellern fließen, und die Live-App ist unter treasures.to erreichbar.
smesh v0.5.1: selbstgehostetes Nostr-Relay, Client und Signer in einem Stack
smesh ist ein selbstgehosteter Nostr-Stack, geschrieben in Moxie, einer benutzerdefinierten Sprache, die von mleku aus Go und TinyGo abgeleitet wurde. Der Stack liefert eine native Relay-Binary mit HTTP-, WebSocket-, AUTH-, Such- und Blossom-Unterstützung; sm3sh, einen Web-Client, der zu ES-Modulen kompiliert wird; und eine Browser-Signer-Erweiterung mit NIP-07 Browser-Signing plus NIP-04 und NIP-44 Verschlüsselungsunterstützung. Jüngste Arbeit umfasst MLS (RFC 9420) Gruppen-Messaging in v0.5.0, negentropy Set-Reconciliation für Relay-Sync und eine Web-of-Trust-Graph-Engine. Der Code liegt in mlekus selbstgehosteter Forge auf git.smesh.lol, gebaut mit seinem eigenen git-web-Tool. Das verwandte gitea-nostr-auth Repo ist eine OAuth2/OIDC-Brücke für Gitea: Benutzer authentifizieren sich mit einem NIP-07 Browser-Signer, die Brücke entdeckt Relays über NIP-65 und Gitea erhält standardmäßige OIDC-Identity-Claims.
Surveil: ein Magic: The Gathering Deckbauer auf Nostr
Surveil ist ein Nostr-Client für Magic: The Gathering Spieler, mit dem Benutzer Karten suchen, Decks bauen, Papierkarten auf Android mit On-Device-ML-Kit-OCR scannen und Decks im Netzwerk teilen können. Decks werden als adressierbare kind 37381 Events veröffentlicht, und die Deck-Event-Spezifikation ist in der NIP.md des Projekts dokumentiert. Die soziale Schicht ist aus standardmäßigen Nostr-Primitiven aufgebaut: NIP-22 (kind 1111) Threaded-Comments, die auf jedes Deck beschränkt sind, NIP-25 (kind 7) Reaktionen, NIP-78 (kind 30078) Profildaten für Spieler-Homes, kind 3 Follow-Feeds und Forks, die einen a Tag zurück zum Original-Deck tragen. v0.1.6 wurde diese Woche mit Politur der mobilen UI, Verbesserungen des Life Counters, einer überarbeiteten About-Seite und einer Relay-Pille am Deck-Hero-Banner ausgeliefert. Die Web-App läuft überall dort, wo statisches HTML ausgeliefert wird, der Android-Build wird über Zapstore ausgeliefert, und kind 37381 Events werden auch nativ von Ditto als Magic-Decks indexiert. Das Repo liegt auf GitLab unter chad.curtis/surveil.
Kleinere Ergänzungen: Fundstr, Nod City, deploy-nsite-to-pages und null–nostr
Fundstr ist eine Creator-Funding-Plattform auf Nostr, die Cashu-Ecash für einmalige und wiederkehrende Zusagen verwendet, mit Creator-Tier-Definitionen und Nostr-DMs. Nod City ist eine Bitcoin-Service-Bewertungsseite, auf der Bewertungen signierte Nostr-Events sind und Rezensenten Zaps empfangen können; ein öffentliches Quellcode-Repo wurde nicht gefunden. deploy-nsite-to-pages ist eine GitHub Action, die eine nsite über nsyte download auf GitHub Pages spiegelt, mit Unterstützung für root kind 15128 und named kind 35128 nsites. null–nostr, ebenfalls in den NIP-34-Daten dieser Woche entdeckt, ist der Client, der in der jüngsten OpenSats-Welle als Nurunuru behandelt wurde; er unterstützt MLS-Gruppen-Messaging, Amber, NIP-50-Suche, NIP-70 geschützte Posts, ProofMode-Badges und Zapstore-Distribution.
FIPS ist kein neues Projekt für Compass. Es wurde in Newsletter #6 und Newsletter #10 behandelt. Die Datenbank zeigt jetzt auf das korrekte kanonische Repo, jmcorgan/fips, und die NIP-34-Entdeckung dieser Woche brachte auch verwandte Git-über-Nostr-Mirrors wie fips und awesome-fips ans Licht.
Protokollarbeit
NIP-Updates
Jüngste Vorschläge und Diskussionen im NIPs-Repository:
Diese Woche gemerged:
NIP-34 Git-Repositories: ungenutzte refs-Tag-Erweiterung entfernen (PR #2325): Entfernt eine
refsTag-Erweiterung aus NIP-34, die definiert, aber ungenutzt war. Das Cleanup reduziert die Implementierungsambiguität für Git-über-Nostr-Tools.NIP-34 Git-Repositories: falschen NIP-09-Anspruch entfernen (PR #2326): Entfernt einen falschen Anspruch, dass NIP-09 Lösch-Events den Repository-Zustand zurücksetzen können. NIP-09-Löschung ist eine clientseitige Event-Lösch-Anfrage, kein Repository-State-Machine. Die Korrektur verhindert, dass NIP-34-Implementierer Lösch-Hinweise als autoritativ für Repo-Resets behandeln.
Offene und implementierungsgetriebene Arbeit:
GitWorkshop kind
1111Inline-Review-Kommentare: Das Inline-Code-Review-Kommentar-kind ist in derNIP.mdvon GitWorkshop dokumentiert und jetzt aktiv im Einsatz, wurde aber noch nicht als formales NIP vorgeschlagen. Verdict-Events (kind7321) undsuggestionBlöcke bleiben im Entwurf und wurden noch nicht ausgeliefert. Implementierungsfeedback von GitWorkshop und ngit wird bestimmen, ob die Formen ein eigenständiges Git-Review-NIP werden oder eine Anwendungskonvention bleiben, die auf NIP-34 aufgesetzt ist.Nostr Mail Core und Nostrmon: Zwei neue benutzerdefinierte NIP-Entwürfe zirkulierten diese Woche. Nostr Mail Core schlägt kind
1301für RFC-2822-E-Mail-Inhalte vor, umschlossen von NIP-59 für private Zustellung und über NIP-05-aufgelöste Bridge-pubkeys mit Legacy-E-Mail verbunden. Nostrmon skizziert adressierbare Event-kinds für Regionen, Karten, Kreaturen, NPCs, Spieler-Saves und Items. Beide bleiben benutzerdefinierte Entwürfe, keine gemergten NIPs.NIP-67: EOSE Completeness Hint (PR #2317): Der Vorschlag iteriert weiter über das Hinzufügen eines positiven Completeness-Markers zu
EOSE, wodurch Relays “gespeicherte Events vollständig ausgeliefert” von Legacy-EOSE-Fällen unterscheiden können, in denen das Relay keinen Completeness-Anspruch erhebt.
Sechs Nostr-Aprile
Der April gibt einen sauberen Querschnitt des Nostr-Entwicklungspfads: das Protokolldokument in 2021, frühe Client-Arbeit in 2022, die Post-Damus-Anwendungswelle in 2023, private Nachrichten und Git-über-Nostr-Arbeit in 2024, Blossom und Relay-Listen-Cleanup in 2025 und adoptionsfokussierte Client-Grants in 2026.
April 2021: das Protokolldokument vor dem NIPs-Repo
Fiatjaf veröffentlichte den ursprünglichen Nostr-Artikel, “Notes and Other Stuff Transmitted by Relays”, am 20. November 2020. Dieser erste Text enthielt bereits die Kernform, die das Protokoll immer noch definiert: Benutzer signieren Events mit Schlüsseln, veröffentlichen sie an Relays und lesen von Relays ihrer Wahl. Das nostr-protocol/nostr Commit-Log zeigt keine Commits zwischen dem 1. und 30. April. Aktivität liegt auf beiden Seiten: Commits vom März 2021 fügten frühe “nostwitter”-Links und einen kind-Filter hinzu, während der Mai 2021 NIP-02 umwidmete und die NIP-Autorenschaft hinzufügte.
Im April 2021 gab es keinen öffentlichen Client-Markt, kein sichtbares Relay-Netzwerk und kein NIPs-Repo. Das Protokoll lebte immer noch als kleines Dokument und ein paar Experimente. Nostr war noch kein soziales Netzwerk oder eine Entwicklungsplattform geworden. Es war immer noch ein Relay/Key/Event-Modell, das auf seine erste nachhaltige Contributor-Welle wartete.
April 2022: NIPs lebten noch im Haupt-Repo
Der April 2022 war der letzte Monat, bevor NIPs aus dem Haupt-Repo nostr-protocol/nostr ausgegliedert wurden. Da die Aufteilung noch nicht stattgefunden hatte, hatte das dedizierte nostr-protocol/nips Repo keine April-Pull-Request-Historie. Im Haupt-Repo landeten drei April-Commits: “Update readme to add nip12” am 8. April von goswami1999, “add kinds list” am 25. April von jb55 und “add js formatting to sample code” am 28. April von steliosrammos.
Auch die Client-Arbeit begann Gestalt anzunehmen. Damus-Commits aus April 2022 fügten frühes Chatroom-Verhalten, Profil-Handling und App-Icons hinzu, während nostr-tools zum JavaScript-Bibliothekspfad für frühe Clients und Experimente wurde. Auf der Protokollseite gab NIP-12 Generic-Tag-Queries der Tag-Suche einen dokumentierten Platz, die kinds-Liste bewegte Nostr in Richtung eines Registry-Modells, und bessere JavaScript-Beispiele machten die Spezifikation für Client- und Bibliotheksautoren einfacher zu implementieren. Am 1. Mai verschob fiatjaf die NIPs in das dedizierte Repo. Der April 2022 war der letzte Monat der ursprünglichen Single-Repo-Ära.
April 2023: Post-Damus-Anwendungsexpansion
Der April 2023 kam drei Monate nachdem Damus am 31. Januar 2023 im iOS App Store gestartet war und nachdem Jack Dorsey seinen Nostr Public Key gepostet hatte. Das Netzwerk hatte gerade seine erste große öffentliche Wachstumswelle absorbiert. Clients wie Damus, Snort, Iris, Coracle und Amethyst waren aktiv, während Relay-Betreiber lernten, was ein größerer sozialer Graph mit den Annahmen zu Bandbreite, Spam, Suche und Moderation machte.
Der April 2023 hatte einen gemergten NIPs-PR: PR #456, gemerged am 17. April, der NIP-19 bech32-Entity-Links zur NIP-21-URI-Behandlung hinzufügte. Die umliegenden Commits zeigen den Anwendungsdruck hinter der Protokollarbeit. Der April 2023 sah Arbeit an NIP-45 COUNT, event-spezifischen Zap-Markern, NIP-15 Marketplace, NIP-26 Delete-Delegation-Semantik, NIP-94 File-Metadaten, NIP-47 Wallet-Connect-Error-Handling und NIP-30 Custom Emoji. Die Contributor-Liste hatte sich erweitert und umfasste fiatjaf, staab, pablof7z, Semisol, CodyTseng, sethforprivacy, mikedilger, AsaiToshiya, alexgleason, martindsq, frbittencourt und arkin0x.
Damus, Snort, Iris, Coracle und Amethyst waren keine Demos rund um eine Spezifikation mehr; sie waren Produktionsclients, die sich mit Onboarding, Feeds, Spam, Zaps, Medien und Relay-Auswahl beschäftigten. Die Protokollarbeit vom April 2023 liest sich wie das Backlog, das diese Clients erstellt haben: Zaps, Marketplaces, File-Metadaten, Counting, Emoji und Identity-Links haben die Spezifikation alle über einfache Notes und Follows hinausgeschoben.
April 2024: private Nachrichten, Git-über-Nostr und Maintainer-Support
Der April 2024 hatte zwei NIP-PR-Merges. PR #1167, gemerged am 10. April, behob verwirrende Terminologie in NIP-46 Remote-Signing, wo Clients und Signer eine exakte Sprache für angefragte und autorisierte Aktionen benötigen. PR #1108, gemerged am 17. April, erweiterte NIP-34 Git-Repositories mit Status-Events, Klärungen, optionalen Maintainern, Repo-Identifikatoren und Discoverability-Tags. Dieser Schritt machte Git-über-Nostr für ngit und später GitWorkshop praktikabler.
NIP-17, früher NIP-24, landete am 24. April als sealed gift-wrapped Nachrichten für private DMs und kleine Gruppen-Chats. Client- und Bibliotheksarbeit lief parallel: Amethyst, Primal, Gossip, nostr-tools, NDK und rust-nostr waren alle im selben Zeitraum aktiv.
OpenSats kündigte im April 2024 auch langfristige Unterstützung für Nostr-Entwickler an: PabloF7z am 9. April, Stuart Bowman am 12. April und hzrd149 am 15. April. Diese Grants verschoben die Finanzierung von isolierten Projekt-Grants hin zu nachhaltiger Wartung von Relays, Bibliotheken und Client-Infrastruktur.
April 2025: dichte NIP-Bereinigung und Blossom-Formalisierung
Der April 2025 war der dichteste Protokollmonat in dieser Retrospektive, mit sechzehn gemergten NIPs-PRs. Der Monat begann mit PR #1846, der Blockchain-Transaktionen und -Adressen zu NIP-73 hinzufügte, und PR #1865, der NIP-C0-Tags zur Tabelle der standardisierten Tags hinzufügte. Er ging weiter mit PR #1801 und PR #1889, die beide die Anleitung zur Republikation von kind 10002 Relay-Listen verbesserten, und PR #1879, der NIP-65 verkleinerte und klärte.
PR #1822 fügte NIP-B7 für Blossom-Interaktion hinzu und gab Nostr-Clients und Blossom-Servern nach mehr als einem Jahr informeller Praxis eine kanonische Koordinationsschicht. PR #1051 deprecatete NIP-26, die Spezifikation zur delegierten Event-Signierung. NIP-26 war schwierig sicher zu implementieren gewesen und war weniger attraktiv geworden, als NIP-46 und andere Signer-Muster reifer wurden.
Der Rest des Monats kombinierte Bereinigung mit Anwendungserweiterung: PR #1882 fügte Datenschutzrichtlinien- und Nutzungsbedingungsfelder zu NIP-11 hinzu, PR #1849 erweiterte kind 39701 Web-Bookmarks unter NIP-B0, PR #1891 fügte dieses Bookmark-kind zur README hinzu, und PR #1895 fügte NIP-B0 standardisierte Tags hinzu. OpenSats kündigte am 16. April seine elfte Welle der Nostr-Grants an und finanzierte Swae, HAMSTR, Vertex, Nostr Double Ratchet und Nostr Game Engine. Primal, Coracle, noStrudel, nostr-tools, NDK und rust-nostr lieferten in diesem Zeitraum ebenfalls aus, sodass die Protokollbereinigung neben aktiver Client- und Bibliotheksarbeit stand.
April 2026: NIP-34-Härtung, Badges und adoptionsfokussierte Grants
Der April 2026, der Monat, mit dem diese Ausgabe abschließt, hatte vier gemergte NIPs-PRs. Der erste war PR #2276, gemerged am 1. April, der NIP-58 Profile Badges auf kind 10008 änderte und kind 30008 Badge-Sets hinzufügte, wodurch Badge-Zuweisung und Badge-Sammlungen komponierbarer wurden. Eine zweite Usability-Änderung für Git-über-Nostr kam in PR #2312, gemerged am 10. April, die nostr:// Clone-URL-Semantik zu NIP-34 hinzufügte. Die Bereinigungen vom 25. April, PR #2325 und PR #2326, entfernten ungenutzte und falsche NIP-34-Sprache.
Verwandte Commits schärfen dieselben Oberflächen. Am 22. April fügte fiatjaf eine Blossom-Server-Liste zu NIP-51 hinzu und passte die NIP-29-Metadaten-Bearbeitung an das PUT-Style-Verhalten von Flotilla an. Am 26. April benannte er NIP-5A zur Klarheit um. Der April 2026 konzentrierte sich darauf, bereits genutzte Protokolloberflächen einfacher zu implementieren und schwerer fehlzuinterpretieren zu machen.
OpenSats kündigte am 8. April seine sechzehnte Welle der Nostr-Grants an und unterstützte Amethyst Desktop, Nostr Mail, Nostrord, Nurunuru (null–nostr) und eine HAMSTR-Erneuerung: Desktop-Clients, E-Mail-ähnliches Messaging, Gruppen-UX, japanisches Onboarding und Off-Grid-Konnektivität.
Danke fürs Lesen von Nostr Compass #20. DM uns auf Nostr mit Tipps, Korrekturen oder neuen Projekten, die wir behandeln sollen.