Nostr Compass #46
Deze week: Mostro voegt ondertekende identiteitsherbinding toe. Amethyst brengt privépeilingen naar Marmot-groepen en versleutelde synchronisatie van instellingen tussen apparaten. swift-nostr levert een controle die weigert events te ondertekenen waarvan de publieke sleutel niet overeenkomt met die van de signer. We sluiten af met Zes jaar Nostr-oktobers, 2021–2026.
Hoofdverhalen
Mostro
Mostro, de via Nostr gecoördineerde peer-to-peer-ruildaemon, bracht 0.20.1 uit. Deze release voegt ondertekende identiteitsherbinding toe, die in het nummer van vorige week nog als niet geïmplementeerd werd beschreven, en levert de reputatie-exports mee die eerder alleen in de broncode stonden. De gebonden identiteit ondertekent een autorisatie voor eenmalig gebruik die de node en de nieuwe identiteit noemt en hoogstens een uur geldig is. Vervolgens legt de daemon het event-ID vast en schakelt hij over met een compare-and-swap, zodat een mislukte handtekening of een verloren race niets verandert. Operators beschikken daarnaast over een geaudite RPC die alleen via loopback bereikbaar is en een auth-token en een reden vereist. Attestaties die al zijn uitgegeven, worden door herbinding niet ingetrokken.
Latere merges zijn niet bevestigd in een release. Een optionele provider met een vaste USD-peg voegt USDT, USDC en DOC alleen aan de Nostr-feed mostro-rates toe als de operator hem inschakelt. Netwerkproviders en via relays doorgegeven muntkoersen zetten hem niet impliciet aan. Een vervolgwijziging hernoemt de provider en de bijbehorende configuratiesleutel naar pegged, ter vervanging van de nog niet uitgebrachte sleutel stablecoins. Ook noteert hij BTC, LBTC en RBTC tegen een vaste 1:1 in sats en publiceert hij de koersen als events van kind 30078. Met deze geconfigureerde peg-aannames blijven de peg en de afwikkeling ongegarandeerd. Live controles van de peg vallen buiten dit mechanisme. Standaard staat de provider uit. Geaccepteerde valuta bepalen nog steeds welke orders worden toegelaten; werk aan de client, het protocolboek en de peg-bewaking staat hier los van. Timelocks voor borgen lopen nu los van de escrow. De geadverteerde vervaltijd van orders wordt begrensd, en het venster om een order in het orderboek aan te nemen sluit voordat een borg kan verlopen. Bestaande makerborgen van 144 blokken verlopen bij de upgrade, en die orders moeten opnieuw worden aangemaakt. Lopende transacties en de Cashu-modus merken hier niets van, maar sommige operatorconfiguraties weigeren te starten totdat de timelock van de borg is aangepast.
Nostr WoT-extensie
De Nostr WoT-extensie, een browsersigner met web-of-trust-functies, bracht 0.8.15 uit met een optie om de herstelsleutel aan te maken uit 256 bits eigen entropie van de gebruiker, verkregen met dobbelstenen of munten. Dobbelsteenworpen worden gehasht met SHA-256 en muntworpen worden als ruwe bits gebruikt, in een geïsoleerd tabblad dat de herstelzin niet toont. Wanneer relays onbereikbaar zijn, krijgt de onboarding nu een time-out. Versie 0.8.16 voegde doorlopende toestemmingen toe voor relay-authenticatie (NIP-42), zodat gebruikers AUTH één keer kunnen goedkeuren voor alle relays op een site of voor elke verbonden site (implementatie van relay-authenticatie). Weigeringen per relay of per site gaan boven deze toestemmingen, en intrekkingen worden opnieuw gecontroleerd voordat verzoeken in de wachtrij worden afgehandeld. Brede scopes zijn altijd een expliciete keuze van de gebruiker en gelden nooit voor HTTP Auth (NIP-98). De limiet van de wachtrij blijft vijf, dus overtollige verzoeken mislukken nog steeds en worden opnieuw geprobeerd. In versie 0.8.18 zijn importeren en herstellen samengevoegd tot één flow die sleutelformaten herkent en een voorbeeld van de identiteit toont, en compatibel Nosskey-herstel behoudt dezelfde identiteit, de bestaande accounts en de oorspronkelijke passkeys.
De afzonderlijke ontwikkelaars-SDK, nostr-wot-sdk, bracht 3.0.1 uit met ondersteuning voor stabiele identity 1.1. Herstel met een passkey, ook via Nosskey, behoudt de oorspronkelijke pubkey, en de code voor provider, herstel en ondertekening deelt nu één implementatie (broncode van SDK-herstel en provider). Verouderde forwarderpakketten werken nog, maar integrators zouden moeten overstappen op de onderhouden entry points.
Amethyst
Amethyst, de Nostr-client voor Android en desktop, bracht versie 1.20.0 uit met privépeilingen en andere functies voor versleutelde Marmot-groepen. Daartoe behoren vervangbare privéstemmen, aangepaste versleutelde emoji, het verwijderen van berichten door beheerders en meldingen, en media die aan de huidige epoch van de groep zijn vastgepind. Na de review heeft de auteur de interoperabiliteitscontroles tussen clients niet opnieuw uitgevoerd en de wijziging niet handmatig op Android getest. Cachesleutels voor concurrerende branches die hetzelfde epochnummer delen, blijven bestaan, en versleutelde mediasleutels kunnen verdwijnende berichten overleven. Synchronisatie van instellingen slaat zes groepen app-instellingen op als versleutelde gegevens volgens NIP-78. Sleutels, signers, wallets, meldingen, decks en leesmarkeringen blijven op elk apparaat afzonderlijk. Bij de eerste wijziging van een instelling worden alle zes groepen gepubliceerd. Een alleen-lezenaccount houdt zijn instellingen lokaal, en het gedrag over twee ondertekenende apparaten is niet geverifieerd.
Systeemmeldingen op desktop volgen het filter Meldingen en slaan buitenste wegwerp-gift-wraps en gedempte DM’s over. Niet-vertrouwde d-tags van meer dan 255 bytes veroorzaken geen fouten meer. Opzoekingen per kind bevragen alleen verbonden relays en de zoekrelays van het account, met elk maximaal 200 events. De apps gebruiken de Kite-JSON-verwerking van Quartz voor frames, events, filters en berichten van NIP-46 en NIP-55, al is ondertekenen via die twee protocollen niet op apparaten geverifieerd. Een latere opsplitsing van bibliotheken verplaatst protocolregels van Marmot en cordn die andere clients nodig zouden hebben naar gedeelde bibliotheken.
Samengevoegde broncode na 1.20.0, nog niet in een release, laat het Marmot-ontvangstpad van de app op de gedeelde bibliotheek draaien. Elk ontsleuteld bericht wordt idempotent opgeslagen. Bij het toetreden wordt een basislijn vastgelegd, zodat de eerste lidmaatschapswijziging haar rij toont. Een bericht van kind 445 dat vóór zijn commit binnenkomt, wordt vastgehouden en later opnieuw afgespeeld, en bij het bijwerken door een beheerder worden klaargezette vertrekken gecommit. amy cordn migrate export schakelt de sessiecommando’s van de oude installatie uit tot een import of het nieuwe resume-commando. De auteur draaide loopback-tests van amy en bibliotheektests tegen lokale checkouts. Het live ontvangstpad van de app heeft de auteur niet handmatig doorlopen, en de Marmot-interopsuite heeft de auteur niet gedraaid. Een brekende update van het voorgestelde napplet-formaat NIP-5D leest de manifesthash van een napplet als één /index.html-artefact, ter vervanging van het oude padaggregaat, zodat oude bundels opnieuw gepubliceerd moeten worden. Vereiste NAP-domeinen die niet beschikbaar zijn, falen gesloten, en optionele blijven afwezig. Iconen krijgen controles van hash en decoder, opslag wordt gepartitioneerd per manifest-kind, artefact en snapshot, en resourceblobs gebruiken canonieke base64. Handmatige tests op apparaten, tests tussen clients en live publicatie op relays zijn niet uitgevoerd.
Weigeringen in een externe signer worden nu afgehandeld in coroutines die geen beveiliging hadden, zodat ze de app niet langer laten crashen. E-books, tijdschriften en nummers van PressStr (kinds 33953, 34609 en 39731) worden nu weergegeven. Pdf’s openen in de lezer in de app, terwijl EPUB’s naar de systeemhandler gaan. Kaarten tonen bestandstype en -grootte, downloaden nooit een grote pdf alleen om er een voorbeeld van te tonen en halen nummers uitsluitend op bij de auteur van het tijdschrift. Tests op Android-apparaten heeft de auteur voor deze wijziging niet gemeld. Als rijke voorbeelden uitstaan, verschijnen facturen en LNURL’s als compacte kopieerbare labels zonder knop Betalen, en factuurkaarten tonen nu de vervaltijd. amy gift wrap dateert de seal en de wrap nu op afzonderlijke willekeurige tijdstippen, elk tot twee dagen terug. --no-backdate schakelt dit uit. Het gewone DM-pad krijgt zijn fix apart in Quartz. Op desktop beheert elke videokaart zijn eigen afspelen, zodat kaarten met dezelfde URL elkaars video niet meer overnemen. De auteur testte dit op macOS, maar niet met een koude cache. Een voorgestelde fix voor links op Windows opent links via rundll32 met het volledige pad en valt terug op AWT. Omdat de oorzaak niet is gereproduceerd, is dit een waarschijnlijke fix en geen bevestigde.
Myco voegt versleutelde napplet-opslag en ondertekende updatemeldingen toe
Myco, een Android-host voor Nostr-napplets, bracht 0.12.0 en 0.12.1 uit. Napplets kunnen nu via de runtime met NIP-44 naar zichzelf versleutelde gegevens opslaan, maar apps met leestoestemmingen voor relay, outbox of mesh kunnen de platte tekst zien, dus de gegevens zijn niet per app geïsoleerd. Gebruikers die eerder met Amber inlogden, moeten opnieuw inloggen om de nieuwe rechten voor versleutelen en ontsleutelen te verlenen. Updatemeldingen worden ondertekend door een vastgepinde uitgever en bereiken alleen apparaten die al 0.12 draaien. Online kan Myco dagelijks Zapstore controleren, evenals Circle, terwijl de modus met alleen mesh uitsluitend Circle bevraagt; dit vervangt de aanvankelijke pauze. Een expliciet gekozen lokale Blossom-rail houdt bestanden op het apparaat zonder server, tot 64 MiB per app per dag. Ook mislukte uploads naar een goedgekeurde standaardserver bewaren een lokale kopie. Geen van beide paden verwijdert EXIF-metadata. Verder voegen de releases ondersteuning voor Android TV toe, plus een NAPFS-bestandskiezer waarin de gebruiker de bestanden kiest.
Getagde releases
Monostr
Monostr, een sociale Nostr-client voor Android, bracht 0.26.0 uit, de nieuwste versie. Video’s van maximaal twee minuten worden nu op het apparaat gecomprimeerd, en locatiemetadata wordt verwijderd. Ontdekken, zoeken en onboarding bieden samengestelde volglijsten. In threads en meldingen verschijnen nu Fediverse-antwoorden die als reacties volgens NIP-22 zijn verstuurd.
Functies uit 0.25.0 blijven behouden. Ontbreekt de bovenliggende notitie van een antwoord, dan doorzoekt de app de relay-hints van het antwoord en de relays van de auteur van die bovenliggende notitie, wat betekent dat er kort verbinding wordt gemaakt met relays buiten de eigen lijst van de gebruiker. Relays en live abonnementen op berichten maken bovendien opnieuw verbinding telkens wanneer het apparaat van netwerk wisselt.
Sidecar
Sidecar, een Nostr-browserextensie en signer, bracht 1.16.3 uit. De composer en de markeertool publiceren nu naar de eigen relays van het account en tellen alleen relays mee die het event bevestigen, en linken daarna naar die relays. Een bevestiging laat zien dat de relay het event heeft geaccepteerd, niet dat hij het zal bewaren. De uitgebreide composer valt niet langer terug op de standaardrelays in Instellingen. Elke relay heeft een eigen deadline van 12 seconden. Alleen een publicatie die op elke relay mislukt, wordt opnieuw geprobeerd, één keer, op nieuwe sockets. Voor peilingresultaten worden ook vier publieke relays naar stembiljetten bevraagd. Een wijziging die na de tag is gemerged, voegt nog een relay toe om stembiljetten op te vangen die buiten de gebruikelijke relays zijn ingediend. Bij één live peiling steeg de telling daardoor van 21 naar 23 stemmen. Dat is het resultaat van één peiling en zegt niets over volledigheid in het hele netwerk. De telling staat nog steeds één stembiljet per persoon toe en negeert stembiljetten die na het sluiten van de peiling zijn uitgebracht. De eerdere 1.16.1 beperkt doorlopende ondertekeningstoestemmingen tot het account en de site die ze hebben goedgekeurd, en tot één adresseerbaar record als het event een d-tag heeft. Versleuteling of ontsleuteling valt nooit onder een toestemming. Profiel-, volg-, demp- en relaylijsten blijven buiten elke toestemming. Verwijderingen, zap-verzoeken, relay-AUTH en walletbeheer zijn eveneens uitgesloten. Een vergrendelde extensie vraagt nog steeds om de pincode. Wie een toestemming intrekt of een site vergeet, wist daarmee de bijbehorende toestemmingen en goedkeuringsvensters.
Een apart open pull request zou het betalen van een CLINK-aanbod als zap laten tellen. Het staat in de wachtrij onder Unreleased in de changelog en implementeert Debits niet. Het aanbodpaneel zou een ondertekend zap-verzoek van kind 9734 met payer_data doorgeven, zodat de dienst een ontvangstbewijs van kind 9735 kan publiceren. Ontvangstbewijzen zouden eerst naar de relay van het aanbod gaan en daarna naar de relays van de ontvanger, ontdubbeld en begrensd op zes. De relays van de betaler worden niet gebruikt. Antwoordt een aanbod met code 3 en een opvolgend aanbod dat te decoderen is, dan zou Sidecar dat één keer volgen met een nieuw verzoek en een nieuwe handtekening. Naar het profiel van de ontvanger zou het nooit schrijven. Bij de deadline was de wijziging nog niet gemerged.
Roadbeacon
Roadbeacon, een client voor locatiemeldingen die eerder Roadstr heette en losstaat van de onafhankelijke Roadstr-app, bracht 0.4.0 uit onder de nieuwe naam als nieuw pakket met een nieuw event-formaat. Meldingen en stemmen gebruiken nu gedeelde, interoperabele kinds 1315 en 1316. Coördinaten gebruiken exact reconstrueerbare integer-frames, en de webversie valideert handtekeningen. Het pakket wordt naast het oude geïnstalleerd zonder gegevens te migreren. Oudere events blijven geldig op relays, maar de nieuwe client kan ze niet lezen.
Jumble
Jumble, een Nostr-webclient, bracht v26.10.1 uit. Tot de nieuwe functies behoren een editor voor long-form artikelen, gedempte woorden die tussen apparaten synchroniseren, systeemmeldingen en weergaven voor groeps- en Git-content. De wijzigingen aan wachtende posts en de lay-out die in een recente editie aan bod kwamen, worden met deze release meegeleverd.
Een commit die na de release is gemerged, voegt een optionele NIP-22-antwoordinstelling toe. Die staat standaard uit en wordt als lokale voorkeur opgeslagen. Is ze ingeschakeld, dan worden antwoorden op kind 1-tekstnotities verstuurd als kind 1111-comments. Bestaande kind 1111-threads behouden hun root, en comments op andere kinds of op externe content blijven kind 1111. Met de instelling uit houden antwoorden het oude kind 1-gedrag. De app waarschuwt dat sommige clients deze comments mogelijk niet tonen.
nostr-idb
nostr-idb, een bibliotheek die Nostr-events cachet in de IndexedDB van de browser, bracht 5.1.1 uit met queryfixes. Opzoekingen op exacte ID werken nu voor replaceable en addressable events. Ook wordt nu elke filterbeperking en elke limiet per filter toegepast, inclusief op wachtende schrijfacties en de subscriptiegeschiedenis. Het opschonen van de cache en events met een tijdstempel van nul zijn gerepareerd. De grootte van de in-memory cache, maxMemoryEvents, staat standaard op maxEvents, en met nul wordt die uitgeschakeld.
Manent
Manent, een versleuteld notitieboek dat via Nostr synchroniseert, bracht 3.0.0 uit met spraaknotities. Opnames synchroniseren versleuteld, net als andere notities, en transcripties worden offline gegenereerd met Whisper nadat de app een model heeft gedownload. Daarnaast levert de release het herstel van relay-authenticatie mee dat eerder als broncodewerk aan bod kwam. Dat komt nu binnen via versie 0.10.1 van NDK, de bibliotheek Nostr Development Kit.
NoorNote
NoorNote, een Nostr-client voor desktop en web, bracht 1.9.2 uit met full-text zoeken lokaal op het apparaat in notities en directe berichten, plus een cache-only-modus. Versie 1.9.3 maakt dropdowns, menu’s en toasts weer leesbaar na een regressie met transparant glas in 1.9.2. Met deze releases komt ook het filter voor tijdstempels in de toekomst mee, dat eerder alleen in de broncode bestond. Profielen die niet laden, blijven nu in de laadstatus totdat de misser is bevestigd.
Earthly
Earthly, een Nostr-client voor het maken van kaarten, bracht 0.1.22 uit met fixes voor relays en betalingen. Relay-authenticatie is nu gekoppeld aan het actieve account. Herstelde subscriptions en tellingen onderscheiden een niet-beschikbare telling van een echte nul en behouden tellingen over kaartrevisies heen. Zap-totalen komen uit echte zap receipts, en voordat er geld wordt uitgegeven, wacht de app tot de wallet-synchronisatie klaar is. Live betalingen via Nostr Wallet Connect en via mints blijven ongetest (release-integratie).
Chama
Chama, een escrow-handelsclient gebouwd op Nostr-events, bracht 6.4.31 uit, een versie die seed-back-ups controleert vóór de financiering. Voordat de on-chain handelssleutel van dit apparaat in ondertekende CREATE-, JOIN- of stortingsvoorwaarden terechtkomt, moet een relay de ondertekende seed-back-up teruggeven die het apparaat heeft geopend. Een ontbrekende, buiten gebruik gestelde of conflicterende back-up stopt de transactie. Bij nieuwe pogingen wordt exact de opgeslagen back-up opnieuw verstuurd, zonder nieuwe seed. Het teruglezen toont de beschikbaarheid op dat moment, niet de persistentie. Listings met meerdere eenheden gebruiken nu orders met hoeveelheden. Versie 6.4.30 telt storefront-orders alleen mee wanneer de door de koper ondertekende voorwaarden overeenkomen met de ondertekende listing. Ook beschermt die versie tegen late events van buitenstaanders bij transacties waarvan de ondertekende CREATE gedateerd is op 1 december 2026 of later, terwijl eerdere transacties het oude verloopgedrag houden (validatie van transactieverloop en storefront).
Een open pull request, op het moment van onze bronafsluiting nog niet gemerged, zou één wallet-seed-back-up per identiteit toestaan. Bij het opstarten zou de eerste aanmaak geserialiseerd worden met een wachtrij binnen de pagina en Web Locks, waarna de relay-status opnieuw wordt gelezen. Afzonderlijke browsers vertrouwen alleen op dat herlezen. Een gedistribueerde lock en het herstellen van bestaande conflicterende back-ups vallen buiten deze wijziging. Wij hebben geen enkel geldpad getest.
Linky
Linky, een Cashu-wallet die via Nostr synchroniseert, voegde experimentele on-chain-overboekingen achter een flag toe in versie 26.10.7 en de Android-build 26.10.8. Een geconfigureerde menselijke operator handelt verzend- en ontvangstverzoeken binnen 24 uur af tegen een vergoeding, dus overboekingen zijn niet atomair en evenmin trustless. De coördinatiewijziging gebruikt aangepaste Nostr-appberichten, operatorconfiguratie via NIP-78 en een nieuwe link-sync-scope. Die scope synchroniseert de wachtende ecash-verzendingen van de operator, zodat diens andere apparaten dezelfde verzending niet twee keer kunnen betalen, terugbetalen of afwikkelen. Een ontvangst is pas voltooid wanneer de wallet van de gebruiker het bijbehorende Cashu-bedrag binnenkrijgt. Operator en gebruiker vinden elkaar alleen op aanbevolen relays, niet via relaylijsten volgens NIP-65 of DM-inboxlijsten. Wanneer alle gedeelde relays wegvallen, kan de coördinatie daardoor stuklopen.
LaWallet
LaWallet, een wallet- en accountdienst gebouwd op Nostr Wallet Connect, bracht versie 2.9.0 en de Android-bèta 1.2.0 uit. Beide voegen herstel met behulp van een NFC-kaart naar een nieuwe Nostr-login toe (native herstelflow). Voor herstel zijn een verse, cryptografisch geverifieerde kaarttik en een herstel-QR-code voor eenmalig gebruik nodig, die 15 minuten geldig is. Tegoeden worden in één transactie verplaatst, rollen worden niet overgedragen, oude OAuth-grants worden ingetrokken en de oude login blijft leeg achter. Kaartherstel staat standaard aan; accounthouders kunnen het in de beveiligingsinstellingen uitschakelen en openstaande codes intrekken. Een onbereikbare wallet toont nu een saldo van nul, wat niet betekent dat die leeg is. In builds met een rapportage-endpoint zet de Android-bèta Sentry-foutrapportage geforceerd aan, zelfs na een eerdere opt-out; lokale en F-Droid-builds hebben geen endpoint.
In broncode die na de tag is gemerged, kan de kaart-callback OK teruggeven vóór de NWC-afwikkeling wanneer het saldo de betaling dekt, dus kassasystemen moeten hun eigen invoice bevestigen. Een vaste betalingslimiet vervangt de limiet op basis van het saldo. Een open pull request, op het moment van onze bronafsluiting nog niet gemerged, zou inloggen mogelijk maken met compatibele passkeys uit andere apps via een geconfigureerde provider of via Nosskey-herstel, waarbij het account wordt bevestigd voordat er een aflopende tijdelijke sessie wordt uitgegeven (#386). Een provider kan ondertekenen zonder de private key te importeren, en importeren is een aparte, bevestigde keuze. De screenshots van de pull request tonen gesimuleerde demoreacties, geen bewijs van live cross-origin inloggen.
Ook een andere merge, eveneens niet bevestigd in een release, voorkomt dat de callback voor NWC en Lightning-adressen de remote wallet van een gebruiker vervangt na alleen een make_invoice-fout. Een controle op liveness en saldo kan de wallet in plaats daarvan behouden en een 503 teruggeven. Verder onthoudt de dienst saldi en de status van beschermde tegoeden, en er komt een Restore-optie bij. De drempelwaarden en de onbekende eerdere geschiedenis beperken wat de dienst kan beschermen, dus garandeert die niet dat alle tegoeden veilig zijn. Er wordt geen uitrol geclaimd, en ook geen herstelde gebruikersaccounts.
KithMoot
KithMoot, een op Nostr gebaseerde app voor chat in rooms en voor gesprekken, werkt nu zonder de publieke diensten van de uitgever. Tussen 21 en 23 oktober schafte de uitgever publieke vergadercodes, de gedeelde TURN-dienst, bestandsuploads en het lezen van opgeslagen bestanden af. Uitnodigingslinks vervangen vergadercodes. Publieke bestanden gaan standaard naar Yakihonne, met een melding bij de eerste verzending, al kunnen gebruikers een eigen server kiezen. Gesprekken proberen nog steeds eerst een directe verbinding, terwijl Hide IP een werkende TURN-server nodig heeft en nooit terugvalt op een directe verbinding. In desktop 0.1.102 en Android 0.6.106 vervangt de publieke STUN van Cloudflare die van de uitgever, en gebruikers kunnen hun eigen STUN instellen. Door de dienst aangeboden back-upkopieën zijn verwijderd, terwijl offline versleutelde kopieën blijven bestaan. Desktop 0.1.109 en Android 0.6.121 blokkeren de chat wanneer apparaatreferenties verlopen, met behoud van concepten, en lezen de eigen profielnaam van de gebruiker los van optionele directory-opzoekingen. De gewone call-engine is niet overgestapt op de experimentele realtime SDK-preview, en de MLS-groepskandidaat blijft standaard uit.
Desktop 0.1.110 voegt gesandboxte bijlageviewers toe voor afbeeldingen, audio, video en pdf’s op desktop en op het web. Op desktop draaien ze in een speciale, niet-persistente Electron-renderer zonder toegang tot Node, zonder applicatieopslag en zonder externe netwerktoegang. Streaming is begrensd. Viewers worden opgeruimd wanneer ze worden gesloten of wanneer een bericht wordt ingetrokken. De WebKit-run van de pull request en een extra run met een verpakte vijandige SVG liepen vast en worden niet als geverifieerd geclaimd, en niets hiervan is een beveiligingscertificering. De macOS-build is genotariseerd, terwijl Windows een niet-ondertekende preview blijft.
Een latere merge, waarvan niet is aangetoond dat die in 0.1.110 zit, vernieuwt verlopen apparaatreferenties op basis van de wandkloktijd na de slaapstand en vóór het verzenden, waarbij het concept behouden blijft terwijl de signer reageert. Aanleiding was een tester wiens referentie ’s nachts verliep op een laptop in slaapstand. Een signerverzoek dat nooit terugkomt, houdt de vernieuwing nog steeds open, en Android heeft een apart, onopgelost hiaat bij de vernieuwing. Een open pull request, op het moment van onze bronafsluiting nog niet gemerged, zou Help other people connect pauzeren. Volgens de auteur accepteert de app een peer-assist-paar zonder de media ervan te transporteren. Dat kan de terugval naar een forwarder of TURN verhinderen en een stil gesprek opleveren. De standaardinstelling van de bibliotheek zou ongewijzigd blijven.
Marmot TS
marmot-ts, een TypeScript-bibliotheek voor het versleutelde groepsberichtenprotocol Marmot, bracht v0.8.0 en v0.9.0 uit met brekende wijzigingen. Encrypted media V2 voegt bronbinding toe en ontsleutelt vertraagde media na een herstart. Blossom-uploaddescriptors, -bestemmingen en ciphertext worden gevalideerd vóór het ondertekenen. Persistente groepen worden in pagina’s aangevuld via backfill, met nieuwe pogingen voor onzekere commits. Apps moeten nu zelf duurzame ingest- en rewind-stores aanleveren, waarvan de adapters mislukte of verlopen leesacties afwijzen. Legacy-V1-groepen moeten opnieuw worden aangemaakt, aangezien V1-helpers alleen voor de geschiedenis blijven bestaan.
Later gemergede broncode geeft de watchers voor key packages, uitnodigingen en geschiedenis een optioneel AbortSignal. Hun listeners worden direct opgeruimd bij return, throw of disposal, zelfs als een leesactie uit de opslag dan nog loopt. Wijzigingen die binnenkomen terwijl een consumer gepauzeerd is, worden vastgehouden en samengevoegd tot één update. Na annulering loopt de onderliggende leesactie in de backend door. Mislukte queries leiden nog steeds tot een rejection, en de wijziging certificeert geen interoperabiliteit tijdens runtime.
Nostr-mailclient
nostr-mail-client, een mailclient gebouwd op Nostr, bracht v0.19.0 uit met één loginflow voor bunker, nsec en ncryptsec, inclusief goedkeuring van de auth_url van een remote signer. De client volgt nu wijzigingen in de lijsten van DM-, inbox-, outbox- en privérelays zonder nieuwe login, ontdubbelt mailmeldingen tijdens het synchroniseren en synchroniseert e-mailhandtekeningen in versleutelde vorm tussen apparaten. E-mailbijlagen boven de limiet van 25 MB worden met een melding verwijderd, en een adres dat alleen via Nostr werkt, kan geen antwoorden ontvangen die vanuit e-mail zijn verstuurd.
Napplet-conformance-CLI
napplet/web, de webpakketten en tooling voor napplets (webapps die als ondertekende Nostr-events worden verspreid), levert het verificatiewerk uit de vorige editie nu mee in de geversioneerde @napplet/conformance-cli 0.4.0. Vóór een headless run controleert de CLI de event-ID, de handtekening en de exacte hash van de ruwe HTML van het manifest. Fouten bij runtime-binding, namespace en installatie rapporteert de CLI apart van napplet-fouten. De ingebouwde fallback dekt alleen RESOURCE en GAMEPAD, dus aangepaste hosts moeten bron- en snapshotinvoer expliciet meegeven.
Het deploy-commando van Napplet bereidt nu standaard Zapstore-listings voor: het maakt screenshots van elke geselecteerde build en bereidt een kind 32267 Software Application-event voor. Met --no-screenshot en --no-zapstore worden deze stappen uitgeschakeld. Metadata voorbereiden is niet hetzelfde als een release publiceren, en de wijziging voegt geen package release-event of asset-event toe.
napplet-soy
napplet-soy, een workspace voor het bouwen en publiceren van napplets, heeft zijn command-line tool soyli getagd als v0.31.2 en v0.31.3, die geen Studio-deployment zijn. Zodra de levering via Git is bevestigd, markeert het publiceren opgenomen Git-samenwerkingsvoorstellen (NIP-34) als gemerged, nadat de exacte afstamming en het doel samen met de huidige revisie zijn gecontroleerd. Bij hervatten worden vooraf ondertekende statussen hergebruikt. Nieuwere revisies van voorstellen blijven open. Een tag die een commit bevat, geldt niet als bewijs dat de doelbranch die commit heeft gemerged. De broncode achter deze tags voegt daarnaast een eerste weergave van de Cashu-wallet (NIP-60) toe in een uniforme Manage-workspace en houdt actieve napplets in leven bij het wisselen van tabblad. De updater uit de eerdere v0.31.1 volgt de stabiele GitHub-repository-ID, zodat installaties hun accounts en projecten behouden bij de verhuizing naar Soytec. Installaties met de oudere updater moeten het installatieprogramma één keer uitvoeren.
De NIP-60 Cashu-wallet wisselt NIP-61-nutzaps in. Voorbereide mint-outputs en ondertekende relay-updates slaat hij op voordat ze worden uitgevoerd, zodat onzekere verzoeken kunnen worden hersteld zonder een betaling te herhalen. Wallets blijven per account geïsoleerd en browsertabbladen kunnen niet tegelijk uitgeven. Bij het testen zijn echter nep-mints gebruikt, en interoperabiliteit met echt geld is niet geverifieerd. Bijdragepagina’s ondersteunen nu zaps gericht aan de auteur, die de ondertekenende auteur van de gekozen release of het gekozen voorstel betalen.
De tag soyli v0.31.4 vermeldt de bijdragegeschiedenis van auteurs en zaps, plus wijzigingen rond NIP-5D-gereedheid, audio en testen. Domeinaanroepen wachten niet langer tot de shell meldt dat hij gereed is. Audio die napplets via NAPMEDIA bezitten, wordt door een gedeelde host gecoördineerd, zonder dat de iframe-isolatie wordt versoepeld. Ook deze tag is geen Studio-deployment. Vijf geconfigureerde checks slaagden en vijf werden overgeslagen. Volledige conformiteit blijft onbewezen, en de gerepareerde apps wachten nog op herpublicatie.
Pakstr
Pakstr, een command-line tool die Android-apps bouwt en op Nostr publiceert, heeft v0.29.1 getagd. Vóór het publiceren leest de tool het ondertekenaarscertificaat dat een APK in zijn v2- of v3-ondertekeningsblok claimt. De SHA-256 daarvan wordt vervolgens vergeleken met de verwachte sidecar en het identiteitsbewijs (publicatiereview). Niet-ondertekende en misvormde APK’s worden geweigerd, net als APK’s met meerdere certificaten. Bij een rebuild worden verouderde sidecars verwijderd, en een ongeldige nsec voor publicatie faalt al vóór de build. De parser verifieert de APK-handtekening zelf niet: dat wordt aan Android en apksigner overgelaten. Daardoor vangt hij verouderde of niet-ondertekende builds en builds met het verkeerde certificaat af, maar kan hij niet bewijzen dat een build niet vervalst is. ZIP64, meerdere ondertekenaars en sleutelrotatie worden niet ondersteund.
MDK
MDK, de SDK en runtime voor versleutelde Marmot-groepen, heeft stabiele v0.14.0 uitgebracht. Deze versie levert overdracht en opslag van mediabestanden, geordende offline inhaalsynchronisatie, behoud van volglijsten en rekeying van de ruwe SQLCipher-sleutel. MLS en het wire-formaat blijven ongewijzigd. De releasegids voor 0.14.0 en de integratiegids voor 0.14.0 vereisen dat apps een bij elkaar passende set bindings, native library en headers meeleveren, die MarmotKit 0.14.0 voor Apple en Android verpakt. Op Apple-platforms is het binaire bestand een ruw statisch XCFramework. Apps combineren het daarom met de bijpassende Swift-binding en kopiëren de bijbehorende PrivacyInfo.xcprivacy-resource naar het wrapperproduct dat ze toewijzen. Dat een build de archiefcontroles van de release doorstaat, bewijst niet dat een App Store-export zal slagen. Database en opslag migreren in één richting, waarbij elke pagina eenmaal een nieuwe sleutel krijgt. Downgrades blijven niet ondersteund. Accountmedia en overdrachtsgegevens moeten van back-ups worden uitgesloten. De WN-agent blijft prerelease, en de crates staan niet op crates.io. Bekende beperkingen blijven bestaan: geschiedenis die meer dan vijf epochs te laat binnenkomt, wordt zonder melding onontsleutelbaar. Media die tijdens een epoch-overgang onderweg verloren gaan, vormen nog altijd een onopgelost probleem. Ook een compatibiliteitsprobleem rond de volgorde van de groepscontext blijft bestaan.
Uit de afstamming van de tag blijkt dat de stabiele tag ook vijf wijzigingen in sync en media bevat. Verversingen van groepsabonnementen herverpakken alleen gewijzigde REQ-batchfamilies. Een mislukte familie behoudt haar live routes voor de volgende sync, terwijl de gedeeltelijke commit nog steeds een mislukte sync rapporteert. Verzendingen en groepswijzigingen komen nog steeds in de duurzame wachtrij terecht wanneer een verversing vóór verzending mislukt, al kan de voltooiing op CompletionUnknown blijven staan. De REQ van een onbereikbare relay blijft onder dezelfde ID openstaan tot er opnieuw verbinding is, zodat verminderde dekking geen volledige geschiedenis betekent. Goedkeuring van onboarding-reparatie wacht op elke ontdekkingsbron en geeft RetryableFailure terug wanneer een opgegeven bron een time-out krijgt. Opt-in mediabewaring per account, van Keep forever tot 30 dagen, ruimt media op op basis van ontvangsttijd of laatste expliciete herdownload en niet op basis van de laatste weergave. Berichtgeschiedenis wordt daarbij niet verwijderd. Hosts moeten de nieuwe FFI-waarde CleanedBySetting afhandelen.
Na de tag zette gemergede broncode het werk aan multi-device en push voort, waar nog geen release aanspraak op maakt. Geschiedenisverzoeken na het toetreden blijven bewaard over commits en herstarts heen, waardoor een gat tussen de Welcome en live berichten wordt gedicht. Leden per account tellen voorkomt valse meldingen over een persoon wanneer een tweede apparaat toetreedt of vertrekt. Daarnaast negeert de Welcome-afhandeling leveringen die voor zusterapparaten bedoeld zijn, zonder dat het toetreden mislukt of een sleutel wordt verbruikt. Voor push geldt dat MDK door de eigenaar ondertekende records en tombstones na commits via gossip verspreidt op nieuwe opslag voor push-gossip, tokens opnieuw deelt na toevoegingen aan het lidmaatschap en alle apparaten van een ontvanger een melding stuurt. De eigen apparaten van de afzender krijgen nog steeds geen melding. Verse willekeurige padding per trigger voorkomt dat deduplicatie wake-ups onderdrukt. Het publiceren van KeyPackages gebruikt voortaan de eigen relaylijsten van het account. Als een lijst onvolledig is of geen bruikbare relay bevat, faalt het publiceren en blijft de opgeslagen lijst behouden. Getypeerde mediastatussen voor verouderde epochs en nog onopgeloste toestanden vertellen apps of ze opnieuw moeten uploaden of moeten synchroniseren en opnieuw verzenden. Verder komen wijzigingen in de overdrachtsstatus direct binnen, met gebundelde voortgang in bytes.
Nieuwere broncode voor accountapparaten is voortgang richting een latere release, geen stabiele 0.15. Drie nightlies van 28 oktober, gelabeld als uitsluitend voor testen, zijn vastgepind op commit b8d0a49. Die commit is ouder dan latere merges, dus hun assets bevatten niet al die broncode. MDK selecteert per apparaat compatibele KeyPackages voor maximaal 20 recente apparaten per account, en uitloggen trekt alleen het publicatieslot van dit apparaat in. Nieuwe packages zijn 30 dagen plus één uur geldig en worden zes tot zeven dagen na publicatie ververst. Ontdekking zoekt naar elk apparaat, maar door relayfouten kunnen sommige ontbreken. Opnieuw uitnodigen kan helpen, zonder garantie op automatisch herstel. Geauthenticeerde capability-controles per leaf vervangen de cache per account. Nieuwe groepen vereisen de account-devices-component 0x800d wanneer elke oprichter die ondersteunt, en geüpgradede apparaten adverteren deze nu. Zulke groepen weigeren oudere apparaten die de component missen, terwijl bestaande groepen ongewijzigd blijven. Onder deze vereiste weigert MDK componentdata, niet-ondersteunde leaves, meer dan 20 leaves per account en pogingen om de vereiste te laten vallen. Legacy-groepen en groepen zonder die vereiste blijven zoals ze waren. Los daarvan weigert MDK door de host aangeleverde initiële data voor app-componenten waarvan het schema geen data heeft, nog voordat er een groep, Welcome of event wordt aangemaakt.
In 0x800d-groepen krijgt de engine bevoegdheid om binnen het eigen account toe te voegen en te verwijderen, met commitclassificatie die rekening houdt met de parent-state. Daarbij worden self-update, self-remove, commits binnen hetzelfde account en admin-commits van elkaar onderscheiden, en het privilege voor hetzelfde account vereist by-value-proposals. Bijpassende Welcome-afhandeling accepteert Welcomes van hetzelfde account alleen in die groepen, en pas na controles van componentstatus en handtekening. Andere groepen hebben nog steeds een actieve admin nodig. Send intents voor toevoegen en verwijderen binnen het eigen account krijgen een eerlijke beurt in de scheduler, maar app-API’s stellen send intents voor hetzelfde account nog niet beschikbaar. De verwijdering van het eigen leaf van een apparaat bepaalt nu zijn lokale lidmaatschap. Zo zorgt de aanwezigheid van een zusterapparaat er niet langer voor dat een verwijderd apparaat zijn ledenacties behoudt.
Push-gossip voegt duurzaam in de wachtrij geplaatste kind 447-aankondigingen met digest-prefixen van 8 bytes van records en tombstones toe. Deze worden verzonden bij het toetreden, bij een wijziging van een record en volgens een berichtcadans van zeven dagen. Peers herstellen ontbrekende door de eigenaar ondertekende records via gerangschikte, gespreide antwoorden, met onderdrukking van duplicaten en een limiet van 24 uur per leaf. Bij herstel verzinnen cut en cancel niet langer nieuw verlies. Na 24 pogingen zonder voortgang wordt een verplichting geparkeerd achter een waarschuwing over onvolledige geschiedenis. Het coverage-grootboek draait alleen als schaduwregistratie, terwijl een in tijdsblokken verdeelde sweep de blokken hervat vanaf het oudste, nog zonder productiescheduler. Opt-in auditbestanden verlopen 30 dagen na de laatste schrijfactie, met opschoning bij het opstarten en elk uur. De verwijdering kan een dag later plaatsvinden. Het aparte beveiligingslogboek voor key-reveals valt buiten die vervaltermijn.
Een pairing-crate gebruikt ephemeral X25519 en een commitment. Daarnaast gebruikt de crate een vergelijking van zeven emoji die de gebruiker op beide schermen controleert, en HMAC-bevestigingen die eindigen in een ConfirmedLink. De wire-adapter dekt alleen transport en staat standaard uit in afwachting van een spec. De UI en de vervolgstappen voor Welcome en group-link zijn nog niet af, en de interoperabiliteit van deze implementatie blijft ongeverifieerd. Broncode voor device-roster 0x800e past diff-updates toe op een verborgen groep met één account. Het adverteren van 0x800e vereist echter een override van het testbeleid, dus productiebuilds kunnen nog geen apparaatgroep aanmaken of eraan deelnemen.
Andere MDK-voorstellen staan nog open. Eén ervan zou ophouden een NIP-67-finish te behandelen als bewijs van volledige dekking, omdat de niet-ingeplande sweep geen garantie op volledigheid biedt. Andere zouden checkpoint-replay, automatisch opnieuw toetreden en 0x800d-activering in bestaande groepen toevoegen. Bij een nieuwe statuscontrole staan drie eerdere voorstellen voor native API’s nog steeds open. Herstel van historische bijlagen zou bronslots inspecteren en de geauthenticeerde digest en vervaldatum controleren voordat geverifieerde bytes naar een privé, geleasd bestand worden geschreven. De tijdlijn zou daarbij vrij van netwerkverkeer blijven. Een geleverde kopie is een momentopname die niet kan worden ingetrokken. Filterbrede chatselectiehandles zouden elke chat omvatten die aan een filter voldoet, ook buiten de geladen pagina, maar later binnengekomen chats uitsluiten. Selectie van oprichtende admins bij het aanmaken van groepen met wn-agent zou uitgenodigde oprichtende admins kiezen en niet-leden vóór de upload weigeren.
nosfry
nosfry, een Nostr-relay geschreven in Rust, heeft nosfry v0.2.0 uitgebracht voor zijn native editie en zijn Workers/SQL-editie. Deze versie levert functies die bij v0.1 nog niet waren uitgebracht: NIP-09-verwijdering, NIP-40-expiratie, NIP-42 AUTH met NIP-70-beschermde events, NIP-45 COUNT, NIP-77 Negentropy-sync, NIP-62-vanish-verzoeken en de NIP-86-admin-API. Daarnaast voegt de relay begrensde subscriptions met een uitgaand budget en een schrijfbeleid toe. permessage-deflate wordt beschreven als standaard ingeschakeld. De claims over prestaties en conformiteit zijn niet onafhankelijk gereproduceerd, en het project claimt niet dat de relay met elke implementatie samenwerkt.
Vier hardeningwijzigingen werden op 25 oktober gemerged, na de 0.3-tag, en zitten niet in een uitgebrachte binary. Worker-buckets voor verbindingen en rate limits aggregeren IPv6 per /64, terwijl de IP-blocklist van NIP-86 nog steeds exacte adressen matcht (#78). NEG-OPEN-scans belasten tijdens het verzamelen het globale geheugenbudget voor sync in stappen van 1024 records (#73). Groepen met gelijke tijdstempels houden een heap aan die begrensd is door de query-limiet (#72). NIP-86-moderatiesnapshots gelden voor opgeslagen reads en live delivery zoals vastgelegd op het moment van het verzoek. Een openstaand verzoek pikt nieuwe bans dus niet direct op (#68).
Een volgende merge, eveneens nog niet uitgebracht, begrenst de writer met een bytebudget van 64 MiB. Publicatieachterstanden worden daardoor in grotere transacties afgewerkt, elk begrensd door de verrichte hoeveelheid werk, terwijl duurzame LMDB-sync behouden blijft. De benchmarkcijfers van het project komen uit zijn eigen probevarianten, niet uit onze metingen.
nostream
nostream, een Nostr-relay in TypeScript, bracht nostream 3.7.0 en nostream 3.8.0 uit. Versie 3.7.0 levert de beheerfuncties, auditlogs, ondertekende webhooks en metrics die we eerder meldden als alleen in de broncode aanwezig. Er komt een opt-in levenscyclus voor betaalde writes bij, en het parsen van ISO-tijden en de verloopafhandeling voor LNbits 1 en later worden gerepareerd. Statische mirroring is verwijderd; de bijbehorende instellingen worden nu met een waarschuwing genegeerd ten gunste van NIP-77-synchronisatie. Het containerimage van 3.7.0 kon niet worden gepubliceerd omdat de Docker-tag een ongeldige @ bevatte, en 3.8.0 repareert de tags en voegt herhaalpogingen toe voor mislukte image-builds. Daarnaast brengt versie 3.8.0 lijsten voor pubkeys en kinds plus bypass-instellingen voor IP-adressen en rate limits naar de admin-API en de console, met statistieken over de meest actieve publishers, IP-adressen en rate-limit-hits. Ook verhelpt het een conflict tussen Redis-sleutels bij het wisselen van rate-limitstrategie of bij een upgrade. Uit de broncode alleen blijkt niet dat de images nu worden gepubliceerd, en er wordt geen in gebruik genomen facturering geclaimd.
Een afzonderlijke herschrijving in Rust op de branch rewrite/main heeft in 740ef69 haar eerste wire-core gemerged die een echte client beantwoordt, en bij 2b2287f implementeert het strategieregister de 14 resterende strategie-armen. Dit prototype, dat niet de standaard is, blijft gescheiden van main in TypeScript en van de stabiele 3.x-releases, en de review- en CI-resultaten komen van de auteur. De afhandeling van NIP-43 en NIP-56 staat standaard uit. Een vanish-verzoek kan nog steeds een race verliezen van een gelijktijdige publicatie, dus vanish is geen privacygarantie. Het verzoek van de auteur om handmatige review van de code voor toegang en identiteit staat nog steeds.
swift-nostr
swift-nostr, een Nostr-SDK in Swift, publiceerde op 27 oktober 0.9.0. De release voegt getypeerde keys, event-ID’s, URL’s, tijdstempels, coördinaten en subscription-ID’s toe, EventTemplates die elke lokale of externe signer kan ondertekenen, getypeerde fouten, subscriptions die eigendom zijn van de pool en RelayRoute-routering via de pool, exacte relays of de NIP-65-outbox. Event.verify gooit nu een fout bij een ongeldige handtekening, zodat overstappen vanaf 0.8 aanpassingen in de broncode vereist. De eerdere 0.8.0 was een hardening-release. Volgens de release notes verifieert die replaceable events, afzenders van gift wraps en antwoorden van NIP-46 en NWC, ontdubbelt ze antwoorden van meerdere relays en voegt ze NIP-44-versleuteling toe die door de signer wordt aangestuurd of met een gedeelde sleutel werkt, met strengere zap-controles als breaking change. Dit zijn beweringen van de auteur, geen audit.
De fixes van na 0.8 die we eerder bespraken, zitten nu in 0.9.0. Signers weigeren events waarvan de publieke sleutel afwijkt van hun eigen sleutel, en afmelden opent niet langer een verbroken relay om CLOSE te versturen. De centrale send-aanroep gooit notConnected en subscriben maakt expliciet verbinding, al verbinden de NWC- en NIP-46-transports een weggevallen relay nog steeds opnieuw voor een nieuw verzoek. Aanroepen van NWC en remote signers krijgen getypeerde fouten en directe annulering, hoewel er mogelijk alsnog gevolg wordt gegeven aan een verzoek dat al is verzonden. Streams voor NWC-notificaties en auth-challenges eindigen wanneer relays stoppen, wachten op een verbinding mislukt zodra alle relay-streams zijn beëindigd, en tag-query’s in filters worden één keer opgeslagen, met één JSON-sleutel per tag. Een generieke WalletConnectRequest ondersteunt aangepaste NIP-47-methoden met één antwoord, met de gebruikelijke controles op result_type en fouten, terwijl multi_pay apart blijft. Met een uitbreidbare RemoteSignerMethod kunnen NIP-46-methoden buiten de ingebouwde set worden aangeroepen; die geeft de resultaatstring terug. In beide gevallen moet de wallet of signer de methode ondersteunen. EventTemplate met signer.sign laat externe NIP-46-signers helpers gebruiken, zoals zap-verzoeken, waarvoor vroeger een lokale EventSigner nodig was, met bijbehorende wijzigingen in diverse datamodellen en in NIP-29- en NIP-98-builders. Die wijziging verandert de API, niet het wire-formaat.
Code die na de 0.9.0-tag is gemerged, maakt geen deel uit van die release. Een aanroeper die een send annuleert, behoudt nu gezonde relays, en de types voor het openen van DM’s en voor resultaten zijn eenvoudiger, waarbij de auteur van de rumor aan de signer is gebonden. FileAttachment brengt de metadata van versleutelde bestanden samen. Eén enkel paar setSigner en removeSigner voorkomt dat een verouderde remote set een afmelding ongedaan maakt; removeSigner stopt AUTH-antwoorden, maar trekt externe verzoeken die al zijn verzonden niet in. Instellingen voor herverbinden en ontdubbelen krijgen hun eigen configuratietypes.
haps
haps, een installatieprogramma voor software die met Nostr-sleutels is ondertekend, bracht haps v0.1.22 uit. Het bouwt voort op haps v0.1.18, dat source-builds op Linux en macOS uitvoerde in een private home-directory en een beschrijfbare checkout, met netwerktoegang standaard uitgeschakeld. Expliciete opties allow-build-network en allow-host-build kunnen dit opheffen. Source-builds op Windows vereisen host-build. Geïnstalleerde apps blijven buiten de sandbox. haps v0.1.19 voegde één gecombineerde bevestiging voor audit en installatie toe, die de vastgepinde broncode en het buildrecept koppelt aan de hash van de gebouwde payload, zodat een overeenkomende binary van de publisher kan worden geïnstalleerd onder het beleid van die gereviewde build. Het hergebruiken van een vertrouwde review telt niet als een extra onafhankelijke audit. Installaties uit onveranderlijke, ondertekende catalogi vereisen nog steeds een audit, en gepubliceerde waarschuwingen vragen om aparte toestemming die standaard op Nee staat. Versie 0.1.22 voegt begrensde lookups en publisher-controles op volledige broncode toe. Lookups delen nu korte deadlines, waarbij de client query’s start nadat de eerste relay verbinding heeft gemaakt, en snapshot-zoekopdrachten geven de geverifieerde resultaten terug die binnen één budget van 3 seconden zijn gevonden. Voordat een source-ref wordt gewijzigd, weigert de publicatie te starten tenzij ze een gekwalificeerde meegeleverde git-helper vindt, een apart geïnstalleerde helper die overeenkomt met de vastgepinde companion-binary, of een helper die complete-blob-dag-v1 adverteert. De basisdekking van dependency-reviews, de beveiligingen voor symlinks en bestandsgrootte en begrensde retries blijven behouden; dat is geen nieuwe onafhankelijke audit. Eén geslaagde cold install toont niet aan dat sporadische time-outs bij overdrachten zijn opgelost, en vastgepinde helperbundels blijven afhankelijk van de toolchain van de host.
Swarm beschermt zijn admin-API met NIP-98-authenticatie
Swarm, een met Nostr verbonden server voor publiceren en beheer, bracht v0.2.0 uit met NIP-98-HTTP-authenticatie voor zijn admin-API, naast de bestaande dashboardcookie. De server controleert de handtekening van het kind 27235-event, een tijdvenster van vijf minuten terug tot één minuut vooruit, de HTTP-methode, het pad en de query, de vastgepinde pubkey van de beheerder en een optionele payload-hash. Het accepteren van een doorgestuurde host veronderstelt dat er een vertrouwde proxy voor staat. Het voorheen openbare endpoint /environment vereist nu admin-authenticatie.
Een latere merge, nog niet bevestigd in een release, voegt opt-in crossposten naar X toe voor kind 1-notes van gekoppelde teamleden. Ingeplande notes en notes die via WebSocket binnenkomen, volgen hetzelfde pad. Antwoorden met e-tags worden overgeslagen, er wordt niets met terugwerkende kracht verwerkt en duplicaten worden op event-ID verwijderd. Aan de CMS-kant wordt NIP-98-authenticatie gebruikt. Posten hangt af van lokale OAuth of een vertrouwde gedelegeerde dienst, en is dus niet gedecentraliseerd en ook niet trustless. Posten naar de productiedienst van X is niet getest.
fips2go zet directe verbindingen met geverifieerde mesh-domeinen aan
fips2go, een Android-meshclient die peers en domeinclaims vindt via Nostr-advertenties, bracht de versies 0.9.6 tot en met 0.10.0 uit. Versie 0.10 zet directe verbindingen standaard aan met de servers van maximaal de twee meest recent geverifieerde domeinen, waarbij alleen domeinen tellen die via DNSSEC of meerdere resolvers zijn vastgepind. Deze verbindingen stellen het openbare IP-adres van de telefoon en de tijden waarop die online is bloot aan die servers, en onthullen de serverkeuze aan openbare relays, maar gebruikers kunnen ze uitschakelen. Een TXT-record dat al voor een exacte server en poort is vastgepind, wordt nu omgezet zonder nieuwe Nostr-claim, terwijl nieuwe servers, verplaatste poorten en records zonder poort nog steeds wachten. Wanneer een netwerkwissel nieuwe VPN-routes vereist maar de configuratie ongewijzigd is, vervangt de app alleen de tunnel en behoudt hij zijn node, verbindingen en sessies. Hotspotwijzigingen, andere configuratiewijzigingen en de fallback bij storingen bouwen de node nog steeds opnieuw op.
fips-pub-domains beantwoordt vastgepinde lookups voordat claims worden opgehaald
fips-pub-domains, dat door Nostr ondertekende koppelingen van publieke domeinen naar mesh-adressen omzet, bracht 0.2.9 en 0.2.10 uit. Een TXT-record dat voor een exacte server en poort is vastgepind, kan nu antwoorden voordat het ophalen van de claim op de achtergrond klaar is, onder hetzelfde pinbeleid, terwijl een nieuwe server of poort nog steeds op een claim wacht. Bij het opstarten op desktop en na netwerkwijzigingen warmt de resolver tot 16 vastgepinde servers op, waardoor online aanwezigheid zichtbaar wordt voor die servers en voor routeringsnodes. Tijdens de eerste backoff van 20 seconden probeert hij het elke drie seconden opnieuw, en hij stopt eerder zodra een server antwoordt.
Twee wijzigingen die na deze tags zijn gemerged, zijn nog niet uitgebracht. De ene voegt een ServiceClaim-rol fips-ca toe zonder poort en met een eigen DNSSEC-keten en attestatie, los van fips-dns, zonder een nieuwe PKI te lanceren of het DNS-bindingsbeleid te wijzigen. De andere voegt de CLI-commando’s verify en zone toe, die pinbestanden lezen zonder ze te schrijven. In deze code draagt een attestatie alleen haar eigen vorige getuige mee en worden andere rolvermeldingen opnieuw geverifieerd. Een optie require-previous weigert ontbrekende gegevens, maar kan een storing niet onderscheiden van een record dat niet bestaat.
Codr
Codr v0.8.0, een brug om desktop-codeersessies te besturen via versleutelde White Noise-chats, voegt een worker-update toe die in de chat wordt bevestigd en binnen tien minuten moet plaatsvinden. Die haalt ngit-records op van een vastgepinde maintainer en Blossom-bytes die met een checksum zijn geverifieerd, zonder terugval op GitHub. Wijzigingen in connector of opslagcohort weigert de update, en als het opstarten mislukt, zet hij het oude uitvoerbare bestand terug. Tot nu toe is de update alleen tegen testfixtures uitgevoerd. Bestanden en media bereiken nu een bezette sessie zonder die te onderbreken, tot 25 MiB en vier bijlagen. Optionele transcriptie via Gemini stuurt ontsleutelde spraakberichten naar Google en staat standaard uit. Releases 0.4 tot en met 0.7 brachten tekst van de telefoon in bezette sessies, voegden /cancel en menu’s voor project, agent en model toe, en stapten over op MDK 0.14. Migreren vanaf 0.13 werkt maar in één richting en vereist een back-up en goedkeuring.
Een opt-in controlechat die alleen voor de eigenaar is (control_chat=true, standaard uit) maakt zijn groep aan bij de volgende start van de worker. /new start een projectsessie voordat er een chat is gekoppeld. Als onzeker is of het aanmaken is gelukt, wordt het niet automatisch opnieuw geprobeerd.
Een open pull request, op het moment van onze bronafsluiting nog niet gemerged, zou het aanmaken van een groep voor een nieuwe codeersessie een transcript dat nog niet is geschreven als leeg laten behandelen. Ongeldige of dubbelzinnige transcripts zouden nog steeds worden geweigerd. Dit zou uitnodigingen via de telefoon voor nieuwe /new-sessies vóór de eerste prompt herstellen en zou niets veranderen aan hoe sessies worden geautoriseerd.
nostr-media
nostr-media 0.17, een WordPress-plug-in voor het hosten van Nostr-media, maakt Blossom-mirroring robuuster. De plug-in controleert nu de ondertekende hashautorisatie van kind 24242 voordat een mirror-URL wordt opgehaald en weigert ongeautoriseerde verzoeken zonder iets te downloaden. Ophalen gebeurt via de veilige HTTP-API van WordPress, die alleen openbare HTTP(S)-hosts toestaat en redirects valideert, begrensd op 20 seconden, drie redirects en 128 MiB, en gedownloade bytes worden nog steeds gehasht en gecontroleerd. De headers Authorization, X-SHA-256 en X-Content-Type worden hoofdletterongevoelig vergeleken. De bescherming tegen server-side request forgery is maar zo sterk als de veilige API van WordPress.
NosTube
NosTube, een videosite gebouwd op Nostr, bracht server 0.1.25 en desktop 0.2.51 uit om het vertrouwen in een gecompromitteerde certificaatautoriteit in te trekken. De Rust-relay van de server vertrouwt die niet langer voor WebSocket- of HTTPS-verbindingen, en image-builds vereisen nu een vaste CA-bundel van het Debian-systeem. De desktoprelease past dezelfde mitigatie toe op de TLS-laag en de almond-sidecar. Deze beveiligingsclaims komen uit de release notes. Volgens de notes van de latere server 0.1.27 geldt voor dat image NIET GEBRUIKEN, omdat het een verouderde libbrotli1 meelevert; ze verwijzen naar 0.1.28, waarvan wij niet hebben bevestigd dat die is uitgebracht.
bitchat
bitchat, een messenger die via een Bluetooth-mesh en Nostr werkt, bracht 1.8.0 uit met prestatiewerk voor Nostr-locatiechats (geochat) en begrensde tijdstempels op DM-rumors. De app herkent de eigen berichten van de gebruiker nu aan de afzender-ID in plaats van aan de bijnaam (fix voor de afzenderidentiteit). Privégroepen pinnen hun maker vast, en de peer-ID in de mesh blijft buiten geohash-DM’s. De prestatiecijfers zijn van het project zelf en door ons niet gereproduceerd.
Een open pull request, op onze bronpeildatum nog niet gemerged, zou geografische chat verbonden houden tijdens relay-storingen door te routeren via de vijf dichtstbijzijnde relays plus vijf gedeelde back-ups, met een maximum van tien verbindingen per route (#1822). Berichten zouden in een wachtrij komen voordat de relay-directory is geladen, en abonnementen en openstaande schrijfacties zouden migreren zonder identiteitswijziging. De validatie is door de auteur zelf uitgevoerd, en de bijbehorende Android-wijziging is een aparte pull request.
Een andere open pull request, eveneens niet gemerged, zou live video via de Bluetooth-mesh van iOS en macOS toevoegen met een eigen LIVE_VIDEO_V1-formaat, en dus niet via een Nostr-transport. Openbare frames zouden worden ondertekend en op versheid gecontroleerd. DM-frames zouden binnen Noise-versleuteling reizen; opnames zouden als berichten worden verzonden. Volgens de auteur is een stream van Android naar iPhone ontvangen. Verzenden vanaf een iPhone, combinaties van twee iOS-apparaten (iOS naar iOS) en live video in DM’s zijn niet getest.
ngit
ngit, de commandoregeltool voor Git-samenwerking via Nostr, heeft v3.0.4 uitgebracht. Relay-verbindingen, en daarnaast HTTPS op Android, vertrouwen niet langer een gecompromitteerde certificaatautoriteit. Interactieve prompts beschermen nu tegen lege invoer, en commando’s respecteren offline-filters. Updates van remote-tracking behouden commits die nog niet zijn gepubliceerd. Ook maakt de diagnostiek nu onderscheid tussen een ontbrekende bron en een query die geen resultaten opleverde.
Hasheus
De bestandsverificatietool die voorheen verify heette, heet nu Hasheus en bracht 2.0.0 uit. De tool controleert bestanden aan de hand van hashes die op Nostr zijn gepubliceerd, neemt nu beschrijvingen en URL’s over van vertrouwde verificateurs en hasht grote bestanden in blokken. De banner ‘geverifieerd’ verschijnt alleen bij precies het gepubliceerde bestand. Daarnaast gaat de tool om met misvormde profielen, ontdubbelt hij verificateurs en geeft hij een foutmelding bij een ontbrekende relay. Een overeenkomende checksum bevestigt het bestand, niet de beweringen van de uitgever erover.
Alby JS SDK
De JavaScript-SDK van Alby bracht 9.0.0 uit. NWC-clients geven elk gepubliceerd verzoek nu een vaste wachttijd van 5 seconden voor de OK van de relay en falen met Nip47PublishTimeoutError als die niet binnenkomt, terwijl de antwoord-timeouts per methode ongewijzigd blijven. Een antwoord dat niet kan worden ontsleuteld, leidt nu tot een rejection, en de fouttekst van de relay blijft behouden (afhandeling van verzoekfouten). De brekende wijziging verwijdert de verouderde multi_*-methoden, en code die Nip47SingleMethod gebruikt, moet overstappen op Nip47Method. Een OK van de relay betekent dat de relay het verzoek heeft geaccepteerd, niet dat een betaling is geslaagd.
Alby Hub
Alby Hub, een zelfgehoste Lightning-node die wallets bedient via Nostr Wallet Connect, bracht 1.24.4 uit. De patch verwijdert het vertrouwen in een gecompromitteerde certificaatautoriteit uit de native LDK- en Go-TLS-verbindingen, waarvan de NWC-walletdienst van de hub afhankelijk is. Verder repareert de patch het opstarten van de CLN-plugin voor hold-invoices.
Orchard
Orchard, een softwarecatalogus voor Flatpak, bracht 0.3.0 uit. De release verbindt interoperabiliteit van softwarereleases met NIP-82 en voorbereiding van Flatpak-assets voor publicatie via ngit of andere NIP-82-tools. NIP-82 is een voorgestelde specificatie voor softwarecatalogi die nog niet is toegewezen of geaccepteerd, dus Orchard implementeert een concept dat nog kan veranderen.
Bell
Bell, een Android-aggregator voor Nostr-gesprekken, verzamelt antwoorden en citaten voor meerdere accounts in één chronologische lijst. De releasenotes van 0.1.0 sluiten likes, zaps, gewone reposts en algemene vermeldingen uit, en accounts ondertekenen via Amber of blijven watch-only. Releases 0.6.0 tot en met 0.9.0 voegden mute-regels per account toe, plus een weergave met alleen ongelezen items waarin je meerdere items tegelijk kunt selecteren en als gelezen markeren. Volgens de bijbehorende releasenotes behoudt herstel de exacte ondertekende antwoorden en reacties zonder automatische duplicaten. Met 0.10.0 en 0.10.1 kunnen gebruikers afzonderlijke posts op het apparaat verbergen, met ongedaan maken en herstellen. Verbergen verwijdert niets van relays, en nieuwe antwoorden verschijnen nog steeds. Spammeldingen gelden zowel voor de post als voor de auteur ervan, worden openbaar verstuurd vanaf een expliciet gekozen account en werken niet als privéblokkades. 0.11.0 voegt reposten toe, nadat gebruikers de oorspronkelijke post en het verzendende account hebben gecontroleerd. Met een accountavatar kies je wie antwoordt, reageert of repost. Dat reposts kunnen worden gepubliceerd, betekent niet dat meldingen van gewone reposts nu worden geaggregeerd. Gecachete threads kunnen onvolledig blijven, en het optionele luisteren op de achtergrond is afhankelijk van de energie- en netwerkregels van Android, zonder belofte van altijd actieve of onmiddellijke bezorging.
SkateSpots
SkateSpots is een communitykaart van skatespots en skatewinkels. Versie 1.7.4 voegde end-to-end versleutelde communitychat toe, waarin een communitybot nieuwe apparaten automatisch goedkeurt en ook beheerders ze kunnen goedkeuren. 1.7.0 maakte de community-relay de gezaghebbende bron voor spots en winkels. In 1.7.3 werden de QR-codes voor uitnodigingen op Android gerepareerd voor de privé-crewchat, die in eerdere releases was geïntroduceerd. Releases 1.7.8, 1.7.10, 1.7.15, 1.7.19, 1.7.20, 1.7.21 en 1.7.22 breiden die crewchat uit. Anders dan bij de botgoedkeuring in de communitychat keurt hier een bestaand crewlid nieuwe apparaten goed via QR, kunnen leden en apparaten worden verwijderd, en wordt bij het promoveren van een founder de admin-tag opnieuw gepubliceerd. Reacties, delete-tombstones en leesbevestigingen worden verstuurd als versleutelde MLS-controls. Tombstones zijn geen harde verwijderingen op relays, en automatische leesbevestigingen komen alleen van stille signers. Een watcher op de achtergrond gebruikt de eigen sleutel van het lid, nooit een beheerderssleutel, en zet ongeveer eens per minuut aanvragen om lid te worden om in NIP-17-DM’s of meldingen bij de bel. Voor Amber-gebruikers wachten meldingen over aanvragen tot de bel wordt geopend, terwijl stille signers ze vooraf kunnen laden, zodat Amber niet op de achtergrond om bevestiging vraagt. Ongelezen-tellers gebruiken ID’s van openstaande NIP-17-envelopes zonder ze te ontsleutelen, laten de eigen verzonden kopieën van de gebruiker buiten beschouwing en onthullen of bevestigen geen onderwerp. Directe of continue bezorging op de achtergrond is niet gegarandeerd. Releases 1.7.19 tot en met 1.7.22 voegen ook een globale zoekfunctie in de dataset toe die alleen draait zolang het opdrachtenpalet open is, en ze onthouden de staat van kaart en lagen. Wij hebben deze wijzigingen niet zelf op apparaten getest of aan een beveiligingsaudit onderworpen.
Emanator
Emanator, een Nostr-client voor meerdere accounts, kan in 1.5.0 nu NIP-17-privégesprekken starten, terwijl eerdere releases alleen op bestaande threads konden antwoorden. Gebruikers kiezen een verzendaccount waarop berichten zijn ingeschakeld en zoeken vervolgens contacten op naam of NIP-05, of plakken een npub of nprofile. Bestaande gesprekken worden hergebruikt, en als de ontvanger geen DM-inbox vermeldt, biedt de app best-effort-bezorging plus een legacy-optie. Onder 1.4.1. Nieuwe pogingen behouden al geaccepteerde ondertekende events. Alleen oude events die door geen enkele relay zijn geaccepteerd, kunnen opnieuw worden ondertekend en van een nieuwe datum worden voorzien.
Feather
Feather, een Android-client voor Nostr die we voor het laatst bespraken in nummer #45 tijdens de 0.9-reeks, is inmiddels bij 1.8.4 aangekomen. De releasenotes van 1.x voegen native browsen en melden van NIP-34-issues toe via de relays die een repository adverteert. Ondertekende acties wachten nu in een outbox op het apparaat die WorkManager op de achtergrond bezorgt, waarbij parents vóór antwoorden worden verzonden. 1.8.0 voegt fotoposts van kind 20 toe met opgeslagen concepten en offline bezorging, en 1.8.4 voegt optioneel muten toe na een geslaagde melding. Sinds 1.7.0 loopt vertalen via de aparte app Offline Translator en de bijbehorende taalpakketten, zonder terugval op de cloud.
OUTKAST
OUTKAST, een Android-client voor Nostr, voegt in 2.2.1 Network-ontdekking op het apparaat toe. Die toont notes van niet-gevolgde accounts die mensen die je volgt in de afgelopen 48 uur hebben geliket of gerepost. Volgens de releasenotes telt de rangschikking reacties, antwoorden en zaps op aantal (niet op sat-bedragen) en weegt ze daarna het aantal vrienden en de nieuwheid mee, zonder rankingserver. Zodra je 40 of meer accounts volgt, heeft een note minstens twee vrienden achter zich nodig. Bij 100 notes stoppen de resultaten, zonder oudere pagina’s. De releasenotes beschrijven ook aangepaste feeds van gekozen mensen of lijsten, en een foto-editor die bewerkingen opslaat als JPEG’s zonder metadata, terwijl ongewijzigde originelen onaangeroerd worden geüpload.
CustID
CustID, een signer-app voor Nostr, vereist in 0.2.2-beta nu biometrische goedkeuring voor NIP-46-ASK-verzoeken bij identiteiten die met biometrie zijn beveiligd, al kan een recente authenticatie aan de prompt voldoen. Onthouden regels voor goedkeuren en weigeren, inclusief oudere goedkeuringen, worden nu stil toegepast via zowel NIP-46 als NIP-55. Wie automatische goedkeuring inschakelt, krijgt eerst een waarschuwing ter bevestiging, en annuleren verandert niets. De bèta voegt ook NIP-89-client-tags toe aan de events die de app publiceert. Ze staan standaard aan en laten lezers zien welke app een event heeft gepubliceerd; met een instelling onder Privacy schakel je ze uit.
Nostr Vault
Nostr Vault, een Nostr-client, voegt in 3.0.0 optionele FIPS-apparaatverbindingen toe, gekoppeld via adres of QR-code, zodat een Mac of reservetelefoon thuis als vault kan dienen. De vault synchroniseert notes en geschiedenis, haalt bestaande foto’s op via de mesh en start, zodra de mesh is ingeschakeld, na een herstart samen met de relay. Voor het plaatsen van openbare media is nog steeds een openbare mediaserver nodig. De release verhelpt ook race conditions tussen accounts rond follows en aanmelding, wacht tot de eigen write-relays van de gebruiker een post hebben bevestigd voordat succes wordt gemeld, en houdt DM’s van onbekenden achter Requests.
Holoboard
Holoboard, een bord waarop mensen betalen om berichten te plaatsen, brengt Android 1.1.0 uit, samen met een begeleide Add to board-flow op de website en backend die eindigt in een betaling. Gasten kunnen tekst en links indienen, of een bestaande Nostr-post. Voorbereide invoices worden hervat in hetzelfde browserprofiel op hetzelfde apparaat, en de QR-code van de invoice blijft beschikbaar zonder account of gekoppelde wallet. Op zichzelf vernieuwt de APK alleen het launcherpictogram en het opstartscherm, dus de wijzigingen aan het bord zijn afhankelijk van de bijbehorende website en backend. Inloggen met e-mail of wachtwoord is er niet.
Hopp
Hopp, een podcastapp met value-for-value-boosts, gaat verder dan het werk aan identiteit en betalingen uit 0.2.x dat in nummer #45 aan bod kwam. Versie 0.3.0 voegt versleutelde synchronisatie en herstel tussen apparaten toe via Nostr, zonder Hopp-server, voor abonnementen, voortgang, favorieten, Up Next, luistergewoonten en downloadinstellingen. Bij herstellen blijft de bestaande bibliotheek behouden, en een statusweergave toont de relaystatus en wat nog in behandeling is. Volgens de release notes zijn boost-shares met een onbekende uitkomst beschermd tegen dubbele nieuwe pogingen, en houden budgetten nu rekening met Release Boosting en Boost2Unlock.
Nostrautica
Nostrautica, een companion-app voor evenementen, voegt in 0.15.1 offline evenementpakketten toe die personen, voorgestelde kennismakingen, talks, de evenementpagina, posts en profielfoto’s opslaan voor locaties met zwak bereik. De chat krijgt namen bij vermeldingen en bewerkingen samen met verwijderingen, en verzendingen die nog in behandeling zijn, kunnen opnieuw worden geprobeerd of worden verworpen. Versie 0.16.0 stapt over op MarmotKit 0.14, een bibliotheek voor Marmot-groepsberichten, voor offline bijwerken met minder relayverbindingen voor groepen, en bewaart ongelezen berichten tijdens het opschonen volgens de bewaartermijn. De opslagmigratie werkt maar in één richting, dus oudere appversies worden daarna niet meer ondersteund. De release notes melden geen wijziging in de interoperabiliteit met de messenger White Noise of met het web.
Staircase
Staircase, een Nostr-groepschatapp van relay.tools, voegt in 0.1.25 een meldingsmodus Frequent toe die ongeveer elke 5 of 10 minuten controleert en daarna de verbinding verbreekt. In diepe slaap bepaalt de planning van Android de timing, zodat levering op de achtergrond niet direct en ook niet gegarandeerd is. De modi Periodic en Frequent voeren één begrensde controle uit wanneer het netwerk terugkomt, hooguit eens per twee minuten; de modus Instant is ongewijzigd. De status van groepsdeelname wacht niet langer zodra een verzoek is afgehandeld of verloopt, zonder te vermelden welke van de twee. Aangepaste coördinatorrelays blijven onder controle van de gebruiker en worden niet overschreven door een gepubliceerde lijst.
In ontwikkeling
Coracle
Coracle, een Nostr-webclient, heeft een routeringsfix op master gemerged. Wie op een menu-item zoals Lists of Groups klikt terwijl diezelfde modal al bovenaan staat, ziet nu niets gebeuren. Voorheen stapelde elke klik er nog een identiek paneel bovenop. Met Escape werden ze één voor één gesloten. Verschillende modals en gewone paginanavigatie werken zoals voorheen. Het gaat om gemergde broncode, niet gekoppeld aan een release.
nostter
nostter, een Nostr-webclient, heeft vijf fixes voor de zap-flow gemerged. Een antwoord op pay_invoice via Nostr Wallet Connect telt nu alleen als geslaagd met het juiste resultaattype en een geldige preimage, waarbij het error-veld null is of ontbreekt. Misvormde antwoorden worden afgewezen. De aparte rx-nostr-client wordt altijd opgeruimd, ook als de setup mislukt. Tien seconden zonder antwoord van de wallet geldt als onbekend resultaat, niet als mislukking. Fouten bij invoice en ondertekening verschijnen inline en behouden het bedrag en de opmerking voor een nieuwe poging, en invoicefouten worden apart van NWC-fouten gemeld. De zap-knop blijft ingeschakeld voor herhaalde zaps. Het oranje merkteken verschijnt ook wanneer een QR-invoice wordt getoond, wat niet bevestigt dat een handmatige betaling is gelukt. Het dialoogvenster opnieuw openen zet het alleen terug als het inactief is. Wie het sluit nadat de invoice of handtekening binnen is, houdt een nieuwe NWC-betaling tegen, maar een betaling die al is ingediend, gaat door.
Een openstaande pull request zou een waarschuwing tonen om de wallet-geschiedenis te controleren voordat na een onbekend resultaat via de QR-fallback wordt betaald, en zou het automatisch openen van de wallet onderdrukken. Een time-out betekent niet dat de wallet niets heeft afgeschreven.
Pollerama
Pollerama, een client voor polls en feeds, heeft een wachtrij voor verzoeken per relay gemerged. De wachtrij past aan hoeveel verzoeken tegelijk lopen, schaalt terug wanneer een relay rate-limits toepast, splitst te grote filters en normaliseert relay-URL’s. De weergave Mine packs houdt nu een doorlopend abonnement aan, zodat trage antwoorden van relays toch verschijnen. Bekende problemen met herhaalde verzoeken in de app blijven open, en directe berichten zijn met deze wijziging niet getest.
Grimoire
Grimoire, een sociale Nostr-client, heeft fixes voor de synchronisatie van directe berichten gemerged. De geschiedeniscursor schuift niet langer op bij samengevoegde relaypagina’s die maar gedeeltelijk terugreiken, en een abort-guard voorkomt dat een decryptieronde berichten en gezien-markeringen opnieuw vult nadat uitloggen ze heeft gewist. Een afgebroken backfill stopt voordat de cursor wordt verplaatst of de geschiedenis als uitgeput wordt gemarkeerd. Er blijven hiaten: één antwoordende relay kan de geschiedenis nog steeds als uitgeput markeren terwijl andere ontbreken, en een permanente weigering door een signer verschuift de cursor nog steeds.
nostr-vpn
nostr-vpn, een VPN die Nostr-sleutels gebruikt om peers te vinden, heeft een fix voor opnieuw verbinden op mobiel gemerged. Als een discovery-probe al aan de beurt is, activeert de client nu uitgeputte paden naar bekende peers opnieuw. Dat gebeurt alleen als er recent niets is ontvangen en er geen verbonden of wachtend pad bestaat, en hooguit eens per 300 seconden. Gezonde en wachtende paden blijven ongemoeid, en het wire-formaat is ongewijzigd. De auteur testte de fix tegen een geïsoleerde native fixture, niet op mobiele netwerken. Een tweede gemergde wijziging haalt netwerk-join-secrets uit doctor-bundels door het join-secret voor enrollment en de ruwe daemonstatus weg te laten uit de diagnostische uitvoer. De Nostr-privésleutel werd daar al afgeschermd. Bundels die vóór deze wijziging zijn gedeeld, blijven blootgesteld, dus wie er een heeft gedeeld, moet de betreffende join-secrets roteren.
Verschillende verwante wijzigingen zijn nog open voorstellen en zijn niet gemerged of uitgebracht. Voor opgeslagen secrets zou één voorstel netwerk-join-secrets in de secret-opslag van het platform bewaren via het bestaande migratiepad. Een ander zou sidecar-secrets van Windows-machines beperken tot SYSTEM en Administrators, voor de DPAPI-bestanden met Nostr-nodesleutels. Die beperking geldt pas de volgende keer dat een bestand wordt geschreven, en er zit een korte periode tussen het aanmaken van het bestand en de ACL. Aangepaste configpaden vallen er niet onder, en de auteur heeft niet getest op een Windows-machine met meerdere gebruikers. Voor ondertekend lidmaatschap zou één voorstel join-goedkeuringen afwijzen waarvan de roster-snapshot niet meer overeenkomt met de schijf, zodat de admin herlaadt en het opnieuw probeert, terwijl gelijktijdig goedgekeurde apparaten behouden blijven. Een ander zou vijf minuten klokafwijking bij de admin toestaan en altijd een geconfigureerde join-signer vereisen, ook als de lokale adminlijst leeg is, met behoud van de koppeling aan het request-secret. Een derde zou gelijkspel tussen rosters met dezelfde tijdstempel beslechten op basis van de artefact-hash. Peers die beide rosters zien, zouden dezelfde ene roster kiezen; elke roster behoudt zijn eigen lidmaatschapsinhoud. Een laatste voorstel zou bevestiging vereisen voor join-verzoeken via deep links en voor betaalde exit-providers. Join-links op macOS en Linux zouden wachten op een expliciete stap Add-device. macOS zou daarnaast links van betaalde providers vasthouden tot ze bevestigd zijn. Dat het native op een van beide platforms draait, is niet aangetoond. Alle testresultaten zijn door de auteur gerapporteerd.
Buzz
Buzz, een community-relay met desktop- en mobiele clients, heeft werk aan groepen en agents gemerged. Agents kunnen zich authenticeren volgens de NIP-FI JWT-spec van het project, die de door de issuer opgegeven menselijke eigenaar verifieert; het weigeren of loskoppelen van die eigenaar beëindigt de sessies van diens agents, en lidmaatschap van de community door de eigenaar kan een agent toegang geven. Huddles accepteren ook geverifieerde managed-agent-records van de huidige gebruiker of de Huddle-eigenaar, naast de botrol voor owner-attestation uit NIP-OA. Deze fallback is een compatibiliteitsbeleid en vertrouwt geen onbekende records van derden. Het is geen identiteitsbewijs. Geen van beide specs is een geaccepteerde NIP.
Open aankondigingskanalen kunnen gasten met alleen-lezen-toegang toelaten via join_role=guest, en niet-vermelde open kanalen zijn verborgen in de discovery van niet-leden, maar leesbaar voor iedereen met de kanaal-ID. Toelatings-events kunnen tot 100 leden toevoegen, waarbij gedeeltelijk succes mogelijk is. De fix voor kanaalinstellingen, vorige week nog gemeld als open voorstel, is nu gemerged: wijzigingen worden in één transactie vastgelegd, samen met hun verzoeken en meldingen. Een mislukte overstap van openbaar naar privé wordt volledig teruggedraaid, zodat verwijderde leden via die rollback niet opnieuw verschijnen. Op mobiel breken mislukte push-instellingen de app niet langer; die probeert het een beperkt aantal keren opnieuw en biedt handmatig herstel, met tests op gemockte kanalen en ongeverifieerd gedrag van APNs op apparaten. Gesynchroniseerde mutes veroorzaken geen lege opstart meer, nu ze worden gecontroleerd tegen de daadwerkelijke push-abonnementen voor DM’s; deze fix steunt op één iPhone-log. In het relay-mesh verlopen records van dode peers na vijf minuten zonder heartbeats, terwijl live verbindingen zijn uitgezonderd.
Nieuwere merges zijn niet bevestigd in een release. Toevoegingen van leden via kind 9000 worden nu samen met hun roster-writes vastgelegd: bij een mislukte wijziging wordt geen van beide opgeslagen, en hetzelfde ondertekende event kan opnieuw worden geprobeerd. Kinds 9001, 9021 en 9022 houden het oude hiaat. Diagnostiek in shadow-mode voor NIP-FI logt nu de geverifieerde Nostr-sleutel en een vaste privéreden voor gevallen die geweigerd zouden worden, zonder tokens of claims te loggen. Dit verandert niets aan toelating of handhaving. Buzz’ eigen NIP-AP agent-spec, een projectdocument buiten de geaccepteerde NIPs, vereist nu een door de client gedefinieerd agentType in de instellingen. Opstartpogingen met instellingen van een ander type worden geweigerd, een ontbrekend veld behoudt zijn oude betekenis en een ander type toewijzen kan de geneste instellingen van het oude type verwijderen. Selectie van een solo-agent faalt gesloten bij misvormd nieuwste managed-agent-beleid van kind 30177. Oudere data blijft uitgesloten. Agents krijgen als label hun door de eigenaar beheerde naam, terwijl artwork en berichtauteurs nog steeds profielen gebruiken.
Op mobiel gebruikt het aanmaken, weergeven en verwijderen van gehoste agents NIP-OA-eigendomsbewijs en registraties van kind 30177 met duurzame nieuwe pogingen onder dezelfde identiteit, en bewaart het privé-instructies in beveiligde opslag. De hosted-gate die tijdens het bouwen wordt ingesteld, staat uit in App Store- en interne builds, dus dit betekent geen publieke beschikbaarheid. Koude start bij gehoste iOS-uitnodigingen behoudt de invite-intent, importeert een overeenkomende sleutel en herstelt vanuit een back-up. Alleen de auteur heeft het hoofdpad getest, en het fallback-endpoint voor lidmaatschap en een nieuwe registratie blijven onopgelost. Herstel van push-inschrijving wacht met exponentiële backoff en vervangt daarna een opgeslagen verzoek dat met 401 is afgewezen door een begrensde nieuwe challenge en App Attest-sleutel. Intents blijven behouden na 400 of tijdelijke fouten, en een gewone 404 wordt normaal afgehandeld. Dit herstel is niet gecontroleerd op echte apparaten. Berichtlinks naar openbare kanalen waar de gebruiker geen lid van is, halen metadata van kind 39000 op en openen alleen-lezen, terwijl de drempels voor privékanalen en DM’s ongewijzigd blijven. Tijdens opnieuw verbinden komen links in een wachtrij, en één trage lookup kan latere links tot acht seconden vertragen.
Verscheidene open pull requests waren bij onze bronafsluiting nog niet gemerged. Een standaard uitgeschakelde buzz_v1-capability zou de leesstatus aan clientzijde vervangen door aanroeperprivé NIP-98-API’s voor zijbalk, leesstatus en dekking, plus revisies per persoon en invalidatiepings van kind 24300 die uitsluitend via de relay lopen. Relays zonder die capability houden NIP-RS, en grote databases moeten eerst concurrent hun indexen opbouwen. Threadsamenvattingen zouden alleen de laatste 1.000 antwoorden scannen, de laatste 10 auteurs teruggeven en live-updates hoogstens één keer per seconde per pod versturen, zodat ze niet elke eerdere deelnemer zouden opsommen. Antwoorden van agents op reacties zouden in de thread onder het bericht komen waarop gereageerd is, met gebruik van de laatste geldige NIP-25-tag e en met terugval op het oude anker. Agents die op Hermes draaien, zouden een MCP-shell met agentscope krijgen om in kanalen en DM’s te posten. Zonder zijn bridge weigert die te draaien, en inloggegevens worden gemaskeerd, maar installatie, herstart en live posten zijn niet geverifieerd. Een ACP-adapterfix zou zowel de v1- als de v2-initialisatienamen versturen, terugvallen op de stabiele v1 en de gevalideerde hoofdversie vastzetten. Dit herstelt het agenttransport en is geen wijziging van het Nostr-protocol. Mobiel Voorlezen zou de tekst-naar-spraakengine van de telefoon gebruiken en code, links en bijlagen overslaan. Welke engine de gebruiker kiest, bepaalt waar de spraak wordt verwerkt. Een zelfstandige relay-loadgenerator zou mensen en NIP-OA-agents simuleren en runs laten mislukken die vastgestelde limieten voor fouten en latentie overschrijden. Hij verandert geen relaycode en bewijst geen schaal op productieniveau.
Mosaico
Mosaico, een daemon die agents coördineert in relaygebaseerde groepen (NIP-29), heeft aanwezigheid op basis van heartbeats gemerged. Een agent telt nu alleen als aanwezig in een kanaal zolang hij een status-event publiceert met een vervaltijdstempel (NIP-40) dat 90 seconden vooruit is gezet en elke 30 seconden wordt vernieuwd. Op zichzelf telt een lokaal draaiend proces niet langer als aanwezigheid. Het lidmaatschap blijft behouden terwijl een agent offline is, zodat hij kan hervatten. Een herbouwd leesmodel voor groepen wordt eenmaal per relaywijziging opgebouwd met een canonieke aankomstcursor, waardoor chat niet meer verloren gaat wanneer een breed groepsabonnement wordt vervangen.
Drie latere merges zijn niet bevestigd in een release. Vervangende abonnementen gebruiken nu nieuwe REQ-ID’s en worden geopend voordat het oude wordt gesloten. Een buiten gebruik gesteld profiel wordt buiten het latentiekritieke pad gepubliceerd, en een agent die een kanaal verlaat, trekt zijn aanwezigheid in terwijl hij nog NIP-29-lid is. De onderbouwende probes zijn van de auteur, niet onze metingen. Retryboekhouding volgens claim-first wordt duurzaam opgeslagen in schema 27 en overleeft het opnieuw afspelen door de relay. De wachttijd loopt exponentieel op van 30 seconden tot een uur op één seriële timer, en na 10 mislukkingen wordt opgegeven. Een ontbrekend event wordt niet als verwijdering behandeld, en omdat het bewaarde venster 4.096 items bevat, is levering van elk event niet gegarandeerd. Snapshots die alleen groepen betreffen wekken nu groepsconsumers, en bij vervangingen met gelijke tijdstempels blijft het laagste event-ID behouden, zoals NIP-01 voorschrijft. Wijzigingen die alleen de inhoud betreffen, wekken nog steeds de algemene consumer. Een afgebakende fallback voor een ontbrekende parent kan wachten op de volgende groepswijziging of op een time-out van 15 seconden.
Sonar
Sonar, een messenger die Nostr, MLS-versleuteling en een Bluetooth Low Energy-mesh combineert, heeft een opstartfix voor mobiele dataverbindingen gemerged. De PR herleidt de trage eerste weergave tot het aankoppelen van de push-relay, dat een lock op de store vasthoudt. Op Android slaat het opstarten die lock over wanneer de lokale node al open is, bijvoorbeeld wanneer pushregistratie hem vóór de koude start had geopend. Op iOS laat de app de notification service extension weten dat die moet stoppen met verbinden en leeghalen, zodat de app kan renderen.
Shopstr
Shopstr, een Nostr-marktplaats, heeft de ondersteuning voor het verwijderen van advertenties gemerged die vorige week werd voorgesteld. Een ondertekend verzoek tot verwijdering van een event (NIP-09) van een verkoper haalt de advertentie nu uit de cache en markeert haar met een tombstone, zodat een verwijderd artikel niet kan terugkeren of vanuit de cache kan worden gekocht, terwijl nieuwere herplaatsingen nog wel verschijnen. Sommige verwijderingen worden nog steeds gemist: een verwijdering die vóór haar advertentie binnenkomt, wordt genegeerd, oudere verzoeken zonder k-tag komen niet overeen met de relayquery, en eerdere verwijderingen worden niet met terugwerkende kracht verwerkt. Ook kunnen relays de verwijderde events bewaren. Los daarvan laten misvormde gift-wrapped berichten de weergaven Orders en My Listings niet langer vastlopen, en verkopers kunnen nu hun eigen bestellingen bekijken, terwijl andere gebruikers nog steeds een 403 krijgen.
Drie open pull requests, bij onze bronafsluiting nog niet gemerged, richten zich op de integriteit van bestellingen. #665 zou de deelnemers van elke bestelling eenmalig vastleggen via NIP-98-registratie, waarbij de koper uit de authenticatie en de verkoper uit de ondertekende advertentie wordt gehaald, en latere schrijfacties zouden die niet kunnen wijzigen. Een mislukte registratie zou de checkout niet tegenhouden, en nieuwe onopgeloste bestellingen zouden niet uit tags worden afgeleid door te raden. Legacybestellingen worden slechts tot een beperkte cutoff gedekt, en een lacune in de manier waarop de status per order-ID wordt opgeslagen, blijft onopgelost. #666, dat afhangt van #665, zou gift-wrapped (NIP-59) statusberichten voor bestellingen alleen toepassen als ze afkomstig zijn van de vastgelegde koper of verkoper van de bestelling, niet van zomaar elke geauthenticeerde afzender. Onopgeloste bestellingen blijven in behandeling, de bevestiging van een koper na betaling telt niet als bevestiging door de verkoper, en vervalste berichten blijven gewone chat zonder de bestelstatus te veranderen. #664 zou metadata van Cashu v2-keyset-tokens lezen voor escrowregistratie en uitspraken zonder de keyset via het netwerk op te zoeken, en de som van de proofs corrigeren. Voor de tokendecodering bij het aanmaken van bestellingen is nog een aparte fix nodig.
Conduit
Conduit, een Nostr-marktplaats met gekoppelde apps voor kopers en handelaars, heeft één versleuteld accountrecord gemerged. Walletmetadata, seed, native identiteit, adres, voorkeuren en de voortgang van de setup staan nu in één record voor willekeurige aangepaste appdata (NIP-78), versleuteld met geversioneerde versleutelde payloads (NIP-44) en gecontroleerd op handtekening, eigenaar en afgeleide identiteit; beide apps vinden het zodra de signer toestemming geeft. De overstap is niet achterwaarts compatibel: oudere back-up- en herstelpaden worden genegeerd, en legacyback-ups blijven staan zonder automatische migratie. Andere merges voegen inloggen met een bestaande nsec toe, bewaard in de lokale browseropslag, vereisen exact ondertekende verzendvoorwaarden bij het bewerken van productfamilies en verplaatsen het herstel van de checkout naar IndexedDB, waarbij eerst wordt teruggelezen voordat het als opgeslagen wordt gemarkeerd.
Daarnaast is Conduit overgestapt op NWC SDK 8.1.1, wat de fixes daarvan meebrengt voor bedragvalidatie, begrensde verbindingspogingen, de afhandeling van gesloten pools en responses die nog onderweg zijn. De walletkeuze, de versleuteling en het betaalbeleid van Conduit blijven ongewijzigd. Uitrol van de apps blijft onbevestigd. Twee draft-pull-requests waren bij onze bronafsluiting nog niet gemerged. Betaalactivering zou de betaalstatus persistent opslaan, teruglezen en afleveren binnen een vast uitvoeringsvenster van twee minuten dat door retries niet wordt gereset. Nostr-ontvangstbewijzen, privéaccountherstel en wijzigingen in voorraad of fulfilment zouden elk afzonderlijk ondertekend bewijs nodig hebben. Ontvangstbewijzen die daarna 24 uur worden bewaard, herstellen geen betaalbevoegdheid, en controles met een gevulde wallet, apparaatcontroles en controles door maintainers staan nog open. Producten die uitsluitend voor evenementen zijn zouden NIP-99-listings van kind 30402 als verborgen markeren met een conduit_event_only-extensie. Zulke producten zouden buiten de normale catalogus en checkout blijven en een exacte, geautoriseerde toewijzing aan een specifieke evenementeditie nodig hebben. De verborgen ondertekende data blijft openbaar, en andere clients ondersteunen alleen de standaard hidden-vlag.
LNbits
LNbits, de Lightning-wallet- en accountserver, heeft een optie gemerged om zijn Nostr-meldingen als NIP-17-privéberichten te versturen. Beheerders kunnen kiezen tussen legacy versleutelde NIP-04-berichten en NIP-17-privé-direct-messages, die bij nieuwe instellingen de standaard zijn. Voor NIP-17 zoekt de server de relaylijst voor de DM-inbox van de ontvanger op, waarbij NIP-05-relays dienen als ontdekkingshints en als bestemming wanneer er geen lijst bestaat. Is er een lege lijst gepubliceerd, dan mislukt het verzenden. Elke verzending is beperkt tot 30 seconden en moet door minstens één inboxrelay worden geaccepteerd, en er wordt nooit teruggevallen op NIP-04.
Zeus
Zeus, de mobiele Bitcoin- en Lightning-wallet, heeft zijn fix voor de budgetadministratie van Nostr Wallet Connect wanneer de verversing na betaling mislukt opgenomen in de prerelease v13.2.4-rc1, samen met de eerdere fix waardoor Nostr Wallet Connect make_invoice zijn eigen invoice teruggeeft. Vóór de fix sloeg een verversingsfout na een NIP-47-verzending de budgetadministratie over en gaf die een fout terug voor een betaling die mogelijk was gelukt. Nu belast een teruggegeven preimage het budget via de bestaande fallback, en bij een time-out wordt het bedrag als lopende uitgave vastgehouden, ook als de betaling in de lijst ontbreekt. Andere lacunes, waaronder LND-betalingen die nog onderweg zijn, kunnen blijven bestaan. Daarna volgde v13.2.4-rc2 met uitsluitend updates van afhankelijkheden.
Sindsdien zijn twee nieuwere fixes in de broncode gemerged, die in geen van beide release candidates zijn bevestigd. De correctie van de standaardvervaltijd zorgt ervoor dat de lokale BOLT11-decoder de standaardvervaltijd van 3600 seconden uit de specificatie toepast wanneer een invoice geen expiry-veld heeft. Zulke invoices werden behandeld alsof ze nooit verliepen, waardoor de controle die het betalen van verlopen invoices blokkeert niet gold, en de NWC-invoicevalidatie in NostrConnectUtils had dezelfde lacune. De correctie voor back-ups per wallet reset de tijdstempel van de Nostr-mintback-up voor elke ecash-wallet afzonderlijk. Vóór deze fix kon een wallet die in dezelfde sessie als een andere ecash-wallet uit een seed werd hersteld, de tijdstempel van die andere wallet erven. De herstelde wallet kon dan haar eigen oudere relayback-ups als verouderd laten vallen en een lege mintlijst opslaan, waardoor automatisch herstel werd uitgeschakeld. Een back-up die pas na een walletwissel klaar is, kan haar tijdstempel nog steeds onder de verkeerde wallet wegschrijven. Wallets die al getroffen zijn, houden hun opgeslagen lege lijst en hebben het handmatige herstel in Mint sync nodig, of hun mint-URL’s moeten opnieuw worden toegevoegd. Hun ecash blijft bij de mint. Beide pull requests melden dat er niet op apparaten is getest.
npub.cash
npub.cash ontvangt Lightning-betalingen voor Nostr-identiteiten en zet die om in Cashu-ecash. Het project heeft een serverwijziging gemerged die zap receipts publiceert naar de relays die de betaler heeft opgegeven. De server parseerde de relays die in een zap request worden genoemd al, maar negeerde ze bij het publiceren van betaalde receipts. Nu gaan receipts naar die relays wanneer het request er minstens één noemt, terwijl requests met een ontbrekende of lege relaylijst nog steeds de geconfigureerde standaardrelays gebruiken.
eHagaki
eHagaki, een Nostr-webclient die ook als insluitbare Web Component wordt geleverd, heeft 1.31.0 en 1.31.1 uitgebracht. Versie 1.31.0 voegt reposts (NIP-18), reacties (NIP-25) en beheer van geüploade media toe, rondt de outboxroutering (NIP-65) af voordat een event naar een externe signer gaat, en kan postgeschiedenis en een cache bijhouden in een lokale Citrine-relay. De IndexedDB-migratie in deze versie reset de lokaal weergegeven postgeschiedenis, maar behoudt concepten en opgeslagen verwijderingsverzoeken; geschiedenis die op relays staat, kan opnieuw worden opgehaald, terwijl posts die alleen lokaal bestaan vóór de upgrade een back-up of export nodig hebben. Met versie 1.31.1 worden NIP-96-uploadservers gesynchroniseerd via kind 10096 naast kind 10063 van Blossom, blijven bruikbare gedeeltelijke relayinstellingen behouden en zijn de fixes voor de uploadserverlijst en de mediaserversynchronisatie meegenomen. Het ophalen van de uploadserverlijst via gedeclareerde leesrelays behoudt de nieuwste geldig ondertekende lijst ondanks time-outs van andere relays en laat de instellingen ongewijzigd wanneer er geen lijst binnenkomt. Mediaserversynchronisatie behandelt voorkeuren voor Blossom en NIP-96 afzonderlijk en publiceert na een mislukte opzoeking nooit een ingekorte lijst.
Andere gemergede betrouwbaarheidsfixes zijn nog niet bevestigd in een release. Na een 401 of 403 kunnen gebruikers zich vanuit het mediascherm registreren bij de NIP-96-servers yabu.me of nostrcheck.me. De NIP-98-handtekening dekt de werkelijke POST-URL en de body-hash, een wijziging van account of bestemming annuleert het verzoek, een beveiliging blokkeert dubbele verzendingen en verzoeken met een onbekende uitkomst worden niet opnieuw verstuurd. eHagaki levert nooit een wachtwoord aan, en stappen voor uitnodigingscodes of betalingen verlopen via de officiële site van de provider. Grote Blossom-bestandslijsten tonen telkens 24 items per pagina vanuit een begrensde lokale snapshot. Antwoorden van meer dan 8 MiB of 10.000 items worden afgewezen, en bij een wijziging van account, sessie of server wordt de snapshot verworpen. Het einde bereiken betekent dat de snapshot op is, niet dat de server geen bestanden meer heeft. Herstel van NIP-46 remote signers bouwt de verbinding opnieuw op en wijst oude openstaande verzoeken na 30 seconden expliciet af zonder ze opnieuw te versturen. Bij uploads naar de Blossom-server van Primal wordt de bestaande ondertekende autorisatie gecodeerd als standaard Base64 met padding, terwijl andere servers Base64URL behouden.
Ook twee nieuwere merges zijn niet bevestigd in een release. Publiceren gebruikt nu gedeelde, begrensde en geverifieerde wachttijden voor relay-verzoeken en houdt bezorging en voortgang gekoppeld aan de sessie. Dit vervangt verschillende afzonderlijke timers. De eerste geldige relay-bevestiging telt als succes, terwijl de bezorging aan de overige relays doorgaat. Nooit beweert de voortgangsweergave dat elke relay is bereikt, en wisselen van account of uitloggen stopt de bezorging op de achtergrond. Op verzoek kan de postgeschiedenis gerelateerde antwoorden, reacties en verwijderingen verversen, binnen een limiet van drie seconden. Al ontvangen resultaten blijven na een gedeeltelijke time-out bewaard. Een verwijdering die niet binnenkomt, geldt niet als bewijs dat er geen bestaat.
Formstr Drive
Formstr Drive, een app voor het versleuteld delen van bestanden die gebouwd is op Nostr en Blossom, heeft zijn werk aan DriveKey-herstel gemerged. Eerder meldden we dat als een open voorstel. Voordat de app een gecombineerde keyring wegschrijft, leest hij elke bereikbare relay, zodat oude sleutels samenkomen naarmate ze zichtbaar worden. Een nieuwe sleutel maakt hij alleen aan wanneer twee van de vier app-relays niets teruggeven en er geen geschiedenis of versie is. Een schrijfrelay die niet antwoordt, kan een oude sleutel nog een tijdlang verbergen, en oudere builds kunnen het nieuwe JSON-formaat niet lezen.
Daarnaast hield het project de ontsleutelde bestanden, shares, mappen en outbox van elk account gescheiden. Wie van account wisselt, blokkeert openstaande handtekeningen en imports van het vorige account, al kan een klaargezette blob zonder verwijzing achterblijven. Nieuwe accounts moeten nu expliciet een uploadserver kiezen, zonder stille failover, terwijl eerdere automatische standaardinstellingen behouden blijven. De server ziet nog steeds de pubkey, het tijdstip van uploaden en de versleutelde bytes. Waarschuwingen voor duplicaten vereisen nu identieke live bytes op dezelfde server en in dezelfde map. De Android-paden voor accountscheiding en het bevestigen van duplicaten zijn niet getest, en we hebben niet bevestigd dat iets hiervan in een release zit.
diVine
diVine, een client voor korte video’s op Nostr, heeft wijzigingen gemerged aan berichten, accounts en challenges. De vroege bètareleases hebben alleen algemene release notes, dus niets hiervan is vastgesteld in uitgebrachte builds. Versleutelde account-snapshots per veld synchroniseren voorkeuren, beslissingen over badges en weggeklikte meldingen. Ze proberen openstaande wijzigingen lokaal opnieuw en blokkeren onveilig publiceren wanneer leesacties onvolledig zijn. Leesmarkeringen voor DM’s behouden het bestaande protocol. Meldingen worden als gelezen gemarkeerd via de server-API, en alles als gelezen markeren vereist een verbinding. OS-machtigingen, inloggegevens en leeftijdstoestemming blijven op het apparaat.
In DM’s sluiten de composer en het deelvenster zodra een bericht veilig in de wachtrij staat. Bezorging op de achtergrond draait niet terwijl de app is afgesloten, en bezorging telt pas na bevestiging door een relay. Mislukte nieuwe pogingen tellen consequent mee voor de pogingslimiet. Verouderde NIP-04-berichten met een ongeldige vorm worden verworpen en vastgelegd in een register. Opgeslagen lege bubbels blijven wel staan, en compatibiliteit met externe signers en andere apparaten is niet vastgesteld. Optionele vervaagde previews voor video-DM’s van vertrouwde afzenders staan standaard uit en zijn altijd vervaagd, met een inhoudswaarschuwing. Omdat de video nog steeds wordt gedownload, biedt vervaging geen netwerkprivacy. In groepen verbergt het blokkeren van een lid alleen diens berichten; een waarschuwing meldt dat die persoon jouw berichten nog wel ontvangt. Verlaat je een ruimte, dan blijft die status opgeslagen. Het aanmaken van nieuwe groepen blijft achter een flag die standaard uit staat. Deze wijzigingen gelden voor bestaande groepen, en een trust-and-safety-review staat nog open.
Twee features die eerder nog open stonden, zijn gemerged. Caching van ontvangen DM-video’s bewaart ontsleutelde bestanden per account, gedurende maximaal 30 dagen of tot 300 MB. Automatisch laden in vertrouwde chats en van gevolgde gebruikers onthult aan de mediahost wanneer er gekeken wordt, terwijl video’s van vreemden een tik vereisen. Een takedown door de server trekt gecachete bytes niet direct in, al kunnen die eerder worden verwijderd. Opzoeken van gebruikersnaameigendom raadpleegt bij zoekopdrachten naar Divine-handles op de eerste pagina de NIP-05-directory van de naamserver en pint alleen een actieve eigenaar vast. Gezochte namen verschijnen in serverlogs, en dit is geen algemene NIP-05-validatie.
Personenlijsten worden algemeen beschikbaar, voortbouwend op gecombineerd werk aan ontdekking en beheer. Supportlinks in profielen staan standaard aan. De editor wacht op een strikte ruwe kind 0-leesactie van elke relay, waarbij verborgen providers en niet-opgeslagen bewerkingen behouden blijven. Het doorzetten naar het releasekanaal van de store en de backend-uitrol hebben nog niet plaatsgevonden. Client-attributietags volgen de huidige NIP-89-voorkeur bij nieuwe pogingen en metadatabewerkingen en verwijderen een vreemde client-tag vóór het ondertekenen. Ondertekende ingeplande posts veranderen daarbij nooit. Geauthenticeerde externe korte links staan standaard uit. Ze ondertekenen binnen twee seconden de exacte NIP-98-POST en body en vallen terug op canonieke URL’s, die DM’s en Nostr-events altijd behouden. Het aanmaken via de gateway is uitgerold in uitgeschakelde toestand, met nog uitrolpoorten in het verschiet.
Makers kunnen hergebruik van een openbare video toestaan met een expliciete tag. Dit staat standaard uit en wordt bij het publiceren op uit vergrendeld door audio met een no-derivatives-licentie. Het gaat om een clientconventie, niet om DRM. Werk aan challenges dat alleen voor tests bedoeld is, omvat een ondertekende protocolbasis, ondertekening van inzendingen met regel- en toestemmingscontroles, duurzame opslag per account en native flows voor beoordeling en intrekking in speciale testbuilds. Bevestiging door een relay betekent geen goedkeuring door de organisator. Ontdekking in productie is uitgeschakeld. Levering van de backend, acceptatietests met echte accounts en een releasevolgorde over clients heen staan nog open.
Ook nieuwere merges zijn niet bevestigd in een release. Wanneer de kind 10050-DM-inbox van een ontvanger niet kan worden gelezen, hergebruikt de NIP-17-wachtrij voor aangehouden verzendingen nu de ID van de gift wrap voor de ontvanger die een relay al heeft geaccepteerd. Zo blijft die wrap-identiteit bij nieuwe pogingen behouden. Vindt een nieuwe poging de inbox wel, dan kan de client opnieuw publiceren naar de geadverteerde relays. Duikt er geen inbox op, dan houdt hij het bij de geaccepteerde kopie en vertrouwt hij erop dat relays die bewaren. Berichten kunnen nog steeds als mislukt worden weergegeven. Bezorging bij of lezen door de ontvanger blijft onbewezen, en nieuwe pogingen voor reacties en verwijderingen vallen buiten deze wijziging. Vooraf laden van openbare meldingen en verversen van de tijdzone gebruiken een begrensde thumbnailcache en een gedeelde SQLite-index, met uitsluiting van DM’s en campagnes. Daarvoor zijn een normale native release en een gecoördineerde wijziging aan de service nodig, en uitvoering op de achtergrond is niet gegarandeerd. De video-editor krijgt er vijf overgangen bij, voor 20 in totaal, die in preview en export native worden gerenderd. Verminderde beweging beperkt bewust de previewtegels. Flash-tussenruimte kan terugvallen op een dissolve. We hebben de native implementatie niet in de praktijk getest.
Vier open pull requests waren bij onze bronafsluiting nog niet gemerged. Sociale videostickers, gestapeld op eerder werk aan infostickers, zouden kleine platte sticker-tags schrijven met metadata voor vermeldingen (p), hashtags (t) en links (r). De speler zou tikbare gebieden over de video leggen en waarschuwen voordat externe links worden geopend. Andere clients zien alleen de stickers die in de video zijn ingebrand, tenzij ze de tags implementeren, en die vormen geen geaccepteerde NIP. Vermeldingen in Concord-chats achter een flag zouden identiteiten binnen geauthenticeerde versleutelde berichten houden. In-app-meldingen zouden alleen komen van gevolgde, niet-geblokkeerde afzenders in ruimtes die de gebruiker heeft geopend, met een maximum van 50 rijen en een opgeslagen leesstatus. Pushmeldingen van het besturingssysteem of een openbare uitrol van chats zouden ze niet in gang zetten, en controles op identiteitsbotsingen, replay en blokkades worden alleen door afgebakende tests gedekt. NIP-17-rumor-tags zouden de auteur van de reactie één keer noemen, met de werkelijke kind, en ingepakte verwijderingen zouden misleidende p-tags weglaten. De gift wraps waren al aan de juiste ontvangers geadresseerd, dus dit verhelpt geen ontvangerslek. Rumors die al in de wachtrij staan, blijven ongewijzigd. Het gedrag in andere clients is niet getest, en er blijft een afweging bestaan rond het indelen in ruimtes. De volgende native build zou het bestaande delen via korte links standaard inschakelen, terwijl het in de webversie uit blijft. Uitgeschakelde, uitgelogde en foutpaden zouden volledige canonieke URL’s behouden. Distributie via de store, gereedheid van de service en apparaatcontroles zijn niet aangetoond.
rust-nostr
rust-nostr, een verzameling Nostr-protocolbibliotheken in Rust, heeft een brekende wijziging gemerged in de manier waarop subscriptions opnieuw worden uitgegeven. SubscriptionData toont nu de huidige EOSE-status van elke relay. Bij opnieuw uitgeven worden de CLOSE en de REQ met de opgeslagen filter in één atomaire stap in de wachtrij gezet, zelfs zonder verbinding. Dat garandeert hoe ze in de wachtrij komen, maar niet dat beide frames de relay bereiken. Herstel na een gat in de notificaties laat een subscription niet langer stilletjes vallen en stuurt ook geen dubbel verzoek meer. Late EOSE-berichten of events van de vorige REQ kunnen nog steeds overlappen met de nieuwe, omdat niets op de lijn ze van elkaar onderscheidt. Dit is gemergede broncode, en we hebben niet bevestigd dat het in een release zit.
nostr-sdk-ffi
nostr-sdk-ffi, de bindings waarmee andere talen de SDK van rust-nostr kunnen gebruiken, heeft ruwe toegang tot NIP-44 v2-conversatiesleutels gemerged. Concord-hosts hoeven daardoor niet langer hun eigen ECDH- en HKDF-code mee te leveren. De wijziging is een dunne wrapper rond de bestaande afleiding en voegt geen nieuwe cryptografie toe. De auteur meldde een Python-build en een round trip die aan beide kanten dezelfde sleutel opleverde, maar voegde geen specifieke unittests toe. Dit is uitsluitend gemergede broncode.
NDK
NDK, een Nostr-ontwikkelkit voor Dart, publiceerde 0.11.0-dev.2, een prerelease met brekende wijzigingen. Het gaat niet om een stabiele 0.11.0, en de kit staat los van de JavaScript-NDK. De release voegt NIP-49 met wachtwoord versleutelde ncryptsec-sleutels met een voorbeeld-UI toe. Volgens de release notes begrenst de ontsleuteling logN, wijst ze onbekende beveiligingsbytes af en zet ze afgeleide buffers op nul. Deze beweringen steunen op de notes en de gemergede broncode, en we hebben geen onafhankelijke audit of test-vector-run gezien. Verzoeken melden nu een notSent-uitkomst met daarin de verbindings- of verzendfout. Verzoeken aan onbereikbare relays worden afgerond zodra geen resterende relay of filter meer kan antwoorden, zonder dat een time-out hoeft te verlopen. Broadcasts controleren of er een signer is voordat een event als onderweg wordt gemarkeerd, ID’s van zap requests gebruiken de opgeslagen created_at, en NIP-11 relaymetadata wordt op verzoek opgehaald via een gedeelde cache, zodat die niet langer elke synchronisatie blokkeert.
In de prerelease zitten ook wijzigingen die eerder alleen in de broncode stonden. NIP-65-lijsten die een relay-URL herhalen, worden nu correct samengevoegd. Daarbij worden lees- en schrijfmarkeringen gecombineerd en blijft de set schrijfrelays voor de outbox behouden. In één enkele observatie zag de auteur 5 verkeerd gelezen lijsten onder 932 profielen. Een optionele BUD-06-preflightcontrole voor uploads vraagt de server, met de eigen autorisatie van de upload, of die een blob zou accepteren, en meldt de status en de reden, zoals echte uploadweigeringen nu ook doen. Een 404 betekent dat ondersteuning onbekend is, en slagen garandeert niet dat de upload zal lukken. Een brekende wijziging in de time-outs voor NIP-77-reconciliatie splitst de enkele time-out op in een open- en een idle-time-out met een getypeerde fout. Tijd die wordt besteed aan wachten op authenticatie, telt daarbij niet mee. Een algemene deadline is er niet, dus een synchronisatie die vooruitgang blijft boeken, kan onbeperkt doorlopen. We hebben de wijziging ook niet geverifieerd zien worden tegen een live relay.
Openstaande pull requests stellen NIP-05-caching op basis van identifier, met negatieve caching voor, evenals een cache-API die ID’s en tijdstempels voor NIP-77 teruggeeft, afhandeling van WebSocket-gereedheid, volledige NIP-11-velden en voltooiing wanneer een verbinding wordt geweigerd. Een verder voorstel, dat bij een recente statuscontrole nog openstond, zou accounts aanmaken en herstellen met passkeys van het browser- en Flutter-platform, volgens een conceptontwerp voor passkey-identiteit met afgeleide en opgeslagen sleutelmodi plus expliciete legacy-metadata. Onbekende handles worden geweigerd en nooit als nieuw account behandeld, en herstel moet onafhankelijk worden geverifieerd voordat een opgeslagen registratie wordt behouden. De auteur merkt op dat de interoperabiliteit nog niet bij alle passkey-providers is gevalideerd.
Applesauce
Applesauce, een verzameling TypeScript-bibliotheken voor Nostr, heeft nieuwe broncodewijzigingen met changesets, en we beweren niet dat er een bijbehorende release is. Zelfstandige messagingclients en expliciete relay-authenticatie voegen NIP-04- en NIP-17-clients toe voor een vast account, die expliciete NIP-42-authverzoeken doen en voorbereide, ondertekende verzendingen opnieuw proberen. Via afgebakende ingepakte gesprekken en rumor-stores worden kind 14-rumors en threadmodellen beschikbaar gesteld zonder dat er signer- of netwerkwerk wordt gestart. Ontsleuteling staat standaard uit, ingepakte verzendingen hebben kind 10050-relays nodig voor elke deelnemer, de afzender inbegrepen, en acceptatie door een relay is geen ontvangst door de peer. Begrensd herstel van de cache met ontsleutelde inhoud gebruikt standaard concurrency 8, wat de volgorde van events kan veranderen tenzij de waarde op 1 wordt gezet. Apps moeten die plaintext-caches zelf afbakenen en versleutelen. Daarna volgen het NDR-transport en een aparte Cordn-coördinatorclient. NDR moet zijn eigen, aparte ratchet-state persistent opslaan, en Submitted betekent lokale overdracht, geen ontvangst door de peer. Cordn verzorgt alleen het transport, is in het voorbeeld geparkeerd en implementeert geen MLS. Kehto-ContextVM-integratie per venster geeft elk napplet-venster een tijdelijke ContextVM-identiteit, zonder account-auth of betalingen. Met duurzame, door de app beheerde deposits en nutzap-herstel vereisen nieuwe wallet-deposits en -inwisselingen een recovery-store die door de afnemende applicatie wordt aangeleverd, plus NUT-09-herstel via de mint. Het journaal slaat besteedbare proofs, secrets en blinding factors persistent op, dus het zou per account versleuteld en afgebakend moeten worden. Hervatten draait alleen wanneer het expliciet wordt aangeroepen, hergebruikt ondertekende ID’s en bewaart het journaal tot een relay positief accepteert, en annuleren maakt de invoice niet ongeldig. Gebundelde tijdlijnsnapshots met synchrone wallet-state groeperen tijdlijnupdates in vensters van 16 ms, terwijl de state van wallet-tokens synchroon blijft. De COUNT-requestscheduler, die vorige week werd voorgesteld, is inmiddels gemerged. Hij begint op 8 onder een concurrency-limiet en verdubbelt tot de eerste rate-limit- of transportfout, en elke fout halveert de limiet en voegt een cooldown toe. Time-outs komen naar boven als CountFailure zonder dat de limiet daalt. Latency stuurt alleen de keuze van relays; de benchmark met drie relays blijft onvoldoende voor algemene uitspraken over prestaties.
eventstore
eventstore, de bibliotheek van fiatjaf met opslagbackends voor Nostr-events, heeft twee queryfixes gemerged. Een getagde release die ze bevat, is niet geverifieerd. Alle backends volgen nu de NIP-01-regel voor lege filterlijsten: een lege lijst van ids, authors, kinds of tags matcht niets, terwijl een ontbrekende (nil) taglijst nog steeds geen beperking oplegt. Een fix voor het tellen van events in LMDB zet de HyperLogLog-cursor na een match verder, zodat tellingen niet langer eeuwig blijven hangen. Ook past het tellen geen controles op auteur, kind of tag meer toe als het filter die niet bevat, iets waardoor het eerder nul teruggaf.
zsp
zsp, de commandlinetool van Zapstore voor het publiceren van Android-apps op Nostr, bracht versie 2.0.0 uit. De README bij die tag biedt een wizard waarin een persoon bewijst eigenaar te zijn van het C1-ondertekeningscertificaat, en een commando zsp skill dat agents publicatie-instructies geeft. Daarin is het verboden om agents de keystore, het bijbehorende wachtwoord of welke private keys dan ook te geven, zodat het bewijs menselijk blijft. Verder detecteert de release JKS- en PKCS12-keystores aan de hand van hun inhoud, zodat PKCS12-stores met de naam .jks of .keystore zowel in de wizard als in het publicatiepad laden. Publiceren ermee hebben we niet getest.
nsite-gateway
nsite-gateway, dat statische websites serveert die op Nostr zijn gepubliceerd, bracht versie 3.6.6 uit. De broncodewijziging upgradet naar Applesauce 7 en herstelt het verlopen van events. Eerdere versies vervingen de expiration manager bewust door een uitgeschakelde variant om een upstream-bug met timer-clamping te omzeilen, waardoor verlopen site-events onbeperkt actief konden blijven in de store van de gateway. Nu de upstream-fix er is, gebruikt de gateway weer de normale event store. Verlopen bepaalt hier wat de gateway bewaart en serveert; het verwijdert geen events van relays of uit caches van derden. Een uitgerolde gateway hebben we niet getest.
44billion
44billion, een launcher voor Nostr-apps, veranderde de manier waarop het permissies onthoudt. Opgeslagen grants zijn nu gekoppeld aan app, permissienaam, event-kind en scope, en een wildcard-grant voor kind -1 autoriseert niet langer specifieke kinds. Granulair zijn scopes alleen voor geregistreerde combinaties van kind en scope met vertaalde labels; onbekende scopes vallen terug op een lege scope voor de hele kind, en het register begint leeg. IndexedDB-schemaversie 5 reset bewust grants uit versie 4 en verwijdert bij het opstarten niet-ondersteunde scoped grants, terwijl andere app-data behouden blijft. De aangepaste API voor persoonlijke versleuteling bevat helpers in NIP-44 v3-stijl die geen geaccepteerde standaard zijn. Het gaat om een broncodewijziging zonder vastgestelde release of deployment.
Nieuwere broncode voegt instellingen voor App Data Access toe die onthouden grants per app groeperen en gebruikers één grant of een complete app laten intrekken zonder te herladen. Intrekken heeft alleen effect op toekomstige beschermde verzoeken. Data die al is opgeslagen of gekopieerd, wordt niet verwijderd, en werk dat al loopt, wordt mogelijk niet gestopt. Een wijziging in de Blossom-assetcache beschouwt een gecachet asset pas als compleet nadat de SHA-256 van de volledige body klopt en een overeenkomende gevalideerde marker is opgeslagen. Voorlopige chunks uit oudere caches worden opnieuw gevalideerd, en streaming meldt niet langer ten onrechte een laatste chunk. Dat betekent niet dat er vóór validatie geen bytes worden blootgesteld, en er is geen nieuwe binaire release.
Blossom Servers
De Blossom Servers-directory voegde capability-rapporten uit de community toe voor elke server-URL, elk toegeschreven aan de bijdrager. Handmatige claims en browserobservaties worden apart gehouden en vallen na respectievelijk 90 dagen en 24 uur uit de filters. De controles kijken naar HTTP-responses en geadverteerde methoden, en daarnaast naar auth- en betalingschallenges. Anonieme browsercontroles sturen een HEAD-request die metadata voorstelt voor een PNG van 68 bytes zonder iets te uploaden, dus een 200-antwoord bewijst niet dat een echte upload werkt. Het laden van discussies is nu afgebakend, en toeschrijving aan bijdragers vervangt de eerder geïmpliceerde autoriteit van operators. Een rapport bewijst niet wie een server beheert en zegt niets over wereldwijde uptime of volledige BUD-compliance, en bijdragers kunnen het oneens zijn of zich vergissen. Een deployment of release hebben we niet geverifieerd.
Nieuwere broncode voegt configureerbare app- en lookup-relays toe en leest accounts en outboxes via NIP-65. Een bestaande publieke kind 10086-lookuplijst heeft voorrang. Opslaan werkt de publieke lijst alleen bij als er al een bestaat en blijft anders lokaal. Het lokale publicatierecord wordt pas bijgewerkt nadat minstens één relay het event bevestigt, wat niet betekent dat elke relay het heeft ontvangen. Er is geen release of deployment bevestigd.
Ditto
Ditto, de Nostr-client van Soapbox, repareerde H.264-metadata die door misvormde WebCodecs-encoders wordt geproduceerd, zodat getranscodeerde video’s op iOS kunnen afspelen. De client detecteert verdubbelde SPS- en PPS-NAL-headerbytes en foute gereserveerde bits in het avcC-record en herstelt die voordat de Mediabunny-muxer MP4-metadata schrijft, terwijl correct gevormde of niet-herkende records ongewijzigd blijven. Versie 2.45.1 is uit, maar we hebben niet bevestigd dat die de fix bevat, en evenmin hebben we het afspelen op een fysiek iOS-apparaat getest. De wijziging is gericht op deze H.264-fout, niet op elke codec of video.
Amber-desktopsigner en Android-fix voor NIP-46
Amber, de Nostr-signer voor Android, heeft op 27 oktober broncode gemerged voor een Compose-desktopsigner voor NIP-46 (Windows/macOS/Linux) die het Android-permissiemodel per app en per kind spiegelt (commit). NIP-55 blijft beperkt tot Android. De desktopcode ondersteunt meerdere accounts en nostrconnect/bunker-verbindingen met relays en geschiedenis per app, plus Tor en meldingen in het systeemvak. Sleutels staan in versleutelde PKCS12-opslag achter een verplichte Argon2id-wachtwoordzin, met versleutelde databases per account. Packaging en runtimegedrag op de desktop hebben we niet geverifieerd.
Een aparte gemergede wijziging in de Android-app, niet in de desktopsigner, ververst NIP-46-relaysubscripties en verbindingsfilters nadat een account uitlogt. Daardoor luistert Amber niet langer naar de sleutels van een verwijderd account. De afgeschermde melding op het vergrendelscherm toont nu ook de omschrijving van het verzoek. Dat maakt de melding nuttiger, maar het voegt geen privacy toe. Er is geen nieuwe stabiele release met een van beide Android-wijzigingen bevestigd.
noStrudel: napplet-intents en gesynchroniseerde app-data
De webclient noStrudel heeft verschillende broncodewijzigingen gemerged, zonder bevestigde tag of deployment. Intents tussen napplets worden opgelost via de catalogus en z/i-manifestdeclaraties, waarbij geaccepteerde payloads worden afgeleverd nadat het doelframe is geladen, met een door de runtime geattesteerde afzender-ID; niet-ondersteunde intents worden geweigerd en handlers met een expliciet doel vereisen bevestiging door de gebruiker (commit). Geïnstalleerde napplets en standaardhandlers synchroniseren per account in met NIP-44 versleutelde kind 30078-app-data met een three-way merge (commit), en geselecteerde NIP-66-relaymonitors synchroniseren via versleutelde NIP-78-app-data (commit). NIP-17-berichten hydrateren gecachete gift wraps en reconciliëren eenmaal per sessie dertig dagen vanaf DM-relays, met NIP-77 waar dat wordt ondersteund, en oudere geschiedenis op aanvraag (commit).
Nostr Feedz gearchiveerd
Nostr Feedz, dat RSS combineerde met long-form en video op Nostr, vermeldt nu in zijn README dat het gearchiveerd is en niet langer wordt onderhouden (commit). De melding verwijst naar Readstr van PrivKey als fork die de ontwikkeling voortzet. Dit is een wijziging in de onderhoudsstatus, en we hebben niet gecontroleerd of GitHub de repository als gearchiveerd markeert of dat accounts en data worden overgezet.
Zap Cooking: bewaakte lijsten, signerfixes en aanmelden met passkey
Zap Cooking, een Nostr-client voor het delen van recepten, heeft een grote reeks wijzigingen in de webbroncode gemerged; deployment of release is onbevestigd. Schrijfacties naar opgeslagen kind 30001-lijsten lezen nu eerst en worden per account geserialiseerd, waarbij vreemde tags en versleutelde inhoud uit de nieuwste volledige basis behouden blijven, en ze weigeren wanneer de relaylijst onbekend is of het quorum tekortschiet (#869). Voor het quorum zijn minstens twee EOSE-antwoorden nodig van relays die lijsten ondersteunen, plus de helft van de daartoe geschikte write-relays van de gebruiker, en een leeg antwoord van nostr.wine kan geen afwezigheid bewijzen (#878). Aangepaste collecties delen de bewaakte writer, oudere operaties in de wachtrij worden opnieuw afgespeeld onder nieuwe guards (#885), en een lege geaggregeerde EOSE alleen zorgt er niet langer voor dat een lijst leeg wordt weergegeven (#872).
Een expliciete auth-methode verhelpt een minificatiebug in productie die signerklassen door elkaar haalde, zodat versleuteling via NIP-46 en NIP-07 de actieve signer gebruikt en niet een verouderde lokale sleutel; back-up van de wallet naar relays blijft geblokkeerd voor NIP-46 (#896). Wanneer het inloggen vanuit een opslagactie of reactie is gestart, wordt die actie daarna hervat. Een openstaande zap behoudt bedrag en doel, maar vereist nog steeds Send. Bij weigeringen door de signer verschijnt een foutmelding, zonder dat er stilzwijgend opnieuw wordt ondertekend onder een vreemde sleutel (#867).
Bij het aanmelden wordt de identiteit lokaal aangemaakt, waarbij vault-synchronisatie met passkey-versleuteling standaard aan staat; een back-upsleutel is vereist als synchronisatie uit staat of het uploaden mislukt, en Google Drive dient alleen voor herstel (#893). Een WebAuthn PRF-configuratie met één prompt laat de vault onbevestigd en de nsec in platte tekst in de browser staan, totdat een latere geslaagde ontsleuteling van de vault de vault bevestigt en de sleutel in platte tekst verwijdert (#907). Wie die prompt uitbreidt naar het aanmelden, leunt op een niet-ondertekende registratie die geen authenticatie is: iedereen met een verse server-challenge kan een registratie vervalsen die de controle doorstaat, en een aanvaller die de credential-ID kent, kan een onbevestigde vermelding (TTL van 30 dagen) vervangen en de echte gebruiker synchronisatie ontzeggen (#911). Dit zijn gedocumenteerde afwegingen, geen beveiligingsgaranties.
Links naar notes worden gecodeerd als NIP-19 nevent met maximaal drie waargenomen relay-hints, wat clients helpt dun gerepliceerde events te vinden zonder beschikbaarheid te garanderen (#873). Replies op profielen bevatten NIP-22 kind 1111-comments waarvan de root een event is (#877), en een fix in de coördinatenparser zorgt ervoor dat recepten met URL-d-tags in packs en plannen blijven staan (#888). Het experiment met een paywall voor premium recepten is stopgezet nadat een audit door de auteur zelf een omzeiling via de query-pubkey aan het licht bracht; legacy kind 35000-posts blijven leesbaar als opgeslagen content (#862).
Een open voorstel, nog niet gemerged, richt zich op mutelijsten (#921). Een ophaalpoging waarbij de mutelijst niet beschikbaar is, zou te onderscheiden blijven van een geslaagde ophaalpoging die een lijst of geen lijst oplevert. Door de wijziging zou een onbeschikbare ophaalpoging niet langer vijf minuten als lege lijst worden gecachet. Bij parsefouten zou opnieuw worden geprobeerd, met een waarschuwing als privé-mutes niet kunnen worden ontsleuteld. Bij het openen van de meldingenbel zou de lijst opnieuw worden geladen. Zo moet worden voorkomen dat een ongemerkt verouderde, lege mutelijst gemute auteurs in meldingen toelaat. Het voorstel zorgt er niet voor dat alle fouten content blokkeren, en het is niet uitgerold.
NWC-zapbetalingen in Lumilumi
Voor Lumilumi, een Nostr-webclient, ligt een draft-pull request klaar die zap-facturen met één tik zou betalen via Nostr Wallet Connect (NIP-47) (#1120). De verbindings-URI waarmee kan worden uitgegeven, wordt alleen lokaal opgeslagen en is uitgesloten van de back-up van instellingen in kind 30078, die in platte tekst staat. Verzoeken gebruiken NIP-44 als de wallet nip44_v2 adverteert en vallen anders terug op NIP-04. De auteur heeft het gecontroleerd met een mock-wallet, zonder echte betaling, en op onze bronpeildatum was de draft nog niet gemerged.
Zoeken op identifiers in Wisp
Een open pull request voor de Nostr-client Wisp, op onze bronpeildatum nog niet gemerged, zou de zoekfunctie geplakte NIP-19- en NIP-05-identifiers, hex-sleutels en weblinks naar entiteiten laten herkennen voordat wordt teruggevallen op een tekstzoekopdracht via NIP-50 (#681). Bij het opzoeken worden relay-hints en de lokale cache gebruikt. De zoekfunctie zou resultaten streamen terwijl ze tot maximaal 15 seconden wacht op EOSE van de bevraagde relays, zodat trage relays niet langer wegvallen. Volgens de auteur is alleen in een emulator getest, niet op een fysiek apparaat.
Ondersteuning voor Android TV in Zapstore
Zapstore, de op Nostr gebaseerde appstore, heeft een open v2-pull request voor Android TV, die op onze bronpeildatum nog niet gemerged was (#407). Daarmee zouden 32-bit-ABI’s worden gematcht en zou Leanback-focus met alleen een afstandsbediening worden ondersteund, met een terugvaloptie als het scherm voor de installatietoestemming niet beschikbaar is. 32-bit-builds zonder Arti tonen expliciet een verbinding die alleen Direct is, terwijl 64-bit-builds waarin Arti ontbreekt fail-closed weigeren. De TV-build gebruikt een lokale debug-signer, bedoeld voor tests en niet voor distributie, en de enige TV-test van de auteur gebruikte een lokaal gebouwde relay omdat de publieke bundel niet beschikbaar was.
Hardening en NIP-11-voorstellen voor strfry
Voor strfry, de Nostr-relay in C++, lagen op onze bronpeildatum twee niet-gemergede voorstellen. #281 beantwoordt de bevindingen SF-01 tot en met SF-13 uit een relay-audit door JSON-diepte, gedecomprimeerde payloads, wachtrijen en metric-labels te begrenzen, een crash bij een leeg negentropy-filter te verhelpen en indexen voor lange tags te hashen. Het stapt over op DB-formaat 4, dus wie het overneemt, zou moeten exporteren en opnieuw importeren. De geslaagde tests zijn die van de auteur zelf. Draft #278 zou alleen NIP-11-limitations adverteren die daadwerkelijk worden afgedwongen, plus optionele fees en payments_url, waarbij payment_required standaard op false staat en geconfigureerde prijzen geen betalingen implementeren.
Bark-betalingen in nostrcheck-server
Voor nostrcheck-server, een Nostr-server voor mediahosting, is er een draft-pull request die een betaalprovider voor barkd (Bark) toevoegt (#62). Die zou via de REST API van barkd Lightning-facturen aanmaken en optioneel per bestand een X-Ark BIP-321-URI aan 402-responses toevoegen, met dezelfde Lightning-factuur als terugvaloptie. Een wallet op dezelfde Ark-server betaalt via Ark, andere gebruiken Lightning, en een afgewikkelde betaling ontgrendelt het bestand één keer. De tests gebruiken een gemockte barkd, en de wijziging hangt af van de open BUD-07-pull request #61. Op onze bronpeildatum was ze nog niet gemerged, en het is geen functie op share.yabu.me.
Betaalde schrijfacties in mattns nostr-relay
Een draft-pull request voor mattns nostr-relay, op onze bronpeildatum nog niet gemerged, zou optionele betaalde schrijfacties via een Bark-wallet toevoegen, standaard uitgeschakeld (#37). Pubkeys zouden schrijfkosten vooraf betalen via barkd, met een optioneel kind-filter, en schrijvers zonder tegoed krijgen een restricted:-respons met een betalings-URL. Opwaarderen zou via Ark of Lightning gaan, met BIP-321-URI’s of NWC, waarbij de kosten in NIP-11 worden vermeld. Tests gebruiken een mock-daemon, en of dit in de codebase zelf thuishoort of achter een hook, is nog niet beslist.
Replaybeveiliging bij herverbinden in ContextVM
ContextVM, dat MCP over Nostr transporteert, heeft een open pull request voor zijn TypeScript SDK die dubbele uitvoering na het opnieuw verbinden met relays zou voorkomen (#113). Het servertransport zou geverifieerde event-ID’s bewaren tot het wordt gesloten, en een aparte, begrensde envelope-cache blokkeert opnieuw ingepakte duplicaten. Het geheugengebruik groeit met het aantal unieke geverifieerde events gedurende de levensduur van het transport. Op onze bronpeildatum was de fix nog niet gemerged, en hij zit niet in een uitgebracht pakket.
Mediaweergave en goedkeuringen in de Kehto-shell
Kehto, een webshell voor Nostr-napplets, heeft op 28 oktober NAP-MEDIA-weergave gemerged. De hosts Paja en playground delen nu een audio- en videospeler die via policy wordt bemiddeld. Die gebruikt browsercodecs voor eindige URL- en Blossom-bronnen en speelt live HTTPS-streams in MP3 of ADTS AAC af waar MediaSource de codec ondersteunt, waarbij het afspelen begint voordat de response is afgelopen. De sessiebevoegdheid blijft gebonden aan het endpoint, het bronvenster en de ACL. Bij intrekking of afbouw worden Blob-URL’s buiten gebruik gesteld, stopt het afspelen en worden streams geannuleerd. De methode ResourceService.openStream, die alleen voor de host beschikbaar is, gebruikt de bestaande endpoint-origin-grants en policy en voegt geen resource-wire-message toe. Terminal delivery blijft behouden. De legacy-alias sendCommand werkt nog steeds. Daarnaast blijven detecteerbare callbacks met twee argumenten werken, met een waarschuwing. Unaire legacy-callbacks gaan over op command-objecten. De browserresolver weigert niet-HTTPS-URL’s, credentials en private IP-literals. Ook schakelt hij redirects en referrers uit. DNS kan hij niet inspecteren, dus garandeert hij geen bescherming tegen private adressen op het moment van opzoeken: productieresolvers hebben controles tijdens de DNS-resolutie nodig, en de standaardinstelling in de browser steunt op CORS en bescherming van private netwerken. HLS, DASH, live Ogg, Nostr-bronnen, wachtrijen, persistentie en automatisch hervatten bij focus worden nog steeds niet ondersteund. De auteur meldt 155 Chromium-tests en 112 seconden radioweergave vanuit een ongewijzigd Funclet-artefact; dat hebben wij niet opnieuw uitgevoerd. Het gaat om werk dat alleen in de broncode bestaat. Het gepubliceerde pakket Napplet 0.32 mist enkele draft-types. NAP-MEDIA blijft een draft; conformiteit in een release wordt nog steeds niet geclaimd.
Een tweede gemergede wijziging maakt goedkeuringen voor ondertekenen en publiceren versiespecifiek. Elke goedkeuring is gebonden aan de geverifieerde publisher, de hash van het artefact en de actieve signer. Goedkeuringen kunnen worden ingetrokken, en goedkeuringen die alleen voor ondertekenen of alleen voor publiceren gelden, staan los van elkaar. Een legacy-toestemming wordt nooit stilzwijgend opgewaardeerd. Toestemming voor een veranderlijke ontwikkel-URL geldt alleen voor die ene keer laden, en een wissel van endpoint of account wijst openstaande verzoeken af. NAP-LINK opent een link pas na een expliciete klik in een modal van de host, met noopener. De wijziging claimt geen universele tests tegen externe CVM-radiobronnen, en een merge in de broncode wijst niet op een npm-release.
Pact
Pact, een Nostr-protocol voor relaties tussen agents en toestemming van operators, authenticeert nu antwoorden van Nostr Wallet Connect. Elk resultaat moet de handtekening van de wallet dragen en naar het bijbehorende verzoek verwijzen, en Pact controleert het resultaattype en de payment hash, samen met een eventueel teruggegeven preimage. Inwisseling krijgt atomaire schrijfacties naar het grootboek plus beveiligingen bij het consumeren en opnieuw proberen van verzoeken, en er zijn meer manieren afgesloten om toestemming te vervalsen. Een vervolgwijziging die MCP-betalingen begrenst houdt ze uitgeschakeld tenzij PACT_MCP_ALLOW_PAYMENTS=1 is ingesteld, en toetst een standaardlimiet van 1.000 sat aan zowel het opgegeven bedrag als het BOLT11-bedrag. Het venster van de privé-inbox stopt nu bij 200 wraps en markeert afkapping. De tests van de auteur steunen op mocks.
nostr.watch
nostr.watch, een monitor voor Nostr-relays, voegt expliciete ondersteuning toe voor FIPS-discovery en -transport, en overlay-lookups vallen niet langer door naar publieke DNS-over-HTTPS. Hosts leveren nog altijd zelf DNS en IPv6-routering, omdat de monitor geen FIPS-daemon of -proxy meelevert en geen anonimiteit biedt. Een strengere npub-controle accepteert npubs alleen binnen geparste .fips-hostnamen. Automatische NIP-11- en NIP-05-probes verhuizen naar een ServiceWorker die eigendom is van de app, waardoor de context van het eigenaarstabblad uit het waargenomen, door extensies aangestuurde navigatiepad verdwijnt; dit is gecontroleerd in een standaard Firefox 155 met een gecontroleerde extensie-fixture. De conformiteitssuite bevat vijftien begrensde NIP-01-controles met een conversatielaag die onafhankelijke verbindingen ondersteunt. De auteur meldt geslaagde tests en geïsoleerde mesh-runs, geen audit op publieke relays of van de browserbeveiliging.
Bitcredit Core
Bitcredit Core, een peer-to-peerprotocol voor krediet en wissels dat Nostr gebruikt, controleert nu of er ten minste één write-relay verbonden is voordat een blokoperatie iets lokaal opslaat of haar effecten in gang zet. Herstel initialiseert bovendien netjes opnieuw. De validatie van kandidaatketens die vorige week nog als open werd gemeld, is inmiddels gemerged, zodat ketens worden gevalideerd en voorbereid voordat ze worden opgeslagen. Deze stappen verkleinen de kans op een inconsistente lokale toestand. Een verbonden relay kan niet garanderen dat relays het event accepteren of dat de afwikkeling wordt voltooid, en die controle alleen maakt lokale opslag niet duurzaam.
Een recentere merge, nog niet bevestigd in een release, voegt een transactiemanager toe aan de identiteitsservice. Identiteitsblokken, toestand en e-mailbevestiging worden nu atomair gecommit voordat er iets via Nostr wordt verspreid, en nieuwe tests controleren dat er niets wordt verzonden als de commit mislukt. Dit geldt alleen voor de identiteitsservice. Bij de opslag van wissels en bedrijven ontbreekt deze atomaire commit, en acceptatie door relays en afwikkeling zijn nog steeds niet gegarandeerd.
MLS-KMP en compatibiliteit met Marmot
MLS-KMP, de Kotlin-bibliotheek voor MLS onder marmot-kmp, heeft eerder verscheidene gedragingen op wire-niveau gecorrigeerd om aan te sluiten bij andere MLS-implementaties; daardoor zijn leden op 1.2.0 en leden op die nieuwere code het in de genoemde gevallen oneens, en moeten groepen samen upgraden. Opgeslagen state is overgestapt op versie 10, die oudere releases niet kunnen herstellen. De downstream compatibiliteitsjob voor Marmot is niet-blokkerend. De tests daarvan zijn niet uitgevoerd in de omgeving waarin die wijziging werd geschreven; Marmot moet zich nog aanpassen aan authorizeProposal en GREASE. Een eerdere wijziging aan app-components dwingt de componenten af die Marmot nodig heeft om MDK v0.14 te volgen. Of Amethyst dit heeft overgenomen, hebben wij niet geverifieerd.
Recentere gemergede broncode, waarvan niet wordt geclaimd dat ze in de uitgebrachte 1.3.0 zit, herstelt de compilatie van de nachtelijke interop-runner en rapporteert per script pass, fail of skip. Onze eerdere opmerking dat de live runner nooit had gedraaid, is daarmee achterhaald: de auteurs melden werkende runs, al liep de laatste run nog toen de wijziging werd geopend en hebben wij geen definitief CI-resultaat teruggelezen. De OpenMLS-job blijft niet-blokkerend, slaat 22 niet-ondersteunde of in een panic eindigende scenario’s over en dekt alleen ciphersuite 0x0001; interoperabiliteit wordt er dus niet mee gecertificeerd. Diezelfde wijziging repareert ook het opzoeken van de ReInit-PSK via de bewaarde groeps-ID, het interim-transcript van epoch nul, het willekeurige secret van de eerste epoch en de afhandeling van de resumption-PSK bij external commits. Voor het transcript van epoch nul volgt de code nu RFC 9420, sectie 11, om aan te sluiten bij OpenMLS; daardoor wijken external joins in epoch 0 af van 1.3.0 en oudere releases, en houden opgeslagen oudere groepen de oude hash tot hun eerste commit. De oorspronkelijke engine leidde haar eerste epoch-secret af van nul; de auteurs troffen geen exploit aan, aangezien latere commits een vers UpdatePath meedragen, en de fix toont niet aan dat elk beveiligingsprobleem is opgelost.
Obelisk Relay
Obelisk Relay heeft in zijn standaardbranch een fix gemerged voor private NIP-29-groepen. Globale relay-beheerders konden al REQ’s voor private groepen versturen, maar het zichtbaarheidsfilter voor events wees de bijbehorende events nog af. Relay-beheerders kunnen die events nu lezen, en de toegangscontroles voor leden blijven van kracht. Groepen die op relayniveau privé zijn, zijn niet end-to-end versleuteld, en de wijziging maakt expliciet wat de serverbeheerder kan zien. De fix is gemerged werk in de broncode, bedoeld voor ontwikkelaars en operators.
Plume
Plume, de desktopclient in Rust en Tauri, heeft een wijziging gemerged die per relay één persistente WebSocket openhoudt die automatisch opnieuw verbinding maakt. Feed-, profiel-, publicatie- en direct-message-operaties delen allemaal die verbinding. Subscriptions en event-ID’s worden erover gemultiplext. Herverbindingspogingen gebruiken een back-off; zodra de app wordt afgesloten, gaan de verbindingen dicht. Vóór de wijziging opende elke operatie een nieuwe socket, die daarna nooit werd gesloten of vrijgegeven. De beoordeelde wijziging is gemerged broncodewerk; prestatiemetingen zijn hier niet vastgesteld. Verliesvrij herstel of gegarandeerde aflevering wordt niet beloofd.
Hashtree
Met de TypeScript-runtime 0.5.22 van Hashtree kunnen browserproviders maximaal 256 actuele, ondertekende publieke peeraankondigingen in IndexedDB bewaren, afgebakend per identiteit en app. Providers kunnen die opnieuw laden vóór netwerkdiscovery. Gewone peer-REQ’s kunnen die cache opnieuw afspelen waar de bestaande toelatingsregels dat toestaan, en private discovery blijft in een aparte eigenaarsscope. Los daarvan annuleert een gemergede wijziging in de Rust-adapter verlaten indexleesoperaties, zodat commando’s niet langer de volledige transporttime-out hoeven uit te zitten. Volgens de pull request is hashtree-nostr-pubsub 0.2.87 gepubliceerd, en dat pakket heeft een eigen versienummering, los van de TypeScript-runtime. Commits in de Rust-client die alleen in de broncode bestaan, voegen gecombineerde legacy-, lees- en schrijf-Blossom-origins voor leesoperaties toe en één nieuwe poging bij getypeerde verbindingsresets in de requestfase per bron, zonder gedeeltelijke responses te cachen. Eén koude installatie op een Mac bewijst niet dat de sporadische time-outs bij overdrachten verholpen zijn.
nostr-pubsub
nostr-pubsub TS 0.5.20 houdt een begrensde opslag van ondertekende events bij en voegt IndexedDB-persistentie, atomische transacties over tabbladen heen, verloop en lokale replay voor gewone Nostr-REQ’s toe. Dezelfde bron beschrijft daarnaast een optionele native Rust-API voor bestandsopslag met atomische snapshots en een exclusieve schrijverslease, die losstaat van het TypeScript-pakket. In de implementatie van de duurzame event-store worden bij het herladen handtekeningen en de winnaars van NIP-01 replaceable events opnieuw gecontroleerd, en worden ephemeral events en tijdstempels die meer dan vijf minuten voorlopen op de huidige tijd geweigerd. Stores worden nooit impliciet geopend, en aanroepers kiezen zelf de scope voor publieke aankondigingen. FIPS herstelt ondertekende kind 37195-aankondigingen vóór netwerkdiscovery en controleert nog steeds actualiteit, schema en namespace. Anonieme of private discoverycaches moeten gescheiden blijven van publieke replay, en een router die via het netwerk ophaalt, hoort niet als replaybron te worden gebruikt. Omdat de bewaring begrensd is, biedt dit geen onbeperkte offline bootstrap.
FIPS-TS
FIPS-TS-runtime 0.0.57 accepteert een duurzame discoveryprovider die eigendom is van de applicatie en die via de bestaande interface ondertekende kind 37195-aankondigingen publiceert en zich erop abonneert. Is er een provider geïnjecteerd, dan opent het transport geen Nostr-relayclients en accepteert het een lege relaylijst, en bij het afsluiten worden openstaande subscriptions afgewikkeld. De aanroeper is verantwoordelijk voor de levensduur van de provider en voor de herstelde opslag. Controles op namespace, handtekening en verloop blijven gelden. Peerautorisatie blijft vereist. Gecachete aankondigingen garanderen geen offline bootstrap, want nieuwe geauthenticeerde routering en WebRTC-signalering hebben nog altijd een bereikbare FIPS-carrier nodig.
Flotilla
Flotilla heeft drie broncodewijzigingen gemerged. Met Share to Chat kunnen gebruikers losstaande notes en NIP-22-comments delen in elke room of elk gesprek. Wie in een gesprek citeert, voegt de geciteerde auteur niet langer toe aan de p-tags en splitst het lidmaatschap ook niet meer af. Hervatten van onderbroken uploads herstelt bijlage-uploads vanuit concepten en laat gebruikers herstellen van mislukte uploads door een foutmelding te tonen. Mislukt de compressie, dan valt het terug op het originele bestand, dat zijn metadata kan behouden. Wachten op opgeslagen leesmarkeringen houdt het wegschrijven van leesmarkeringen voor pagina’s tegen totdat de opgeslagen leesstatus is geladen, zodat vroege leesupdates bij het opstarten niet verloren gaan.
following.space
Een open pull request voor following.space, bij onze bronafsluiting nog niet gemerged, zou het aanmaken, bewerken en verwijderen van follow-packs herstellen, samen met het volgen van de leden van een pack. Daarbij zou Applesauce worden gebruikt voor het ontdekken van account- en outbox-relays, en packs zouden worden gedeeld als naddr-adressen. Het ondersteunt signers via browserextensies, een geheim dat alleen in het geheugen wordt bewaard, en bunker-signers. De code en de door de auteur beschreven tests tonen geen uitgerolde dienst aan, en evenmin compatibiliteit met elke signer.
Routstr
Drie pull requests voor Routstr stonden bij onze bronafsluiting open en waren niet gemerged. In de kernservice zou health-discovery van providers aangekondigde URL’s en redirects weigeren die naar niet-globale adressen resolven, terwijl de afhandeling van onion-proxy’s behouden blijft. De auteurs beschrijven een blootstelling aan server-side request forgery (SSRF) en tests, maar dit is geen uitgerolde fix en geen bevestigde exploit. In de SDK zou providerkrediet voor een URL de sleutel volgen die het kind 38421-event heeft ondertekend. Een pubkey die in de content staat, blijft ongeverifieerd. Van de 81 events die de auteur op de standaardrelay controleerde, bevatte geen enkele providerlijsten op basis van content, dus er wordt niet beweerd dat bekende URL’s zijn misbruikt of dat elke provider nu veilig is. Automatisch pinnen van modelpaden zou overstappen van ingebouwde constanten naar ondertekende snapshots in vertrouwde adresseerbare kind 38427-events. De SDK zou de laatste goede snapshot en rollback-watermarks bewaren, en een lege snapshot zou als kill switch fungeren. De wijziging breekt de API voor custom adapters. Er zijn geen policy-events gepubliceerd, en de uitrol blijft een stap voor de operator.
SatSigner
Een open pull request voor SatSigner, bij onze bronafsluiting nog niet gemerged, herwerkt de Nostr-relay-, cache- en synclaag. Het niet vinden van een event (het end-of-stored-events-antwoord van een relay) zou gescheiden worden gehouden van time-outs en van het volledig ontbreken van een relay. Verouderde gecachete content zou worden gemarkeerd. Events zouden worden opgeslagen voordat de verwerking cursors vooruitzet; rumor-ID’s van gift wraps zouden worden geverifieerd. Het verwijderen van een identiteit zou de bijbehorende Nostr-tabellen wissen, maar een kind 0-sync kan een lokale profielbewerking overschrijven. Een vervolgwijziging die erop gestapeld is zou geschoonde diagnostiek toevoegen, videoposters in de Nostr-feed die met een tik worden geladen, met maximaal drie spelers, en het inhalen van achterstand bij het hervatten van de app zonder de relaypool af te breken. Ook voegt die relaytests toe die fouten injecteren. De nieuwe native videomodule vereist een herbouw van de app, en validatie op apparaten staat nog uit. Geen van beide wijzigingen is uitgebracht of heeft een runtimecontrole doorstaan.
Bray
Bray 3.5.4 voegt NIP-42-relayauthenticatie toe aan zijn NIP-46-bunkerclient en -daemon. Private relays die AUTH vereisen, kunnen nu worden gebruikt om berichten te lezen die aan de bunker zijn gericht. Latere broncodewijzigingen zijn in deze tag niet vastgesteld.
In later gemergede broncode start de MCP-server van Bray in alleen-lezenmodus wanneer er geen signer is geconfigureerd of BRAY_READ_ONLY wordt afgedwongen, en die beslissing valt voordat er geheimen worden geopend. In deze modus wordt geen wallet geladen, worden ondertekenen, versleutelen en ontsleutelen geweigerd, en zijn slechts 111 van de 261 tools beschikbaar, namelijk de opzoektools. De CLI en de SDK vereisen nog steeds een signer, en een geconfigureerd maar leeg geheimbestand blijft een fout. Nieuwe attestaties gebruiken nu een labelnamespace voor attestaties volgens NIP-32, ter vervanging van nip-va. De bestaande #l-typequery vindt zowel oude als nieuwe labels, terwijl signet-protocol zijn eigen kopie 2.5.5 behoudt. Dit is geen officiële NIP-acceptatie, en het betekent niet dat elke geneste bibliotheek is gemigreerd. Van geen van beide wijzigingen is aangetoond dat ze in 3.5.4 zitten.
Alby-browserextensie
Een open pull request voor de Alby Lightning-browserextensie, bij onze bronafsluiting nog niet gemerged, zou ervoor zorgen dat de permissiehelper onthouden geblokkeerde vermeldingen in één leesoperatie weigert. Daarmee wordt een race condition gedicht waarbij het verwijderen van een deny-vermelding een Nostr-handler zonder prompt zou kunnen laten handelen. Het equivalente pad voor geblokkeerde vermeldingen bij BTC en Liquid is momenteel niet bereikbaar. Dit is geen uitgerolde fix, en er is geen exploit bevestigd.
Schrijfbeleid voor de MintRadar-relay
Broncode van MintRadar voegt een schrijfbeleid voor operators toe aan de Nostr-relay van het project. Publieke kind 38172-aankondigingen en kind 38000-reviews worden beperkt tot 16.384 tekens geserialiseerde JSON per event en tot 120 per uur per IPv6 /64, waarbij gecomprimeerde IPv6-prefixen naar canonieke vorm worden omgezet. Voor zware bronnen geldt een zacht plafond van 3.000 per uur, en een absolute limiet van 6.000 per uur telt alleen geaccepteerde events over alle bronnen heen. Geprivilegieerde sleutels zijn onbeperkt. Nieuwe verbindingen zijn beperkt tot 120 per minuut met een burst van 60. Het gaat om code en operatorconfiguratie, niet om bewijs van een uitrol in productie of van volledige bescherming tegen denial-of-service.
Nieuwe projecten
bosstro
Bosstro is een nieuwe Android-client voor geschilbeslechters (dispute solvers) van Mostro. De MVP-broncode is gepubliceerd, met een Flutter-frontend bovenop de Rust-core van Mostro. Solvers ondertekenen met een eigen solversleutel, nooit met de nodesleutel, en de node kent elk van hen lees- of lees-schrijfbevoegdheid toe. Geautoriseerde solvers kunnen geschillen in behandeling nemen, deelnemen aan versleutelde chats tussen koper en verkoper, inclusief afbeeldingen en pdf’s, en de koper uitbetalen of de verkoper terugbetalen. Sleutels staan in opslag die door Android Keystore wordt ondersteund, maar ontwikkelbuilds voor Linux en web missen die beveiligingen. Gepubliceerde checksums bewijzen niet wie de uitgever is.
cordn-kmp
cordn-kmp is een nieuwe Kotlin Multiplatform-implementatie van Cordn, gebouwd op Quartz en mls-kmp voor JVM, Android, iOS, macOS en Linux. De headless CordnGroupManager maakt groepen aan, nodigt uit, treedt toe, verstuurt berichten en haalt achterstanden in via een MCP-coördinator over Nostr, een ander model dan de relaybezorging van Marmot. Frontends leveren hun eigen persistentie, en de bewering in de README over interoperabiliteit met ts-mls is afkomstig van de auteur.
Sindsdien heeft het project 1.1.0 gepubliceerd, die bouwt tegen de uitgebrachte Quartz 2.4.0, zodat de eerdere vereiste van een lokale checkout van niet-uitgebrachte Quartz achter een buildflag niet langer geldt voor getagde releases. 1.2.0 verwijdert de publieke methode CordnExposure.differsFromMarmot() en laat vergelijking met een andere binding over aan frontends. Ondanks het minor-versienummer is dit een brekende API-wijziging. Een voorstel had deze versie 2.0.0 genoemd, en de daadwerkelijke release gebruikt 1.2.0.
emosphere
EmoSphere is een Nostr-stemmingskaart waarvan de broncode nu openbaar is, en de README beschrijft versie 0.5.1. Elk apparaat genereert zijn eigen sleutel en publiceert ondertekende kind 1074-events met een emotie en intensiteit, een optionele korte notitie en een grove locatie die gebruikers kunnen uitschakelen. Posts verschijnen op een wereldkaart met terugspelen in de tijd en een volgfeed. Omdat deze signalen openbaar en pseudoniem zijn, kunnen relays stemming en locatie lezen en die in de loop van de tijd aan een sleutel koppelen. Android bewaart sleutels in beveiligde opslag, terwijl de webversie localStorage gebruikt.
matrix-appservice-nostr
matrix-appservice-nostr is prototypebroncode voor een Matrix-applicatieservice, gekoppeld aan een Nostr-relay. Matrix-gebruikers kunnen Nostr-identiteiten aanmaken of importeren en vanuit Matrix-rooms posten, volgen, antwoorden, reageren en DM’s sturen, met NIP-05-handles op het domein van de bridge. Content en media blijven op de Matrix-backend, en de relay bouwt events opnieuw op uit opgeslagen originelen. Sleutels worden met AES-GCM versleuteld onder een geconfigureerd geheim of op afstand bewaard via NIP-46. Gebruikers moeten de operator vertrouwen, en een Matrix-redaction verwijdert alleen de kopie van de bridge.
Zeven nieuwere commits voegen schaduw-Nostr-identiteiten toe. De bridge maakt die automatisch aan voor toegestane Matrix-gebruikers die naar buiten toe interacteren, met profielen die Matrix spiegelen. Wie een volledig profiel aanmaakt, waardeert het bestaande account ter plekke op en behoudt dezelfde sleutel. Bridge-admins kunnen externe gebruikers of homeservers volledige toegang of schaduwtoegang geven, of passieve toegang binnen een room voor antwoorden, reacties en stemmen. Een toekenning of ban voor een specifieke gebruiker gaat boven homeserverregels, die op hun beurt boven roomregels gaan. Volledige toestemming staat toe dat een profiel wordt aangemaakt, maar publiceert er niet automatisch een. Bij het intrekken van toegang blijven sleutels, geschiedenis en rooms behouden, maar stopt het uitgaande posten waar dat niet langer is toegestaan. Geïmporteerde identiteiten worden nooit overschreven met een gespiegeld profiel. Voor de controles bestaan code en tests, maar geen runtimeverificatie van interoperabiliteit of beveiliging, en het blijft nodig de operator te vertrouwen bij het beheer van sleutels. Stickers gaan nu als afbeeldingen naar buiten.
nostr-scrutiny
Nostr Scrutiny publiceert bronnen en factsheets met datum 24 oktober waarin vijf Nostr-clients worden vergeleken: Amethyst, Damus, Nostrich, Primal en Quill. Elke factsheet behandelt de privacyclaims van de client in de appwinkel en de gepubliceerde code, samen met de netwerkverzoeken die bij een eerste bezoek in de browser zijn waargenomen. De site is gebouwd als statische, eenvoudige HTML en zegt geen eigen (first-party) tracking te gebruiken. De factsheets vormen een gedateerde inventaris van feiten, geen beveiligingscertificering of cryptografische audit. Er is een openlijk gemeld belangenconflict: de auteur ontwikkelt ook Quill.
v2
Solid Chat v2 is nieuw gepubliceerde clientbroncode die één did:nostr-sleutel gebruikt om met NIP-98 HTTP-authenticatie naar rooms in Solid-pods te schrijven en om NIP-17-DM’s met gift wrap te versturen. Ondertekenen werkt via NIP-07, NIP-46 of een lokale nsec, met NIP-44-versleuteling en wraps van kind 1059. Rooms zijn platte tekst en worden alleen beschermd door de ACL van elke pod. Media uit versleutelde DM’s worden geüpload naar Blossom, en profielopzoekingen gaan naar een directory van nostr.social. Omdat een lokale nsec in localStorage staat, is een externe signer veiliger.
witchat
Witchat is broncode voor een onofficiële bitchat-client op Windows en Linux. Hij chat via een Bluetooth-mesh in de buurt en valt tussen wederzijdse favorieten terug op Nostr-gift wraps. Daarnaast neemt hij deel aan openbare geohash-kanalen op Nostr, met events van kind 20000 voor berichten en kind 20001 voor aanwezigheid. Interoperabiliteit met de transports van bitchat is een claim van de auteur, en de Windows-binaries zijn niet ondertekend. Nostr-relays kunnen IP-adressen en kanaalmetadata zien. Broadcasts in de buurt gaan momenteel alleen via Bluetooth.
wn-notify
wn-notify is een onofficiële Python-CLI die alleen de standaardbibliotheek gebruikt en berichten en bestanden naar White Noise-groepen stuurt via een lokale wn-agent over de Unix-socket marmot.agent-control.v2; de connector beheert sleutels, MLS-state en relays. De CLI controleert op final_sent en bericht-ID’s. Is de uitkomst onbekend, dan stopt hij met een niet-nul exitcode als onbekend en bewaart hij de idempotentiesleutel voor een handmatige nieuwe poging, omdat hij zelf nooit opnieuw probeert. Een acknowledgment bevestigt publicatie op relays, niet dat iemand het bericht heeft gelezen. Alleen wn-agent 0.13.0 is getest.
xmradar
XMRadar is een browserextensie die webposts en X-artikelen naar Nostr kopieert. Elke publicatie wordt goedgekeurd via een externe NIP-07-signer. Met release 0.2.0 komen er Monero-fooien op X bij voor auteurs die een Nostr-identiteit hebben.
De implementatie publiceert pas een ontvangstbewijs van kind 9042 nadat de gebruiker aangeeft een fooi te hebben gestuurd en dat bevestigt. Dat ontvangstbewijs maakt de npubs van beide deelnemers openbaar, evenals het bedrag en het adres. Een transactie-ID, transactiesleutel of betalingsbewijs zit er niet in. Dankzij een klein willekeurig bedrag in piconero kan de wallet van de ontvanger de betaling herkennen en een bevestiging van kind 9044 publiceren. Die bevestiging is ondertekend door de ontvanger en is geen onafhankelijk onchain bewijs. In de interface worden door de ontvanger bevestigde fooien gescheiden van onbevestigde claims. De eigen fooien van een gebruiker blijven 30 minuten in afwachting. Onbevestigde claims tellen één keer per betaler mee, voor het kleinste ontvangstbewijs naar het huidige adres; die claims kunnen worden vervalst. Totalen worden per auteur bijgehouden, niet per post. Adresdetectie via NIP-A3 en X-bewijzen volgens NIP-39 staat standaard uit. Staat die aan, dan kunnen relays en X zien welke identiteiten de gebruiker bekijkt.
agent-inbox
agent-inbox is een nieuwe tool waarmee AI-agents elkaar via korte handles over Nostr kunnen bereiken. Eén enkel Python-bestand verstuurt standaard NIP-17-gift wraps met NIP-44 v2-versleuteling, kan posten op een openbaar bord en bevat fixtures uit de officiële testvectoren. Handles zijn ingekorte achtervoegsels van publieke sleutels, geen gecertificeerde identiteiten. De README waarschuwt dat de crypto in pure Python niet constant-time is, en wij hebben die niet geaudit. Elke NIP-17-client kan nog steeds een bericht sturen naar de npub van een agent.
CarryChat
CarryChat is een nieuwe store-and-forward-messenger die begrensde berichtbundels verplaatst over welk pad er ook beschikbaar is. Nostr dient als internettransport, terwijl lokale verbindingen zoals Bluetooth LE en gewone bestandsuitwisseling de offline gevallen afdekken. In de broncode zit het Nostr-transport, samen met tests ervoor. De README noemt dit een vroege 0.2-release en zegt dat veldtests met LoRa op fysieke hardware nog niet zijn afgerond. Wij hebben het niet op apparaten getest.
Dertien nieuwere commits, tot en met 311f176, vervangen placeholders uit de roadmap door werkende broncode. Ze omvatten Wi-Fi Direct, een MeshCore-radioadapter, Reticulum-verbindingen, NFC-contactkaarten en een audiotransport, met Kotlin-, Rust- en UI-code. Via audio verifieert de luisteraar de handtekeningen van contactkaarten en accepteert hij normale berichtframes, maar bestandsdelen weigert hij. NFC wisselt alleen contactkaarten uit, geen berichten. Het gaat om ontwikkeling van broncode na de eerdere 0.2.0-release, niet om een nieuwe geverifieerde binary. Volgens de README wachten MeshCore en LoRa, Reticulum, Wi-Fi Direct en NFC nog op veldtests of tests met twee telefoons. De wijzigingen claimen geen hardwarecompatibiliteit, anonimiteit of beveiliging. Hoogfrequente audio hangt af van de hardware en is niet overal onhoorbaar. Nostr blijft één internettransport via relays naast de lokale verbindingen.
Cosign en Marble
Cosign is een nieuw bètaprotocol met bibliotheek dat een Nostr-ondertekeningssleutel opsplitst in FROST-thresholdshares. Het apparaat van een gebruiker kan samen met een server ondertekenen, maar servers kunnen niet in hun eentje ondertekenen. Een papieren back-upshare ondersteunt de flows voor herstel en share-vernieuwing uit de README, die niet op beveiliging zijn geverifieerd. Marble, een Android- en browserclient, gebruikt Cosign voor feeds en ondertekening. De onderliggende FROST-bibliotheek is geaudit, maar het eigen protocol van Cosign heeft geen onafhankelijke review gehad.
In nieuwere broncode koppelt de Marble-browserclient niet-verzonden notes aan het ingelogde account. Vóór het publiceren merkt hij op wanneer een ander tabblad of een externe sessie de aanmelding heeft beëindigd, en een verzoek vanuit een afgemelde client toont Signed out. Direct zoeken bevraagt Ditto en relays, niet het algemene web. Wie in de posts van één auteur zoekt, doorzoekt eerst de al geladen posts voordat relays worden bevraagd. Waarschijnlijke spam wordt ingeklapt achter een uitklapbare melding. Een Not Spam-override geldt alleen in die browser en alleen voor die auteur. Deze zoekhulpen zijn geen bewijs van een beveiligingsreview.
Cosign 0.12.7 laat samenvoegingen van de ledenlijst alleen nog van servers komen, waardoor een papieren back-upshare niet naar een andere rol kan worden gepromoveerd. Na een epoch-synchronisatie worden verouderde servers als achterlopend gemarkeerd. Ongeldige deelresultaten worden geweigerd; automatisch herstel blijft uitgeschakeld. Gedeeltelijke ontsleutelingsresultaten (decryption partials) bevatten nu Chaum-Pedersen-bewijzen, die worden gecontroleerd voordat de partials worden gecombineerd. Oudere clients negeren de bewijzen, en het Android-deel van Marble volgt met de volgende build. Deze beschrijvingen van de beveiliging komen van de auteur van de release, en wij hebben de cryptografie niet geaudit.
Android-broncode voor NIP-55 die na de tag 0.12.7 is gecommit verhelpt een race condition bij de eerste verbinding, wanneer de grant van de server nog via relays onderweg is. Opzoekingen van publieke sleutels krijgen nu direct antwoord. Ondertekenen en ontsleutelen wachten buiten de UI-thread en proberen één keer opnieuw, en dat alleen wanneer een pas toegekende verbinding een revoked-antwoord krijgt. Ook onderscheidt de code een onbereikbare server van een server die met een weigering antwoordt. Of deze latere fix in de broncode in de tag 0.12.7 of in een huidige Marble-binary zit, is niet vastgesteld.
Dream Nests
Dream Nests is een nieuwe alleen-lezen directory van live Nostr-audiorooms die Nests-rooms en live-activity-events samen met hun chat bijeenbrengt. Voor schermlezers gebruikt de webapp koppen en beleefde (polite) live-region-aankondigingen, en korte earcons dienen als audiosignalen. Openbare HLS-streams speelt hij alleen ter beluistering af. Nests-rooms openen in Nests, terwijl rooms van Corny Chat en HiveTalk op hun eigen sites openen, zodat spreken in die apps blijft. Microfoonindicatoren komen uit presence-metadata, niet uit stemactiviteitsdetectie. Wij hebben de toegankelijkheid niet op apparaten getest. De repo documenteert een openbare live-URL.
fips-pub-pki
fips-pub-pki is nieuwe broncode voor ondertekende Nostr-certificaten waarmee een domein kan delegeren aan sub-issuers, met offline padvalidatie. Trust anchors komen uit het bijbehorende project fips-pub-domains, dat DNSSEC-claims combineert met pins en witnesses. DNS wordt door de verifier nooit bevraagd. Intrekking berust op verloop en expliciete markeringen, niet op het verwijderen van events van relays. Volgens de README zijn live mesh-tests met een openbaar domein en een telefoon nog niet afgerond. Omdat er geen NIP is ingediend en geen kind is geregistreerd, is dit een experiment en geen vervanging van TLS.
Magnetar
Magnetar is een nieuwe zoekstack voor torrent-events volgens NIP-35. Hij combineert een crawler en zoekbackend met een Android-app die een lokale SQLite-cache bijhoudt, bouwt vertrouwen in publishers op aan de hand van follows en controleert of swarms actief zijn. De eerste 0.1-prerelease bevat crawlercode en tests voor zowel Android als de server. De auteur heeft hem alleen met geautomatiseerde tests en een emulator gevalideerd, niet op echte telefoons. Vertrouwen op basis van follows kan een torrent niet legaal of veilig maken, en de backend is geen gezaghebbende index.
Magnitude Relay
Magnitude Relay is een nieuwe Nostr-relay in Rust van VectorPrivacy, afgestemd op de gift-wrapped DM’s en het Concord-verkeer van Vector, met NIP-77-synchronisatie en typindicatoren. Volgens de operators heeft hij strfry vervangen op twee bestaande Vector-endpoints. De repository bevat harnesses voor adversarial testing en benchmarking, maar de gepubliceerde snelheidscijfers komen uit eigen runs van de auteur en zijn niet onafhankelijk gereproduceerd.
Inmiddels is er Docker- en Compose-packaging voor operators gemerged. De relay draait dan als gebruiker zonder privileges, met een datavolume, een bind die alleen lokaal bereikbaar is en een healthcheck. De observaties over productie en import in de pull request komen van de auteur, en arm64 is niet getest. Packaging alleen toont geen conformiteit met het protocol aan.
Nieuwere broncode beperkt nieuwe verbindingen per IP standaard tot een burst van 300, daarna 60 per minuut. Met een limiet van 0 wordt de beperking uitgeschakeld, en loopback is uitgezonderd. De real-IP-header van een proxy wordt alleen vanaf localhost vertrouwd, en geweigerde verbindingen krijgen HTTP 429 voordat de WebSocket opent. Weigeringen door de publieke relay worden alleen geaggregeerd gerapporteerd; details per IP zijn uitsluitend via de admin-socket beschikbaar. Bulksynchronisatie via NIP-77 laat ephemeral events weg, evenals events die binnen 600 seconden verlopen, terwijl live aflevering kortlevende events nog wel doorgeeft. Veranderen vertrouwde links, dan slaat de relay overbodige zichtbaarheidsprobes voor gift wraps over, maar gift wraps worden nog steeds gesynchroniseerd. Het gaat om wijzigingen in de broncode zonder gemeten productiebenchmark.
nostr_doctor
nostr_doctor is een nieuwe Dart-bibliotheek, met een CLI en een Flutter-frontend, die controleert of clients de gegevens van een account kunnen vinden. Eerst komen profielmetadata en NIP-65-relaylijsten aan bod, daarna ook private DM-relays en concepten, evenals Blossom-servers en nutzap-instellingen. Om de vindbaarheid van relaylijsten te controleren, peilt de tool de replaceable lijst. Wij hebben de diagnostische tool als broncode bekeken en geen app-release geverifieerd. De resultaten weerspiegelen alleen de relays die de tool bevraagt en tonen geen wereldwijde beschikbaarheid aan.
nostr-indexer-relay
nostr-indexer-relay is een nieuwe Go-relay die alleen NIP-65-relaylijsten opslaat. De crawler vindt relays die in die lijsten worden genoemd, test ze op ondersteuning voor NIP-77 en synchroniseert via negentropy met andere actieve indexers. Er horen een openbare opzoekpagina en een beheerinterface bij, en het project omschrijft zichzelf als vroeg. Het is een gerichte index van relaylijsten, geen Nostr-archief of algemene contentrelay.
nostr2gh
nostr2gh is een nieuwe bridge die NIP-34-events voor patches en pull requests, plus hun updates, van Nostr naar GitHub overbrengt via een relayer op een whitelist. Een bijdrager pusht een branch naar een locatie waarvandaan die kan worden opgehaald en ondertekent een Nostr-event, waarna een vriend met een werkend GitHub-account de PR voor die bijdrager opent. De tool helpt bijdragers zonder toegang tot GitHub, maar omzeilt een ban niet automatisch en geeft geen toestemming om niet-vertrouwde patches automatisch uit te voeren.
Relay Radio
Relay Radio is een nieuwe alleen-lezen webapp die een live Nostr-feed omzet in geluid met earcons en text-to-speech van de browser, plus een optionele beleefde (polite) live region voor gebruikers van schermlezers. Luisteraars kiezen een samengesteld wereldwijd station of een station dat is opgebouwd uit mensen die ze volgen, met notes, replies, reposts, reacties en zaps. Namens de luisteraar plaatst of betaalt de app nooit iets. Contentfiltering gebeurt naar beste vermogen, dus de app kan niet garanderen dat alles wat wordt voorgelezen veilig is.
Hibiki
Hibiki is een zelfstandige feed-napplet voor Torii, en de broncode noemt versie 0.2.1 de eerste werkende feed. Een node haalt openbare posts en media op, terwijl de rangschikking op basis van de smaak van de gebruiker in de browser draait. De feed draait in een gesandboxte iframe zonder directe netwerktoegang en behandelt ondertekende spamreputatie uitsluitend als advies. De privacygrens hebben we niet onafhankelijk geverifieerd.
Samengevoegde broncode tot en met versie 0.2.6 voegt inline antwoorden en extractieve nieuwssamenvattingen toe, en likes herschikken posts niet langer. Een getagde release blijft onbevestigd. Previewondersteuning in de Watch-speler voegt previewframes toe, en daarnaast komen er Zaps samen met profielpagina’s bij. Bij elke invoice controleert de node het bedrag en de description hash. Elke betaling vereist bevestiging door de eigenaar; de betaler gebruikt WebLN of een QR-code. De node beheert geen tegoeden en geen sleutels. Invoices van Primal-adressen missen de description hash, dus een vervolgwijziging accepteert ze wanneer het bedrag exact overeenkomt. Zulke invoices worden gemarkeerd als bound:false, en de eigenaar krijgt een waarschuwing dat de wallet mogelijk niet bevestigt. Dit verzwakt de koppeling tussen invoice en zap request en maakt er geen geldige NIP-57-bevestigingen van. Bij 5xx-fouten en time-outs van de wallet volgt één nieuwe poging, waarbij de LNURL-reden wordt getoond. Een geslaagde end-to-end zap met een echte wallet heeft de auteur niet gemeld.
wax
wax is een nieuwe signer in Common Lisp die rolsleutels afleidt van een BIP-39-seed en elk verzoek door een policy guard leidt, die standaard weigert tenzij een goedkeurings-callback of allowlist het toestaat. Envelopreeksen per aanroeper beschermen tegen replay. De methodenamen lijken op die van NIP-46, maar de kern levert geen netwerktransport. Een beveiligingsaudit van de signer hebben we niet uitgevoerd.
WhatZaps
WhatZaps is een nieuwe browserextensie die WhatsApp-contacten via Lightning betaalt met behulp van de WebLN-ondersteuning in de Nostr WoT-extensie. Ze koppelt een contact aan een Nostr-profiel, controleert diens betaaladres en vraagt altijd om expliciete bevestiging voordat er betaald wordt. Het /zap-commando wordt niet als chatbericht verstuurd, en via de reactie of de knop wordt betaald zonder dat er iets wordt gepost. Het gaat om Lightning-betalingen die Nostr gebruiken om identiteiten op te zoeken, niet om ondertekende NIP-57 zap receipts. Hoe de extensie berichten in de browser matcht, hebben we niet getest.
Versleutelde polls in Agora
Agora is een browserprototype voor versleutelde groepspolls. Het combineert vouching door leden met blinde stemtickets en verstuurt verkeer via Nostr-relays en WebRTC. De README presenteert het ontwerp als één echte persoon, één stem, maar dat hangt af van vertrouwen in de ticketuitgever, die tickets kan verzinnen, en van vouching als vorm van sociaal vertrouwen. Bescherming tegen dwang biedt het ontwerp niet. Relays kunnen timing en IP-adressen zien; de uitkomsten hangen af van welke events een client ontvangt. Het project staat los van het oudere chatproject ghobs91/Agora.
Cinderous SDK
Cinderous SDK v0.83.0 is een nieuw prototype in broncode dat elk apparaat een eigen sleutel geeft en documenten met een Git-achtige geschiedenis synchroniseert via Nostr en WebRTC, met relays als terugvaloptie wanneer dat nodig is. De aanroeper kiest en deployt de relays, en de SDK wordt geleverd zonder standaard publieke relay. Voor de versleuteling wordt een experimenteel CinderEK-schema met een Double Ratchet gebruikt, dat geen externe audit heeft gehad. De hybride sleuteluitwisseling maakt de secp256k1-handtekeningen niet quantumveilig, en de README beschrijft de SDK als niet productierijp.
evil-napplets
evil-napplets heeft niveaus 02 tot en met 08 van de aanvalsladder toegevoegd, bedoeld voor het testen van hosts die napplets draaien onder het opaque-origin-model uit het NIP-5D-concept. De kwaadaardige napplets tasten de grenzen van capabilities en de bridge af en rapporteren wat de host toestond. Demonstratiemodus is de standaard; actieve modi moeten expliciet worden ingeschakeld. Actieve tests horen alleen te worden uitgevoerd tegen hosts die de tester bevoegd is te onderzoeken. Omdat de suite een red-team-fixture is, is een host die ervoor slaagt daarmee nog niet aantoonbaar veilig. Het is een ander project dan evil-napps, dat zich op een andere app-architectuur richt.
evil-napps
evil-napps is een nieuwe suite in broncode die autoriteitsgrenzen in NAPP-launchers aftast. Ze bestrijkt de launcher-bridge en de NIP-07-signer die aan apps wordt aangeboden. Ook SharedDB-opslag valt binnen de scope. NAPP-bundels combineren metadata met een indexbestand, een ander formaat dan het enkele HTML-artefact dat NIP-5D-napplets gebruiken. Volgens de README draait de suite standaard in demonstratiemodus en voert ze actieve probes alleen uit wanneer daar expliciet om wordt gevraagd. De tests en het harnas vormen geen certificering van een launcher.
Feedstr
Feedstr is een nieuwe RSS-lezer in Rust die feeds, leesstatus en favorieten in versleutelde vorm via Nostr synchroniseert. Synchronisatie kan per feed worden uitgeschakeld. De lezer ondersteunt OPML-import en -export en verwerkt NIP-23-artikelen in lange vorm. In de repository staan broncodebomen voor core, Android, web en Flatpak. Volgens de README is de software nauwelijks getest en wordt gebruik niet aanbevolen, en komen er binnenkort installatie- en gebruiksinstructies.
NKIP-toolkit voor stortingsbewijzen
KYC-rip/nkip-0001 is een nieuwe TypeScript-toolkit, onderhouden door XBToshi, voor NKIP-0001-stortingsbewijzen. NKIP-0001 is een receiptformaat voor applicaties en geen geaccepteerde Nostr-NIP. De toolkit verwerkt met Ed25519 ondertekende stortingsbewijzen, gezouten commitments, Nostr-witness-events en saltherstel via NIP-44-versleuteling. Voor de bescherming moet de applicatie het stortingsadres achterhouden totdat de witness is waargenomen. Als toegangspoort voor orders fungeert de SDK niet, en uitbetalingen garandeert hij evenmin. Details staan in de README.
nostr-parse
nostr-parse is een nieuwe Rust-parser van VectorPrivacy voor ondertekende Nostr-events. Hij dwingt de strikte eventvorm met zeven velden af, vereist niet-negatieve gehele getallen, beperkt kinds tot het u16-bereik, controleert hexvelden en valideert escaped strings. Fouten worden gemeld met offsets. Aanroepers kunnen compacte allocaties in eigen bezit of geleende spans in de invoer produceren, en parse_unsigned accepteert ongetekende NIP-59-rumors. Bij het parsen wordt de event-ID niet opnieuw berekend en de Schnorr-handtekening niet geverifieerd, dus aanroepers moeten die controles nog steeds zelf uitvoeren.
cl-deposits
cl-deposits is een nieuwe Common Lisp-implementatie van Bitcoin Deposits. In dit ontwerp beheert een operator via Nostr ondertekende hash-chain-ledgers die door een quorum worden medeondertekend en door Taproot-reserves worden gedekt. De repository bevat de broncode en een devnet met inspectietests. Volgens de README en de ROADMAP heeft de auteur de referentiefixtures opnieuw afgespeeld, een signet-devnet gedraaid en de interoperabiliteit met deposits-rust in beide richtingen getest. Daarnaast meldt de auteur dat het Lightning-ontvangstpad werkt, en noemt hij InvoiceLock en Fulfill voor betalingen als volgende stappen. Gebruikers zijn afhankelijk van de operator, het medeondertekenende quorum en de aannames over de reserves.
Streets
Streets, een Nostr-webclient op basis van kolommen die tijdlijnen, meldingen en zoekresultaten naast elkaar toont, heeft een wijziging samengevoegd die de standaardemoji voor reacties opslaat in het NIP-78-deckdocument van het account (kind 30078). Gebruikers hoeven die emoji daardoor niet opnieuw te kiezen na opnieuw inloggen of op een ander apparaat. Voorheen werd de keuze alleen in de localStorage van het apparaat bewaard. Het deckdocument is versleuteld met NIP-44, dus synchronisatie tussen apparaten vereist inloggen met een extensie of signer die versleuteling ondersteunt. Bij andere inlogmethoden blijft de instelling op het apparaat. Heeft een account geen opgeslagen reactie, dan wordt de bestaande waarde van het apparaat gebruikt, zodat de instelling niet terugspringt naar het hartje. Een ongeldige opgeslagen waarde wordt verworpen zonder dat de rest van het deck verloren gaat. De wijziging staat in de broncode, en de release notes voor 1.22.0 zijn nog een concept.
Labradorite
Labradorite is een Android-app voor het aansturen van sessies van coding agents op een gekoppelde Linux-computer, en heeft 0.1.0 en 0.2.0 gepubliceerd. De telefoon dient alleen als bedieningsinterface. Een daemon op de computer draait de agent en wisselt Marmot-MLS-berichten uit via gewone Nostr-relays, met één groep per sessie. Hij accepteert alleen npubs op een allowlist die standaard leeg is (broncode). Versie 0.1.0 start of hervat goedgekeurde sessies, streamt tekst, tool calls en diffs, en handelt goedkeuringen en vragen af. Daarnaast biedt ze Git-bediening en alleen-lezen bladeren door bestanden. Versie 0.2.0 zet vervolgopdrachten als aparte beurten in de wachtrij, laat gebruikers ze vanaf de telefoon annuleren, bewaart werk in de wachtrij over herstarts van de daemon heen en speelt na het herverbinden gemiste geschiedenis opnieuw af. Dit zijn claims van de uitgever, en we hebben de beveiliging niet onafhankelijk geaudit.
Nomisma
Nomisma is een Android-grootboek voor gedeelde uitgaven in prototype-bèta dat twee deelnemers aan elkaar koppelt via privé-Nostr-berichten. Het houdt alleen saldi bij en verplaatst of verrekent geen geld. Versie 0.1.3 verbindt gekoppelde apparaten automatisch opnieuw, probeert opgeslagen wijzigingen opnieuw met steeds langere wachttijden en voegt NIP-42-relayauthenticatie toe. Ook worden ontbrekende operaties opnieuw verstuurd. Pas zodra hun vectorklokken per auteur overeenkomen, vergelijken de twee apparaten een SHA-256-vingerafdruk van posten, betalers en verdelingen. Beide apparaten hebben 0.1.3 en overeenkomende relay-instellingen nodig, omdat de standaardrelay is gewijzigd. Checkpoints worden gift-wrapped met een NIP-40-vervaltijd van 15 minuten, die relays vraagt ze te verwijderen maar geen wissing garandeert. De notes melden fixes voor het laden van native libraries, de argumentvolgorde bij Schnorr en de sleutelafleiding van NIP-44, en we hebben de beveiliging niet onafhankelijk geaudit. Ondertekening door de gebruiker loopt via Amber, maar er bestaan ook tijdelijke sleutels op het apparaat. Distributienotities spreken elkaar tegen over het APK-ondertekeningscertificaat, dus hebben we de compatibiliteit bij upgrades hier niet beoordeeld.
Onyx
Onyx is een prototype voor een privédagboek dat als broncode beschikbaar is, geen gekwalificeerde release. Het bewaart gedateerde Markdown-bestanden op het apparaat als bron van waarheid en maakt er back-ups van op relays als versleutelde kind 30078-events. Gezouten d-tags voorkomen dat de datums van items direct zichtbaar worden. Voor herstel is de aparte lokale encryptiesleutel nodig, dus gebruikers moeten daar een back-up van maken, want met alleen de npub kan het dagboek niet worden hersteld. Een patch van 27 oktober voegt een controle toe die vóór publicatie de integriteit van de verzoekvelden nagaat: de kind, content, pubkey, tags en timestamp van het event dat de signer teruggeeft, moeten overeenkomen met het verzoek. Ook weigert de patch downloads van de verkeerde auteur, behoudt hij nieuwere lokale bewerkingen en vervangt hij gegevens atomisch tijdens het herstel. Auteurs en timestamps van events blijven openbaar. Platte tekst die aan het encryptiecommando wordt doorgegeven, kan kortstondig zichtbaar zijn bij inspectie van lokale processen, en het verwijderen van een item wist geen kopieën op relays.
Zzub
Zzub 0.0.41 is een communityclient die is geforkt van Buzz. Volgens de korte notities van de uitgever voegt deze versie RSVP’s voor agenda-items met tijdzoneondersteuning toe, evenals profielzaps, weergave van NIP-58-badges en een huddleknop waarmee je aan een lopende vergadering deelneemt. De agentbediening krijgt een herstartoptie, bewerking van een lijst met uitzonderingen op het budget en nieuwe typen taakkaarten. Bij het opstarten worden nu gecachete kanalen gebruikt.
Protocol- en specificatiewerk
NIP-CD definieert commando’s die als platte tekst worden aangeroepen
De NIP-CD-specificatie, eerst getiteld Commands en nu Slash Commands, is op 21 oktober samengevoegd in de NIPs-repository (beoordeling van het voorstel). Een executor maakt een commando bekend in een kind 31992-event met daarin de trigger, titel, beschrijving, getypeerde positionele argumenten en scopes. Gebruikers roepen het aan als platte tekst aan het begin van de eventcontent, optioneel gekwalificeerd met de npub van de executor, zodat er geen commandospecifieke tags of clientondersteuning nodig zijn. Een kale trigger kan met meerdere executors overeenkomen. Clients mogen autocomplete aanbieden, maar kunnen het niet verplicht stellen.
Marmot gaat over op meerdere apparaten per account
Marmot, een op MLS gebaseerd protocol voor versleutelde groepsberichten voor Nostr, heeft op 26 oktober zijn regels voor accounts met meerdere apparaten gemerged (beoordeling van het voorstel), in een vorm die ten opzichte van het eerdere concept is herzien. Een uitnodiger mag in één Commit maximaal 20 KeyPackages voor één account toevoegen. Elk apparaat heeft precies één levenslang, willekeurig publicatieslot en kopieert nooit MLS-status of privé-KeyPackages. Packages horen 30 dagen mee te gaan, met een vernieuwing na 7 dagen. Uitnodigers sturen elk geschikt apparaat een eigen Welcome, en wie een account verwijdert, verwijdert daarmee al zijn leaves.
Marmot laat leden de leaves van hun eigen account beheren
Marmot heeft een membership-component voor hetzelfde account aangenomen, marmot.group.account-devices.v1 (ID 0x800d), die geen gegevens bevat. Wanneer de groepsonderhandeling de component vereist, kan een lid zonder beheerdersbevoegdheid Adds en Removes voor zijn eigen account committen. Onder deze component kan het lid het eigen leaf van de committer niet verwijderen en ook geen andere accounts verwijderen, terwijl de beheerdersstatus van het account niet verandert. Bestaande groepen moeten de component activeren en aan de bijbehorende ondersteuningsinvarianten voldoen.
Push-triggers van Marmot krijgen verse padding
Sinds een merge op 26 oktober vereist Marmot verse padding in elke push-trigger. Elke trigger van kind 446 bevat ten minste één verse CSPRNG-paddingchunk van 1.084 bytes, waardoor binnen het budget van 32 chunks hoogstens 31 echte versleutelde tokens overblijven. Zonder verse padding zouden identieke tokenbytes ertoe leiden dat deduplicatie op basis van content-hashes legitieme latere meldingen onderdrukt. Servers hashen alle chunks. Ze mogen een structureel geldige trigger niet weigeren omdat ze de padding niet kunnen detecteren. Voor relays en waarnemers verbergt padding het aantal tokens, maar de notificatieserver die ontsleutelt, kan het nog steeds zien.
Marmot voegt herstel van push-tokens voor nieuwe leden toe
Marmot heeft op 26 oktober herstel van push-tokens voor nieuwe leden gemerged, en een vervolgwijziging verduidelijkte de definitieve formulering. De eigenaar van de Commit die een nieuwkomer toevoegt, hoort actieve tokensnapshots van kind 448 en verwijderingstombstones van kind 449 te sturen. Met een optionele set vingerafdrukken in een announce van kind 447 kunnen peers alleen de ontbrekende records sturen. De drie hoogst gerangschikte leaves reageren met gespreide timers, onder een snelheidsbeperking van 24 uur per aankondigend leaf. Doorgegeven ondertekende records en bewaarde verwijderingstombstones herstellen ontbrekende tokenstatus, zelfs terwijl de eigenaren offline zijn.
Voorstel voor Nostr-sleutels in passkeys
Een voorstel voor Nostr-sleutels die in passkeys worden bewaard bouwt voort op Nosskey, een bestaand schema voor het gebruik van passkeys met Nostr-sleutels. Getagde handles scheiden een via PRF/HKDF afgeleide identiteit van een opgeslagen sleutel, en versleutelde relay-records van kind 31778 koppelen de relying party, de auteur en de credential aan elkaar. Ontbrekende of onbekende metadata mogen niet stilzwijgend een nieuwe identiteit aanmaken. Autorisatie op basis van de origin van de relying party blijft gelden, en voor oude Nosskey-gegevens is een expliciete migratielezer nodig. Een afgeleide identiteit gaat samen met de passkey verloren, tenzij er apart een back-up van wordt gemaakt.
Voorstel voor DNS-delegatie van NIP-05-identifiers
Een niet-gemerged voorstel voor DNS-delegatie voor op DNS gebaseerde NIP-05-identifiers voegt een fallback toe die alleen geldt wanneer de oorspronkelijke HTTPS-lookup 404 of 410 teruggeeft. Clients lezen in dat geval een TXT-record _nip05 dat naar een HTTPS-provider verwijst. Timeouts, TLS- of CORS-fouten, redirects en niet-overeenkomende sleutels activeren de fallback nooit, en DNS slaat geen sleutels op. DNSSEC wordt aanbevolen maar is optioneel. Bij niet-ondertekende DNS kan de TLS van de provider de autorisatie van het oorspronkelijke domein dus niet onafhankelijk authenticeren. Oudere clients kunnen identifiers die alleen via delegatie werken niet resolven.
Catalogus voor softwareapplicaties voorgesteld als NIP-82
Een voorstel voor een catalogus van softwareapplicaties gebruikt NIP-82 als voorgesteld nummer in die open, niet-gemergede pull request; het nummer is niet toegewezen of aangenomen. Het voorstel brengt kinds samen voor apps (32267), releases (30063), assets (3063), curatie (30267), bewijzen van certificaateigendom (30509) en een relaylijst voor de catalogus (10067). Assets identificeren hun platform en runtime, samen met een bestandshash. Bij Android-assets komt daar een hash van het ondertekeningscertificaat bij. Een bewijshandtekening toont aan dat de uitgever het certificaat beheert, maar lezers moeten nog steeds de vervaldatum en intrekking ervan controleren.
BIP 321-URI’s voorgesteld als betaaldoelen in NIP-A3
Een niet-gemerged voorstel dat een betaaltype bip321 toevoegt aan betaaldoelen van NIP-A3 laat een event van kind 10133 een volledige bitcoin: URI bevatten als statische, herbruikbare betaalinstructies. Omdat het doel wordt hergebruikt, staat het voorstel geen bedrag toe en evenmin een eenmalige BOLT11-factuurparameter lightning. De betaler kiest het bedrag en de wallet kiest een betaalmethode die hij ondersteunt, waarbij de fallback naar een Lightning-adres behouden blijft.
Voorstel voor zaps die via BIP 321-doelen worden betaald
Volgens een voorstel voor zaps die via BIP 321-doelen worden betaald betaalt de afzender het herbruikbare NIP-A3-bip321-doel van een ontvanger via Ark (een offchain Bitcoin-protocol), Lightning of onchain, en publiceert hij daarna een zap van kind 9740. De houder van de ontvangstsleutel bevestigt de afwikkeling met kind 9741. Beide kind-nummers zijn nog placeholders. De betalingsreferentie wordt met NIP-44-versleuteling met versiebeheer versleuteld naar een ontvangstsleutel waarvoor de ontvanger expliciet kiest, en alleen die sleutel kan de betaling bevestigen. Derden kunnen de betalingsgegevens niet verifiëren, zodat de bevestiging afhangt van vertrouwen in de handtekening van de ontvanger. Lightning-zaps van NIP-57 worden door het voorstel niet vervangen.
Ark-betalingen voorgesteld voor Nostr Wallet Connect
Een niet-gemerged voorstel voor een Ark-extensie voor Nostr Wallet Connect, het NIP-47-protocol waarmee apps een externe wallet kunnen aansturen, voegt een Ark-instructie toe aan de bestaande ondersteuning voor betalen en ontvangen via BIP 321. Daarnaast komt er een Ark-betaalrecord voor lookup_payment, zonder nieuwe methoden. Een wallet gebruikt de instructie alleen als hij de adresversie en het netwerk ondersteunt en dezelfde Ark-server deelt. Anders probeert hij een andere instructie in de URI. Bedragen moeten uit hele satoshi’s bestaan, zonder afronding naar millisatoshi’s. Records maken onderscheid tussen een betaling die door de server is medeondertekend en geld dat de ontvanger heeft geïnd en kan uitgeven.
Ark-betaalheader voorgesteld voor Blossom-servers
Een voorstel voor een Ark-betaalheader in Blossom, het protocol voor het opslaan van mediablobs op HTTP-servers, voegt X-Ark toe aan BUD-07-responses met HTTP 402 (payment required). De header bevat een BIP 321-URI met een vers Ark-adres per request en het bedrag. Optioneel bevat de URI dezelfde betaling ook als Lightning-factuur. Als bewijs doen clients na de afwikkeling een nieuwe poging met het betaalde Ark-adres. Clients die de fallback hebben gebruikt, proberen het opnieuw met de Lightning-preimage. Een HEAD-request wordt niet opnieuw met bewijs verstuurd; clients gaan in dat geval door naar de GET of PUT.
Cashtag-voorstel voor vermeldingen van assets in notes
Een cashtag-voorstel definieert optionele tokenisatie van $ gevolgd door twee tot zes ASCII-letters, met uitzondering van code, URL’s en Nostr-verwijzingen. Eén enkele cashtag-tag bepaalt de weergavemodus en kan een door de auteur gekozen asset-ID koppelen, omdat een ticker op zichzelf een asset niet uniek kan identificeren. Lezers controleren of het symbool overeenkomt met de chain en het adres. Afwijkingen markeren ze, zonder ze een ander label te geven. Optionele tags t in de vorm $ticker maken standaard zoeken via relays mogelijk.
Gamepadspecificatie voor Napplets ingetrokken
De NAPs-repository, waar Napplet-specificaties worden gepubliceerd, heeft op 27 oktober een verwijdering van de gamepadspecificatie gemerged. De wijziging verwijdert NAP-GAMEPAD.md en maakt de eerdere aanneming ongedaan. Momenteel is er geen gamepad-NAP aangenomen.
Hoogtetags in Cyberspace vermijden botsingen met grouptags
Cyberspace, een ruimtelijk protocol dat op Nostr is gebouwd, heeft verschillende van zijn eigen specificaties gemerged, DECKs genaamd. Dit zijn projectspecificaties, geen officiële NIPs. De specificatie hernoemt de hoogtetag op bags en chat nu van h naar H. De tag in kleine letters botste met NIP-29-grouptags en zorgde ervoor dat events werden geweigerd of verkeerd ingedeeld. Alleen als H ontbreekt, vallen lezers terug op een verouderde h. Dit wijzigt uitsluitend de projectspecificatie. Het past NIP-29 niet aan en bewijst niet dat geïmplementeerde clients met elkaar samenwerken.
Verborgen audio in Cyberspace
DECK-0007 definieert verborgen audio als een versleuteld Blossom-bestand waarnaar wordt verwezen door een niet-ondertekend rumor binnen een ondertekende bag of chest. Daardoor wordt de persoon die het heeft verborgen niet toegeschreven via een afzonderlijk ondertekende openbare post die kan worden afgespeeld. Elke plaatsing gebruikt een verse sleutel en ciphertext, maar iedereen kan de sleutel nog steeds delen. De specificatie beweert niet dat versleuteling de privacy van de vinder garandeert of dat de URL-regels alle SSRF blokkeren, en ondersteuning in lezers is nog in ontwikkeling.
Openbare modellen en animatie in Cyberspace
Items kunnen nu verwijzen naar openbare SNO-modellen met bob- en spin-animaties, en vallen terug op de oude weergave als een model ongeldig of niet beschikbaar is. Live modellen kunnen veranderen of verdwijnen, en brede adoptie wordt niet geclaimd.
Specificaties voor items, chat en reacties in Cyberspace
Optionele DECKs 0004 tot en met 0006 documenteren bestaande code voor items, chests, listings, versleutelde lokale chat en verzegelde reacties, met synthetische testvectoren. Er staan nog verschillende problemen open. Zo verschillen de handtekeningen van bags en chests, en onthullen verzegelde reacties de parent-ID en kind via openbare tags. Houders kunnen listings overschrijven. Bij chat zijn er lacunes rond replay en contextbinding, en verwijzingen naar chests zijn niet geïmplementeerd. De documentatie lost geen enkel beveiligingsprobleem op en is geen uitrol.
Voorstel voor events met meerdere auteurs
Een ondertekend longform-artikel, Multi-Author Nostr Events as a Soft Fork, stelt events voor waarvan de ID-hash meerdere auteur-pubkeys omvat, waarbij elke auteur dezelfde ID ondertekent. Oudere clients zouden een secp256k1-compatibele wrapper zien die de gegevens in de nieuwe vorm en Q-tags als lookup-hints bevat. Peers zouden de nieuwe vorm per verbinding onderhandelen. Het artikel generaliseert het eerdere post-quantumvoorstel van de auteur, dat een toekomstige sleutel als extra co-auteur zou toevoegen. Dit is een ongenummerd voorstel, geen geaccepteerde NIP. Vervanging van naddr’s met meerdere auteurs en binair transport blijven open vragen.
NIP-AR-syncabonnementen in Buzz sturen een volledige snapshot vóór live heads
Een open pull request in Buzz stelt WebSocket-syncabonnementen voor NIP-AR voor (#8522). De relay zou een consistente set artefacten sturen die onder REPEATABLE READ is gelezen, en pas EOSE uitzenden zodra die set volledig is, om daarna live current heads te streamen; de live registratie bij Redis gebeurt vóór de initiële read. Een verbroken Redis-verbinding of vertraging beëindigt het abonnement met CLOSED en vereist een resync. Hetzelfde geldt voor wijzigingen in toegang, redactions of een volle wachtrij. Abonnementen zijn begrensd op 4.096 artefacten. Op het afsluitmoment van onze bronnen was de wijziging niet gemerged en niet in productie beschikbaar.
Incrementele reads van NIP-AR-artefacten via HTTP in Buzz
Een aparte open pull request in Buzz voegt incrementele HTTP-reads toe voor NIP-AR-artefacten (#8523). Clients pagineren op basis van gewijzigd-tijdstempels uit de database en stabiele ID’s, met een overlap van 120 seconden, en ontvangen ofwel de huidige revisie, ofwel een verwijdering. Bekende ID’s kunnen ze herstellen. Resultaten volgen een model van eventual consistency. Een volledige snapshot belooft het voorstel niet, en het ontbreken van een artefact betekent niet dat het is verwijderd of dat de toegang verloren is gegaan. Voor de nieuwste revisie van een artefact is lidmaatschap vereist, of een expliciete #h-scope voor niet-vermelde open kanalen, en een wijziging in de vermelding zet de incrementele voortgang terug. De feature gate, BUZZ_ARTIFACT_INCREMENTAL_ENABLED, staat uit en vereist dat elke writer en migratie (nu 0074 tot en met 0076) aanwezig is. Deze vertraging van 120 seconden is een operationele aanname. Op het afsluitmoment van onze bronnen stond de wijziging nog open.
Concepttekst van NIP-AM voor gedelegeerde lezers van metrics
Een concept-pull request voor documentatie in Buzz specificeert gedelegeerde lezers voor metrics van NIP-AM, zonder de autorisatie tijdens runtime te wijzigen (#8582). Het event van kind 44200 dat voor de eigenaar is versleuteld, blijft ongewijzigd. Voor elke actieve grant stuurt de agent een afzonderlijke NIP-44-kopie uit, gekoppeld aan de exacte ID van het grant-event dat door de eigenaar is opgesteld. De voorgestelde grant-kind 30180 en limieten voor lezers blijven open vragen, net als geschiedenis, intrekking en openbare koppeling. Een ondertekende intrekking kan kopieën die een ontvanger al heeft niet wissen, en het concept was op het afsluitmoment van onze bronnen niet gemerged.
Met DECK-0003 kan een parent de objecten meedragen die hij plaatst
Een open pull request in Cyberspace stelt DECK-0003 §1.10 voor, een roottabel met inline SNO-objectpayloads (#81). Een aanwezige entry in de kopie van de parent heeft voorrang zonder netwerkfetch, zelfs als die entry ongeldig is. Elke entry is beperkt tot de pubkey van de auteur, met begrensde grootte en diepte plus limieten voor cycli. Oudere lezers halen ontbrekende objecten op en tonen een placeholder. Het voorstel beschrijft implementaties die worden aangehouden in afwachting van deze wijziging, die op het afsluitmoment van onze bronnen niet gemerged was.
DECK-0004 definieert aan hoogte gebonden deuren met afgeleide kamersleutels
Een openstaande pull request voor Cyberspace voegt DECK-0004 §3.6 en §3.7 toe over looks en deuren (#82). Deuren zijn hoogtegebonden, en de kamersleutel is SHA-256(domeinscheider ‖ locatiesleutel ‖ deurgeheim), waarbij de bag van de kamer onder die sleutel wordt versleuteld. Kamers kunnen meerdere of geneste deuren hebben, en het instellen van een nieuw slot roteert de sleutel. Testvectoren ontbreken in de tekst totdat er een eerste implementatie bestaat. Op het moment van onze bronafsluiting was de pull request nog niet gemerged.
nostream-extensie voor peeringaankondiging in NIP-11
Een openstaande pull request voor nostream zou het NIP-11-document van de relay uitbreiden met een peeringsectie (#999). Die sectie adverteert feed-kinds met tijdsgrenzen en verrekeningsvoorwaarden, samen met een contactendpoint en proof-of-work voor peering. Alleen enabled: false schakelt de sectie uit, en lege voorwaarden betekenen peering zonder verrekening (settlement-free). Een geadverteerd aanbod is nog geen geaccepteerde peer. Peerovereenkomsten of betaalde federatie implementeert de wijziging niet. Op het moment van onze bronafsluiting was ze nog niet gemerged.
NIP-CD voegt optionele lijsten met geïnstalleerde commando’s toe
Een vervolg op NIP-CD is op 27 oktober gemerged in de standaardbranch van de NIPs (merge), en de specificatie heet nu Slash Commands. Ze definieert een optionele lijst van kind 10992, volgens NIP-51, waarin een gebruiker address-tags bijhoudt die verwijzen naar commandodefinities van kind 31992, elk geïdentificeerd door executor-pubkey en d-waarde met een optionele relay-hint. Gebruikers mogen de lijst bijhouden, en clients zouden haar moeten gebruiken voor autocomplete en weergegeven chips. Het gaat om een voorkeur voor weergave en ontdekking. Executors worden er niet door gemachtigd, en aanroepen in platte tekst werkt ook zonder de lijst, zonder commandospecifieke tags en zonder vereiste clientondersteuning. NIP-CD blijft een optioneel concept, en uit de merge blijkt niet welke clients de lijst hebben overgenomen.
Marmot vernauwt zijn regel voor eerlijke voorbereiding bij accountapparaten
Marmot heeft op 28 oktober een correctie gemerged op zijn planningsregel voor groepen die accountapparaten vereisen. Zodra een begrensde convergentieronde Stable bereikt, krijgt één intent in de wachtrij die door een admin is geautoriseerd, of een toegestane intent van hetzelfde account, een voorbereidingspoging voordat inkomend werk in de wachtrij op zichzelf een nieuwe ronde kan afdwingen. SelfUpdate en Leave vallen buiten deze extra eerlijkheidsgarantie, hoewel elk lid ze nog steeds mag committen. Eerdere formulering omvatte elke geautoriseerde intent, en die corrigeert de wijziging; groepen die geen accountapparaten vereisen, behouden hun eerdere planning. Er is geen wire-wijziging, en een voorbereidingspoging garandeert geen geldige, geaccepteerde of canonieke Commit.
Marmot stelt een verborgen apparatenroster voor accountgroepen voor
Een openstaand Marmot-voorstel, niet gemerged, zou een device-roster-v1-component toevoegen met ID 0x800e voor een verborgen groep waarvan alle leaves bij één account horen. Een groep draagt het roster vanaf de aanmaak, of nooit. Het roster legt apparaten, afgewezen slots, afgewezen KeyPackages en leaf-maps vast, en het is de eerste component die expliciete, volgorde-onafhankelijke diff-updates gebruikt die op de kandidaat-parent worden toegepast. Verwijderde slots kunnen leaf-maps behouden voor groepen waaruit hun siblings ze niet kunnen verwijderen. Een apparaat vertrouwt een apparaatgroep alleen als het die groep zelf heeft aangemaakt of is toegetreden via een Welcome die door een bevestigde koppeling is geauthenticeerd, dus de marker 0x800e alleen verleent geen vertrouwen. In de oprichtende Add staat precies de KeyPackage uit de bevestigde koppeling. Een gestolen gekoppeld apparaat kan het roster bewerken totdat het wordt verwijderd. De apparatenlimiet geldt voor apparaten. Voor leaf-map- en afwijzingsrecords gelden groottelimieten per item, maar geen limiet op het aantal records. Rostergegevens worden nooit naar andere accounts gekopieerd, en de groep blijft verborgen in chats, tellingen, meldingen en bestemmingen. Volgens de beschrijving houdt MDK rosterbytes achter een testschakelaar, zonder nieuwe gewone UI.
Marmot stelt duidelijkere feedback voor wanneer activering van accountapparaten mislukt
Een ander openstaand Marmot-voorstel, niet gemerged, zou clients mislukte activeringen laten uitleggen voor accountapparaten. Een client mag melden dat een groep geen accountapparaten kan activeren. In die feedback op groepsniveau kunnen niet de leden of apparaten worden genoemd die de activering blokkeren. Een lid dat geen actieve admin is, verneemt alleen dat het geen adminstatus heeft. Gaat een branchselectie verloren of mislukt een opnieuw gegenereerde activeringscontrole, dan moet de gebruiker een nieuw verzoek doen. Automatisch opnieuw proberen doet de client nooit. De bestaande regel dat activering een nieuw gebruikersverzoek van een geautoriseerde client vereist, blijft ongewijzigd. Dit is normatieve concepttekst en laat geen geïmplementeerd of uitgerold gedrag zien.
Marmot stelt emojiverificatie voor bij het koppelen van nieuwe apparaten
Een openstaand Marmot-voorstel, niet gemerged, beschrijft het koppelen van een nieuw apparaat via een uitwisseling naar het model van Matrix m.sas.v1, met X25519, HKDF en HMAC. De gebruiker vergelijkt zeven gelabelde emoji op beide schermen en leest of typt geen code. Bezit van de accountsleutel authenticeert nooit een apparaat. Vijf ongetekende rumors (Request, Answer, Reveal, Confirm en Cancel) worden gewrapt naar de account-pubkey en binden het account, de sessie, de nieuwe KeyPackageRef, het bestaande apparaatslot en verse sleutels. Eerst bevestigt het bestaande apparaat, dat precies de bevestigde KeyPackageRef toevoegt. Het nieuwe apparaat bevestigt pas na verificatie, en het accepteert een Welcome alleen voor de groeps-ID die door de bevestigde uitwisseling is geauthenticeerd. Voorgesteld worden kinds 452 tot en met 456, met 457 tot en met 489 gereserveerd. Een houder van de accountsleutel kan nog steeds Cancel vervalsen om dienstweigering te veroorzaken, zelfs na bevestiging. De limiet per uur voor Answer blijft niet behouden na herstarts. Relays kunnen de burst van wraps en het accountadres zien; sommige merge- en Welcome-gevallen blijven uitgesteld. Implementaties laten deze formaten standaard uitgeschakeld, en twee door de auteur aangeleverde known-answer-vectoren vormen geen onafhankelijke beveiligings- of interoperabiliteitsaudit.
NIP-5D-voorstel voor napplets scherpt media- en bronvelden aan
Het openstaande NIP-5D-voorstel voor napplets is eerder beschreven. De wijzigingen van 28 oktober zijn nu gemerged in de voorstelbranch, niet in de standaardbranch van de NIPs, en herzien optionele media- en bronvelden die op 17 oktober zijn geïntroduceerd. Screenshot- en preview-tags hergebruiken nu de key-value-velden van NIP-92, met één verplichte SHA-256-waarde x in kleine letters en optioneel m, dim, size, alt en duration. Lezers moeten de hash verifiëren en het werkelijke formaat decoderen voordat ze renderen. Is er een geldig m-veld aanwezig, dan moet het gedecodeerde formaat ook met dat MIME-type overeenkomen. Items met een ontbrekende, herhaalde of ongeldige x worden genegeerd, ongeldige optionele velden worden weggelaten zonder andere bruikbare media te verwerpen, en meerdere previews worden genegeerd. Een source-commit moet verwijzen naar een exacte, volledige Git-ID, en voor HTTPS-bronarchieven is een exacte overeenkomst op byteniveau met de SHA-256 vereist. Dubbele of misvormde bronvelden worden genegeerd, en onbruikbare brongegevens mogen het afspelen van HTML niet blokkeren. Een overeenkomende commit of een overeenkomend archief bewijst geen reproduceerbare build, en er wordt geen conformiteit van clients geclaimd.
Zes jaar Nostr-oktobers
Over zes oktobermaanden heen schoven de gedateerde wijzigingen van Nostr naar buiten op, van berichtframing naar de applicaties die erop zijn gebouwd. In 2021 legde de basisspecificatie vast dat clientberichten worden geframed als JSON-arrays op het hoogste niveau. De oktobers daarna brachten zoeken in clients en Lightning-facturen, tijdstempelbewijs en jobverzoeken, mediavarianten en ecash-wallets, en vervolgens samenwerking aan code en metadata van privéberichten. Andere wijzigingen in dezelfde maanden maakten identiteiten en verbindingen makkelijker mee te nemen tussen programma’s, van zichtbare relaystatus tot aparte signer-sleutels en het koppelen van wallets. Deze oktober definieerde hetzelfde document waarmee een lege filterlijst overeenkomt, zodat relays die identieke JSON lezen nu een gedeelde regel hebben voor welke events die lijst selecteert.
Oktober 2021: het transport eenduidig maken
Op 4 oktober werd NIP-01, de basisspecificatie van het protocol, herzien zodat clientberichten JSON-arrays op het hoogste niveau zijn. De informele voorvoegsels EVENT, REQ en CLOSE werden het eerste element van elke array, en de vaste eis voor het pad /ws verviel, zodat elk WebSocket-endpoint volstond. Daarmee werd een specificatie verduidelijkt waar al code achter stond. Onafhankelijk geschreven clients hebben exacte framing nodig voordat iets geavanceerders kan samenwerken.
Op 23 oktober kreeg de richting van relay naar client expliciete EVENT- en NOTICE-berichten. Een EVENT van een relay draagt de identifier van een bestaande REQ-subscription, zodat een client die meerdere subscriptions over één verbinding draait resultaten aan verzoeken kan koppelen, en NOTICE bevat voor mensen leesbare tekst. Zo’n kleine woordenschat is praktisch om meer dan eens te implementeren, wat goed past bij relays die afzonderlijk worden beheerd.
Uit de tekst van NIP-01 van 23 oktober blijkt ook wat een handtekening dekt. De ID van een event is een digest van een compacte UTF-8 JSON-array met een voorloopnul, de publieke sleutel van de auteur, de tijdstempel, de kind, de tags en de content, en de auteur ondertekent die digest met een Schnorr-handtekening op de curve secp256k1. Buiten die ondertekende gegevens vallen de WebSocket-envelop en de subscription-identifier. Uit die tekst volgt dat hetzelfde ondertekende event via verschillende subscriptions of over verschillende verbindingen kan binnenkomen zonder opnieuw te worden ondertekend. Een REQ levert eerst overeenkomende opgeslagen events op en blijft daarna live totdat de client CLOSE stuurt, de socket sluit of de subscription-ID hergebruikt voor een nieuwe REQ. Binnen één filter moet elke voorwaarde gelden, terwijl meerdere filters in één REQ events matchen die aan een van die filters voldoen. De filternamen in die versie verschillen van de huidige. Het gedrag van NOTICE bleef ongespecificeerd, en niets beloofde hoe lang relays events bewaren of dat een query ze allemaal teruggeeft. Vijf jaar later zou dezelfde specificatie terugkeren naar de betekenis van filters binnen REQ.
Oktober 2022: een feed wordt bruikbaar op een telefoon
Op 8 oktober voegde Damus, een Nostr-client voor iOS, zoeken naar hashtags, profielen en events toe. De wijziging raakte de weergave van zoekresultaten en het threadmodel, waardoor een lezer naast het scrollen door binnenkomende tekst ook naar een ondertekende identiteit of een specifiek event kon springen. Dit zoeken werkte binnen de eigen navigatie van de client en was geen full-text search aan de kant van de relay.
Acht dagen later verving Damus de eenvoudige rijen in zijn relayconfiguratie door een weergave die de status van elke verbinding toont. Een gekleurde stip leest de relaypool van de client uit. Groen betekent verbonden en geel betekent verbinden of opnieuw verbinden, met rood voor al het andere en grijs vóór de eerste uitlezing. De weergave ververst wanneer ze verschijnt en daarna elke twee seconden. Swipe-to-delete, dat al bestond, verhuisde naar de nieuwe weergave. Dankzij de zichtbare stippen hoefde een vastgelopen feed niet langer te worden opgevat als stilte van een auteur, omdat een lezer kon zien welke van meerdere onafhankelijke verbindingen actief was en welke opnieuw probeerde. Een groene stip toont een open socket. Dat een relay een event heeft geaccepteerd of bewaard, toont ze niet. Evenmin toont ze dat een query alles heeft teruggegeven wat de relay bevat. De commit legt de implementatie vast in gemergde broncode. Een releasedatum in de App Store stelt deze bronwijziging niet vast.
Op 19 oktober voegde Damus een parser voor BOLT11-Lightning-facturen en factuurwidgets toe in posts, chats en directe berichten. De widget toont de factuuromschrijving en het bedrag in satoshi’s, en de knop Pay geeft de URI lightning: via iOS door aan een geïnstalleerde handler. De sociale client toont de ondertekende post, en een aparte wallet betaalt. Deze widgets dateren van vóór de latere conventie voor zap receipts, dus het zijn factuurweergaven en geen gestandaardiseerde zaps.
Oktober 2023: events dragen bewijs en verzoeken om werk
Op 11 oktober werden OpenTimestamps-attestaties volgens NIP-03, die bewijs over events in Bitcoin verankeren, verplaatst van een veld ots op het event naar een apart event van kind 1040. Dat event noemt het origineel met een tag e en bevat in zijn content het volledige base64-bestand van OpenTimestamps, met ten minste één Bitcoin-attestatie. De id van het event waarnaar wordt verwezen, is zelf de digest die het bewijs attesteert, zodat een verifier leert dat het event uiterlijk op het geattesteerde tijdstip bestond. Dat tijdstip komt van Bitcoin, niet van de created_at van de auteur. Het bewijs dateert het event en doet geen uitspraak over de inhoud ervan.
Op 12 oktober, los van de tijdstempelwijziging, kreeg sleutelafleiding volgens NIP-06 twee testvectoren. Een mnemonic is een reeks woorden die een herstelseed codeert, en de vectoren omvatten één mnemonic van 12 woorden en één van 24 woorden, elk met de verwachte private en publieke sleutels in hexadecimale vorm en in nsec- en npub-codering. NIP-06 gebruikte al BIP-39 om de mnemonic om te zetten in een binaire seed en het BIP-32-pad m/44'/1237'/<account>'/0/0 om een sleutel af te leiden, met account nul als de basiskeuze voor één sleutel. Wat de toevoeging van oktober leverde, waren bekende antwoorden, geen herstel via mnemonics en geen nieuw afleidingsalgoritme. Een client kan nu controleren of zijn afleiding en coderingen de gedocumenteerde identiteit reproduceren. Overeenstemming met de vectoren maakt implementaties vergelijkbaar. Ze certificeert geen specifieke implementatie en bewijst niet dat elke import in wallets en clients overeenstemt. Een seed beschermen tegen diefstal is een aparte kwestie waar de vectoren niet op ingaan.
Op 29 oktober werd NIP-90, de standaard voor data vending machines, met vaste job-kinds samengevoegd in de NIPs-repository. De standaard reserveerde kinds 5000 tot en met 5999 voor jobaanvragen en legde het kind van elk resultaat vast op het kind van de aanvraag plus 1000. Voor feedback diende kind 7000. Een aanvraag kan verwijzen naar tekst, URL’s of eerdere jobs. Ook kan ze de verwachte output noemen en een optioneel bod doen. De taak leeft daardoor in ondertekende events waarop elke aanbieder kan antwoorden, buiten de API van één enkele leverancier. Een eerder concept had kinds 68001 en 68002 gebruikt.
Oktober 2024: media-alternatieven en draagbare ecash
Op 15 oktober werden voor videoevents van NIP-71 imeta-tags voor videovarianten ingevoerd. In de toenmalige addressable kinds 34235 en 34236 stonden de URL, de afmetingen, het MIME-type, de voorbeeldafbeelding en de fallbacks van elke variant samen in één tag. Een client die een resolutie kiest, moet weten welke thumbnail en welke fallback daarbij horen, en platgeslagen metadata kon dat niet aangeven. Die kind-nummers zijn historisch: de huidige NIP-71 gebruikt kinds 21 en 22.
Tien dagen later werden NIP-60 Cashu-wallets en NIP-61 nutzaps, die allebei al in eerdere concepten waren geïntroduceerd, samen als specificaties samengevoegd. Ze bouwen voort op Cashu, een ecash-protocol waarvan de tokens door mints worden uitgegeven. NIP-60 bewaart versleutelde wallet-proofs op relays, zodat compatibele applicaties dezelfde walletstatus kunnen bereiken. Onder NIP-61 vermeldt een kind 10019-event van een ontvanger vertrouwde mints, relays en een locking key, en bevat een kind 9321-event van een afzender proofs die aan die sleutel zijn vergrendeld, zodat de ontvanger ze kan inwisselen. Gebruikers blijven afhankelijk van de mints die de tokens uitgeven, en applicaties moeten ervoor waken dat dezelfde proofs twee keer worden ingewisseld.
Op 29 oktober werd NIP-46 remote signing, waarbij een aparte dienst de sleutel beheert die namens een gebruiker ondertekent, herzien zodat een bunker://-verbindingsstring de publieke sleutel van de remote signer bevat. De identiteit van de gebruiker wordt apart verkregen: de herziene tekst verplicht clients om de twee sleutels van elkaar te onderscheiden en na het verbinden get_public_key aan te roepen. Voor het gesprek genereert de client een eigen sleutelpaar, en hij richt zijn versleutelde verzoeken aan de sleutel van de signer, terwijl sign_event een event teruggeeft dat met de sleutel van de gebruiker is ondertekend. Die twee sleutels kunnen samenvallen, maar dat hoeft niet. De sleutel in de verbindingsstring identificeert alleen de signerdienst. Het account van de gebruiker is de publieke sleutel die get_public_key teruggeeft. NIP-60 had vier dagen eerder gedeelde walletstatus aangepakt; deze herziening behandelt een afzonderlijk vraagstuk, namelijk de identiteit van de signer. De voorbeelden in die commit gebruiken nog het versleutelde transport dat NIP-46 destijds voorschreef, en de wijziging maakt een remote signer niet trustless en bewijst evenmin wie de sleutel van de gebruiker in handen heeft.
Oktober 2025: updates voor samenwerking en metadata van privéberichten
Op 8 oktober kreeg NIP-47 Nostr Wallet Connect deep links om een app aan een wallet te koppelen. Een wallet kan nostrnwc://connect of een appspecifieke nostrnwc+{app_name}://connect registreren, en een app die een verzoek doet, opent die link met zijn URI-gecodeerde pictogram, zijn naam en een callback-schema. Zodra de wallet de verbinding heeft aangemaakt, opent hij de callback met een value-parameter die de koppelcode bevat, een nostr+walletconnect://-URI. Drie jaar nadat Damus via iOS facturen aan een wallet doorgaf, hoefde koppelen op één telefoon niet langer te betekenen dat je een QR-code scande die op hetzelfde scherm werd getoond, of een lange string tussen apps kopieerde. De toevoeging dekt alleen deze overdracht. Ze verandert geen betaalmethoden en betaalt op zichzelf niets. Beide apps moeten de handlers implementeren, en de specificatietekst is geen bewijs dat elke wallet dat doet. Evenmin regelt ze bestedingsbudgetten, toestemmingsschermen of welke app veilig eigenaar mag zijn van een callback-schema.
Op 16 oktober kreeg NIP-34 voor git-samenwerking pull request-events van kind 1618 en update-events van kind 1619 naast de bestaande patch-events. Een pull request noemt een commit-tip en kloonlocaties, en een update verplaatst die tip. Patches worden aanbevolen onder 60 kB, met pull requests voor grotere inzendingen. Daarmee verschoof de aanbevolen route voor grotere inzendingen van patchinhoud die binnen events wordt meegestuurd naar ondertekende verwijzingen naar commits, terwijl kleinere wijzigingen nog steeds als patches kunnen reizen. Nostr draagt de coördinatie en de ondertekende verwijzingen, en Git-servers leveren nog steeds de commit-objecten waarnaar die verwijzingen wijzen.
Op 27 oktober kreeg NIP-59 gift wrap richtlijnen om de tijdstempels van seal en gift wrap onafhankelijk van elkaar te randomiseren wanneer er expiration-tags worden toegevoegd. Gift wrap sluit een bericht in die twee lagen in, en door elke laag een eigen willekeurige tijdstempel te geven, wordt beperkt hoe nauw de timing van de lagen met elkaar in verband kan worden gebracht. Hier verschoof de aandacht van het versleutelen van inhoud naar het beperken van wat correlatie van metadata kan onthullen. Versleuteling verbergt het bericht zelf, maar timing en andere metadata rond de envelop blijven waarneembaar, en implementatiekeuzes bepalen hoe gemakkelijk die aan elkaar kunnen worden gekoppeld. De richtlijn voegt geen nieuwe versleuteling toe en maakt deelnemers niet anoniem.
Oktober 2026: gedeelde betekenissen van query’s en door tekst geactiveerde diensten
Op 5 oktober werden bij NIP-92 media-bijlagen imeta-tags uitgebreid naar kind 0-profielen, zodat een profiel zijn picture en banner kan beschrijven met fallback-URL’s, een blurhash (een compacte codering van een vervaagde preview), afmetingen, alt-tekst en andere bijlagemetadata. NIP-92 bestond al vóór deze wijziging; nieuw is dat de gegroepeerde metadata die NIP-71 in 2024 op videovarianten toepaste, nu ook profielafbeeldingen bereikt. De koppeling is exact. Een tag geldt alleen als de URL ervan gelijk is aan de URL van de picture of de banner, clients horen (SHOULD) tags te negeren die met geen van beide overeenkomen, en ze horen (SHOULD) fallbacks te proberen wanneer de primaire URL faalt. Omdat een nieuw kind 0-event het eerdere profiel vervangt, hoort (SHOULD) een publisher de metadata voor een ongewijzigde afbeelding over te nemen en tags te laten vallen voor afbeeldingen die niet meer worden gebruikt, zodat verouderde alt-tekst of afmetingen niet ongemerkt een andere afbeelding beschrijven. Die updateregel is net zo belangrijk als de nieuwe velden. Een imeta-tag garandeert niet dat een afbeelding beschikbaar blijft of sneller laadt. Ook biedt hij geen privacybescherming, en clients hoeven niet elk veld weer te geven.
Op 17 oktober werd NIP-01 verduidelijkt zodat een lege lijst in een filter met geen enkel event overeenkomt, wat iets anders is dan het attribuut weglaten. Een vervolgwijziging verwijderde inconsistente formuleringen met “een of meer” en raadde clients aan geen lijsten te sturen die nergens mee kunnen overeenkomen. In oktober 2021 werd in dit document overeenstemming bereikt over de JSON-berichtopbouw van REQ: het REQ-bericht is een array, en elk filter is een JSON-object daarbinnen. Deze oktober legde het de semantiek van filters vast door te bepalen wat een lege lijst binnen zo’n filter betekent, want relays die hetzelfde frame identiek parsen, konden nog steeds verschillende resultaten teruggeven.
Op 21 oktober ging NIP-CD, toen nog Commands geheten, van voorstel naar samengevoegde conceptspecificatie; NIP-CD beschrijft slash commands. Kind 31992-events definiëren commando’s, en een aanroep is platte tekst die begint bij het eerste teken van de content van een event, zodat clients geen speciale ondersteuning nodig hebben om hem te versturen. Een vervolgvoorstel, met een eerdere commit op een aparte branch, werd op 27 oktober samengevoegd. Het gaf de specificatie de nieuwe titel Slash Commands en voegde optionele lijsten met geïnstalleerde commando’s van kind 10992 toe, die clients zouden moeten gebruiken voor autocomplete en weergave. De lijsten leggen een gebruikersvoorkeur vast; ze machtigen geen uitvoerders en vormen geen drempel voor aanroepen in platte tekst. NIP-90-jobs gebruiken gestructureerde aanvraag- en resultaatevents, terwijl een commando leesbaar blijft als gewone tekst.