Amethyst v1.11.0 levert een volledige NIP-52 kalenderimplementatie met herinneringen, on-chain Bitcoin zap-splits en ondersteuning voor Marmot groepsantwoorden. White Noise v2026.5.22 levert iOS-pushmeldingen via een Notification Service Extension, samen met block-UX en een add-members knop. Vector v0.4.0 levert een fundamentele vector-core herschrijving, één-klik Tor met bridges, NIP-46 remote signers, volledige-negentropy MLS-groepssynchronisatie en een 21-tool MCP-server voor AI-agents. Applesauce v6.1.0 introduceert NIP-51 lookup relay-lijsten (kind 10086) en een complete NIP-34 git-cast factory-set. MDK voegt NIP-40 verdwijnende berichten toe op iOS en Android via een uniform UniFFI-oppervlak, en Mostro v0.17.4 sluit de anti-abuse bond-lus met Phase 3 slashed-bond uitbetalingen aan de winnaar. Notedeck merged volledige NIP-77 negentropy reconciliation voor giftwraps en thread-backfill, Cordn verschijnt als een coördinator-gemedieerde MLS-messenger die een single-point availability afhankelijkheid inruilt voor strakkere epoch-ordening en een eenvoudiger operationeel model, een NIP-B0 referentie-implementatie genaamd deepmarks levert een curator-monetized bookmark-client, en het Formstr-team opent vier gecoördineerde kalender-NIP voorstellen die deelnemer-zelfverwijdering, private events, herhaling en gedecentraliseerd afspraak plannen dekken.

Belangrijkste verhalen

Amethyst v1.11.0: kalenders, on-chain zap-splits en Marmot antwoorden

Amethyst, de Nostr-client voor Android onderhouden door Vitor Pamplona, bracht v1.11.0 uit. PR #2994 voegt een NIP-52 calendar event-implementatie toe met een dedicated UI en een remindersysteem, waardoor calendar events nu in hun eigen timeline-categorie renderen, gescheiden van de generieke kind-30023 long-form weergave. PR #3018 breidt on-chain Bitcoin zaps uit met split-ondersteuning, waarbij een enkele Bitcoin-transactie wordt verdeeld over meerdere ontvangers volgens de bestaande zap-split tag, zodat een on-chain betaling zich hetzelfde gedraagt als een Lightning split. PR #2974 voegt een gepagineerd on-chain transactiegeschiedenisscherm toe dat elke afgewikkelde zap toont met block-confirmatiestatus.

Groepsberichten krijgen pariteit met één-op-één chat: PR #2995 voegt reply-ondersteuning toe voor Marmot/MLS groepsberichten, waardoor threads binnen versleutelde groepen nu renderen met dezelfde parent-reference UI als publieke notes. PR #2984 hardt NIP-57 zap-receipt validatie door te controleren of de LNURL-provider overeenkomt met de lud16 van de ontvanger, waarmee een klasse van vervalsing wordt gesloten waarbij een derde-partij LNURL een ontvangstbewijs kon uitgeven voor een betaling die nooit is aangekomen. PR #2968 accepteert floating-point afmetingen in NIP-92 imeta tags, waarmee Amethyst wordt afgestemd op clients die fractionele pixel-density waarden publiceren vanaf apparaten zoals de iPhone Retina display. De release sluit ook Payment Targets aan, een nieuwe replaceable-event multi-rail tip jar die in het protocolgedeelte hieronder wordt behandeld.

White Noise v2026.5.22: iOS-push, block-UX en add members

White Noise, de Marmot-protocol groepsmessenger, bracht v2026.5.22 uit met iOS-pushmeldingen als kopfeature. PR #673 implementeert een iOS Notification Service Extension (NSE) die MLS-berichten binnen het extensieproces ontsleutelt en ze als systeemmeldingen toont, zodat iPhone-gebruikers de app niet langer op de voorgrond hoeven te hebben om berichten te ontvangen. Android push-token plumbing routeert door dezelfde backend-pijplijn, waarbij de per-platform NSE ciphertext buiten de broker houdt.

PR #676 voegt een volledige block- en unblock-UX toe met bevestigingsflows en contactlijst-filtering. PR #679 voegt de langgevraagde “Add members” knop toe aan het groepsinformatiescherm, waarmee een UX-gat wordt gesloten waarbij groepsadmins moesten terugvallen op share-links. PR #688 introduceert een dedicated iOS notification-settings scherm en PR #687 sluit share-via-long-press aan voor media en berichten.

MDK voegt NIP-40 verdwijnende berichten toe over platforms

De Marmot Development Kit, de gedeelde Rust-core gebruikt door White Noise iOS, White Noise Android en elke toekomstige Marmot-client, mergde PR #306 om disappearing-message validatie en NIP-40 expiratie-verwerking bloot te stellen via de UniFFI-brug. De PR is de tweede van een driedelige serie. iOS en Android delen nu één Rust-implementatie van de expiratielogica; de timing-regels leven in één gecontroleerd codepad geconsumeerd door beide platforms via UniFFI. PR #307 beperkt de opgeslagen lengte van welcome failure reasons en saneert ze voor persistentie, een aparte hardening-pass die de welcome-event verwerking van vorige week aanvult.

Verdwijnende berichten in MLS zijn niet alleen een UI-affordance. De expiratietag wordt gepubliceerd met de versleutelde bericht-envelop, zodat een ontvanger die het bericht nooit opent, toch de onderliggende ciphertext op de relaylaag ziet verlopen naast elke gecachte kopie in de ontvangende client. Nu MDK het validatiepad bezit, blijft het gedrag consistent over clients: elke conforme Marmot-implementatie handhaaft dezelfde expiratiesemantiek, waardoor het niet langer een portabiliteitsrisico is dat de ene client expiratie eert terwijl de andere voor altijd cachet.

Mostro v0.17.4: Phase 3 sluit de slashed-bond lus

Mostro, het peer-to-peer Bitcoin-uitwisselingsprotocol gebouwd op Nostr, bracht Phase 3 van zijn anti-abuse bond uitrol uit in v0.17.4. PR #738 landt de uitbetalingsflow voor geslashte bonds, waarbij het verbeurde onderpand van de verliezer wordt afgeboekt naar de dispuutwinnaar. PR #743 voegt Phase 3.5 toe, een expliciet uitbetalingsbevestigingsbericht aan de winnaar zodat ze weten dat de geslashte sats zijn afgewikkeld, met het bevestigingsevent dat aankomt op dezelfde Nostr-sessie als de dispuutoplossing. Phase 2, vorige week behandeld, introduceerde slashing als een admin-actie; Phase 3 is het verschil tussen dreigen met een straf en die afdwingen.

PR #746 laat de daemon disputen finaliseren die geen solver row hebben, een edge case die eerder de resolutie op legacy disputen stagneerde. PR #748 tolereert null rates in Yadio’s /exrates/BTC response zodat een korte Yadio-uitval niet langer Mostro’s fiat-conversiepad breekt. PR #745 documenteert de spec voor multi-source prijsproviders, de basis voor het verwijderen van Yadio als een single point of failure. De Mostro mobiele client sloot het bijpassende Phase 3 claim-pad aan in PR #596.

Applesauce v6.1.0: lookup relays en NIP-34 git casts

Applesauce, de modulaire Nostr-toolkit die Coracle, noStrudel en Pablo F7z’s stack aandrijft, bracht v6.1.0 uit over zijn pakketten. De release voegt first-class NIP-51 lookup-relay lijstondersteuning toe: kind 10086 events laten een gebruiker signaleren “vraag deze relays als je mij wilt vinden,” naast NIP-65 outbox-lijsten als een discovery-primitief. Applicaties gebouwd op applesauce-core krijgen een reactieve User.lookupRelays$ observable en een bijpassende loader in applesauce-relay.

NIP-34 git-cast factories komen in applesauce-factory, waarbij elke Applesauce-gebouwde client een één-regel pad krijgt om repo announcements (kind 30617), patches (kind 1617) en issues (kind 1621) te publiceren. User.favoriteGitRepos$, User.gitAuthors$ en User.graspServers$ reactieve properties laten applicaties de gevolgde repos, repo-maintainers en geconfigureerde GRASP-servers van een gebruiker direct weergeven vanuit hetzelfde User-object. De release verhelpt ook pool manual methods die stilletjes offline relays lieten wegvallen in PR #73.

Notedeck mergde NIP-77 negentropy voor giftwraps en thread-backfill

Notedeck, Damus’s native multi-column desktop-client, mergde PR #1459 op 25 mei om volledige NIP-77 negentropy reconciliation aan te sluiten op het gedeelde outbox-pad. De PR voegt NIP-77 client- en relayframes toe, relay-local negentropy-sessies en een outbox full-history tracker die local-set reconciliation en missing-event fetches aandrijft. Message giftwraps krijgen negentropy reconciliation zodat privé-berichtenveloppen kunnen worden hersteld van de leesrelays van het geselecteerde account. Thread-weergaven worden niet langer beperkt door de live-subscription reply-limit. Dave PNS vervangt zijn Dave-local negentropy-implementatie door het gedeelde outbox-pad terwijl het bestaande bounded-history gedrag behouden blijft.

Live subscriptions en negentropy gebruiken nu aparte filters. Een flow kan een klein live verzoek behouden terwijl een breder negentropy-filter wordt uitgegeven om te reconcileren wat de relay al heeft. De PR schakelt bewust geen brede negentropy-sync in voor home- of profiel-timelines, wat de cold-start kostenkenmerken zou veranderen. Testdekking werd toegevoegd voor reconciliation, giftwrap-levering, thread-backfill, Dave PNS-herstel, account-omschakeling, relay-herritargeting, fetch-retries en NIP-77 relaygedrag.

Vector v0.4.0: vector-core herschrijving, Tor, NIP-46, volledige-negentropy MLS en een MCP-agentoppervlak

Vector, de privacy-gerichte cross-platform messenger gebouwd op NIP-17 DMs en Marmot-groepen, bracht v0.4.0 uit als een aanzienlijke release. Het kernpunt is een fundamentele engine-herschrijving: alle logica van Vector leeft nu in één ontkoppelde crate, vector-core, gedeeld over desktop, Android en elke toekomstige client, met 440+ tests in de core zelf en de application shell ontdaan van duizenden regels. De herschrijving is de basis voor een Vector CLI, bots en SDKs die dezelfde protocolcode aandrijven als de GUI.

Tor-integratie levert met één-klik traffic routing en bridge-ondersteuning voor censuuromzeiling. Multi-account-ondersteuning landt met een in-app switcher. Remote-signer login komt via NIP-46 met bunker pairing per QR of geplakte URI, zodat gebruikers kunnen inloggen zonder ooit hun nsec bloot te stellen. Delete-for-everyone werkt in zowel NIP-17 DMs als Marmot groepschats, waarbij Vector de kortstondige signing key behoudt als een bewuste spec-afwijking die de release notes expliciet noemen: “a diversion from the traditional NIP-17/Marmot specs for enhanced user privacy controls.” De behouden kortstondige key geeft Vector-clients lokaal bewijs dat een verwijdering was gesanctioneerd door de oorspronkelijke afzender, maar het betekent ook dat elke andere Vector-aanrakende client een ander verwijdering-verifieerbaarheidsoppervlak ziet dan baseline NIP-17/Marmot-clients.

MLS groepssync wordt nu volledig gereconcileerd via NIP-77 negentropy, dezelfde richting die Notedeck deze week nam voor giftwraps en threads. De Blossom-uploader faalt over meerdere servers, leert de capabilities van elke server en synchroniseert de serverlijst over apparaten. Custom emoji-packs zijn door gebruikers te maken, deelbaar en cross-compatibel met andere Nostr-clients. SQLite-geheugen daalde van ongeveer 308MB naar 5MB. Het emoji-paneel opent vanuit disk-cache en Discord-stijl shortcodes (:smile:) plus Unicode-frequentierangschikking tonen de juiste glyph eerst.

De meest nieuwe toevoeging is vector-agent, een MCP (Model Context Protocol) server die 21 tools blootstelt zodat AI-agents Vector kunnen aansturen: DMs verzenden, groepen beheren, bestanden uploaden, profielen bewerken. Dit is het tweede Nostr-project deze week (naast Shopstr) dat een MCP-oppervlak levert, en de eerste messenger-klasse applicatie die dat doet. Gekoppeld met AgentNoise (vorige week behandeld), beweegt het patroon van agent-bestuurde Nostr-clients zich van eenmalige experimenten naar een bewuste platformrichting.

Cordn verschijnt als een coördinator-gemedieerde MLS-messenger

Cordn (web client op cordn.net, repos op Cordn-msg/cordn en Cordn-msg/cordn-web) is een nieuwe MLS-messenger die een andere architecturale richting neemt dan Marmot. Waar Marmot volledig relay-gebaseerd is zonder bevoorrechte coördinator (elk groepslid schrijft direct naar relays en elke conforme relay kan het verkeer dragen), introduceert Cordn een per-groep coördinatorrol geïmplementeerd als een ContextVM service. De coördinator ordent MLS commits en verzorgt welcome-distributie.

Het Cordn-argument, uiteengezet op zijn /why pagina, is dat MLS zoals geïmplementeerd in productie-messengers “not coordination-free” is en dat “weakly ordered public dissemination” groep-state convergentie “much harder” maakt zonder een sterk coördinatiepunt. Een coördinator-gemedieerd ontwerp biedt voorspelbare epoch-voortgang en eenvoudigere concurrent-commit resolutie. Deelnemers verbinden met de coördinator via kortstondige sleutels, zodat de coördinator de groep-ID en de timing van commit-verkeer leert, maar niet welke lange-termijn pubkeys leden zijn. Elke partij die relays bevraagt voor een Marmot-groep kan al hetzelfde oppervlak zien: groepsactiviteit per groep-ID, met timing afleidbaar uit event-aankomst. Cordn erkent ook dat “availability trust remains” met self-hosting: een self-hosted coördinator vermijdt de operator-laag centralisatiezorg maar introduceert een single point of failure voor groepliveness. Marmot vermijdt dat single point door ordening aan MLS zelf over te laten (epochs en Commit-berichten verzorgen ordening binnen het protocol) en Welcome events te distribueren via NIP-59 gift wrap, ten koste van admin-side discipline: admins moeten wachten op relay-bevestiging van een Commit voordat ze de bijpassende Welcome verzenden, en clients moeten concurrent commits reconcileren wanneer relay-levering wedloopt met een state-transitie.

Het contrast is de moeite waard om aan te trekken voor elk team dat een privé-berichten-stack kiest. Marmot ruilt enige implementatiecomplexiteit voor een relay-agnostische deployment zonder een bevoorrechte actor in het pad. Cordn ruilt een single-point availability afhankelijkheid voor strakkere ordening en een eenvoudiger operationeel model. Beide projecten bouwen op MLS en gebruiken Nostr als identiteits- en transportlaag. De onenigheid gaat over waar de coördinatiekosten leven. De cordn-msg repos tonen een gestage commit-cadans met de coördinator-service geïmplementeerd via ContextVM en de MLS-laag gebouwd op ts-mls.

deepmarks: NIP-B0 bookmarks met curator-gemonetariseerde publicatie

deepmarks-public is een referentieclient voor de voorgestelde NIP-B0 bookmark-spec (kind 39701), met een drie-doos architectuur (curator, indexer, viewer) en een tier-systeem gefinancierd door direct-to-curator NIP-57 zaps. De client implementeert NIP-B0, NIP-07, NIP-46, NIP-57, NIP-44, NIP-98, NIP-65 en Blossom BUD-01 en BUD-04 voor bestandsopslag. Een 21.000-sat lifetime tier zet betalende lezers om in terugkerende zap-ontvangers voor de curator. De curator publiceert bookmark events, de indexer verrijkt ze met machine-leesbare metadata en de viewer rendert de feed; elke rol is een aparte deploybare service.

Releases

Amber v6.1.0 GA: versleutelde per-account back-up

Amber ging deze week van v6.1.0-pre3 naar GA v6.1.0. PR #444 levert versleutelde back-up en herstel voor de application permission database, en PR #446 splitst de back-up per account, zodat gebruikers met meerdere Nostr-identiteiten elke set app-grants onafhankelijk kunnen back-uppen en herstellen. Het PSBT signing-werk van vorige week is opgenomen in de GA-cut.

Citrine: per-relay abonnementen en onion-URL lekpreventie

Citrine, de on-device personal relay die meegeleverd wordt met Amethyst, leverde deze cyclus twee fixes. PR #157 schakelt over van één globaal abonnement naar per-relay getagde abonnementen, zodat twee bron-relays die een kinds: [1] filter delen niet langer botsen aan de aggregator-kant. PR #162 filtert onion relay-URLs wanneer de uitgaande Tor-proxy is uitgeschakeld, waarmee wordt voorkomen dat onion-adressen op het clearnet-routeringspad lekken.

Angor v0.2.27 en v0.2.28: relay-betrouwbaarheid en Boltz reconnect

Angor leverde v0.2.27 en v0.2.28. PR #874 verhelpt een relay-dedup bug waarbij slechts één relay tegelijk was verbonden, een regressie die stilletjes de betrouwbaarheid degradeerde voor projecten met meerdere relay endpoints. PR #876 voegt WebSocket reconnect-logica toe voor Boltz submarine-swap monitoring, zodat een korte disconnect niet langer een swap in onbekende status laat.

Nostrord v1.1.0: NIP-57 zaps en NIP-29 role-onderscheid

Nostrord bracht v1.1.0 uit met NIP-57 Lightning zap-ondersteuning voor berichten en profielen (PR #98) en een correct onderscheid in de activity feed tussen NIP-29 rolwijzigingen en member adds (PR #92), die eerder identiek renderden en verhulden wie was gepromoveerd versus wie was uitgenodigd.

ぬるぬる v1.5.x: SQLCipher MLS keystore en epoch catch-up

ぬるぬる (nurunuru, door tami1A84), een Japans-talige Nostr-client die MLS groepsberichten (kind 443) implementeert naast NIP-44, NIP-50 advanced search, NIP-55 en NIP-70, leverde deze week vijf releases. PR #184 introduceert SQLCipher-versleuteling voor de MLS keystore in de rust-engine laag. PR #187 en PR #188 breiden SQLCipher uit naar respectievelijk Android en iOS, met een legacy-plaintext purge-stap en CI-guards. PR #189 en PR #191 voegen MLS peer-epoch catch-up toe met een replay cache en een herstelbanner op beide platforms, zodat een client die achterloopt op group commits kan herstellen zonder de conversatie te verliezen. ぬるぬる is een Marmot-client gebouwd op mdk-core, mdk-sqlite-storage en mdk-storage-traits van marmot-protocol/mdk, zodat het SQLCipher en epoch catch-up werk landt binnen dezelfde MDK-runtime die White Noise gebruikt.

Bitcredit Core v0.5.10: Nostr-geworteld block propagatie-fix

Bitcredit Core bracht v0.5.10 uit met een fix voor een ontbrekend Nostr-node-id veld tijdens block propagatie, wat company-creation flows die identity upload bevatten brak. Bitcredit is een e-bill protocol dat Nostr-identiteiten gebruikt als vertrouwenswortel voor company- en bill propagatie-events.

Onuitgebrachte wijzigingen

Jumble opende PR #797 voor Google-login via de Pomegranate threshold signer, waarmee een gebruiker zijn Nostr-sleutel over meerdere partijen kan splitsen zodat geen enkele signer het volledige geheim in handen heeft. Dit is een betekenisvolle stap voorbij bunker of nsec-import flows: een gebruiker kan zijn account herstellen zelfs als één signer-partij is gecompromitteerd, zonder dat die partij ooit de volledige private key in handen heeft gehad.

Shopstr opende PR #492 waarmee een MCP (Model Context Protocol) server wordt geïnitialiseerd, met PR #494 die de ondersteunende infrastructuur bouwt (relay fetch, parsers, validatie, errors, dedup, audit logging) en PR #472 die een relay allowlist toevoegt voor de MCP relay manager. Dit maakt Shopstr de eerste Nostr-marktplaats die zichzelf blootstelt als MCP-server, zodat AI-agents NIP-99 listings kunnen doorbladeren en erop kunnen handelen als een gestructureerde tool.

Keydex, de Shamir-secret-sharing vault, opende een substantiële migratie in PR #226 waarbij custom kinds 1337-1345 worden verplaatst naar het 713-721 bereik, naast PR #239 die AEAD over Shamir shares toevoegt en PR #234 die migreert naar GF256 arithmetic. De kind-range migratie stemt Keydex af op de manier waarop de NIPs repo custom kinds toewijst, wegbewegend van een zelf-geclaimd bereik.

Mill (nostr-mill) is een nieuwe drop-in Nostr signer UI van OceanSlim (maintainer van de grain Go relay), geleverd als één-script-tag Web Component op npm en jsDelivr. Één <script> tag geeft een web-app alle zes gebruikelijke signer-ingangen achter een uniforme UI: NIP-07 browser-extensie, NIP-46 bunker (URL plakken of QR-koppeling met door de gebruiker specificeerbare relays, ongebruikelijk onder in-page bunker-integraties), NIP-55 Amber via Android intents, versleutelde nsec opgeslagen in sessionStorage via AES-256-GCM met PBKDF2, alleen-lezen npub en in-browser keypair-generatie. De component is themeable via 29 CSS custom properties scoped naar de Shadow DOM en biedt een kleine SemVer-getrackte API (MILL.open, mill:connected / mill:disconnected events, named theme exports). De motivatie van de maintainer is dat bunker login-flows één webapp tegelijk over Nostr opnieuw zijn geïmplementeerd. Consolideren op een gedeelde component laat clients convergeren op hoe signer UX zich moet gedragen en verandert optionele flows (zoals delegated-key login via threshold signers, spiegel van Wisp’s Pomegranate-gebaseerde Google login hierboven behandeld) in een herbruikbaar oppervlak dat elke app kan invoegen. Mill staat op npm v1.5.0, single-maintainer, alpha-stage, met grain als de geplande eerste integrator.

moStard, een Monero-first fork van noStrudel door roguehashrate, bereikte deze week v1.0.1 met een uitgeklede feature-set en een Monero-thema identiteit gelaagd op dezelfde Applesauce + worker-relay stack. Het werk van deze week bracht rendering voor Zapstore’s kind 32267 software-application events (embed cards in de timeline die app-naam, icoon, screenshots, platform, licentie en een launch-link naar zapstore.dev/apps/<d-tag> tonen), polls via kind 20 en kind 21, NIP-A3 Payment Targets-gebaseerd tippen met per-methode QR-codes, markdown-rendering in notes, GIF picker-ondersteuning voor externe GIF-toetsenborden en Amber signer pairing-fixes. Monero-framing strekt zich uit tot de tip-flow: NIP-A3 payto entries voor monero adressen krijgen first-class knoppen in dezelfde UI naast lightning en bitcoin. De client is single-maintainer en alpha-stage, maar het werk van 27 mei toont een bouwer die NIP-A3 uit de protocol-spec aankondigingen van deze week rechtstreeks in een shipping fork trekt binnen dagen.

NIP-updates en protocol-spec werk

Calendar NIP-stack: vier voorstellen van het Formstr-team

Ix2 (@geralt-debugs) opende vier gecoördineerde NIP PRs op 17 mei, allemaal verwijzend naar de calendar.formstr.app implementatie die al onder dezelfde auteur draait. PR #2350 stelt kind 84 voor als een gegeneraliseerd “participant self-removal” event: een getagde deelnemer op elk event kan een kind 84 publiceren die verwijst naar het origineel via e, a en k tags om opt-out te signaleren. Relays moeten valideren dat de kind 84 signer voorkomt in een p tag van het verwezen event voordat verwijdering wordt gehonoreerd, en een kind 5 deletion heeft altijd voorrang. De PR generaliseert een patroon dat eerder alleen werd beschreven binnen de NIP-52 calendar-context, zodat kind 84 de standaardmanier wordt voor niet-auteurs om zich terug te trekken uit elk participant-event.

PR #2351 is de basis van de calendar-stack: NIP-52E voor private calendar events (kinds 32678 time-based, 32681 day-event, 32123 private calendar list, 31926 busy list, 1052 gift wrap, 52 rumor) en NIP-52R voor terugkerende events. In de architecturale kern zit het view-key patroon: een willekeurig gegenereerd keypair versleutelt event content met NIP-44, en de geheime helft (bech32-gecodeerd als nsec) wordt gift-wrapped naar elke deelnemer. De signer bezit alleen de publieke d tag; al het andere leeft in versleutelde content. Het ontkoppelen van content-versleuteling van identiteit op deze manier betekent dat het bewerken van een event geen re-keying van ontvangers vereist. NIP-52R definieert twee optionele tags op bestaande kinds 31923 en 31922 om herhaling te declareren met behulp van kale RFC 5545 RRULE-waarden, waarbij D day-index optioneel wordt wanneer RRULE aanwezig is. Forward secrecy is expliciet afwezig: een gelekte view key onthult alle vorige en toekomstige versies van het event onder dezelfde d tag.

PR #2352 bouwt voort op NIP-52E met een gedecentraliseerde appointment-scheduling spec die de PR-beschrijving “a drop-in alternative to Calendly/Cal.com with no central intermediary” noemt. Kind 31927 adverteert een scheduling-pagina met versleutelde beschikbaarheidsvensters; kind 32680 is een host-side self-encrypted recovery record voor de view key; kinds 1057 en 1058 zijn de gift-wrapped booking request en response. Het slimme mechanisme: de booker genereert zowel de d tag als de view key voor het toekomstige private event voordat het verzoek wordt verzonden, zodat de booker de afspraak onmiddellijk aan zijn eigen kalender kan toevoegen met de juiste key, en de host hoeft nooit een key terug te round-trippen. Booking responses dragen een niet-versleutelde status tag op de outer wrap zodat relays kunnen filteren zonder te ontsleutelen.

Een referentie-implementatie is al live op calendar.formstr.app en als de Calendar Android-app op Zapstore. PR #2351 sluit PR #2027 ten gunste ervan, waarmee een eerder privé-calendar voorstel dat sinds het begin van het jaar openstond wordt geconsolideerd.

Payment Targets en Silent Payments

Nog twee NIP-voorstellen circuleerden deze week in kind:30023 long-form documenten.

Een Payment Targets voorstel (NIP-A3 / payto) definieert een replaceable kind 10133 event dat één of meer ["payto", "<type>", "<authority>"] tags draagt die mappen naar RFC 8905 payto: URIs. Ondersteunde types zijn onder meer bitcoin, lightning, ethereum, monero, nano, cashme, revolut en venmo. De bedoeling is om een multi-rail tip jar te standaardiseren die lud16-gebaseerde NIP-57 zaps aanvult (niet vervangt). Amethyst v1.11.0 is de eerste implementer; gemergde PRs #2953 en #3009 leveren het abonnements- en observatie-oppervlak, en PR #3011 sluit de UI voor PaymentTargetsEvent aan.

Twee concurrerende Silent Payments-voorstellen kwamen van verschillende auteurs. De eerste variant leidt BIP-352 silent-payment scan- en spendsleutels af van nsec via publieke additieve tweaks, zodat elke verzender een sp1q... adres kan construeren vanuit een npub zonder setup. De auteurwaarschuwing is expliciet in de spec: “bscan and bspend MUST be treated with exactly the same care as nsec,” omdat de scan-key de nsec onthult. Een tweede variant neemt de omgekeerde benadering en voegt een sp_address veld toe aan kind 0 profielmetadata dat een standaard BIP-352 silent-payment adres bevat waarvan de sleutels onafhankelijk worden gehouden van de Nostr-identiteit. Variant twee is structureel veiliger. Beide voorstellen trokken een doordachte reviewthread aan; erskingardner (Marmot-lead) plaatste een gedetailleerde opmerking op de trbouma gist die het voorstel volgt. Zijn centrale zorg is dat variant 1 de scan private key afleidt van nsec plus een publiek berekenbare tweak, wat betekent dat iedereen die de scan key houdt (inclusief een derde-partij scanning-service waaraan de gebruiker in de praktijk moet delegeren) de volledige nsec kan herstellen door die tweak af te trekken. Dezelfde key die een remote service inkomende betalingen voor je laat scannen, laat die service ook je identiteit en alle daaruit afgeleide fondsen stelen.

Aan de NIP-34 git-over-Nostr kant publiceerde hzrd149 2 patches op schemata. gitworkshop.dev zelf trok twee issue-reports: één die aangaf dat login-sessies verloren gaan bij page refresh bij gebruik van een NIP-46 remote signer, de andere die vroeg om onderscheidende link-styling in README previews.

Zes jaren Nostr mei-maanden

De laatste newsletter van mei 2026 stapt terug van de releases van de week om de maand mei door Nostr’s geschiedenis te lopen. Elk jaar had een ander zwaartepunt: 2021 was een enkele commit, 2022 was de vorming van de NIPs-repo zelf, 2023 was de protocol-spec explosie, 2024 was de consolidatiecyclus, 2025 was toen negentropy werd gemerged en Damus’s Notedeck graduated naar Beta, en 2026 is de maand die in dit en de drie vorige nummers wordt behandeld.

Mei 2021

Nostr was zes maanden oud. De enige Nostr-code leefde in fiatjaf/nostr en de hele maand produceerde precies één commit, maar die commit werd één van de meest gebruikte delen van het protocol. Op 22 mei herbestemde fiatjaf NIP-02 als de contact list NIP. Het commit-bericht luidt: “repurpose NIP-02 and add NIP authorship,” en de expliciete credit gaat naar PR #16 door arcbtc (Ben Arc van LNbits), geopend op 9 februari en gesloten de dag voordat fiatjaf het idee opnam in NIP-02. arcbtc’s pitch was klein: een kind voor “sending follower list to relays” dat “useful for restoring accounts and recommending public keys to follow” zou zijn. fiatjaf generaliseerde het tot één kind:3 event waarvan de tags drie doelen tegelijk dienen. Ze zijn een follow-lijst (de sociale graaf), een petname-opslag (lokale bijnamen voor vrienden) en een relay-aanbevelingsbron (welke relays een follow gebruikt). Hetzelfde event, replaceable per auteur, werd het canonieke antwoord op “wie volgt deze persoon,” “hoe noemen ze ze” en “waar lezen ze.” Elke client die in de volgende vijf jaar werd gebouwd leest kind:3. De conventie toegevoegd in dezelfde commit, dat elke NIP zijn auteur noemt, is de reden dat elke spec nu bylines heeft.

Mei 2022

De maand waarin de NIPs-repo een community-project werd. Op 1 mei migreerde fiatjaf de specs van fiatjaf/nostr naar een dedicated nostr-protocol/nips repo en op 2 mei voegde hij formele acceptatiecriteria toe. Twee dagen later opende Robert C. Martin (Uncle Bob) PR #1, de eerste externe pull request, waarin threading-conventies voor e en p tags werden voorgesteld. De PR was oorspronkelijk genummerd NIP-13, vervolgens hernoemd naar NIP-10 om ruimte te maken voor proof-of-work. Drie van de eerste zes NIPs zijn van Uncle Bob: NIP-10 (threading markers), NIP-14 (de Subject tag) en de commit van 21 mei die kind:1 vastlegde als de canonieke short text-note kind. Op 5 mei maakte William Casarin zijn eerste NIP-commits: NIP-13 Proof of Work en het kind:2 recommend-relay event. De volgende dag publiceerde fiatjaf NIP-07 window.nostr, twintig regels markdown die de browser-extensie signer-interface definieerden die vandaag nog wordt gebruikt. NIP-05’s CORS-waarschuwing door David A. Harding en NIP-01’s filter.limit landden dezelfde week. nostr-tools leverde zijn eerste browser-importable ESM build op 8 mei. Semisol schreef aan het einde van de maand NIP-15 (End Of Stored Events) en NIP-16 (event kind ranges), de documenten die nog steeds relay-syncsemantiek en de regelmatig-vs-replaceable-vs-ephemeral classificatie regeren.

Mei 2023

De protocol-spec explosie. Vierenzestig NIP PRs werden die maand geopend, met meerdere van de voorstellen die Nostr’s oppervlaktegebied voor de volgende twee jaar definieerden allemaal landend in 31 dagen, en de grootste financieringsaankondiging die Nostr ooit had ontvangen landde op 4 mei met de OpenSats $10 million grant van Jack Dorsey’s #startsmall, het geld dat elke Nostr-grant golf sindsdien heeft ondersteund. NIP-47 (Nostr Wallet Connect) werd gemerged op 2 mei, waarmee Alby’s wallet-connect spec in het hoofdprotocol werd gebracht. Twee dagen later stelde Vitor Pamplona NIP-53 Live Activities voor met kind:30311 rooms en kind:1311 chat-berichten, de basis voor elk Nostr livestreaming-oppervlak dat volgde. Pablo Fernandez opende NIP-84 Highlights op 5 mei en NIP-89 Recommended Application Handlers op 14 mei. v0l (Kieran Babich, Snort-auteur) stelde NIP-98 HTTP Auth voor op 8 mei, het authenticatieprimitief waar NIP-96 en Blossom later beide op vertrouwden. Jonathan Staab stelde NIP-32 Labels voor op 15 mei, en NIP-30 Custom Emoji werd dezelfde dag gemerged. Arthur Franca stelde NIP-96 HTTP File Storage Integration voor op 21 mei. Twee dagen later voegde Vitor zap splits toe aan NIP-57 en voegde verbiricha kind:30024 long-form drafts toe aan NIP-23, de spec die de basis werd voor moderne Nostr long-form auteurworkflows in Habla, YakiHonne en Highlighter. fiatjaf stelde NIP-29 Simple Groups voor op 28 mei, de eerste relay-managed group-spec die kind:9000 tot en met kind:9020 moderatie-events dekt. De maand eindigde met Paul Miller die de NIP-44 conversatie opende op 31 mei, een XChaCha20-gebaseerd versleuteld DM-ontwerp bedoeld om NIP-04 te vervangen. De client-kant bewoog net zo snel: Damus leverde NWC, zap pool en Pending Zaps over 10 mei tot en met 15 mei; Snort lanceerde zap pool en L402 paywalled media; Amethyst leverde gedurende de maand ongeveer dertig versioned releases, van v0.40.1 op 1 mei tot het v0.55.x bereik aan het einde van de maand, met zap splits in v0.45.0 en NIP-32 labels in v0.46.0; de Primal Android repo werd aangemaakt op 16 mei; rust-nostr v0.22.0 voegde NIP-47 en NIP-58 toe. Op 1 mei leverde strfry zijn negentropy-integratie, de eerste relay-implementatie van Doug Hoyte’s set-reconciliatieprotocol dat later NIP-77 zou worden. De maand eindigde met Forbes die op 30 mei een lange profiel van fiatjaf publiceerde, één van de eerste mainstream-pers deep dives over Nostr’s anonieme oprichter.

Mei 2024

De consolidatiecyclus. Minder flitsende voorstellen, meer leveringen. NIP-54 Decentralized Wikis werd gemerged op 2 mei met kind:30818 articles en case-normalized d tags. Drie dagen later werd NIP-56 uitgebreid zodat abuse reports digitale bedreigingen (malware, phishing) konden markeren naast content-only categorieën. Op 6 mei werden NIP-25 reacties vereenvoudigd om te stoppen met het opnemen van de hele reply-thread als e-tags. Arthur Franca stelde NIP-22 Comment voor op 12 mei, waarbij kind:1111 werd geïntroduceerd zodat antwoorden op niet-kind:1 events (articles, files, products) een gestructureerde manier krijgen om te threaden. Op 19 mei herzag fiatjaf NIP-46 om NIP-04 volledig te verlaten en al het bunker-verkeer om te schakelen naar NIP-44 versleuteling, de deprecatiebeweging die elke bunker-implementatie sindsdien vormgaf. Op 20 mei werd NIP-71 Video Events gemerged met kind:21 en kind:22, en NIP-10 voegde het optionele pubkey-argument toe op e tags zodat clients thread-auteurs kunnen oplossen zonder eerst het verwezen event op te halen. Kieran Walsh’s NIP-35 Torrents werd gemerged op 22 mei, en op 24 mei refereerde de NIPs README voor het eerst naar CIP-01 als een off-repo voorstel, wat het begin signaleerde van het “NIPs als één van meerdere voorstelvenues” patroon. Op 25 mei verwijderde een cleanup PR de aes-256-gcm tag uit NIP-71 voordat downstream-implementaties het bevroren. NIP-96 voegde list files en dropte de transform-vereiste op 27 mei. Op 28 mei stelde Jonathan Staab voor om de NIP-acceptatiedrempel te verhogen door minimaal twee interoperabele implementaties te vereisen voordat een draft kan gradueren. Client-kant: Damus taggede v1.7.2 en v1.8 plus een v1.9 met volledige NIP-10 marker-handling op 9-10 mei, landde NIP-98 authenticatie op pushmeldingen en leverde volledige NIP-10 marker-ondersteuning. Amethyst maakte NIP-17 de standaard DM-modus op 14 mei, bouwde NIP-65 outbox-model relay management uit, voegde NIP-96 server-selectie toe en leverde NIP-06 BIP-32/BIP-39 key derivation. Primal Android 0.99.2 op 10 mei voegde user tagging en externe-wallet NWC toe, gevolgd door 0.99.4. Pablo Fernandez landde een NDK optimistic-update cluster over 24-31 mei. Snort voegde NIP-96 server-selectie toe en cashu-ts scheidde zijn crypto-primitieven in @cashu/crypto.

Mei 2025

De maand waarin NIP-77 (Negentropy Syncing) werd gemerged op 27 mei, fiatjaf en Doug Hoyte’s spec voor het wire-protocol dat brute-force REQ-filters vervangt door logaritmische-kosten difference-computation. Dit was dezelfde negentropy die strfry twee jaar eerder had geleverd als een relay-side feature, nu geformaliseerd als een client-relay protocol, en de README-entry landde dezelfde dag. De week ervoor definieerde NIP-23 long-form hoe HTML-documenten zichzelf associëren met Nostr-entiteiten via een <link> tag op 24 mei, het canonieke-webkopie primitief. NIP-25 voegde reactie-target relay hints toe op 22 mei en dropte de emoji-to-like/dislike aanbeveling, waarbij emoji’s als afzonderlijke semantische eenheden werden behandeld. NIP-52 werd vereenvoudigd op 14 mei om zich te concentreren op de kinds die clients in productie leverden, de trim die de Formstr calendar-uitbreidingen van een jaar later schoner te enten maakte. Op 9 mei kwamen Follow Packs (kind 39089 gecureerde follow-lijsten) en Favorite Relays (een nieuwe replaceable-lijst onder NIP-51) op dezelfde dag in de README. De Marmot Protocol-arc was nog niet begonnen: alleen de whitenoise-rs repo bestond (eerste commit 9 september 2024), en mei 2025 was zijn Svelte+Tauri prototypefase, met de commit van 14 mei die Tauri-specifieke code verwijderde toen het project overging naar zijn huidige architectuur. De dedicated MDK Rust-core (12 september 2025), de Marmot spec repo (19 september 2025) en de Flutter UI (2 december 2025) kwamen allemaal later in het jaar. Aan de client-kant leverde Damus’s Notedeck v0.4.0 op 5 mei als de eerste Beta, met graduatie van Alpha met full-text search, de Dave AI-assistent, zaps via NWC, GIFs, user tagging en mute lists. Twee dagen later stak hodlbod’s Flotilla 1.0.0 de publieke-lanceringsgrens over als een NIP-29-gebaseerde group-chat client, naast Coracle 0.6.12, de eerste van zes Coracle-releases die tot 0.6.17 op 14 mei liepen. Amber v3.4.0 op 12 mei ging weg van gedeprecieerde Android Autofill en ClipboardManager APIs en migreerde van encrypted shared preferences naar DataStore. Primal Android 2.2.20 op 20 mei voegde de Redeem Code flow voor Primal Premium en een herontworpen image gallery toe. nak v0.14.0 op 21 mei sneed een minor van de canonieke CLI in dezelfde week als de Coracle-, Flotilla- en Notedeck-releases. OpenSats ontving zijn grootste niet-Bitcoin-treasury donatie tot nu toe toen de Reynolds Foundation $2 miljoen gaf op 22 mei.

Mei 2026

De maand behandeld in Newsletter #21, #22, #23 en dit nummer. De bepalende draad is MLS-op-Nostr die multi-client productie bereikt: MDK 0.8.0 leverde MIP-05 leaf-index primitieven en adresseerbare key packages, gevolgd door PR #306 die NIP-40 disappearing-message validatie toevoegt over iOS en Android via een gedeeld UniFFI-oppervlak. White Noise v2026.5.22+25 leverde iOS-push via een Notification Service Extension die MLS-ciphertext binnen het extensieproces ontsleutelt zodat de broker nooit plaintext ziet, en twee nieuwe Marmot-clients verschenen: Scramble (een .NET/Avalonia desktop- en Android-client met multi-device KeyPackage slots) en Cordn (een alternatieve MLS-architectuur met een per-groep coördinator via ContextVM). Angor migreerde zijn versleutelde berichten van NIP-04 naar NIP-44 in PR #860, waarmee de deprecatie-arc werd gesloten die opende met Paul Miller’s NIP-44 voorstel in mei 2023. Het Formstr-team opende de grootste gecoördineerde NIP-inzending in recent geheugen op 17 mei, met PR #2350 voor participant self-removal, PR #2351 voor private calendar events en herhaling (NIP-52E en NIP-52R), en PR #2352 voor gedecentraliseerde appointment-scheduling, allemaal met calendar.formstr.app die al de referentie-implementatie levert. Amethyst v1.11.0 renderde NIP-52 kalenders als een first-class timeline categorie en breidde on-chain Bitcoin zaps uit tot split-distributies. Een jaar nadat NIP-77 werd gemerged in mei 2025, leverden drie onafhankelijke implementaties negentropy-adoptie in hetzelfde venster: Notedeck PR #1459 sloot het aan op Damus’s desktop-client voor giftwrap en thread-backfill, Vector v0.4.0 gebruikte volledige-negentropy MLS sync als onderdeel van zijn fundamentele vector-core herschrijving naast één-klik Tor en een 21-tool MCP-agentoppervlak, en Citrine v3.0.0-pre1 voegde het toe aan de Android-native relay naast ingebouwde Tor en multi-relay aggregatie. Mostro v0.17.4 sloot de anti-abuse bond lus met Phase 3 slashed-bond uitbetalingen in PR #738, waarmee wordt afgedwongen wat het protocol eerder alleen dreigde. Drie jaar van “shall we replace NIP-04” naar “shall we replace NIP-44 with full MLS group state.”


Als je wilt discussiëren, DM ons op Nostr.