<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <updated>2026-01-28T17:30:53Z</updated>
  <generator>https://njump.me</generator>

  <title>Nostr notes by Nostr Compass</title>
  <author>
    <name>Nostr Compass</name>
  </author>
  <link rel="self" type="application/atom+xml" href="https://njump.me/npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923.rss" />
  <link href="https://njump.me/npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923" />
  <id>https://njump.me/npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923</id>
  <icon>https://nostrcompass.org/assets/images/profile.png</icon>
  <logo>https://nostrcompass.org/assets/images/profile.png</logo>




  <entry>
    <id>https://njump.me/nevent1qqsvr83sln74wc8r4m3wpqs6mlwg29e9qcuy9dms0n5wugd9getravszypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqh2x32s</id>
    
      <title type="html">A signing and messaging week across the Nostr stack. Amber v6.2.0 ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsvr83sln74wc8r4m3wpqs6mlwg29e9qcuy9dms0n5wugd9getravszypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqh2x32s" />
    <content type="html">
      A signing and messaging week across the Nostr stack. Amber v6.2.0 ships NIP-44 v3 encryption ahead of the spec. Vector v0.4.0 lands a two-month engine rewrite with Tor, multi-account support, NIP-46 remote signers, and a sender-controlled deletion model that diverges from NIP-17 and Marmot. Mostro lands the foundation for Cashu-settled escrow across eight PRs, wrapping CDK as a second backend alongside Lightning. NIP-F4 podcasts merges after 27 months of debate. fiatjaf opens a contested NIP-17 key-decoupling proposal. Amethyst lands NIP-32 hashtag labeling and a dedicated podcast screen. Read it: &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-06-03-newsletter/&#34;&gt;https://nostrcompass.org/en/newsletters/2026-06-03-newsletter/&lt;/a&gt;&lt;br/&gt;&lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nevent1qqsf33swdhuh5mzetc69q7uvc8w7khafvcn7mve6cs9k89t5w7fqz9spz3mhxue69uhhyetvv9ujuerpd46hxtnfduqs6amnwvaz7tmwdaejumr0dsq3vamnwvaz7tmjv4kxz7fwwpexjmtpdshxuet5qyg8wumn8ghj7mn0wd68ytnhd9hx2q3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq7jal5k&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;nevent1q…al5k&lt;/a&gt;&lt;/span&gt; &lt;/div&gt; &lt;p&gt;Amber 6.2.0 ships NIP-44 v3 encryption ahead of the spec. Vector 0.4.0 ships a two-month engine rewrite with Tor, multi-account support, NIP-46 remote signers, and a sender-controlled message-deletion model that intentionally diverges from NIP-17 and Marmot. Mostro lands the foundation for Cashu-settled escrow across eight PRs, wrapping the existing Cashu Development Kit as a second settlement backend alongside Lightning. NIP-F4 podcasts merges after 27 months of debate. fiatjaf opens a contested NIP-17 key-decoupling proposal that re-opens the bunker-versus-Marmot architectural argument. Amethyst lands NIP-32 hashtag labeling, a podcast screen, and onchain zaps across 52 unreleased PRs.&lt;/p&gt;

&lt;h2 id=&#34;top-stories-2&#34;&gt;Top stories&lt;/h2&gt;

&lt;h3 id=&#34;amber-6-2-0-nip-44-v3-encryption-shipped-2&#34;&gt;Amber 6.2.0: NIP-44 v3 encryption shipped&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/greenart7c3/Amber/releases/tag/v6.2.0&#34;&gt;Amber v6.2.0&lt;/a&gt;, released 2026-06-01, adds &lt;a href=&#34;https://github.com/greenart7c3/Amber/pull/448&#34;&gt;NIP-44 v3 encryption support&lt;/a&gt; with a dedicated approval screen, intent preview, bunker preview, history logging, and auto-reject for invalid requests. The release also registers &lt;a href=&#34;https://github.com/greenart7c3/Amber/commit/8b93340&#34;&gt;NIP-44 v3 ContentProvider authorities&lt;/a&gt; so other Android apps can request v3 encryption alongside the existing v2 path. NIP-44 itself is the versioned encrypted payload spec used by &lt;a href=&#34;/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; private DMs, NIP-46 bunker traffic, and other Nostr primitives; v3 in Amber is an opt-in alongside v2, signaled by a separate signer method so receiver-side clients can negotiate the algorithm explicitly. The corresponding NIPs PR has yet to land, so Amber is rolling out v3 ahead of the protocol consensus, with the wire format and ContentProvider authority registered for downstream client integration.&lt;/p&gt;

&lt;p&gt;NIP-46 sessions now auto-accept ping requests on connect, removing the prompt on the first round trip after pairing. The &lt;code&gt;sign_message&lt;/code&gt; signer method was removed entirely after being deprecated and unused.&lt;/p&gt;

&lt;p&gt;Because Amber is the dominant Android signer, every downstream client that wants v3 has to target Amber&amp;#39;s wire format until the NIPs PR lands. That gives Amber implicit say over the final v3 spec until the protocol catches up. The trade is real: v3 in production lets Amber gather implementation feedback for the eventual NIP, at the cost of a temporary single-implementation reference point that other clients now have to match.&lt;/p&gt;

&lt;h3 id=&#34;vector-0-4-0-multi-account-tor-remote-signers-and-ephemeral-message-deletion-2&#34;&gt;Vector 0.4.0: multi-account, Tor, remote signers, and ephemeral message deletion&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/VectorPrivacy/Vector/releases/tag/v0.4.0&#34;&gt;Vector v0.4.0&lt;/a&gt;, released 2026-05-26, follows a two-month ground-up rewrite of the underlying engine. The release adds optional Tor routing for all of Vector&amp;#39;s traffic with built-in bridges for censorship circumvention, multi-account support with an in-app switcher, and NIP-46 remote signer login by QR or pasted bunker URI. Custom emoji packs can be created, cropped, and shared across Vector and are interoperable with other Nostr clients. Chat wallpapers can be set per-DM with live blur and brightness sliders.&lt;/p&gt;

&lt;p&gt;Vector lets users delete a message for everyone in both DMs and group chats by keeping the ephemeral signing key used to send the original message. Standard &lt;a href=&#34;/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; and Marmot clients discard the ephemeral key after send, so they will not see Vector&amp;#39;s deletion event. This is a different deletion model, not a stronger one: the sender holds exclusive authority to issue the deletion, but at the cost of a long-lived per-message deletion secret. If the sender&amp;#39;s device is later compromised, the retained keys can be used to revoke earlier messages, which weakens the forward-secrecy posture compared to forgetting the ephemeral key after send. Vector also added mobile swipe-to-reply, long-press action menus, mini-profile previews on avatar tap, and an unread divider that marks where the user left off.&lt;/p&gt;

&lt;h3 id=&#34;mostro-cashu-escrow-integration-via-cdk-2&#34;&gt;Mostro: Cashu escrow integration via CDK&lt;/h3&gt;

&lt;p&gt;grunch landed eight PRs across MostroP2P this week integrating Cashu&amp;#39;s existing P2PK multisig primitives (NUT-10 and NUT-11) as a second settlement backend alongside Lightning on the Nostr-coordinated P2P Bitcoin exchange. The cryptographic primitives are Cashu&amp;#39;s; the work is integration scaffolding and a new escrow backend trait. &lt;a href=&#34;https://github.com/MostroP2P/mostro-core/releases/tag/v0.12.0&#34;&gt;Mostro core v0.12.0&lt;/a&gt;, released 2026-05-30, adds the &lt;a href=&#34;https://github.com/MostroP2P/mostro-core/pull/150&#34;&gt;protocol types for 2-of-3 multisig escrow&lt;/a&gt;, per-proof P_M signatures, and allows escrow events through response validation. The architecture is documented in &lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/756&#34;&gt;PR #756&lt;/a&gt; and uses per-order trade keys clarified in &lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/757&#34;&gt;PR #757&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The implementation rolled out across six follow-up PRs over a single day. &lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/758&#34;&gt;F2 (PR #758)&lt;/a&gt; added the config, escrow mode, and conditional boot. The next slice, &lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/760&#34;&gt;F3 (PR #760)&lt;/a&gt;, defined an &lt;code&gt;EscrowBackend&lt;/code&gt; trait with a Lightning implementation and a Cashu stub, letting Mostro switch settlement backends without changing the order state machine. &lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/759&#34;&gt;F4 (PR #759)&lt;/a&gt; wrapped &lt;a href=&#34;https://github.com/cashubtc/cdk&#34;&gt;CDK&lt;/a&gt; (the Cashu Development Kit) for mint and wallet operations. Database work in &lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/761&#34;&gt;F5 (PR #761)&lt;/a&gt; added compare-and-swap escrow locks and active-locked queries. &lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/762&#34;&gt;F6 (PR #762)&lt;/a&gt; built a containerized mint in a dedicated CI job for end-to-end escrow testing. The Mostro flow already uses NIP-59 gift-wrapped DMs for order coordination over the relay, so Cashu escrow slots in as a second settlement option alongside Lightning without touching the wire protocol.&lt;/p&gt;

&lt;h2 id=&#34;releases-2&#34;&gt;Releases&lt;/h2&gt;

&lt;h3 id=&#34;ngit-v2-5-0-grasp-fallback-and-lazy-git-fetches-2&#34;&gt;ngit v2.5.0: GRASP fallback and lazy git fetches&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/DanConwayDev/ngit-cli/releases/tag/v2.5.0&#34;&gt;ngit v2.5.0&lt;/a&gt; changes the default behavior of &lt;code&gt;git push pr/&amp;lt;branch&amp;gt;&lt;/code&gt; and &lt;code&gt;ngit send&lt;/code&gt; to produce a PR kind for new proposals when the repository has at least one GRASP server registered. Previously this only triggered for oversized commits over 60 KB or commits containing submodules. When a PR cannot be pushed to the repository&amp;#39;s GRASP servers, ngit now falls back to GRASP-06 routing through the declared servers. The &lt;code&gt;ngit send --git-server&lt;/code&gt; flag or &lt;code&gt;git push -o git-server=&amp;lt;url&amp;gt;&lt;/code&gt; lets contributors target a custom git URL or GRASP server explicitly.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ngit init&lt;/code&gt; republishes now preserve unknown tags from existing announcements, so tags added by a future ngit version or third-party tool survive republish. A yellow warning lists the carried-over tags, and &lt;code&gt;--clean&lt;/code&gt; removes them on demand. &lt;code&gt;ngit pr apply&lt;/code&gt;, &lt;code&gt;ngit pr checkout&lt;/code&gt;, and &lt;code&gt;ngit pr list&lt;/code&gt; consult git servers lazily and share a single fetch helper, so checkout no longer fetches unconditionally when the commit is already local. &lt;code&gt;ngit pr checkout&lt;/code&gt; also tries submitter-supplied clone URLs from the PR event as a fallback when the repo&amp;#39;s declared git servers don&amp;#39;t carry the PR tip, matching the existing behaviour in &lt;code&gt;ngit pr apply&lt;/code&gt;. ngit is the reference &lt;a href=&#34;/en/topics/nip-34/&#34;&gt;NIP-34&lt;/a&gt; implementation for git collaboration over Nostr, and v2.5.0 makes GRASP the first-class path for new contributors.&lt;/p&gt;

&lt;h3 id=&#34;jumble-v26-5-7-exif-stripping-and-validated-zap-counts-2&#34;&gt;Jumble v26.5.7: EXIF stripping and validated zap counts&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/CodyTseng/jumble/releases/tag/v26.5.7&#34;&gt;Jumble v26.5.7&lt;/a&gt; adds two changes that affect user privacy and data integrity directly. EXIF location and camera identifiers are now stripped from image uploads before they leave the client, closing a long-standing metadata-leak surface that affected every image posted from Jumble. Zap counts are now computed only from cryptographically validated receipts, fixing inflated counts from malformed zap events that had let attackers exaggerate zap totals on notes. The release also adds sender-identity verification for &lt;a href=&#34;/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; DMs, closing a spoofing surface where a sender could forge their &lt;code&gt;pubkey&lt;/code&gt; in the seal.&lt;/p&gt;

&lt;h3 id=&#34;nostr-calendar-v1-6-0-rsvp-and-duplicate-participant-handling-2&#34;&gt;nostr-calendar v1.6.0: RSVP and duplicate participant handling&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.6.0&#34;&gt;nostr-calendar v1.6.0&lt;/a&gt; lands Formstr&amp;#39;s RSVP flow (&lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar/pull/169&#34;&gt;PR #169&lt;/a&gt;) and prevents duplicate participants in event invites (&lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar/pull/168&#34;&gt;PR #168&lt;/a&gt;). The &lt;code&gt;waitForAll&lt;/code&gt; option in the publish function now defaults to false so the UI does not block on slow relays (&lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar/pull/170&#34;&gt;PR #170&lt;/a&gt;). &lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar/pull/157&#34;&gt;PR #157&lt;/a&gt; shipped Formstr&amp;#39;s two NIP proposal drafts for appointment scheduling and reservations.&lt;/p&gt;

&lt;h3 id=&#34;sprout-0-3-6-sprout-mesh-llm-and-channel-sections-2&#34;&gt;Sprout 0.3.6: Sprout × mesh-llm and channel sections&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/block/sprout/releases/tag/v0.3.6&#34;&gt;Sprout v0.3.6&lt;/a&gt; is the headline of a six-release run from v0.3.1 through v0.3.6 this week. In-process Sprout × mesh-llm integration lands in &lt;a href=&#34;https://github.com/block/sprout/pull/798&#34;&gt;PR #798&lt;/a&gt;, letting Sprout serve and consume mesh-llm nodes through relay admission. User-defined channel sections sync across devices via Nostr in &lt;a href=&#34;https://github.com/block/sprout/pull/792&#34;&gt;PR #792&lt;/a&gt;, and channel sections come to mobile with relay sync in &lt;a href=&#34;https://github.com/block/sprout/pull/800&#34;&gt;PR #800&lt;/a&gt;. Thread-aware notifications with mutable follow and mute controls arrive in &lt;a href=&#34;https://github.com/block/sprout/pull/761&#34;&gt;PR #761&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Arbitrary file-type attachments with download cards arrived in &lt;a href=&#34;https://github.com/block/sprout/pull/810&#34;&gt;PR #810&lt;/a&gt;, expanding Sprout beyond image-only attachments. Mobile gained a Pulse social feed tab (&lt;a href=&#34;https://github.com/block/sprout/pull/772&#34;&gt;PR #772&lt;/a&gt;) and Pulse polish across feed, compose, and filter surfaces (&lt;a href=&#34;https://github.com/block/sprout/pull/796&#34;&gt;PR #796&lt;/a&gt;).&lt;/p&gt;

&lt;h3 id=&#34;nostrbotkit-v0-5-0-marmot-group-chat-in-a-rust-bot-framework-2&#34;&gt;NostrBotKit v0.5.0: Marmot group chat in a Rust bot framework&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://codeberg.org/Tuxor/NostrBotKit/src/branch/main/CHANGELOG.md&#34;&gt;NostrBotKit v0.5.0&lt;/a&gt;, released 2026-05-24 on Codeberg, adds &lt;a href=&#34;/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt; (MLS-over-Nostr, &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2014&#34;&gt;NIP-104&lt;/a&gt;) support to the self-hosted Rust bot framework. When &lt;code&gt;marmot: true&lt;/code&gt; is set, the bot publishes its MLS key packages (kind 443, 30443, 10051), accepts group invitations automatically, and listens for messages in joined groups. Two new command types, &lt;code&gt;dm_marmot&lt;/code&gt; and &lt;code&gt;dm_marmot_npub&lt;/code&gt;, let bots send messages into named Marmot groups or 1:1 Marmot chats via cron jobs or webhooks. To prevent feedback loops with other bots, NostrBotKit bots only respond to messages explicitly addressed to them via &lt;code&gt;/command&lt;/code&gt; or &lt;code&gt;@botname/command&lt;/code&gt;. Encrypted attachments using MIP-04 are auto-decrypted and re-uploaded via Blossom or NIP-96, and the MLS state database is encrypted with a key derived from the bot&amp;#39;s private key. NostrBotKit is the first Rust framework to ship NIP-104 bot support, opening Marmot-encrypted bot deployment to a different operator profile than the existing TypeScript path.&lt;/p&gt;

&lt;h3 id=&#34;noscrypt-v0-1-14-signed-cryptography-library-release-2&#34;&gt;noscrypt v0.1.14: signed cryptography library release&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/vnuge/noscrypt/releases/tag/v0.1.14&#34;&gt;noscrypt v0.1.14&lt;/a&gt; is a security release of the C cryptography library used by several Nostr clients for secp256k1, NIP-04, and NIP-44 primitives. The release ships with &lt;a href=&#34;https://www.vaughnnugent.com/resources/software/modules/noscrypt&#34;&gt;PGP-signed downloads&lt;/a&gt; verifiable against the maintainer&amp;#39;s public key. Downstream clients that bundle noscrypt should validate the signature before integrating.&lt;/p&gt;

&lt;h3 id=&#34;chama-v1-3-0-new-nostr-native-p2p-escrow-with-fedimint-2&#34;&gt;Chama v1.3.0: new Nostr-native P2P escrow with Fedimint&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/jesuspirate/chama/releases/tag/v1.3.0&#34;&gt;Chama v1.3.0&lt;/a&gt;, released 2026-06-01, is the headline of a four-release run for a new Nostr-native P2P escrow client that uses Fedimint ecash and 2-of-3 Shamir secret sharing for settlement. The project ships at &lt;a href=&#34;https://getchama.app&#34;&gt;getchama.app&lt;/a&gt; and runs without a server. v1.3.0 introduces &amp;#34;heal that sticks&amp;#34; (successful re-broadcast and trade healing that survives session restarts) and pay-rail matching, where US-leaning Chamas surface US payment rails first. Multi-unit storefront groundwork landed across &lt;a href=&#34;https://github.com/jesuspirate/chama/releases/tag/v1.2.11&#34;&gt;v1.2.11&lt;/a&gt; (multi-unit schema) and &lt;a href=&#34;https://github.com/jesuspirate/chama/releases/tag/v1.2.12&#34;&gt;v1.2.12&lt;/a&gt; (storefront stock accountant &#43; native Fedimint bridge recovery hardening). Chama joins Mostro and Shopstr in the Nostr marketplace category, distinguished by its serverless architecture and Fedimint-based escrow settlement.&lt;/p&gt;

&lt;h2 id=&#34;unreleased-changes-2&#34;&gt;Unreleased changes&lt;/h2&gt;

&lt;h3 id=&#34;amethyst-nip-32-hashtag-labeling-podcast-screen-music-tracks-2&#34;&gt;Amethyst: NIP-32 hashtag labeling, podcast screen, music tracks&lt;/h3&gt;

&lt;p&gt;Amethyst merged 52 PRs and 411 commits this week without cutting a release tag. The largest functional addition is &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/3111&#34;&gt;PR #3111&lt;/a&gt;, which implements &lt;a href=&#34;/en/topics/nip-32/&#34;&gt;NIP-32&lt;/a&gt; hashtag labeling and a label-based hashtag feed using kind 1985 events with &lt;code&gt;L&lt;/code&gt; namespace and &lt;code&gt;l&lt;/code&gt; label tags. This replaces the brittle text-match &lt;code&gt;#tag&lt;/code&gt; mechanism with a labeler-based discovery model where users can follow specific labeler npubs the way they follow content creators. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/3105&#34;&gt;PR #3105&lt;/a&gt; adds a dedicated podcast screen with episode list and inline player, landing within days of the &lt;a href=&#34;/en/topics/nip-f4/&#34;&gt;NIP-F4&lt;/a&gt; podcast spec merge. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/3071&#34;&gt;PR #3071&lt;/a&gt; adds a Software Apps feed with follow-list filtering, and &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/3067&#34;&gt;PR #3067&lt;/a&gt; adds music tracks and playlists support via &lt;a href=&#34;/en/topics/nip-51/&#34;&gt;NIP-51&lt;/a&gt; sets.&lt;/p&gt;

&lt;p&gt;Ephemeral signers for anonymous post uploads land in &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/3123&#34;&gt;PR #3123&lt;/a&gt;, letting users post anonymously without exposing their identity key to upload services. A Tor self-heal watchdog with integration tests against Arti v2.3.0 arrives in &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/3053&#34;&gt;PR #3053&lt;/a&gt;, strengthening Amethyst&amp;#39;s Tor routing during transient network outages. Onchain zaps and a NIP-05 filter for returning users from Gemini land in &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/3052&#34;&gt;PR #3052&lt;/a&gt;, broadening the zap surface beyond Lightning to onchain Bitcoin payments.&lt;/p&gt;

&lt;h3 id=&#34;shopstr-opengraph-preview-url-validation-2&#34;&gt;Shopstr: OpenGraph preview URL validation&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/shopstr-eng/shopstr/pull/504&#34;&gt;PR #504&lt;/a&gt; validates OpenGraph preview URLs before rendering them in marketplace listings, closing a potential XSS surface where malicious sellers could embed scripted content via crafted OG metadata. Shopstr-hosted shops display OG previews for external links, and unvalidated URLs let an attacker inject arbitrary content into the shop UI.&lt;/p&gt;

&lt;h2 id=&#34;nip-updates-and-protocol-spec-work-2&#34;&gt;NIP updates and protocol spec work&lt;/h2&gt;

&lt;h3 id=&#34;nip-f4-podcasts-merged-after-two-years-2&#34;&gt;NIP-F4 (Podcasts) merged after two years&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1093&#34;&gt;PR #1093&lt;/a&gt; merged on 2026-05-28, two years and three months after fiatjaf opened the original draft. NIP-F4 defines podcast episodes as kind 54 events with &lt;code&gt;imeta&lt;/code&gt; tags for audio file metadata (URL, mime type, language ISO code, fallback URLs, NIP-96 service flag, bitrate, duration), a &lt;code&gt;title&lt;/code&gt; tag, optional &lt;code&gt;image&lt;/code&gt; and &lt;code&gt;description&lt;/code&gt; tags, and &lt;code&gt;t&lt;/code&gt; tags for topic labels. The spec deliberately keeps RSS as the source of truth: episodes can carry an &lt;code&gt;i&lt;/code&gt; tag referencing the RSS podcast GUID, letting Nostr clients link to existing podcast feeds without duplicating audio hosting. The long debate in the PR thread (with podcast-namespace co-author Dave Jones, Alex Gleason, and Mike Terenzio) settled on a coexistence model where Nostr provides the social layer on top of RSS while RSS keeps the distribution layer. Amethyst&amp;#39;s &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/3105&#34;&gt;PR #3105&lt;/a&gt; podcast screen lands within days of the spec merge, and Jumble&amp;#39;s GIF picker work also includes early podcast-attachment scaffolding.&lt;/p&gt;

&lt;h3 id=&#34;nip-17-key-decoupling-pr-2361-2&#34;&gt;NIP-17 key decoupling (PR #2361)&lt;/h3&gt;

&lt;p&gt;fiatjaf opened &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2361&#34;&gt;PR #2361&lt;/a&gt; on 2026-06-01, proposing that NIP-17 separate the identity key from the encryption key. Recipients advertise their encryption key in a new kind 10044 event, and senders use that advertised key (when present) for the gift-wrap inner seal, falling back to the recipient&amp;#39;s identity key only when the advertisement is absent. The PR also adds an &lt;code&gt;n&lt;/code&gt; tag to the seal carrying the sender&amp;#39;s encryption pubkey, so receivers can derive the correct conversation key without trial-decryption against every retired key. The stated motivation is bunker UX: under the current design, a bunker user must round-trip every received DM through the signer to decrypt, since the encryption key is the signer-held identity key. Decoupling lets the client hold the encryption key locally while keeping the identity key in the bunker for signatures.&lt;/p&gt;

&lt;p&gt;The proposal drew the week&amp;#39;s most contentious review. Cody Tseng (Jumble) supports it as the easiest path to cross-client DM interop. Vitor Pamplona (Amethyst) objects on two grounds: it adds a new long-lived decryption secret outside the bunker, and clients that don&amp;#39;t ship it will silently fail to decrypt messages from clients that do, with no degradation path because the break is at the seal layer. Pamplona argues the problem is already solved correctly by &lt;a href=&#34;/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt;&amp;#39;s key packages and epoch rotation, and that retrofitting key separation into the base NIP-17 spec creates the kind of interop failure that Marmot took two years to engineer around. fiatjaf&amp;#39;s counter has three parts: decoupling is optional per-recipient, the n-tag fix addresses the trial-decryption concern, and the alternative is keeping bunker UX broken while Telegram eats the messaging use case. The thread remains open without a merge decision and is the most-watched NIP discussion of the quarter.&lt;/p&gt;

&lt;h3 id=&#34;nip-silent-payments-payment-flow-pr-2362-2&#34;&gt;NIP-Silent Payments payment flow (PR #2362)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2362&#34;&gt;silentius-satoshi opened PR #2362&lt;/a&gt; on 2026-06-01 as a companion to the broader &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2355&#34;&gt;Nostr Silent Payments NIP draft (PR #2355)&lt;/a&gt;. The payment-flow NIP defines kind 8352 for silent payment receipt notifications (delivered via &lt;a href=&#34;/en/topics/nip-59/&#34;&gt;NIP-59&lt;/a&gt; gift wrap so the receipt link is not publicly observable) and kind 10353 for an encrypted UTXO cache that syncs across devices for the same Silent Payments wallet. The pair together let a payer signal a payment to a Silent Payments address using Nostr-native primitives without exposing the on-chain link on the open relay layer.&lt;/p&gt;

&lt;h3 id=&#34;nip-pip-perfect-ip-packets-pr-2364-2&#34;&gt;NIP-PIP Perfect IP Packets (PR #2364)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2364&#34;&gt;RandyMcMillan opened PR #2364&lt;/a&gt; on 2026-06-01 as a draft. It introduces a packet-tree transport with three new addressable kinds: 39078 carries the manifest, 39079 carries individual slices, and 39080 carries repair requests. The spec defines a wire format where large files are broken into addressable slices, with manifests describing the slice tree and repair requests letting receivers ask for missing slices. Early-draft status applies, and the proposal has not yet attracted maintainer review.&lt;/p&gt;

&lt;h3 id=&#34;nip-29-audio-video-live-spaces-pr-2238-2&#34;&gt;NIP-29 audio/video live spaces (PR #2238)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2238&#34;&gt;PR #2238&lt;/a&gt; merged on 2026-05-28, extending &lt;a href=&#34;/en/topics/nip-29/&#34;&gt;NIP-29&lt;/a&gt; relay-based groups with audio and video live-space support. Groups can now reference an active live-space session, letting &lt;a href=&#34;/en/topics/nip-53/&#34;&gt;NIP-53&lt;/a&gt;-style live activity events anchor in a NIP-29 group context.&lt;/p&gt;

&lt;h3 id=&#34;nip-71-video-multiple-audio-tracks-pr-2255-2&#34;&gt;NIP-71 video multiple audio tracks (PR #2255)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2255&#34;&gt;PR #2255&lt;/a&gt; merged on 2026-05-28, adding audio-track &lt;code&gt;imeta&lt;/code&gt; tags to NIP-71 video events. The new format carries URL, hash, mime type, language tag (with ISO-639-1 plus original-version flag), fallback URLs, NIP-96 service signal, bitrate, and duration. This enables audio-only streaming (video podcasts), resolution switching with stable audio, multiple language tracks, and reduced storage when servers don&amp;#39;t embed audio directly into video files. Clients should check for audio-track availability before assuming single-track behavior.&lt;/p&gt;

&lt;h3 id=&#34;nip-59-ephemeral-gift-wrap-pr-2245-2&#34;&gt;NIP-59 ephemeral gift wrap (PR #2245)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2245&#34;&gt;PR #2245&lt;/a&gt; merged on 2026-05-28, adding kind 21059 as an ephemeral counterpart to the existing kind 1059 gift wrap. The semantics match the standard NIP-59 wrap but follow ephemeral event rules per NIP-01 (relays drop them after broadcast and do not persist them). This lets apps choose persistence based on requirements: typing indicators and presence pings benefit from ephemeral, while DM history needs persistence.&lt;/p&gt;

&lt;h3 id=&#34;nip-78-application-specific-kind-pr-2292-2&#34;&gt;NIP-78 application-specific kind (PR #2292)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2292&#34;&gt;PR #2292&lt;/a&gt; merged on 2026-05-28, reclassifying NIP-78 application-specific data as a normal addressable kind, dropping the previous separate range. This simplifies replaceability semantics and aligns NIP-78 with the addressable event model used by other application-state NIPs.&lt;/p&gt;

&lt;h3 id=&#34;nip-85-clarifications-pr-2304-2&#34;&gt;NIP-85 clarifications (PR #2304)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2304&#34;&gt;PR #2304&lt;/a&gt; merged on 2026-05-28 with small improvements to the language around multiple keys and relays per service provider in &lt;a href=&#34;/en/topics/nip-85/&#34;&gt;NIP-85&lt;/a&gt; Trusted Assertions, clarifying the operator-key-rotation path for relay assertion services.&lt;/p&gt;

&lt;h3 id=&#34;nip-01-relay-connection-management-one-liner-pr-2307-2&#34;&gt;NIP-01 relay connection management one-liner (PR #2307)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2307&#34;&gt;PR #2307&lt;/a&gt; merged on 2026-05-28, adding a single sentence to NIP-01 about how clients should handle relay connection lifetimes. The fix addresses a long-running gap where clients differed on whether to keep WebSocket connections open after fetching, leading to silent message loss on relays that drop idle connections.&lt;/p&gt;

&lt;h3 id=&#34;nip-c7-kind-9-chat-constraint-pr-2310-2&#34;&gt;NIP-C7 kind 9 chat constraint (PR #2310)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2310&#34;&gt;PR #2310&lt;/a&gt; merged on 2026-05-28, restricting NIP-C7 chat views to kind 9 messages only. This separates ephemeral chat from kind 1 timeline posts in clients that implement NIP-C7-style chat surfaces.&lt;/p&gt;

&lt;h3 id=&#34;nip-55-simplification-pr-2363-2&#34;&gt;NIP-55 simplification (PR #2363)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2363&#34;&gt;PR #2363&lt;/a&gt; by greenart7c3, opened 2026-06-01, simplifies the Android signer application spec. Vitor Pamplona signed off as &amp;#34;Looks good&amp;#34; and fiatjaf asked whether it&amp;#39;s ready to merge. The change paves the way for the NIP-44 v3 ContentProvider authority registration that Amber shipped this week.&lt;/p&gt;

&lt;h3 id=&#34;nip-44-v3-amber-implementation-ahead-of-spec-2&#34;&gt;NIP-44 v3 (Amber implementation ahead of spec)&lt;/h3&gt;

&lt;p&gt;Amber shipped NIP-44 v3 in v6.2.0 with eight commits implementing the encryption upgrade and ContentProvider authority registration, but the NIPs-repo spec PR has yet to land. NIP-44 itself defines a versioned encrypted payload format used inside signed events; the existing v2 (in production since 2024) uses secp256k1 ECDH, HKDF, padding, ChaCha20, HMAC-SHA256, and base64. The v3 wire format adds a new version byte (0x03) ahead of the nonce, allowing receiver clients to negotiate the algorithm explicitly. Amber&amp;#39;s implementation includes auto-reject for invalid v3 requests, a dedicated approval screen distinct from v2 approvals, and per-direction plaintext logging for the history. Until the NIPs PR merges, v3 stands as an Amber-specific extension. Treat it as a forward-looking signal, not a stable protocol-wide signaling.&lt;/p&gt;

&lt;h2 id=&#34;nip-deep-dive-nip-32-labeling-2&#34;&gt;NIP deep dive: NIP-32 (Labeling)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&#34;/en/topics/nip-32/&#34;&gt;NIP-32&lt;/a&gt; defines a structured way for any Nostr actor to label events, pubkeys, relays, URLs, or topics using addressable kind 1985 events with a namespaced label vocabulary. The spec introduces two new tags: &lt;code&gt;L&lt;/code&gt; denotes a label namespace, and &lt;code&gt;l&lt;/code&gt; denotes a label within that namespace. Label-target tags (&lt;code&gt;e&lt;/code&gt;, &lt;code&gt;p&lt;/code&gt;, &lt;code&gt;a&lt;/code&gt;, &lt;code&gt;r&lt;/code&gt;, or &lt;code&gt;t&lt;/code&gt;) specify what is being labeled. The namespace requirement keeps multiple label systems from colliding: a &lt;code&gt;spam&lt;/code&gt; label in &lt;code&gt;nip28.moderation&lt;/code&gt; carries different semantics from a &lt;code&gt;spam&lt;/code&gt; label in &lt;code&gt;relay-report&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The design choice that makes NIP-32 useful beyond moderation is that labels are assertions, not protocol-level truth. A kind 1985 event says only that a particular pubkey labeled a particular target in a particular namespace. The trust model is delegated to the client: each client picks which labelers to honor, which namespaces to read, and what UI affordance to give each label. The same primitive carries content warnings, license assignment, ISO-639-1 language tags on kind 1 notes, ISO-3166-2 geographic tags, content classification, distributed moderation suggestions, and reputation scores.&lt;/p&gt;

&lt;p&gt;Amethyst&amp;#39;s &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/3111&#34;&gt;PR #3111&lt;/a&gt; this week is the largest deployment so far. It adds hashtag labeling through NIP-32 and a label-based hashtag feed, letting users browse by labels assigned by trusted labelers. The earlier &lt;code&gt;#tag&lt;/code&gt; text-match mechanism that originally drove hashtag discovery on Nostr remains as a fallback for un-labeled notes. The hashtag-as-label model means the same note can be discoverable under multiple labels assigned by different labelers, and users can mute or boost specific labelers without affecting the underlying notes.&lt;/p&gt;

&lt;p&gt;Self-labeling is also supported. An author can attach &lt;code&gt;L&lt;/code&gt; and &lt;code&gt;l&lt;/code&gt; tags directly to their own kind 1 notes to declare language, location, and topic. A note tagged &lt;code&gt;[&amp;#34;L&amp;#34;, &amp;#34;ISO-639-1&amp;#34;], [&amp;#34;l&amp;#34;, &amp;#34;en&amp;#34;, &amp;#34;ISO-639-1&amp;#34;]&lt;/code&gt; self-identifies as English and can be filtered by language-aware clients without third-party labeling infrastructure.&lt;/p&gt;

&lt;p&gt;Example NIP-32 label event tagging a kind 1 note as English and assigning it a moderation tag:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;a5f87fe2d4c8b9a0e3f1c4d5e6a7b8c9d0e1f2a3b4c5d6e7f8091a2b3c4d5e6f&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1748908800,
  &amp;#34;kind&amp;#34;: 1985,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;L&amp;#34;, &amp;#34;ISO-639-1&amp;#34;],
    [&amp;#34;l&amp;#34;, &amp;#34;en&amp;#34;, &amp;#34;ISO-639-1&amp;#34;],
    [&amp;#34;L&amp;#34;, &amp;#34;nip28.moderation&amp;#34;],
    [&amp;#34;l&amp;#34;, &amp;#34;approve&amp;#34;, &amp;#34;nip28.moderation&amp;#34;],
    [&amp;#34;e&amp;#34;, &amp;#34;8b39f4e5d6c7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3&amp;#34;, &amp;#34;wss://relay.example.com&amp;#34;]
  ],
  &amp;#34;content&amp;#34;: &amp;#34;Labeled as English-language content approved for NIP-28 chat moderation&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;f1e2d3c4b5a6978869504132c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f80192a3b4c5d6e7f80192a3b4c5d6e7f80192a3b4c5d6e7f80192a3b4c5d6e7f80192a3b4c5&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The Amethyst rollout combined with the recent Trusted Relay Assertions work suggests NIP-32 is becoming the standard substrate for any &amp;#34;user-driven assertion about a target&amp;#34; pattern on Nostr. The next test is whether labelers themselves develop trust hierarchies: whether users will follow specific labeler npubs the way they follow content creators.&lt;/p&gt;

&lt;h2 id=&#34;nip-deep-dive-nip-f4-podcasts-2&#34;&gt;NIP deep dive: NIP-F4 (Podcasts)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/F4.md&#34;&gt;NIP-F4&lt;/a&gt; merged this week, two years and three months after fiatjaf opened the original draft (PR #1093). Its &amp;#34;F&amp;#34; prefix marks an experimental NIP awaiting a numeric assignment, alongside other hex-prefixed entries like NIP-5A and NIP-C7. NIP-F4 defines how podcasts publish episodes and metadata as Nostr events while keeping RSS as a complementary layer for the audio file itself.&lt;/p&gt;

&lt;p&gt;The core architectural choice is that each podcast is its own Nostr keypair. The spec opens with this directly: &amp;#34;each podcast is its own Nostr keypair&amp;#34;. This lets podcasts combine their podcasting presence with a normal kind 0 / kind 1 microblogging presence, and lets a podcast change ownership over time through key handover or MuSig2-style shared signing. Four event kinds carry the publishing layer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;kind:10154&lt;/code&gt;&lt;/strong&gt;: replaceable podcast metadata. Carries &lt;code&gt;title&lt;/code&gt;, &lt;code&gt;image&lt;/code&gt;, &lt;code&gt;description&lt;/code&gt;, optional &lt;code&gt;website&lt;/code&gt; tags, and optional &lt;code&gt;p&lt;/code&gt; tags marking authors with a &lt;code&gt;role&lt;/code&gt; of &lt;code&gt;host&lt;/code&gt;, &lt;code&gt;cohost&lt;/code&gt;, or &lt;code&gt;editor&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;kind:10164&lt;/code&gt;&lt;/strong&gt;: author counter-claim. The example in the spec uses kind &lt;code&gt;10064&lt;/code&gt; (a typo open for correction), but the heading and surrounding text identify it as &lt;code&gt;kind:10164&lt;/code&gt;. Users list the podcast pubkeys they author, so that clients can verify the &lt;code&gt;p&lt;/code&gt; tags in &lt;code&gt;kind:10154&lt;/code&gt; against an equivalent claim from the supposed author. Without this, a podcast could falsely tag anyone as a host.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;kind:54&lt;/code&gt;&lt;/strong&gt;: episode events authored by the podcast pubkey directly. Tags include &lt;code&gt;title&lt;/code&gt;, optional &lt;code&gt;image&lt;/code&gt;, &lt;code&gt;description&lt;/code&gt;, and one or more &lt;code&gt;audio&lt;/code&gt; tags. Each &lt;code&gt;audio&lt;/code&gt; tag is &lt;code&gt;[&amp;#34;audio&amp;#34;, &amp;#34;&amp;lt;audio-url&amp;gt;&amp;#34;, &amp;#34;&amp;lt;optional_media_type&amp;gt;&amp;#34;]&lt;/code&gt;. The spec notes &amp;#34;other important fields to be specified here later after further discovery&amp;#34;, and the merged form is deliberately minimal.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;kind:10054&lt;/code&gt;&lt;/strong&gt;: a &lt;a href=&#34;/en/topics/nip-51/&#34;&gt;NIP-51&lt;/a&gt;-style favorite-podcasts list, letting users mark which podcasts they follow.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The thread debate around the merge involved Podcasting 2.0 co-author &lt;a href=&#34;https://github.com/daveajones&#34;&gt;Dave Jones&lt;/a&gt;, &lt;a href=&#34;https://github.com/alexgleason&#34;&gt;Alex Gleason&lt;/a&gt;, &lt;a href=&#34;https://github.com/mterenzio&#34;&gt;Mike Terenzio&lt;/a&gt;, &lt;a href=&#34;https://github.com/pablof7z&#34;&gt;Pablo F7z&lt;/a&gt;, and &lt;a href=&#34;https://github.com/staab&#34;&gt;staab&lt;/a&gt;. Jones argued strongly against any attempt to replace RSS: &amp;#34;It&amp;#39;s been tried many times and always fails&amp;#34;, citing JSONfeed, XMPP, AMP, Twitter&amp;#39;s API, and Spotify&amp;#39;s failed migration. Terenzio reframed the proposal as a social layer on top of RSS, keeping RSS itself as the distribution layer. fiatjaf agreed to step back and let the proposal mature: &amp;#34;I agree with everything you said but I still think we can pull it off, let&amp;#39;s stop here for a while&amp;#34;. Two years later, the merged spec lands closer to coexistence than replacement.&lt;/p&gt;

&lt;p&gt;Three design questions remain explicit in the merged spec:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;kind:10164&lt;/code&gt; typo (example shows &lt;code&gt;10064&lt;/code&gt;) needs reconciling before clients can interoperate safely.&lt;/li&gt;
&lt;li&gt;Episode-level discovery without RSS GUID linking is left open. The merged spec has no &lt;code&gt;i&lt;/code&gt; tag, no &lt;code&gt;podcast:item:guid&lt;/code&gt; format, and no RSS bridging mechanism. Clients that want to bridge an existing RSS catalog into kind 54 events must define the bridge convention themselves.&lt;/li&gt;
&lt;li&gt;The &amp;#34;other important fields&amp;#34; stub on the &lt;code&gt;kind:54&lt;/code&gt; definition leaves bitrate, duration, language, transcript pointers, chapters, and per-segment metadata as open territory for follow-up proposals.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Amethyst&amp;#39;s &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/3105&#34;&gt;PR #3105&lt;/a&gt; lands a dedicated podcast screen with episode list and inline player within days of the merge, the first major client implementation. Jumble shipped early podcast attachment scaffolding alongside its GIF picker. Wavlake remains the largest Nostr-native podcast platform and will need to decide whether to align its existing kind 31337 music track events with NIP-F4&amp;#39;s kind 54 episode model.&lt;/p&gt;

&lt;p&gt;Example NIP-F4 kind 54 episode event, matching the merged spec&amp;#39;s minimal tag set:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;55807e7d5cd90d0303d7dce7397f996fdbaed8697903f326c7cf8ad999b9de3d&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1748995200,
  &amp;#34;kind&amp;#34;: 54,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;title&amp;#34;, &amp;#34;Episode 42: Why RSS Won&amp;#34;],
    [&amp;#34;image&amp;#34;, &amp;#34;https://podcast.example.com/ep42-cover.jpg&amp;#34;],
    [&amp;#34;description&amp;#34;, &amp;#34;Dave Jones and fiatjaf on protocol coexistence and the social layer.&amp;#34;],
    [&amp;#34;audio&amp;#34;, &amp;#34;https://podcast.example.com/audio/ep42.mp3&amp;#34;, &amp;#34;audio/mpeg&amp;#34;]
  ],
  &amp;#34;content&amp;#34;: &amp;#34;In this episode we discuss the two-year journey of NIP-F4 from draft to merge, and why coexistence with RSS turned out to be the right architectural choice.&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;abc123def456789012345678901234567890abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef01234567&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;PR #1093 was open for 27 months, well above the median open duration for merged NIPs PRs. The next test for NIP-F4 is whether the kind 10164 typo gets reconciled, whether episode-discovery and RSS-bridge conventions emerge from the implementers, and whether the major podcast hosts publish under per-podcast keypairs as the spec recommends.&lt;/p&gt;
 &lt;/blockquote&gt;
    </content>
    <updated>2026-06-03T17:08:34Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs8cex6gadz0psdpltks76nkjqf0e76gylc3tz47wdx8yrxhyqmtjczypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqurwgks</id>
    
      <title type="html">A heavy release week across the Nostr stack. Amethyst v1.11.0 ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs8cex6gadz0psdpltks76nkjqf0e76gylc3tz47wdx8yrxhyqmtjczypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqurwgks" />
    <content type="html">
      A heavy release week across the Nostr stack. Amethyst v1.11.0 ships NIP-52 calendars, on-chain zap splits, and Marmot group replies, and v1.11.1 adds KIP-01 Frostr threshold signing as the first major client. White Noise v2026.5.22 lands iOS push through a Notification Service Extension. Vector v0.4.0 is a ground-up vector-core rewrite with Tor, NIP-46 remote signers, full-negentropy MLS sync, and an MCP agent surface. MDK adds NIP-40 disappearing messages across iOS and Android. Mostro v0.17.4 closes the anti-abuse bond loop with Phase 3 payouts. Notedeck merges NIP-77 negentropy for giftwraps. The Formstr team opens four coordinated calendar NIP PRs with a shipping reference implementation. Read it: &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-05-28-newsletter/&#34;&gt;https://nostrcompass.org/en/newsletters/2026-05-28-newsletter/&lt;/a&gt;&lt;br/&gt;&lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nevent1qqszz7ucm3jheef58vzvnrzddvvw4knus86pnjckp4rmf69ut90u3fcpz3mhxue69uhhyetvv9ujuerpd46hxtnfduqs6amnwvaz7tmwdaejumr0dsq3vamnwvaz7tmjv4kxz7fwwpexjmtpdshxuet5qyg8wumn8ghj7mn0wd68ytnhd9hx2q3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqap63k2&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;nevent1q…63k2&lt;/a&gt;&lt;/span&gt; &lt;/div&gt; &lt;p&gt;Amethyst v1.11.0 lands a full NIP-52 calendar implementation with reminders, on-chain Bitcoin zap splits, and Marmot group reply support. White Noise v2026.5.22 ships iOS push notifications through a Notification Service Extension, alongside block UX and an add-members button. Vector v0.4.0 lands a ground-up vector-core rewrite, one-click Tor with bridges, NIP-46 remote signers, full-negentropy MLS group sync, and a 21-tool MCP server for AI agents. Applesauce v6.1.0 introduces NIP-51 lookup relay lists (kind 10086) and a complete NIP-34 git-cast factory set. MDK adds NIP-40 disappearing messages across iOS and Android through a unified UniFFI surface, and Mostro v0.17.4 closes the anti-abuse bond loop with Phase 3 slashed-bond payouts to the winner. Notedeck merges full NIP-77 negentropy reconciliation for giftwraps and thread backfill, Cordn surfaces as a coordinator-mediated MLS messenger that trades a single-point availability dependency for tighter epoch ordering and a simpler operational model, a NIP-B0 reference implementation called deepmarks ships a curator-monetized bookmark client, and the Formstr team opens four coordinated calendar NIP proposals covering participant self-removal, private events, recurrence, and decentralized appointment scheduling.&lt;/p&gt;

&lt;h2 id=&#34;top-stories-5&#34;&gt;Top stories&lt;/h2&gt;

&lt;h3 id=&#34;amethyst-v1-11-0-calendars-on-chain-zap-splits-and-marmot-replies-2&#34;&gt;Amethyst v1.11.0: calendars, on-chain zap splits, and Marmot replies&lt;/h3&gt;

&lt;p&gt;Amethyst, the Nostr client for Android maintained by Vitor Pamplona, shipped &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/releases/tag/v1.11.0&#34;&gt;v1.11.0&lt;/a&gt;. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2994&#34;&gt;PR #2994&lt;/a&gt; adds a &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-52/&#34;&gt;NIP-52&lt;/a&gt; calendar event implementation with a dedicated UI and a reminder system, so calendar events now render in their own timeline category, separate from the generic kind-30023 long-form view. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/3018&#34;&gt;PR #3018&lt;/a&gt; extends on-chain Bitcoin zaps with split support, distributing a single Bitcoin transaction across multiple recipients per the existing zap-split tag, so an on-chain payment behaves the same as a Lightning split. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2974&#34;&gt;PR #2974&lt;/a&gt; adds a paginated on-chain transaction history screen that surfaces each settled zap with block confirmation status.&lt;/p&gt;

&lt;p&gt;Group messaging gains parity with one-to-one chat: &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2995&#34;&gt;PR #2995&lt;/a&gt; adds reply support for &lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt;/MLS group messages, so threads inside encrypted groups now render with the same parent-reference UI as public notes. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2984&#34;&gt;PR #2984&lt;/a&gt; hardens &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-57/&#34;&gt;NIP-57&lt;/a&gt; zap-receipt validation by checking the LNURL provider matches the recipient&amp;#39;s stated lud16, closing a class of forgery where a third-party LNURL could mint a receipt for a payment that never landed. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2968&#34;&gt;PR #2968&lt;/a&gt; accepts floating-point dimensions in &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-92/&#34;&gt;NIP-92&lt;/a&gt; &lt;code&gt;imeta&lt;/code&gt; tags, aligning Amethyst with clients that publish fractional pixel-density values from devices like the iPhone Retina display. The release also wires up Payment Targets, a new replaceable-event multi-rail tip jar covered in the protocol section below.&lt;/p&gt;

&lt;h3 id=&#34;white-noise-v2026-5-22-ios-push-block-ux-and-add-members-2&#34;&gt;White Noise v2026.5.22: iOS push, block UX, and add members&lt;/h3&gt;

&lt;p&gt;White Noise, the Marmot-protocol group messenger, shipped &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/releases/tag/v2026.5.22%2B25&#34;&gt;v2026.5.22&lt;/a&gt; with iOS push notifications as the headline feature. &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/673&#34;&gt;PR #673&lt;/a&gt; implements an iOS Notification Service Extension (NSE) that decrypts MLS messages inside the extension process and surfaces them as system notifications, so iPhone users no longer need the app foregrounded to receive messages. Android push-token plumbing routes through the same backend pipeline, with the per-platform NSE keeping ciphertext out of the broker.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/676&#34;&gt;PR #676&lt;/a&gt; adds a full block and unblock UX with confirmation flows and contact-list filtering. &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/679&#34;&gt;PR #679&lt;/a&gt; adds the long-requested &amp;#34;Add members&amp;#34; button to the group-info screen, closing a UX gap where group admins had to fall back to share links. &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/688&#34;&gt;PR #688&lt;/a&gt; introduces a dedicated iOS notification-settings screen, and &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/687&#34;&gt;PR #687&lt;/a&gt; wires up share-via-long-press for media and messages.&lt;/p&gt;

&lt;h3 id=&#34;mdk-adds-nip-40-disappearing-messages-across-platforms-2&#34;&gt;MDK adds NIP-40 disappearing messages across platforms&lt;/h3&gt;

&lt;p&gt;The Marmot Development Kit, the shared Rust core used by White Noise iOS, White Noise Android, and any future Marmot client, merged &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/306&#34;&gt;PR #306&lt;/a&gt; to expose disappearing-message validation and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-40/&#34;&gt;NIP-40&lt;/a&gt; expiration handling through the UniFFI bridge. The PR is the second of a three-part series. iOS and Android now share one Rust implementation of the expiration logic; the timing rules live in a single audited code path consumed by both platforms via UniFFI. &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/307&#34;&gt;PR #307&lt;/a&gt; caps the stored length of welcome failure reasons and sanitizes them before persistence, a separate hardening pass that complements the welcome-event handling shipped last week.&lt;/p&gt;

&lt;p&gt;Disappearing messages in MLS are not just a UI affordance. The expiration tag is published with the encrypted message envelope, so a recipient who never opens the message still has the underlying ciphertext expire at the relay layer alongside any cached copy in the receiving client. With MDK owning the validation path, behavior stays consistent across clients: any conformant Marmot implementation enforces the same expiration semantics, so one client honoring expiration while another caches forever stops being a portability hazard.&lt;/p&gt;

&lt;h3 id=&#34;mostro-v0-17-4-phase-3-closes-the-slashed-bond-loop-2&#34;&gt;Mostro v0.17.4: Phase 3 closes the slashed-bond loop&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/MostroP2P/mostro&#34;&gt;Mostro&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1m0str0d7z2ww8rdh20t2n9lx520xjwhaq24p68umqp06wwrwtsnqen40un&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Mostro&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1m0s…40un&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;, the peer-to-peer Bitcoin exchange protocol built on Nostr, shipped Phase 3 of its anti-abuse bond rollout in &lt;a href=&#34;https://github.com/MostroP2P/mostro/releases/tag/v0.17.4&#34;&gt;v0.17.4&lt;/a&gt;. &lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/738&#34;&gt;PR #738&lt;/a&gt; lands the payout flow for slashed bonds, taking the loser&amp;#39;s forfeited collateral and disbursing it to the dispute winner. &lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/743&#34;&gt;PR #743&lt;/a&gt; adds Phase 3.5, an explicit payout-confirmation message to the winner so they know the slashed sats have settled, with the confirmation event arriving on the same Nostr session as the dispute resolution. Phase 2, covered last week, introduced slashing as an admin action; Phase 3 is the difference between threatening a penalty and enforcing one.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/746&#34;&gt;PR #746&lt;/a&gt; lets the daemon finalize disputes that lack a solver row, an edge case that previously stalled resolution on legacy disputes. &lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/748&#34;&gt;PR #748&lt;/a&gt; tolerates null rates in Yadio&amp;#39;s &lt;code&gt;/exrates/BTC&lt;/code&gt; response so a brief Yadio outage no longer breaks Mostro&amp;#39;s fiat-conversion path. &lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/745&#34;&gt;PR #745&lt;/a&gt; documents the spec for multi-source price providers, the groundwork for removing Yadio as a single point of failure. The Mostro mobile client wired the matching Phase 3 claim path in &lt;a href=&#34;https://github.com/MostroP2P/mobile/pull/596&#34;&gt;PR #596&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&#34;applesauce-v6-1-0-lookup-relays-and-nip-34-git-casts-2&#34;&gt;Applesauce v6.1.0: lookup relays and NIP-34 git casts&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/hzrd149/applesauce&#34;&gt;Applesauce&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1ye5ptcxfyyxl5vjvdjar2ua3f0hynkjzpx552mu5snj3qmx5pzjscpknpr&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;hzrd149&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1ye5…knpr&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), the modular Nostr toolkit that powers Coracle, noStrudel, and Pablo F7z&amp;#39;s stack, released &lt;a href=&#34;https://github.com/hzrd149/applesauce/releases/tag/applesauce-actions%406.1.0&#34;&gt;v6.1.0&lt;/a&gt; across its packages. The release adds first-class &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-51/&#34;&gt;NIP-51&lt;/a&gt; lookup-relay list support: kind 10086 events let a user signal &amp;#34;ask these relays if you want to find me,&amp;#34; sitting alongside &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-65/&#34;&gt;NIP-65&lt;/a&gt; outbox lists as a discovery primitive. Applications built on &lt;code&gt;applesauce-core&lt;/code&gt; get a reactive &lt;code&gt;User.lookupRelays$&lt;/code&gt; observable and a matching loader in &lt;code&gt;applesauce-relay&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-34/&#34;&gt;NIP-34&lt;/a&gt; git-cast factories arrive in &lt;code&gt;applesauce-factory&lt;/code&gt;, giving every Applesauce-built client a one-line path to publishing repo announcements (kind 30617), patches (kind 1617), and issues (kind 1621). &lt;code&gt;User.favoriteGitRepos$&lt;/code&gt;, &lt;code&gt;User.gitAuthors$&lt;/code&gt;, and &lt;code&gt;User.graspServers$&lt;/code&gt; reactive properties let applications list a user&amp;#39;s followed repos, repo maintainers, and configured GRASP servers directly from the same User object. The release also fixes pool manual methods that silently dropped offline relays in &lt;a href=&#34;https://github.com/hzrd149/applesauce/pull/73&#34;&gt;PR #73&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&#34;notedeck-merges-nip-77-negentropy-for-giftwraps-and-thread-backfill-2&#34;&gt;Notedeck merges NIP-77 negentropy for giftwraps and thread backfill&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/damus-io/notedeck&#34;&gt;Notedeck&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub18m76awca3y37hkvuneavuw6pjj4525fw90necxmadrvjg0sdy6qsngq955&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;damus&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub18m7…q955&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;, Damus&amp;#39;s native multi-column desktop client, merged &lt;a href=&#34;https://github.com/damus-io/notedeck/pull/1459&#34;&gt;PR #1459&lt;/a&gt; on May 25 to wire full &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-77/&#34;&gt;NIP-77&lt;/a&gt; negentropy reconciliation into the shared outbox path. The PR adds NIP-77 client and relay frames, relay-local negentropy sessions, and an outbox full-history tracker that drives local-set reconciliation and missing-event fetches. Messages giftwraps get negentropy reconciliation so private-message envelopes can be recovered from the selected account&amp;#39;s read relays. Thread views are no longer capped by the live-subscription reply limit. Dave PNS replaces its Dave-local negentropy implementation with the shared outbox path while preserving its existing bounded-history behavior.&lt;/p&gt;

&lt;p&gt;Live subscriptions and negentropy now use separate filters. A flow can keep a small live request while issuing a broader negentropy filter to reconcile what the relay already has. The PR intentionally does not enable broad negentropy sync for home or profile timelines, which would change cold-start cost characteristics. Test coverage was added for reconciliation, giftwrap delivery, thread backfill, Dave PNS restore, account switching, relay retargeting, fetch retries, and NIP-77 relay behavior.&lt;/p&gt;

&lt;h3 id=&#34;vector-v0-4-0-vector-core-rewrite-tor-nip-46-full-negentropy-mls-and-an-mcp-agent-surface-2&#34;&gt;Vector v0.4.0: vector-core rewrite, Tor, NIP-46, full-negentropy MLS, and an MCP agent surface&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/VectorPrivacy/Vector&#34;&gt;Vector&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1hrujuc08r4zcdtn0u6ts7u7apldcjqgftz0z7stmaaz9hwaf9jxs66f3yh&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;VectorPrivacy&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1hru…f3yh&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;, the privacy-focused cross-platform messenger built on NIP-17 DMs and Marmot groups, shipped &lt;a href=&#34;https://github.com/VectorPrivacy/Vector/releases/tag/v0.4.0&#34;&gt;v0.4.0&lt;/a&gt; as its biggest release to date. The headline is a ground-up engine rewrite: all of Vector&amp;#39;s logic now lives in a single decoupled crate, &lt;code&gt;vector-core&lt;/code&gt;, shared across the desktop, Android, and any future client, with 440&#43; tests in the core itself and the application shell stripped of thousands of lines. The rewrite is groundwork for a Vector CLI, bots, and SDKs that drive the same protocol code as the GUI.&lt;/p&gt;

&lt;p&gt;Tor integration ships with one-click traffic routing and bridge support for censorship circumvention. Multi-account support lands with an in-app switcher. Remote-signer login arrives via &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; with bunker pairing by QR or pasted URI, so users can log in without ever exposing their nsec. Delete-for-everyone works in both &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; DMs and &lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt; group chats, with Vector keeping the ephemeral signing key as a deliberate spec divergence the release notes call out explicitly: &amp;#34;a diversion from the traditional NIP-17/Marmot specs for enhanced user privacy controls.&amp;#34; The retained ephemeral key gives Vector clients local proof that a deletion was sanctioned by the original sender, but it also means any other Vector-touching client sees a different deletion-verifiability surface than baseline NIP-17/Marmot clients.&lt;/p&gt;

&lt;p&gt;MLS group sync is now fully reconciled over &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-77/&#34;&gt;NIP-77&lt;/a&gt; negentropy, the same direction Notedeck took for giftwraps and threads this week. The Blossom uploader fails over across multiple servers, learns each server&amp;#39;s capabilities, and syncs the server list across devices. Custom emoji packs are user-creatable, shareable, and cross-compatible with other Nostr clients. SQLite memory dropped from roughly 308MB to 5MB. The emoji panel opens from disk cache and Discord-style shortcodes (&lt;code&gt;:smile:&lt;/code&gt;) plus Unicode frequency ranking surface the right glyph first.&lt;/p&gt;

&lt;p&gt;The most novel addition is &lt;code&gt;vector-agent&lt;/code&gt;, an MCP (Model Context Protocol) server that exposes 21 tools so AI agents can drive Vector: sending DMs, managing groups, uploading files, editing profiles. This is the second Nostr project this week (alongside Shopstr) to ship an MCP surface, and the first messenger-class application to do so. Coupled with AgentNoise (covered last week), the pattern of agent-controlled Nostr clients is moving from one-off experiments to a deliberate platform direction.&lt;/p&gt;

&lt;h3 id=&#34;cordn-surfaces-as-a-coordinator-mediated-mls-messenger-2&#34;&gt;Cordn surfaces as a coordinator-mediated MLS messenger&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://cordn.net&#34;&gt;Cordn&lt;/a&gt; (web client at &lt;a href=&#34;https://cordn.net&#34;&gt;cordn.net&lt;/a&gt;, repos at &lt;a href=&#34;https://github.com/Cordn-msg/cordn&#34;&gt;Cordn-msg/cordn&lt;/a&gt; and &lt;a href=&#34;https://github.com/Cordn-msg/cordn-web&#34;&gt;Cordn-msg/cordn-web&lt;/a&gt;) is a new MLS messenger that takes a different architectural tack from Marmot. Where &lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt; is fully relay-based with no privileged coordinator (every group member writes directly to relays and any conforming relay can carry the traffic), Cordn introduces a per-group coordinator role implemented as a &lt;a href=&#34;https://nostrcompass.org/en/topics/contextvm/&#34;&gt;ContextVM&lt;/a&gt; service. The coordinator orders MLS commits and handles welcome distribution.&lt;/p&gt;

&lt;p&gt;The Cordn argument, stated on its &lt;a href=&#34;https://cordn.net/why&#34;&gt;/why&lt;/a&gt; page, is that MLS as deployed in production messengers is &amp;#34;not coordination-free&amp;#34; and that &amp;#34;weakly ordered public dissemination&amp;#34; makes group-state convergence &amp;#34;much harder&amp;#34; without a strong coordination point. A coordinator-mediated design provides predictable epoch advancement and simpler concurrent-commit resolution. Participants connect to the coordinator using ephemeral keys, so the coordinator learns the group ID and the timing of commit traffic but not which long-term pubkeys are members. Any party querying relays for a Marmot group can already see the same surface: group activity by group ID, with timing inferable from event arrival. Cordn also acknowledges that &amp;#34;availability trust remains&amp;#34; with self-hosting: a self-hosted coordinator avoids the operator-layer centralization concern but introduces a single point of failure for group liveness. Marmot avoids that single point by leaving ordering to MLS itself (epochs and Commit messages handle ordering inside the protocol) and distributing Welcome events via &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-59/&#34;&gt;NIP-59&lt;/a&gt; gift wrap, at the cost of admin-side discipline: admins must wait for relay acknowledgment of a Commit before sending the matching Welcome, and clients must reconcile concurrent commits when relay delivery races a state transition.&lt;/p&gt;

&lt;p&gt;The contrast is worth pulling on for any team picking a private-messaging stack. Marmot trades some implementation complexity for a relay-agnostic deployment with no privileged actor in the path. Cordn trades a single-point availability dependency for tighter ordering and a simpler operational model. Both projects build on &lt;a href=&#34;https://nostrcompass.org/en/topics/mls/&#34;&gt;MLS&lt;/a&gt; and use Nostr as the identity and transport layer. The disagreement is over where the coordination cost lives. The cordn-msg repos show steady commit cadence with the coordinator service implemented over ContextVM and the MLS layer built on &lt;code&gt;ts-mls&lt;/code&gt;.&lt;/p&gt;

&lt;h3 id=&#34;deepmarks-nip-b0-bookmarks-with-curator-monetized-publishing-2&#34;&gt;deepmarks: NIP-B0 bookmarks with curator-monetized publishing&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/ostermayer/deepmarks-public&#34;&gt;deepmarks-public&lt;/a&gt; is a reference client for the proposed &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-b0/&#34;&gt;NIP-B0&lt;/a&gt; bookmark spec (kind 39701), with a three-box architecture (curator, indexer, viewer) and a tier system funded by direct-to-curator &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-57/&#34;&gt;NIP-57&lt;/a&gt; zaps. The client implements NIP-B0, &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-07/&#34;&gt;NIP-07&lt;/a&gt;, &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt;, NIP-57, &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt;, &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-98/&#34;&gt;NIP-98&lt;/a&gt;, &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-65/&#34;&gt;NIP-65&lt;/a&gt;, and Blossom BUD-01 and BUD-04 for file storage. A 21,000-sat lifetime tier converts paying readers into recurring zap recipients for the curator. The curator publishes bookmark events, the indexer enriches them with machine-readable metadata, and the viewer renders the feed; each role is a separate deployable service.&lt;/p&gt;

&lt;h2 id=&#34;releases-5&#34;&gt;Releases&lt;/h2&gt;

&lt;h3 id=&#34;amber-v6-1-0-ga-encrypted-per-account-backup-2&#34;&gt;Amber v6.1.0 GA: encrypted per-account backup&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Amber&lt;/strong&gt; moved from &lt;code&gt;v6.1.0-pre3&lt;/code&gt; to GA &lt;a href=&#34;https://github.com/greenart7c3/Amber/releases/tag/v6.1.0&#34;&gt;v6.1.0&lt;/a&gt; this week. &lt;a href=&#34;https://github.com/greenart7c3/Amber/pull/444&#34;&gt;PR #444&lt;/a&gt; ships encrypted backup and restore for the application permission database, and &lt;a href=&#34;https://github.com/greenart7c3/Amber/pull/446&#34;&gt;PR #446&lt;/a&gt; splits the backup per-account, so users with multiple Nostr identities can back up and restore each set of app grants independently. The PSBT signing work covered last week is in the GA cut.&lt;/p&gt;

&lt;h3 id=&#34;citrine-per-relay-subscriptions-and-onion-url-leak-prevention-2&#34;&gt;Citrine: per-relay subscriptions and onion-URL leak prevention&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Citrine&lt;/strong&gt;, the on-device personal relay that ships with Amethyst, shipped two fixes this cycle. &lt;a href=&#34;https://github.com/greenart7c3/Citrine/pull/157&#34;&gt;PR #157&lt;/a&gt; switches from a single global subscription to per-relay tagged subscriptions, so two source relays sharing a &lt;code&gt;kinds: [1]&lt;/code&gt; filter no longer collide on the aggregator side. &lt;a href=&#34;https://github.com/greenart7c3/Citrine/pull/162&#34;&gt;PR #162&lt;/a&gt; filters onion relay URLs when the outbound Tor proxy is disabled, preventing onion addresses from leaking onto the clearnet routing path.&lt;/p&gt;

&lt;h3 id=&#34;angor-v0-2-27-and-v0-2-28-relay-reliability-and-boltz-reconnect-2&#34;&gt;Angor v0.2.27 and v0.2.28: relay reliability and Boltz reconnect&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Angor &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1wrzguj625auyeysfuuxzf7ywhzlwfz9gm3fml2lul72gwqxw8n9swtcm02&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Angor&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1wrz…cm02&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;&lt;/strong&gt; shipped &lt;a href=&#34;https://github.com/block-core/angor/releases/tag/v0.2.27&#34;&gt;v0.2.27&lt;/a&gt; and &lt;a href=&#34;https://github.com/block-core/angor/releases/tag/v0.2.28&#34;&gt;v0.2.28&lt;/a&gt;. &lt;a href=&#34;https://github.com/block-core/angor/pull/874&#34;&gt;PR #874&lt;/a&gt; fixes a relay-dedup bug where only one relay was connected at a time, a regression that silently degraded reliability for projects with multiple relay endpoints. &lt;a href=&#34;https://github.com/block-core/angor/pull/876&#34;&gt;PR #876&lt;/a&gt; adds WebSocket reconnect logic for Boltz submarine-swap monitoring, so a brief disconnect no longer leaves a swap in unknown state.&lt;/p&gt;

&lt;h3 id=&#34;nostrord-v1-1-0-nip-57-zaps-and-nip-29-role-distinction-2&#34;&gt;Nostrord v1.1.0: NIP-57 zaps and NIP-29 role distinction&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Nostrord &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1ktxukd7ny5e3ghqqcn6r6hs7rh4hceaua6n77cl4ym9ye2ufzces7rzc2h&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Nostrord&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1ktx…zc2h&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;&lt;/strong&gt; released &lt;a href=&#34;https://github.com/nostrord/nostrord/releases/tag/v1.1.0&#34;&gt;v1.1.0&lt;/a&gt; with &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-57/&#34;&gt;NIP-57&lt;/a&gt; Lightning zap support for messages and profiles (&lt;a href=&#34;https://github.com/nostrord/nostrord/pull/98&#34;&gt;PR #98&lt;/a&gt;) and a proper distinction in the activity feed between &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-29/&#34;&gt;NIP-29&lt;/a&gt; role changes and member adds (&lt;a href=&#34;https://github.com/nostrord/nostrord/pull/92&#34;&gt;PR #92&lt;/a&gt;), which used to render identically and obscured who had been promoted versus who had been invited.&lt;/p&gt;

&lt;h3 id=&#34;ぬるぬる-v1-5-x-sqlcipher-mls-keystore-and-epoch-catch-up-2&#34;&gt;ぬるぬる v1.5.x: SQLCipher MLS keystore and epoch catch-up&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;ぬるぬる&lt;/strong&gt; (nurunuru, by tami1A84), a Japanese-language Nostr client that implements MLS group messaging (kind 443) alongside NIP-44, NIP-50 advanced search, NIP-55, and NIP-70, shipped five releases this week. &lt;a href=&#34;https://github.com/tami1A84/null--nostr/pull/184&#34;&gt;PR #184&lt;/a&gt; introduces SQLCipher encryption for the MLS keystore in the rust-engine layer. &lt;a href=&#34;https://github.com/tami1A84/null--nostr/pull/187&#34;&gt;PR #187&lt;/a&gt; and &lt;a href=&#34;https://github.com/tami1A84/null--nostr/pull/188&#34;&gt;PR #188&lt;/a&gt; extend SQLCipher to Android and iOS respectively, with a legacy-plaintext purge step and CI guards. &lt;a href=&#34;https://github.com/tami1A84/null--nostr/pull/189&#34;&gt;PR #189&lt;/a&gt; and &lt;a href=&#34;https://github.com/tami1A84/null--nostr/pull/191&#34;&gt;PR #191&lt;/a&gt; add MLS peer-epoch catch-up with a replay cache and a recovery banner on both platforms, so a client that falls behind on group commits can recover without losing the conversation. ぬるぬる is a Marmot client built on &lt;code&gt;mdk-core&lt;/code&gt;, &lt;code&gt;mdk-sqlite-storage&lt;/code&gt;, and &lt;code&gt;mdk-storage-traits&lt;/code&gt; from &lt;code&gt;marmot-protocol/mdk&lt;/code&gt;, so the SQLCipher and epoch catch-up work lands inside the same MDK runtime that White Noise uses.&lt;/p&gt;

&lt;h3 id=&#34;bitcredit-core-v0-5-10-nostr-rooted-block-propagation-fix-2&#34;&gt;Bitcredit Core v0.5.10: Nostr-rooted block propagation fix&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Bitcredit Core&lt;/strong&gt; released &lt;a href=&#34;https://github.com/BitcreditProtocol/Bitcredit-Core/releases/tag/v0.5.10&#34;&gt;v0.5.10&lt;/a&gt; with a fix for a missing Nostr-node-id field during block propagation, which was breaking company-creation flows that included identity upload. Bitcredit is an e-bill protocol that uses Nostr identities as the root of trust for company and bill propagation events.&lt;/p&gt;

&lt;h2 id=&#34;unreleased-changes-5&#34;&gt;Unreleased changes&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Jumble&lt;/strong&gt; opened &lt;a href=&#34;https://github.com/CodyTseng/jumble/pull/797&#34;&gt;PR #797&lt;/a&gt; for Google login via the Pomegranate threshold signer, letting a user split their Nostr key across multiple parties so no single signer holds the full secret. This is a meaningful step beyond bunker or nsec-import flows: a user can recover their account even if one signer party is compromised, without that party ever holding the complete private key.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Shopstr&lt;/strong&gt; opened &lt;a href=&#34;https://github.com/shopstr-eng/shopstr/pull/492&#34;&gt;PR #492&lt;/a&gt; initializing an MCP (Model Context Protocol) server, with &lt;a href=&#34;https://github.com/shopstr-eng/shopstr/pull/494&#34;&gt;PR #494&lt;/a&gt; building the supporting infrastructure (relay fetch, parsers, validation, errors, dedup, audit logging) and &lt;a href=&#34;https://github.com/shopstr-eng/shopstr/pull/472&#34;&gt;PR #472&lt;/a&gt; adding a relay allowlist for the MCP relay manager. This makes Shopstr the first Nostr marketplace to expose itself as an MCP server, so AI agents can browse and act on NIP-99 listings as a structured tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keydex&lt;/strong&gt;, the Shamir-secret-sharing vault, opened a substantial migration in &lt;a href=&#34;https://github.com/mplorentz/keydex/pull/226&#34;&gt;PR #226&lt;/a&gt; moving custom kinds 1337-1345 to the 713-721 range, alongside &lt;a href=&#34;https://github.com/mplorentz/keydex/pull/239&#34;&gt;PR #239&lt;/a&gt; adding AEAD over Shamir shares and &lt;a href=&#34;https://github.com/mplorentz/keydex/pull/234&#34;&gt;PR #234&lt;/a&gt; migrating to GF256 arithmetic. The kind-range migration aligns Keydex with the way the NIPs repo allocates custom kinds, moving away from a self-claimed range.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mill&lt;/strong&gt; (&lt;a href=&#34;https://github.com/0ceanSlim/nostr-mill&#34;&gt;nostr-mill&lt;/a&gt;) is a new drop-in Nostr signer UI from &lt;a href=&#34;https://github.com/0ceanSlim&#34;&gt;OceanSlim&lt;/a&gt; (maintainer of the &lt;a href=&#34;https://github.com/0ceanSlim/grain&#34;&gt;grain&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1zmc6qyqdfnllhnzzxr5wpepfpnzcf8q6m3jdveflmgruqvd3qa9sjv7f60&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;OceanSlim&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1zmc…7f60&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) Go relay), shipping as a single-script-tag Web Component on &lt;a href=&#34;https://www.npmjs.com/package/nostr-mill&#34;&gt;npm&lt;/a&gt; and &lt;a href=&#34;https://cdn.jsdelivr.net/npm/nostr-mill/dist/mill.umd.js&#34;&gt;jsDelivr&lt;/a&gt;. One &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tag gives a web app all six common signer entry points behind a unified UI: &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-07/&#34;&gt;NIP-07&lt;/a&gt; browser extension, &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; bunker (URL paste or QR pairing with user-specifiable relays, unusual among in-page bunker integrations), &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-55/&#34;&gt;NIP-55&lt;/a&gt; Amber via Android intents, encrypted nsec stored in &lt;code&gt;sessionStorage&lt;/code&gt; via AES-256-GCM with PBKDF2, read-only &lt;code&gt;npub&lt;/code&gt;, and in-browser keypair generation. The component is themeable through 29 CSS custom properties scoped to the Shadow DOM and exposes a small SemVer-tracked API (&lt;code&gt;MILL.open&lt;/code&gt;, &lt;code&gt;mill:connected&lt;/code&gt; / &lt;code&gt;mill:disconnected&lt;/code&gt; events, named theme exports). The maintainer&amp;#39;s motivation is that bunker login flows have been reimplemented one web app at a time across Nostr. Consolidating onto a shared component lets clients converge on how signer UX should behave, and turns optional flows (like delegated-key login through threshold signers, mirroring Wisp&amp;#39;s Pomegranate-based Google login covered above) into a reusable surface that any app can drop in. Mill is at npm v1.5.0, single-maintainer, alpha-stage, with grain as the planned first integrator.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;moStard&lt;/strong&gt;, a Monero-first fork of &lt;a href=&#34;https://github.com/hzrd149/nostrudel&#34;&gt;noStrudel&lt;/a&gt; by &lt;a href=&#34;https://github.com/roguehashrate&#34;&gt;roguehashrate&lt;/a&gt;, reached &lt;a href=&#34;https://github.com/roguehashrate/moStard/releases&#34;&gt;v1.0.1&lt;/a&gt; this week with a stripped-down feature set and a Monero-themed identity layered on the same Applesauce &#43; worker-relay stack. This week&amp;#39;s work landed rendering for Zapstore&amp;#39;s kind 32267 software-application events (embed cards in the timeline showing app name, icon, screenshots, platform, license, and a launch link to &lt;code&gt;zapstore.dev/apps/&amp;lt;d-tag&amp;gt;&lt;/code&gt;), polls via kind 20 and kind 21, NIP-A3 Payment Targets-based tipping with per-method QR codes, markdown rendering in notes, GIF picker support for external GIF keyboards, and Amber signer pairing fixes. Monero framing extends to the tip flow: NIP-A3 &lt;code&gt;payto&lt;/code&gt; entries for &lt;code&gt;monero&lt;/code&gt; addresses get first-class buttons in the same UI alongside &lt;code&gt;lightning&lt;/code&gt; and &lt;code&gt;bitcoin&lt;/code&gt;. The client is single-maintainer and alpha-stage, but the May 27 work shows a builder pulling NIP-A3 from this week&amp;#39;s protocol-spec announcements straight into a shipping fork within days.&lt;/p&gt;

&lt;h2 id=&#34;nip-updates-and-protocol-spec-work-5&#34;&gt;NIP updates and protocol spec work&lt;/h2&gt;

&lt;h3 id=&#34;calendar-nip-stack-four-proposals-from-the-formstr-team-2&#34;&gt;Calendar NIP stack: four proposals from the Formstr team&lt;/h3&gt;

&lt;p&gt;Ix2 (&lt;a href=&#34;https://github.com/geralt-debugs&#34;&gt;@geralt-debugs&lt;/a&gt;) opened four coordinated NIP PRs on May 17, all referencing the &lt;a href=&#34;https://calendar.formstr.app&#34;&gt;calendar.formstr.app&lt;/a&gt; implementation already shipping under the same author. &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2350&#34;&gt;PR #2350&lt;/a&gt; proposes kind 84 as a generalized &amp;#34;participant self-removal&amp;#34; event: a tagged participant on any event can publish a kind 84 referencing the original via &lt;code&gt;e&lt;/code&gt;, &lt;code&gt;a&lt;/code&gt;, and &lt;code&gt;k&lt;/code&gt; tags to signal opt-out. Relays must validate that the kind 84 signer appears in a &lt;code&gt;p&lt;/code&gt; tag of the referenced event before honoring removal, and a kind 5 deletion always takes precedence. The PR generalizes a pattern that was previously only described inside the NIP-52 calendar context, so kind 84 becomes the standard way for non-authors to withdraw from any participant event.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2351&#34;&gt;PR #2351&lt;/a&gt; is the foundation of the calendar stack: NIP-52E for private calendar events (kinds 32678 time-based, 32681 day-event, 32123 private calendar list, 31926 busy list, 1052 gift wrap, 52 rumor) and NIP-52R for recurring events. At the architectural core is the view-key pattern: a randomly generated keypair encrypts event content with NIP-44, and the secret half (bech32-encoded as &lt;code&gt;nsec&lt;/code&gt;) is gift-wrapped to each participant. The signer holds only the public &lt;code&gt;d&lt;/code&gt; tag; everything else lives in encrypted &lt;code&gt;content&lt;/code&gt;. Decoupling content encryption from identity this way means editing an event does not require re-keying recipients. NIP-52R defines two optional tags on existing kinds 31923 and 31922 to declare recurrence using bare RFC 5545 RRULE values, with &lt;code&gt;D&lt;/code&gt; day-index becoming optional when RRULE is present. Forward secrecy is explicitly absent: a leaked view key reveals all past and future versions of the event under the same &lt;code&gt;d&lt;/code&gt; tag.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2352&#34;&gt;PR #2352&lt;/a&gt; builds on NIP-52E with a decentralized appointment-scheduling spec the PR description calls &amp;#34;a drop-in alternative to Calendly/Cal.com with no central intermediary.&amp;#34; Kind 31927 advertises a scheduling page with encrypted availability windows; kind 32680 is a host-side self-encrypted recovery record for the view key; kinds 1057 and 1058 are the gift-wrapped booking request and response. The clever mechanic: the booker generates both the &lt;code&gt;d&lt;/code&gt; tag and the view key for the future private event before sending the request, so the booker can add the appointment to their own calendar immediately with the correct key, and the host never has to round-trip a key back. Booking responses carry an unencrypted &lt;code&gt;status&lt;/code&gt; tag on the outer wrap so relays can filter without decrypting.&lt;/p&gt;

&lt;p&gt;A reference implementation is already live at &lt;a href=&#34;https://calendar.formstr.app&#34;&gt;calendar.formstr.app&lt;/a&gt; and as the Calendar Android app on Zapstore. &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2351&#34;&gt;PR #2351&lt;/a&gt; closes &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2027&#34;&gt;PR #2027&lt;/a&gt; in its favor, consolidating an earlier private-calendar proposal that had been open since the start of the year.&lt;/p&gt;

&lt;h3 id=&#34;payment-targets-and-silent-payments-2&#34;&gt;Payment Targets and Silent Payments&lt;/h3&gt;

&lt;p&gt;Two more NIP proposals circulated this week in &lt;code&gt;kind:30023&lt;/code&gt; long-form documents.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;Payment Targets&lt;/strong&gt; proposal (NIP-A3 / payto) defines a replaceable kind 10133 event carrying one or more &lt;code&gt;[&amp;#34;payto&amp;#34;, &amp;#34;&amp;lt;type&amp;gt;&amp;#34;, &amp;#34;&amp;lt;authority&amp;gt;&amp;#34;]&lt;/code&gt; tags that map to RFC 8905 &lt;code&gt;payto:&lt;/code&gt; URIs. Supported types include bitcoin, lightning, ethereum, monero, nano, cashme, revolut, and venmo. The intent is to standardize a multi-rail tip jar that complements (not replaces) lud16-based NIP-57 zaps. Amethyst v1.11.0 is the first implementer; merged PRs &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2953&#34;&gt;#2953&lt;/a&gt; and &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/3009&#34;&gt;#3009&lt;/a&gt; ship the subscription and observation surface, and &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/3011&#34;&gt;PR #3011&lt;/a&gt; wires the UI for &lt;code&gt;PaymentTargetsEvent&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Two competing Silent Payments proposals dropped from different authors. The first variant derives BIP-352 silent-payment scan and spend keys from &lt;code&gt;nsec&lt;/code&gt; via public additive tweaks, so any sender can construct an &lt;code&gt;sp1q...&lt;/code&gt; address from an &lt;code&gt;npub&lt;/code&gt; without setup. Author warning is explicit in the spec: &amp;#34;bscan and bspend MUST be treated with exactly the same care as nsec,&amp;#34; because the scan key reveals the nsec. A second variant takes the inverse approach, adding an &lt;code&gt;sp_address&lt;/code&gt; field to kind 0 profile metadata containing a standard BIP-352 silent-payment address whose keys are kept independent of the Nostr identity. Variant two is structurally safer. Both proposals attracted a thoughtful review thread; erskingardner (Marmot lead) posted a detailed &lt;a href=&#34;https://gist.github.com/trbouma/77648ebe1005b181b67d1c4b42c7f31d?permalink_comment_id=6167489#gistcomment-6167489&#34;&gt;comment&lt;/a&gt; on the trbouma gist tracking the proposal. His central concern is that variant 1 derives the scan private key from &lt;code&gt;nsec&lt;/code&gt; plus a publicly computable tweak, which means anyone holding the scan key (including a third-party scanning service the user has to delegate to in practice) can recover the full &lt;code&gt;nsec&lt;/code&gt; by subtracting that tweak. The same key that lets a remote service scan inbound payments for you also lets that service steal your identity and any funds derived from it.&lt;/p&gt;

&lt;p&gt;On the NIP-34 git-over-Nostr side, &lt;a href=&#34;https://joinmarket-ng.github.io/joinmarket-ng/&#34;&gt;joinmarket-ng&lt;/a&gt; (a modern JoinMarket Bitcoin CoinJoin implementation maintained via NIP-34) received 10 kind 1617 patches from an external contributor, and hzrd149 published 2 patches to &lt;a href=&#34;https://gitworkshop.dev/npub1zafcms4xya5ap9zr7xxr0jlrtrattwlesytn2s42030lzu0dwlzqpd26k5/relay.ngit.dev/schemata&#34;&gt;schemata&lt;/a&gt;. &lt;a href=&#34;https://gitworkshop.dev/&#34;&gt;gitworkshop.dev&lt;/a&gt; itself drew two issue reports: one flagging that login sessions are lost on page refresh when using a NIP-46 remote signer, the other asking for distinct link styling in README previews.&lt;/p&gt;

&lt;h2 id=&#34;six-years-of-nostr-mays-2&#34;&gt;Six Years of Nostr Mays&lt;/h2&gt;

&lt;p&gt;The last newsletter of May 2026 steps back from the week&amp;#39;s releases to walk the month of May across Nostr&amp;#39;s history. Each year had a different center of gravity: 2021 was a single commit, 2022 was the formation of the NIPs repo itself, 2023 was the protocol-spec explosion, 2024 was the consolidation cycle, 2025 was when negentropy merged and Damus&amp;#39;s Notedeck graduated to Beta, and 2026 is the month covered in this and the three previous issues.&lt;/p&gt;

&lt;h3 id=&#34;may-2021-2&#34;&gt;May 2021&lt;/h3&gt;

&lt;p&gt;Nostr was six months old. The only Nostr code lived in &lt;a href=&#34;https://github.com/fiatjaf/nostr&#34;&gt;fiatjaf/nostr&lt;/a&gt; and the entire month produced exactly one commit, but that commit became one of the most-used parts of the protocol. On May 22, fiatjaf &lt;a href=&#34;https://github.com/fiatjaf/nostr/commit/9ee3a02&#34;&gt;repurposed NIP-02&lt;/a&gt; as the contact list NIP. The commit message reads: &amp;#34;repurpose NIP-02 and add NIP authorship,&amp;#34; and the explicit credit is to &lt;a href=&#34;https://github.com/nostr-protocol/nostr/pull/16&#34;&gt;PR #16&lt;/a&gt; by arcbtc (Ben Arc of LNbits), opened on February 9 and closed the day before fiatjaf folded the idea into NIP-02. arcbtc&amp;#39;s pitch was small: a kind for &amp;#34;sending follower list to relays&amp;#34; that would be &amp;#34;useful for restoring accounts and recommending public keys to follow.&amp;#34; fiatjaf generalized it into a single &lt;code&gt;kind:3&lt;/code&gt; event whose tags serve three purposes at once. They are a follow list (the social graph), a petname store (local nicknames for friends), and a relay recommendation source (which relays a follow uses). The same event, replaceable per author, became the canonical answer to &amp;#34;who does this person follow,&amp;#34; &amp;#34;what do they call them,&amp;#34; and &amp;#34;where do they read.&amp;#34; Every client built in the next five years reads &lt;code&gt;kind:3&lt;/code&gt;. The convention added in the same commit, that each NIP names its author, is the reason every spec now has bylines.&lt;/p&gt;

&lt;h3 id=&#34;may-2022-2&#34;&gt;May 2022&lt;/h3&gt;

&lt;p&gt;The month the NIPs repo became a community project. On May 1, fiatjaf &lt;a href=&#34;https://github.com/nostr-protocol/nips/commit/f25c7e6&#34;&gt;migrated the specs&lt;/a&gt; from &lt;code&gt;fiatjaf/nostr&lt;/code&gt; into a dedicated &lt;a href=&#34;https://github.com/nostr-protocol/nips&#34;&gt;&lt;code&gt;nostr-protocol/nips&lt;/code&gt;&lt;/a&gt; repo and on May 2 added &lt;a href=&#34;https://github.com/nostr-protocol/nips/commit/c053670&#34;&gt;formal acceptance criteria&lt;/a&gt;. Two days later, Robert C. Martin (Uncle Bob) opened &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1&#34;&gt;PR #1&lt;/a&gt;, the first external pull request, proposing threading conventions for &lt;code&gt;e&lt;/code&gt; and &lt;code&gt;p&lt;/code&gt; tags. The PR was originally numbered NIP-13, then &lt;a href=&#34;https://github.com/nostr-protocol/nips/commit/bd4a81a&#34;&gt;renamed to NIP-10&lt;/a&gt; to make room for proof-of-work. Three of the first six NIPs are Uncle Bob&amp;#39;s: NIP-10 (threading markers), NIP-14 (&lt;a href=&#34;https://github.com/nostr-protocol/nips/commit/ebacbcc&#34;&gt;the Subject tag&lt;/a&gt;), and the May 21 commit that nailed down &lt;a href=&#34;https://github.com/nostr-protocol/nips/commit/e22ea1a&#34;&gt;&lt;code&gt;kind:1&lt;/code&gt; as the canonical short text-note kind&lt;/a&gt;. On May 5, William Casarin made his first NIP commits: &lt;a href=&#34;https://github.com/nostr-protocol/nips/commit/d7a4aad&#34;&gt;NIP-13 Proof of Work&lt;/a&gt; and the &lt;a href=&#34;https://github.com/nostr-protocol/nips/commit/ad1eb96&#34;&gt;kind:2 recommend-relay event&lt;/a&gt;. The next day, fiatjaf published &lt;a href=&#34;https://github.com/nostr-protocol/nips/commit/37eb53e&#34;&gt;NIP-07 &lt;code&gt;window.nostr&lt;/code&gt;&lt;/a&gt;, twenty lines of markdown that defined the browser-extension signer interface still used today. NIP-05&amp;#39;s &lt;a href=&#34;https://github.com/nostr-protocol/nips/commit/57b86d2&#34;&gt;CORS warning&lt;/a&gt; by David A. Harding and NIP-01&amp;#39;s &lt;a href=&#34;https://github.com/nostr-protocol/nips/commit/a4aea53&#34;&gt;&lt;code&gt;filter.limit&lt;/code&gt;&lt;/a&gt; landed the same week. nostr-tools shipped its &lt;a href=&#34;https://github.com/nbd-wtf/nostr-tools/commit/dc489bf&#34;&gt;first browser-importable ESM build&lt;/a&gt; on May 8. Semisol drafted &lt;a href=&#34;https://github.com/nostr-protocol/nips/commit/a787093&#34;&gt;NIP-15 (End Of Stored Events)&lt;/a&gt; and &lt;a href=&#34;https://github.com/nostr-protocol/nips/commit/62fde6c&#34;&gt;NIP-16 (event kind ranges)&lt;/a&gt; at month-end, the documents that still govern relay sync semantics and the regular-vs-replaceable-vs-ephemeral classification.&lt;/p&gt;

&lt;h3 id=&#34;may-2023-2&#34;&gt;May 2023&lt;/h3&gt;

&lt;p&gt;The protocol-spec explosion. Sixty-four NIP PRs were opened that month, with several of the proposals that defined Nostr&amp;#39;s surface area for the next two years all landing in 31 days, and the largest funding announcement Nostr had ever received landed on May 4 with the OpenSats &lt;a href=&#34;https://opensats.org/blog/opensats-receives-additional-funding-of-dollar10m-from-startsmall&#34;&gt;$10 million grant from Jack Dorsey&amp;#39;s #startsmall&lt;/a&gt;, the money that underwrote every Nostr grant wave since. NIP-47 (Nostr Wallet Connect) was &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/406&#34;&gt;merged on May 2&lt;/a&gt;, bringing Alby&amp;#39;s wallet-connect spec into the main protocol. Two days later Vitor Pamplona &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/498&#34;&gt;proposed NIP-53 Live Activities&lt;/a&gt; with &lt;code&gt;kind:30311&lt;/code&gt; rooms and &lt;code&gt;kind:1311&lt;/code&gt; chat messages, the foundation for every Nostr livestreaming surface that followed. Pablo Fernandez opened &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/501&#34;&gt;NIP-84 Highlights&lt;/a&gt; on May 5 and &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/530&#34;&gt;NIP-89 Recommended Application Handlers&lt;/a&gt; on May 14. v0l (Kieran Babich, Snort author) proposed &lt;a href=&#34;https://github.com/nostr-protocol/nips/commit/29f26e7&#34;&gt;NIP-98 HTTP Auth&lt;/a&gt; on May 8, the authentication primitive that NIP-96 and Blossom both later depended on. Jonathan Staab proposed &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/532&#34;&gt;NIP-32 Labels&lt;/a&gt; on May 15, and &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/484&#34;&gt;NIP-30 Custom Emoji&lt;/a&gt; merged the same day. Arthur Franca proposed &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/547&#34;&gt;NIP-96 HTTP File Storage Integration&lt;/a&gt; on May 21. Two days later, Vitor added &lt;a href=&#34;https://github.com/nostr-protocol/nips/commit/e4937be&#34;&gt;zap splits to NIP-57&lt;/a&gt; and verbiricha added &lt;a href=&#34;https://github.com/nostr-protocol/nips/commit/0495931&#34;&gt;&lt;code&gt;kind:30024&lt;/code&gt; long-form drafts to NIP-23&lt;/a&gt;, the spec that became the foundation for modern Nostr long-form authoring workflows in Habla, YakiHonne, and Highlighter. fiatjaf proposed &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/566&#34;&gt;NIP-29 Simple Groups&lt;/a&gt; on May 28, the first relay-managed group spec covering &lt;code&gt;kind:9000&lt;/code&gt; through &lt;code&gt;kind:9020&lt;/code&gt; moderation events. The month closed with Paul Miller opening &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/574&#34;&gt;the NIP-44 conversation&lt;/a&gt; on May 31, an XChaCha20-based encrypted DM design intended to replace NIP-04. The client side moved as fast: Damus shipped NWC, zap pool, and Pending Zaps across &lt;a href=&#34;https://github.com/damus-io/damus/commits/master/?since=2023-05-10&amp;amp;until=2023-05-15&#34;&gt;May 10 through May 15&lt;/a&gt;; Snort launched &lt;a href=&#34;https://github.com/v0l/snort/commit/6cbc3ae&#34;&gt;zap pool&lt;/a&gt; and &lt;a href=&#34;https://github.com/v0l/snort/commit/d5032d6&#34;&gt;L402 paywalled media&lt;/a&gt;; &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/releases&#34;&gt;Amethyst&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub142gywvjkq0dv6nupggyn2euhx4nduwc7yz5f24ah9rpmunr2s39se3xrj0&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;amethyst&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub142g…xrj0&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; shipped roughly thirty versioned releases through the month, from v0.40.1 on May 1 through the v0.55.x range at month-end, with zap splits in v0.45.0 and NIP-32 labels in v0.46.0; the &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/commit/6654cf9&#34;&gt;Primal Android repo&lt;/a&gt; was created on May 16; &lt;a href=&#34;https://github.com/rust-nostr/nostr/releases/tag/v0.22.0&#34;&gt;rust-nostr v0.22.0&lt;/a&gt; added NIP-47 and NIP-58. On May 1, &lt;a href=&#34;https://github.com/hoytech/strfry/commit/de475c5&#34;&gt;strfry shipped its negentropy integration&lt;/a&gt;, the first relay implementation of Doug Hoyte&amp;#39;s set-reconciliation protocol that would later become NIP-77. The month closed with &lt;a href=&#34;https://www.forbes.com/sites/digital-assets/2023/05/30/bitcoin-social-network-nostr-creator-fiatjaf-/&#34;&gt;Forbes publishing a long-form profile of fiatjaf on May 30&lt;/a&gt;, one of the first mainstream-press deep dives on Nostr&amp;#39;s anonymous founder.&lt;/p&gt;

&lt;h3 id=&#34;may-2024-5&#34;&gt;May 2024&lt;/h3&gt;

&lt;p&gt;The consolidation cycle. Fewer flashy proposals, more shipping. &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/787&#34;&gt;NIP-54 Decentralized Wikis&lt;/a&gt; merged on May 2 with &lt;code&gt;kind:30818&lt;/code&gt; articles and case-normalized &lt;code&gt;d&lt;/code&gt; tags. Three days later, &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1213&#34;&gt;NIP-56&lt;/a&gt; was extended so abuse reports could flag digital threats (malware, phishing) alongside content-only categories. On May 6, &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1221&#34;&gt;NIP-25 reactions were simplified&lt;/a&gt; to stop including the entire reply thread as &lt;code&gt;e&lt;/code&gt;-tags. Arthur Franca &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1233&#34;&gt;proposed NIP-22 Comment&lt;/a&gt; on May 12, introducing &lt;code&gt;kind:1111&lt;/code&gt; so replies to non-&lt;code&gt;kind:1&lt;/code&gt; events (articles, files, products) get a structured way to thread. On May 19, fiatjaf &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1248&#34;&gt;overhauled NIP-46&lt;/a&gt; to abandon NIP-04 entirely and switch all bunker traffic to NIP-44 encryption, the deprecation move that shaped every bunker implementation since. On May 20, &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/923&#34;&gt;NIP-71 Video Events&lt;/a&gt; merged with &lt;code&gt;kind:21&lt;/code&gt; and &lt;code&gt;kind:22&lt;/code&gt;, and &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1171&#34;&gt;NIP-10&lt;/a&gt; added the optional pubkey argument on &lt;code&gt;e&lt;/code&gt; tags so clients can resolve thread authors without first fetching the referenced event. Kieran Walsh&amp;#39;s &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1175&#34;&gt;NIP-35 Torrents&lt;/a&gt; merged on May 22, and on May 24 the NIPs README first referenced &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1251&#34;&gt;CIP-01&lt;/a&gt; as an off-repo proposal, signaling the start of the &amp;#34;NIPs as one of several proposal venues&amp;#34; pattern. On May 25, a &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1254&#34;&gt;cleanup PR&lt;/a&gt; removed the &lt;code&gt;aes-256-gcm&lt;/code&gt; tag from NIP-71 before downstream implementations froze it. NIP-96 added &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1262&#34;&gt;&lt;code&gt;list files&lt;/code&gt; and dropped the transform requirement&lt;/a&gt; on May 27. On May 28, Jonathan Staab proposed &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1264&#34;&gt;raising the NIP acceptance bar&lt;/a&gt; to require at least two interoperating implementations before a draft can graduate. Client-side: Damus tagged &lt;a href=&#34;https://github.com/damus-io/damus/releases/tag/v1.7.2&#34;&gt;v1.7.2&lt;/a&gt; and &lt;a href=&#34;https://github.com/damus-io/damus/releases/tag/v1.8&#34;&gt;v1.8&lt;/a&gt; plus a &lt;a href=&#34;https://github.com/damus-io/damus/commits/v1.9&#34;&gt;v1.9 with full NIP-10 marker handling&lt;/a&gt; on May 9–10, landed &lt;a href=&#34;https://github.com/damus-io/damus/commit/8feb228&#34;&gt;NIP-98 authentication on push notifications&lt;/a&gt;, and shipped full &lt;a href=&#34;https://github.com/damus-io/damus/commit/52aefc8&#34;&gt;NIP-10 marker support&lt;/a&gt;. Amethyst made &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/commit/1f45a63&#34;&gt;NIP-17 the default DM mode&lt;/a&gt; on May 14, built out &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/commit/aa97c7e&#34;&gt;NIP-65 outbox-model relay management&lt;/a&gt;, added &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/commit/ff94f45&#34;&gt;NIP-96 server selection&lt;/a&gt;, and shipped &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/commit/04c4490&#34;&gt;NIP-06 BIP-32/BIP-39 key derivation&lt;/a&gt;. Primal Android &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/releases/tag/0.99.2&#34;&gt;0.99.2&lt;/a&gt; on May 10 added user tagging and external-wallet NWC, followed by &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/releases/tag/0.99.4&#34;&gt;0.99.4&lt;/a&gt;. Pablo Fernandez landed an &lt;a href=&#34;https://github.com/nostr-dev-kit/ndk/commits/master/?since=2024-05-01&amp;amp;until=2024-06-01&#34;&gt;NDK optimistic-update cluster&lt;/a&gt; across May 24–31. Snort added &lt;a href=&#34;https://github.com/v0l/snort/commit/5763d91&#34;&gt;NIP-96 server selection&lt;/a&gt;, and cashu-ts &lt;a href=&#34;https://github.com/cashubtc/cashu-ts/commit/3e20f45&#34;&gt;separated its crypto primitives&lt;/a&gt; into &lt;code&gt;@cashu/crypto&lt;/code&gt;.&lt;/p&gt;

&lt;h3 id=&#34;may-2025-2&#34;&gt;May 2025&lt;/h3&gt;

&lt;p&gt;The month &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1494&#34;&gt;NIP-77 (Negentropy Syncing)&lt;/a&gt; merged on May 27, fiatjaf and Doug Hoyte&amp;#39;s spec for the wire protocol that replaces brute-force REQ filters with logarithmic-cost difference computation. This was the same negentropy that strfry had shipped two years earlier as a relay-side feature, now formalized as a client-relay protocol, and &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1939&#34;&gt;the README entry&lt;/a&gt; landed the same day. The week before, &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1897&#34;&gt;NIP-23 long-form&lt;/a&gt; defined how HTML documents associate themselves with Nostr entities through a &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; tag on May 24, the canonical-web-copy primitive. NIP-25 added &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1702&#34;&gt;reaction-target relay hints&lt;/a&gt; on May 22 and &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1486&#34;&gt;dropped the emoji-to-like/dislike recommendation&lt;/a&gt;, treating emojis as distinct semantic units. NIP-52 was &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1922&#34;&gt;simplified&lt;/a&gt; on May 14 to focus on the kinds clients were shipping in production, the trim that made the Formstr calendar extensions from a year later cleaner to graft on. On May 9, &lt;a href=&#34;https://github.com/nostr-protocol/nips/commit/873afc5fb823f58c3b7f29c5090f9c56172623f2&#34;&gt;Follow Packs&lt;/a&gt; (kind 39089 curated follow lists) and &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1848&#34;&gt;Favorite Relays&lt;/a&gt; (a new replaceable list under NIP-51) entered the README on the same day. The Marmot Protocol arc had not yet begun: only the &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs&#34;&gt;whitenoise-rs&lt;/a&gt; repo existed (first commit September 9, 2024), and May 2025 was its Svelte&#43;Tauri prototype phase, with the &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/commit/b8e6754&#34;&gt;May 14 commit&lt;/a&gt; removing Tauri-specific code as the project pivoted to its current architecture. The dedicated MDK Rust core (September 12, 2025), the Marmot spec repo (September 19, 2025), and the Flutter UI (December 2, 2025) all came later in the year. On the client side, Damus&amp;#39;s &lt;a href=&#34;https://github.com/damus-io/notedeck/releases/tag/v0.4.0&#34;&gt;Notedeck v0.4.0&lt;/a&gt; shipped on May 5 as the first Beta, graduating from Alpha with full-text search, the Dave AI assistant, zaps over NWC, GIFs, user tagging, and mute lists. Two days later, hodlbod&amp;#39;s &lt;a href=&#34;https://github.com/coracle-social/flotilla/releases/tag/1.0.0&#34;&gt;Flotilla 1.0.0&lt;/a&gt; crossed the public-launch boundary as a NIP-29-based group-chat client, alongside &lt;a href=&#34;https://github.com/coracle-social/coracle/releases/tag/0.6.12&#34;&gt;Coracle 0.6.12&lt;/a&gt;, the first of six Coracle releases that ran through &lt;a href=&#34;https://github.com/coracle-social/coracle/releases/tag/0.6.17&#34;&gt;0.6.17 on May 14&lt;/a&gt;. &lt;a href=&#34;https://github.com/greenart7c3/Amber/releases/tag/v3.4.0&#34;&gt;Amber v3.4.0&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1w4uswmv6lu9yel005l3qgheysmr7tk9uvwluddznju3nuxalevvs2d0jr5&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;greenart7c3&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1w4u…0jr5&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) on May 12 moved off deprecated Android Autofill and ClipboardManager APIs and migrated from encrypted shared preferences to DataStore. Primal Android &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/releases/tag/2.2.20&#34;&gt;2.2.20&lt;/a&gt; on May 20 added the Redeem Code flow for Primal Premium and a redesigned image gallery. &lt;a href=&#34;https://github.com/fiatjaf/nak/releases/tag/v0.14.0&#34;&gt;nak v0.14.0&lt;/a&gt; on May 21 cut a minor of the canonical CLI in the same week as the Coracle, Flotilla, and Notedeck releases. OpenSats received its largest non-Bitcoin-treasury donation to date when &lt;a href=&#34;https://opensats.org/blog/opensats-receives-two-million-donation-from-the-reynolds-foundation&#34;&gt;the Reynolds Foundation gave $2 million&lt;/a&gt; on May 22.&lt;/p&gt;

&lt;h3 id=&#34;may-2026-2&#34;&gt;May 2026&lt;/h3&gt;

&lt;p&gt;The month covered in &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-05-06-newsletter/&#34;&gt;Newsletter #21&lt;/a&gt;, &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-05-13-newsletter/&#34;&gt;#22&lt;/a&gt;, &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-05-21-newsletter/&#34;&gt;#23&lt;/a&gt;, and this issue. The defining thread is MLS-on-Nostr reaching multi-client production: &lt;a href=&#34;https://github.com/marmot-protocol/mdk/releases/tag/v0.8.0&#34;&gt;MDK 0.8.0&lt;/a&gt; shipped MIP-05 leaf-index primitives and addressable key packages, followed by &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/306&#34;&gt;PR #306&lt;/a&gt; adding NIP-40 disappearing-message validation across iOS and Android through a shared UniFFI surface. &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/releases/tag/v2026.5.22%2B25&#34;&gt;White Noise v2026.5.22&#43;25&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1whtn0s68y3cs98zysa4nxrfzss5g5snhndv35tk5m2sudsr7ltms48r3ec&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;White Noise&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1wht…r3ec&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; shipped iOS push through a Notification Service Extension that decrypts MLS ciphertext inside the extension process so the broker never sees plaintext, and two new Marmot clients appeared: &lt;a href=&#34;https://github.com/DavidGershony/Scramble&#34;&gt;Scramble&lt;/a&gt; (a .NET/Avalonia desktop and Android client with multi-device KeyPackage slots) and &lt;a href=&#34;https://cordn.net&#34;&gt;Cordn&lt;/a&gt; (an alternative MLS architecture using a per-group coordinator over ContextVM). Angor migrated its encrypted messaging from NIP-04 to NIP-44 in &lt;a href=&#34;https://github.com/block-core/angor/pull/860&#34;&gt;PR #860&lt;/a&gt;, closing the deprecation arc that opened with &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/574&#34;&gt;Paul Miller&amp;#39;s NIP-44 proposal in May 2023&lt;/a&gt;. The Formstr team opened the largest coordinated NIP submission in recent memory on May 17, with &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2350&#34;&gt;PR #2350&lt;/a&gt; for participant self-removal, &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2351&#34;&gt;PR #2351&lt;/a&gt; for private calendar events and recurrence (NIP-52E and NIP-52R), and &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2352&#34;&gt;PR #2352&lt;/a&gt; for decentralized appointment scheduling, all with &lt;a href=&#34;https://calendar.formstr.app&#34;&gt;calendar.formstr.app&lt;/a&gt; already shipping the reference implementation. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/releases/tag/v1.11.0&#34;&gt;Amethyst v1.11.0&lt;/a&gt; rendered NIP-52 calendars as a first-class timeline category and extended on-chain Bitcoin zaps to split distributions. A year after &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1494&#34;&gt;NIP-77 merged in May 2025&lt;/a&gt;, three independent implementations shipped negentropy adoption in the same window: &lt;a href=&#34;https://github.com/damus-io/notedeck/pull/1459&#34;&gt;Notedeck PR #1459&lt;/a&gt; wired it into Damus&amp;#39;s desktop client for giftwrap and thread backfill, &lt;a href=&#34;https://github.com/VectorPrivacy/Vector/releases/tag/v0.4.0&#34;&gt;Vector v0.4.0&lt;/a&gt; used full-negentropy MLS sync as part of its ground-up &lt;code&gt;vector-core&lt;/code&gt; rewrite alongside one-click Tor and a 21-tool MCP agent surface, and &lt;a href=&#34;https://github.com/greenart7c3/Citrine/releases/tag/v3.0.0-pre1&#34;&gt;Citrine v3.0.0-pre1&lt;/a&gt; added it to the Android-native relay alongside built-in Tor and multi-relay aggregation. &lt;a href=&#34;https://github.com/MostroP2P/mostro/releases/tag/v0.17.4&#34;&gt;Mostro v0.17.4&lt;/a&gt; closed the anti-abuse bond loop with Phase 3 slashed-bond payouts in &lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/738&#34;&gt;PR #738&lt;/a&gt;, enforcing what the protocol previously only threatened. Three years from &amp;#34;shall we replace NIP-04&amp;#34; to &amp;#34;shall we replace NIP-44 with full MLS group state.&amp;#34;&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;If you want to discuss, DM us on Nostr.&lt;/p&gt;
 &lt;/blockquote&gt;
    </content>
    <updated>2026-05-27T17:01:10Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqswf7ec0tvyxgz49a7qankf9s3vy66z8hgr7yyg84lwsnxhq8ml9eszypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq7n96cf</id>
    
      <title type="html">Nostr Compass #23 is out. Primal 3.5 ships a rebuilt Android ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqswf7ec0tvyxgz49a7qankf9s3vy66z8hgr7yyg84lwsnxhq8ml9eszypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq7n96cf" />
    <content type="html">
      Nostr Compass #23 is out. Primal 3.5 ships a rebuilt Android shell with a new Explore screen, inline NIP-05 verification, and audio playback in link previews. Amethyst v1.10.0 adds NIP-BC onchain Bitcoin zaps end to end, with a dedicated ₿ row in the expanded reactions gallery. White Noise gains full markdown rendering for chat messages, native deep links for users, chats, and settings, and audio metadata across the MDK stack. Keycast completes a security audit covering NIP-98 HTTP auth, allowlist enforcement, default-deny policies, and SQLite foreign keys. AgentNoise lets you control local Codex and Claude coding agents from a phone over Marmot-encrypted chat. Hostr launches a P2P rental accommodation platform on Nostr with four draft NIPs covering listings, reservations, escrow services, and marketplace tags. Angor migrates encrypted messaging from NIP-04 to NIP-44 with backward-compatible fallback. KeyChat patches a forward secrecy gap by deleting Signal one-time prekeys immediately after decryption. Wisp ships private replies via NIP-17 gift wrap and DIP-03 private zaps with DM-relay routing. Mostro reaches Phase 2 of its anti-abuse bond rollout. The NIP deep dives cover NIP-07 (window.nostr for browsers) and NIP-39 (external identities in profiles).&lt;br/&gt;&lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nevent1qqsvkmaan7qvczdsyaqvywdqa8h5y6synf43mvr04uj35rf50ys5k4cpz3mhxue69uhhyetvv9ujuerpd46hxtnfduqs6amnwvaz7tmwdaejumr0dsq3vamnwvaz7tmjv4kxz7fwwpexjmtpdshxuet5qyg8wumn8ghj7mn0wd68ytnhd9hx2q3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq3rw38k&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;nevent1q…w38k&lt;/a&gt;&lt;/span&gt; &lt;/div&gt; &lt;p&gt;&lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-05-21-newsletter/&#34;&gt;https://nostrcompass.org/en/newsletters/2026-05-21-newsletter/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Primal &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub12vkcxr0luzwp8e673v29eqjhrr7p9vqq8asav85swaepclllj09sylpugg&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;primal&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub12vk…pugg&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; 3.5 ships a rebuilt Android shell, Amethyst &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub142gywvjkq0dv6nupggyn2euhx4nduwc7yz5f24ah9rpmunr2s39se3xrj0&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;amethyst&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub142g…xrj0&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; adds onchain Bitcoin zaps, White Noise &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1whtn0s68y3cs98zysa4nxrfzss5g5snhndv35tk5m2sudsr7ltms48r3ec&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;White Noise&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1wht…r3ec&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; gains markdown rendering and deep links, Keycast passes a security audit, and AgentNoise lets you control local AI coding agents over Marmot-encrypted chat. Hostr launches a P2P rental accommodation platform on Nostr with four draft NIPs covering listings, reservations, and EVM-based escrow. Angor &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1wrzguj625auyeysfuuxzf7ywhzlwfz9gm3fml2lul72gwqxw8n9swtcm02&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Angor&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1wrz…cm02&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; migrates encrypted messaging from NIP-04 to NIP-44, Dart NDK adds NIP-77 and a web signer, Alby js-sdk v8 ships native NWC multi-relay reconnect, and KeyChat &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1h0uj825jgcr9lzxyp37ehasuenq070707pj63je07n8mkcsg3u0qnsrwx8&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Keychat&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1h0u…rwx8&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; patches a forward secrecy gap in Signal one-time prekey deletion. On the protocol side, Mostro&amp;#39;s anti-abuse bond reaches Phase 2, Wisp (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1utx00neqgqln72j22kej3ux7803c2k986henvvha4thuwfkper4s7r50e8&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;utxo the webmaster 🧑‍💻&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1utx…50e8&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) ships private replies and gift-wrapped reactions, and a Namecoin NIP-05 implementation wave touches half a dozen clients in a single week.&lt;/p&gt;

&lt;h2 id=&#34;top-stories-8&#34;&gt;Top Stories&lt;/h2&gt;

&lt;h3 id=&#34;primal-3-5-for-android-2&#34;&gt;Primal 3.5 for Android&lt;/h3&gt;

&lt;p&gt;Primal, the social client backed by its own caching relay infrastructure, shipped &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/releases/tag/3.5.9&#34;&gt;3.5.9&lt;/a&gt; this week with a rebuilt application shell. The redesign replaces the previous navigation structure with an updated layout and a new Explore screen, giving the main discovery surface its own dedicated home. The release adds audio playback for link previews, so audio files embedded in notes play inline without leaving the feed. NIP-05 verification badges now display inline on profiles, surfacing identity confirmation at a glance. Notification filtering received an overhaul, letting users narrow which event types reach their notification list. The editor gained better event-link handling, and the underlying database layer received stability fixes.&lt;/p&gt;

&lt;h3 id=&#34;white-noise-markdown-deep-links-and-audio-metadata-2&#34;&gt;White Noise: markdown, deep links, and audio metadata&lt;/h3&gt;

&lt;p&gt;White Noise, the Marmot-encrypted group messaging app built on Nostr and MLS (&lt;a href=&#34;https://www.rfc-editor.org/rfc/rfc9420&#34;&gt;RFC 9420&lt;/a&gt;), had one of its busiest weeks yet across the frontend and backend repositories.&lt;/p&gt;

&lt;p&gt;On the frontend, &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/665&#34;&gt;PR #665&lt;/a&gt; adds full markdown rendering for chat messages, so bold, italic, code blocks, and links now render natively in the message view. &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/675&#34;&gt;PR #675&lt;/a&gt; enables the leave-group flow that was previously blocked for non-last admins, and &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/661&#34;&gt;PR #661&lt;/a&gt; adds native deep link support for &lt;code&gt;whitenoise://&lt;/code&gt; and &lt;code&gt;whitenoise-staging://&lt;/code&gt; URIs covering users, chats, and settings, without requiring any HTTP redirect infrastructure.&lt;/p&gt;

&lt;p&gt;On the backend in whitenoise-rs, &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/835&#34;&gt;PR #835&lt;/a&gt; makes key package rotation work properly by reusing the &lt;code&gt;d_tag&lt;/code&gt; slot for kind:30443 publishes, enabling NIP-33 replaceable event semantics so successive key package rotations replace the previous event on relays, keeping only the current key package. &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/833&#34;&gt;PR #833&lt;/a&gt; extends &lt;code&gt;FileMetadata&lt;/code&gt; with optional &lt;code&gt;duration_ms&lt;/code&gt; and &lt;code&gt;waveform&lt;/code&gt; fields for audio attachments, coordinated with MDK&amp;#39;s &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/300&#34;&gt;PR #300&lt;/a&gt; which adds the same fields to MIP-04 media tags. A new &lt;code&gt;whitenoise-markdown&lt;/code&gt; crate (&lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/836&#34;&gt;PR #836&lt;/a&gt;) replaces the previous nostr-sdk token parser with a dedicated markdown rendering library.&lt;/p&gt;

&lt;p&gt;The Marmot protocol spec itself received a security fix in &lt;a href=&#34;https://github.com/marmot-protocol/marmot/pull/68&#34;&gt;PR #68&lt;/a&gt;, which closes a security issue by explicitly specifying HKDF-SHA256 for image key derivations in MIP-01, removing ambiguity that could lead to implementation divergence. In MDK, &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/307&#34;&gt;PR #307&lt;/a&gt; sanitizes welcome failure reasons and caps stored length, closing a separate security finding.&lt;/p&gt;

&lt;h3 id=&#34;amethyst-v1-10-0-onchain-bitcoin-zaps-2&#34;&gt;Amethyst v1.10.0: Onchain Bitcoin Zaps&lt;/h3&gt;

&lt;p&gt;Amethyst shipped four releases this week, with &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/releases/tag/v1.10.0&#34;&gt;v1.10.0&lt;/a&gt; as the headline. The release adds support for NIP-BC onchain Bitcoin zaps, enabling users to send, receive, and display zaps settled directly onchain via Bitcoin transactions. Earlier releases in the run fixed Blossom blob detection to reject non-compliant filenames (&lt;a href=&#34;https://github.com/vitorpamplona/amethyst/releases/tag/v1.09.2&#34;&gt;v1.09.2&lt;/a&gt;), patched ProGuard rules for desktop builds, and merged pull request &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2977&#34;&gt;#2977&lt;/a&gt; to show onchain Bitcoin zappers as a dedicated ₿ row in the expanded reactions gallery. An in-progress on-chain transaction history screen with pagination landed in &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2974&#34;&gt;PR #2974&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&#34;agentnoise-control-coding-agents-over-white-noise-2&#34;&gt;AgentNoise: control coding agents over White Noise&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nvk/agentnoise&#34;&gt;AgentNoise&lt;/a&gt; by nvk is a Rust-native desktop helper that lets you use a phone running White Noise as the control surface for local Codex and Claude coding agent sessions. The tool listens to one or more White Noise chats, authenticates senders through a first-pairing PIN flow, and launches local coding agents through the configured launcher. Sending &lt;code&gt;/claude &amp;lt;prompt&amp;gt;&lt;/code&gt; from your phone opens a new White Noise work session named after the machine hostname and a short prompt summary, then streams progress updates and final output back to that chat. It is intentionally Rust-first and keeps Node out of the trusted bridge path. The project reached &lt;a href=&#34;https://github.com/nvk/agentnoise/releases/tag/v0.1.24&#34;&gt;v0.1.24&lt;/a&gt; this week, adding shorter phone-readable replies, job references by short unique prefix, and an opt-in local session watcher. AgentNoise drives the &lt;code&gt;wn&lt;/code&gt; and &lt;code&gt;wnd&lt;/code&gt; CLIs from &lt;code&gt;marmot-protocol/whitenoise-rs&lt;/code&gt; as subprocesses, so it shares its Nostr transport with the White Noise client itself.&lt;/p&gt;

&lt;h3 id=&#34;keycast-security-audit-complete-2&#34;&gt;Keycast security audit complete&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/marmot-protocol/keycast&#34;&gt;Keycast&lt;/a&gt;, the team-oriented NIP-46 remote signing server that stores Nostr private keys encrypted at rest in SQLite, completed a security audit in May 2026. The hardening pass addressed auth, permission, data integrity, and dependency issues, and the results are documented in &lt;a href=&#34;https://github.com/marmot-protocol/keycast/blob/master/AUDIT.md&#34;&gt;AUDIT.md&lt;/a&gt;. Changes include: NIP-98 HTTP auth now requires exactly one &lt;code&gt;u&lt;/code&gt; tag and one &lt;code&gt;method&lt;/code&gt; tag, rejects stale timestamps, and validates &lt;code&gt;payload&lt;/code&gt; hashes; the &lt;code&gt;ALLOWED_PUBKEYS&lt;/code&gt; allowlist is parsed exactly and enforced server-side; empty policies now default-deny sign/encrypt/decrypt requests; foreign-key enforcement is enabled on SQLite connections; and nested app routes such as &lt;code&gt;/teams/:id&lt;/code&gt; are protected server-side. A SQL migration normalizes old allowed-kinds permission JSON on startup. The project is still early-stage and the audit notes residual items before trusting it with real team keys.&lt;/p&gt;

&lt;h3 id=&#34;scramble-marmot-client-for-desktop-and-android-2&#34;&gt;Scramble: Marmot client for desktop and Android&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/DavidGershony/Scramble&#34;&gt;Scramble&lt;/a&gt; (formerly OpenChat) is a .NET/Avalonia desktop and Android client for the &lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot Protocol&lt;/a&gt;, implementing MIPs 00-04: KeyPackage publishing (kind:30443), group metadata with the NostrGroupData MLS extension, NIP-59 gift-wrapped welcome events (kind:444), ChaCha20-Poly1305 encrypted messages (kind:445), and Blossom encrypted media attachments. It is fully interoperable with White Noise and any other Marmot-compatible client.&lt;/p&gt;

&lt;p&gt;The project shipped 13 releases this week, with multi-device support as the main feature. Each device generates a unique KeyPackage slot (a &lt;code&gt;d&lt;/code&gt;-tag on kind:30443). On startup, Scramble fetches the user&amp;#39;s own KeyPackages from relays, detects peer device slot IDs, and automatically adds them to existing MLS groups using the staged commit flow. Auto-add is restricted to groups where the current user is admin; non-admin groups are skipped with guidance to ask the group admin. A forward-secrecy disclosure banner informs newly-linked devices that old messages are unavailable. A slot ID reconciliation pass (&lt;code&gt;TryReconcileSlotId&lt;/code&gt;) handles devices migrated from pre-multi-device versions by matching relay KeyPackage bytes against local key material to adopt the correct &lt;code&gt;d&lt;/code&gt;-tag. External signer reconnect for Amber (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1w4uswmv6lu9yel005l3qgheysmr7tk9uvwluddznju3nuxalevvs2d0jr5&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;greenart7c3&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1w4u…0jr5&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) and NIP-46 users was also fixed: the &lt;code&gt;IsConnected&lt;/code&gt; guard that blocked &lt;code&gt;ExternalSignerService&lt;/code&gt;&amp;#39;s built-in auto-reconnect was removed at all nine call sites in &lt;code&gt;NostrService&lt;/code&gt;.&lt;/p&gt;

&lt;h3 id=&#34;hostr-p2p-rental-accommodation-on-nostr-2&#34;&gt;Hostr: P2P rental accommodation on Nostr&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://hostr.network&#34;&gt;Hostr&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1cp3vl3azq9v20mju0hz4dtut8pyup9z55fxrhxt48y92md7jmvcs4wlakk&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;pats2sats&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1cp3…lakk&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) (&lt;a href=&#34;https://github.com/sudonym-btc/hostr&#34;&gt;source&lt;/a&gt;) is a peer-to-peer rental accommodation platform built entirely on Nostr. It covers the full Airbnb-style flow (searching and listing properties, negotiating reservations, and settling payments) using four draft NIPs the project is developing in parallel with the application.&lt;/p&gt;

&lt;p&gt;The accommodation NIP extends &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/99.md&#34;&gt;NIP-99&lt;/a&gt; classified listings (kind:30402 active, kind:30403 draft) with accommodation-specific tags for type (&lt;code&gt;room&lt;/code&gt;, &lt;code&gt;house&lt;/code&gt;, &lt;code&gt;apartment&lt;/code&gt;, &lt;code&gt;villa&lt;/code&gt;, &lt;code&gt;hotel&lt;/code&gt;, &lt;code&gt;hostel&lt;/code&gt;, &lt;code&gt;resort&lt;/code&gt;), check-in/check-out times, minimum stay, and H3 geospatial cell indexes for location-based search at configurable precision. The reservation NIP defines a full negotiation and lifecycle protocol: kind:32122 replaceable reservation events carry a &lt;code&gt;d&lt;/code&gt; trade ID, a listing anchor &lt;code&gt;a&lt;/code&gt; tag, and participant &lt;code&gt;p&lt;/code&gt; tags with roles (&lt;code&gt;buyer&lt;/code&gt;, &lt;code&gt;seller&lt;/code&gt;, &lt;code&gt;escrow&lt;/code&gt;); kind:1327 structured message rumors deliver private negotiate-stage counteroffers via NIP-59 gift wraps so the negotiation stays off public relays; kind:1326 append-only transition events create a public audit trail once a reservation commits. Buyer privacy is preserved through per-trade temporary Nostr keys bound to the buyer&amp;#39;s real identity via encrypted &lt;code&gt;participant_proof&lt;/code&gt; tags. The escrow NIP defines kind:30303 escrow service advertisements and kind:17388 user trust declarations; the reference implementation uses EVM smart contracts on Rootstock, with &lt;code&gt;contractBytecodeHash&lt;/code&gt; allowing clients to verify the deployed contract matches a known audited implementation. The marketplace listing NIP defines generic tags shared across all NIP-99 marketplace profiles, including &lt;code&gt;instantBook&lt;/code&gt;, &lt;code&gt;negotiable&lt;/code&gt;, &lt;code&gt;quantity&lt;/code&gt;, &lt;code&gt;securityDeposit&lt;/code&gt;, &lt;code&gt;cancellationPolicy&lt;/code&gt;, and &lt;code&gt;maxDisputePeriod&lt;/code&gt;. This week the project prepared its app store submission and merged MCP client identity support for agent-facing automation.&lt;/p&gt;

&lt;p&gt;Two new entries appeared on the Shakespeare MiniApps platform this week: &lt;a href=&#34;https://inkpress.shakespeare.wtf&#34;&gt;InkPress&lt;/a&gt;, an AI magazine generator that publishes structured magazine-style content as Nostr events, and &lt;a href=&#34;https://pressstr.shakespeare.wtf&#34;&gt;PressStr&lt;/a&gt;, a writing and publishing platform for the Soapbox stack.&lt;/p&gt;

&lt;h2 id=&#34;shipping-this-week-2&#34;&gt;Shipping this week&lt;/h2&gt;

&lt;h3 id=&#34;ngit-v2-4-4-2&#34;&gt;ngit v2.4.4&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;ngit (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub15qydau2hjma6ngxkl2cyar74wzyjshvl65za5k5rl69264ar2exs5cyejr&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;DanConwayDev&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub15qy…yejr&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;)&lt;/strong&gt; shipped &lt;a href=&#34;https://github.com/DanConwayDev/ngit-cli/releases/tag/v2.4.4&#34;&gt;v2.4.4&lt;/a&gt;, adding &lt;code&gt;ngit sync --trust-server&lt;/code&gt; (&lt;code&gt;-t&lt;/code&gt;) for cases where a git server is fast-forward ahead of Nostr state. When this situation is detected, sync reports the affected refs and requires the flag to sign and publish an updated state event; a &lt;code&gt;nostr.trust-server-domains&lt;/code&gt; git config setting provides a semicolon-separated allowlist for servers that should be trusted automatically without the flag.&lt;/p&gt;

&lt;h3 id=&#34;amber-v6-1-0-pre3-adds-psbt-signing-2&#34;&gt;Amber v6.1.0-pre3 adds PSBT signing&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Amber&lt;/strong&gt; released &lt;a href=&#34;https://github.com/greenart7c3/Amber/releases/tag/v6.1.0-pre3&#34;&gt;v6.1.0-pre3&lt;/a&gt; with improved layout for new app connections, crash fixes, and a select/deselect all option on the permissions screen. &lt;a href=&#34;https://github.com/greenart7c3/Amber/pull/438&#34;&gt;PR #438&lt;/a&gt; adds PSBT signing support through both the Intent-based and NIP-46 relay-based paths, allowing Amber to sign Partially Signed Bitcoin Transactions without exposing the nsec to the requesting app.&lt;/p&gt;

&lt;h3 id=&#34;wisp-v1-1-0-ships-private-replies-and-drops-amber-support-2&#34;&gt;Wisp v1.1.0 ships private replies and drops Amber support&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Wisp&lt;/strong&gt; released &lt;a href=&#34;https://github.com/barrydeen/wisp/releases/tag/v1.1.0&#34;&gt;v1.1.0&lt;/a&gt; with private replies via NIP-17 gift wrap (&lt;a href=&#34;https://github.com/barrydeen/wisp/pull/540&#34;&gt;PR #540&lt;/a&gt;), gift-wrapped reactions and DIP-03 zaps on private replies (&lt;a href=&#34;https://github.com/barrydeen/wisp/pull/543&#34;&gt;PR #543&lt;/a&gt;), auto-translate for notes (&lt;a href=&#34;https://github.com/barrydeen/wisp/pull/523&#34;&gt;PR #523&lt;/a&gt;), and a register-style fiat input on the zap dialog. &lt;a href=&#34;https://github.com/barrydeen/wisp/pull/541&#34;&gt;PR #541&lt;/a&gt; migrates private zaps from a homegrown DM-relay plaintext scheme to DIP-03 with proper DM-relay routing. The same release cycle removed NIP-55 remote signer support (&lt;a href=&#34;https://github.com/barrydeen/wisp/pull/531&#34;&gt;PR #531&lt;/a&gt;), dropping Amber and other external signer integrations, and removed the bundled local relay (&lt;a href=&#34;https://github.com/barrydeen/wisp/pull/533&#34;&gt;PR #533&lt;/a&gt;). Wisp is a Nostr social client for Android.&lt;/p&gt;

&lt;h3 id=&#34;calendar-by-formstr-v1-5-4-fixes-gift-wrap-for-new-participants-2&#34;&gt;Calendar by Formstr v1.5.4 fixes gift wrap for new participants&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Calendar by Formstr &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1qu7dsd44275lms4x9snnwvnnmgx926nsppmr7lcw9dlj36n4fltqgs7p98&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Form*&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1qu7…7p98&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;&lt;/strong&gt; shipped &lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.5.4&#34;&gt;v1.5.4&lt;/a&gt; (the latest in a v1.5.2 → v1.5.4 sequence). &lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar/pull/160&#34;&gt;PR #160&lt;/a&gt; fixes a bug where editing a private calendar event with new participants published the updated event with the new pubkeys in &lt;code&gt;p&lt;/code&gt; tags but never created or delivered gift wrap invitations to those participants, breaking the invite flow for last-minute additions. &lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar/pull/156&#34;&gt;PR #156&lt;/a&gt; adds error handling around private event decryption so clients no longer throw on undecryptable events, and &lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar/pull/138&#34;&gt;PR #138&lt;/a&gt; corrects recurring event times that were drifting across timezones.&lt;/p&gt;

&lt;h3 id=&#34;applesauce-v6-1-0-adds-nip-34-git-casts-and-nip-51-lookup-relays-2&#34;&gt;Applesauce v6.1.0 adds NIP-34 git casts and NIP-51 lookup relays&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Applesauce (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1ye5ptcxfyyxl5vjvdjar2ua3f0hynkjzpx552mu5snj3qmx5pzjscpknpr&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;hzrd149&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1ye5…knpr&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;)&lt;/strong&gt; released &lt;a href=&#34;https://github.com/hzrd149/applesauce/releases/tag/applesauce-core%406.1.0&#34;&gt;v6.1.0&lt;/a&gt; across its packages with significant NIP-34 (git-over-Nostr) support: applesauce-common adds new &lt;code&gt;GitRepository&lt;/code&gt;, &lt;code&gt;GitGraspList&lt;/code&gt;, and &lt;code&gt;FavoriteGitRepos&lt;/code&gt; casts plus matching factories, and exposes &lt;code&gt;User.favoriteGitRepos$&lt;/code&gt;, &lt;code&gt;User.gitAuthors$&lt;/code&gt;, and &lt;code&gt;User.graspServers$&lt;/code&gt; reactive properties so applications can list a user&amp;#39;s followed git repos, repo maintainers, and configured GRASP servers directly from the same User object. The same release adds support for NIP-51 kind 10086 lookup relay lists, a recent addition to the relay-list family used to discover where to find specific data. applesauce-core gains &lt;code&gt;replaceableAddress&lt;/code&gt; on &lt;code&gt;EventCast&lt;/code&gt; for NIP-01 replaceable address lookup, plus &lt;code&gt;pointer&lt;/code&gt;, &lt;code&gt;kind&lt;/code&gt;, and a &lt;code&gt;getReplaceableAddressForEvent&lt;/code&gt; helper, and adds a &lt;code&gt;timeline$()&lt;/code&gt; method on the base &lt;code&gt;User&lt;/code&gt; cast. &lt;a href=&#34;https://github.com/hzrd149/applesauce/pull/73&#34;&gt;PR #73&lt;/a&gt; fixes pool manual methods silently dropping offline relays.&lt;/p&gt;

&lt;h3 id=&#34;sprout-v0-0-16-ships-sprig-binary-and-huddle-protocol-v2-2&#34;&gt;Sprout v0.0.16 ships Sprig binary and huddle protocol v2&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Sprout (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub16l0ck0s5zened29dsaqtqm6z0t4fmk2mwtszw64fz7fppcnls8mss3yj9s&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;block-opensource&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub16l0…yj9s&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;)&lt;/strong&gt; by Block, a self-hosted Nostr-relay-based team workspace where humans and AI agents share the same rooms and event log, shipped &lt;a href=&#34;https://github.com/block/sprout/releases/tag/v0.0.16&#34;&gt;v0.0.16&lt;/a&gt; of the desktop app alongside rolling builds of the new Sprig all-in-one binary (&lt;a href=&#34;https://github.com/block/sprout/pull/605&#34;&gt;PR #605&lt;/a&gt;), which bundles the ACP harness, agent, and developer MCP into a single busybox-style binary for easy deployment. The &lt;code&gt;--no-memory&lt;/code&gt; flag added in &lt;a href=&#34;https://github.com/block/sprout/pull/611&#34;&gt;PR #611&lt;/a&gt; lets operators disable NIP-AE core memory injection for the ACP harness. On the realtime side, &lt;a href=&#34;https://github.com/block/sprout/pull/609&#34;&gt;PR #609&lt;/a&gt; extends the huddle voice protocol to a v2 frame header supporting up to 10 simultaneous peers.&lt;/p&gt;

&lt;h3 id=&#34;nostrord-v1-0-3-adds-os-keychain-and-multi-account-2&#34;&gt;Nostrord v1.0.3 adds OS keychain and multi-account&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Nostrord &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1ktxukd7ny5e3ghqqcn6r6hs7rh4hceaua6n77cl4ym9ye2ufzces7rzc2h&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Nostrord&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1ktx…zc2h&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;&lt;/strong&gt; released &lt;a href=&#34;https://github.com/nostrord/nostrord/releases/tag/v1.0.3&#34;&gt;v1.0.3&lt;/a&gt; with local key storage hardened using OS keychain and passphrase fallback, multi-account support, and a tappable bunker QR code that opens the signer app on Android.&lt;/p&gt;

&lt;h3 id=&#34;angor-migrates-to-nip-44-and-ships-security-hardening-2&#34;&gt;Angor migrates to NIP-44 and ships security hardening&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Angor&lt;/strong&gt;, the Bitcoin crowdfunding app built on Nostr and Taproot, shipped three unstable releases this week (&lt;a href=&#34;https://github.com/block-core/angor/releases/tag/v0.2.24&#34;&gt;v0.2.24&lt;/a&gt;, &lt;a href=&#34;https://github.com/block-core/angor/releases/tag/v0.2.25&#34;&gt;v0.2.25&lt;/a&gt;, and &lt;a href=&#34;https://github.com/block-core/angor/releases/tag/v0.2.26&#34;&gt;v0.2.26&lt;/a&gt;) with a set of security hardening and Nostr integration changes. &lt;a href=&#34;https://github.com/block-core/angor/pull/860&#34;&gt;PR #860&lt;/a&gt; migrates Nostr encrypted messaging from NIP-04 to NIP-44, replacing the deprecated XOR-based scheme with ChaCha20-Poly1305 encryption. &lt;a href=&#34;https://github.com/block-core/angor/pull/861&#34;&gt;PR #861&lt;/a&gt; allows Blossom media uploads without a selected wallet by using an ephemeral Nostr auth key, unblocking uploads for users who have not yet connected a wallet. The security series addressed several hardened categories: &lt;a href=&#34;https://github.com/block-core/angor/pull/854&#34;&gt;PR #854&lt;/a&gt; adds type safety for AngorKey and mnemonic memory protection, &lt;a href=&#34;https://github.com/block-core/angor/pull/856&#34;&gt;PR #856&lt;/a&gt; enforces protocol-level validation for timelocks, fee rates, dust thresholds, and penalty rules, and &lt;a href=&#34;https://github.com/block-core/angor/pull/851&#34;&gt;PR #851&lt;/a&gt; applies non-breaking hardening across eight medium and low severity categories. &lt;a href=&#34;https://github.com/block-core/angor/pull/859&#34;&gt;PR #859&lt;/a&gt; fixes GrapheneOS compatibility by enabling AOT compilation and removing runtime code generation, and &lt;a href=&#34;https://github.com/block-core/angor/pull/855&#34;&gt;PR #855&lt;/a&gt; prevents wallet loss on Android swipe-kill by persisting wallet state before the OS terminates the process.&lt;/p&gt;

&lt;h3 id=&#34;alby-js-sdk-v8-0-ships-nwc-multi-relay-reconnect-2&#34;&gt;Alby js-sdk v8.0 ships NWC multi-relay reconnect&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Alby js-sdk&lt;/strong&gt; released the v8.0 line (&lt;a href=&#34;https://github.com/getAlby/js-sdk/releases/tag/v8.0.1&#34;&gt;v8.0.1&lt;/a&gt; through &lt;a href=&#34;https://github.com/getAlby/js-sdk/releases/tag/v8.0.3&#34;&gt;v8.0.3&lt;/a&gt;) with NWC multi-relay subscription support. &lt;a href=&#34;https://github.com/getAlby/js-sdk/pull/516&#34;&gt;PR #516&lt;/a&gt; updates the nostr-tools dependency and enables native auto-reconnect across multiple relays, replacing the previous polling approach with relay-native reconnection logic. &lt;a href=&#34;https://github.com/getAlby/js-sdk/pull/542&#34;&gt;PR #542&lt;/a&gt; replaces all &lt;code&gt;console.debug&lt;/code&gt; calls with an injectable logger interface so application developers can route SDK diagnostics through their own logging infrastructure. The release drops the WebSocket polyfill, requiring Node.js 22 or higher for server-side consumers. v8.0.2 added a fix for a utils crypto import bug that broke certain bundlers.&lt;/p&gt;

&lt;h3 id=&#34;keychat-v1-41-1-fixes-forward-secrecy-2&#34;&gt;KeyChat v1.41.1 fixes forward secrecy&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;KeyChat&lt;/strong&gt;, a messaging app that combines the Signal protocol with Nostr relay transport, released &lt;a href=&#34;https://github.com/keychat-io/keychat-app/releases/tag/v1.41.1&#43;6513&#34;&gt;v1.41.1&#43;6513&lt;/a&gt;. The headline fix enforces forward secrecy by deleting Signal one-time prekeys immediately after a successful decryption, closing a gap where a retained prekey could be used to decrypt past messages if the device was later compromised. The release also adds URL preview for messages consisting of a single link, centralizes media auto-download under a new &lt;code&gt;FileDownloadManager&lt;/code&gt; with a 20 MB automatic threshold, and refactors NIP-11 relay info fetching to force refresh on cold start so paid relay fee configurations always load correctly.&lt;/p&gt;

&lt;h2 id=&#34;in-development-2&#34;&gt;In Development&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Citrine&lt;/strong&gt; merged &lt;a href=&#34;https://github.com/greenart7c3/Citrine/pull/151&#34;&gt;PR #151&lt;/a&gt; implementing NIP-70 enforcement: the Android relay now blocks reposts that embed protected event content, as the spec requires. &lt;a href=&#34;https://github.com/greenart7c3/Citrine/pull/149&#34;&gt;PR #149&lt;/a&gt; adds display and copy actions for multiple connection addresses, localhost, local Wi-Fi, and Tor, from the relay settings screen. &lt;a href=&#34;https://github.com/greenart7c3/Citrine/pull/141&#34;&gt;PR #141&lt;/a&gt; adds NIP-42 AUTH challenge handling through external signer integration with Amber.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mostro&lt;/strong&gt; reached Phase 2 of its anti-abuse bond rollout. &lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/737&#34;&gt;PR #737&lt;/a&gt; lands solver-directed dispute slash logic: admin handlers now consume the &lt;code&gt;BondResolution&lt;/code&gt; payload from mostro-core, allowing an admin to slash either party&amp;#39;s bond when resolving a dispute. Phase 1.5, merged in &lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/736&#34;&gt;PR #736&lt;/a&gt;, introduced a dedicated &lt;code&gt;PayBondInvoice&lt;/code&gt; action and &lt;code&gt;WaitingTakerBond&lt;/code&gt; status, separating the taker&amp;#39;s anti-abuse bond payment from the buyer&amp;#39;s trade payout. The mobile client added the full Phase 1.5 UX in &lt;a href=&#34;https://github.com/MostroP2P/mobile/pull/592&#34;&gt;PR #592&lt;/a&gt;. Mostro is a peer-to-peer Bitcoin exchange protocol built on Nostr.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Damus&lt;/strong&gt; merged &lt;a href=&#34;https://github.com/damus-io/damus/pull/3773&#34;&gt;PR #3773&lt;/a&gt; restoring the relay signal indicator, and &lt;a href=&#34;https://github.com/damus-io/damus/pull/3775&#34;&gt;PR #3775&lt;/a&gt; fixes relays that refused to reconnect after an initial connection failure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;rust-nostr&lt;/strong&gt; merged &lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1358&#34;&gt;PR #1358&lt;/a&gt; adding event finalization traits and NIP-specific event builders, making it easier to construct correctly-typed events for specific protocol functions. &lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1363&#34;&gt;PR #1363&lt;/a&gt; backports a fix ensuring the NIP-46 signer subscribes to notifications before sending the connect response, closing a race condition where client messages arriving immediately after connect could be missed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;dart-nostr&lt;/strong&gt; merged &lt;a href=&#34;https://github.com/ethicnology/dart-nostr/pull/44&#34;&gt;PR #44&lt;/a&gt; adding a Namecoin &lt;code&gt;.bit&lt;/code&gt; relay resolver and TLSA pin records, enabling Flutter applications to resolve &lt;code&gt;wss://example.bit/&lt;/code&gt; relay URLs through Namecoin DNS to their actual WebSocket addresses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dart NDK&lt;/strong&gt; (the Dart/Flutter Nostr development kit, now at &lt;code&gt;relaystr/ndk&lt;/code&gt;) merged &lt;a href=&#34;https://github.com/relaystr/ndk/pull/464&#34;&gt;PR #464&lt;/a&gt; implementing NIP-77, the offline event signing protocol. On the signer side, &lt;a href=&#34;https://github.com/relaystr/ndk/pull/602&#34;&gt;PR #602&lt;/a&gt; and &lt;a href=&#34;https://github.com/relaystr/ndk/pull/601&#34;&gt;PR #601&lt;/a&gt; add a web-specific event signer and a &lt;code&gt;PlatformEventVerifier&lt;/code&gt; abstraction, letting Flutter web apps use the platform signer without a separate code path; &lt;a href=&#34;https://github.com/relaystr/ndk/pull/604&#34;&gt;PR #604&lt;/a&gt; introduces an event signer factory for runtime signer selection. &lt;a href=&#34;https://github.com/relaystr/ndk/pull/608&#34;&gt;PR #608&lt;/a&gt; adds &lt;code&gt;getDmRelays()&lt;/code&gt; to fetch a user&amp;#39;s NIP-17 DM relay list (kind:10050), and &lt;a href=&#34;https://github.com/relaystr/ndk/pull/600&#34;&gt;PR #600&lt;/a&gt; fixes NIP-46 signed field preservation so remote signers do not lose fields on round-trip.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pages by Form*&lt;/strong&gt; (&lt;a href=&#34;https://github.com/formstr-hq/nostr-docs&#34;&gt;repo&lt;/a&gt;), Formstr&amp;#39;s Nostr-native collaborative document app hosted at &lt;a href=&#34;https://pages.formstr.app&#34;&gt;pages.formstr.app&lt;/a&gt;, merged four PRs this week tightening the encrypted-attachment and document-management flows. &lt;a href=&#34;https://github.com/formstr-hq/nostr-docs/pull/37&#34;&gt;PR #37&lt;/a&gt; fixes missing images in DOCX, HTML, and PDF exports by inlining encrypted attachments: it fetches &lt;code&gt;&amp;lt;encrypted-file&amp;gt;&lt;/code&gt; blobs from Blossom servers, decrypts them with AES-GCM 256-bit using the stored key and nonce, validates the image MIME type, and converts them to base64 data URLs so exports preserve images that only exist on Blossom in encrypted form. &lt;a href=&#34;https://github.com/formstr-hq/nostr-docs/pull/39&#34;&gt;PR #39&lt;/a&gt; adds a local document search mechanism, &lt;a href=&#34;https://github.com/formstr-hq/nostr-docs/pull/38&#34;&gt;PR #38&lt;/a&gt; cleans up the rename flow, and &lt;a href=&#34;https://github.com/formstr-hq/nostr-docs/pull/40&#34;&gt;PR #40&lt;/a&gt; fixes shared backup handling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zap Cooking&lt;/strong&gt; merged &lt;a href=&#34;https://github.com/zapcooking/frontend/pull/396&#34;&gt;PR #396&lt;/a&gt;, the first phase of a feed overhaul that lays down feed-rendering primitives without any user-visible change yet. The PR introduces a NIP-92 &lt;code&gt;imeta&lt;/code&gt; tag parser that reads the &lt;code&gt;url&lt;/code&gt;, &lt;code&gt;m&lt;/code&gt; (MIME), &lt;code&gt;dim&lt;/code&gt; (dimensions), &lt;code&gt;blurhash&lt;/code&gt;, &lt;code&gt;alt&lt;/code&gt;, &lt;code&gt;x&lt;/code&gt; (file hash), and &lt;code&gt;fallback&lt;/code&gt; slots, plus a hand-ported canonical blurhash decoder (~200 LOC) that produces PNG data URLs via canvas with an SSR-safe null fallback. When &lt;code&gt;imeta&lt;/code&gt; tags are absent the parser falls back to extracting raw image and video URLs from the event content using the same heuristics the current feed already uses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nurunuru&lt;/strong&gt; (ぬるぬる, &lt;code&gt;tami1A84/null--nostr&lt;/code&gt;), a Nostr client with native Android, iOS, and Web variants sharing a Rust FFI engine, merged its v1.5.0 Native → Web sync in &lt;a href=&#34;https://github.com/tami1A84/null--nostr/pull/176&#34;&gt;PR #176&lt;/a&gt;. The sync brings several feature additions to the Web build that already shipped on Android v1.4.9 and iOS 1.0.4: the &lt;a href=&#34;https://github.com/tami1A84/null--nostr/pull/176&#34;&gt;NotificationModal&lt;/a&gt; now surfaces birthday notifications, mutual-follow zap detection, and custom-emoji reaction notifications; the reaction picker drops the Unicode default-reactions quick-row and centers the UX on custom emoji; the recommendation engine in &lt;code&gt;lib/recommendation.js&lt;/code&gt; filters out users without icons or display names and prioritizes Following entries with Recommended loading in the background. Voice input is the one feature going the other direction: the Web build already uses ElevenLabs Scribe streaming, and v1.5.0 partial-syncs the Native side to the OS-standard &lt;code&gt;SpeechRecognizer&lt;/code&gt; (Android) and &lt;code&gt;SFSpeechRecognizer&lt;/code&gt; &#43; &lt;code&gt;AVAudioEngine&lt;/code&gt; (iOS) while the full Native Scribe integration is deferred to v1.6.&lt;/p&gt;

&lt;h2 id=&#34;protocol-and-spec-work-2&#34;&gt;Protocol and spec work&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;PR &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2251&#34;&gt;#2251&lt;/a&gt;&lt;/strong&gt; tightens the NIP-70 protected events spec: it now explicitly states that reposts embedding the full content of a protected event must be rejected by relays. NIP-70 defines the &lt;code&gt;-&lt;/code&gt; tag that signals a note author does not consent to having their note republished. The original spec covered relay filtering behavior, but left the repost case ambiguous. This PR closes that gap. Citrine&amp;#39;s &lt;a href=&#34;https://github.com/greenart7c3/Citrine/pull/151&#34;&gt;PR #151&lt;/a&gt; implements the enforcement on the relay side this same week.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PR &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1653&#34;&gt;#1653&lt;/a&gt;&lt;/strong&gt; proposes a Drafts NIP for saving and syncing private draft events. The proposal uses replaceable events with a &lt;code&gt;draft&lt;/code&gt; status and NIP-44 encryption to the author&amp;#39;s own key, letting clients save works in progress to relays without those events being visible to anyone else. The draft event carries the full intended-publication event as encrypted content, including its eventual kind and tags.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Snapshots (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2279&#34;&gt;PR #2279&lt;/a&gt;)&lt;/strong&gt; is an open proposal to define an immutable snapshot event for preserving one exact version of a replaceable Nostr event. The snapshot event carries the full content of the replaceable event at a given point in time, with an &lt;code&gt;a&lt;/code&gt; tag linking it back to the replaceable event&amp;#39;s address so all historical versions are queryable together. This makes it possible for observers to inspect historical state even after relays stop retaining old versions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Namecoin NIP-05 wave:&lt;/strong&gt; This week saw a coordinated push to add &lt;code&gt;.bit&lt;/code&gt; NIP-05 resolution to Nostr clients. The NIP discussion feed captured open-source PRs against Aegis (&lt;a href=&#34;https://github.com/ZharlieW/Aegis/pull/14&#34;&gt;#14&lt;/a&gt;, which adds sign-time verification at the signer), nostter (&lt;a href=&#34;https://github.com/SnowCait/nostter/pull/2128&#34;&gt;#2128&lt;/a&gt;), and dart-nostr (&lt;a href=&#34;https://github.com/ethicnology/dart-nostr/pull/44&#34;&gt;#44&lt;/a&gt;), alongside an upstream NIP draft (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2349&#34;&gt;PR #2349&lt;/a&gt;). The Aegis PR is notable for placing verification on the producer side: the signer checks the Namecoin chain before signing any kind:0 event that claims a &lt;code&gt;.bit&lt;/code&gt; identity and warns the user on mismatch, catching the problem before the event reaches any relay.&lt;/p&gt;

&lt;h2 id=&#34;nip-deep-dive-nip-07-window-nostr-for-web-browsers-2&#34;&gt;NIP Deep Dive: NIP-07 (window.nostr for Web Browsers)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/07.md&#34;&gt;NIP-07&lt;/a&gt; defines the &lt;code&gt;window.nostr&lt;/code&gt; interface that browser extensions expose to web applications. It is the most widely deployed signer interface on the web, implemented by extensions including Alby, nos2x, Flamingo, and horse.&lt;/p&gt;

&lt;p&gt;The interface has two required methods and several optional ones. &lt;code&gt;window.nostr.getPublicKey()&lt;/code&gt; returns the user&amp;#39;s public key as a hex string without ever exposing the private key to the calling page. &lt;code&gt;window.nostr.signEvent(event)&lt;/code&gt; takes a partial event with &lt;code&gt;created_at&lt;/code&gt;, &lt;code&gt;kind&lt;/code&gt;, &lt;code&gt;tags&lt;/code&gt;, and &lt;code&gt;content&lt;/code&gt;, and returns the complete signed event with &lt;code&gt;id&lt;/code&gt;, &lt;code&gt;pubkey&lt;/code&gt;, and &lt;code&gt;sig&lt;/code&gt; added. The key point is that the private key never leaves the extension&amp;#39;s isolated context; the web application submits an unsigned event and receives back a signed one.&lt;/p&gt;

&lt;p&gt;The optional methods cover encryption: &lt;code&gt;window.nostr.nip04.encrypt&lt;/code&gt; and &lt;code&gt;window.nostr.nip04.decrypt&lt;/code&gt; for the older NIP-04 scheme (now deprecated), and &lt;code&gt;window.nostr.nip44.encrypt&lt;/code&gt; and &lt;code&gt;window.nostr.nip44.decrypt&lt;/code&gt; for the current NIP-44 scheme. Extensions that support NIP-44 can therefore handle both direct message encryption and any other application that needs pubkey-keyed encryption without the calling page seeing the nsec.&lt;/p&gt;

&lt;p&gt;The spec also includes a recommendation to extension authors: load scripts with &lt;code&gt;&amp;#34;run_at&amp;#34;: &amp;#34;document_end&amp;#34;&lt;/code&gt; in the extension manifest so &lt;code&gt;window.nostr&lt;/code&gt; is available synchronously when the page loads, avoiding race conditions where a client checks &lt;code&gt;window.nostr&lt;/code&gt; before the extension has injected it.&lt;/p&gt;

&lt;p&gt;A key example of NIP-07 in action is the Keycast project covered above. The Keycast web frontend uses NIP-07 to sign NIP-98 HTTP auth events: the SvelteKit app never handles the user&amp;#39;s nsec directly. It calls &lt;code&gt;window.nostr.signEvent&lt;/code&gt; to produce the auth header, then sends that header to the Keycast API. This architecture means the key material stays in the browser extension throughout the entire team key management flow.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;7f8e9d0c1b2a3e4f5d6c7b8a9f0e1d2c3b4a5f6e7d8c9b0a1f2e3d4c5b6a7f8a&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1747785600,
  &amp;#34;kind&amp;#34;: 1,
  &amp;#34;tags&amp;#34;: [],
  &amp;#34;content&amp;#34;: &amp;#34;Hello from a NIP-07 signed event&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2cdd&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&#34;nip-deep-dive-nip-39-external-identities-in-profiles-2&#34;&gt;NIP Deep Dive: NIP-39 (external identities in profiles)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/39.md&#34;&gt;NIP-39&lt;/a&gt; defines how a Nostr user can declare control over external platform identities in their profile. Each declaration uses an &lt;code&gt;i&lt;/code&gt; tag inside a kind:10011 event, asserting ownership of a specific account on another platform together with a proof that can be independently verified.&lt;/p&gt;

&lt;p&gt;Each tag follows the format &lt;code&gt;[&amp;#34;i&amp;#34;, &amp;#34;platform:identity&amp;#34;, &amp;#34;proof&amp;#34;]&lt;/code&gt;, where &lt;code&gt;platform:identity&lt;/code&gt; combines the platform name and username with a colon separator (&lt;code&gt;github:semisol&lt;/code&gt;, &lt;code&gt;twitter:semisol_public&lt;/code&gt;). &lt;code&gt;proof&lt;/code&gt; points to a verifiable artifact on the platform itself.&lt;/p&gt;

&lt;p&gt;For GitHub, the proof is a Gist ID. The user creates a public Gist from their GitHub account containing the text &lt;code&gt;Verifying that I control the following Nostr public key: npub1...&lt;/code&gt;. A client verifying the claim fetches &lt;code&gt;https://gist.github.com/&amp;lt;identity&amp;gt;/&amp;lt;proof&amp;gt;&lt;/code&gt; and checks that the Gist was authored by the claimed GitHub username and contains the expected pubkey. For Twitter the proof is a tweet ID, for Mastodon a post ID, and for Telegram a message reference in a public group.&lt;/p&gt;

&lt;p&gt;The identity provider name must contain only &lt;code&gt;a-z&lt;/code&gt;, &lt;code&gt;0-9&lt;/code&gt;, and the characters &lt;code&gt;._-/&lt;/code&gt;, and must not contain &lt;code&gt;:&lt;/code&gt;. Identity names should be normalized to lowercase, with the primary alias used when multiple exist.&lt;/p&gt;

&lt;p&gt;The Namecoin &lt;code&gt;.bit&lt;/code&gt; NIP-05 discussion happening this week shows NIP-39&amp;#39;s role in the broader identity stack: it provides a standardized, relay-agnostic way to cross-reference a Nostr key with an established identity elsewhere, without requiring any central verification authority. A client can independently verify the proof by fetching a public artifact on the named platform, and the proof is bound to the specific Nostr pubkey in the Gist or tweet text, not a generic platform credential.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;7f8e9d0c1b2a3e4f5d6c7b8a9f0e1d2c3b4a5f6e7d8c9b0a1f2e3d4c5b6a7f8a&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1747785600,
  &amp;#34;kind&amp;#34;: 10011,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;i&amp;#34;, &amp;#34;github:semisol&amp;#34;, &amp;#34;9721ce4ee4fceb91c9711ca2a6c9a5ab&amp;#34;],
    [&amp;#34;i&amp;#34;, &amp;#34;twitter:semisol_public&amp;#34;, &amp;#34;1619358434134196225&amp;#34;],
    [&amp;#34;i&amp;#34;, &amp;#34;mastodon:bitcoinhackers.org/@semisol&amp;#34;, &amp;#34;109775066355589974&amp;#34;]
  ],
  &amp;#34;content&amp;#34;: &amp;#34;&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3eff&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;hr&gt;

&lt;p&gt;That&amp;#39;s it for this week. If you&amp;#39;re building something or have news to share, DM us on Nostr or find us at &lt;a href=&#34;https://nostrcompass.org&#34;&gt;nostrcompass.org&lt;/a&gt;.&lt;/p&gt;
 &lt;/blockquote&gt;
    </content>
    <updated>2026-05-20T16:25:57Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsrn5j5w08vzzw5z9heqyp5huvvyqnanxk65nu3a893hx3y3z7jr0czypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqjr67e7</id>
    
      <title type="html">Nostr Compass #22 is out. Nostr VPN ships eight releases ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsrn5j5w08vzzw5z9heqyp5huvvyqnanxk65nu3a893hx3y3z7jr0czypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqjr67e7" />
    <content type="html">
      Nostr Compass #22 is out.&lt;br/&gt;&lt;br/&gt;Nostr VPN ships eight releases culminating in v4.0.10, swapping to BoringSSL ChaCha20-Poly1305 for a 2.5x TCP throughput jump and adding sendmmsg batching and a full device-pairing UX overhaul. FIPS v0.3.0 goes cross-platform with Nostr-mediated peer discovery, NIP-59 gift-wrap NAT hole-punching, and a new gateway binary for unmodified LANs. Grain v0.6.0 lands NIP-40, NIP-50, NIP-70, and NIP-45 in one milestone; Amethyst merges 78 PRs including scheduled posts, NIP-9A community rule enforcement, and an embedded desktop relay; Flotilla 1.8.0 ships video calls and email rendering; Calendar by Formstr adds appointment scheduling. The NIP deep dives cover NIP-78 (app-specific data) and NIP-98 (HTTP Auth).&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-05-13-newsletter/&#34;&gt;https://nostrcompass.org/en/newsletters/2026-05-13-newsletter/&lt;/a&gt;&lt;br/&gt;&lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/naddr1qqgxummnw3ez6cm0d4cxzumn95eryqg5waehxw309aex2mrp0yhxgctdw4eju6t0qyxhwumn8ghj7mn0wvhxcmmvqyt8wumn8ghj7un9d3shjtnswf5k6ctv9ehx2aqzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqqcyqqq823cvznrgu&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;naddr1qq…nrgu&lt;/a&gt;&lt;/span&gt; &lt;/div&gt; &lt;p&gt;Welcome back to Nostr Compass, your weekly guide to Nostr protocol development.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This week:&lt;/strong&gt; &lt;a href=&#34;https://github.com/mmalmi/nostr-vpn&#34;&gt;Nostr VPN&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1klgggm0e8jmjzde5sswx0ger4fzmkfjqy9erdsq79fqsz80kzlzsz9ky7h&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;npub1klgggm0e8jmjzde5sswx0ger4fzmkfjqy9erdsq79fqsz80kzlzsz9ky7h&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1klg…ky7h&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) ships &lt;a href=&#34;#nostr-vpn-ships-eight-releases-culminating-in-v4010&#34;&gt;eight releases in seven days&lt;/a&gt; from a redesigned device-pairing flow through a FIPS AEAD swap that roughly doubles TCP throughput. &lt;a href=&#34;https://github.com/marmot-protocol&#34;&gt;Marmot Protocol&lt;/a&gt; (the foundation for &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise&#34;&gt;White Noise&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1whtn0s68y3cs98zysa4nxrfzss5g5snhndv35tk5m2sudsr7ltms48r3ec&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;White Noise&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1wht…r3ec&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) ships a &lt;a href=&#34;#marmot-white-noise-ships-blocking-complete-frontend-and-31-merged-prs-across-mdk-and-backend&#34;&gt;frontend release completing the user-blocking feature&lt;/a&gt; and 31 merged PRs across MDK and backend. &lt;a href=&#34;https://github.com/0ceanSlim/grain&#34;&gt;Grain&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1zmc6qyqdfnllhnzzxr5wpepfpnzcf8q6m3jdveflmgruqvd3qa9sjv7f60&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;OceanSlim&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1zmc…7f60&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) ships &lt;a href=&#34;#grain-v060-adds-nip-40-nip-50-nip-70-and-nip-45&#34;&gt;v0.6.0&lt;/a&gt; with four new NIP implementations in one milestone. &lt;a href=&#34;https://github.com/greenart7c3/Citrine&#34;&gt;Citrine&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1w4uswmv6lu9yel005l3qgheysmr7tk9uvwluddznju3nuxalevvs2d0jr5&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;greenart7c3&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1w4u…0jr5&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) ships &lt;a href=&#34;#citrine-v300-pre1-lands-built-in-tor-and-relay-aggregation&#34;&gt;v3.0.0-pre1&lt;/a&gt; with built-in Tor and relay aggregation. &lt;a href=&#34;https://github.com/greenart7c3/Amber&#34;&gt;Amber&lt;/a&gt; ships &lt;a href=&#34;#amber-v610-pre2-improves-new-app-connection-flow&#34;&gt;v6.1.0-pre2&lt;/a&gt; with connection-flow and signing improvements. &lt;a href=&#34;https://github.com/getAlby/hub&#34;&gt;Alby Hub&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1getal6ykt05fsz5nqu4uld09nfj3y3qxmv8crys4aeut53unfvlqr80nfm&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Alby&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1get…0nfm&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; ships &lt;a href=&#34;#alby-hub-v1222-adds-ai-and-agents-page-and-core-lightning-support&#34;&gt;v1.22.2&lt;/a&gt; with an AI and Agents page and Core Lightning integration. &lt;a href=&#34;https://github.com/MostroP2P/mostro&#34;&gt;Mostro&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1m0str0d7z2ww8rdh20t2n9lx520xjwhaq24p68umqp06wwrwtsnqen40un&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Mostro&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1m0s…40un&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; ships concurrent taker bonds and &lt;a href=&#34;#mostro-ships-concurrent-taker-bonds-and-mostro-core-v0110&#34;&gt;mostro-core v0.11.0&lt;/a&gt;. &lt;a href=&#34;https://github.com/CodyTseng/jumble&#34;&gt;Jumble&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub17n4cuc4d6y6qh89dekvxrenfkt5s0n49xns00uavjaxpr36c55dq87fyh9&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Jumble&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub17n4…fyh9&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; ships &lt;a href=&#34;#jumble-ships-five-releases-with-recent-search-and-account-persistence&#34;&gt;five releases&lt;/a&gt; with recent search history and account-data persistence fixes. &lt;a href=&#34;https://github.com/nostrord/nostrord&#34;&gt;Nostrord&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1ktxukd7ny5e3ghqqcn6r6hs7rh4hceaua6n77cl4ym9ye2ufzces7rzc2h&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Nostrord&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1ktx…zc2h&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; ships &lt;a href=&#34;#nostrord-ships-group-share-modals-media-upload-and-arch-linux-packages&#34;&gt;three releases&lt;/a&gt; with group share modals and Arch Linux packages. &lt;a href=&#34;https://flotilla.social&#34;&gt;Flotilla&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1jlrs53pkdfjnts29kveljul2sm0actt6n8dxrrzqcersttvcuv3qdjynqn&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;hodlbod&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1jlr…ynqn&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) ships &lt;a href=&#34;#flotilla-180-ships-video-calls-email-rendering-and-room-mentions&#34;&gt;1.8.0&lt;/a&gt; with video calls, email rendering, and room mentions. &lt;a href=&#34;https://calendar.formstr.app&#34;&gt;Calendar by Formstr&lt;/a&gt; ships &lt;a href=&#34;#calendar-by-formstr-ships-v150-with-appointment-scheduling-and-android-calendar-sync&#34;&gt;v1.5.0&lt;/a&gt; with appointment scheduling and Android calendar sync. &lt;a href=&#34;https://github.com/jmcorgan/fips&#34;&gt;FIPS&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub19wavu4f7l6l43h24jyskn7fvzy37kcfp67aqjtmv2qgy4lp34nhsda8p6k&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;jcorgan&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub19wa…8p6k&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) ships &lt;a href=&#34;#fips-v030-ships-cross-platform-reach-nostr-peer-discovery-and-a-gateway-for-unmodified-lans&#34;&gt;v0.3.0&lt;/a&gt; going cross-platform with Nostr-mediated peer discovery, NAT hole-punching via NIP-59 gift-wrap, and a new gateway binary for unmodified LAN hosts. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst&#34;&gt;Amethyst&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub142gywvjkq0dv6nupggyn2euhx4nduwc7yz5f24ah9rpmunr2s39se3xrj0&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;amethyst&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub142g…xrj0&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; merges &lt;a href=&#34;#amethyst-adds-scheduled-posts-nip-9a-community-rules-and-a-desktop-local-relay&#34;&gt;scheduled posts, NIP-9A community rule enforcement, and an embedded desktop relay&lt;/a&gt; across 78 PRs. &lt;a href=&#34;https://github.com/block/sprout&#34;&gt;Sprout&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub16l0ck0s5zened29dsaqtqm6z0t4fmk2mwtszw64fz7fppcnls8mss3yj9s&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;block-opensource&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub16l0…yj9s&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) ships &lt;a href=&#34;#sprout-ships-v0010-and-v0011&#34;&gt;v0.0.10 and v0.0.11&lt;/a&gt; with image handling and agent error fixes. &lt;a href=&#34;https://github.com/DocNR/clave&#34;&gt;Clave&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1claveqd4fwqj5rsssmg3f5sa97qc8sh8rq5x607em9s8hth3t54qyc539g&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;clave&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1cla…539g&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) &lt;a href=&#34;#clave-continues-multi-account-nostrconnect-rollout&#34;&gt;continues its multi-account NostrConnect rollout&lt;/a&gt; with a unified Connect tab and a bunker connection-cap security fix. &lt;a href=&#34;https://github.com/Negr087/tamagostrich&#34;&gt;Tamagostrich&lt;/a&gt; &lt;a href=&#34;#tamagostrich-launches-a-decentralized-nip-78-tamagotchi-with-sats-rewards&#34;&gt;launches&lt;/a&gt; as a decentralized NIP-78 Tamagotchi where your pet&amp;#39;s state lives on Nostr and milestones pay out sats via NIP-47. The NIP discussions surface &lt;a href=&#34;#protocol-and-spec-work&#34;&gt;five new proposals&lt;/a&gt; including Reservations, Escrow Services, Accommodation Listings, Onchain Zaps, and verifiable community rules. Two NIP deep dives cover &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-78/&#34;&gt;NIP-78&lt;/a&gt; (app-specific data) and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-98/&#34;&gt;NIP-98&lt;/a&gt; (HTTP Auth).&lt;/p&gt;

&lt;h2 id=&#34;top-stories-11&#34;&gt;Top Stories&lt;/h2&gt;

&lt;h3 id=&#34;nostr-vpn-ships-eight-releases-culminating-in-v4-0-10-2&#34;&gt;Nostr VPN ships eight releases culminating in v4.0.10&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/mmalmi/nostr-vpn&#34;&gt;Nostr VPN&lt;/a&gt;, the Rust-based decentralized mesh VPN using Nostr for peer discovery and a FIPS-backed noise protocol for the data plane, shipped eight releases from &lt;a href=&#34;https://github.com/mmalmi/nostr-vpn/releases/tag/v4.0.1&#34;&gt;v4.0.1&lt;/a&gt; to &lt;a href=&#34;https://github.com/mmalmi/nostr-vpn/releases/tag/v4.0.10&#34;&gt;v4.0.10&lt;/a&gt; across macOS, Linux, Windows, and Android this week.&lt;/p&gt;

&lt;p&gt;The headline change is in &lt;a href=&#34;https://github.com/mmalmi/nostr-vpn/releases/tag/v4.0.8&#34;&gt;v4.0.8&lt;/a&gt;: the AEAD was swapped from the RustCrypto &lt;code&gt;chacha20poly1305&lt;/code&gt; soft backend to BoringSSL&amp;#39;s ChaCha20-Poly1305 in &lt;code&gt;ring&lt;/code&gt; 0.17, which uses hand-tuned NEON on aarch64 and AVX2/AVX-512 on x86_64. Docker benchmarks on identical hardware showed 2-node direct TCP throughput jumping from 437 to 1097 Mbps. The wire format is unchanged.&lt;/p&gt;

&lt;p&gt;Earlier in the week, &lt;a href=&#34;https://github.com/mmalmi/nostr-vpn/releases/tag/v4.0.1&#34;&gt;v4.0.1&lt;/a&gt; rebuilt the device-pairing flow with exit-node leak protection, a unified WireGuard config block under Exit Nodes, and signed/notarized macOS artifacts. &lt;a href=&#34;https://github.com/mmalmi/nostr-vpn/releases/tag/v4.0.2&#34;&gt;v4.0.2&lt;/a&gt; improved LAN discovery with reusable multicast sockets so same-LAN peers prefer direct underlay paths. &lt;a href=&#34;https://github.com/mmalmi/nostr-vpn/releases/tag/v4.0.6&#34;&gt;v4.0.6&lt;/a&gt; fixed a NAT traversal regression where a tunnel MTU bump caused full-sized datagrams to drop silently on adopted UDP transports. &lt;a href=&#34;https://github.com/mmalmi/nostr-vpn/releases/tag/v4.0.9&#34;&gt;v4.0.9&lt;/a&gt; added &lt;code&gt;sendmmsg(2)&lt;/code&gt; batching on the UDP send path, amortising per-packet &lt;code&gt;sendto&lt;/code&gt; syscalls across 8-packet batches and pushing TCP single-stream from 1066 to 1548 Mbps (1.45×). &lt;a href=&#34;https://github.com/mmalmi/nostr-vpn/releases/tag/v4.0.10&#34;&gt;v4.0.10&lt;/a&gt; shipped a full UX overhaul for device pairing: Invite Devices and Join Network are now separate cards, auto-import fires on paste of an &lt;code&gt;nvpn://invite/&lt;/code&gt; string, scan/paste/from-file buttons gained text labels, and nearby pairing split into two independent 15-minute toggles. Windows multicast now joins every non-loopback interface so same-LAN peers are reliably discovered on multi-NIC hosts. A userspace WireGuard upstream runtime (boringtun-based) lands for macOS, enabling Mullvad/Proton-style exit routing without a kernel WG implementation.&lt;/p&gt;

&lt;h3 id=&#34;marmot-white-noise-ships-frontend-release-completing-user-blocking-and-31-merged-prs-across-mdk-and-backend-2&#34;&gt;Marmot / White Noise ships frontend release completing user-blocking and 31 merged PRs across MDK and backend&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/marmot-protocol/whitenoise&#34;&gt;White Noise&lt;/a&gt;, the private group messaging app built on the &lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt; MLS-based protocol, shipped &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/releases/tag/v2026.5.7&#43;24&#34;&gt;v2026.5.7&#43;24&lt;/a&gt; on May 7 as the frontend release that completes the blocking feature set. The previous release shipped mute, search, and archive; this one finishes blocking. A blocked user is now hidden from invites, chat previews, message timelines, search results, and notifications, and their messages no longer count toward unread badges. Video attachments work end to end across devices. The offline notice now covers every screen.&lt;/p&gt;

&lt;p&gt;The supporting work spans 31 merged PRs across MDK and the backend. MDK landed &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/258&#34;&gt;PR #258&lt;/a&gt; with the extension v3 wire format and &lt;code&gt;disappearing_message_secs&lt;/code&gt; schema, laying the groundwork for disappearing messages.&lt;/p&gt;

&lt;p&gt;Frontend work includes &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/653&#34;&gt;PR #653&lt;/a&gt; fixing archived chat summaries by switching to a point query so archived chats render correctly, &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/644&#34;&gt;PR #644&lt;/a&gt; exposing a &lt;code&gt;subscribe_to_group_state&lt;/code&gt; stream to Dart for reactive UI updates, and &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/635&#34;&gt;PR #635&lt;/a&gt; fixing Android external signer notification recovery when the signer app is cold-started.&lt;/p&gt;

&lt;h3 id=&#34;grain-v0-6-0-adds-nip-40-nip-50-nip-70-and-nip-45-2&#34;&gt;Grain v0.6.0 adds NIP-40, NIP-50, NIP-70, and NIP-45&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/0ceanSlim/grain&#34;&gt;Grain&lt;/a&gt;, the Go-based Nostr relay and client library, shipped &lt;a href=&#34;https://github.com/0ceanSlim/grain/releases/tag/v0.6.0&#34;&gt;v0.6.0&lt;/a&gt; on May 6 with four new NIP implementations and a production-hardening pass. The v0.6 milestone adds &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/40.md&#34;&gt;NIP-40&lt;/a&gt; event expiration, &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/50.md&#34;&gt;NIP-50&lt;/a&gt; full-text search, &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/70.md&#34;&gt;NIP-70&lt;/a&gt; protected events, and &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/45.md&#34;&gt;NIP-45&lt;/a&gt; event counts.&lt;/p&gt;

&lt;p&gt;Event expiration via &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/40.md&#34;&gt;NIP-40&lt;/a&gt; lets publishers set an expiry timestamp so the relay discards events after they expire, used in practice for ephemeral presence events and time-limited announcements. &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/50.md&#34;&gt;NIP-50&lt;/a&gt; full-text search lets clients issue &lt;code&gt;search&lt;/code&gt; filters in REQ messages and let the relay do the matching work. Protected events via &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/70.md&#34;&gt;NIP-70&lt;/a&gt; prevent relays from resharing events without the author&amp;#39;s explicit permission. &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/45.md&#34;&gt;NIP-45&lt;/a&gt; count queries let clients ask a relay to return a count of matching events, reducing bandwidth for &amp;#34;how many notes does this user have&amp;#34; style queries.&lt;/p&gt;

&lt;p&gt;The release also ships production hardening: safer default configurations, corrected NIP-01 rejection responses, and better backpressure for slow consumers.&lt;/p&gt;

&lt;h2 id=&#34;shipping-this-week-5&#34;&gt;Shipping this week&lt;/h2&gt;

&lt;h3 id=&#34;citrine-v3-0-0-pre1-lands-built-in-tor-and-relay-aggregation-2&#34;&gt;Citrine v3.0.0-pre1 lands built-in Tor and relay aggregation&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/greenart7c3/Citrine&#34;&gt;Citrine&lt;/a&gt;, the Android app that turns a phone into a Nostr relay node, shipped &lt;a href=&#34;https://github.com/greenart7c3/Citrine/releases/tag/v3.0.0-pre1&#34;&gt;v3.0.0-pre1&lt;/a&gt; as a pre-release this week. The headline additions are built-in Tor support for privacy-preserving relay access and relay aggregation, where Citrine can pull events from multiple upstream relays and serve them to local clients. &lt;a href=&#34;https://github.com/greenart7c3/Citrine/pull/139&#34;&gt;PR #139&lt;/a&gt; adds &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-77/&#34;&gt;NIP-77 (Negentropy Reconciliation)&lt;/a&gt; support for efficient set-reconciliation-based event sync. &lt;a href=&#34;https://github.com/greenart7c3/Citrine/pull/137&#34;&gt;PR #137&lt;/a&gt; routes all URLs through the Tor proxy, &lt;a href=&#34;https://github.com/greenart7c3/Citrine/pull/133&#34;&gt;PR #133&lt;/a&gt; relieves UI thread pressure on the event-receive path, and &lt;a href=&#34;https://github.com/greenart7c3/Citrine/pull/132&#34;&gt;PR #132&lt;/a&gt; reduces battery drain from the relay aggregator. The release also adds an event analytics view with a pie chart breaking down stored events by kind.&lt;/p&gt;

&lt;h3 id=&#34;amber-v6-1-0-pre2-improves-new-app-connection-flow-2&#34;&gt;Amber v6.1.0-pre2 improves new-app connection flow&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/greenart7c3/Amber&#34;&gt;Amber&lt;/a&gt;, the Android signer app for &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-55/&#34;&gt;NIP-55 (Android Signer Application)&lt;/a&gt; and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt;, shipped &lt;a href=&#34;https://github.com/greenart7c3/Amber/releases/tag/v6.1.0-pre2&#34;&gt;v6.1.0-pre2&lt;/a&gt;. The main fixes: the signer dialog now closes correctly after accepting a bunker request, malformed bunker requests show an invalid-request screen, and rate limiting is added for intent-based signing requests. &lt;a href=&#34;https://github.com/greenart7c3/Amber/pull/430&#34;&gt;PR #430&lt;/a&gt; fixes memory leaks and hot-path inefficiencies in the signing flow.&lt;/p&gt;

&lt;h3 id=&#34;alby-hub-v1-22-2-adds-ai-and-agents-page-and-core-lightning-support-2&#34;&gt;Alby Hub v1.22.2 adds AI and Agents page and Core Lightning support&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/getAlby/hub&#34;&gt;Alby Hub&lt;/a&gt;, the self-custodial Lightning node and Nostr Wallet Connect server, shipped &lt;a href=&#34;https://github.com/getAlby/hub/releases/tag/v1.22.2&#34;&gt;v1.22.2&lt;/a&gt; with several major additions. The new AI and Agents page exposes Alby Hub&amp;#39;s Lightning and NWC capabilities to AI agents and MCP-compatible tools. An integrated on-chain wallet mode lets users receive and send on-chain Bitcoin directly from Alby Hub. Custom user labels for transactions improve bookkeeping. Settings pages were redesigned for clarity, and budget selection was improved when creating app connections. The most-requested feature since launch shipped: Core Lightning (CLN) is now a supported backend alongside LND and LDK.&lt;/p&gt;

&lt;h3 id=&#34;mostro-ships-concurrent-taker-bonds-and-mostro-core-v0-11-0-2&#34;&gt;Mostro ships concurrent taker bonds and mostro-core v0.11.0&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/MostroP2P/mostro&#34;&gt;Mostro&lt;/a&gt;, the peer-to-peer Bitcoin trading protocol on Nostr, merged 11 PRs this week advancing the taker bond feature that prevents griefing by requiring both parties to lock funds before a trade proceeds. &lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/733&#34;&gt;PR #733&lt;/a&gt; implements concurrent taker bonds where multiple takers can submit bond invoices simultaneously and the first to lock wins, discarding the others. &lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/735&#34;&gt;PR #735&lt;/a&gt; aligns the bond invoice memo with spec section 6.1, and &lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/730&#34;&gt;PR #730&lt;/a&gt; documents &lt;code&gt;cancel_action&lt;/code&gt; handling for the &lt;code&gt;WaitingTakerBond&lt;/code&gt; status.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/MostroP2P/mostro-core&#34;&gt;mostro-core&lt;/a&gt; shipped &lt;a href=&#34;https://github.com/MostroP2P/mostro-core/releases/tag/v0.11.0&#34;&gt;v0.11.0&lt;/a&gt; with the matching library additions: &lt;a href=&#34;https://github.com/MostroP2P/mostro-core/pull/144&#34;&gt;PR #144&lt;/a&gt; adds &lt;code&gt;Action::PayBondInvoice&lt;/code&gt; and &lt;code&gt;Status::WaitingTakerBond&lt;/code&gt;, and &lt;a href=&#34;https://github.com/MostroP2P/mostro-core/pull/143&#34;&gt;PR #143&lt;/a&gt; adds the &lt;code&gt;BondResolution&lt;/code&gt; payload for admin settle and cancel actions. &lt;a href=&#34;https://github.com/MostroP2P/mostro-cli&#34;&gt;mostro-cli&lt;/a&gt; shipped &lt;a href=&#34;https://github.com/MostroP2P/mostro-cli/releases/tag/v0.15.0&#34;&gt;v0.15.0&lt;/a&gt; updating to mostro-core 0.11.0 and handling the anti-abuse bond flow.&lt;/p&gt;

&lt;h3 id=&#34;jumble-ships-five-releases-with-recent-search-and-account-persistence-2&#34;&gt;Jumble ships five releases with recent search and account persistence&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/CodyTseng/jumble&#34;&gt;Jumble&lt;/a&gt;, the relay-centric Nostr client available as both a web app and Electron desktop app, shipped five releases this week: &lt;a href=&#34;https://github.com/CodyTseng/jumble/releases/tag/v26.5.2&#34;&gt;v26.5.2&lt;/a&gt; through &lt;a href=&#34;https://github.com/CodyTseng/jumble/releases/tag/v26.5.6&#34;&gt;v26.5.6&lt;/a&gt;. &lt;a href=&#34;https://github.com/CodyTseng/jumble/releases/tag/v26.5.2&#34;&gt;v26.5.2&lt;/a&gt; groups notifications by Today / This week / This month / Earlier with sticky date headers and replaces the third-party pull-to-refresh library with a native component. &lt;a href=&#34;https://github.com/CodyTseng/jumble/releases/tag/v26.5.3&#34;&gt;v26.5.3&lt;/a&gt; ships a macOS &lt;code&gt;.zip&lt;/code&gt; alongside the &lt;code&gt;.dmg&lt;/code&gt; so the Electron desktop build can apply in-place auto-updates (electron-updater cannot install from a &lt;code&gt;.dmg&lt;/code&gt;). &lt;a href=&#34;https://github.com/CodyTseng/jumble/releases/tag/v26.5.4&#34;&gt;v26.5.4&lt;/a&gt; adds a self-implemented emoji picker with emoji-pack tabs. &lt;a href=&#34;https://github.com/CodyTseng/jumble/releases/tag/v26.5.5&#34;&gt;v26.5.5&lt;/a&gt; adds recent search history. A critical persistence bug is fixed in &lt;a href=&#34;https://github.com/CodyTseng/jumble/releases/tag/v26.5.6&#34;&gt;v26.5.6&lt;/a&gt;: accounts and cached data now survive a full app restart after the renderer was moved to a stable &lt;code&gt;app://&lt;/code&gt; origin.&lt;/p&gt;

&lt;h3 id=&#34;nostrord-ships-group-share-modals-media-upload-and-arch-linux-packages-2&#34;&gt;Nostrord ships group share modals, media upload, and Arch Linux packages&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostrord/nostrord&#34;&gt;Nostrord&lt;/a&gt;, a Nostr client targeting NIP-29 relay-based groups, shipped &lt;a href=&#34;https://github.com/nostrord/nostrord/releases/tag/v1.0.0&#34;&gt;v1.0.0&lt;/a&gt;, &lt;a href=&#34;https://github.com/nostrord/nostrord/releases/tag/v1.0.1&#34;&gt;v1.0.1&lt;/a&gt;, and &lt;a href=&#34;https://github.com/nostrord/nostrord/releases/tag/v1.0.2&#34;&gt;v1.0.2&lt;/a&gt; this week. &lt;a href=&#34;https://github.com/nostrord/nostrord/releases/tag/v1.0.1&#34;&gt;v1.0.1&lt;/a&gt; ships Arch Linux packages via AUR as &lt;code&gt;nostrord-bin&lt;/code&gt; with PGP-signed &lt;code&gt;.pkg.tar.zst&lt;/code&gt; artifacts (&lt;a href=&#34;https://github.com/nostrord/nostrord/pull/44&#34;&gt;PR #44&lt;/a&gt;), a jump-to-latest button when scrolled up in a busy channel (&lt;a href=&#34;https://github.com/nostrord/nostrord/pull/45&#34;&gt;PR #45&lt;/a&gt;), and image and media pasting directly in the chat input (&lt;a href=&#34;https://github.com/nostrord/nostrord/pull/46&#34;&gt;PR #46&lt;/a&gt;). &lt;a href=&#34;https://github.com/nostrord/nostrord/releases/tag/v1.0.2&#34;&gt;v1.0.2&lt;/a&gt; adds group sharing via &lt;a href=&#34;https://github.com/nostrord/nostrord/pull/49&#34;&gt;PR #49&lt;/a&gt; with a share modal that generates both a &lt;code&gt;nostr:naddr&lt;/code&gt; URI (kind 39000, NIP-19 &#43; NIP-21) and a web-friendly &lt;code&gt;nostrord.com/open/&lt;/code&gt; link so groups can be shared across clients and platforms.&lt;/p&gt;

&lt;h3 id=&#34;fips-v0-3-0-ships-cross-platform-reach-nostr-peer-discovery-and-a-gateway-for-unmodified-lans-2&#34;&gt;FIPS v0.3.0 ships cross-platform reach, Nostr peer discovery, and a gateway for unmodified LANs&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/jmcorgan/fips&#34;&gt;FIPS&lt;/a&gt; (Free Internetworking Peering System), the Nostr-native mesh networking project covered in &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-04-29-newsletter/#fips-adds-nostr-based-udpnat-bootstrap&#34;&gt;#20&lt;/a&gt;, shipped &lt;a href=&#34;https://github.com/jmcorgan/fips/releases/tag/v0.3.0&#34;&gt;v0.3.0&lt;/a&gt; this week, a major milestone that widens the project from Linux-only to Linux, macOS, Windows, and OpenWrt.&lt;/p&gt;

&lt;p&gt;The headline addition is Nostr-mediated peer discovery with STUN-assisted UDP NAT traversal. Nodes now publish signed overlay adverts as kind:37195 parameterized replaceable events (the digits spell FIPS: 7=F, 1=I, 9=P, 5=S) on public Nostr relays. When both peers are behind NAT, the daemon coordinates a hole punch using &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-59/&#34;&gt;NIP-59 (Gift Wrap)&lt;/a&gt; signaling for the offer/answer exchange. Previously, nodes could only peer if they already knew each other&amp;#39;s address.&lt;/p&gt;

&lt;p&gt;A new &lt;code&gt;fips-gateway&lt;/code&gt; binary lets unmodified LAN hosts reach mesh destinations without running the FIPS daemon. DNS lookups for &lt;code&gt;.fips&lt;/code&gt; names get virtual IPs from a &lt;code&gt;fd01::/112&lt;/code&gt; pool; &lt;code&gt;gateway.port_forwards&lt;/code&gt; config exposes LAN services to mesh peers. The gateway is enabled by default in the OpenWrt build, targeting consumer-grade router deployments.&lt;/p&gt;

&lt;p&gt;The same ring 0.17 ChaCha20-Poly1305 swap that powered the Nostr VPN throughput jump this week also lands in FIPS v0.3.0, contributed by &lt;a href=&#34;https://github.com/mmalmi&#34;&gt;@mmalmi&lt;/a&gt;, the Nostr VPN maintainer. Benchmarks on aarch64 show two-node TCP single-stream going from 437 to 1097 Mbps and three-node relay-path ping latency dropping from 7.68 ms average to 0.72 ms. Peer ACL via &lt;code&gt;/etc/fips/peers.allow&lt;/code&gt; and &lt;code&gt;/etc/fips/peers.deny&lt;/code&gt; files and an opt-in default-deny nftables baseline for the mesh interface also ship in this release.&lt;/p&gt;

&lt;h3 id=&#34;camelus-v1-10-1-ships-desktop-builds-2&#34;&gt;Camelus v1.10.1 ships desktop builds&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/leo-lox/camelus&#34;&gt;Camelus&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1camelhq7t54m7hkata58sklug2vm83masprf2lx8n0zdykke6vcqxl9339&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;camelus.app&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1cam…9339&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;, the Nostr client for Android and desktop, shipped &lt;a href=&#34;https://github.com/leo-lox/camelus/releases/tag/v1.10.1&#34;&gt;v1.10.1&lt;/a&gt; with Windows and Linux desktop builds, expanding from mobile-only distribution.&lt;/p&gt;

&lt;h3 id=&#34;flotilla-1-8-0-ships-video-calls-email-rendering-and-room-mentions-2&#34;&gt;Flotilla 1.8.0 ships video calls, email rendering, and room mentions&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://flotilla.social&#34;&gt;Flotilla&lt;/a&gt;, the &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-29/&#34;&gt;NIP-29&lt;/a&gt; relay-based group chat app from hodlbod, shipped &lt;a href=&#34;https://gitea.coracle.social/coracle/flotilla/src/tag/1.8.0&#34;&gt;1.8.0&lt;/a&gt; this week with several notable additions. Voice rooms now support video: participants can turn on cameras or share their screen mid-call, with a grid layout that switches to a pinnable single-feed view for screen sharing. Email rendering arrives via an update to the welshman library: Flotilla can now receive messages that embed HTML email content, such as forwards from email bridges or email-to-Nostr gateways, and renders the HTML inline with formatting, images, and links intact. Interoperability projects routing email into NIP-29 group spaces can now deliver readable, formatted messages to Flotilla users without stripping HTML. Room mentions let users reference other rooms and relays with clickable inline links. Space search now includes message content and local matches alongside channel names. The native share sheet on iOS and Android now works for space invite links. Calendar events embedded in chat always show the date.&lt;/p&gt;

&lt;h3 id=&#34;calendar-by-formstr-ships-v1-5-1-with-appointment-scheduling-and-android-calendar-sync-2&#34;&gt;Calendar by Formstr ships v1.5.1 with appointment scheduling and Android calendar sync&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://calendar.formstr.app&#34;&gt;Calendar by Formstr&lt;/a&gt; (&lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar&#34;&gt;github.com/formstr-hq/nostr-calendar&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1qu7dsd44275lms4x9snnwvnnmgx926nsppmr7lcw9dlj36n4fltqgs7p98&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Form*&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1qu7…7p98&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), a Nostr-native calendar app for public and private events, shipped &lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.5.0&#34;&gt;v1.5.0&lt;/a&gt; on May 10 and &lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.5.1&#34;&gt;v1.5.1&lt;/a&gt; on May 11. Appointment scheduling arrives in &lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar/pull/89&#34;&gt;PR #89&lt;/a&gt;, letting users create bookable time slots on their calendar. Read-only Android calendar integration in &lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar/pull/123&#34;&gt;PR #123&lt;/a&gt; syncs Nostr events to the device calendar so they appear alongside other calendar apps. Event notifications ship in &lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar/pull/130&#34;&gt;PR #130&lt;/a&gt;. Users can now add or remove events from their busy list via &lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar/pull/134&#34;&gt;PR #134&lt;/a&gt;, and relay publish progress feedback in &lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar/pull/118&#34;&gt;PR #118&lt;/a&gt; shows which relays accepted an event save. &lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.5.1&#34;&gt;v1.5.1&lt;/a&gt; follows with a URL bug fix and ZSP metadata update.&lt;/p&gt;

&lt;h2 id=&#34;in-development-5&#34;&gt;In Development&lt;/h2&gt;

&lt;h3 id=&#34;amethyst-adds-scheduled-posts-nip-9a-community-rules-and-a-desktop-local-relay-2&#34;&gt;Amethyst adds scheduled posts, NIP-9A community rules, and a desktop local relay&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/vitorpamplona/amethyst&#34;&gt;Amethyst&lt;/a&gt;, the feature-rich Android client, merged 78 PRs this week across several significant feature areas.&lt;/p&gt;

&lt;p&gt;Scheduled posts land on Android in &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2765&#34;&gt;PR #2765&lt;/a&gt;: users can compose a note and set a future publish time, with the queue managed locally on device. A desktop build gains an embedded local relay with SQLite event persistence in &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2841&#34;&gt;PR #2841&lt;/a&gt;, allowing the desktop client to serve as its own relay node and handle high connection counts without an external relay.&lt;/p&gt;

&lt;p&gt;Three PRs implement NIP-9A community rules directly in the client: &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2798&#34;&gt;PR #2798&lt;/a&gt; validates posts against community rules in the composer before sending, &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2799&#34;&gt;PR #2799&lt;/a&gt; adds a structured NIP-9A rules editor to the new-community flow, and &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2800&#34;&gt;PR #2800&lt;/a&gt; adds an opt-in NIP-9A feed filter so community members can hide posts that violate the published rules. This is the first client-side implementation of the NIP-9A draft proposed in the NIPs repo this week.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2812&#34;&gt;PR #2812&lt;/a&gt; redacts secrets and sensitive payloads from debug logs across both Quartz and Amethyst, a security fix for users who share crash reports. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2842&#34;&gt;PR #2842&lt;/a&gt; adds LAN video casting via Chromecast in the Google Play build. Two-stage zap progress shows in &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2831&#34;&gt;PR #2831&lt;/a&gt; so users can see when a zap is pending vs confirmed. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2855&#34;&gt;PR #2855&lt;/a&gt; splits the notifications tab into &amp;#34;Following&amp;#34; and &amp;#34;Everyone&amp;#34; views. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2821&#34;&gt;PR #2821&lt;/a&gt; adds rich &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-92/&#34;&gt;NIP-92 (imeta)&lt;/a&gt; tags to every published HLS event and auto-publishes a kind:1 sibling note so live streams appear in standard feeds and are discoverable by clients that do not support &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-53/&#34;&gt;NIP-53 (Live Activities)&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&#34;shopstr-adds-mcp-audit-logging-and-session-security-2&#34;&gt;Shopstr adds MCP audit logging and session security&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/shopstr-eng/shopstr&#34;&gt;Shopstr&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub15dc33fyg3cpd9r58vlqge2hh8dy6hkkrjxkhluv2xpyfreqkmsesesyv6e&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Shopstr Markets&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub15dc…yv6e&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;, the decentralized marketplace on Nostr, merged five PRs this week. Audit logging for the MCP tool layer lands in &lt;a href=&#34;https://github.com/shopstr-eng/shopstr/pull/456&#34;&gt;PR #456&lt;/a&gt; so marketplace operators can trace agent actions. Session security tightens in &lt;a href=&#34;https://github.com/shopstr-eng/shopstr/pull/477&#34;&gt;PR #477&lt;/a&gt;, which pins MCP sessions to their originating API key and adds TTL eviction to prevent session hijacking. Missing app routes were added to &lt;code&gt;RESERVED_SLUGS&lt;/code&gt; in &lt;a href=&#34;https://github.com/shopstr-eng/shopstr/pull/476&#34;&gt;PR #476&lt;/a&gt; so short usernames that match route paths cannot be registered as shop handles.&lt;/p&gt;

&lt;h3 id=&#34;dart-ndk-adds-web-support-and-seal-signature-verification-2&#34;&gt;Dart NDK adds web support and seal signature verification&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/relaystr/dart_ndk&#34;&gt;Dart NDK&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1relaystr0ng75ecpd8av2v35kwf3a86vlrr3c4gs02p3gvy57haaqgt3a6p&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;npub1relaystr0ng75ecpd8av2v35kwf3a86vlrr3c4gs02p3gvy57haaqgt3a6p&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1rel…3a6p&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), the Dart library for Nostr protocol development used in Flutter apps, merged six PRs this week. Web support arrives in &lt;code&gt;SembastCacheManager&lt;/code&gt; via &lt;a href=&#34;https://github.com/relaystr/dart_ndk/pull/571&#34;&gt;PR #571&lt;/a&gt; so web builds can persist cached events to browser storage. Seal signature verification lands in &lt;a href=&#34;https://github.com/relaystr/dart_ndk/pull/595&#34;&gt;PR #595&lt;/a&gt; for the &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-59/&#34;&gt;NIP-59 (Gift Wrap)&lt;/a&gt; flow so clients can confirm the inner seal was created by the expected sender. A tag-parsing fix in &lt;a href=&#34;https://github.com/relaystr/dart_ndk/pull/597&#34;&gt;PR #597&lt;/a&gt; corrects handling of public tags on private lists where tags appear in both encrypted and unencrypted portions of a list event.&lt;/p&gt;

&lt;h3 id=&#34;rust-nostr-refactors-tags-and-proxy-connection-2&#34;&gt;rust-nostr refactors tags and proxy connection&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/rust-nostr/nostr&#34;&gt;rust-nostr&lt;/a&gt;, the Rust SDK with bindings for Python, Kotlin, Swift, and JavaScript, merged three PRs this week. &lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1347&#34;&gt;PR #1347&lt;/a&gt; is a large tags rework that normalizes tag access across the SDK. &lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1351&#34;&gt;PR #1351&lt;/a&gt; replaces the &lt;code&gt;Connection&lt;/code&gt; type with &lt;code&gt;Proxy&lt;/code&gt; in the SDK layer for cleaner proxy configuration, and &lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1349&#34;&gt;PR #1349&lt;/a&gt; fixes subscription verification for multi-filter REQs where a subscription with multiple filters was not correctly matched against incoming events.&lt;/p&gt;

&lt;h3 id=&#34;sprout-ships-v0-0-10-and-v0-0-11-2&#34;&gt;Sprout ships v0.0.10 and v0.0.11&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/block/sprout&#34;&gt;Sprout&lt;/a&gt;, Block&amp;#39;s Nostr client and relay covered in &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-05-06-newsletter/#sprout-ships-desktop-v004-and-v005-alongside-nip-oa-agent-authentication-and-the-pair-relay-sidecar&#34;&gt;#21&lt;/a&gt;, shipped &lt;a href=&#34;https://github.com/block/sprout/releases/tag/v0.0.10&#34;&gt;v0.0.10&lt;/a&gt; and &lt;a href=&#34;https://github.com/block/sprout/releases/tag/v0.0.11&#34;&gt;v0.0.11&lt;/a&gt; with mention autocomplete improvements, image download support, and agent error-handling fixes.&lt;/p&gt;

&lt;h3 id=&#34;clave-continues-multi-account-nostrconnect-rollout-2&#34;&gt;Clave continues multi-account NostrConnect rollout&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/DocNR/clave&#34;&gt;Clave&lt;/a&gt;, the iOS NIP-46 remote signer covered in &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-05-06-newsletter/#clave-v020-launches-multi-account-on-ios-with-nip-46-nostr-connect-signing&#34;&gt;#21&lt;/a&gt;, shipped further builds this week advancing its multi-account NostrConnect work. &lt;a href=&#34;https://github.com/DocNR/clave/pull/52&#34;&gt;PR #52&lt;/a&gt; promotes Connect from a sheet presented from the home view to a top-level cross-account tab, with all account-binding for pairing flows going through a unified picker. A security fix in build 71 closes a per-account 5-connection cap bypass that existed due to a timing bug in the bunker flow, now enforced at three layers: the entry gate, the in-sheet rotation gate, and the NSE-side check.&lt;/p&gt;

&lt;h2 id=&#34;new-projects-2&#34;&gt;New Projects&lt;/h2&gt;

&lt;h3 id=&#34;tamagostrich-launches-a-decentralized-nip-78-tamagotchi-with-sats-rewards-2&#34;&gt;Tamagostrich launches a decentralized NIP-78 Tamagotchi with sats rewards&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/Negr087/tamagostrich&#34;&gt;Tamagostrich&lt;/a&gt; is a browser-based virtual pet game launched at IDENTITY Hackathon 2026 where a baby ostrich, Nori, evolves through your Nostr social activity. Pet state lives in a &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-78/&#34;&gt;NIP-78&lt;/a&gt; kind:30078 event so it syncs across every device sharing the same keypair. Zaps, reactions, reposts, and new followers grant XP; without activity, happiness and energy decay 100 points per 24 hours. Milestone rewards pay out in sats automatically via &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-47/&#34;&gt;NIP-47 (Nostr Wallet Connect)&lt;/a&gt;: 50 sats at level 5, 210 sats at level 10, and 420 sats at the maximum level 21, sent to the user&amp;#39;s &lt;code&gt;lud16&lt;/code&gt; address with claim state recorded in the NIP-78 event to prevent double payment.&lt;/p&gt;

&lt;h2 id=&#34;protocol-and-spec-work-5&#34;&gt;Protocol and spec work&lt;/h2&gt;

&lt;p&gt;The NIPs repository merged &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2338&#34;&gt;PR #2338&lt;/a&gt; fixing README reference links for Marmot event kinds and the geocaching kind 37516. Five new proposals opened this week:&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2331&#34;&gt;PR #2331&lt;/a&gt; proposes &lt;strong&gt;NIP-9A: Verifiable Community Rules&lt;/strong&gt;, introducing kind:34551, a parameterized replaceable event that lets a community owner publish a machine-readable, cryptographically signed rules document. Clients fetch the rules before the user submits a post and reject the draft locally if it violates any rule, surfacing the violation before send. This addresses a gap in NIP-72 (Reddit-style communities), where the community definition event (kind:34550) already carries a freeform &lt;code&gt;rules&lt;/code&gt; tag for human readers but has no machine-readable counterpart. The companion &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2337&#34;&gt;PR #2337&lt;/a&gt; adds an optional &lt;code&gt;nip9a&lt;/code&gt; field to NIP-11 relay information documents, carrying an addressable event coordinate so clients can discover which kind:34551 rules document a relay enforces for relay-wide write policies independent of any community page.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2335&#34;&gt;PR #2335&lt;/a&gt; proposes &lt;strong&gt;Reservation Events for Nostr Marketplaces&lt;/strong&gt;, defining kind:32122 (parameterized replaceable reservation events), kind:1326 (append-only transition audit records), and kind:32124 (post-trade reviews). Negotiation is private: draft proposals are sent as NIP-59 gift-wrapped structured-message child events between buyer and seller, so they never hit public relays. Once both parties agree, a commit-stage kind:32122 event goes public and affects listing availability. A per-trade temporary key lets buyers participate without exposing their long-lived pubkey publicly; a &lt;code&gt;participant_proof&lt;/code&gt; tag binds the temp key to the real identity for escrow and review verification. Calendar by Formstr shipped appointment scheduling this week using an app-specific flow; a standard kind:32122 would let any calendar app, marketplace, or scheduling service interoperate on bookings.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2334&#34;&gt;PR #2334&lt;/a&gt; proposes &lt;strong&gt;Escrow Services for Nostr Marketplaces&lt;/strong&gt;, using kind:30303 (parameterized replaceable service advertisements) for escrow operators to declare their EVM contract address, bytecode hash (for client-side contract verification), supported chain (e.g. Rootstock chainId 30), fee schedule, and accepted tokens. Buyers and sellers publish kind:17388 replaceable events declaring their trusted escrow providers and accepted payment forms; clients use these to match compatible parties to an escrow before a trade begins. Mostro ships concurrent taker bonds this week for Lightning P2P trades; this NIP extends similar trustless settlement mechanics to Shopstr-style EVM-settled goods markets.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2333&#34;&gt;PR #2333&lt;/a&gt; proposes &lt;strong&gt;Accommodation Listing Profiles for NIP-99 Marketplace Listings&lt;/strong&gt;, extending NIP-99 classified listings with H3 geospatial index &lt;code&gt;g&lt;/code&gt; tags and accommodation-specific promoted fields for short-term rental listings. H3 tags allow clients to query listings by geographic cell without a centralized mapping service. Generic marketplace fields like instant-book and negotiability stay in the NIP-99 base; only accommodation-specific tags go in this profile. Combined with the Reservations and Escrow proposals this week, the three drafts form an interlocking stack: list a property (2333), receive and negotiate a booking (2335), and settle payment with dispute resolution (2334).&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2332&#34;&gt;PR #2332&lt;/a&gt; proposes &lt;strong&gt;NIP-BC: Onchain Zaps (kind 8333)&lt;/strong&gt;, exploiting a direct identity between Nostr keys and Bitcoin Taproot addresses: a Nostr pubkey is a 32-byte x-only secp256k1 key, and so is a BIP-341 P2TR internal key, meaning any Nostr user already has a deterministic mainnet Bitcoin address derivable from their pubkey alone — no LNURL, custodian, or Lightning address required. The kind number mirrors NIP-57&amp;#39;s convention: 9735 is the Lightning P2P port; 8333 is Bitcoin mainnet&amp;#39;s P2P port. A &lt;code&gt;kind:8333&lt;/code&gt; event contains the txid in an &lt;code&gt;i&lt;/code&gt; tag (using NIP-73 external content identifiers), the recipient pubkey in a &lt;code&gt;p&lt;/code&gt; tag, a self-reported &lt;code&gt;amount&lt;/code&gt; in satoshis, and an optional &lt;code&gt;e&lt;/code&gt; or &lt;code&gt;a&lt;/code&gt; tag for the zapped event. Because the amount is self-reported, clients must verify the event by fetching the transaction and summing outputs that pay the derived Taproot address. Senders can optionally include an inline SPV proof via &lt;code&gt;block&lt;/code&gt; and &lt;code&gt;proof&lt;/code&gt; tags so verifiers with only the 75 MB block header chain can validate without a remote API call. The spec also extends NIP-07 and NIP-46 with a &lt;code&gt;signPsbt&lt;/code&gt; method so browser signers and remote signers can sign the underlying Bitcoin transaction using the same key. The proposal draws on an existing Ditto implementation and clients should present verified onchain zaps alongside NIP-57 Lightning zap receipts and NIP-61 Nutzaps in aggregate zap totals.&lt;/p&gt;

&lt;h2 id=&#34;nip-deep-dive-nip-78-app-specific-data-2&#34;&gt;NIP deep dive: NIP-78 (App-specific data)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-78/&#34;&gt;NIP-78&lt;/a&gt; defines a standard way for applications to store arbitrary private or public data on behalf of a user using Nostr events. The core event kind is 30078, a parameterized replaceable event where the &lt;code&gt;d&lt;/code&gt; tag is an application-defined identifier string. An application gives its storage slot a unique &lt;code&gt;d&lt;/code&gt; tag (for example &lt;code&gt;tamagostrich-pet-state&lt;/code&gt; or &lt;code&gt;amethyst-settings&lt;/code&gt;) and publishes a 30078 event with whatever JSON or text content it needs to persist. Because 30078 is replaceable and scoped by &lt;code&gt;d&lt;/code&gt; tag, the application can update the stored state by publishing a new event with the same &lt;code&gt;d&lt;/code&gt; tag, and the relay retains only the latest version.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;&amp;lt;64-char hex&amp;gt;&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;&amp;lt;64-char hex&amp;gt;&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1747180800,
  &amp;#34;kind&amp;#34;: 30078,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;d&amp;#34;, &amp;#34;tamagostrich-pet-state&amp;#34;]
  ],
  &amp;#34;content&amp;#34;: &amp;#34;{\&amp;#34;level\&amp;#34;:7,\&amp;#34;xp\&amp;#34;:1420,\&amp;#34;happiness\&amp;#34;:82,\&amp;#34;energy\&amp;#34;:61}&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;&amp;lt;128-char hex&amp;gt;&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The primary motivation is cross-device synchronization without a centralized server. Any client that knows a user&amp;#39;s public key and the application&amp;#39;s &lt;code&gt;d&lt;/code&gt; tag can fetch the current state from the user&amp;#39;s relay set and reconstruct the application state on any device. The user owns the data because it lives in events signed by their keypair, and they can choose which relays to publish to based on their relay list from &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-65/&#34;&gt;NIP-65 (Relay List Metadata)&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For private application data, NIP-78 events can encrypt the content field using &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44 (Versioned Encryption)&lt;/a&gt; or the older &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-04/&#34;&gt;NIP-04&lt;/a&gt; before publishing, so the relay stores ciphertext that only the key holder can decrypt. Public application data, like Tamagostrich&amp;#39;s achievement badges displayed on the user&amp;#39;s profile, can be stored unencrypted so other clients can read and display it.&lt;/p&gt;

&lt;p&gt;The spec deliberately leaves the content format open. Applications choose their own schema; NIP-78 only standardizes the event kind and the &lt;code&gt;d&lt;/code&gt;-tag scoping mechanism. This means different apps using NIP-78 do not interfere with each other as long as they choose distinct &lt;code&gt;d&lt;/code&gt; tag prefixes. The common convention is to prefix &lt;code&gt;d&lt;/code&gt; tags with the application name to reduce collision risk.&lt;/p&gt;

&lt;p&gt;Current users of NIP-78 include Tamagostrich (pet state sync), Wisp (kind:30078 wallet backup and cross-device security settings sync), NosPress (CMS orchestration state), and several Nostr client settings sync implementations.&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;&lt;strong&gt;Primary sources:&lt;/strong&gt;
- &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/78.md&#34;&gt;NIP-78 Specification&lt;/a&gt;
- &lt;a href=&#34;https://github.com/Negr087/tamagostrich&#34;&gt;Tamagostrich&lt;/a&gt;: production implementation this week&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;See also:&lt;/strong&gt;
- &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-51/&#34;&gt;NIP-51: Lists&lt;/a&gt;
- &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-65/&#34;&gt;NIP-65: Relay List Metadata&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&#34;nip-deep-dive-nip-98-http-auth-2&#34;&gt;NIP deep dive: NIP-98 (HTTP Auth)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-98/&#34;&gt;NIP-98&lt;/a&gt; defines an HTTP authentication scheme that lets Nostr keypairs authorize requests to HTTP servers, eliminating the need for usernames, passwords, or OAuth tokens for server-side API access. A client constructs a short-lived Nostr event of kind 27235, signs it with their private key, base64-encodes the JSON, and sends it in an &lt;code&gt;Authorization: Nostr &amp;lt;base64&amp;gt;&lt;/code&gt; HTTP header.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;&amp;lt;64-char hex&amp;gt;&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;&amp;lt;64-char hex&amp;gt;&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1747180800,
  &amp;#34;kind&amp;#34;: 27235,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;u&amp;#34;, &amp;#34;https://files.example.com/upload&amp;#34;],
    [&amp;#34;method&amp;#34;, &amp;#34;POST&amp;#34;],
    [&amp;#34;payload&amp;#34;, &amp;#34;&amp;lt;sha256-hash-of-request-body&amp;gt;&amp;#34;]
  ],
  &amp;#34;content&amp;#34;: &amp;#34;&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;&amp;lt;128-char hex&amp;gt;&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The kind 27235 event includes the HTTP method in a &lt;code&gt;method&lt;/code&gt; tag, the full request URL in a &lt;code&gt;u&lt;/code&gt; tag, and a &lt;code&gt;created_at&lt;/code&gt; timestamp. The server validates the signature, checks that the method and URL match the actual request, and verifies that the timestamp is recent (within a few minutes) to prevent replay attacks. If validation passes, the server treats the requesting pubkey as the authenticated identity.&lt;/p&gt;

&lt;p&gt;The design means any server that implements NIP-98 can authenticate Nostr users without any prior registration, account creation, or shared secret. From the user&amp;#39;s perspective, authentication is transparent: their Nostr signing key is also their API credential. From the server&amp;#39;s perspective, a valid NIP-98 header is a cryptographic proof that the holder of a specific keypair intentionally made this request at this time to this URL.&lt;/p&gt;

&lt;p&gt;NIP-98 is used in Blossom (&lt;a href=&#34;https://github.com/hzrd149/blossom/blob/master/buds/01.md&#34;&gt;BUD-01&lt;/a&gt;) for authenticating blob uploads and downloads. Routstr uses it for per-request HTTP API access control with npub-level RBAC. Sprout uses it for git transport auth and REST relay access, replacing Bearer token auth entirely in a recent refactor. Clave uses it for proxy pairing calls. Alby Hub uses NIP-98-derived authentication for its admin API, and Nostr.build uses it for upload authorization.&lt;/p&gt;

&lt;p&gt;The spec defines one optional extension: a &lt;code&gt;payload&lt;/code&gt; tag containing the SHA-256 hash of the request body, which lets the server verify that the signed event and the request body were created together, preventing a MITM from substituting a different body after the client signed the auth event.&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;&lt;strong&gt;Primary sources:&lt;/strong&gt;
- &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/98.md&#34;&gt;NIP-98 Specification&lt;/a&gt;
- &lt;a href=&#34;https://github.com/hzrd149/blossom/blob/master/buds/01.md&#34;&gt;BUD-01: Blossom upload auth&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;See also:&lt;/strong&gt;
- &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-96/&#34;&gt;NIP-96: HTTP File Storage Integration&lt;/a&gt;&lt;/p&gt;
 &lt;/blockquote&gt;
    </content>
    <updated>2026-05-13T16:18:26Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsq6mwq5slmwunvqsfw375et6qftdmxvrdqupemwj3hylg2umqxxxqzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agquupc9h</id>
    
      <title type="html">Newsletter #21 is out. @npub1wht…r3ec ships MDK 0.8.0 with the ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsq6mwq5slmwunvqsfw375et6qftdmxvrdqupemwj3hylg2umqxxxqzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agquupc9h" />
    <content type="html">
      Newsletter #21 is out. &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1whtn0s68y3cs98zysa4nxrfzss5g5snhndv35tk5m2sudsr7ltms48r3ec&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;White Noise&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1wht…r3ec&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; ships MDK 0.8.0 with the first MIP-05 notification primitives and addressable key packages. &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1ek4262k6nv3l9axh403w2e66pzl2pqhhnjrhgv2wpzx2akak285scxv4pd&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;lawallet&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1ek4…v4pd&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; ships v0.10.0 with the full monorepo, end-user Wallet, admin dashboard, and a new LightningAddress 1→N &#43; NWCConnection schema. &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub142gywvjkq0dv6nupggyn2euhx4nduwc7yz5f24ah9rpmunr2s39se3xrj0&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;amethyst&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub142g…xrj0&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; stabilizes Nests with relay keep-alive, lifecycle-aware subscriptions, and JWT refresh audio continuity. &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub15qydau2hjma6ngxkl2cyar74wzyjshvl65za5k5rl69264ar2exs5cyejr&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;DanConwayDev&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub15qy…yejr&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; ships v2.4.2 and v2.4.3 fixing GRASP server detection. &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub16l0ck0s5zened29dsaqtqm6z0t4fmk2mwtszw64fz7fppcnls8mss3yj9s&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;block-opensource&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub16l0…yj9s&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; ships Desktop v0.0.4/v0.0.5 alongside NIP-OA agent authentication and a NIP-AB pairing sidecar. Two NIP deep dives cover NIP-34 (git stuff) and NIP-53 (Live Activities). Read it: &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-05-06-newsletter/&#34;&gt;https://nostrcompass.org/en/newsletters/2026-05-06-newsletter/&lt;/a&gt;&lt;br/&gt;&lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nevent1qqsz7ydr2j4zy0us0f3tpw5we9yze3eck3lmj73302puvm8zsf45fespz3mhxue69uhhyetvv9ujuerpd46hxtnfduqs6amnwvaz7tmwdaejumr0dsq3vamnwvaz7tmjv4kxz7fwwpexjmtpdshxuet5qyg8wumn8ghj7mn0wd68ytnhd9hx2q3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqggt3ml&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;nevent1q…t3ml&lt;/a&gt;&lt;/span&gt; &lt;/div&gt; &lt;p&gt;Welcome back to Nostr Compass, your weekly guide to Nostr.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This week:&lt;/strong&gt; &lt;a href=&#34;https://github.com/marmot-protocol&#34;&gt;Marmot Protocol&lt;/a&gt; ships &lt;a href=&#34;#mdk-080-adds-mip-05-notification-primitives-and-addressable-key-packages&#34;&gt;MDK 0.8.0&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1whtn0s68y3cs98zysa4nxrfzss5g5snhndv35tk5m2sudsr7ltms48r3ec&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;White Noise&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1wht…r3ec&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; with the first MIP-05 notification primitives, addressable &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-51/&#34;&gt;NIP-51 (Lists)&lt;/a&gt; key packages, and a tightened security review pass. &lt;a href=&#34;https://github.com/lawalletio/lawallet-nwc&#34;&gt;LaWallet NWC&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1ek4262k6nv3l9axh403w2e66pzl2pqhhnjrhgv2wpzx2akak285scxv4pd&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;lawallet&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1ek4…v4pd&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; ships &lt;a href=&#34;#lawallet-nwc-v0100-ships-the-full-monorepo-and-end-user-wallet&#34;&gt;v0.10.0&lt;/a&gt; as the biggest release since OpenSats funding, bringing a full admin dashboard, end-user Wallet, end-to-end activity log, and a new &lt;code&gt;LightningAddress 1→N&lt;/code&gt; and &lt;code&gt;NWCConnection&lt;/code&gt; schema that unlocks per-address &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-47/&#34;&gt;NIP-47 (Nostr Wallet Connect)&lt;/a&gt; routing. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst&#34;&gt;Amethyst&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub142gywvjkq0dv6nupggyn2euhx4nduwc7yz5f24ah9rpmunr2s39se3xrj0&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;amethyst&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub142g…xrj0&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; lands a &lt;a href=&#34;#amethyst-stabilizes-nests-with-keep-alive-jwt-resilience-and-lifecycle-subscriptions&#34;&gt;Nests stability sprint&lt;/a&gt; with audio gap elimination during JWT refresh, lifecycle-aware key data subscriptions, relay keep-alive reconnection, and an animated speaking-participant indicator. &lt;a href=&#34;https://github.com/DanConwayDev/ngit-cli&#34;&gt;ngit&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub15qydau2hjma6ngxkl2cyar74wzyjshvl65za5k5rl69264ar2exs5cyejr&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;DanConwayDev&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub15qy…yejr&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) ships &lt;a href=&#34;#ngit-v242-and-v243-fix-grasp-server-detection-and-multi-remote-state-events&#34;&gt;v2.4.2&lt;/a&gt; and &lt;a href=&#34;#ngit-v242-and-v243-fix-grasp-server-detection-and-multi-remote-state-events&#34;&gt;v2.4.3&lt;/a&gt; fixing GRASP server detection for PR submissions and multi-remote state-event filtering. &lt;a href=&#34;https://github.com/0ceanSlim/grain&#34;&gt;GRAIN&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1zmc6qyqdfnllhnzzxr5wpepfpnzcf8q6m3jdveflmgruqvd3qa9sjv7f60&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;OceanSlim&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1zmc…7f60&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) ships &lt;a href=&#34;#grain-v054-lands-production-hardening-and-a-silent-data-loss-fix&#34;&gt;v0.5.4&lt;/a&gt; with production hardening and a silent data-loss fix in the Docker quick-start. &lt;a href=&#34;https://github.com/MostroP2P/mostro-core&#34;&gt;Mostro Core&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1m0str0d7z2ww8rdh20t2n9lx520xjwhaq24p68umqp06wwrwtsnqen40un&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Mostro&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1m0s…40un&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; ships &lt;a href=&#34;#mostro-core-v0101-adds-pgp-signed-release-artifacts&#34;&gt;v0.10.1&lt;/a&gt; with PGP-signed release artifacts as a follow-up to last week&amp;#39;s v0.10.0 P2P chat protocol module. &lt;a href=&#34;https://github.com/clave-mobile&#34;&gt;Clave&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1uadpshqpn5ysf82lev8zngkvn07szmkq7mvf9lyc7ml7qxq6fqxsmrqt2s&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;npub1uadpshqpn5ysf82lev8zngkvn07szmkq7mvf9lyc7ml7qxq6fqxsmrqt2s&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1uad…qt2s&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) launches &lt;a href=&#34;#clave-v020-launches-multi-account-on-ios-with-nip-46-nostr-connect-signing&#34;&gt;v0.2.0&lt;/a&gt; with multi-account support on iOS. &lt;a href=&#34;https://github.com/Cameri/nostream&#34;&gt;nostream&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1a5r222zpak8w239w673ly9tznxyp4wc2vh59lcyx9cu7wgyt9xfqtug39a&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Cameri 🦦&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1a5r…g39a&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) merges &lt;a href=&#34;#nostream-adds-marmot-relay-support-and-nip-25-reactions&#34;&gt;Marmot relay support and NIP-25 (Reactions)&lt;/a&gt;. &lt;a href=&#34;https://github.com/block/sprout&#34;&gt;Sprout&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub16l0ck0s5zened29dsaqtqm6z0t4fmk2mwtszw64fz7fppcnls8mss3yj9s&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;block-opensource&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub16l0…yj9s&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) ships &lt;a href=&#34;#sprout-ships-desktop-v004-and-v005-alongside-nip-oa-agent-authentication-and-the-pair-relay-sidecar&#34;&gt;Desktop v0.0.4 and v0.0.5 alongside NIP-OA (Owner Attestation) agent auth, NIP-43 (Relay Access Metadata and Requests) membership, and a NIP-AB (Device Pairing) sidecar&lt;/a&gt;. &lt;a href=&#34;https://github.com/routstr/routstrd&#34;&gt;Routstrd&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub130mznv74rxs032peqym6g3wqavh472623mt3z5w73xq9r6qqdufs7ql29s&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;routstr&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub130m…l29s&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;a href=&#34;#routstrd-integrates-hermes-for-daemon-clients-and-remote-mode&#34;&gt;integrates Hermes for daemon clients&lt;/a&gt;. The NIP discussions surface a brokerless &lt;a href=&#34;#protocol-discussions&#34;&gt;hashrate market draft&lt;/a&gt;, a &lt;a href=&#34;#protocol-discussions&#34;&gt;Curated Feeds proposal&lt;/a&gt; as a simpler alternative to DVM feeds, a &lt;a href=&#34;#protocol-discussions&#34;&gt;Profile Colors NIP&lt;/a&gt;, and a &lt;a href=&#34;#protocol-discussions&#34;&gt;Namecoin-anchored identity track&lt;/a&gt;. Two NIP deep dives cover &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-34/&#34;&gt;NIP-34&lt;/a&gt; (git stuff) and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-53/&#34;&gt;NIP-53&lt;/a&gt; (Live Activities).&lt;/p&gt;

&lt;h2 id=&#34;lead-stories-2&#34;&gt;Lead stories&lt;/h2&gt;

&lt;h3 id=&#34;mdk-0-8-0-adds-mip-05-notification-primitives-and-addressable-key-packages-2&#34;&gt;MDK 0.8.0 adds MIP-05 notification primitives and addressable key packages&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/marmot-protocol/mdk&#34;&gt;MDK&lt;/a&gt;, the Rust core library for the &lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt; protocol, shipped &lt;a href=&#34;https://github.com/marmot-protocol/mdk/releases/tag/v0.8.0&#34;&gt;v0.8.0&lt;/a&gt; on May 4. This release ships the first MIP-05 notification building blocks, moves MIP-00 key packages to addressable events so a user&amp;#39;s key package can be replaced in place, improves mixed-version group compatibility, expands UniFFI coverage for mobile bindings, and tightens validation paths around admin actions, commits, storage, encryption bounds, and replay handling. MIP-05 primitives include leaf-index helpers added in &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/235&#34;&gt;PR #235&lt;/a&gt;, which give downstream clients enough information to deliver per-recipient push notifications without leaking group structure. Operational fixes also land: &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/273&#34;&gt;PR #273&lt;/a&gt; restores mdk-core crates.io publishing, and &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/269&#34;&gt;PR #269&lt;/a&gt; exposes the test_util module behind a &lt;code&gt;test-utils&lt;/code&gt; Cargo feature so external client suites can share Marmot&amp;#39;s test harness. For client teams, the headline practical change is the addressable key package: a user&amp;#39;s MIP-00 announcement is now a kind that replaces in place, so rotating to a fresh key package no longer leaves stale events scattered across relays.&lt;/p&gt;

&lt;h3 id=&#34;lawallet-nwc-v0-10-0-ships-the-full-monorepo-and-end-user-wallet-2&#34;&gt;LaWallet NWC v0.10.0 ships the full monorepo and end-user Wallet&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/lawalletio/lawallet-nwc&#34;&gt;LaWallet NWC&lt;/a&gt;, the LaWallet team&amp;#39;s &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-47/&#34;&gt;NIP-47&lt;/a&gt; Nostr Wallet Connect implementation, shipped &lt;a href=&#34;https://github.com/lawalletio/lawallet-nwc/releases/tag/v0.10.0&#34;&gt;v0.10.0&lt;/a&gt; on April 30. This is the biggest release since the project was OpenSats-funded. It ships the full monorepo, the complete admin dashboard, an end-user Wallet, an end-to-end Activity Log, dynamic branding, and the new &lt;code&gt;LightningAddress 1→N&lt;/code&gt; and &lt;code&gt;NWCConnection&lt;/code&gt; schema that unlocks per-address NWC routing, where one Lightning address can fan out to multiple NWC connections under different RBAC roles. The user-facing Wallet shipped in &lt;a href=&#34;https://github.com/lawalletio/lawallet-nwc/pull/191&#34;&gt;PR #191&lt;/a&gt; covers onboarding, home, send/receive, scan, currencies, an activity feed, and an offline cache. &lt;a href=&#34;https://github.com/lawalletio/lawallet-nwc/pull/192&#34;&gt;PR #192&lt;/a&gt; wires the first-run flow with confirm-root, community auto-import, and setup-now CTAs. &lt;a href=&#34;https://github.com/lawalletio/lawallet-nwc/pull/196&#34;&gt;PR #196&lt;/a&gt; adds a live OpenAPI 3.1 reference rendered through Scalar with role-based access control documentation, and &lt;a href=&#34;https://github.com/lawalletio/lawallet-nwc/pull/193&#34;&gt;PR #193&lt;/a&gt; brings full JSDoc coverage to the public &lt;code&gt;lib/&lt;/code&gt; surface so editor tooltips show the wallet API correctly during integration work.&lt;/p&gt;

&lt;h3 id=&#34;amethyst-stabilizes-nests-with-keep-alive-jwt-resilience-and-lifecycle-subscriptions-2&#34;&gt;Amethyst stabilizes Nests with keep-alive, JWT resilience, and lifecycle subscriptions&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/vitorpamplona/amethyst&#34;&gt;Amethyst&lt;/a&gt;, the feature-rich Android client, continued the &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-53/&#34;&gt;NIP-53&lt;/a&gt; Nests audio-room work covered in newsletter &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-04-29-newsletter/#amethyst-advances-nests-audio-rooms-with-moq-interop-testing&#34;&gt;#20&lt;/a&gt; with a stability sprint focused on the failure modes that broke calls in production. The audio-gap fix in &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2733&#34;&gt;PR #2733&lt;/a&gt; overlaps new credential acquisition with the active stream during JWT refresh, so the listener does not hear a dropout when the token rotates. A new keep-alive mechanism in &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2730&#34;&gt;PR #2730&lt;/a&gt; reconnects disconnected relays without requiring a manual user action, and &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2728&#34;&gt;PR #2728&lt;/a&gt; replaces the legacy &lt;code&gt;KeyDataSourceSubscription&lt;/code&gt; with &lt;code&gt;LifecycleAwareKeyDataSourceSubscription&lt;/code&gt;, which ties the subscription lifetime to the Android Activity lifecycle so background tabs do not leak open subscriptions. Android 12&#43;&amp;#39;s &lt;code&gt;ForegroundServiceStartNotAllowedException&lt;/code&gt; is now handled gracefully via &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2727&#34;&gt;PR #2727&lt;/a&gt;, and &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2726&#34;&gt;PR #2726&lt;/a&gt; adds a grace period to the lifecycle-aware subscriptions so a brief screen-off does not tear the call down. Listeners get a new visual cue from &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2724&#34;&gt;PR #2724&lt;/a&gt;, an animated outer-ring indicator that highlights the speaking participant in multi-speaker sessions. Debug coverage improved with &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2731&#34;&gt;PR #2731&lt;/a&gt;, which wires &lt;code&gt;NestRx&lt;/code&gt; and &lt;code&gt;NestTx&lt;/code&gt; logs across the listener and speaker paths so the next regression has a clean trail to follow, and &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2732&#34;&gt;PR #2732&lt;/a&gt; refactors the settings screen UI with a card-based layout to make the Nests-related toggles easier to find.&lt;/p&gt;

&lt;h3 id=&#34;ngit-v2-4-2-and-v2-4-3-fix-grasp-server-detection-and-multi-remote-state-events-2&#34;&gt;ngit v2.4.2 and v2.4.3 fix GRASP server detection and multi-remote state events&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/DanConwayDev/ngit-cli&#34;&gt;ngit&lt;/a&gt;, the command-line tool and &lt;code&gt;git&lt;/code&gt; plugin for &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-34/&#34;&gt;NIP-34&lt;/a&gt; collaboration, shipped &lt;a href=&#34;https://github.com/DanConwayDev/ngit-cli/releases/tag/v2.4.2&#34;&gt;v2.4.2&lt;/a&gt; on April 28 and &lt;a href=&#34;https://github.com/DanConwayDev/ngit-cli/releases/tag/v2.4.3&#34;&gt;v2.4.3&lt;/a&gt; on May 1. v2.4.2 fixes a URL-normalization mismatch where &lt;code&gt;repo_grasps&lt;/code&gt; held normalized hostnames but the comparison was made against full clone URLs. The empty candidate-server list meant every PR submission silently fell through to the fork-creation path on a personal GRASP server, when the correct path was a direct push to the repository&amp;#39;s own GRASP server. v2.4.3 fixes a state-event ambiguity that surfaced when a repository has multiple &lt;code&gt;nostr://&lt;/code&gt; remotes sharing the same identifier: relays could return state events authored by maintainers of the &lt;em&gt;other&lt;/em&gt; remote, and without filtering, the newest event won regardless of author and pointed refs at the wrong commits. State event candidates in &lt;code&gt;run_list&lt;/code&gt; are now filtered to maintainers of the current remote&amp;#39;s repo announcement so the right state wins. Both fixes are exactly the kind of correctness work the &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-04-29-newsletter/#gitworkshop-ships-in-browser-pr-merge-repository-following-and-a-bandwidth-efficient-git-explorer&#34;&gt;GitWorkshop v2 release&lt;/a&gt; shipped last week pushes ngit to harden, since the in-browser PR merge button assumes the underlying GRASP push targets the right server.&lt;/p&gt;

&lt;h3 id=&#34;grain-v0-5-4-lands-production-hardening-and-a-silent-data-loss-fix-2&#34;&gt;GRAIN v0.5.4 lands production hardening and a silent data loss fix&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/0ceanSlim/grain&#34;&gt;GRAIN&lt;/a&gt;, the Go-based Nostr relay and client library, shipped &lt;a href=&#34;https://github.com/0ceanSlim/grain/releases/tag/v0.5.4&#34;&gt;v0.5.4&lt;/a&gt; on April 30. The release rolls up six accumulated fixes since v0.5.3, including a silent data-loss bug in the Docker quick-start that previously dropped events when the container restarted, a storage-layer correctness bug in addressable event reads where incorrect tag handling broke event reads after restart, and two connection-tracking bugs uncovered while debugging the v0.5.0-to-v0.5.3 lockup chain. The production-hardening pair that v0.5.3 had originally targeted is now in place: a per-IP rate limit and an IP blacklist, both configurable.&lt;/p&gt;

&lt;h3 id=&#34;mostro-core-v0-10-1-adds-pgp-signed-release-artifacts-2&#34;&gt;Mostro Core v0.10.1 adds PGP-signed release artifacts&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/MostroP2P/mostro-core&#34;&gt;Mostro Core&lt;/a&gt;, the Rust library that provides peer-to-peer functionality for the Mostro daemon and other downstream applications, shipped &lt;a href=&#34;https://github.com/MostroP2P/mostro-core/releases/tag/v0.10.1&#34;&gt;v0.10.1&lt;/a&gt; on April 28 as a follow-up to &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-04-29-newsletter/#mostro-core-v0100-and-mostro-mobile-v125-adopt-nip-59-dual-key-gift-wrap&#34;&gt;last week&amp;#39;s v0.10.0 P2P chat protocol module&lt;/a&gt;. The new release adds PGP-signed release artifacts and a &lt;code&gt;verify-release&lt;/code&gt; flow so downstream packagers can confirm artifact provenance before vending the library.&lt;/p&gt;

&lt;h2 id=&#34;tagged-releases-2&#34;&gt;Tagged releases&lt;/h2&gt;

&lt;h3 id=&#34;clave-v0-2-0-launches-multi-account-on-ios-with-nip-46-nostr-connect-signing-2&#34;&gt;Clave v0.2.0 launches multi-account on iOS with NIP-46 (Nostr Connect) signing&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/clave-mobile&#34;&gt;Clave&lt;/a&gt;, the iOS &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; remote-signing app that uses APNs for push delivery (covered in &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-04-29-newsletter/#clave-brings-nip-46-remote-signing-to-ios-via-apns&#34;&gt;#20&lt;/a&gt;), shipped &lt;a href=&#34;https://github.com/clave-mobile/clave/releases&#34;&gt;v0.2.0&lt;/a&gt; on May 5. The biggest update yet introduces multi-account support: Clave can now hold up to four accounts on one device, with a one-tap switcher and per-account isolation. The iOS plumbing and developer menu for multi-account land in &lt;a href=&#34;https://github.com/clave-mobile/clave/pull/23&#34;&gt;PR #23&lt;/a&gt;, and &lt;a href=&#34;https://github.com/clave-mobile/clave/pull/22&#34;&gt;PR #22&lt;/a&gt; adds a &lt;code&gt;signer_pubkey&lt;/code&gt; field to the APNs payload so the device knows which account a remote signing request belongs to before it surfaces the prompt. Activity detail now describes what was signed and links to &lt;code&gt;njump&lt;/code&gt; (&lt;a href=&#34;https://github.com/clave-mobile/clave/pull/19&#34;&gt;PR #19&lt;/a&gt;), so users can audit the chain of signing events without leaving the app. The cold-start delivery bug, where the APNs token was registered but the iOS Notification Center had stale empty slots that prevented delivery, is fixed in &lt;a href=&#34;https://github.com/clave-mobile/clave/pull/16&#34;&gt;PR #16&lt;/a&gt; through register-retry on cellular failure and an aggressive blank-NC sweep. Documentation gets a boost too: &lt;a href=&#34;https://github.com/clave-mobile/clave/pull/18&#34;&gt;PR #18&lt;/a&gt; ships a NIP-46 client compatibility doc, and &lt;a href=&#34;https://github.com/clave-mobile/clave/pull/21&#34;&gt;PR #21&lt;/a&gt; adds Nip46Lab as a neutral reference client for triage.&lt;/p&gt;

&lt;h3 id=&#34;wisp-ships-v1-0-3-v1-0-5-stability-work-2&#34;&gt;Wisp ships v1.0.3 → v1.0.5 stability work&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/barrydeen/wisp&#34;&gt;Wisp&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1utx00neqgqln72j22kej3ux7803c2k986henvvha4thuwfkper4s7r50e8&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;utxo the webmaster 🧑‍💻&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1utx…50e8&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), the Android client that &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-04-29-newsletter/#wisp-v100-graduates-from-beta&#34;&gt;graduated from beta in #20&lt;/a&gt;, shipped &lt;a href=&#34;https://github.com/barrydeen/wisp/releases/tag/v1.0.3&#34;&gt;v1.0.3&lt;/a&gt;, &lt;a href=&#34;https://github.com/barrydeen/wisp/releases/tag/v1.0.4&#34;&gt;v1.0.4&lt;/a&gt;, and &lt;a href=&#34;https://github.com/barrydeen/wisp/releases/tag/v1.0.5&#34;&gt;v1.0.5&lt;/a&gt; on May 4 with stability work. &lt;a href=&#34;https://github.com/barrydeen/wisp/pull/506&#34;&gt;PR #506&lt;/a&gt; adds Thumbhash for blurred image previews while full media loads, and &lt;a href=&#34;https://github.com/barrydeen/wisp/pull/514&#34;&gt;PR #514&lt;/a&gt; reduces bottom-tab switching jank. &lt;a href=&#34;https://github.com/barrydeen/wisp/pull/515&#34;&gt;PR #515&lt;/a&gt; reduces startup and feed-rendering work, and &lt;a href=&#34;https://github.com/barrydeen/wisp/pull/516&#34;&gt;PR #516&lt;/a&gt; stops the app from restoring stale tab back stacks on bottom-nav switch, fixing a navigation bug where a previously-visited screen would briefly flash when the user changed tabs.&lt;/p&gt;

&lt;h3 id=&#34;amber-6-1-0-pre1-ships-layout-and-stability-fixes-2&#34;&gt;Amber 6.1.0-pre1 ships layout and stability fixes&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/greenart7c3/Amber&#34;&gt;Amber&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1w4uswmv6lu9yel005l3qgheysmr7tk9uvwluddznju3nuxalevvs2d0jr5&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;greenart7c3&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1w4u…0jr5&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), the Android signer app for &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-55/&#34;&gt;NIP-55 (Android Signer Application)&lt;/a&gt; and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt;, shipped &lt;a href=&#34;https://github.com/greenart7c3/Amber/releases&#34;&gt;v6.1.0-pre1&lt;/a&gt; with a layout pass on the new-app connection flow and several reported-crash fixes. &lt;a href=&#34;https://github.com/greenart7c3/Amber/pull/416&#34;&gt;PR #416&lt;/a&gt; fixes &lt;code&gt;ActivityStatsBar&lt;/code&gt; layout and text overflow issues, &lt;a href=&#34;https://github.com/greenart7c3/Amber/pull/412&#34;&gt;PR #412&lt;/a&gt; improves notification-permission handling and error resilience, and &lt;a href=&#34;https://github.com/greenart7c3/Amber/pull/411&#34;&gt;PR #411&lt;/a&gt; ensures &lt;code&gt;SignerActivity&lt;/code&gt; always closes after handling a request so the app does not retain a stale signing screen. &lt;a href=&#34;https://github.com/greenart7c3/Amber/pull/409&#34;&gt;PR #409&lt;/a&gt; adds select/deselect-all functionality to the permissions list, and &lt;a href=&#34;https://github.com/greenart7c3/Amber/pull/410&#34;&gt;PR #410&lt;/a&gt; shortens the displayed npub in the account-selection supporting text so multi-account device users can scan the list at a glance.&lt;/p&gt;

&lt;h3 id=&#34;routstr-core-v0-4-3-improves-payment-refund-and-usage-reporting-2&#34;&gt;Routstr Core v0.4.3 improves payment, refund, and usage reporting&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/Routstr/routstr-core&#34;&gt;Routstr Core&lt;/a&gt;, the decentralized inference layer that combines Nostr for service discovery with &lt;a href=&#34;https://nostrcompass.org/en/topics/cashu/&#34;&gt;Cashu (Chaumian e-cash on Nostr)&lt;/a&gt; micropayments for private usage billing, shipped &lt;a href=&#34;https://github.com/Routstr/routstr-core/releases&#34;&gt;v0.4.3&lt;/a&gt; as a pre-release on May 1. The release improves payment and refund handling, sharpens cost tracking and usage reporting, and ships several fixes around API key display, message handling, and model validation.&lt;/p&gt;

&lt;h3 id=&#34;nostria-v3-1-37-through-v3-1-41-add-web-bookmarks-and-an-auto-theme-2&#34;&gt;Nostria v3.1.37 through v3.1.41 add Web Bookmarks and an Auto theme&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostria-app/nostria&#34;&gt;Nostria&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1zl3g38a6qypp6py2z07shggg45cu8qex992xpss7d8zrl28mu52s4cjajh&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;sondreb&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1zl3…jajh&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), the multi-platform Nostr client, shipped &lt;a href=&#34;https://github.com/nostria-app/nostria/releases&#34;&gt;v3.1.37 through v3.1.41&lt;/a&gt; on April 30 and May 4. The releases add &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-b0/&#34;&gt;NIP-B0 (Web Bookmarks)&lt;/a&gt; support, an &amp;#34;Auto&amp;#34; theme that follows device settings, in-app PDF viewing, layout fixes for the media player in fullscreen, and an improved article and note editor.&lt;/p&gt;

&lt;h3 id=&#34;noornote-v0-8-9-fixes-desktop-first-launch-empty-screen-2&#34;&gt;NoorNote v0.8.9 fixes desktop first-launch empty screen&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/77elements/noornote&#34;&gt;NoorNote&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub175nul9cvufswwsnpy99lvyhg7ad9nkccxhkhusznxfkr7e0zxthql9g6w0&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;alp&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub175n…g6w0&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), the cross-platform Nostr client, shipped &lt;a href=&#34;https://github.com/77elements/noornote/releases/tag/v0.8.9&#34;&gt;v0.8.9&lt;/a&gt; on April 28 fixing an empty-screen bug on the desktop app&amp;#39;s first launch where the welcome and login screen failed to render.&lt;/p&gt;

&lt;h3 id=&#34;kubo-v0-3-4-through-v0-4-1-ship-a-child-safe-nostr-video-platform-with-parent-controls-and-web-of-trust-feed-curation-2&#34;&gt;Kubo v0.3.4 through v0.4.1 ship a child-safe Nostr video platform with parent controls and Web of Trust feed curation&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/JeroenOnNostr/kubo&#34;&gt;Kubo&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1kdstrkmhv0yx8pdqcf9ed8l26752gqprx68twg7qp5nsd7qtegnsr3nsze&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Kubo.watch&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1kds…nsze&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;, a child-safe video platform on Nostr that lets parents curate their child&amp;#39;s content world through Web of Trust filters, shipped &lt;a href=&#34;https://github.com/JeroenOnNostr/kubo/releases/tag/kubo-v0.3.4&#34;&gt;v0.3.4&lt;/a&gt;, &lt;a href=&#34;https://github.com/JeroenOnNostr/kubo/releases/tag/kubo-v0.3.5&#34;&gt;v0.3.5&lt;/a&gt;, &lt;a href=&#34;https://github.com/JeroenOnNostr/kubo/releases/tag/kubo-v0.4.0&#34;&gt;v0.4.0&lt;/a&gt;, and &lt;a href=&#34;https://github.com/JeroenOnNostr/kubo/releases/tag/kubo-v0.4.1&#34;&gt;v0.4.1&lt;/a&gt; across May 4 and May 5. The platform is a soft fork of &lt;a href=&#34;https://github.com/soapbox-pub/ditto&#34;&gt;Ditto&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub10qdp2fc9ta6vraczxrcs8prqnv69fru2k6s2dj48gqjcylulmtjsg9arpj&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Team Soapbox&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub10qd…arpj&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; rebranded for the family-and-kids use case. Each child gets a separate Nostr keypair and a video-first feed where parents control time limits (15 to 180 minutes daily), allowed time windows, post action visibility (reply, repost, reactions, zaps), view-only mode, and an optional scroll cap that replaces infinite scroll with a &amp;#34;Next post&amp;#34; button. Trust assignments come in three levels (View, Interact, Extend), so parents can grant individual profiles or &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/72.md&#34;&gt;NIP-72 (Moderated Communities)&lt;/a&gt; entire communities the right to contribute, interact with, or extend their child&amp;#39;s feed. Feed sources include relays, communities, follow packs, and individual profiles, with a feed preview before content goes live. Recent work covers a &lt;a href=&#34;https://github.com/JeroenOnNostr/kubo/commit/63739eca57&#34;&gt;first-run parent tour&lt;/a&gt;, a &lt;a href=&#34;https://github.com/JeroenOnNostr/kubo/commit/37bf2e5ac1&#34;&gt;seed kid-friendly Follow pack on every new kid&lt;/a&gt;, &lt;a href=&#34;https://github.com/JeroenOnNostr/kubo/commit/66e6b296f9&#34;&gt;NIP-66 relay discovery with collapsible Browse-all and search-hide flags&lt;/a&gt;, &lt;a href=&#34;https://github.com/JeroenOnNostr/kubo/commit/bbb8d26da9&#34;&gt;kind 34236 vine play recording into kid watch history&lt;/a&gt;, kid &amp;#34;Request to interact&amp;#34; routing through to a parent Alerts inbox, and an Android wrapper bumped from versionCode 6 to 8 so each tagged release ships a native Android build alongside the web app at &lt;a href=&#34;https://kubo.watch&#34;&gt;kubo.watch&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&#34;unreleased-changes-8&#34;&gt;Unreleased changes&lt;/h2&gt;

&lt;h3 id=&#34;sprout-ships-desktop-v0-0-4-and-v0-0-5-alongside-nip-oa-agent-authentication-and-the-pair-relay-sidecar-2&#34;&gt;Sprout ships Desktop v0.0.4 and v0.0.5 alongside NIP-OA agent authentication and the pair-relay sidecar&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/block/sprout&#34;&gt;Sprout&lt;/a&gt;, Block&amp;#39;s Nostr client with a built-in relay, shipped &lt;a href=&#34;https://github.com/block/sprout/releases&#34;&gt;Sprout Desktop v0.0.4&lt;/a&gt; on May 5 and &lt;a href=&#34;https://github.com/block/sprout/releases&#34;&gt;v0.0.5&lt;/a&gt; on May 6, alongside roughly 80 merged PRs covering a major NIP-OA, NIP-43, and NIP-AB pairing pass. The flagship change in &lt;a href=&#34;https://github.com/block/sprout/pull/471&#34;&gt;PR #471&lt;/a&gt; wires NIP-OA agent authentication into the relay&amp;#39;s NIP-43 membership flow across WebSocket, REST, and git transports, so an autonomous agent can prove a specific human pubkey authorized its actions before the relay grants access. &lt;a href=&#34;https://github.com/block/sprout/pull/490&#34;&gt;PR #490&lt;/a&gt; follows up by unifying NIP-OA relay membership enforcement across all ingress paths so the WebSocket, REST, and git surfaces share one code path, and &lt;a href=&#34;https://github.com/block/sprout/pull/491&#34;&gt;PR #491&lt;/a&gt; materializes the &lt;code&gt;agent_owner_pubkey&lt;/code&gt; on NIP-OA auth so downstream consumers can tell which human authorized a given agent action. A new ephemeral sidecar relay for NIP-AB device pairing arrives in &lt;a href=&#34;https://github.com/block/sprout/pull/467&#34;&gt;PR #467&lt;/a&gt; as &lt;code&gt;sprout-pair-relay&lt;/code&gt;, and &lt;a href=&#34;https://github.com/block/sprout/pull/470&#34;&gt;PR #470&lt;/a&gt; makes the desktop client auto-detect the NIP-43 relay and route the target to a &lt;code&gt;/pair&lt;/code&gt; sidecar. Repository structure gets a pass via &lt;a href=&#34;https://github.com/block/sprout/pull/476&#34;&gt;PR #476&lt;/a&gt;, which reorganizes the repository as a pnpm workspace, adds deep links, and scaffolds the new web client repos page, while &lt;a href=&#34;https://github.com/block/sprout/pull/474&#34;&gt;PR #474&lt;/a&gt; scaffolds the browser-based web client itself, and &lt;a href=&#34;https://github.com/block/sprout/pull/479&#34;&gt;PR #479&lt;/a&gt; wires the relay to serve the web UI directly with a redesigned repos page. The web client expands further with &lt;a href=&#34;https://github.com/block/sprout/pull/485&#34;&gt;PR #485&lt;/a&gt;, which adds a repo detail page and clickable repo names. Desktop polish covers relay-access settings in &lt;a href=&#34;https://github.com/block/sprout/pull/458&#34;&gt;PR #458&lt;/a&gt;, an onboarding flow that supports membership checks and bring-your-own-key in &lt;a href=&#34;https://github.com/block/sprout/pull/457&#34;&gt;PR #457&lt;/a&gt;, a signed-and-notarized macOS build via &lt;a href=&#34;https://github.com/block/sprout/pull/472&#34;&gt;PR #472&lt;/a&gt; so the desktop binary clears Gatekeeper without manual override, a &amp;#34;keep awake while agents are active&amp;#34; setting in &lt;a href=&#34;https://github.com/block/sprout/pull/484&#34;&gt;PR #484&lt;/a&gt;, and a prevent-sleep spawn convention with expiry badge in &lt;a href=&#34;https://github.com/block/sprout/pull/487&#34;&gt;PR #487&lt;/a&gt;. Operational fixes include &lt;a href=&#34;https://github.com/block/sprout/pull/486&#34;&gt;PR #486&lt;/a&gt; raising &lt;code&gt;MAX_HISTORICAL_LIMIT&lt;/code&gt; from 500 to 10,000 to support deeper backfill queries, &lt;a href=&#34;https://github.com/block/sprout/pull/482&#34;&gt;PR #482&lt;/a&gt; including &lt;code&gt;p&lt;/code&gt; tags in kind:39000 events for DM channels, and &lt;a href=&#34;https://github.com/block/sprout/pull/480&#34;&gt;PR #480&lt;/a&gt; sweeping a long tail of profile, mention, deep link, channel link, and doctor page bugs.&lt;/p&gt;

&lt;h3 id=&#34;nostream-adds-marmot-relay-support-and-nip-25-reactions-2&#34;&gt;nostream adds Marmot relay support and NIP-25 reactions&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/Cameri/nostream&#34;&gt;nostream&lt;/a&gt;, the Node.js relay implementation, merged a productive week of protocol additions. Marmot Protocol relay support covering MIPs 00 through 03 lands in &lt;a href=&#34;https://github.com/Cameri/nostream/pull/602&#34;&gt;PR #602&lt;/a&gt;, which gives the relay first-class storage and forwarding for Marmot-encrypted messaging events. The smaller protocol additions: &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-25/&#34;&gt;NIP-25&lt;/a&gt; reactions support in &lt;a href=&#34;https://github.com/Cameri/nostream/pull/589&#34;&gt;PR #589&lt;/a&gt;, geohash prefix matching for &lt;code&gt;#g&lt;/code&gt; filters in &lt;a href=&#34;https://github.com/Cameri/nostream/pull/586&#34;&gt;PR #586&lt;/a&gt; so location-based queries can match parent regions, and a tightened &lt;code&gt;maxlimit&lt;/code&gt; check on subscription event requests in &lt;a href=&#34;https://github.com/Cameri/nostream/pull/600&#34;&gt;PR #600&lt;/a&gt; to prevent malformed REQ messages from triggering unbounded queries. On the test and dependency side, &lt;a href=&#34;https://github.com/Cameri/nostream/pull/556&#34;&gt;PR #556&lt;/a&gt; adds k6-based connection and message-rate-limit tests, &lt;a href=&#34;https://github.com/Cameri/nostream/pull/592&#34;&gt;PR #592&lt;/a&gt; updates &lt;code&gt;serialize-javascript&lt;/code&gt; to v7.0.3 closing a known dependency vulnerability, and &lt;a href=&#34;https://github.com/Cameri/nostream/pull/545&#34;&gt;PR #545&lt;/a&gt; skips Redis auth when credentials are unset to make local development workflows quieter.&lt;/p&gt;

&lt;h3 id=&#34;strfry-adds-per-connection-observability-and-reduces-nofiles-ceiling-2&#34;&gt;strfry adds per-connection observability and reduces nofiles ceiling&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/hoytech/strfry&#34;&gt;strfry&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1yxprsscnjw2e6myxz73mmzvnqw5kvzd5ffjya9ecjypc5l0gvgksh8qud4&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Doug Hoyte&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1yxp…qud4&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), the C&#43;&#43; Nostr relay, merged 14 PRs targeting observability and operational hygiene. The headline change is &lt;a href=&#34;https://github.com/hoytech/strfry/pull/218&#34;&gt;PR #218&lt;/a&gt;, which adds per-connection pending outbound observability and a configurable back-pressure cap, letting an operator see exactly which connection is queuing up writes and apply a connection-level limit before the relay&amp;#39;s overall send queue degrades. On the performance side, &lt;a href=&#34;https://github.com/hoytech/strfry/pull/224&#34;&gt;PR #224&lt;/a&gt; removes &lt;code&gt;std::function&lt;/code&gt; heap allocations from the per-event monitor fanout and switches to direct &lt;code&gt;map.find()&lt;/code&gt; lookups, cutting allocator pressure on busy relays. Metrics correctness improves with &lt;a href=&#34;https://github.com/hoytech/strfry/pull/225&#34;&gt;PR #225&lt;/a&gt;, which fires the &lt;code&gt;nostr_events_total&lt;/code&gt; Prometheus counter on successful database writes (the previous behavior counted at ingress, which double-counted events that fail validation). Operational hygiene rounds out the release: &lt;a href=&#34;https://github.com/hoytech/strfry/pull/219&#34;&gt;PR #219&lt;/a&gt; adds index bounds checks to the negentropy ingester, &lt;a href=&#34;https://github.com/hoytech/strfry/pull/235&#34;&gt;PR #235&lt;/a&gt; reduces the &lt;code&gt;nofiles&lt;/code&gt; ceiling from 1,000,000 to 524,288 to fit the kernel default range, and &lt;a href=&#34;https://github.com/hoytech/strfry/pull/238&#34;&gt;PR #238&lt;/a&gt; removes a long-standing IP-header workaround that the modern proxy stack no longer needs.&lt;/p&gt;

&lt;h3 id=&#34;damus-replaces-tenor-gifs-with-a-purple-proxy-and-ships-compaction-ux-2&#34;&gt;Damus replaces Tenor GIFs with a Purple proxy and ships compaction UX&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/damus-io/damus&#34;&gt;Damus&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub18m76awca3y37hkvuneavuw6pjj4525fw90necxmadrvjg0sdy6qsngq955&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;damus&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub18m7…q955&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;, the iOS Nostr client, merged &lt;a href=&#34;https://github.com/damus-io/damus/pull/3737&#34;&gt;PR #3737&lt;/a&gt; replacing the Tenor GIF integration with a &lt;a href=&#34;https://damus.io/purple/&#34;&gt;Damus Purple&lt;/a&gt; proxy, where Damus&amp;#39;s hosted subscription service relays GIF requests on behalf of the client so individual users do not directly query Tenor&amp;#39;s servers (a privacy improvement that also keeps Damus&amp;#39;s Apple-store posture clean). &lt;a href=&#34;https://github.com/damus-io/damus/pull/3733&#34;&gt;PR #3733&lt;/a&gt; improves large-database compaction UX with progress feedback for users running compaction on multi-gigabyte nostrdb stores, and &lt;a href=&#34;https://github.com/damus-io/damus/pull/3732&#34;&gt;PR #3732&lt;/a&gt; refines the compaction progress reporting and overall UI.&lt;/p&gt;

&lt;h3 id=&#34;primal-android-polishes-explore-alerts-and-the-nip-05-verified-badge-2&#34;&gt;Primal Android polishes Explore, alerts, and the NIP-05 verified badge&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app&#34;&gt;Primal Android&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub12vkcxr0luzwp8e673v29eqjhrr7p9vqq8asav85swaepclllj09sylpugg&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;primal&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub12vk…pugg&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; merged &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/1043&#34;&gt;PR #1043&lt;/a&gt; fixing a flickering &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-05/&#34;&gt;NIP-05 (Domain Verification)&lt;/a&gt; verified badge for users with &lt;code&gt;_@domain&lt;/code&gt; identifiers, &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/1042&#34;&gt;PR #1042&lt;/a&gt; adding paste handling for any event link in the note editor, &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/1041&#34;&gt;PR #1041&lt;/a&gt; implementing an Explore landing tab with recent users and recent searches, &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/1045&#34;&gt;PR #1045&lt;/a&gt; implementing alerts filters, and &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/1038&#34;&gt;PR #1038&lt;/a&gt; adding a video duration badge in feeds.&lt;/p&gt;

&lt;h3 id=&#34;alby-hub-adds-nwc-payments-from-app-connections-2&#34;&gt;Alby Hub adds NWC payments from app connections&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/getAlby/hub&#34;&gt;Alby Hub&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1getal6ykt05fsz5nqu4uld09nfj3y3qxmv8crys4aeut53unfvlqr80nfm&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Alby&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1get…0nfm&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; merged &lt;a href=&#34;https://github.com/getAlby/hub/pull/2267&#34;&gt;PR #2267&lt;/a&gt; allowing payments from app connections and &lt;a href=&#34;https://github.com/getAlby/hub/pull/2268&#34;&gt;PR #2268&lt;/a&gt; simplifying the onchain receive routing logic, both shipped through Alby Hub&amp;#39;s &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-47/&#34;&gt;NIP-47 (Nostr Wallet Connect)&lt;/a&gt; surface.&lt;/p&gt;

&lt;h3 id=&#34;routstrd-auth-a-dockerized-routstrd-for-teams-with-nip-98-auth-and-npub-rbac-2&#34;&gt;routstrd-auth: a Dockerized Routstrd for teams with NIP-98 auth and npub RBAC&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/Routstr/routstrd-auth&#34;&gt;routstrd-auth&lt;/a&gt;, created on April 27 by the Routstr team, is a Dockerized variant of Routstrd designed for multi-user team deployments where individual operators do not each run their own daemon. Activity in the period covers v0.1.6 through v0.1.15 across nearly 25 commits. The headline change is a granular npub-based role-based access control system (&lt;a href=&#34;https://github.com/Routstr/routstrd-auth/commit/8d0fd30cf4&#34;&gt;commit 8d0fd30&lt;/a&gt;) with &lt;code&gt;admin&lt;/code&gt; and &lt;code&gt;user&lt;/code&gt; roles, a bootstrap role for first-run setup, and a &lt;a href=&#34;https://github.com/Routstr/routstrd-auth/commit/dda1408ca1&#34;&gt;PATCH /npubs endpoint&lt;/a&gt; for changing an npub&amp;#39;s role at runtime. Client endpoints adopt &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/98.md&#34;&gt;NIP-98&lt;/a&gt; HTTP authentication with ownership tracking (&lt;a href=&#34;https://github.com/Routstr/routstrd-auth/commit/63da856b6a&#34;&gt;commit 63da856&lt;/a&gt;), so a Nostr-signed HTTP request authenticates the caller and confirms the client belongs to that npub. A &lt;code&gt;/usage&lt;/code&gt; endpoint reads directly from SQLite for fast accounting (&lt;a href=&#34;https://github.com/Routstr/routstrd-auth/commit/5badb4fcbf&#34;&gt;commit 5badb4f&lt;/a&gt;), node cooldown drops from 5 minutes to 42 seconds, and Cloudron setup instructions (&lt;a href=&#34;https://github.com/Routstr/routstrd-auth/commit/cef44d6911&#34;&gt;commit cef44d6&lt;/a&gt;) target operators who want a one-click deployment for their team. The project pairs with &lt;a href=&#34;https://github.com/routstr/routstrd&#34;&gt;Routstrd&lt;/a&gt; (covered above) to extend Routstr from a single-operator daemon into team infrastructure.&lt;/p&gt;

&lt;h3 id=&#34;routstrd-integrates-hermes-for-daemon-clients-and-remote-mode-2&#34;&gt;Routstrd integrates Hermes for daemon clients and remote mode&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/routstr/routstrd&#34;&gt;Routstrd&lt;/a&gt;, the local daemon that orchestrates Routstr inference clients, merged &lt;a href=&#34;https://github.com/routstr/routstrd/pull/22&#34;&gt;PR #22&lt;/a&gt; adding integration with &lt;a href=&#34;https://github.com/NousResearch/hermes-agent&#34;&gt;Hermes Agent&lt;/a&gt; (Nous Research&amp;#39;s open-source AI agent), so the agent&amp;#39;s config file gets populated with the model providers and API keys that Routstrd discovers over Nostr. The integration writes &lt;code&gt;~/.hermes/config.yaml&lt;/code&gt; with a base model block and a &lt;code&gt;custom_providers&lt;/code&gt; block, removing the need for the user to hand-configure Routstr providers in their AI agent. &lt;a href=&#34;https://github.com/routstr/routstrd/pull/21&#34;&gt;PR #21&lt;/a&gt; refactors the clients module, &lt;a href=&#34;https://github.com/routstr/routstrd/pull/20&#34;&gt;PR #20&lt;/a&gt; adds a remote command, &lt;a href=&#34;https://github.com/routstr/routstrd/pull/19&#34;&gt;PR #19&lt;/a&gt; fixes the remote-mode clients list, and &lt;a href=&#34;https://github.com/routstr/routstrd/pull/16&#34;&gt;PR #16&lt;/a&gt; makes the client ID required in the &lt;code&gt;/clients/add&lt;/code&gt; endpoint to prevent ambiguous registrations.&lt;/p&gt;

&lt;h3 id=&#34;divine-ships-nip-07-web-sign-in-and-16-locale-key-parity-2&#34;&gt;diVine ships NIP-07 web sign-in and 16-locale key parity&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/divinevideo/divine-mobile&#34;&gt;diVine&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1wmr34t36fy03m8hvgl96zl3znndyzyaqhwmwdtshwmtkg03fetaqhjg240&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;rabble&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1wmr…g240&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), the video client, shipped two iOS releases this week alongside 139 merged PRs covering feed pull-to-refresh, notification grouping, and a back-camera default for new users. &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/3994&#34;&gt;PR #3994&lt;/a&gt; adds &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-07/&#34;&gt;NIP-07 (Browser Extension Signer)&lt;/a&gt; sign-in for the web build, &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/3992&#34;&gt;PR #3992&lt;/a&gt; translates 16 non-English locales to full key parity, and &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/3944&#34;&gt;PR #3944&lt;/a&gt; groups notifications by video and shows thumbnails while fixing a realtime flicker.&lt;/p&gt;

&lt;h3 id=&#34;openchat-ships-18-iterative-ui-improvements-2&#34;&gt;OpenChat ships 18 iterative UI improvements&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/DavidGershony/Scramble&#34;&gt;OpenChat&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1nwt2g6fkshuj4udrs9zxr8992dyp75s9qx647kxaue98trzqqmssrxx05y&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;The Dude&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1nwt…x05y&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) shipped 18 releases in the v0.6.50 through v0.6.55 range covering iterative UI improvements.&lt;/p&gt;

&lt;h3 id=&#34;whitenoise-rs-ships-per-account-database-isolation-and-proposal-upgrades-2&#34;&gt;whitenoise-rs ships per-account database isolation and proposal upgrades&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs&#34;&gt;whitenoise-rs&lt;/a&gt;, the Rust core library for the White Noise messenger, merged &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/796&#34;&gt;PR #796&lt;/a&gt; (&amp;#34;Phase 18e&amp;#34;) moving message projection tables into per-account databases, and &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/792&#34;&gt;PR #792&lt;/a&gt; doing the same for membership and push tables. &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/791&#34;&gt;PR #791&lt;/a&gt; adds proposal upgrades so groups can extend their functionality with new proposal types when all members support them, and &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/794&#34;&gt;PR #794&lt;/a&gt; fixes the Android keyring migration build alongside an MDK revision bump.&lt;/p&gt;

&lt;h3 id=&#34;whitenoise-flutter-ui-adds-leave-group-terminology-consistency-and-fastlane-release-scaffolding-2&#34;&gt;whitenoise Flutter UI adds leave-group, terminology consistency, and Fastlane release scaffolding&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/marmot-protocol/whitenoise&#34;&gt;whitenoise&lt;/a&gt;, the Flutter mobile UI for the White Noise messenger, merged &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/604&#34;&gt;PR #604&lt;/a&gt; adding a leave-group action from the chat list UI, &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/595&#34;&gt;PR #595&lt;/a&gt; renaming contact actions to Follow and Unfollow across all locales for terminology consistency, and &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/601&#34;&gt;PR #601&lt;/a&gt; adding Fastlane release scaffolding for the mobile build pipeline.&lt;/p&gt;

&lt;h3 id=&#34;angor-0-2-21-ships-compact-app-flows-alongside-key-provider-and-network-switch-hardening-2&#34;&gt;Angor 0.2.21 ships compact app flows alongside key provider and network-switch hardening&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/block-core/angor&#34;&gt;Angor&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1wrzguj625auyeysfuuxzf7ywhzlwfz9gm3fml2lul72gwqxw8n9swtcm02&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Angor&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1wrz…cm02&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;, the Bitcoin crowdfunding platform with Nostr-published founder profiles and project announcements, shipped &lt;a href=&#34;https://github.com/block-core/angor/releases&#34;&gt;Angor 0.2.21&lt;/a&gt; on May 6 rolling up a week of mobile and integration work. &lt;a href=&#34;https://github.com/block-core/angor/pull/802&#34;&gt;PR #802&lt;/a&gt; and &lt;a href=&#34;https://github.com/block-core/angor/pull/810&#34;&gt;PR #810&lt;/a&gt; improve mobile design performance and controls with deferred heavy loads, lazy-mounted founder views, polished mobile founder and investor flows, and tighter network and theme switching responsiveness on Android. &lt;a href=&#34;https://github.com/block-core/angor/pull/819&#34;&gt;PR #819&lt;/a&gt; polishes the compact app flows, and &lt;a href=&#34;https://github.com/block-core/angor/pull/822&#34;&gt;PR #822&lt;/a&gt; adds a project-search-by-ID surface in Find Projects so investors can resolve a project from its identifier alone. &lt;a href=&#34;https://github.com/block-core/angor/pull/804&#34;&gt;PR #804&lt;/a&gt; adds a secure key provider, &lt;a href=&#34;https://github.com/block-core/angor/pull/807&#34;&gt;PR #807&lt;/a&gt; fixes relay investment storage to use a network-specific derivation path, &lt;a href=&#34;https://github.com/block-core/angor/pull/805&#34;&gt;PR #805&lt;/a&gt; corrects an inverted testnet/mainnet cache key in the MempoolSpaceIndexerApi, and &lt;a href=&#34;https://github.com/block-core/angor/pull/806&#34;&gt;PR #806&lt;/a&gt; ensures a network switch properly clears all cached data and resets the UI state. &lt;a href=&#34;https://github.com/block-core/angor/pull/820&#34;&gt;PR #820&lt;/a&gt; corrects integration test assertions for &lt;code&gt;PaymentFlow.Reset&lt;/code&gt; and stale profile data, and &lt;a href=&#34;https://github.com/block-core/angor/pull/823&#34;&gt;PR #823&lt;/a&gt; converts &lt;code&gt;FindProjectsViewModel.cs&lt;/code&gt; from UTF-16 to UTF-8 so the source file matches the rest of the codebase.&lt;/p&gt;

&lt;h3 id=&#34;keydex-polishes-data-layer-recovery-flow-and-steward-owner-name-display-2&#34;&gt;Keydex polishes data layer, recovery flow, and steward owner-name display&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/keydex-app/keydex&#34;&gt;Keydex&lt;/a&gt;, the social-recovery app for Nostr keys, merged &lt;a href=&#34;https://github.com/keydex-app/keydex/pull/126&#34;&gt;PR #126&lt;/a&gt; introducing a data-layer refactor plan, &lt;a href=&#34;https://github.com/keydex-app/keydex/pull/122&#34;&gt;PR #122&lt;/a&gt; fixing a black screen after the import-key, vault-backup, and save-recovery-plan sequence, and &lt;a href=&#34;https://github.com/keydex-app/keydex/pull/121&#34;&gt;PR #121&lt;/a&gt; correcting an owner-name display where the owner showed as &amp;#34;You&amp;#34; on steward devices, where the owner&amp;#39;s actual name should appear.&lt;/p&gt;

&lt;h2 id=&#34;newly-tracked-and-discovered-2&#34;&gt;Newly tracked and discovered&lt;/h2&gt;

&lt;h3 id=&#34;bitmacro-signer-a-self-hostable-nip-46-bunker-with-client-side-key-encryption-2&#34;&gt;BitMacro Signer: a self-hostable NIP-46 bunker with client-side key encryption&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/bitmacro/bitmacro-signer&#34;&gt;BitMacro Signer&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1at83n2trk5kxcyag400crtgps7n0mwcjtfezcappntu083k7fqrqrga4ty&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;BitMacro&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1at8…a4ty&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; is a self-hostable Nostr signing tool that manages private keys using the &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; bunker model. The signer encrypts keys on the client before storage so the server side never holds plaintext, and signs events through a relay using a lightweight daemon. The Docker-ready packaging targets users and operators who want a privacy-focused alternative to running a custom Amber-style mobile signer.&lt;/p&gt;

&lt;p&gt;This week&amp;#39;s &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-34/&#34;&gt;NIP-34&lt;/a&gt; repo discovery surfaced 26 new repository announcements, of which four stand out.&lt;/p&gt;

&lt;h3 id=&#34;gnostr-a-git-implementation-built-directly-on-nostr-2&#34;&gt;gnostr: a git implementation built directly on Nostr&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/gnostr-org/gnostr&#34;&gt;gnostr&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub15d9enu3v0yxyud4jk0pvxk3kmvrzymjpc6f0eq4ck44vr32qck7smrxq6k&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;gnostr&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub15d9…xq6k&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; is a git implementation built directly on Nostr, distinct from &lt;code&gt;git-remote-nostr&lt;/code&gt; in that it ships its own working-tree commands as a from-scratch Nostr-native version-control client.&lt;/p&gt;

&lt;h3 id=&#34;nostr-archive-a-content-addressed-archive-spec-on-nostr-and-blossom-2&#34;&gt;nostr-archive: a content-addressed archive spec on Nostr and Blossom&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://gitworkshop.dev/nostr-archive/nostr-archive&#34;&gt;nostr-archive&lt;/a&gt; is a draft specification and reference implementation for content-addressed archives on Nostr and Blossom, hosted as a NIP-34 repository so the spec discussion happens in the same place the reference code lives.&lt;/p&gt;

&lt;h3 id=&#34;flower-cache-a-local-blossom-cache-server-2&#34;&gt;flower-cache: a local Blossom cache server&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://gitworkshop.dev/flower-cache/flower-cache&#34;&gt;flower-cache&lt;/a&gt; is a local Blossom cache server, useful for clients that want a hot local mirror of a remote Blossom server&amp;#39;s blob set without round-tripping the upstream on every blob fetch.&lt;/p&gt;

&lt;h3 id=&#34;routstrd-the-routstr-daemon-s-nip-34-mirror-2&#34;&gt;routstrd: the routstr daemon&amp;#39;s NIP-34 mirror&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://gitworkshop.dev/routstrd/routstrd&#34;&gt;routstrd&lt;/a&gt; is the routstr daemon&amp;#39;s NIP-34 mirror, complementing the GitHub repository covered above.&lt;/p&gt;

&lt;h3 id=&#34;micro-vpn-ansible-ansible-playbooks-for-vpn-deployment-over-nip-34-2&#34;&gt;micro-vpn-ansible: Ansible playbooks for VPN deployment over NIP-34&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://gitworkshop.dev/npub1mu9fsh42uh48trncevdpju8cyv3mxmj9qj3rdjqc46zc324c6hys9ctsnc/relay.ngit.dev/micro-vpn-ansible&#34;&gt;micro-vpn-ansible&lt;/a&gt; is a small Ansible playbook collection for deploying a micro VPN, hosted as a NIP-34 repository on &lt;code&gt;relay.ngit.dev&lt;/code&gt; and mirrored on &lt;code&gt;gitnostr.com&lt;/code&gt;. The repo&amp;#39;s canonical announcement carries three maintainers, making it a small example of how multi-maintainer collaboration is expressed in NIP-34 today.&lt;/p&gt;

&lt;h2 id=&#34;protocol-work-2&#34;&gt;Protocol work&lt;/h2&gt;

&lt;h3 id=&#34;nip-updates-2&#34;&gt;NIP updates&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A brokerless hashrate market over Nostr&lt;/strong&gt; (&lt;a href=&#34;https://njump.me/nevent1qqsqd2478wqugjh9ur9lenw9la0wd987h6jcc0tma4kkuat4xceymvszypxxmj0zcqtwqm34f48gzulrg99daaczllhtqun7xsldkh8neua2jhr32rf&#34;&gt;draft proposal&lt;/a&gt;): Anonymous draft NIP from a Nostr long-form post arguing the current hashrate-market players (Braiins, Nicehash, Mining Rig Rentals) are all custodial brokers that KYC users and can be censored. The proposal sketches a peer-to-peer hashrate market where Stratum endpoints, hashrate listings, and contract escrow ride on Nostr events, with no broker-controlled web app in the path. Open for criticism and not yet posted as a PR against &lt;code&gt;nostr-protocol/nips&lt;/code&gt;, the draft leaves the economic design pieces (escrow custody, contract settlement, dispute resolution) as the load-bearing part still under debate.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Curated Feeds: a simpler alternative to DVM feeds&lt;/strong&gt; (&lt;a href=&#34;https://njump.me/nevent1qqsqj55kvu28uyq2jr6nfwx20mv7c0vkm0vxkgx0zzrnanfp4wwv8nczyzm7669svt0xkjsju50a22zurc0qa589z2xd4yatzx6p2z64a5e0cyxz3e3&#34;&gt;draft proposal&lt;/a&gt;): A draft argues that &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-90/&#34;&gt;NIP-90&lt;/a&gt; Data Vending Machines were designed as a general-purpose compute marketplace, and the request/response model is heavier than necessary when all a client wants is an addressable list of event IDs. The proposal suggests publishing curated feeds as a thin addressable event whose content is just an ordered list of event references, no DVM round-trip required. The pitch is that simpler primitives win adoption, and DVMs can stay focused on workloads where the compute is genuinely dynamic.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Profile Colors: deterministic visual identity&lt;/strong&gt; (&lt;a href=&#34;https://njump.me/nevent1qqsy3tj7mn3r7wczmc52aknf5ym43lj3rrhd3sfprzvc6qydsq62wrgzyzjk8j56zmt5fwv088l5y84hqq4gags3grvuznlu4zmyt54w34cccyxenp3&#34;&gt;draft proposal&lt;/a&gt;): A new draft NIP for deriving deterministic, readable colors from a Nostr pubkey so user avatars, mention chips, and other UI surfaces look identical across clients. The draft is positioned as a UI-only NIP that requires no relay or signer changes; clients implement the color hash function consistently and the visual identity follows.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Namecoin-Track NIPs: anchoring identity, relays, TLS, and reputation&lt;/strong&gt; (&lt;a href=&#34;https://njump.me/nevent1qqsydpjnaj2netmv0h5mlm2j6zpk8u50yvc9pqth3ly8pzuwy22720szypp3shk7edn43y5zfvdr0ftl8eq8l00zaknjqx3c9xuv7ja8ck60q7uupzs&#34;&gt;draft cluster&lt;/a&gt;): A separable cluster of draft NIPs that move pieces of the existing Nostr stack into Namecoin-anchored records. Each NIP in the cluster targets a single concern: identity, relay metadata, TLS certificate pinning, and reputation assertions. The cluster is ambitious and not yet a PR; the discussion thread is still working through whether Namecoin-style anchoring is worth the operational cost.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;nip-deep-dive-nip-34-git-stuff-2&#34;&gt;NIP Deep Dive: NIP-34 (git stuff)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-34/&#34;&gt;NIP-34&lt;/a&gt; defines event kinds for hosting git repositories, patches, pull requests, issues, and merge status on Nostr relays. It is the standard that turns Nostr into a coordination layer for code collaboration: the repository data still lives on a git server (GitHub, a self-hosted forge, or a GRASP server), while announcement events, patches, PRs, issues, and status updates ride on relays.&lt;/p&gt;

&lt;p&gt;A repository is announced as a kind &lt;code&gt;30617&lt;/code&gt; addressable event whose &lt;code&gt;d&lt;/code&gt; tag is a kebab-case identifier (typically the project name) and whose body includes &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;description&lt;/code&gt;, one or more &lt;code&gt;clone&lt;/code&gt; URLs, optional &lt;code&gt;web&lt;/code&gt; URLs, a &lt;code&gt;relays&lt;/code&gt; tag listing relays the maintainer monitors, and a &lt;code&gt;maintainers&lt;/code&gt; tag with additional pubkeys allowed to manage the project. An &lt;code&gt;r&lt;/code&gt; tag annotated with the &lt;code&gt;euc&lt;/code&gt; (&amp;#34;earliest unique commit&amp;#34;) marker carries the commit ID of the first commit unique to this repository, which lets clients group mirrors and forks of the same project across different hosts. Repository State announcements (kind &lt;code&gt;30618&lt;/code&gt;) are an optional canonical pointer to current branch and tag heads, with &lt;code&gt;refs/heads/&amp;lt;branch&amp;gt;&lt;/code&gt; and &lt;code&gt;refs/tags/&amp;lt;tag&amp;gt;&lt;/code&gt; tag pairs and a &lt;code&gt;HEAD&lt;/code&gt; tag for the default branch.&lt;/p&gt;

&lt;p&gt;The canonical ngit repository announcement, signed by maintainer &lt;code&gt;npub15qydau2hjma6ngxkl2cyar74wzyjshvl65za5k5rl69264ar2exs5cyejr&lt;/code&gt;, looks like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;08bb929a05fd9bbb5e1b227a3850269f2f9615e9e830bd34e664b72df14dead6&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1758124128,
  &amp;#34;kind&amp;#34;: 30617,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;d&amp;#34;, &amp;#34;ngit&amp;#34;],
    [&amp;#34;r&amp;#34;, &amp;#34;26689f97810fc656c7134c76e2a37d33b2e40ce7&amp;#34;, &amp;#34;euc&amp;#34;],
    [&amp;#34;name&amp;#34;, &amp;#34;ngit&amp;#34;],
    [&amp;#34;description&amp;#34;, &amp;#34;cli and git plugin for code collaboration over nostr&amp;#34;],
    [&amp;#34;clone&amp;#34;, &amp;#34;https://codeberg.org/DanConwayDev/ngit-cli.git&amp;#34;, &amp;#34;https://relay.ngit.dev/npub15qydau2hjma6ngxkl2cyar74wzyjshvl65za5k5rl69264ar2exs5cyejr/ngit.git&amp;#34;],
    [&amp;#34;web&amp;#34;, &amp;#34;https://gitworkshop.dev/danconwaydev.com/ngit&amp;#34;],
    [&amp;#34;relays&amp;#34;, &amp;#34;wss://relay.damus.io&amp;#34;, &amp;#34;wss://nos.lol&amp;#34;, &amp;#34;wss://relay.nostr.band&amp;#34;],
    [&amp;#34;maintainers&amp;#34;, &amp;#34;a008def15796fba9a0d6fab04e8fd57089285d9fd505da5a83fe8aad57a3564d&amp;#34;, &amp;#34;a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd&amp;#34;],
    [&amp;#34;alt&amp;#34;, &amp;#34;git repository: ngit&amp;#34;]
  ],
  &amp;#34;content&amp;#34;: &amp;#34;&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;ad571d2ec44fcdb5d684281deb8aea3862b6660d73e66f1c921f381f2fec6869f4b9444414b4ffdafccd414f3489502af193401b35edcebd8f50dcebbbc0b37a&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Patches use kind &lt;code&gt;1617&lt;/code&gt; and carry &lt;code&gt;git format-patch&lt;/code&gt; output in the content body, referencing the target repository through an &lt;code&gt;a&lt;/code&gt; tag of the form &lt;code&gt;30617:&amp;lt;maintainer-pubkey&amp;gt;:&amp;lt;d-tag&amp;gt;&lt;/code&gt;. Patch series chain through &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-10/&#34;&gt;NIP-10 (Text Note Threading)&lt;/a&gt; &lt;code&gt;e&lt;/code&gt; reply tags. Pull requests use kind &lt;code&gt;1618&lt;/code&gt; and are intended for changesets larger than 60 KB; a PR points to a branch tip with a &lt;code&gt;c&lt;/code&gt; tag (current commit ID), one or more &lt;code&gt;clone&lt;/code&gt; tags listing where the commit can be fetched, and an optional &lt;code&gt;merge-base&lt;/code&gt; tag. Before signing the PR event, clients SHOULD push the branch tip to &lt;code&gt;refs/nostr/&amp;lt;event-id&amp;gt;&lt;/code&gt; on every clone URL the user can write to, and if they have no write access, fall back to a &lt;code&gt;personal-fork&lt;/code&gt; repository announcement that lists alternative GRASP servers. Updates to the branch tip are published as kind &lt;code&gt;1619&lt;/code&gt; PR Update events that reference the original PR through capital-letter &lt;code&gt;E&lt;/code&gt; and &lt;code&gt;P&lt;/code&gt; tags. Issues use kind &lt;code&gt;1621&lt;/code&gt; with markdown content, and replies to any NIP-34 thread (issues, patches, PRs alike) follow standard &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-22/&#34;&gt;NIP-22 (Comments)&lt;/a&gt; comment threading. Status events move a thread between Open (&lt;code&gt;1630&lt;/code&gt;), Applied/Merged or Resolved (&lt;code&gt;1631&lt;/code&gt;), Closed (&lt;code&gt;1632&lt;/code&gt;), and Draft (&lt;code&gt;1633&lt;/code&gt;); a &lt;code&gt;1631&lt;/code&gt; can include &lt;code&gt;merge-commit&lt;/code&gt; and &lt;code&gt;applied-as-commits&lt;/code&gt; tags so clients render merge state without an external API call.&lt;/p&gt;

&lt;p&gt;This week&amp;#39;s data shows where NIP-34 is being used in production. &lt;a href=&#34;https://gitworkshop.dev/joinmarket-ng/joinmarket-ng&#34;&gt;joinmarket-ng&lt;/a&gt;, the modern JoinMarket alternative implementation, accumulated 15 patches in the period across &lt;code&gt;relay.ngit.dev&lt;/code&gt;. &lt;a href=&#34;https://gitworkshop.dev&#34;&gt;GitWorkshop.dev&lt;/a&gt; saw two new issues (one on file search, one on Nostr Connect sending wrong permissions). &lt;a href=&#34;https://gitworkshop.dev/ngit-indexer/ngit-indexer&#34;&gt;ngit-indexer&lt;/a&gt;, the relay implementation that discovers and syncs repository announcements across the network, saw two patches and an issue noting it was not advertising &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-45/&#34;&gt;NIP-45 (Event Counting)&lt;/a&gt; in &lt;code&gt;supported_nips&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The wider &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-34/&#34;&gt;NIP-34&lt;/a&gt; story is the same as last week&amp;#39;s &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-04-29-newsletter/#gitworkshop-ships-in-browser-pr-merge-repository-following-and-a-bandwidth-efficient-git-explorer&#34;&gt;GitWorkshop v2 launch&lt;/a&gt;: the in-browser PR merge button works because GRASP servers, ngit, and the &lt;code&gt;nostr://&lt;/code&gt; clone URL scheme together close the loop on a fully decentralized forge. The full implementation roster, primary sources, and event-kind reference are on the &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-34/&#34;&gt;NIP-34 topic page&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&#34;nip-deep-dive-nip-53-live-activities-2&#34;&gt;NIP Deep Dive: NIP-53 (Live Activities)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-53/&#34;&gt;NIP-53&lt;/a&gt; defines the standard event surface for live activities on Nostr: live streams, persistent meeting spaces, scheduled conference events, listener presence, and the live chat channel that ties chat messages to a specific live activity record. Five event kinds work together to advertise what is happening live, who is participating, and where the audio or video is being served. Because every live activity is described as a Nostr event, any client can discover an activity, link to it from outside chat, and publish into its chat channel without a forge-specific API.&lt;/p&gt;

&lt;p&gt;A live stream is announced as a kind &lt;code&gt;30311&lt;/code&gt; addressable event. Its &lt;code&gt;d&lt;/code&gt; tag is the stable identifier, the &lt;code&gt;streaming&lt;/code&gt; tag points at the playback URL, and the &lt;code&gt;status&lt;/code&gt; tag carries one of &lt;code&gt;planned&lt;/code&gt;, &lt;code&gt;live&lt;/code&gt;, or &lt;code&gt;ended&lt;/code&gt;. Each &lt;code&gt;p&lt;/code&gt; tag carries a pubkey, a relay hint, a displayable role marker (&lt;code&gt;Host&lt;/code&gt;, &lt;code&gt;Speaker&lt;/code&gt;, &lt;code&gt;Participant&lt;/code&gt;), and an optional fifth term: a SHA-256 of the activity&amp;#39;s full &lt;code&gt;a&lt;/code&gt; tag signed by the participant&amp;#39;s private key. Without that proof, clients MAY display the participant as &amp;#34;invited&amp;#34; only, which prevents malicious event owners from listing well-known accounts to lure followers into a fake event. Hosts can pin one or more chat messages by listing their event IDs in &lt;code&gt;pinned&lt;/code&gt; tags, and providers SHOULD keep the published participant list small (under 1000 users), treating the list as a sample, not a full roster.&lt;/p&gt;

&lt;p&gt;A representative Nests-style audio room announcement looks like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;8c1e6d7b3f2e9a4d5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;82341f882b6eabcd2ba7f1ef90aad961cf074af15b9ef44a09f9d2a8fbfbe6a2&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1746540000,
  &amp;#34;kind&amp;#34;: 30311,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;d&amp;#34;, &amp;#34;nests-room-2026-05-05-protocol-discussion&amp;#34;],
    [&amp;#34;title&amp;#34;, &amp;#34;Protocol discussion: NIP-34 git workflows&amp;#34;],
    [&amp;#34;summary&amp;#34;, &amp;#34;Open call for ngit, GitWorkshop, and joinmarket-ng maintainers&amp;#34;],
    [&amp;#34;streaming&amp;#34;, &amp;#34;https://moq.amethyst.social/rooms/protocol-discussion-2026-05-05&amp;#34;],
    [&amp;#34;starts&amp;#34;, &amp;#34;1746543600&amp;#34;],
    [&amp;#34;status&amp;#34;, &amp;#34;live&amp;#34;],
    [&amp;#34;current_participants&amp;#34;, &amp;#34;12&amp;#34;],
    [&amp;#34;service&amp;#34;, &amp;#34;wss://nests.amethyst.social/&amp;#34;],
    [&amp;#34;p&amp;#34;, &amp;#34;a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd&amp;#34;, &amp;#34;wss://relay.damus.io&amp;#34;, &amp;#34;Host&amp;#34;, &amp;#34;f1e0d7a8b3c2d1e0f9a8b7c6d5e4f3a2b1c0d9e8f7a6b5c4d3e2f1a0b9c8d7e6&amp;#34;],
    [&amp;#34;p&amp;#34;, &amp;#34;266815e0c9210dfa324c6cba3573b14bee49da4209a9456f9484e5106cd408a5&amp;#34;, &amp;#34;wss://nos.lol&amp;#34;, &amp;#34;Speaker&amp;#34;],
    [&amp;#34;p&amp;#34;, &amp;#34;0057059046164d2238bbdbdf45fa2e106f59188289f6842d6bf362218ef4a58c&amp;#34;, &amp;#34;&amp;#34;, &amp;#34;Participant&amp;#34;],
    [&amp;#34;relays&amp;#34;, &amp;#34;wss://relay.damus.io&amp;#34;, &amp;#34;wss://nos.lol&amp;#34;],
    [&amp;#34;t&amp;#34;, &amp;#34;nostr&amp;#34;],
    [&amp;#34;t&amp;#34;, &amp;#34;nip-34&amp;#34;]
  ],
  &amp;#34;content&amp;#34;: &amp;#34;&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;5a3e8b7c1d2f4a6b9e8d7c6b5a4f3e2d1c0b9a8f7e6d5c4b3a2f1e0d9c8b7a6f5e4d3c2b1a0f9e8d7c6b5a4f3e2d1c0b9a8f7e6d5c4b3a2f1e0d9c8b7a6f5e4d3&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The first &lt;code&gt;p&lt;/code&gt; tag includes a fifth-term signed proof, so clients render that participant as a confirmed Host. The other two &lt;code&gt;p&lt;/code&gt; tags lack proofs, so they display as invited participants until they sign in.&lt;/p&gt;

&lt;p&gt;NIP-53 separates the persistent room from the scheduled event held inside it. A kind &lt;code&gt;30312&lt;/code&gt; Meeting Space defines a room with a &lt;code&gt;d&lt;/code&gt; identifier, human-readable &lt;code&gt;room&lt;/code&gt; name, summary, optional image, status (&lt;code&gt;open&lt;/code&gt;, &lt;code&gt;private&lt;/code&gt;, or &lt;code&gt;closed&lt;/code&gt;), a &lt;code&gt;service&lt;/code&gt; URL, optional API endpoint, hashtag &lt;code&gt;t&lt;/code&gt; tags, and one or more provider &lt;code&gt;p&lt;/code&gt; tags. A kind &lt;code&gt;30313&lt;/code&gt; Conference Event represents a scheduled or ongoing meeting inside that room, referenced through an &lt;code&gt;a&lt;/code&gt; tag pointing at &lt;code&gt;30312:pubkey:room-id&lt;/code&gt; with an optional relay hint. The room/event split is what gives NIP-53 conference-grade scheduling: a single room hosts many &lt;code&gt;30313&lt;/code&gt; events over time, each with its own start, end, and roster, while the room&amp;#39;s hosts and providers stay stable. Listener presence is a separate kind &lt;code&gt;10312&lt;/code&gt; regular replaceable event, with an &lt;code&gt;a&lt;/code&gt; tag pointing at the activity and an optional &lt;code&gt;hand&lt;/code&gt; tag for raised-hand signaling. Live chat uses kind &lt;code&gt;1311&lt;/code&gt;, where each chat message MUST include an &lt;code&gt;a&lt;/code&gt; tag pointing at the activity record so chat is bound to one specific live activity.&lt;/p&gt;

&lt;p&gt;The Nostr live-activity surface is intentionally thin: NIP-53 advertises the activity, while other NIPs handle adjacent concerns. Zaps to live streams use &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-57/&#34;&gt;NIP-57 (Zaps)&lt;/a&gt; zap receipts (kind &lt;code&gt;9735&lt;/code&gt;) bound to the stream&amp;#39;s &lt;code&gt;30311&lt;/code&gt; event, fundraising goals attached to a stream use &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-75/&#34;&gt;NIP-75 (Zap Goals)&lt;/a&gt; zap goals, video recordings can be republished as &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-71/&#34;&gt;NIP-71 (Video Events)&lt;/a&gt; video events, and remote signing for participation can use &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; so a streamer never pastes an nsec into a streaming client.&lt;/p&gt;

&lt;p&gt;This week&amp;#39;s signal lines up with the broader live-activity story. The &lt;a href=&#34;#amethyst-stabilizes-nests-with-keep-alive-jwt-resilience-and-lifecycle-subscriptions&#34;&gt;Amethyst Nests stability sprint&lt;/a&gt; covered above is exactly the failure-mode hardening a NIP-53 implementation needs once it reaches production scale: JWT refresh without audio gaps, lifecycle-aware subscriptions, relay keep-alive, and a visible speaking-participant indicator. &lt;a href=&#34;https://zap.stream/&#34;&gt;Zap.stream&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1v0lxxxxutpvrelsksy8cdhgfux9l6a42hsj2qzquu2zk7vc9qnkszrqj49&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Kieran&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1v0l…qj49&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) remains the longest-running NIP-53 client in production, &lt;a href=&#34;https://github.com/r0d8lsh0p/shosho-releases&#34;&gt;Shosho&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1sh0spghk4yvy2d2v35kelw45qq4msk6zykaw4ds047e9slzs8r4qr7q2xa&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Shosho – Live Stream on Nostr&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1sh0…q2xa&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; shipped the v0.11 through v0.15 progression covered in newsletters &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-01-13-newsletter/&#34;&gt;#5&lt;/a&gt; through &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-04-08-newsletter/&#34;&gt;#17&lt;/a&gt; adding VOD, room presence, threaded chat, MP4 replays, and OBS-connected Shows, &lt;a href=&#34;https://hivetalk.org&#34;&gt;HiveTalk&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1z0lcg9p2v5nzg5fycxq0k56ze6snp42clmrafzqpn5w6u74v5x9q708ldk&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;HiveTalk&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1z0l…8ldk&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; covers the video-conferencing case with Lightning zaps, &lt;a href=&#34;https://cornychat.com&#34;&gt;Corny Chat&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1c0rnyyhmdnvg6xkvrrmgf8rxp3r28jtjhad8vmze8rgxf87aed7qlltlvg&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Corny Chat&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1c0r…tlvg&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; and &lt;a href=&#34;https://nostrnests.com&#34;&gt;nostrnests&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1us9uc0sjjg0vyvh7vefgu2a96hx5up5gujl6pqays65hlk4de6hsnwq4g0&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Nostr Nests&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1us9…q4g0&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; cover the Clubhouse-style audio room case, and &lt;a href=&#34;https://github.com/zeSchlausKwab/wavefunc&#34;&gt;WaveFunc&lt;/a&gt; uses kind &lt;code&gt;1311&lt;/code&gt; for internet radio station chat. The full implementation roster, the proof-of-agreement gating recommendation, and the room/event split rationale are on the &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-53/&#34;&gt;NIP-53 topic page&lt;/a&gt;.&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;That&amp;#39;s it for this week. If you&amp;#39;re building something or have news to share, DM us on Nostr or find us at &lt;a href=&#34;https://nostrcompass.org&#34;&gt;nostrcompass.org&lt;/a&gt;.&lt;/p&gt;
 &lt;/blockquote&gt;
    </content>
    <updated>2026-05-06T19:16:16Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs9pe59y6dlxactlgumqy0ql3rt8tth582grnh206f5tdx5mt0u25gzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqxxzpcz</id>
    
      <title type="html">Nostr Compass Podcast #19 is LIVE: Amethyst ships Marmot MIP ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs9pe59y6dlxactlgumqy0ql3rt8tth582grnh206f5tdx5mt0u25gzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqxxzpcz" />
    <content type="html">
      In reply to &lt;a href=&#39;/naddr1qq0k2urfwdhkgefdxymnwdec8y6rwdfkxuurgttxvcekvcnsd9nxwq3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqp6kvyxqdha&#39;&gt;naddr1qq…qdha&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;Nostr Compass Podcast #19 is LIVE: Amethyst ships Marmot MIP compliance with NIP-72 communities and MoQ audio rooms, nostream closes 53 PRs, and NIP-67 plus NIP-5D move forward.&lt;br/&gt;&lt;br/&gt;Guests: &lt;br/&gt;(&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;jgmontoya&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1jgm…669p&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;),&lt;br/&gt;(&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1klkk3vrzme455yh9rl2jshq7rc8dpegj3ndf82c3ks2sk40dxt7qulx3vt&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Max&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1klk…x3vt&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;),&lt;br/&gt;(&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1cgd35mxmy37vhkfcmjckk9dylguz6q8l67cj6h9m45tj5rx569cql9kfex&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;ABH3PO&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1cgd…kfex&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;),&lt;br/&gt;(&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1ven4zk8xxw873876gx8y9g9l9fazkye9qnwnglcptgvfwxmygscqsxddfh&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Danny&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1ven…ddfh&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;),&lt;br/&gt;(&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1c03rad0r6q833vh57kyd3ndu2jry30nkr0wepqfpsm05vq7he25slryrnw&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;c08r4d0r&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1c03…yrnw&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;)&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://podcast.nostrcompass.org/naddr1qvzqqqr4vcpzqa6e2nmnzsgjfzdy520vdy4hywr06c9ue6crpr2zxyq749uu275qqyt8wumn8ghj7un9d3shjtnwdaehgu3wvfskueqpp4mhxue69uhkummn9ekx7mqpz3mhxue69uhhyetvv9ujuerpd46hxtnfduqp7etsd9ek7er995cnwdeh8qungde4xcmnsdpdvenrxenzwp5kvecgqu47g&#34;&gt;https://podcast.nostrcompass.org/naddr1qvzqqqr4vcpzqa6e2nmnzsgjfzdy520vdy4hywr06c9ue6crpr2zxyq749uu275qqyt8wumn8ghj7un9d3shjtnwdaehgu3wvfskueqpp4mhxue69uhkummn9ekx7mqpz3mhxue69uhhyetvv9ujuerpd46hxtnfduqp7etsd9ek7er995cnwdeh8qungde4xcmnsdpdvenrxenzwp5kvecgqu47g&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://nostr.download/6e0ee90e56db3e5aa43bf195df4bab32e1f8429677f2b208e0754d251d8e1c66.oga&#34;&gt;https://nostr.download/6e0ee90e56db3e5aa43bf195df4bab32e1f8429677f2b208e0754d251d8e1c66.oga&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;#podcast #nostr
    </content>
    <updated>2026-05-04T13:45:20Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs8wmegquyl93j08dp48c5uretupmdxs8895wsng5nt3yrt05cd25czypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqepy0gj</id>
    
      <title type="html">Nostr Compass #20 is out. GitWorkshop ships an in-browser PR ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs8wmegquyl93j08dp48c5uretupmdxs8895wsng5nt3yrt05cd25czypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqepy0gj" />
    <content type="html">
      Nostr Compass #20 is out. GitWorkshop ships an in-browser PR merge button, Stars and repository following, a bandwidth-efficient git explorer, and kind 1111 inline code review comments. Routstrd launches a local daemon that routes inference requests across Nostr providers and settles with Cashu. Tagged releases: ngit v2.4.2, Wisp v1.0.0, grain v0.5.2/v0.5.3, Mostro Core v0.10.0, Mostro Mobile v1.2.5, marmot-ts v0.5.0, CruxCoach v0.1.3, Meiso v1.3.0, applesauce 6.0.0, NoorNote, Nostria, and more. Unreleased work covers Amethyst Nests MoQ interop, nostream NIP-65/NWC, FIPS udp:nat bootstrap, strfry observability, Sprout owner attestations, and Zap Cooking recipe packs. The issue closes with Six Nostr Aprils, a retrospective from 2021 through 2026.&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-04-29-newsletter/&#34;&gt;https://nostrcompass.org/en/newsletters/2026-04-29-newsletter/&lt;/a&gt;&lt;br/&gt;&lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/naddr1qqgxummnw3ez6cm0d4cxzumn95erqq3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqp65w4lwmut&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;naddr1qq…wmut&lt;/a&gt;&lt;/span&gt; &lt;/div&gt; &lt;p&gt;Welcome back to Nostr Compass, your weekly guide to Nostr.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This week:&lt;/strong&gt; &lt;a href=&#34;#gitworkshop-ships-in-browser-pr-merge-repository-following-and-a-bandwidth-efficient-git-explorer&#34;&gt;GitWorkshop&lt;/a&gt; turns git-over-Nostr into a fuller code-review surface with an in-browser PR merge button, Stars and repository following, a bandwidth-efficient git explorer, kind &lt;code&gt;1111&lt;/code&gt; inline review comments, and encrypted multi-device notification state. &lt;a href=&#34;#routstrd-launches-a-local-router-for-inference-over-nostr&#34;&gt;Routstrd&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub130mznv74rxs032peqym6g3wqavh472623mt3z5w73xq9r6qqdufs7ql29s&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;routstr&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub130m…l29s&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; launches a local daemon that discovers model providers via Nostr kind &lt;code&gt;38421&lt;/code&gt; announcements and pays them with Cashu. Tagged releases include &lt;a href=&#34;#ngit-v242-fixes-grasp-server-detection-for-pr-submissions&#34;&gt;ngit v2.4.2&lt;/a&gt;, &lt;a href=&#34;#wisp-v100-graduates-from-beta&#34;&gt;Wisp v1.0.0&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1utx00neqgqln72j22kej3ux7803c2k986henvvha4thuwfkper4s7r50e8&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;utxo the webmaster 🧑‍💻&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1utx…50e8&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), &lt;a href=&#34;#grain-v052-fixes-websocket-lockup-v053-continues-polish&#34;&gt;grain v0.5.2 and v0.5.3&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1zmc6qyqdfnllhnzzxr5wpepfpnzcf8q6m3jdveflmgruqvd3qa9sjv7f60&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;OceanSlim&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1zmc…7f60&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), &lt;a href=&#34;#mostro-core-v0100-and-mostro-mobile-v125-adopt-nip-59-dual-key-gift-wrap&#34;&gt;Mostro Core v0.10.0 and Mostro Mobile v1.2.5&lt;/a&gt;, &lt;a href=&#34;#marmot-ts-v050-ships-addressable-keypackages&#34;&gt;marmot-ts v0.5.0&lt;/a&gt;, &lt;a href=&#34;#cruxcoach-v013-ships-encrypted-climbing-data-backup-with-nostr-and-blossom&#34;&gt;CruxCoach v0.1.3&lt;/a&gt;, &lt;a href=&#34;#meiso-v130-adds-subtasks-blossom-attachments-and-nip-89-tagging&#34;&gt;Meiso v1.3.0&lt;/a&gt;, NoorNote, Nostria, Nostr Calendar, nos2x-fox, applesauce, nostr-double-ratchet, and more. Unreleased changes cover &lt;a href=&#34;#amethyst-advances-nests-audio-rooms-with-moq-interop-testing&#34;&gt;Amethyst Nests&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub142gywvjkq0dv6nupggyn2euhx4nduwc7yz5f24ah9rpmunr2s39se3xrj0&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;amethyst&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub142g…xrj0&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;, &lt;a href=&#34;#nostream-adds-nip-65-relay-list-support-and-nwc-payments&#34;&gt;nostream NIP-65 and NWC&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1a5r222zpak8w239w673ly9tznxyp4wc2vh59lcyx9cu7wgyt9xfqtug39a&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Cameri 🦦&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1a5r…g39a&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), &lt;a href=&#34;#fips-adds-nostr-based-udpnat-bootstrap&#34;&gt;FIPS Nostr-based udp:nat bootstrap&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub19wavu4f7l6l43h24jyskn7fvzy37kcfp67aqjtmv2qgy4lp34nhsda8p6k&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;jcorgan&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub19wa…8p6k&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), &lt;a href=&#34;#strfry-adds-per-connection-observability&#34;&gt;strfry observability&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1yxprsscnjw2e6myxz73mmzvnqw5kvzd5ffjya9ecjypc5l0gvgksh8qud4&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Doug Hoyte&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1yxp…qud4&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), &lt;a href=&#34;#sprout-adds-owner-attestation-and-multi-workspace-support&#34;&gt;Sprout owner attestations&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub16l0ck0s5zened29dsaqtqm6z0t4fmk2mwtszw64fz7fppcnls8mss3yj9s&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;block-opensource&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub16l0…yj9s&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), and &lt;a href=&#34;#zap-cooking-adds-recipe-packs-delete-requests-and-bunker-login&#34;&gt;Zap Cooking recipe packs&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1xxdd8eusvdxmaph3fkuu9x2mymhrcc3ghe2l38zv0l4f4nqp659qskkt7a&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;ZapCooking&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1xxd…kt7a&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;. Newly tracked projects include &lt;a href=&#34;#nostrord-a-nip-29-client-built-with-kotlin-multiplatform-and-wasm&#34;&gt;Nostrord&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1ktxukd7ny5e3ghqqcn6r6hs7rh4hceaua6n77cl4ym9ye2ufzces7rzc2h&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Nostrord&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1ktx…zc2h&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;, &lt;a href=&#34;#clave-brings-nip-46-remote-signing-to-ios-via-apns&#34;&gt;Clave&lt;/a&gt;, &lt;a href=&#34;#treasures-decentralized-geocaching-on-nostr&#34;&gt;Treasures&lt;/a&gt;, &lt;a href=&#34;#smesh-v051-self-hosted-nostr-relay-client-and-signer-in-one-stack&#34;&gt;smesh&lt;/a&gt;, &lt;a href=&#34;#surveil-a-magic-the-gathering-deck-builder-on-nostr&#34;&gt;Surveil&lt;/a&gt;, Fundstr, Nod City, deploy-nsite-to-pages, and null--nostr. Since this is the last Compass of April, the issue closes with &lt;a href=&#34;#six-nostr-aprils&#34;&gt;Six Nostr Aprils&lt;/a&gt;, a retrospective from 2021 through 2026.&lt;/p&gt;

&lt;h2 id=&#34;lead-stories-5&#34;&gt;Lead stories&lt;/h2&gt;

&lt;h3 id=&#34;gitworkshop-ships-in-browser-pr-merge-repository-following-and-a-bandwidth-efficient-git-explorer-2&#34;&gt;GitWorkshop ships in-browser PR merge, repository following, and a bandwidth-efficient git explorer&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://gitworkshop.dev&#34;&gt;GitWorkshop&lt;/a&gt;, Dan Conway&amp;#39;s web-based collaboration layer for &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-34/&#34;&gt;NIP-34&lt;/a&gt; git-over-Nostr, shipped a major release this week that brings the workflow much closer to what developers expect from GitHub or GitLab, while keeping comments, repository lists, and notifications inside signed Nostr events.&lt;/p&gt;

&lt;p&gt;The headline addition is a long-awaited in-browser PR merge button for repositories using GRASP relays. The release also adds Stars and repository following built on reactions and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-51/&#34;&gt;NIP-51&lt;/a&gt; lists, with pinned repository sets published as kind &lt;code&gt;10617&lt;/code&gt; events that point at kind &lt;code&gt;30617&lt;/code&gt; repo announcements via ordered &lt;code&gt;a&lt;/code&gt; tags. Profile pages can now feature a portable list of repositories.&lt;/p&gt;

&lt;p&gt;A bandwidth-efficient git explorer replaces the previous in-browser shallow clone. The new explorer leans on the underlying git client/server protocol that GRASP builds on, so it can handle large repositories without forcing the browser to fetch a full pack. Search now covers usernames and repository metadata, powered by &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/50.md&#34;&gt;NIP-50&lt;/a&gt; and an &lt;code&gt;ngit-indexer&lt;/code&gt; relay implementation that discovers and syncs repository announcements across the network. An in-browser repository creation workflow rounds out the discovery and onboarding path.&lt;/p&gt;

&lt;p&gt;Review tooling is rebuilt around a Files Changed tab, a per-patch diff viewer, and a set of experimental new primitives. Inline code review comments use kind &lt;code&gt;1111&lt;/code&gt;, built on &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/22.md&#34;&gt;NIP-22&lt;/a&gt;: each comment points to a file path (&lt;code&gt;f&lt;/code&gt; tag), a commit SHA (&lt;code&gt;c&lt;/code&gt; tag), and a selected line range (&lt;code&gt;line&lt;/code&gt; tag) so a client can render the comment at the correct position in a diff. A second tier of experimental primitives is permissioned by author and repo maintainers and uses &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/32.md&#34;&gt;NIP-32&lt;/a&gt; labels: rename an Issue or PR subject after submission, add hashtags after submission, pin a version-controlled CoverNote to the top of a PR or Issue for an editable summary, and mark inline code discussion subthreads as resolved. Verdict events and &lt;code&gt;suggestion&lt;/code&gt; blocks remain in draft and have not yet shipped.&lt;/p&gt;

&lt;p&gt;Notification state across devices is also synced through Nostr, but with a privacy-preserving twist. GitWorkshop generates a dedicated notifications keypair, encrypts that nsec, and stores it inside a kind &lt;code&gt;30078&lt;/code&gt; event. The notifications nsec then signs the actual notification state events. The indirection prevents the user&amp;#39;s main signer from being spammed with frequent encrypt and decrypt requests for every read or archive action, and it stops outside observers from easily seeing when a user touches their notification state. A user can sync read and archive state across devices; relays only see encrypted blobs.&lt;/p&gt;

&lt;h3 id=&#34;routstrd-launches-a-local-router-for-inference-over-nostr-2&#34;&gt;Routstrd launches a local router for inference over Nostr&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/routstr/routstrd&#34;&gt;Routstrd&lt;/a&gt; is a new TypeScript daemon that gives local tools an OpenAI-compatible endpoint and routes each request to a competing &lt;a href=&#34;https://routstr.com&#34;&gt;Routstr&lt;/a&gt; provider. The daemon discovers providers through Nostr kind &lt;code&gt;38421&lt;/code&gt; announcements defined in Routstr&amp;#39;s RIP-02 spec. It then scores providers by price, trust, and recent performance under RIP-06 and sends each request to the current best option.&lt;/p&gt;

&lt;p&gt;Payment runs through a local Cashu wallet managed by cocod and funded with Lightning. That gives the client a sats-denominated settlement path while keeping provider discovery public and permissionless through Nostr relays. If a provider fails during a session, Routstrd can fall back to the next-ranked node. The install path is &lt;code&gt;bun install -g routstrd&lt;/code&gt;, followed by &lt;code&gt;routstrd onboard&lt;/code&gt; for wallet and relay setup.&lt;/p&gt;

&lt;p&gt;The broader &lt;a href=&#34;https://github.com/routstr&#34;&gt;Routstr org&lt;/a&gt; maintains the daemon, the Python node software (&lt;code&gt;routstr-core&lt;/code&gt;), a chat UI, and protocol specs. For users, the local port becomes the stable interface: existing OpenAI-compatible tools point at Routstrd, while the daemon handles provider discovery, routing, and payment.&lt;/p&gt;

&lt;h2 id=&#34;tagged-releases-5&#34;&gt;Tagged releases&lt;/h2&gt;

&lt;h3 id=&#34;ngit-v2-4-2-fixes-grasp-server-detection-for-pr-submissions-2&#34;&gt;ngit v2.4.2 fixes GRASP server detection for PR submissions&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://codeberg.org/DanConwayDev/ngit-cli&#34;&gt;ngit&lt;/a&gt; shipped &lt;a href=&#34;https://github.com/DanConwayDev/ngit-cli/releases/tag/v2.4.2&#34;&gt;v2.4.2&lt;/a&gt; with a fix for repository GRASP server detection, keeping PR submission on the happy path when a proposal uses the PR kind. Note that ngit currently defaults to the &lt;code&gt;Patch&lt;/code&gt; kind for most changes unless they are large; the maintainer is working toward changing the default. &lt;a href=&#34;https://github.com/DanConwayDev/ngit-cli/releases/tag/v2.4.1&#34;&gt;v2.4.1&lt;/a&gt;, shipped earlier in the week, fixed &lt;code&gt;fatal&lt;/code&gt; errors during clone and fetch when an open PR&amp;#39;s git data was unavailable on the repository&amp;#39;s specified git servers.&lt;/p&gt;

&lt;h3 id=&#34;wisp-v1-0-0-graduates-from-beta-2&#34;&gt;Wisp v1.0.0 graduates from beta&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/barrydeen/wisp&#34;&gt;Wisp&lt;/a&gt;, a Kotlin and Jetpack Compose Android client focused on relay routing, privacy, and a small native UI, shipped &lt;a href=&#34;https://github.com/barrydeen/wisp/releases/tag/v1.0.0&#34;&gt;v1.0.0&lt;/a&gt; and followed with &lt;a href=&#34;https://github.com/barrydeen/wisp/releases/tag/v1.0.2&#34;&gt;v1.0.2&lt;/a&gt;. The 1.0.0 milestone gathers the Normie Mode fiat-denomination toggle, the For You feed, &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-29/&#34;&gt;NIP-29&lt;/a&gt; relay-based group configuration, and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-65/&#34;&gt;NIP-65&lt;/a&gt; relay-list broadcasting covered in &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-04-22-newsletter/#wisp-v0180-beta-adds-normie-mode-for-you-feed-and-nip-29-group-config&#34;&gt;Newsletter #19&lt;/a&gt;. v1.0.2 adds Android 15 16 KB page-size support, a QR scan tab in the drawer sheet, a download button for inline video controls, and notification-list performance fixes.&lt;/p&gt;

&lt;h3 id=&#34;grain-v0-5-2-fixes-websocket-lockup-v0-5-3-continues-polish-2&#34;&gt;grain v0.5.2 fixes WebSocket lockup, v0.5.3 continues polish&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/0ceanSlim/grain&#34;&gt;grain&lt;/a&gt;, the Go relay from 0ceanSlim, cut &lt;a href=&#34;https://github.com/0ceanSlim/grain/releases/tag/v0.5.2&#34;&gt;v0.5.2&lt;/a&gt; as a critical hotfix for a WebSocket lockup introduced in v0.5.0, then followed with &lt;a href=&#34;https://github.com/0ceanSlim/grain/releases/tag/v0.5.3&#34;&gt;v0.5.3&lt;/a&gt;. The lockup caused connections to hang under some filter and WebSocket paths, so operators on v0.5.1 or v0.5.0 should upgrade. grain tracks all major Nostr event categories, exposes NIP-11 relay information, supports whitelist/blacklist access control, per-kind rate limits, a web dashboard, and a Go client library added in the v0.5.x line.&lt;/p&gt;

&lt;h3 id=&#34;mostro-core-v0-10-0-and-mostro-mobile-v1-2-5-adopt-nip-59-dual-key-gift-wrap-2&#34;&gt;Mostro Core v0.10.0 and Mostro Mobile v1.2.5 adopt NIP-59 dual-key gift wrap&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/MostroP2P/mostro-core/releases/tag/v0.10.0&#34;&gt;Mostro Core v0.10.0&lt;/a&gt; adds the new &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-59/&#34;&gt;NIP-59&lt;/a&gt; gift-wrap module with split identity and trade keys. Earlier transport code used a single identity key for both trade identity and gift wrapping. v0.10.0 separates the stable trade identity from the ephemeral wrapping key, so each trade can use a fresh transport key while preserving the identity needed for the trade protocol. Daemon integration lands through &lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/718&#34;&gt;Mostro PR #718&lt;/a&gt;, and &lt;a href=&#34;https://github.com/MostroP2P/mostro-cli/pull/165&#34;&gt;mostro-cli PR #165&lt;/a&gt; brings the same migration to the command-line client.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/MostroP2P/mobile/releases/tag/v1.2.5&#34;&gt;Mostro Mobile v1.2.5&lt;/a&gt; ships alongside the protocol work. &lt;a href=&#34;https://github.com/MostroP2P/mobile/pull/581&#34;&gt;PR #581&lt;/a&gt; lets takers filter offers by the maker&amp;#39;s account age, giving users a way to avoid newly created maker accounts in the order book. &lt;a href=&#34;https://github.com/MostroP2P/mobile/pull/580&#34;&gt;PR #580&lt;/a&gt; fixes role labels on canceled order details, and &lt;a href=&#34;https://github.com/MostroP2P/mobile/pull/576&#34;&gt;PR #576&lt;/a&gt; cleans up cooperative-cancellation buttons.&lt;/p&gt;

&lt;h3 id=&#34;marmot-ts-v0-5-0-ships-addressable-keypackages-2&#34;&gt;marmot-ts v0.5.0 ships addressable KeyPackages&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/marmot-protocol/marmot-ts&#34;&gt;marmot-ts&lt;/a&gt; cut &lt;a href=&#34;https://github.com/marmot-protocol/marmot-ts/releases/tag/%40internet-privacy%2Fmarmot-ts%400.5.0&#34;&gt;@internet-privacy/marmot-ts@0.5.0&lt;/a&gt;, the first planned breaking-change release for the TypeScript &lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt; client. &lt;a href=&#34;https://github.com/marmot-protocol/marmot-ts/pull/68&#34;&gt;PR #68&lt;/a&gt; adds addressable KeyPackage support: &lt;code&gt;KeyPackageManager&lt;/code&gt; can now handle both legacy kind &lt;code&gt;443&lt;/code&gt; and new kind &lt;code&gt;30443&lt;/code&gt; KeyPackage events. The release removes &lt;code&gt;KeyPackageStore&lt;/code&gt; and the group-state storage classes, replacing them with generic key-value stores passed into &lt;code&gt;KeyPackageManager&lt;/code&gt; and &lt;code&gt;MarmotGroup&lt;/code&gt;. It also moves invite and group management onto &lt;code&gt;MarmotClient.invites&lt;/code&gt; and &lt;code&gt;MarmotClient.groups&lt;/code&gt;, so direct embedders need constructor and storage changes before upgrading.&lt;/p&gt;

&lt;h3 id=&#34;cruxcoach-v0-1-3-ships-encrypted-climbing-data-backup-with-nostr-and-blossom-2&#34;&gt;CruxCoach v0.1.3 ships encrypted climbing data backup with Nostr and Blossom&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://codeberg.org/CruxCoach/CruxCoach&#34;&gt;CruxCoach&lt;/a&gt; is a new open-source Android app for Kilter Board climbers. The Kilter Board is an interactive training wall whose holds light up over Bluetooth to display routes. The app launched April 14 and reached &lt;a href=&#34;https://codeberg.org/CruxCoach/CruxCoach/releases/tag/v0.1.3&#34;&gt;v0.1.3&lt;/a&gt; on April 26.&lt;/p&gt;

&lt;p&gt;v0.1.3 adds opt-in encrypted cloud backup. A user&amp;#39;s CruxCoach account is a Nostr keypair, and the private key doubles as the input to the local backup encryption key. The app encrypts climbing data on-device and mirrors the ciphertext to Blossom storage servers (&lt;code&gt;blossom.primal.net&lt;/code&gt; and &lt;code&gt;nostr.download&lt;/code&gt;). Delete-remote actions call the Blossom cleanup path. Beyond backup, CruxCoach uses &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; remote signing for Amber support, &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; private DMs for in-app developer contact, &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-65/&#34;&gt;NIP-65&lt;/a&gt; relay lists for relay discovery, and Vitor Pamplona&amp;#39;s &lt;a href=&#34;https://github.com/vitorpamplona/quartz&#34;&gt;Quartz&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1gcxzte5zlkncx26j68ez60fzkvtkm9e0vrwdcvsjakxf9mu9qewqlfnj5z&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;VitorPamplona&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1gcx…nj5z&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) library for Nostr plumbing. Users can install it through Zapstore or direct Codeberg APKs.&lt;/p&gt;

&lt;h3 id=&#34;meiso-v1-3-0-adds-subtasks-blossom-attachments-and-nip-89-tagging-2&#34;&gt;Meiso v1.3.0 adds subtasks, Blossom attachments, and NIP-89 tagging&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/higedamc/meiso&#34;&gt;Meiso&lt;/a&gt; is a minimalist Flutter task manager for Android that stores tasks as &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; encrypted kind &lt;code&gt;30078&lt;/code&gt; application data on Nostr relays. &lt;a href=&#34;https://github.com/higedamc/meiso/releases/tag/v1.3.0&#34;&gt;v1.3.0&lt;/a&gt;, released April 6, adds subtasks with parent/child relationships, task links for blocks/blocked-by/related-to/duplicate-of, image attachments through Blossom and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-96/&#34;&gt;NIP-96&lt;/a&gt; HTTP file upload endpoints, a &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/89.md&#34;&gt;NIP-89&lt;/a&gt; recommended-application &lt;code&gt;client&lt;/code&gt; tag on published events, and a Go command-line sync tool. v1.3.0 also fixes cold-start relay behavior and Amber client reuse.&lt;/p&gt;

&lt;h3 id=&#34;noornote-nostria-nostr-calendar-nos2x-fox-and-library-releases-2&#34;&gt;NoorNote, Nostria, Nostr Calendar, nos2x-fox, and library releases&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/77elements/noornote&#34;&gt;NoorNote&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub175nul9cvufswwsnpy99lvyhg7ad9nkccxhkhusznxfkr7e0zxthql9g6w0&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;alp&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub175n…g6w0&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) published &lt;a href=&#34;https://github.com/77elements/noornote/releases/tag/v0.8.7&#34;&gt;v0.8.7&lt;/a&gt;, &lt;a href=&#34;https://github.com/77elements/noornote/releases/tag/v0.8.8&#34;&gt;v0.8.8&lt;/a&gt;, and &lt;a href=&#34;https://github.com/77elements/noornote/releases/tag/v0.8.9&#34;&gt;v0.8.9&lt;/a&gt;. Those releases fix image and video click handling in quoted reposts, add lightbox support for long-form article images, and fix the blank desktop startup screen. &lt;a href=&#34;https://github.com/nostria-app/nostria&#34;&gt;Nostria&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1zl3g38a6qypp6py2z07shggg45cu8qex992xpss7d8zrl28mu52s4cjajh&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;sondreb&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1zl3…jajh&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) cut &lt;a href=&#34;https://github.com/nostria-app/nostria/releases/tag/v3.1.29&#34;&gt;v3.1.29&lt;/a&gt;, &lt;a href=&#34;https://github.com/nostria-app/nostria/releases/tag/v3.1.30&#34;&gt;v3.1.30&lt;/a&gt;, and &lt;a href=&#34;https://github.com/nostria-app/nostria/releases/tag/v3.1.31&#34;&gt;v3.1.31&lt;/a&gt;, adding article-editor image compression, a wallet USD toggle, promotional-card controls, PDF support, and mobile layout polish.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.4.1&#34;&gt;Nostr Calendar v1.4.1&lt;/a&gt; decouples calendar event publishing from calendar-list management and fixes invitation tracking. &lt;a href=&#34;https://github.com/diegogurpegui/nos2x-fox/releases/tag/v1.19.0&#34;&gt;nos2x-fox v1.19.0&lt;/a&gt; adds custom authorization timeframes for Firefox NIP-07 browser-signing grants. &lt;a href=&#34;https://github.com/mmalmi/nostr-double-ratchet/releases/tag/v0.0.97&#34;&gt;nostr-double-ratchet v0.0.97&lt;/a&gt; ships new binaries. &lt;a href=&#34;https://github.com/nostr-wot/nostr-wot-sdk/releases/tag/nostr-wot-sdk%400.9.0&#34;&gt;nostr-wot-sdk 0.9.0&lt;/a&gt; mounts &lt;code&gt;NostrSessionProvider&lt;/code&gt; by default, and &lt;a href=&#34;https://github.com/nbd-wtf/nostr-tools/pull/535&#34;&gt;nostr-tools PR #535&lt;/a&gt; adds multi-relay parsing support for NIP-47 wallet-connect strings.&lt;/p&gt;

&lt;p&gt;Late in the week, &lt;a href=&#34;https://github.com/greenart7c3/Amber/releases/tag/v6.1.0-pre1&#34;&gt;Amber v6.1.0-pre1&lt;/a&gt; shipped a pre-release with a better connect-new-app layout, signer-dialog fixes, improved notification permission handling, and refactored account selection. &lt;a href=&#34;https://github.com/mmalmi/nostr-vpn/releases/tag/v0.3.14&#34;&gt;nostr-vpn v0.3.14&lt;/a&gt; cut a fresh build with macOS Apple Silicon, Linux, and Windows artifacts. &lt;a href=&#34;https://github.com/BitcreditProtocol/Bitcredit-Core/releases/tag/v0.5.8&#34;&gt;Bitcredit Core v0.5.7-hotfix-1 and v0.5.8&lt;/a&gt; shipped back-to-back fixes for an orphaned-block validation issue. &lt;a href=&#34;https://gitlab.com/chad.curtis/surveil/-/tags/v0.1.6&#34;&gt;Surveil v0.1.6&lt;/a&gt; brought mobile UI polish and an overhauled About page; the project itself is introduced &lt;a href=&#34;#surveil-a-magic-the-gathering-deck-builder-on-nostr&#34;&gt;below&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&#34;applesauce-6-0-0-removes-legacy-event-factories-and-adds-blossom-uri-parsing-2&#34;&gt;applesauce 6.0.0 removes legacy event factories and adds Blossom URI parsing&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/hzrd149/applesauce&#34;&gt;applesauce&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1ye5ptcxfyyxl5vjvdjar2ua3f0hynkjzpx552mu5snj3qmx5pzjscpknpr&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;hzrd149&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1ye5…knpr&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), hzrd149&amp;#39;s TypeScript Nostr toolkit, shipped a 6.0.0 release train across the monorepo. &lt;a href=&#34;https://github.com/hzrd149/applesauce/releases/tag/applesauce-core%406.0.0&#34;&gt;applesauce-core@6.0.0&lt;/a&gt; removes the legacy &lt;code&gt;EventFactory&lt;/code&gt; class and old &lt;code&gt;buildEvent&lt;/code&gt;, &lt;code&gt;modifyEvent&lt;/code&gt;, and &lt;code&gt;createEvent&lt;/code&gt; helpers, pushing callers to the newer factory classes in &lt;code&gt;applesauce-core/factories&lt;/code&gt; and &lt;code&gt;applesauce-common&lt;/code&gt;. It also adds IP address and localhost handling to link parsing, BUD-10 Blossom URI regular expressions, and new observable helpers such as &lt;code&gt;timeoutWithIgnore&lt;/code&gt;, &lt;code&gt;combineLatestBy&lt;/code&gt;, &lt;code&gt;combineLatestByIndex&lt;/code&gt;, and &lt;code&gt;combineLatestByKey&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Package-level releases fill out the Nostr-specific pieces. &lt;a href=&#34;https://github.com/hzrd149/applesauce/releases/tag/applesauce-content%406.0.0&#34;&gt;applesauce-content@6.0.0&lt;/a&gt; adds BUD-10 Blossom URI nodes for text and Markdown, giving renderers a first-class way to parse Blossom references in content. &lt;a href=&#34;https://github.com/hzrd149/applesauce/releases/tag/applesauce-actions%406.0.0&#34;&gt;applesauce-actions@6.0.0&lt;/a&gt; adds base factory classes for NIP-51 lists covering relays, users, and items, making list construction less ad hoc. &lt;a href=&#34;https://github.com/hzrd149/applesauce/releases/tag/applesauce-wallet-connect%406.0.0&#34;&gt;applesauce-wallet-connect@6.0.0&lt;/a&gt; exposes &lt;code&gt;WalletConnect.connectURI&lt;/code&gt;, so apps can access an existing NIP-47 wallet-connect URI directly.&lt;/p&gt;

&lt;h2 id=&#34;unreleased-changes-11&#34;&gt;Unreleased changes&lt;/h2&gt;

&lt;h3 id=&#34;amethyst-advances-nests-audio-rooms-with-moq-interop-testing-2&#34;&gt;Amethyst advances Nests audio rooms with MoQ interop testing&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/vitorpamplona/amethyst&#34;&gt;Amethyst&lt;/a&gt; merged several Nests-focused PRs this week, building on last week&amp;#39;s &lt;a href=&#34;https://datatracker.ietf.org/group/moq/about/&#34;&gt;Media over QUIC&lt;/a&gt; audio-room stack. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2622&#34;&gt;PR #2622&lt;/a&gt; adds a cross-client interop harness that exercises the Amethyst MoQ client against the reference web implementation. The goal is to catch Android/browser wire-level divergence before users hit it. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2625&#34;&gt;PR #2625&lt;/a&gt; improves picture-in-picture speaker focus and connection status, while &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2620&#34;&gt;PR #2620&lt;/a&gt; clarifies avatars, mute state, and speaking state in the participant grid. Late in the week, &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2634&#34;&gt;PR #2634&lt;/a&gt; fixes IME padding and window insets in the full-screen Nest view and &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2635&#34;&gt;PR #2635&lt;/a&gt; adds presence-based freshness filtering to the Nests feed. Separately, &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2627&#34;&gt;PR #2627&lt;/a&gt; removes Amethyst&amp;#39;s custom C secp256k1 implementation and migrates to &lt;code&gt;libschnorr256k1&lt;/code&gt;.&lt;/p&gt;

&lt;h3 id=&#34;nostream-adds-nip-65-relay-list-support-and-nwc-payments-2&#34;&gt;nostream adds NIP-65 relay list support and NWC payments&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/Cameri/nostream&#34;&gt;nostream&lt;/a&gt; merged three notable PRs after last week&amp;#39;s 53-PR relay sprint. &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-65/&#34;&gt;NIP-65&lt;/a&gt; relay-list metadata support lands in &lt;a href=&#34;https://github.com/Cameri/nostream/pull/585&#34;&gt;PR #585&lt;/a&gt;, so the relay can index and serve kind &lt;code&gt;10002&lt;/code&gt; relay-list events. A Nostr Wallet Connect payments processor follows in &lt;a href=&#34;https://github.com/Cameri/nostream/pull/539&#34;&gt;PR #539&lt;/a&gt;, adding a pay-to-relay path. Connection cleanup improves in &lt;a href=&#34;https://github.com/Cameri/nostream/pull/438&#34;&gt;PR #438&lt;/a&gt;, which closes a dead-connection bug where sockets with active subscriptions were not being reaped, causing subscription counts to drift on long-running instances.&lt;/p&gt;

&lt;h3 id=&#34;fips-adds-nostr-based-udp-nat-bootstrap-2&#34;&gt;FIPS adds Nostr-based udp:nat bootstrap&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/jmcorgan/fips&#34;&gt;FIPS&lt;/a&gt;, the Free Internetworking Peering System previously covered in &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-02-25-newsletter/#fips-nostr-native-mesh-networking&#34;&gt;Newsletter #6&lt;/a&gt; and &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-03-25-newsletter/#fips-v020-ships-tor-transport-reproducible-builds-and-sidecar-examples&#34;&gt;Newsletter #10&lt;/a&gt;, merged &lt;a href=&#34;https://github.com/jmcorgan/fips/pull/53&#34;&gt;PR #53&lt;/a&gt; with Nostr-based &lt;code&gt;udp:nat&lt;/code&gt; bootstrap. The change lets nodes publish Nostr adverts, exchange encrypted offer/answer signaling, discover public addresses through STUN, perform UDP hole punching, and hand the punched socket into the normal FIPS transport stack. The implementation binds signal payload identities to the actual Nostr sender, queries configured DM and advert relays for inbox lookup, and rolls back failed adopted-traversal handoffs so orphaned UDP transports do not remain live. This is the Nostr announcement and NAT traversal work to track in the canonical repo, &lt;code&gt;jmcorgan/fips&lt;/code&gt;.&lt;/p&gt;

&lt;h3 id=&#34;strfry-adds-per-connection-observability-2&#34;&gt;strfry adds per-connection observability&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/hoytech/strfry&#34;&gt;strfry&lt;/a&gt; merged &lt;a href=&#34;https://github.com/hoytech/strfry/pull/214&#34;&gt;PR #214&lt;/a&gt;, adding per-connection observability and connection-level metrics exportable through Prometheus. &lt;a href=&#34;https://github.com/hoytech/strfry/pull/204&#34;&gt;PR #204&lt;/a&gt; normalizes Prometheus labels, and &lt;a href=&#34;https://github.com/hoytech/strfry/pull/215&#34;&gt;PR #215&lt;/a&gt; adds a Community Integrations section to the docs covering Namecoin identity projects built on top of strfry.&lt;/p&gt;

&lt;h3 id=&#34;sprout-adds-owner-attestation-and-multi-workspace-support-2&#34;&gt;Sprout adds Owner Attestation and multi-workspace support&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/block/sprout&#34;&gt;Sprout&lt;/a&gt;, Block&amp;#39;s Nostr client, merged &lt;a href=&#34;https://github.com/block/sprout/pull/406&#34;&gt;PR #406&lt;/a&gt; implementing NIP-OA (Owner Attestation). The feature gives an autonomous agent a cryptographic proof that a specific human pubkey authorized its actions. &lt;a href=&#34;https://github.com/block/sprout/pull/409&#34;&gt;PR #409&lt;/a&gt; adds multi-workspace support to the desktop app, &lt;a href=&#34;https://github.com/block/sprout/pull/411&#34;&gt;PR #411&lt;/a&gt; adds &lt;code&gt;#channel&lt;/code&gt; autocomplete to mobile compose, and &lt;a href=&#34;https://github.com/block/sprout/pull/410&#34;&gt;PR #410&lt;/a&gt; closes a race window that could drop active channel messages. &lt;a href=&#34;https://github.com/block/sprout/pull/413&#34;&gt;PR #413&lt;/a&gt; introduces NIP-RS for cross-device read state sync, and follow-up &lt;a href=&#34;https://github.com/block/sprout/pull/420&#34;&gt;PR #420&lt;/a&gt; and &lt;a href=&#34;https://github.com/block/sprout/pull/422&#34;&gt;PR #422&lt;/a&gt; wire that read state into the mobile unread badges.&lt;/p&gt;

&lt;h3 id=&#34;zap-cooking-adds-recipe-packs-delete-requests-and-bunker-login-2&#34;&gt;Zap Cooking adds recipe packs, delete requests, and bunker login&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/zapcooking/frontend&#34;&gt;Zap Cooking&lt;/a&gt; merged a productive week of recipe-publishing work. &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/09.md&#34;&gt;NIP-09&lt;/a&gt; deletion requests for a user&amp;#39;s own Recipe Packs land in &lt;a href=&#34;https://github.com/zapcooking/frontend/pull/367&#34;&gt;PR #367&lt;/a&gt;. Publication reliability improves through &lt;a href=&#34;https://github.com/zapcooking/frontend/pull/366&#34;&gt;PR #366&lt;/a&gt;, which forces every new recipe onto the garden relay and adds a retry queue for the shared recipe set. One-click authored pack publishing lands in &lt;a href=&#34;https://github.com/zapcooking/frontend/pull/365&#34;&gt;PR #365&lt;/a&gt;, and &lt;a href=&#34;https://github.com/zapcooking/frontend/pull/331&#34;&gt;PR #331&lt;/a&gt; adds &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; bunker login support.&lt;/p&gt;

&lt;h3 id=&#34;whitenoise-rs-encrypts-its-local-database-2&#34;&gt;Whitenoise-rs encrypts its local database&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs&#34;&gt;whitenoise-rs&lt;/a&gt; merged &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/758&#34;&gt;PR #758&lt;/a&gt;, adding SQLCipher encryption for the on-disk Whitenoise database. That closes a long-standing at-rest security gap for the Marmot daemon stack. &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/775&#34;&gt;PR #775&lt;/a&gt; exposes group required capabilities, &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/772&#34;&gt;PR #772&lt;/a&gt; migrates group media operations to session-owned &lt;code&gt;MediaOps&lt;/code&gt;, and &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/773&#34;&gt;PR #773&lt;/a&gt; extracts a &lt;code&gt;SharedServices&lt;/code&gt; holder as part of the session-ops refactor. On the mobile side, &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/577&#34;&gt;whitenoise PR #577&lt;/a&gt; enables boot auto-restart for the Android foreground service, fixing the case where the daemon would not come back after a device reboot.&lt;/p&gt;

&lt;h2 id=&#34;newly-tracked-and-discovered-5&#34;&gt;Newly tracked and discovered&lt;/h2&gt;

&lt;h3 id=&#34;nostrord-a-nip-29-client-built-with-kotlin-multiplatform-and-wasm-2&#34;&gt;Nostrord: a NIP-29 client built with Kotlin Multiplatform and WASM&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostrord/nostrord&#34;&gt;Nostrord&lt;/a&gt; is a new &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-29/&#34;&gt;NIP-29&lt;/a&gt; group-chat client targeting the Discord-replacement use case. Groups live on Nostr relays with relay-enforced membership, roles, moderation, and access control, so group state is hosted by the selected NIP-29 relay. The client developer does not control a separate application database for those groups. The web app runs at &lt;a href=&#34;https://web.nostrord.com&#34;&gt;web.nostrord.com&lt;/a&gt; and is built with Kotlin Multiplatform compiling to WebAssembly, with native Android, iOS, and desktop builds in development. Nostrord is an &lt;a href=&#34;https://opensats.org&#34;&gt;OpenSats&lt;/a&gt; grant recipient and interoperates with the same NIP-29 relays used by Flotilla, Chachi, and 0xChat.&lt;/p&gt;

&lt;h3 id=&#34;clave-brings-nip-46-remote-signing-to-ios-via-apns-2&#34;&gt;Clave brings NIP-46 remote signing to iOS via APNs&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/DocNR/clave&#34;&gt;Clave&lt;/a&gt; is an iOS remote signer in beta that signs Nostr events when the app is not open. The private key stays in the iPhone Keychain. When a client sends a &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; remote-signing request, a server-side proxy delivers an Apple Push Notification, waking a Notification Service Extension for up to 30 seconds. That extension decrypts the request with &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; encryption, signs with the Keychain key, and publishes the response. Device token registration uses &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/98.md&#34;&gt;NIP-98&lt;/a&gt; HTTP Auth to prevent token hijacking. Clave supports &lt;code&gt;bunker://&lt;/code&gt; and &lt;code&gt;nostrconnect://&lt;/code&gt; pairing, per-client trust levels, per-kind overrides, and has been tested with Nostur and noStrudel.&lt;/p&gt;

&lt;h3 id=&#34;treasures-decentralized-geocaching-on-nostr-2&#34;&gt;Treasures: decentralized geocaching on Nostr&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://gitlab.com/chad.curtis/treasures&#34;&gt;Treasures&lt;/a&gt; is a geocaching platform where caches and finds are signed Nostr events. Cache creators publish kind &lt;code&gt;37516&lt;/code&gt; addressable events with GPS coordinates. Finders log discovery by scanning a QR code attached to the physical cache; the code encodes the creator pubkey, the cache &lt;code&gt;d&lt;/code&gt; tag, and a verification private key used as proof of the physical visit. &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-57/&#34;&gt;NIP-57&lt;/a&gt; zaps can flow from finders to cache creators, and the live app is at &lt;a href=&#34;https://treasures.to&#34;&gt;treasures.to&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&#34;smesh-v0-5-1-self-hosted-nostr-relay-client-and-signer-in-one-stack-2&#34;&gt;smesh v0.5.1: self-hosted Nostr relay, client, and signer in one stack&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://git.smesh.lol/smesh/smesh&#34;&gt;smesh&lt;/a&gt; is a self-hosted Nostr stack written in Moxie, a custom language derived from Go and TinyGo by mleku. The stack ships a native relay binary with HTTP, WebSocket, AUTH, search, and Blossom support; &lt;code&gt;sm3sh&lt;/code&gt;, a web client compiled to ES modules; and a browser signer extension with NIP-07 browser signing plus NIP-04 and NIP-44 encryption support. Recent work includes MLS (RFC 9420) group messaging in v0.5.0, negentropy set reconciliation for relay sync, and a Web of Trust graph engine. The code lives on mleku&amp;#39;s self-hosted forge at &lt;code&gt;git.smesh.lol&lt;/code&gt;, built with his own &lt;code&gt;git-web&lt;/code&gt; tool. The related &lt;a href=&#34;https://git.smesh.lol/smesh/gitea-nostr-auth&#34;&gt;gitea-nostr-auth&lt;/a&gt; repo is an OAuth2/OIDC bridge for Gitea: users authenticate with a NIP-07 browser signer, the bridge discovers relays through NIP-65, and Gitea receives standard OIDC identity claims.&lt;/p&gt;

&lt;h3 id=&#34;surveil-a-magic-the-gathering-deck-builder-on-nostr-2&#34;&gt;Surveil: a Magic: The Gathering deck builder on Nostr&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://gitlab.com/chad.curtis/surveil&#34;&gt;Surveil&lt;/a&gt; is a Nostr client for Magic: The Gathering players that lets users search cards, build decks, scan paper cards on Android with on-device ML Kit OCR, and share decks across the network. Decks are published as kind &lt;code&gt;37381&lt;/code&gt; addressable events, and the deck event spec is documented in the project&amp;#39;s &lt;code&gt;NIP.md&lt;/code&gt;. The social layer is built from standard Nostr primitives: NIP-22 (kind &lt;code&gt;1111&lt;/code&gt;) threaded comments scoped to each deck, NIP-25 (kind &lt;code&gt;7&lt;/code&gt;) reactions, &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/78.md&#34;&gt;NIP-78&lt;/a&gt; (kind &lt;code&gt;30078&lt;/code&gt;) profile data for player homes, kind &lt;code&gt;3&lt;/code&gt; follow feeds, and forks that carry an &lt;code&gt;a&lt;/code&gt; tag back to the original deck. &lt;a href=&#34;https://gitlab.com/chad.curtis/surveil/-/tags/v0.1.6&#34;&gt;v0.1.6&lt;/a&gt; shipped this week with mobile UI polish, life counter improvements, an overhauled About page, and a relay pill on the deck hero banner. The web app runs anywhere static HTML is served, the Android build ships through &lt;a href=&#34;https://zapstore.dev&#34;&gt;Zapstore&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub10r8xl2njyepcw2zwv3a6dyufj4e4ajx86hz6v4ehu4gnpupxxp7stjt2p8&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Zapstore&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub10r8…t2p8&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;, and kind &lt;code&gt;37381&lt;/code&gt; events are also indexed natively by &lt;a href=&#34;https://about.ditto.pub/reference&#34;&gt;Ditto&lt;/a&gt; as Magic decks. The repo is on GitLab at &lt;a href=&#34;https://gitlab.com/chad.curtis/surveil&#34;&gt;chad.curtis/surveil&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&#34;smaller-additions-fundstr-nod-city-deploy-nsite-to-pages-and-null-nostr-2&#34;&gt;Smaller additions: Fundstr, Nod City, deploy-nsite-to-pages, and null--nostr&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/ritty65/Fundstr&#34;&gt;Fundstr&lt;/a&gt; is a creator-funding platform on Nostr using Cashu ecash for one-time and recurring pledges, with creator tier definitions and Nostr DMs. &lt;a href=&#34;https://nod.city&#34;&gt;Nod City&lt;/a&gt; is a Bitcoin-service review site where reviews are signed Nostr events and reviewers can receive zaps; no public source repo was found. &lt;a href=&#34;https://github.com/Origami74/deploy-nsite-to-pages&#34;&gt;deploy-nsite-to-pages&lt;/a&gt; is a GitHub Action that mirrors an nsite to GitHub Pages by using &lt;code&gt;nsyte download&lt;/code&gt;, supporting root kind &lt;code&gt;15128&lt;/code&gt; and named kind &lt;code&gt;35128&lt;/code&gt; nsites. &lt;a href=&#34;https://github.com/tami1A84/null--nostr&#34;&gt;null--nostr&lt;/a&gt;, also discovered in this week&amp;#39;s NIP-34 data, is the client covered in the recent OpenSats wave as Nurunuru; it supports MLS group messaging, Amber, NIP-50 search, NIP-70 protected posts, ProofMode badges, and Zapstore distribution.&lt;/p&gt;

&lt;p&gt;FIPS is not a new project for Compass. It was covered in &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-02-25-newsletter/#fips-nostr-native-mesh-networking&#34;&gt;Newsletter #6&lt;/a&gt; and &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-03-25-newsletter/#fips-v020-ships-tor-transport-reproducible-builds-and-sidecar-examples&#34;&gt;Newsletter #10&lt;/a&gt;. The database now points at the correct canonical repo, &lt;a href=&#34;https://github.com/jmcorgan/fips&#34;&gt;jmcorgan/fips&lt;/a&gt;, and this week&amp;#39;s NIP-34 discovery also surfaced related git-over-Nostr mirrors such as &lt;code&gt;fips&lt;/code&gt; and &lt;code&gt;awesome-fips&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&#34;protocol-work-5&#34;&gt;Protocol work&lt;/h2&gt;

&lt;h3 id=&#34;nip-updates-5&#34;&gt;NIP updates&lt;/h3&gt;

&lt;p&gt;Recent proposals and discussions in the &lt;a href=&#34;https://github.com/nostr-protocol/nips&#34;&gt;NIPs repository&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Merged this week:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;NIP-34 git repositories: remove unused refs tag extension&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2325&#34;&gt;PR #2325&lt;/a&gt;): Removes a &lt;code&gt;refs&lt;/code&gt; tag extension from &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-34/&#34;&gt;NIP-34&lt;/a&gt; that was defined but unused. The cleanup reduces implementation ambiguity for git-over-Nostr tools.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;NIP-34 git repositories: remove incorrect NIP-09 claim&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2326&#34;&gt;PR #2326&lt;/a&gt;): Removes an incorrect claim that &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/09.md&#34;&gt;NIP-09&lt;/a&gt; deletion events can reset repository state. NIP-09 deletion is a client-side event-deletion request, not a repository state machine. The correction prevents NIP-34 implementors from treating deletion hints as authoritative repo resets.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Open and implementation-driven work:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;GitWorkshop kind &lt;code&gt;1111&lt;/code&gt; inline review comments&lt;/strong&gt;: The inline code review comment kind is documented in GitWorkshop&amp;#39;s &lt;code&gt;NIP.md&lt;/code&gt; and is now in active use, but it has not yet been proposed as a formal NIP. Verdict events (kind &lt;code&gt;7321&lt;/code&gt;) and &lt;code&gt;suggestion&lt;/code&gt; blocks remain in draft and have not yet shipped. Implementation feedback from GitWorkshop and ngit will determine whether the shapes become a standalone git-review NIP or remain an application convention layered on NIP-34.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Nostr mail core and Nostrmon&lt;/strong&gt;: Two new custom-NIP drafts circulated this week. &lt;a href=&#34;https://njump.me/57d11cdf2f9ed73f7f39d6a7a6012ee3d642584ab11887f96a031f7d00fd9697&#34;&gt;Nostr mail core&lt;/a&gt; proposes kind &lt;code&gt;1301&lt;/code&gt; for RFC 2822 email content, wrapped with NIP-59 for private delivery and bridged to legacy email through NIP-05-resolved bridge pubkeys. &lt;a href=&#34;https://njump.me/5e9a8cee19d464f5f0322518ac9ccaf2399c69da6572346b4fb12d36acb17a27&#34;&gt;Nostrmon&lt;/a&gt; sketches addressable event kinds for regions, maps, creatures, NPCs, player saves, and items. Both remain custom drafts, not merged NIPs.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;NIP-67: EOSE Completeness Hint&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2317&#34;&gt;PR #2317&lt;/a&gt;): The proposal continues to iterate on adding a positive completeness marker to &lt;code&gt;EOSE&lt;/code&gt;, allowing relays to distinguish &amp;#34;stored events fully delivered&amp;#34; from legacy &lt;code&gt;EOSE&lt;/code&gt; cases where the relay makes no completeness claim.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;six-nostr-aprils-2&#34;&gt;Six Nostr aprils&lt;/h2&gt;

&lt;p&gt;April gives a clean cross-section of Nostr&amp;#39;s development path: the protocol document in 2021, early client work in 2022, the post-Damus application wave in 2023, private messaging and git-over-Nostr work in 2024, Blossom and relay-list cleanup in 2025, and adoption-focused client grants in 2026.&lt;/p&gt;

&lt;h3 id=&#34;april-2021-the-protocol-document-before-the-nips-repo-2&#34;&gt;April 2021: the protocol document before the NIPs repo&lt;/h3&gt;

&lt;p&gt;Fiatjaf published the original Nostr article, &lt;a href=&#34;https://fiatjaf.com/nostr.html&#34;&gt;&amp;#34;Notes and Other Stuff Transmitted by Relays&amp;#34;&lt;/a&gt;, on November 20, 2020. That first text already contained the core shape that still defines the protocol: users sign events with keys, publish them to relays, and read from relays they choose. The &lt;a href=&#34;https://github.com/nostr-protocol/nostr/commits?since=2021-04-01&amp;amp;until=2021-04-30&#34;&gt;&lt;code&gt;nostr-protocol/nostr&lt;/code&gt; commit log&lt;/a&gt; shows no commits between April 1 and April 30. Activity sits on either side: March 2021 commits added early &amp;#34;nostwitter&amp;#34; links and a &lt;code&gt;kind&lt;/code&gt; filter, while May 2021 repurposed NIP-02 and added NIP authorship.&lt;/p&gt;

&lt;p&gt;In April 2021, there was no public client market, no visible relay network, and no NIPs repo. The protocol still lived as a small document and a few experiments. Nostr had not yet become a social network or a development platform. It was still a relay/key/event model waiting for its first sustained contributor wave.&lt;/p&gt;

&lt;h3 id=&#34;april-2022-nips-still-lived-in-the-main-repo-2&#34;&gt;April 2022: NIPs still lived in the main repo&lt;/h3&gt;

&lt;p&gt;April 2022 was the last month before NIPs moved out of the main &lt;code&gt;nostr-protocol/nostr&lt;/code&gt; repo. Because the split had not happened yet, the dedicated &lt;a href=&#34;https://github.com/nostr-protocol/nips&#34;&gt;&lt;code&gt;nostr-protocol/nips&lt;/code&gt;&lt;/a&gt; repo had no April pull-request history. In the main repo, three April commits landed: &lt;a href=&#34;https://github.com/nostr-protocol/nostr/commit/bae286312a233b971bee5429adda7aff41747eb8&#34;&gt;&amp;#34;Update readme to add nip12&amp;#34;&lt;/a&gt; on April 8 by goswami1999, &lt;a href=&#34;https://github.com/nostr-protocol/nostr/commit/4b9e9d123273ba8a5c70d77df46922070c11c11d&#34;&gt;&amp;#34;add kinds list&amp;#34;&lt;/a&gt; on April 25 by jb55, and &lt;a href=&#34;https://github.com/nostr-protocol/nostr/commit/759997657f07e0344064228ffe5e93febe85d367&#34;&gt;&amp;#34;add js formatting to sample code&amp;#34;&lt;/a&gt; on April 28 by steliosrammos.&lt;/p&gt;

&lt;p&gt;Client work was also beginning to take shape. Damus commits from April 2022 added early chatroom behavior, profile handling, and app icons, while nostr-tools was becoming the JavaScript library path for early clients and experiments. On the protocol side, NIP-12 generic tag queries gave tag search a documented place, the kinds list moved Nostr toward a registry model, and better JavaScript examples made the spec easier for client and library authors to implement. On May 1, fiatjaf moved NIPs into the dedicated repo. April 2022 was the last month of the original single-repo era.&lt;/p&gt;

&lt;h3 id=&#34;april-2023-post-damus-application-expansion-2&#34;&gt;April 2023: post-Damus application expansion&lt;/h3&gt;

&lt;p&gt;April 2023 arrived three months after Damus launched on the iOS App Store on January 31, 2023, and after Jack Dorsey had posted his Nostr public key. The network had just absorbed its first major public growth wave. Clients such as Damus, Snort, Iris, Coracle, and Amethyst were active, while relay operators were learning what a larger social graph did to bandwidth, spam, search, and moderation assumptions.&lt;/p&gt;

&lt;p&gt;April 2023 had one merged NIPs PR: &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/456&#34;&gt;PR #456&lt;/a&gt;, merged April 17, adding NIP-19 bech32 entity links to NIP-21 URI handling. The surrounding commits show the application pressure behind the protocol work. April 2023 saw work on &lt;a href=&#34;https://github.com/nostr-protocol/nips/commit/8b39976e78f90fe766ad7149e250777cddacbb5e&#34;&gt;NIP-45 COUNT&lt;/a&gt;, event-specific zap markers, &lt;a href=&#34;https://github.com/nostr-protocol/nips/commit/bf0a0da6a48b96467172414d8e41dc72b0ca379c&#34;&gt;NIP-15 marketplace&lt;/a&gt;, NIP-26 delete delegation semantics, NIP-94 file metadata, NIP-47 wallet-connect error handling, and &lt;a href=&#34;https://github.com/nostr-protocol/nips/commit/e91ce3409e1ce8267fc07a21784d2538621267c3&#34;&gt;NIP-30 custom emoji&lt;/a&gt;. The contributor list had widened to include fiatjaf, staab, pablof7z, Semisol, CodyTseng, sethforprivacy, mikedilger, AsaiToshiya, alexgleason, martindsq, frbittencourt, and arkin0x.&lt;/p&gt;

&lt;p&gt;Damus, Snort, Iris, Coracle, and Amethyst were no longer demos around a spec; they were production clients dealing with onboarding, feeds, spam, zaps, media, and relay selection. April 2023&amp;#39;s protocol work reads like the backlog those clients created: zaps, marketplaces, file metadata, counting, emoji, and identity links all pushed the spec beyond simple notes and follows.&lt;/p&gt;

&lt;h3 id=&#34;april-2024-private-messaging-git-over-nostr-and-maintainer-support-2&#34;&gt;April 2024: private messaging, git-over-Nostr, and maintainer support&lt;/h3&gt;

&lt;p&gt;April 2024 had two NIP PR merges. &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1167&#34;&gt;PR #1167&lt;/a&gt;, merged April 10, fixed confusing terminology in &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; remote signing, where clients and signers need exact language for requested and authorized actions. &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1108&#34;&gt;PR #1108&lt;/a&gt;, merged April 17, expanded &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-34/&#34;&gt;NIP-34&lt;/a&gt; git repositories with status events, clarifications, optional maintainers, repo identifiers, and discoverability tags. That step made git-over-Nostr more practical for ngit and later GitWorkshop.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/commit/df30012430c88d49fb5b124992b04d5c61b6338b&#34;&gt;NIP-17&lt;/a&gt;, formerly NIP-24, landed on April 24 as sealed gift-wrapped messages for private DMs and small group chats. Client and library work ran alongside: Amethyst, Primal, Gossip, nostr-tools, NDK, and rust-nostr were all active in the same period.&lt;/p&gt;

&lt;p&gt;OpenSats also announced long-term support for Nostr developers in April 2024: &lt;a href=&#34;https://opensats.org/blog/pablofz7-receives-lts-grant&#34;&gt;PabloF7z&lt;/a&gt; on April 9, &lt;a href=&#34;https://opensats.org/blog/stuart-bowman-receives-lts-grant&#34;&gt;Stuart Bowman&lt;/a&gt; on April 12, and &lt;a href=&#34;https://opensats.org/blog/hzrd149-receives-lts-grant&#34;&gt;hzrd149&lt;/a&gt; on April 15. Those grants moved funding from isolated project grants toward sustained maintenance of relays, libraries, and client infrastructure.&lt;/p&gt;

&lt;h3 id=&#34;april-2025-dense-nip-cleanup-and-blossom-formalization-2&#34;&gt;April 2025: dense NIP cleanup and Blossom formalization&lt;/h3&gt;

&lt;p&gt;April 2025 was the densest protocol month in this retrospective, with sixteen merged NIPs PRs. The month began with &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1846&#34;&gt;PR #1846&lt;/a&gt;, adding blockchain transactions and addresses to NIP-73, and &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1865&#34;&gt;PR #1865&lt;/a&gt;, adding NIP-C0 tags to the standardized tags table. It continued with &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1801&#34;&gt;PR #1801&lt;/a&gt; and &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1889&#34;&gt;PR #1889&lt;/a&gt;, both improving kind &lt;code&gt;10002&lt;/code&gt; relay-list republication guidance, and &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1879&#34;&gt;PR #1879&lt;/a&gt;, which shrank and clarified &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-65/&#34;&gt;NIP-65&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1822&#34;&gt;PR #1822&lt;/a&gt; added NIP-B7 for Blossom interaction, giving Nostr clients and Blossom servers a canonical coordination layer after more than a year of informal practice. &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1051&#34;&gt;PR #1051&lt;/a&gt; deprecated &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/26.md&#34;&gt;NIP-26&lt;/a&gt;, the delegated event signing spec. NIP-26 had been difficult to implement safely and had become less attractive as NIP-46 and other signer patterns matured.&lt;/p&gt;

&lt;p&gt;The rest of the month combined cleanup with application expansion: &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1882&#34;&gt;PR #1882&lt;/a&gt; added privacy policy and terms of service fields to &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-11/&#34;&gt;NIP-11&lt;/a&gt;, &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1849&#34;&gt;PR #1849&lt;/a&gt; expanded kind &lt;code&gt;39701&lt;/code&gt; web bookmarks under NIP-B0, &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1891&#34;&gt;PR #1891&lt;/a&gt; added that bookmark kind to the README, and &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1895&#34;&gt;PR #1895&lt;/a&gt; added NIP-B0 standardized tags. OpenSats announced its &lt;a href=&#34;https://opensats.org/blog/eleventh-wave-of-nostr-grants&#34;&gt;Eleventh Wave of Nostr Grants&lt;/a&gt; on April 16, funding Swae, HAMSTR, Vertex, Nostr Double Ratchet, and Nostr Game Engine. Primal, Coracle, noStrudel, nostr-tools, NDK, and rust-nostr were also shipping through this period, so the protocol cleanup sat next to active client and library work.&lt;/p&gt;

&lt;h3 id=&#34;april-2026-nip-34-hardening-badges-and-adoption-focused-grants-2&#34;&gt;April 2026: NIP-34 hardening, badges, and adoption-focused grants&lt;/h3&gt;

&lt;p&gt;April 2026, the month this issue closes, had four merged NIPs PRs. The first was &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2276&#34;&gt;PR #2276&lt;/a&gt;, merged April 1, which changed &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/58.md&#34;&gt;NIP-58&lt;/a&gt; profile badges to kind &lt;code&gt;10008&lt;/code&gt; and added kind &lt;code&gt;30008&lt;/code&gt; badge sets, making badge assignment and badge collections more composable. A second git-over-Nostr usability change arrived in &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2312&#34;&gt;PR #2312&lt;/a&gt;, merged April 10, adding &lt;code&gt;nostr://&lt;/code&gt; clone URL semantics to &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-34/&#34;&gt;NIP-34&lt;/a&gt;. The April 25 cleanups, &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2325&#34;&gt;PR #2325&lt;/a&gt; and &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2326&#34;&gt;PR #2326&lt;/a&gt;, removed unused and incorrect NIP-34 language.&lt;/p&gt;

&lt;p&gt;Related commits sharpen the same surfaces. On April 22, fiatjaf added a Blossom server list to NIP-51 and adjusted NIP-29 metadata editing to match Flotilla&amp;#39;s PUT-style behavior. On April 26, he renamed NIP-5A for clarity. April 2026 focused on making already-used protocol surfaces easier to implement and harder to misread.&lt;/p&gt;

&lt;p&gt;OpenSats announced its &lt;a href=&#34;https://opensats.org/blog/sixteenth-wave-of-nostr-grants&#34;&gt;Sixteenth Wave of Nostr Grants&lt;/a&gt; on April 8, supporting Amethyst Desktop, Nostr Mail, Nostrord, Nurunuru (null--nostr), and a HAMSTR renewal: desktop clients, email-like messaging, group UX, Japanese onboarding, and off-grid connectivity.&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;&lt;em&gt;Thanks for reading Nostr Compass #20. &lt;a href=&#34;https://nostr.com&#34;&gt;DM us on Nostr&lt;/a&gt; with tips, corrections, or new projects to cover.&lt;/em&gt;&lt;/p&gt;

&lt;h2 id=&#34;missing-npubs-ask-maintainers-2&#34;&gt;Missing npubs (ask maintainers)&lt;/h2&gt;

&lt;p&gt;The following projects appear in this newsletter but have no verified Nostr npub in the database. If you can provide them, add to data/npubs.yml before publishing.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitWorkshop / ngit (DanConwayDev)&lt;/li&gt;
&lt;li&gt;Clave (DocNR)&lt;/li&gt;
&lt;li&gt;CruxCoach&lt;/li&gt;
&lt;li&gt;Meiso (higedamc)&lt;/li&gt;
&lt;li&gt;Surveil / Treasures (chad.curtis)&lt;/li&gt;
&lt;li&gt;smesh (mleku)&lt;/li&gt;
&lt;li&gt;Fundstr (ritty65)&lt;/li&gt;
&lt;li&gt;OpenSats&lt;/li&gt;
&lt;li&gt;Mostro Core (distinct from Mostro daemon)&lt;/li&gt;
&lt;li&gt;whitenoise-rs / Whitenoise (covered under Marmot npub)&lt;/li&gt;
&lt;li&gt;null--nostr / Nurunuru (tami1A84) - covered by existing Nurunuru entry&lt;/li&gt;
&lt;/ul&gt;
 &lt;/blockquote&gt;
    </content>
    <updated>2026-04-29T17:51:44Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsx6p6z826mh06q96dje92274wfk90h3jgnhx0czrxwnvp0y9ndv8szypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqepxuxn</id>
    
      <title type="html">Yes, and of course, all MIT. ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsx6p6z826mh06q96dje92274wfk90h3jgnhx0czrxwnvp0y9ndv8szypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqepxuxn" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsywgns9gwzt29w09gs8lax42nlynsqny8ff067ff6pnvrtjhcjvtsppemhxue69uhkummn9ekx7mp0a224yq&#39;&gt;nevent1q…24yq&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;Yes, and of course, all MIT.&lt;br/&gt;&lt;a href=&#34;https://github.com/andotherstuff/nostr-compass/pull/86&#34;&gt;https://github.com/andotherstuff/nostr-compass/pull/86&lt;/a&gt;&lt;br/&gt;Thanks for nostr.info, we found some new projects there to track!
    </content>
    <updated>2026-04-28T08:29:07Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsrns9fg8t2xp63j8sr06esnsfw2e6v9jm9chp63sst2p2cmfz0pjgzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqnmk2qp</id>
    
      <title type="html">Nostr Compass is now tracking 752 nostr projects. This is an ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsrns9fg8t2xp63j8sr06esnsfw2e6v9jm9chp63sst2p2cmfz0pjgzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqnmk2qp" />
    <content type="html">
      Nostr Compass is now tracking 752 nostr projects.&lt;br/&gt;&lt;br/&gt;This is an impressive list of awesome tools, now exposed on the website so people can find them.&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://nostrcompass.org/en/projects/&#34;&gt;https://nostrcompass.org/en/projects/&lt;/a&gt;
    </content>
    <updated>2026-04-28T07:34:08Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsy63y3cywdqa5jxsqrd5pwdgvnekeuuptl43uldmjrtkp2cw2s8jczypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqmdyvpq</id>
    
      <title type="html">Nostr Compass #19 is out. Amethyst merges 57 PRs across Marmot ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsy63y3cywdqa5jxsqrd5pwdgvnekeuuptl43uldmjrtkp2cw2s8jczypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqmdyvpq" />
    <content type="html">
      Nostr Compass #19 is out. &lt;br/&gt;Amethyst merges 57 PRs across Marmot MIP-00/01/05 compliance, first-class NIP-72 communities, NIP-75 zap goals on live streams, a new MoQ-transport audio rooms stack, and the Amy CLI for cross-client Marmot interop. TollGate v0.1.0 pins its spec set for pay-per-use internet access over Nostr and Cashu. nostream merges 53 PRs covering NIP-45 COUNT, NIP-62 vanish, complete NIP-11 parity, and query hardening. The Formstr suite (Pollerama, Formstr forms, Nostr Calendar) lands 26 PRs across security hardening and RRULE support. Forgesworn publishes a 29-repo cryptographic toolkit for Nostr covering signing, identity, attestations, web-of-trust, and paid-API discovery. This week&amp;#39;s deep dives cover NIP-72 (moderated communities) and NIP-57 (zaps). &lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/naddr1qqgr2ef4vvunxdpjxumnzcmrxu6nvq3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqp65w6rn9lp&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;naddr1qq…n9lp&lt;/a&gt;&lt;/span&gt; &lt;/div&gt; &lt;p&gt;Welcome back to Nostr Compass, your weekly guide to Nostr.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This week:&lt;/strong&gt; &lt;a href=&#34;https://github.com/vitorpamplona/amethyst&#34;&gt;Amethyst&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub142gywvjkq0dv6nupggyn2euhx4nduwc7yz5f24ah9rpmunr2s39se3xrj0&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;amethyst&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub142g…xrj0&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; lands a large Marmot, communities, and MoQ audio rooms pass, &lt;a href=&#34;https://github.com/OpenTollGate/tollgate&#34;&gt;TollGate&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1zzt0d0s2f4lsanpd7nkjep5r79p7ljq7aw37eek64hf0ef6v0mxqgwljrv&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;TollGate&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1zzt…ljrv&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; stabilizes pay-per-use internet access over Nostr and Cashu in &lt;a href=&#34;#tollgate-v010-stabilizes-pay-per-use-internet-over-nostr-and-cashu&#34;&gt;v0.1.0&lt;/a&gt;, and &lt;a href=&#34;https://github.com/Cameri/nostream&#34;&gt;nostream&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1a5r222zpak8w239w673ly9tznxyp4wc2vh59lcyx9cu7wgyt9xfqtug39a&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Cameri 🦦&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1a5r…g39a&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) closes a week of relay work around &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-45/&#34;&gt;NIP-45&lt;/a&gt;, &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-62/&#34;&gt;NIP-62&lt;/a&gt;, compression, query hardening, and complete &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-11/&#34;&gt;NIP-11&lt;/a&gt; parity. &lt;a href=&#34;#forgesworn-publishes-a-29-repo-cryptographic-toolkit-for-nostr&#34;&gt;Forgesworn&lt;/a&gt; drops a full signing, identity, and paid-API stack for Nostr. &lt;a href=&#34;#shockwallet-ships-nostr-native-lightning-wallet-sync-and-multi-node-connections&#34;&gt;ShockWallet&lt;/a&gt; keeps pushing Nostr-native Lightning wallet flows. The Formstr suite (&lt;a href=&#34;#formstr-suite-pollerama-security-pass-forms-i18n-calendar-rrule-support&#34;&gt;Pollerama&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1cgd35mxmy37vhkfcmjckk9dylguz6q8l67cj6h9m45tj5rx569cql9kfex&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;ABH3PO&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1cgd…kfex&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), Forms, Calendar) merges 26 PRs across security hardening and RRULE support. &lt;a href=&#34;#stablekraft-v100-ships-the-first-stable-pwa-release&#34;&gt;StableKraft&lt;/a&gt;, &lt;a href=&#34;#keep-android-v100-ships-with-reproducible-builds-and-zero-trackers&#34;&gt;Keep&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1h3fzzzeq60acjvnyvw34rpn5clkaueteffmkt3ln4ygekg9lcm0qhw96sj&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;williamk⚡santiago🔑☢️&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1h3f…96sj&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), &lt;a href=&#34;#topaz-v002-ships-a-nostr-relay-for-android&#34;&gt;topaz&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;fiatjaf&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub180c…h6w6&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), &lt;a href=&#34;#wot-relay-v021-migrates-eventstore-to-lmdb&#34;&gt;WoT Relay&lt;/a&gt;, &lt;a href=&#34;#flotilla-173-and-174-add-kind-9-wrapping-for-richer-nip-29-rooms&#34;&gt;Flotilla&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1jlrs53pkdfjnts29kveljul2sm0actt6n8dxrrzqcersttvcuv3qdjynqn&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;hodlbod&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1jlr…ynqn&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), and &lt;a href=&#34;#niplock-ships-a-nip-17-based-password-manager&#34;&gt;NipLock&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1z5jf78uhd68znuwwwu926th55rzd0wy8nd9clkr03cx22mwme0jqazk56h&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;npub1z5jf78uhd68znuwwwu926th55rzd0wy8nd9clkr03cx22mwme0jqazk56h&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1z5j…k56h&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; round out the shipping list. Deep dives cover &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-72/&#34;&gt;NIP-72 moderated communities&lt;/a&gt; and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-57/&#34;&gt;NIP-57 zaps&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&#34;top-stories-14&#34;&gt;Top Stories&lt;/h2&gt;

&lt;h3 id=&#34;amethyst-ships-marmot-mip-compliance-nip-72-communities-zap-goals-and-moq-audio-rooms-2&#34;&gt;Amethyst ships Marmot MIP compliance, NIP-72 communities, zap goals, and MoQ audio rooms&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/vitorpamplona/amethyst&#34;&gt;Amethyst&lt;/a&gt;, the Android client maintained by vitorpamplona, merged 57 PRs this week. The week&amp;#39;s headline themes are &lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt; encrypted-group compliance, first-class moderated communities, zap goals on live streams, and a new audio-rooms stack built on Media over QUIC.&lt;/p&gt;

&lt;p&gt;On Marmot compliance, &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2462&#34;&gt;PR #2462&lt;/a&gt; aligns the embedded &lt;a href=&#34;https://github.com/marmot-protocol/mdk&#34;&gt;MDK&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1whtn0s68y3cs98zysa4nxrfzss5g5snhndv35tk5m2sudsr7ltms48r3ec&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;White Noise&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1wht…r3ec&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; implementation with the MIP-01 and MIP-05 wire formats, adding VarInt encoding of TLS-style length prefixes and round-trip validation against MDK test vectors. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2435&#34;&gt;PR #2435&lt;/a&gt; adds MIP-00 KeyPackage Relay List support so invitees advertise which relays serve their KeyPackages, and &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2436&#34;&gt;PR #2436&lt;/a&gt; closes the remaining admin-gate and media-handling gaps flagged by cross-client testing with &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise&#34;&gt;White Noise&lt;/a&gt;. Two correctness fixes land the same day: &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2466&#34;&gt;PR #2466&lt;/a&gt; corrects MLS commit framing so encrypted welcomes serialize to the same bytes &lt;a href=&#34;https://github.com/marmot-protocol/mdk&#34;&gt;mdk-core&lt;/a&gt; produces, and &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2471&#34;&gt;PR #2471&lt;/a&gt; resolves an outer-layer decryption bug that caused state divergence between Marmot co-admins. A second compliance pass in &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2477&#34;&gt;PR #2477&lt;/a&gt; and &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2493&#34;&gt;PR #2493&lt;/a&gt; closes additional commit-path and message-encryption gaps and adds a full MLS commit cryptography validator that checks signatures, key schedules, and welcome-message derivation against the reference vectors.&lt;/p&gt;

&lt;p&gt;Alongside the protocol work, &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2488&#34;&gt;PR #2488&lt;/a&gt; ships &lt;code&gt;amy&lt;/code&gt;, a command-line tool for Marmot and MLS group operations driven from Amethyst&amp;#39;s implementation. Amy gives integrators a scriptable way to create groups, generate KeyPackages, simulate welcomes, and validate commits against a real Amethyst signer, which closes the biggest debugging gap for cross-client Marmot interop today.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2468&#34;&gt;PR #2468&lt;/a&gt; adds first-class &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-72/&#34;&gt;NIP-72&lt;/a&gt; community creation and management. Users can author the kind &lt;code&gt;34550&lt;/code&gt; community definition, add moderators and relay hints, submit posts with an &lt;code&gt;a&lt;/code&gt; tag pointing at the community, and manage pending approvals through kind &lt;code&gt;4549&lt;/code&gt; approval events. The feature closes a long-standing gap between Amethyst and &lt;a href=&#34;https://github.com/hzrd149/nostrudel&#34;&gt;noStrudel&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1ye5ptcxfyyxl5vjvdjar2ua3f0hynkjzpx552mu5snj3qmx5pzjscpknpr&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;hzrd149&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1ye5…knpr&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) on community moderation. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2458&#34;&gt;PR #2458&lt;/a&gt; and &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2473&#34;&gt;PR #2473&lt;/a&gt; add emoji-set support and a full &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/30.md&#34;&gt;NIP-30&lt;/a&gt; emoji-pack management UI so users can curate their own custom emoji libraries.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2469&#34;&gt;PR #2469&lt;/a&gt; wires &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-75/&#34;&gt;NIP-75&lt;/a&gt; zap goals into the &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-53/&#34;&gt;NIP-53&lt;/a&gt; Live Activities screen. Each live stream now carries a fundraising goal header with a progress bar, a one-tap zap button, and a top-zappers leaderboard. The leaderboard reads kind &lt;code&gt;9735&lt;/code&gt; zap receipts bound to the stream&amp;#39;s kind &lt;code&gt;30311&lt;/code&gt; event and tallies them against the goal&amp;#39;s &lt;code&gt;amount&lt;/code&gt; target. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2486&#34;&gt;PR #2486&lt;/a&gt; rounds out the live-stream surface with a dedicated Live Streams feed screen, &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2491&#34;&gt;PR #2491&lt;/a&gt; adds NIP-53 proof-of-agreement and event-builder helpers, and &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2461&#34;&gt;PR #2461&lt;/a&gt; adds lowest-resolution HLS in feed, picture-in-picture playback, and automatic resolution selection in full screen.&lt;/p&gt;

&lt;p&gt;The most ambitious new surface is real-time audio. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2494&#34;&gt;PR #2494&lt;/a&gt; adds a &lt;a href=&#34;https://datatracker.ietf.org/group/moq/about/&#34;&gt;Media over QUIC&lt;/a&gt; transport client and audio-rooms support. MoQ&amp;#39;s pub-sub model over QUIC fits live audio better than WebSocket relays because clients can subscribe to specific tracks and priorities and let the transport handle congestion. Paired with the new Public Chats screen in &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2487&#34;&gt;PR #2487&lt;/a&gt;, Amethyst now has an end-to-end surface for public audio rooms that sits alongside its Marmot encrypted messaging.&lt;/p&gt;

&lt;p&gt;On the discovery and reliability side, &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2485&#34;&gt;PR #2485&lt;/a&gt; and &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2490&#34;&gt;PR #2490&lt;/a&gt; add a Follow Packs discovery feed and wire curated follow sets into the default onboarding preference, giving new users a populated timeline on first launch. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/1983&#34;&gt;PR #1983&lt;/a&gt; lands an always-on notification service for real-time relay connections so Marmot DMs and mentions arrive without the app being foregrounded, and &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2480&#34;&gt;PR #2480&lt;/a&gt; adds on-demand HLS video caching with adaptive cache sizing.&lt;/p&gt;

&lt;h3 id=&#34;tollgate-v0-1-0-stabilizes-pay-per-use-internet-over-nostr-and-cashu-2&#34;&gt;TollGate v0.1.0 stabilizes pay-per-use internet over Nostr and Cashu&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/OpenTollGate/tollgate&#34;&gt;TollGate&lt;/a&gt; cut its &lt;a href=&#34;https://github.com/OpenTollGate/tollgate/releases/tag/v0.1.0&#34;&gt;v0.1.0 release&lt;/a&gt; on April 21, the first tagged snapshot of its specification set for pay-per-use network access. The protocol lets a device that can gate connectivity, such as a WiFi router, an Ethernet switch, or a Bluetooth tether, advertise pricing, accept &lt;a href=&#34;https://nostrcompass.org/en/topics/cashu/&#34;&gt;Cashu&lt;/a&gt; ecash tokens, and manage sessions through prepaid local tokens instead of accounts or subscriptions. A customer with a few sats in a local Cashu wallet can buy the next minute or megabyte of connectivity from any compatible TollGate on the network.&lt;/p&gt;

&lt;p&gt;The release pins three layers of the architecture. The protocol layer, defined in &lt;a href=&#34;https://github.com/OpenTollGate/tollgate/blob/v0.1.0/TIP-01.md&#34;&gt;TIP-01&lt;/a&gt;, specifies three base event shapes (Advertisement, Session, Notice), and &lt;a href=&#34;https://github.com/OpenTollGate/tollgate/blob/v0.1.0/TIP-02.md&#34;&gt;TIP-02&lt;/a&gt; layers Cashu payments on top so a customer can redeem tokens from any mint the gate advertises. Above that sits the interface layer: &lt;a href=&#34;https://github.com/OpenTollGate/tollgate/blob/v0.1.0/HTTP-01.md&#34;&gt;HTTP-01&lt;/a&gt; through HTTP-03 define a plain-HTTP surface for devices on restrictive operating systems, and &lt;a href=&#34;https://github.com/OpenTollGate/tollgate/blob/v0.1.0/NOSTR-01.md&#34;&gt;NOSTR-01&lt;/a&gt; defines the Nostr-relay transport for clients that can open WebSockets. Finally, &lt;a href=&#34;https://github.com/OpenTollGate/tollgate/blob/v0.1.0/WIFI-01.md&#34;&gt;WIFI-01&lt;/a&gt; covers the medium layer by describing the captive-portal routing for paying customers.&lt;/p&gt;

&lt;p&gt;The payment asset is a bearer token, so a customer can arrive with Cashu already in a local wallet and spend it immediately for the first minute of connectivity. Gates can also buy uplink from each other, so reach extends beyond a single operator. The new &lt;a href=&#34;https://nostrcompass.org/en/topics/tollgate/&#34;&gt;TollGate topic page&lt;/a&gt; covers the full layer stack.&lt;/p&gt;

&lt;h3 id=&#34;nostream-merges-53-prs-for-nip-45-nip-62-compression-and-query-hardening-2&#34;&gt;nostream merges 53 PRs for NIP-45, NIP-62, compression, and query hardening&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/Cameri/nostream&#34;&gt;nostream&lt;/a&gt;, the TypeScript relay implementation by Cameri, merged 53 PRs in a single week covering new NIP support, query performance, security hardening, and operational polish.&lt;/p&gt;

&lt;p&gt;On feature work, &lt;a href=&#34;https://github.com/Cameri/nostream/pull/522&#34;&gt;PR #522&lt;/a&gt; adds &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-45/&#34;&gt;NIP-45&lt;/a&gt; &lt;code&gt;COUNT&lt;/code&gt; support so clients can ask the relay how many events match a filter without fetching them, and &lt;a href=&#34;https://github.com/Cameri/nostream/pull/544&#34;&gt;PR #544&lt;/a&gt; adds &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-62/&#34;&gt;NIP-62&lt;/a&gt; right-to-vanish to the advertised feature list. &lt;a href=&#34;https://github.com/Cameri/nostream/pull/548&#34;&gt;PR #548&lt;/a&gt; extends the filter schema to accept uppercase tag filters (&lt;code&gt;#A&lt;/code&gt; through &lt;code&gt;#Z&lt;/code&gt;) per the recent tag-case conventions, and &lt;a href=&#34;https://github.com/Cameri/nostream/pull/514&#34;&gt;PR #514&lt;/a&gt; adds gzip and xz compression to event import and export so operators can move large event dumps between nodes without extra tooling.&lt;/p&gt;

&lt;p&gt;Query performance and correctness land via &lt;a href=&#34;https://github.com/Cameri/nostream/pull/534&#34;&gt;PR #534&lt;/a&gt;, which introduces a benchmarking harness and an optimization pass on the filter-to-SQL translation. &lt;a href=&#34;https://github.com/Cameri/nostream/pull/524&#34;&gt;PR #524&lt;/a&gt; fixes a whitelist/blacklist pubkey matching bug by replacing prefix matching with exact-match checks, &lt;a href=&#34;https://github.com/Cameri/nostream/pull/553&#34;&gt;PR #553&lt;/a&gt; adds a deterministic tie-breaker to &lt;code&gt;upsertMany&lt;/code&gt; so concurrent inserts no longer race on equal &lt;code&gt;created_at&lt;/code&gt; timestamps, and &lt;a href=&#34;https://github.com/Cameri/nostream/pull/493&#34;&gt;PR #493&lt;/a&gt; restricts the relay to trusting &lt;code&gt;X-Forwarded-For&lt;/code&gt; only from configured trusted proxies. &lt;a href=&#34;https://github.com/Cameri/nostream/pull/557&#34;&gt;PR #557&lt;/a&gt; brings the relay to complete &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-11/&#34;&gt;NIP-11&lt;/a&gt; relay information parity by aligning every advertised field with the current specification, including retention limits, authentication hints, and the trimmed optional-field set.&lt;/p&gt;

&lt;h2 id=&#34;shipping-this-week-8&#34;&gt;Shipping This Week&lt;/h2&gt;

&lt;h3 id=&#34;primal-android-ships-explore-tab-nip-05-verification-and-audio-player-2&#34;&gt;Primal Android ships Explore tab, NIP-05 verification, and audio player&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app&#34;&gt;Primal Android&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub12vkcxr0luzwp8e673v29eqjhrr7p9vqq8asav85swaepclllj09sylpugg&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;primal&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub12vk…pugg&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; pushed 11 merged PRs on top of last week&amp;#39;s feed redesign. &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/1021&#34;&gt;PR #1021&lt;/a&gt; introduces a new Explore tab built around popular users, follow packs, and curated feeds, and &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/1015&#34;&gt;PR #1015&lt;/a&gt; adds a feed editor that prepopulates from Primal&amp;#39;s Advanced Search DSL. &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/994&#34;&gt;PR #994&lt;/a&gt; ships &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/05.md&#34;&gt;NIP-05&lt;/a&gt; verification UI for profiles, and &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/997&#34;&gt;PR #997&lt;/a&gt; embeds an in-feed audio player that plays audio file attachments inline. &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/1018&#34;&gt;PR #1018&lt;/a&gt; adds &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; nostr-connect pairing from the wallet QR scanner, reusing the same camera path for signer pairing and wallet linking.&lt;/p&gt;

&lt;h3 id=&#34;strfry-adds-prometheus-write-path-metrics-and-fixes-nip-42-auth-envelope-2&#34;&gt;strfry adds Prometheus write-path metrics and fixes NIP-42 AUTH envelope&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/hoytech/strfry&#34;&gt;strfry&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1yxprsscnjw2e6myxz73mmzvnqw5kvzd5ffjya9ecjypc5l0gvgksh8qud4&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Doug Hoyte&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1yxp…qud4&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) shipped a batch of operator-facing improvements. &lt;a href=&#34;https://github.com/hoytech/strfry/pull/194&#34;&gt;PR #194&lt;/a&gt; adds a dedicated Prometheus write-path metrics exporter and a new connection gauge, and &lt;a href=&#34;https://github.com/hoytech/strfry/pull/197&#34;&gt;PR #197&lt;/a&gt; logs per-connection bytes up and down plus compression ratios for operators tracking bandwidth. &lt;a href=&#34;https://github.com/hoytech/strfry/pull/192&#34;&gt;PR #192&lt;/a&gt; promotes the hard-coded filter tag limit to a runtime-configurable option so operators can tune it without a recompile. On protocol correctness, &lt;a href=&#34;https://github.com/hoytech/strfry/pull/201&#34;&gt;PR #201&lt;/a&gt; changes &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/42.md&#34;&gt;NIP-42&lt;/a&gt; AUTH failure responses from a &lt;code&gt;NOTICE&lt;/code&gt; message to the &lt;code&gt;OK&lt;/code&gt; envelope the NIP actually specifies, which was a long-standing interop wart for auth-gated relays.&lt;/p&gt;

&lt;h3 id=&#34;shopstr-hardens-storefront-security-across-13-prs-2&#34;&gt;Shopstr hardens storefront security across 13 PRs&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/shopstr-eng/shopstr&#34;&gt;Shopstr&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub15dc33fyg3cpd9r58vlqge2hh8dy6hkkrjxkhluv2xpyfreqkmsesesyv6e&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Shopstr Markets&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub15dc…yv6e&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;, the Nostr marketplace client, merged 13 PRs this week dominated by security fixes. &lt;a href=&#34;https://github.com/shopstr-eng/shopstr/pull/434&#34;&gt;PR #434&lt;/a&gt; closes a stored-JavaScript hole in storefront links that allowed seller-to-visitor script execution, &lt;a href=&#34;https://github.com/shopstr-eng/shopstr/pull/417&#34;&gt;PR #417&lt;/a&gt; escapes storefront policy HTML rendering to block reflected XSS, and &lt;a href=&#34;https://github.com/shopstr-eng/shopstr/pull/418&#34;&gt;PR #418&lt;/a&gt; closes an unauthenticated cached-event deletion API that allowed cross-user data removal. &lt;a href=&#34;https://github.com/shopstr-eng/shopstr/pull/433&#34;&gt;PR #433&lt;/a&gt; requires authentication for cached-message reads, &lt;a href=&#34;https://github.com/shopstr-eng/shopstr/pull/419&#34;&gt;PR #419&lt;/a&gt; secures storefront mutation and event-cache endpoints behind proper auth, and &lt;a href=&#34;https://github.com/shopstr-eng/shopstr/pull/435&#34;&gt;PR #435&lt;/a&gt; and &lt;a href=&#34;https://github.com/shopstr-eng/shopstr/pull/414&#34;&gt;PR #414&lt;/a&gt; fix two server-side request forgery findings from code scanning. On functional bugs, &lt;a href=&#34;https://github.com/shopstr-eng/shopstr/pull/421&#34;&gt;PR #421&lt;/a&gt; makes the failed-relay-publish queue safe against replay, &lt;a href=&#34;https://github.com/shopstr-eng/shopstr/pull/425&#34;&gt;PR #425&lt;/a&gt; repairs a broken wallet-events fetch, and &lt;a href=&#34;https://github.com/shopstr-eng/shopstr/pull/392&#34;&gt;PR #392&lt;/a&gt; revalidates stored cart discounts before checkout.&lt;/p&gt;

&lt;h3 id=&#34;nostria-v3-1-26-through-v3-1-28-add-background-music-playback-on-android-2&#34;&gt;Nostria v3.1.26 through v3.1.28 add background music playback on Android&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostria-app/nostria&#34;&gt;Nostria&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1zl3g38a6qypp6py2z07shggg45cu8qex992xpss7d8zrl28mu52s4cjajh&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;sondreb&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1zl3…jajh&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) cut six releases this week from &lt;a href=&#34;https://github.com/nostria-app/nostria/releases/tag/v3.1.22&#34;&gt;v3.1.22&lt;/a&gt; through &lt;a href=&#34;https://github.com/nostria-app/nostria/releases/tag/v3.1.28&#34;&gt;v3.1.28&lt;/a&gt;. The headline change in &lt;a href=&#34;https://github.com/nostria-app/nostria/releases/tag/v3.1.26&#34;&gt;v3.1.26&lt;/a&gt; is Android background music playback: the app keeps itself alive while audio is playing, with media controls available in the notification bar and on the lock screen. Follow-up releases &lt;a href=&#34;https://github.com/nostria-app/nostria/releases/tag/v3.1.27&#34;&gt;v3.1.27&lt;/a&gt; and &lt;a href=&#34;https://github.com/nostria-app/nostria/releases/tag/v3.1.28&#34;&gt;v3.1.28&lt;/a&gt; harden that new media-service surface. &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-04-15-newsletter/#nostria-v3119-through-v3121-add-local-ai-image-generation&#34;&gt;Newsletter #18&lt;/a&gt; covered the preceding v3.1.19 through v3.1.21 local-image-generation release.&lt;/p&gt;

&lt;h3 id=&#34;wisp-v0-18-0-beta-adds-normie-mode-for-you-feed-and-nip-29-group-config-2&#34;&gt;Wisp v0.18.0-beta adds Normie Mode, For You feed, and NIP-29 group config&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/barrydeen/wisp&#34;&gt;Wisp&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1utx00neqgqln72j22kej3ux7803c2k986henvvha4thuwfkper4s7r50e8&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;utxo the webmaster 🧑‍💻&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1utx…50e8&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), the Android client that spun out of Amethyst, shipped &lt;a href=&#34;https://github.com/barrydeen/wisp/releases/tag/v0.18.0-beta&#34;&gt;v0.18.0-beta&lt;/a&gt; on April 16. The release targets users arriving from non-Bitcoin-native contexts: &lt;a href=&#34;https://github.com/barrydeen/wisp/pull/462&#34;&gt;PR #462&lt;/a&gt; adds a Normie Mode that surfaces fiat-denominated amounts throughout the app, and &lt;a href=&#34;https://github.com/barrydeen/wisp/pull/464&#34;&gt;PR #464&lt;/a&gt; overhauls onboarding with a topics picker and a first-post coach. &lt;a href=&#34;https://github.com/barrydeen/wisp/pull/469&#34;&gt;PR #469&lt;/a&gt; adds a For You feed that blends extended follows, trending events, and followed hashtags.&lt;/p&gt;

&lt;p&gt;On protocol work, &lt;a href=&#34;https://github.com/barrydeen/wisp/pull/471&#34;&gt;PR #471&lt;/a&gt; adds &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-29/&#34;&gt;NIP-29&lt;/a&gt; group configuration for flags, invites, roles, and AUTH prompts, and &lt;a href=&#34;https://github.com/barrydeen/wisp/pull/478&#34;&gt;PR #478&lt;/a&gt; fixes an ordering bug so Wisp waits for &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/42.md&#34;&gt;NIP-42&lt;/a&gt; AUTH before issuing group &lt;code&gt;9021&lt;/code&gt;, &lt;code&gt;9007&lt;/code&gt;, and &lt;code&gt;9009&lt;/code&gt; events and surfaces admin-side failures. &lt;a href=&#34;https://github.com/barrydeen/wisp/pull/481&#34;&gt;PR #481&lt;/a&gt; broadcasts notes to the &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-65/&#34;&gt;NIP-65&lt;/a&gt; inbox relays of mentioned pubkeys so replies reach their targets even when the sender&amp;#39;s and recipient&amp;#39;s relay sets do not overlap.&lt;/p&gt;

&lt;h3 id=&#34;noornote-v0-8-4-adds-scheduled-posts-and-live-stream-zapping-2&#34;&gt;NoorNote v0.8.4 adds Scheduled Posts and live stream zapping&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/77elements/noornote&#34;&gt;NoorNote&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub175nul9cvufswwsnpy99lvyhg7ad9nkccxhkhusznxfkr7e0zxthql9g6w0&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;alp&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub175n…g6w0&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) shipped &lt;a href=&#34;https://github.com/77elements/noornote/releases/tag/v0.8.4&#34;&gt;v0.8.4&lt;/a&gt; and &lt;a href=&#34;https://github.com/77elements/noornote/releases/tag/v0.8.5&#34;&gt;v0.8.5&lt;/a&gt;. The headline addition in v0.8.4 is a Scheduled Posts add-on: the app hands a fully signed event to a NoorNote-operated relay which publishes it at the scheduled moment, so private keys never leave the device. The same release adds one-tap zapping from live-stream cards, where the sats appear in the stream&amp;#39;s chat overlay via &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-53/&#34;&gt;NIP-53&lt;/a&gt;, and keeps the wallet balance visible when the fiat-rate API is briefly unavailable. v0.8.5 fixes a timeline deduplication bug that caused duplicate posts on long Android scrolls.&lt;/p&gt;

&lt;h3 id=&#34;topaz-v0-0-2-ships-a-nostr-relay-for-android-2&#34;&gt;topaz v0.0.2 ships a Nostr relay for Android&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/fiatjaf/topaz&#34;&gt;topaz&lt;/a&gt;, a new Nostr relay that runs on Android phones from &lt;a href=&#34;https://github.com/fiatjaf&#34;&gt;fiatjaf&lt;/a&gt;, published its &lt;a href=&#34;https://github.com/fiatjaf/topaz/releases/tag/v0.0.2&#34;&gt;v0.0.2&lt;/a&gt; release on 2026-04-17. The project is Kotlin-first and positions the phone as an always-available personal relay. At this stage the scope is narrow: a working relay in an installable Android package.&lt;/p&gt;

&lt;h3 id=&#34;stablekraft-v1-0-0-ships-the-first-stable-music-and-podcast-pwa-release-2&#34;&gt;StableKraft v1.0.0 ships the first stable music-and-podcast PWA release&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/ChadFarrow/stablekraft-app&#34;&gt;StableKraft&lt;/a&gt; is a Next.js PWA for discovering, organizing, and streaming music pulled from podcast feeds, with Nostr for auth and social features and Lightning for V4V payments. It reached &lt;a href=&#34;https://github.com/ChadFarrow/stablekraft-app/releases/tag/v1.0.0&#34;&gt;v1.0.0&lt;/a&gt; on 2026-04-18. The same week tightened feed ingestion with a &lt;a href=&#34;https://github.com/ChadFarrow/stablekraft-app/commit/7ac90f6&#34;&gt;15-minute OPML cache and illegal-XML stripping&lt;/a&gt;, and shrank the nightly reparse window from 720 hours to 24 hours in a &lt;a href=&#34;https://github.com/ChadFarrow/stablekraft-app/commit/fbf337b&#34;&gt;follow-up fix&lt;/a&gt; so newly added feeds self-heal faster.&lt;/p&gt;

&lt;h3 id=&#34;niplock-ships-a-nip-17-based-password-manager-2&#34;&gt;NipLock ships a NIP-17-based password manager&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://gitworkshop.dev/npub1z5jf78uhd68znuwwwu926th55rzd0wy8nd9clkr03cx22mwme0jqazk56h/relay.ngit.dev/passwd&#34;&gt;NipLock&lt;/a&gt; is a password manager that stores and syncs credentials across devices using &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; gift-wrapped direct messages. Each password entry is a NIP-17 DM from the user&amp;#39;s key to itself, so the same events replicate to any device that authenticates with the same key. Signing works with a raw &lt;code&gt;nsec&lt;/code&gt;, browser extensions like &lt;a href=&#34;https://github.com/fiatjaf/nos2x&#34;&gt;nos2x&lt;/a&gt;, or &lt;a href=&#34;https://github.com/greenart7c3/Amber&#34;&gt;Amber&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1w4uswmv6lu9yel005l3qgheysmr7tk9uvwluddznju3nuxalevvs2d0jr5&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;greenart7c3&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1w4u…0jr5&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) via &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt;, which keeps the master key off the client device.&lt;/p&gt;

&lt;h3 id=&#34;flotilla-budabit-polishes-its-nip-34-repo-surface-2&#34;&gt;flotilla-budabit polishes its NIP-34 repo surface&lt;/h3&gt;

&lt;p&gt;The Budabit community&amp;#39;s fork of &lt;a href=&#34;https://gitea.coracle.social/coracle/flotilla&#34;&gt;Flotilla&lt;/a&gt;, &lt;a href=&#34;https://github.com/Pleb5/flotilla-budabit&#34;&gt;flotilla-budabit&lt;/a&gt;, shipped a cluster of fixes to its NIP-34 git-over-nostr workflow. Updates this week &lt;a href=&#34;https://github.com/Pleb5/flotilla-budabit/commit/a6fb67e&#34;&gt;restore repo discussion controls&lt;/a&gt;, &lt;a href=&#34;https://github.com/Pleb5/flotilla-budabit/commit/e2b891a&#34;&gt;keep sticky repo tabs visible on detail pages&lt;/a&gt;, &lt;a href=&#34;https://github.com/Pleb5/flotilla-budabit/commit/43d5e9e&#34;&gt;load repo announcements from saved GRASP relays&lt;/a&gt;, and &lt;a href=&#34;https://github.com/Pleb5/flotilla-budabit/commit/2dbb9f0&#34;&gt;keep maintainer-applied patch status in sync&lt;/a&gt;. Staying close to upstream Flotilla, the fork prioritizes the repo view for Budabit community contributors.&lt;/p&gt;

&lt;h3 id=&#34;rx-nostr-3-7-2-through-3-7-4-add-default-verifier-and-optional-constructor-args-2&#34;&gt;rx-nostr 3.7.2 through 3.7.4 add default verifier and optional constructor args&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/penpenpng/rx-nostr&#34;&gt;rx-nostr&lt;/a&gt;, the RxJS-based Nostr library, shipped &lt;a href=&#34;https://github.com/penpenpng/rx-nostr/releases/tag/rx-nostr%403.7.2&#34;&gt;3.7.2&lt;/a&gt;, &lt;a href=&#34;https://github.com/penpenpng/rx-nostr/releases/tag/rx-nostr%403.7.3&#34;&gt;3.7.3&lt;/a&gt;, and &lt;a href=&#34;https://github.com/penpenpng/rx-nostr/releases/tag/rx-nostr%403.7.4&#34;&gt;3.7.4&lt;/a&gt;. &lt;a href=&#34;https://github.com/penpenpng/rx-nostr/pull/192&#34;&gt;PR #192&lt;/a&gt; adds a default Schnorr signature verifier so callers no longer have to wire one up manually, and a paired &lt;a href=&#34;https://github.com/penpenpng/rx-nostr/releases/tag/crypto%403.1.6&#34;&gt;crypto@3.1.6&lt;/a&gt; corrects a &lt;code&gt;@noble/curves&lt;/code&gt; usage bug that was producing spurious verification failures. &lt;a href=&#34;https://github.com/penpenpng/rx-nostr/pull/195&#34;&gt;PR #195&lt;/a&gt; in 3.7.4 makes the arguments of &lt;code&gt;createRxNostr()&lt;/code&gt; optional so quick integrations can instantiate the library with zero configuration.&lt;/p&gt;

&lt;h3 id=&#34;keep-android-v1-0-0-ships-with-reproducible-builds-and-zero-trackers-2&#34;&gt;Keep Android v1.0.0 ships with reproducible builds and zero trackers&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/privkeyio/keep-android&#34;&gt;Keep&lt;/a&gt;, a Nostr-native password and secret manager, shipped &lt;a href=&#34;https://github.com/privkeyio/keep-android/releases/tag/v1.0.0&#34;&gt;v1.0.0&lt;/a&gt; on April 21 after a run of hardening PRs. &lt;a href=&#34;https://github.com/privkeyio/keep-android/pull/241&#34;&gt;PR #241&lt;/a&gt; adds a reproducible build recipe with a pinned and verified toolchain, &lt;a href=&#34;https://github.com/privkeyio/keep-android/pull/248&#34;&gt;PR #248&lt;/a&gt; swaps Google ML Kit for ZXing to remove a Google Play Services dependency, and &lt;a href=&#34;https://github.com/privkeyio/keep-android/pull/252&#34;&gt;PR #252&lt;/a&gt; publishes an &lt;a href=&#34;https://reports.exodus-privacy.eu.org/en/&#34;&gt;Exodus Privacy scan&lt;/a&gt; showing zero trackers on the v1.0.0 build. &lt;a href=&#34;https://github.com/privkeyio/keep-android/pull/256&#34;&gt;PR #256&lt;/a&gt; adds a &lt;code&gt;zapstore.yaml&lt;/code&gt; manifest so the v1.0.0 APK can be distributed through &lt;a href=&#34;https://zapstore.dev&#34;&gt;zapstore&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub10r8xl2njyepcw2zwv3a6dyufj4e4ajx86hz6v4ehu4gnpupxxp7stjt2p8&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Zapstore&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub10r8…t2p8&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; without an intermediate publisher.&lt;/p&gt;

&lt;h3 id=&#34;flotilla-1-7-3-and-1-7-4-add-kind-9-wrapping-for-richer-nip-29-rooms-2&#34;&gt;Flotilla 1.7.3 and 1.7.4 add kind-9 wrapping for richer NIP-29 rooms&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://gitea.coracle.social/coracle/flotilla&#34;&gt;Flotilla&lt;/a&gt;, hodlbod&amp;#39;s &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-29/&#34;&gt;NIP-29&lt;/a&gt; groups client, shipped &lt;a href=&#34;https://gitea.coracle.social/coracle/flotilla/src/tag/1.7.3&#34;&gt;1.7.3&lt;/a&gt; and &lt;a href=&#34;https://gitea.coracle.social/coracle/flotilla/src/tag/1.7.4&#34;&gt;1.7.4&lt;/a&gt;. The main protocol change is kind-9 wrapping of non-chat content types, announced in hodlbod&amp;#39;s release note and tracked against &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2310&#34;&gt;NIP PR #2310&lt;/a&gt;. Wrapping calendar events, polls, and other non-chat payloads in kind &lt;code&gt;9&lt;/code&gt; preserves the room context when those objects are sent into a group, so clients can render the embedded object without losing which room it came from.&lt;/p&gt;

&lt;p&gt;The same release line adds polls, support for the Aegis URL scheme for &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; login, native share support for space invites, room mentions, mobile clipboard image paste, drafts, video in calls, and feed-pagination improvements. This is the first Flotilla release since &lt;a href=&#34;https://gitea.coracle.social/coracle/flotilla/src/tag/1.7.0&#34;&gt;1.7.0 and 1.7.1&lt;/a&gt;, which &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-04-01-newsletter/#flotilla-v170-adds-voice-rooms-and-email-login&#34;&gt;Newsletter #16&lt;/a&gt; covered for voice rooms and email login.&lt;/p&gt;

&lt;h3 id=&#34;wot-relay-v0-2-1-migrates-eventstore-to-lmdb-2&#34;&gt;WoT Relay v0.2.1 migrates eventstore to LMDB&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/bitvora/wot-relay&#34;&gt;WoT Relay&lt;/a&gt;, the web-of-trust-filtered relay by bitvora, shipped &lt;a href=&#34;https://github.com/bitvora/wot-relay/releases/tag/v0.2.1&#34;&gt;v0.2.1&lt;/a&gt; on 2026-04-22. &lt;a href=&#34;https://github.com/bitvora/wot-relay/pull/97&#34;&gt;PR #97&lt;/a&gt; migrates the eventstore to &lt;a href=&#34;http://www.lmdb.tech/&#34;&gt;LMDB&lt;/a&gt; and retunes the WoT bootstrap fetches so the relay builds its initial trust graph without exhausting upstream read budgets, and &lt;a href=&#34;https://github.com/bitvora/wot-relay/pull/99&#34;&gt;PR #99&lt;/a&gt; bumps &lt;code&gt;golang.org/x/crypto&lt;/code&gt; to v0.45.0 for the corresponding security fixes. &lt;a href=&#34;https://github.com/bitvora/wot-relay/pull/100&#34;&gt;PR #100&lt;/a&gt; updates the advertised &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-11/&#34;&gt;NIP-11&lt;/a&gt; software URL and version string for the release.&lt;/p&gt;

&lt;h3 id=&#34;formstr-suite-pollerama-security-pass-forms-i18n-calendar-rrule-support-2&#34;&gt;Formstr suite: Pollerama security pass, Forms i18n, Calendar RRULE support&lt;/h3&gt;

&lt;p&gt;The Formstr suite merged 26 PRs across Pollerama, Formstr forms, and Nostr Calendar this week, with a clear security theme on the polling app and feature work on the rest.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://pollerama.fun&#34;&gt;Pollerama&lt;/a&gt;, the &lt;a href=&#34;https://github.com/formstr-hq/nostr-polls&#34;&gt;nostr-polls&lt;/a&gt; web app for creating and voting on Nostr polls, hardened its key handling. &lt;a href=&#34;https://github.com/formstr-hq/nostr-polls/pull/182&#34;&gt;PR #182&lt;/a&gt; expires cached direct messages on logout so a shared device does not leak prior-user state, &lt;a href=&#34;https://github.com/formstr-hq/nostr-polls/pull/175&#34;&gt;PR #175&lt;/a&gt; moves the local key to secure browser storage, and &lt;a href=&#34;https://github.com/formstr-hq/nostr-polls/pull/171&#34;&gt;PR #171&lt;/a&gt; guards &lt;code&gt;JSON.parse&lt;/code&gt; of kind &lt;code&gt;0&lt;/code&gt; profile content across every login path so a malformed profile cannot crash the session. On the product side, &lt;a href=&#34;https://github.com/formstr-hq/nostr-polls/pull/186&#34;&gt;PR #186&lt;/a&gt; wires HTTPS deep linking for &lt;code&gt;pollerama.fun&lt;/code&gt; so shared poll URLs open the app directly, and &lt;a href=&#34;https://github.com/formstr-hq/nostr-polls/pull/169&#34;&gt;PR #169&lt;/a&gt; makes author names clickable in poll results.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://formstr.app&#34;&gt;Formstr&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1qu7dsd44275lms4x9snnwvnnmgx926nsppmr7lcw9dlj36n4fltqgs7p98&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Form*&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1qu7…7p98&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;, the &lt;a href=&#34;https://github.com/formstr-hq/nostr-forms&#34;&gt;nostr-forms&lt;/a&gt; suite for Nostr-native forms, broadened its input and onboarding surface. &lt;a href=&#34;https://github.com/formstr-hq/nostr-forms/pull/475&#34;&gt;PR #475&lt;/a&gt; adds audio and video URL support so a form can embed media directly, &lt;a href=&#34;https://github.com/formstr-hq/nostr-forms/pull/439&#34;&gt;PR #439&lt;/a&gt; introduces i18n to the web app, and &lt;a href=&#34;https://github.com/formstr-hq/nostr-forms/pull/466&#34;&gt;PR #466&lt;/a&gt; ships a Google Forms onboarding importer so existing form creators can migrate without rebuilding surveys. &lt;a href=&#34;https://github.com/formstr-hq/nostr-forms/pull/463&#34;&gt;PR #463&lt;/a&gt; closes a privacy leak by removing sensitive key logs from the browser console.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://calendar.formstr.app&#34;&gt;Nostr Calendar by Formstr&lt;/a&gt; cut &lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.3.0&#34;&gt;v1.3.0&lt;/a&gt; and &lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.4.0&#34;&gt;v1.4.0&lt;/a&gt; on the same day, headlined by a proper recurrence-rule surface. &lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar/pull/107&#34;&gt;PR #107&lt;/a&gt; adds multiple and custom RRULE support so events can repeat on complex schedules beyond the single-cadence case, and &lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar/pull/101&#34;&gt;PR #101&lt;/a&gt; corrects a long-standing bug by interpreting floating RRULE dates as UTC per RFC 5545, which had been causing event-time drift across timezones. &lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar/pull/97&#34;&gt;PR #97&lt;/a&gt; lets users add shared events to their calendar, &lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar/pull/86&#34;&gt;PR #86&lt;/a&gt; introduces list-level notification preferences, and &lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar/pull/112&#34;&gt;PR #112&lt;/a&gt; ships the reworked login and loading path that lands in v1.4.0. All three projects build on &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-52/&#34;&gt;NIP-52&lt;/a&gt; calendar events and share a common login stack.&lt;/p&gt;

&lt;h3 id=&#34;also-shipped-notedeck-nostr-blue-cliprelay-captain-s-log-2&#34;&gt;Also shipped: notedeck, nostr.blue, cliprelay, Captain&amp;#39;s Log&lt;/h3&gt;

&lt;p&gt;A handful of clients cut iterative releases without headline features. Damus&amp;#39;s Rust desktop and mobile client &lt;a href=&#34;https://github.com/damus-io/notedeck&#34;&gt;notedeck&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub18m76awca3y37hkvuneavuw6pjj4525fw90necxmadrvjg0sdy6qsngq955&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;damus&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub18m7…q955&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; published &lt;a href=&#34;https://github.com/damus-io/notedeck/releases/tag/v0.10.0-beta.4&#34;&gt;v0.10.0-beta.4&lt;/a&gt; with column-rendering and relay-pool fixes. The Dioxus-based Rust client &lt;a href=&#34;https://github.com/patrickulrich/nostr.blue/releases/tag/v0.8.6&#34;&gt;nostr.blue v0.8.6&lt;/a&gt; pulled in &lt;a href=&#34;https://github.com/patrickulrich/nostr.blue/commit/d90b4ff&#34;&gt;Dioxus 0.7.5&lt;/a&gt; and unblocked the Android build by &lt;a href=&#34;https://github.com/patrickulrich/nostr.blue/commit/4207f0c&#34;&gt;converting the native audio bridge&lt;/a&gt; to a &lt;code&gt;manganis::ffi&lt;/code&gt; plugin. &lt;a href=&#34;https://github.com/tajava2006/cliprelay&#34;&gt;cliprelay&lt;/a&gt;, a cross-device clipboard-sync tool that relays entries through Nostr, shipped &lt;a href=&#34;https://github.com/tajava2006/cliprelay/releases/tag/desktop%2Fv0.0.3&#34;&gt;Desktop v0.0.3&lt;/a&gt; and &lt;a href=&#34;https://github.com/tajava2006/cliprelay/releases/tag/android%2Fv0.0.4&#34;&gt;Android v0.0.4&lt;/a&gt;, tightening the sync loop and dropping 32-bit Android variants. &lt;a href=&#34;https://github.com/nodetec/comet&#34;&gt;Captain&amp;#39;s Log&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1809mpa7748df7kext899m2yatetky9w78zz72x7jgaxarvxyfvtqwvfpz8&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;nodetec&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1809…fpz8&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; published three alpha builds whose most useful addition is sync-relay &lt;a href=&#34;https://github.com/nodetec/comet/releases/tag/alpha-95f47bd&#34;&gt;liveness detection&lt;/a&gt; so dropped sockets are replaced without user action.&lt;/p&gt;

&lt;h2 id=&#34;in-development-8&#34;&gt;In Development&lt;/h2&gt;

&lt;h3 id=&#34;whitenoise-rs-refactors-to-session-scoped-account-views-2&#34;&gt;whitenoise-rs refactors to session-scoped account views&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs&#34;&gt;whitenoise-rs&lt;/a&gt;, the Rust daemon under the &lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt; client, merged 15 PRs advancing a multi-phase refactor from global singletons to per-account &lt;code&gt;AccountSession&lt;/code&gt; views. The goal is to break one shared monolith into smaller per-account surfaces that are easier to reason about, test, and evolve without side effects leaking across the whole daemon.&lt;/p&gt;

&lt;p&gt;The foundation landed in &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/743&#34;&gt;PR #743&lt;/a&gt; with the &lt;code&gt;AccountSession&lt;/code&gt; and &lt;code&gt;AccountManager&lt;/code&gt; scaffolding, followed by scoped relay handles in &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/753&#34;&gt;PR #753&lt;/a&gt;. Subsequent phases moved drafts and settings, message ops, group read and write, membership, push notifications, key-package reads, and group creation onto session-owned surfaces across &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pulls?q=is%3Apr&#43;is%3Amerged&#43;768&#43;OR&#43;763&#43;OR&#43;766&#34;&gt;PRs #760 through #769&lt;/a&gt;. Phase 15 closed the loop in &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/770&#34;&gt;PR #770&lt;/a&gt;, which rehomes event dispatch onto the session so each account consumes its own relay traffic without contention on a shared dispatcher.&lt;/p&gt;

&lt;h3 id=&#34;white-noise-app-adds-block-unblock-ui-leave-group-and-offline-notices-2&#34;&gt;White Noise app adds block/unblock UI, leave-group, and offline notices&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/marmot-protocol/whitenoise&#34;&gt;White Noise&lt;/a&gt;, the &lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt; client, added the missing group-lifecycle controls. &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/578&#34;&gt;PR #578&lt;/a&gt; ships the block and unblock UI on top of a block hook landed in &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/573&#34;&gt;PR #573&lt;/a&gt;, and &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/571&#34;&gt;PR #571&lt;/a&gt; pairs with &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/572&#34;&gt;PR #572&lt;/a&gt; to wire Rust-side &lt;code&gt;clear_chat&lt;/code&gt;, &lt;code&gt;delete_chat&lt;/code&gt;, and &lt;code&gt;leave_and_delete_group&lt;/code&gt; into the app. &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/569&#34;&gt;PR #569&lt;/a&gt; and &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/576&#34;&gt;PR #576&lt;/a&gt; add offline notices on chat and settings screens so users know when the daemon cannot reach its relays. &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/585&#34;&gt;PR #585&lt;/a&gt; narrows the broad &amp;#34;delete all key packages&amp;#34; path to a &amp;#34;delete legacy key packages&amp;#34; operation so a client migrating between KeyPackage formats no longer wipes its current keys along with the legacy ones.&lt;/p&gt;

&lt;h3 id=&#34;mdk-adds-mixed-version-invite-support-and-selfupdate-convergence-2&#34;&gt;MDK adds mixed-version invite support and SelfUpdate convergence&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/marmot-protocol/mdk&#34;&gt;MDK&lt;/a&gt;, the &lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt; Development Kit, merged seven PRs. The thread running through the work is compatibility, keeping clients on slightly different Marmot versions able to invite each other, rotate their own state, and recover cleanly from malformed inputs.&lt;/p&gt;

&lt;p&gt;The headline fix is &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/261&#34;&gt;PR #261&lt;/a&gt;, which computes a group&amp;#39;s &lt;code&gt;RequiredCapabilities&lt;/code&gt; as the LCD of invitee capabilities and unblocks mixed-version invites between &lt;a href=&#34;https://github.com/vitorpamplona/amethyst&#34;&gt;Amethyst&lt;/a&gt; and &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise&#34;&gt;White Noise&lt;/a&gt;. &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/264&#34;&gt;PR #264&lt;/a&gt; converges the SelfUpdate wire format across implementations; SelfUpdate is the control message a group member sends when rotating its own KeyPackage or capability state, so drift there silently breaks self-rotation across clients even when invites and welcomes still parse. On robustness, &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/262&#34;&gt;PR #262&lt;/a&gt; parses invitee key packages before persisting the creator&amp;#39;s signer so a malformed invitee cannot leave stray state, &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/256&#34;&gt;PR #256&lt;/a&gt; fixes receiver-side admin depletion validation, and &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/259&#34;&gt;PR #259&lt;/a&gt; prevents the in-memory storage backend from evicting security-critical state under pressure. &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/265&#34;&gt;PR #265&lt;/a&gt; exposes a &lt;code&gt;group_required_proposals&lt;/code&gt; accessor so clients can inspect the proposals that MUST land before the next commit is valid without reaching into MDK internals.&lt;/p&gt;

&lt;h3 id=&#34;nostter-adds-nip-44-encryption-across-people-lists-bookmarks-and-mutes-2&#34;&gt;nostter adds NIP-44 encryption across people lists, bookmarks, and mutes&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/SnowCait/nostter&#34;&gt;nostter&lt;/a&gt; merged 10 PRs. &lt;a href=&#34;https://github.com/SnowCait/nostter/pull/2088&#34;&gt;PR #2088&lt;/a&gt; adds &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; encryption to mute lists, &lt;a href=&#34;https://github.com/SnowCait/nostter/pull/2089&#34;&gt;PR #2089&lt;/a&gt; adds it to bookmarks, and &lt;a href=&#34;https://github.com/SnowCait/nostter/pull/2090&#34;&gt;PR #2090&lt;/a&gt; adds it to people lists, all migrating away from &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-04/&#34;&gt;NIP-04&lt;/a&gt; where applicable. &lt;a href=&#34;https://github.com/SnowCait/nostter/pull/2087&#34;&gt;PR #2087&lt;/a&gt; removes a legacy kind-30000 mute migration path now that the encrypted kind-10000 flow has stabilized.&lt;/p&gt;

&lt;h3 id=&#34;zap-cooking-ships-nourish-scoring-and-a-reusable-comment-thread-2&#34;&gt;zap.cooking ships Nourish scoring and a reusable comment thread&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/zapcooking/frontend&#34;&gt;zap.cooking&lt;/a&gt;, the Nostr recipe client, merged 20 PRs this week. The headline feature is a new Nourish recipe-scoring module (&lt;a href=&#34;https://github.com/zapcooking/frontend/pull/317&#34;&gt;PR #317&lt;/a&gt;, &lt;a href=&#34;https://github.com/zapcooking/frontend/pull/319&#34;&gt;PR #319&lt;/a&gt;) that rates recipes on nutritional axes. Alongside it, a four-stage refactor from &lt;a href=&#34;https://github.com/zapcooking/frontend/pull/299&#34;&gt;PR #299&lt;/a&gt; through &lt;a href=&#34;https://github.com/zapcooking/frontend/pull/302&#34;&gt;PR #302&lt;/a&gt; pulls the Comments module into a reusable &lt;code&gt;CommentThread&lt;/code&gt; that can be dropped into any view. Recipe-side polish includes scaling in &lt;a href=&#34;https://github.com/zapcooking/frontend/pull/309&#34;&gt;PR #309&lt;/a&gt;, a unified media-upload button in &lt;a href=&#34;https://github.com/zapcooking/frontend/pull/307&#34;&gt;PR #307&lt;/a&gt;, and a profile Replies tab in &lt;a href=&#34;https://github.com/zapcooking/frontend/pull/310&#34;&gt;PR #310&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&#34;ridestr-extracts-shared-rider-coordinator-2&#34;&gt;ridestr extracts shared rider coordinator&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/variablefate/ridestr&#34;&gt;ridestr&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1mfushgvwvwh8nvtwzu5swvqeq62h530n3mcvnuse6rcpd6h3vy5qegpf33&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;ridestr&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1mfu…pf33&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;, the decentralized ride-sharing app, merged 10 PRs refactoring its Compose screens into focused components and extracting rider and driver protocol logic into a shared &lt;code&gt;:common&lt;/code&gt; coordinator module (&lt;a href=&#34;https://github.com/variablefate/ridestr/pull/70&#34;&gt;PR #70&lt;/a&gt;). &lt;a href=&#34;https://github.com/variablefate/ridestr/pull/60&#34;&gt;PR #60&lt;/a&gt; adds a kind &lt;code&gt;3189&lt;/code&gt; driver-ping receiver for the Roadflare side of the app.&lt;/p&gt;

&lt;h3 id=&#34;blossom-drafts-a-bud-01-sunset-header-for-blob-expiration-2&#34;&gt;Blossom drafts a BUD-01 Sunset header for blob expiration&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/hzrd149/blossom&#34;&gt;Blossom&lt;/a&gt;, hzrd149&amp;#39;s protocol for storing blobs on HTTP servers keyed by SHA-256 hash, opened &lt;a href=&#34;https://github.com/hzrd149/blossom/pull/99&#34;&gt;PR #99&lt;/a&gt; to add a &lt;code&gt;Sunset&lt;/code&gt; header to BUD-01. A server can use the header to advertise a future timestamp at which a blob will stop being served, so clients can plan around limited retention without first hitting a 404. Because the proposal uses standard &lt;a href=&#34;https://www.rfc-editor.org/rfc/rfc8594.html&#34;&gt;RFC 8594&lt;/a&gt; semantics and is advisory only, a server is free to keep the blob longer or to honor the declared expiration on a best-effort basis.&lt;/p&gt;

&lt;h2 id=&#34;new-projects-5&#34;&gt;New Projects&lt;/h2&gt;

&lt;h3 id=&#34;forgesworn-publishes-a-29-repo-cryptographic-toolkit-for-nostr-2&#34;&gt;Forgesworn publishes a 29-repo cryptographic toolkit for Nostr&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/forgesworn&#34;&gt;Forgesworn&lt;/a&gt; shipped 29 open-source repositories over five days covering signing, identity, attestations, web-of-trust, and paid-API discovery on Nostr.&lt;/p&gt;

&lt;p&gt;The signing stack anchors on &lt;a href=&#34;https://github.com/forgesworn/nsec-tree&#34;&gt;nsec-tree&lt;/a&gt;, a deterministic sub-identity derivation scheme that turns one master secret into unlimited unlinkable Nostr identities, and on &lt;a href=&#34;https://github.com/forgesworn/heartwood&#34;&gt;Heartwood&lt;/a&gt;, an NIP-46 remote signer that runs on a Raspberry Pi with Tor on by default. &lt;a href=&#34;https://github.com/forgesworn/sapwood&#34;&gt;Sapwood&lt;/a&gt; adds a web management UI for shaping a Heartwood signer, and &lt;a href=&#34;https://github.com/forgesworn/heartwood-esp32&#34;&gt;heartwood-esp32&lt;/a&gt; ships a spike of the same signing token logic on a Heltec WiFi LoRa 32 board. &lt;a href=&#34;https://github.com/forgesworn/nsec-tree-cli&#34;&gt;nsec-tree-cli&lt;/a&gt; exposes the derivation, proof, and Shamir recovery flows for offline-first operation.&lt;/p&gt;

&lt;p&gt;On identity and trust, &lt;a href=&#34;https://github.com/forgesworn/signet&#34;&gt;Signet&lt;/a&gt; reached &lt;a href=&#34;https://github.com/forgesworn/signet/releases/tag/v1.6.0&#34;&gt;v1.6.0&lt;/a&gt; as a decentralized identity verification protocol for Nostr, with a QR-based pairing flow whose session pubkey is validated and pinned to the relay. &lt;a href=&#34;https://github.com/forgesworn/nostr-attestations&#34;&gt;nostr-attestations&lt;/a&gt; defines a single kind &lt;code&gt;31000&lt;/code&gt; event (NIP-VA) for credentials, endorsements, vouches, provenance, licensing, and trust, consolidating what today is spread across ad-hoc event shapes. &lt;a href=&#34;https://github.com/forgesworn/nostr-veil&#34;&gt;nostr-veil&lt;/a&gt; builds a privacy-preserving web of trust on top: NIP-85 assertions backed by &lt;a href=&#34;https://github.com/forgesworn/ring-sig&#34;&gt;LSAG ring signatures&lt;/a&gt; on secp256k1, so a vouch can prove group membership without revealing which member issued it.&lt;/p&gt;

&lt;p&gt;The monetization side covers paid APIs over Lightning and Nostr. &lt;a href=&#34;https://github.com/forgesworn/toll-booth&#34;&gt;toll-booth&lt;/a&gt; is an L402 middleware for Express, Hono, Deno, Bun, and Cloudflare Workers that turns any API into a Lightning toll booth in one line, with &lt;a href=&#34;https://github.com/forgesworn/toll-booth-dvm&#34;&gt;toll-booth-dvm&lt;/a&gt; exposing the gated API as a &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-90/&#34;&gt;NIP-90&lt;/a&gt; Data Vending Machine and &lt;a href=&#34;https://github.com/forgesworn/toll-booth-announce&#34;&gt;toll-booth-announce&lt;/a&gt; bridging to &lt;a href=&#34;https://github.com/forgesworn/402-announce&#34;&gt;402-announce&lt;/a&gt;, which publishes kind &lt;code&gt;31402&lt;/code&gt; parameterised replaceable events for HTTP 402 service discovery on Nostr. &lt;a href=&#34;https://github.com/forgesworn/402-indexer&#34;&gt;402-indexer&lt;/a&gt; is the crawler that picks those announcements up. The org also published a &lt;a href=&#34;https://github.com/forgesworn/nip-drafts&#34;&gt;29-NIP draft collection&lt;/a&gt; covering service coordination, trust, payments, disputes, key hierarchy, resource curation, and paid API discovery.&lt;/p&gt;

&lt;p&gt;Everything is TypeScript, zero-dependency where possible, and released through a new bash-only supply-chain-hardened tool called &lt;a href=&#34;https://github.com/forgesworn/anvil&#34;&gt;anvil&lt;/a&gt; with multi-runner reproducible-build attestation and OIDC trusted publishing. Several primitives in the set, including ring signatures, range proofs, and Shamir word shares, fill long-standing gaps in the Nostr library layer.&lt;/p&gt;

&lt;h3 id=&#34;shockwallet-ships-nostr-native-lightning-wallet-sync-and-multi-node-connections-2&#34;&gt;ShockWallet ships Nostr-native Lightning wallet sync and multi-node connections&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/shocknet/wallet2&#34;&gt;ShockWallet&lt;/a&gt; is a Lightning wallet that uses Nostr as its transport for connecting to self-custodial Lightning nodes. The app pairs with one or more &lt;a href=&#34;https://github.com/shocknet/Lightning.Pub&#34;&gt;Lightning.Pub&lt;/a&gt; nodes over Nostr via an &lt;code&gt;nprofile&lt;/code&gt;, then signs payment authorizations end-to-end between the wallet and the node. The team shipped &lt;a href=&#34;https://github.com/shocknet/wallet2/pull/608&#34;&gt;PR #608&lt;/a&gt; on 2026-04-18 with a channels-dashboard UI pass, landing alongside an admin-invite-link QR flow for new PUB users (&lt;a href=&#34;https://github.com/shocknet/wallet2/pull/606&#34;&gt;PR #606&lt;/a&gt;) and a readability fix for the metrics dashboard (&lt;a href=&#34;https://github.com/shocknet/wallet2/pull/607&#34;&gt;PR #607&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;ShockWallet uses &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-01/&#34;&gt;NIP-78&lt;/a&gt; application-specific data events for multi-device wallet state sync, so a user&amp;#39;s wallet view stays consistent between a desktop browser and a phone without a centralized sync server. That puts it one layer below &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-47/&#34;&gt;NIP-47&lt;/a&gt; (Nostr Wallet Connect): NIP-47 is the interface an app uses to ask an existing wallet to pay, while ShockWallet uses Nostr as the wallet&amp;#39;s own account and session transport to the underlying Lightning node. Alongside the wallet, the team is pushing &lt;a href=&#34;https://github.com/shocknet/CLINK&#34;&gt;CLINK&lt;/a&gt;, a Nostr-based session-pairing protocol for wallet-to-app connections, and maintaining a single TypeScript codebase that builds to web, Android, and iOS.&lt;/p&gt;

&lt;h3 id=&#34;nostrability-issues-migrate-to-git-over-nostr-after-github-censorship-2&#34;&gt;Nostrability issues migrate to git over Nostr after GitHub censorship&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://gitworkshop.dev/elsat@habla.news/nostrability/issues&#34;&gt;Nostrability&lt;/a&gt;, elsat&amp;#39;s interoperability tracker for Nostr clients and relays, is moving its issue workflow to git over Nostr after the Nostrability organization was taken down on GitHub with no response from GitHub support for two weeks. The migrated issue tracker now lives on GitWorkshop/ngit, where existing issues have been carried over and future interop reports can stay inside Nostr-native infrastructure.&lt;/p&gt;

&lt;h3 id=&#34;nowhere-encodes-full-websites-into-url-fragments-and-routes-orders-through-nostr-2&#34;&gt;nowhere encodes full websites into URL fragments and routes orders through Nostr&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/5t34k/nowhere&#34;&gt;nowhere&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1x5t34kxd79m657qcuwp4zrypy9t8t4e6yks5zapjvau29t0xvgaqakh2p2&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;5t34k&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1x5t…h2p2&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) is a new AGPL-3.0 project from &lt;a href=&#34;https://github.com/5t34k&#34;&gt;5t34k&lt;/a&gt; that serializes an entire site into the URL fragment after &lt;code&gt;#&lt;/code&gt;, compresses it with a dictionary substitution pass and raw DEFLATE, and base64url-encodes the result. Because HTTP prohibits browsers from sending fragments to servers, the host that delivers the page never sees the content, and the site itself is never stored on a server. The project ships eight site types (event, fundraiser, store, petition, message, drop, art, forum), and each one can be cryptographically signed by its creator and password-encrypted at the URL.&lt;/p&gt;

&lt;p&gt;Five of the eight types are purely static, but store, forum, and petition need live communication for orders, posts, and signatures, and that traffic runs through Nostr relays using ephemeral keys with &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; encryption, so the relay stores events it cannot read from throwaway keys it cannot trace. A single-item store fits in roughly 120 characters, which means a nowhere link works as a printable QR code for offline use via the companion &lt;a href=&#34;https://nowhr.xyz/install&#34;&gt;nowhr.xyz&lt;/a&gt; reader. The repo is a pnpm workspace split into a standalone &lt;code&gt;codec&lt;/code&gt; package, a Svelte 5 &lt;code&gt;web&lt;/code&gt; component library with Nostr integration and payment handling, and the &lt;code&gt;nowhr&lt;/code&gt; app shell at &lt;a href=&#34;https://nowhr.xyz/app&#34;&gt;nowhr.xyz&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&#34;small-new-surfaces-relayk-it-and-brainstorm-search-2&#34;&gt;Small new surfaces: relayk.it and Brainstorm Search&lt;/h3&gt;

&lt;p&gt;Two small projects worth a mention without a heavy changelog hook. &lt;a href=&#34;https://relayk.it&#34;&gt;relayk.it&lt;/a&gt;, built by &lt;a href=&#34;https://nostr.com/sam@relayk.it&#34;&gt;sam&lt;/a&gt; from the Soapbox team, is a &lt;a href=&#34;https://shakespeare.diy&#34;&gt;Shakespeare&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1q3sle0kvfsehgsuexttt3ugjd8xdklxfwwkh559wxckmzddywnws6cd26p&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Alex Gleason&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1q3s…d26p&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;)-built relay-discovery client that runs entirely in the browser and points users toward active Nostr relays. &lt;a href=&#34;https://brainstorm.world&#34;&gt;Brainstorm Search&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1u5njm6g5h5cpw4wy8xugu62e5s7f6fnysv0sj0z3a8rengt2zqhsxrldq3&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;straycat&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1u5n…ldq3&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) ships as a single-page Nostr search UI focused on surfacing content across the network.&lt;/p&gt;

&lt;h2 id=&#34;protocol-and-spec-work-8&#34;&gt;Protocol and Spec Work&lt;/h2&gt;

&lt;h3 id=&#34;nip-updates-8&#34;&gt;NIP Updates&lt;/h3&gt;

&lt;p&gt;Recent proposals and discussions in the &lt;a href=&#34;https://github.com/nostr-protocol/nips&#34;&gt;NIPs repository&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open PRs and Discussions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-67/&#34;&gt;NIP-67&lt;/a&gt;: EOSE Completeness Hint&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2317&#34;&gt;PR #2317&lt;/a&gt;): Proposes adding an optional third element to the &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-01/&#34;&gt;NIP-01&lt;/a&gt; &lt;code&gt;EOSE&lt;/code&gt; message so a relay can signal whether it has delivered every stored event matching the filter. Today, &lt;code&gt;EOSE&lt;/code&gt; marks the boundary between stored and real-time events but carries no information about completeness: a client that asks for 500 events from a relay capped at 300 receives 300 events and an &lt;code&gt;EOSE&lt;/code&gt;, with no way to distinguish &amp;#34;this is all of it&amp;#34; from &amp;#34;we stopped partway through.&amp;#34; The proposal adds the form &lt;code&gt;[&amp;#34;EOSE&amp;#34;, &amp;#34;&amp;lt;sub_id&amp;gt;&amp;#34;, &amp;#34;finish&amp;#34;]&lt;/code&gt; when the relay has delivered all matches, and leaves the legacy two-element form as an unchanged no-claim case. The design is backwards-compatible, since relays that do not advertise support fall through to today&amp;#39;s heuristic, and clients that know their relay supports it can stop paginating as soon as they see the positive signal.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;NIP-5D: Nostr Applets&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2303&#34;&gt;PR #2303&lt;/a&gt;): Proposes a new kind for distributing interactive applets on Nostr. Where &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-5a/&#34;&gt;NIP-5A&lt;/a&gt; covers static websites and the in-progress &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-5c/&#34;&gt;NIP-5C&lt;/a&gt; covers executable WASM scrolls, NIP-5D targets the middle ground of self-contained front-end applets that run in a client&amp;#39;s sandboxed iframe or WebView, addressable by Nostr event and updateable through a replaceable tag. Clients gain a way to ship third-party experiences (polls, calculators, mini-games) without each one wiring up a full plugin system. The open PR is actively iterating on the security model for message passing between the applet and host.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;NIP-29: Subgroups spec&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2319&#34;&gt;PR #2319&lt;/a&gt;): Extends &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-29/&#34;&gt;NIP-29&lt;/a&gt; relay-based groups with a subgroup hierarchy so a single group can host multiple parallel channels without spawning independent groups on the same relay. The PR defines a subgroup identifier that piggybacks on the existing &lt;code&gt;h&lt;/code&gt; tag, specifies how kind &lt;code&gt;9000&lt;/code&gt;-range moderation events scope to a subgroup, and clarifies how clients should render the hierarchy. The change preserves the single-&lt;code&gt;h&lt;/code&gt;-tag shape for plain messages so older clients keep working in a subgrouped room.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;NIP-29: Explicit role permissions on kind 39003&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2316&#34;&gt;PR #2316&lt;/a&gt;): Defines an explicit permissions schema on the &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-29/&#34;&gt;NIP-29&lt;/a&gt; kind &lt;code&gt;39003&lt;/code&gt; role event. Each role becomes a named set of granted operations (invite, add-user, remove-user, edit-metadata, delete-event, add-permission) with an optional time-bound expiry. Two NIP-29 relays running the same group can currently disagree on what a &amp;#34;moderator&amp;#34; can do, and clients have no way to reflect that difference to the user; the schema fixes that.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;NIP-11: access_control field for gated-relay discovery&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2318&#34;&gt;PR #2318&lt;/a&gt;): Adds a new optional &lt;code&gt;access_control&lt;/code&gt; object to the &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-11/&#34;&gt;NIP-11&lt;/a&gt; relay information document, listing the relay&amp;#39;s gating mode (open, invite, payment, allowlist) and any endpoint a client can use to request access. The field is advisory only, and it lets clients and directories filter gated relays out of public-discovery lists and show users upfront why a relay refuses writes.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;NIP-63a: Minimal Payment Gateway Descriptor&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2315&#34;&gt;PR #2315&lt;/a&gt;): Covered in &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-04-15-newsletter/#nip-updates&#34;&gt;Newsletter #18&lt;/a&gt;. The PR continues to iterate on the kind &lt;code&gt;10164&lt;/code&gt; payment-gateway-descriptor shape and on the field layout for per-tier subscription rules.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;NIP-XX: Agent Reputation Attestations (Kind 30085)&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2320&#34;&gt;PR #2320&lt;/a&gt;): Proposes a kind &lt;code&gt;30085&lt;/code&gt; addressable event for signed attestations about autonomous agents and services on Nostr, covering reliability, honest-advertising, and dispute-resolution claims. Each attestation points to a target pubkey, carries a score in a bounded range, and references the evidence event that justifies the score. The motivation is that &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-90/&#34;&gt;NIP-90&lt;/a&gt; Data Vending Machines and other service markets currently lack a standard way for customers to publish verifiable feedback that other customers can filter on.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;NIP-TPLD: Transient Private Location Data&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2309&#34;&gt;PR #2309&lt;/a&gt;): Continues from &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-04-15-newsletter/#nip-updates&#34;&gt;Newsletter #18&lt;/a&gt; with further iteration on the kind &lt;code&gt;20411&lt;/code&gt; ephemeral range, the per-recipient &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; encryption shape, and the &lt;code&gt;ttl&lt;/code&gt; tag semantics for relay retention.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;marmot-ts 0.5.0 release PR&lt;/strong&gt; (&lt;a href=&#34;https://github.com/marmot-protocol/marmot-ts/pull/70&#34;&gt;PR #70&lt;/a&gt;): The pending release PR for &lt;code&gt;@internet-privacy/marmot-ts@0.5.0&lt;/code&gt; bundles the first planned breaking changes in the TypeScript Marmot client. The release switches &lt;code&gt;KeyPackageManager&lt;/code&gt; to support both legacy kind &lt;code&gt;443&lt;/code&gt; and new kind &lt;code&gt;30443&lt;/code&gt; events, removes the &lt;code&gt;KeyPackageStore&lt;/code&gt; and group-state storage classes in favor of passing a generic key-value store directly into &lt;code&gt;KeyPackageManager&lt;/code&gt; and &lt;code&gt;MarmotGroup&lt;/code&gt;, and moves invite and group management onto &lt;code&gt;MarmotClient.invites&lt;/code&gt; and &lt;code&gt;MarmotClient.groups&lt;/code&gt;. Projects embedding marmot-ts directly will need constructor and storage-layer changes before they can pick the release up.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;nip-deep-dive-nip-72-moderated-communities-2&#34;&gt;NIP Deep Dive: NIP-72 (Moderated Communities)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/72.md&#34;&gt;NIP-72&lt;/a&gt; defines a model for topic-based communities on Nostr in which moderators curate a read view over otherwise-unrestricted writes. Unlike &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-29/&#34;&gt;NIP-29&lt;/a&gt; relay-based groups, where the relay is the authority for both membership and moderation, a NIP-72 community lives in plain Nostr events and every relay that carries the relevant kinds can serve it. Anyone can post to a community, and only posts that a recognized moderator has approved appear in the community feed.&lt;/p&gt;

&lt;p&gt;A community is defined by a kind &lt;code&gt;34550&lt;/code&gt; addressable event published by its creator. The event is a &lt;code&gt;d&lt;/code&gt;-tagged replaceable event, so the creator can edit the community&amp;#39;s metadata over time without losing the identity. The &lt;code&gt;d&lt;/code&gt; tag is the community&amp;#39;s stable slug, the &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;description&lt;/code&gt;, &lt;code&gt;image&lt;/code&gt;, and &lt;code&gt;rules&lt;/code&gt; tags carry display metadata, and a series of &lt;code&gt;p&lt;/code&gt; tags with a &lt;code&gt;&amp;#34;moderator&amp;#34;&lt;/code&gt; marker list the pubkeys whose approvals count. Optional &lt;code&gt;relay&lt;/code&gt; tags with an &lt;code&gt;author&lt;/code&gt;, &lt;code&gt;requests&lt;/code&gt;, or &lt;code&gt;approvals&lt;/code&gt; marker hint at where each kind of event should be published and fetched from:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;f1e2d3c4b5a69788f1e2d3c4b5a69788f1e2d3c4b5a69788f1e2d3c4b5a69788&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;c3d2e1f0a9b8c7d6e5f4a3b2c1d0e9f8a7b6c5d4e3f2a1b0c9d8e7f6a5b4c3d2&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1745280000,
  &amp;#34;kind&amp;#34;: 34550,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;d&amp;#34;, &amp;#34;bitcoin-devs&amp;#34;],
    [&amp;#34;name&amp;#34;, &amp;#34;Bitcoin Devs&amp;#34;],
    [&amp;#34;description&amp;#34;, &amp;#34;A moderated community for Bitcoin protocol discussion.&amp;#34;],
    [&amp;#34;image&amp;#34;, &amp;#34; https://example.com/bitcoin-devs.png&amp;#34;],
    [&amp;#34;p&amp;#34;, &amp;#34;d7e3a4b9c1f2e8d6a5b4c3d2e1f09876d7e3a4b9c1f2e8d6a5b4c3d2e1f09876&amp;#34;, &amp;#34;&amp;#34;, &amp;#34;moderator&amp;#34;],
    [&amp;#34;p&amp;#34;, &amp;#34;a1b2c3d4e5f6a7b8c9d0a1b2c3d4e5f6a7b8c9d0a1b2c3d4e5f6a7b8c9d0a1b2&amp;#34;, &amp;#34;&amp;#34;, &amp;#34;moderator&amp;#34;],
    [&amp;#34;relay&amp;#34;, &amp;#34;wss://relay.example.com&amp;#34;, &amp;#34;author&amp;#34;],
    [&amp;#34;relay&amp;#34;, &amp;#34;wss://relay.moderator.com&amp;#34;, &amp;#34;approvals&amp;#34;]
  ],
  &amp;#34;content&amp;#34;: &amp;#34;&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;A user submits a post by publishing any ordinary event (a kind &lt;code&gt;1&lt;/code&gt; note, a kind &lt;code&gt;30023&lt;/code&gt; long-form article, a kind &lt;code&gt;31922&lt;/code&gt; calendar event, and so on) and adding an &lt;code&gt;a&lt;/code&gt; tag whose value is the community&amp;#39;s coordinate &lt;code&gt;34550:&amp;lt;creator_pubkey&amp;gt;:&amp;lt;slug&amp;gt;&lt;/code&gt;. The post is a fully valid Nostr event on its own, and clients without NIP-72 support simply see a note addressed to a community-shaped coordinate. Community-aware clients filter their community view to posts that a recognized moderator has approved.&lt;/p&gt;

&lt;p&gt;Approval is a separate kind &lt;code&gt;4549&lt;/code&gt; event published by a moderator. The approval references the submission by &lt;code&gt;e&lt;/code&gt; tag, the submitter by &lt;code&gt;p&lt;/code&gt; tag, and the community by &lt;code&gt;a&lt;/code&gt; tag, and embeds the stringified submission event in the &lt;code&gt;content&lt;/code&gt; field as a cached copy. That embedded copy keeps the approved post renderable even if the original author later deletes the source event.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;d7e3a4b9c1f2e8d6a5b4c3d2e1f09876d7e3a4b9c1f2e8d6a5b4c3d2e1f09876&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1745283600,
  &amp;#34;kind&amp;#34;: 4549,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;a&amp;#34;, &amp;#34;34550:c3d2e1f0a9b8c7d6e5f4a3b2c1d0e9f8a7b6c5d4e3f2a1b0c9d8e7f6a5b4c3d2:bitcoin-devs&amp;#34;],
    [&amp;#34;e&amp;#34;, &amp;#34;b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4&amp;#34;],
    [&amp;#34;p&amp;#34;, &amp;#34;e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5&amp;#34;],
    [&amp;#34;k&amp;#34;, &amp;#34;1&amp;#34;]
  ],
  &amp;#34;content&amp;#34;: &amp;#34;{\&amp;#34;id\&amp;#34;:\&amp;#34;b3c4d5e6...\&amp;#34;,\&amp;#34;pubkey\&amp;#34;:\&amp;#34;e4f5a6b7...\&amp;#34;,\&amp;#34;kind\&amp;#34;:1,\&amp;#34;content\&amp;#34;:\&amp;#34;Question about sighash flags\&amp;#34;,\&amp;#34;tags\&amp;#34;:[[\&amp;#34;a\&amp;#34;,\&amp;#34;34550:c3d2e1f0...:bitcoin-devs\&amp;#34;]],\&amp;#34;created_at\&amp;#34;:1745283500,\&amp;#34;sig\&amp;#34;:\&amp;#34;...\&amp;#34;}&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;bbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aa&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The approval model has three useful properties. Moderation decisions are transparent: every approval is a signed Nostr event that anyone can fetch, so a skeptical user can audit which moderator approved which post and at what time. Moderation is non-exclusive: the same submission can be approved by multiple communities, and a post that one community rejects may be approved by another, because the &lt;code&gt;a&lt;/code&gt; tag is just an address on a curated view. Moderation is reversible at the read layer: if a community deletes a moderator from its kind &lt;code&gt;34550&lt;/code&gt; event, prior approvals from that moderator stop counting in clients that respect the current moderator list.&lt;/p&gt;

&lt;p&gt;The read side is where clients differ. Most community-aware clients render the feed by filtering for kind &lt;code&gt;4549&lt;/code&gt; events tagged with the community&amp;#39;s coordinate, deduplicating by the underlying event ID, and then rendering the embedded post. Some clients also fetch the submission events directly and use approvals only as a whitelist, which makes sense when approvals are incomplete or stale. A few clients (including &lt;a href=&#34;https://github.com/hzrd149/nostrudel&#34;&gt;noStrudel&lt;/a&gt; and, as of &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2468&#34;&gt;PR #2468&lt;/a&gt; this week, &lt;a href=&#34;https://github.com/vitorpamplona/amethyst&#34;&gt;Amethyst&lt;/a&gt;) expose the pending submission queue to moderators as a separate view.&lt;/p&gt;

&lt;p&gt;Compared to &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-29/&#34;&gt;NIP-29&lt;/a&gt; relay-based groups, the tradeoff is clear. NIP-72 communities work over any relay network with no special support, so the write path is portable, and moderation is visible and forkable. A submission is public the moment it is published, and unapproved posts are hidden at the client-render layer. For spaces where spam must stay off the wire entirely, NIP-29 is the better fit. For public topic communities where approvals function more like a curated front page than a gate, NIP-72 fits better.&lt;/p&gt;

&lt;h2 id=&#34;nip-deep-dive-nip-57-zaps-2&#34;&gt;NIP Deep Dive: NIP-57 (Zaps)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/57.md&#34;&gt;NIP-57&lt;/a&gt; defines zaps, a way to attach Lightning payments to Nostr identities and events and to publish a verifiable receipt of payment back onto relays. A zap proves that a specific sender paid a specific amount to a specific recipient for a specific target, and the proof is readable by any Nostr client without trusting the sender&amp;#39;s word. The spec reaches across three systems (LNURL, Lightning, and Nostr) and pins down how each of them must cooperate.&lt;/p&gt;

&lt;p&gt;The flow has four actors. A sender&amp;#39;s client discovers the recipient&amp;#39;s LNURL endpoint from either the recipient&amp;#39;s kind &lt;code&gt;0&lt;/code&gt; profile metadata (&lt;code&gt;lud06&lt;/code&gt; or &lt;code&gt;lud16&lt;/code&gt; field) or a &lt;code&gt;zap&lt;/code&gt; tag on the event being zapped. That client then signs a kind &lt;code&gt;9734&lt;/code&gt; zap request event describing the intended payment and posts it to the recipient&amp;#39;s LNURL callback, not to relays. On the other side, the recipient&amp;#39;s LNURL server validates the request, returns a Lightning invoice whose description hash commits to the stringified request event, and, once the sender pays, publishes a kind &lt;code&gt;9735&lt;/code&gt; zap receipt to the relay set the sender requested.&lt;/p&gt;

&lt;p&gt;A zap request (kind &lt;code&gt;9734&lt;/code&gt;) is a signed event that declares the payment&amp;#39;s intent. The critical fields are a &lt;code&gt;p&lt;/code&gt; tag with the recipient pubkey, an optional &lt;code&gt;e&lt;/code&gt; or &lt;code&gt;a&lt;/code&gt; tag identifying the event or addressable content being zapped, an &lt;code&gt;amount&lt;/code&gt; tag in millisats, and a &lt;code&gt;relays&lt;/code&gt; tag listing where the receipt should be published. The &lt;code&gt;content&lt;/code&gt; carries an optional sender-supplied message that accompanies the zap. A &lt;code&gt;k&lt;/code&gt; tag records the target kind so a consumer can filter zaps by the type of content they fund:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;a5b4c3d2e1f09876a5b4c3d2e1f09876a5b4c3d2e1f09876a5b4c3d2e1f09876&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1745280000,
  &amp;#34;kind&amp;#34;: 9734,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;p&amp;#34;, &amp;#34;d7e3a4b9c1f2e8d6a5b4c3d2e1f09876d7e3a4b9c1f2e8d6a5b4c3d2e1f09876&amp;#34;],
    [&amp;#34;e&amp;#34;, &amp;#34;b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4&amp;#34;],
    [&amp;#34;amount&amp;#34;, &amp;#34;21000&amp;#34;],
    [&amp;#34;relays&amp;#34;, &amp;#34;wss://relay.damus.io&amp;#34;, &amp;#34;wss://nos.lol&amp;#34;, &amp;#34;wss://relay.nostr.band&amp;#34;],
    [&amp;#34;k&amp;#34;, &amp;#34;1&amp;#34;]
  ],
  &amp;#34;content&amp;#34;: &amp;#34;great post&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;ccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbcc&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The zap receipt (kind &lt;code&gt;9735&lt;/code&gt;) is published by the recipient&amp;#39;s wallet server after payment confirmation. It is not signed by the sender; it is signed by the wallet server using the &lt;code&gt;nostrPubkey&lt;/code&gt; that the recipient advertised in their LNURL response. A valid receipt carries the stringified zap request in the &lt;code&gt;description&lt;/code&gt; tag, the paid invoice in the &lt;code&gt;bolt11&lt;/code&gt; tag, and a &lt;code&gt;preimage&lt;/code&gt; tag proving the invoice was settled:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1745280060,
  &amp;#34;kind&amp;#34;: 9735,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;p&amp;#34;, &amp;#34;d7e3a4b9c1f2e8d6a5b4c3d2e1f09876d7e3a4b9c1f2e8d6a5b4c3d2e1f09876&amp;#34;],
    [&amp;#34;P&amp;#34;, &amp;#34;a5b4c3d2e1f09876a5b4c3d2e1f09876a5b4c3d2e1f09876a5b4c3d2e1f09876&amp;#34;],
    [&amp;#34;e&amp;#34;, &amp;#34;b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4&amp;#34;],
    [&amp;#34;bolt11&amp;#34;, &amp;#34;lnbc210n1pj...bolt11invoicestring&amp;#34;],
    [&amp;#34;description&amp;#34;, &amp;#34;{\&amp;#34;id\&amp;#34;:\&amp;#34;c1d2e3f4...\&amp;#34;,\&amp;#34;pubkey\&amp;#34;:\&amp;#34;a5b4c3d2...\&amp;#34;,\&amp;#34;kind\&amp;#34;:9734,\&amp;#34;content\&amp;#34;:\&amp;#34;great post\&amp;#34;,\&amp;#34;tags\&amp;#34;:[...]}&amp;#34;],
    [&amp;#34;preimage&amp;#34;, &amp;#34;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&amp;#34;]
  ],
  &amp;#34;content&amp;#34;: &amp;#34;&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;ddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccdd&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The validation rule is where NIP-57 earns its trust guarantees. A client that displays a kind &lt;code&gt;9735&lt;/code&gt; receipt as a zap should verify four things: the receipt&amp;#39;s signature matches the &lt;code&gt;nostrPubkey&lt;/code&gt; advertised in the recipient&amp;#39;s LNURL response, the &lt;code&gt;bolt11&lt;/code&gt; invoice amount matches the &lt;code&gt;amount&lt;/code&gt; tag in the embedded zap request, the invoice&amp;#39;s description hash commits to the stringified zap request, and the &lt;code&gt;preimage&lt;/code&gt; hashes to the invoice&amp;#39;s &lt;code&gt;payment_hash&lt;/code&gt;. A receipt that fails any of these checks is only a claim of payment, not proof of it. Clients that render tallied zap counts without performing these checks are trivially spoofable by an attacker who publishes forged kind &lt;code&gt;9735&lt;/code&gt; events.&lt;/p&gt;

&lt;p&gt;Private zaps add a confidentiality layer on top. A sender can encrypt the zap request&amp;#39;s &lt;code&gt;content&lt;/code&gt; for the recipient and include an &lt;code&gt;anon&lt;/code&gt; tag on the outer zap request, so the relay network sees the payment target but cannot read the attached note. Some clients go one step further and generate a fresh ephemeral keypair for the zap request itself, so the receipt still proves a payment happened but the recipient cannot link the zap back to the sender&amp;#39;s long-lived pubkey. That &amp;#34;anonymous zap&amp;#34; pattern is stronger than a plain private zap, where the message is hidden but the sender key can still be visible in the request path.&lt;/p&gt;

&lt;p&gt;NIP-57 also underpins the zap-goal system specified in &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-75/&#34;&gt;NIP-75&lt;/a&gt;. A goal is a kind &lt;code&gt;9041&lt;/code&gt; event that declares a target amount and a relay set where receipts count, and any zap receipt bound to the goal&amp;#39;s event ID contributes to its progress. Clients tally goal progress by summing the validated &lt;code&gt;bolt11&lt;/code&gt; amounts of matched kind &lt;code&gt;9735&lt;/code&gt; events. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst&#34;&gt;Amethyst&lt;/a&gt;&amp;#39;s &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2469&#34;&gt;PR #2469&lt;/a&gt; this week wires goals into the &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-53/&#34;&gt;NIP-53&lt;/a&gt; Live Activities screen and renders a top-zappers leaderboard from the same receipts.&lt;/p&gt;

&lt;p&gt;Zap splits are defined in an appendix to the NIP. A recipient can publish a kind &lt;code&gt;0&lt;/code&gt; profile with multiple &lt;code&gt;zap&lt;/code&gt; tags, each carrying a weight, so a single zap payment is divided among several pubkeys according to the published weights. Content creators, collaborators, and platform fee recipients can all be paid atomically from a single sender-signed zap request. Several clients, including &lt;a href=&#34;https://github.com/vitorpamplona/amethyst&#34;&gt;Amethyst&lt;/a&gt;, &lt;a href=&#34;https://github.com/damus-io/damus&#34;&gt;Damus&lt;/a&gt;, and &lt;a href=&#34;https://github.com/hzrd149/nostrudel&#34;&gt;noStrudel&lt;/a&gt;, implement split-paying end-to-end.&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;That&amp;#39;s it for this week. If you&amp;#39;re building something or have news to share, DM us on Nostr or find us at &lt;a href=&#34;https://nostrcompass.org&#34;&gt;nostrcompass.org&lt;/a&gt;.&lt;/p&gt;
 &lt;/blockquote&gt;
    </content>
    <updated>2026-04-22T16:18:19Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsga2vgeh0rdukwfzhj2lr42mtjepedkup43qspz4snvmvpkh6vr2czypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq9ykn0t</id>
    
      <title type="html">Nostr Compass #18 is out. Amethyst merges 29 PRs including ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsga2vgeh0rdukwfzhj2lr42mtjepedkup43qspz4snvmvpkh6vr2czypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq9ykn0t" />
    <content type="html">
      Nostr Compass #18 is out. &lt;br/&gt;Amethyst merges 29 PRs including desktop Tor support, a custom C secp256k1 implementation, WebRTC voice and video calls, and multi-wallet NWC. Snort ships v0.5.0 through v0.5.3 with a security audit, batched WASM verification, and a rewritten message system. nstrfy launches as a Nostr-native push notification app replacing Firebase with kind 7741 relay events. This week&amp;#39;s deep dives cover NIP-29 (relay-based groups) and NIP-90 (data vending machines). &lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/naddr1qqgxydm989snxwrrxscnqdf4xu6ryq3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqp65wvqtetz&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;naddr1qq…tetz&lt;/a&gt;&lt;/span&gt; &lt;/div&gt; &lt;p&gt;Welcome back to Nostr Compass, your weekly guide to Nostr.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This week:&lt;/strong&gt; &lt;a href=&#34;https://github.com/vitorpamplona/amethyst&#34;&gt;Amethyst&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub142gywvjkq0dv6nupggyn2euhx4nduwc7yz5f24ah9rpmunr2s39se3xrj0&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;amethyst&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub142g…xrj0&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; merges 29 PRs including &lt;a href=&#34;#amethyst-merges-desktop-tor-c-secp256k1-webrtc-calls-and-multi-wallet-nwc&#34;&gt;desktop Tor support&lt;/a&gt;, a &lt;a href=&#34;#amethyst-merges-desktop-tor-c-secp256k1-webrtc-calls-and-multi-wallet-nwc&#34;&gt;custom C secp256k1 implementation&lt;/a&gt; with JNI bindings, a full &lt;a href=&#34;#amethyst-merges-desktop-tor-c-secp256k1-webrtc-calls-and-multi-wallet-nwc&#34;&gt;WebRTC call system&lt;/a&gt; for &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-ac/&#34;&gt;NIP-AC&lt;/a&gt; voice and video calls, &lt;a href=&#34;#amethyst-merges-desktop-tor-c-secp256k1-webrtc-calls-and-multi-wallet-nwc&#34;&gt;RFC 9420 MLS compliance&lt;/a&gt; for &lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt;, and &lt;a href=&#34;#amethyst-merges-desktop-tor-c-secp256k1-webrtc-calls-and-multi-wallet-nwc&#34;&gt;multi-wallet NWC&lt;/a&gt;. &lt;a href=&#34;https://github.com/vcavallo/nstrfy-android&#34;&gt;nstrfy&lt;/a&gt; &lt;a href=&#34;#nstrfy-launches-nostr-native-push-notifications-for-android&#34;&gt;launches&lt;/a&gt; as an Android push notification app that replaces Firebase with Nostr relays using kind &lt;code&gt;7741&lt;/code&gt; events. &lt;a href=&#34;https://github.com/LibertyFarmer/hamstr&#34;&gt;HAMSTR&lt;/a&gt; &lt;a href=&#34;#hamstr-adds-reticulum-for-nostr-over-lora-mesh&#34;&gt;adds Reticulum&lt;/a&gt; mesh networking, enabling Nostr events over LoRa radio with no internet connection. &lt;a href=&#34;https://github.com/nostrnative/bloom&#34;&gt;Bloom&lt;/a&gt; ships &lt;a href=&#34;#bloom-v010-ships-self-hosted-blossom-server-and-relay&#34;&gt;v0.1.0&lt;/a&gt; as a desktop app bundling a full &lt;a href=&#34;https://nostrcompass.org/en/topics/blossom/&#34;&gt;Blossom&lt;/a&gt; media server and Nostr relay. &lt;a href=&#34;https://github.com/zeSchlausKwab/wavefunc&#34;&gt;WaveFunc&lt;/a&gt; debuts with &lt;a href=&#34;#wavefunc-v010-and-v011-launch-nostr-internet-radio&#34;&gt;v0.1.0&lt;/a&gt; as an internet radio directory and player built on Nostr. &lt;a href=&#34;https://github.com/marmot-protocol/botburrow&#34;&gt;Botburrow&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1whtn0s68y3cs98zysa4nxrfzss5g5snhndv35tk5m2sudsr7ltms48r3ec&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;White Noise&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1wht…r3ec&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;a href=&#34;#botburrow-begins-development-as-marmot-bot-platform&#34;&gt;starts development&lt;/a&gt; as a self-hosted bot platform for &lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt; encrypted group chats. &lt;a href=&#34;https://github.com/v0l/snort&#34;&gt;Snort&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1v0lxxxxutpvrelsksy8cdhgfux9l6a42hsj2qzquu2zk7vc9qnkszrqj49&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Kieran&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1v0l…qj49&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) ships &lt;a href=&#34;#snort-ships-v050-through-v053-with-security-hardening-and-performance-overhaul&#34;&gt;v0.5.0 through v0.5.3&lt;/a&gt; with a security audit, batched WASM verification, and a rewritten message system. &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app&#34;&gt;Primal Android&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub12vkcxr0luzwp8e673v29eqjhrr7p9vqq8asav85swaepclllj09sylpugg&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;primal&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub12vk…pugg&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;a href=&#34;#primal-android-ships-3021-and-redesigns-feed-layout&#34;&gt;ships v3.0.21&lt;/a&gt; with a redesigned feed layout and unified main screen. Two NIP deep dives cover &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-29/&#34;&gt;NIP-29&lt;/a&gt; (Relay-based Groups) and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-90/&#34;&gt;NIP-90&lt;/a&gt; (Data Vending Machines).&lt;/p&gt;

&lt;h2 id=&#34;top-stories-17&#34;&gt;Top Stories&lt;/h2&gt;

&lt;h3 id=&#34;amethyst-merges-desktop-tor-c-secp256k1-webrtc-calls-and-multi-wallet-nwc-2&#34;&gt;Amethyst merges desktop Tor, C secp256k1, WebRTC calls, and multi-wallet NWC&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/vitorpamplona/amethyst&#34;&gt;Amethyst&lt;/a&gt;, the Android client maintained by vitorpamplona, merged 29 PRs this week across cryptography, networking, calling, and wallet infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2381&#34;&gt;PR #2381&lt;/a&gt; is the largest change, adding desktop Tor support by embedding a kmp-tor daemon with a fail-closed design. If Tor is enabled, all relay connections route through the embedded Tor process, and the app refuses to connect if Tor fails to start. Privacy routing now has parity between the Android and desktop builds, backed by over 130 unit tests for the Tor integration.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2374&#34;&gt;PR #2374&lt;/a&gt; adds a custom C secp256k1 implementation with JNI bindings for signature verification. The implementation uses GLV decomposition, wNAF (windowed Non-Adjacent Form) point encoding, and hardware-accelerated SHA-256 on both x86_64 and ARM64 architectures. The result is a 2-3x speedup on Schnorr signature verification compared to the previous pure Kotlin path. Additional PRs in the series (&lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2188&#34;&gt;PR #2188&lt;/a&gt;, &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2195&#34;&gt;PR #2195&lt;/a&gt;, &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2204&#34;&gt;PR #2204&lt;/a&gt;) add fused multiply-reduce operations, a dedicated Fe4 struct replacing LongArray for field element storage, and platform-specific intrinsics for an estimated 28% improvement on Android.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2202&#34;&gt;PR #2202&lt;/a&gt; updates the pure Kotlin MLS implementation to comply with RFC 9420, adding reuse guard checks, additional authenticated data (AAD) in ciphertext operations, ciphertext sample derivation, commit processing fixes, and thread safety for &lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt; protocol integration. Building on &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-04-08-newsletter/#amethyst-ships-arti-tor-merges-pure-kotlin-mls-and-marmot&#34;&gt;the Kotlin MLS work from last week&lt;/a&gt;, this brings &lt;a href=&#34;https://nostrcompass.org/en/topics/quartz/&#34;&gt;Quartz&lt;/a&gt; closer to full MLS spec compliance.&lt;/p&gt;

&lt;p&gt;A series of WebRTC PRs (&lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2203&#34;&gt;PR #2203&lt;/a&gt; through &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2211&#34;&gt;PR #2211&lt;/a&gt;) adds a complete voice and video calling system for &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-ac/&#34;&gt;NIP-AC&lt;/a&gt;. The implementation covers ICE restart for dropped connections, runtime camera switching, network monitoring with automatic reconnection, configurable call settings (resolution, bitrate, TURN server selection), a foreground service fix for Android 14&#43; background restrictions, and thread safety across the call state machine.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/1988&#34;&gt;PR #1988&lt;/a&gt; adds multi-wallet &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-47/&#34;&gt;NIP-47&lt;/a&gt; (Nostr Wallet Connect) support. Users can now connect multiple NWC wallets to a single account, view balance cards for each, pick a default wallet, and migrate from the legacy single-wallet configuration.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2189&#34;&gt;PR #2189&lt;/a&gt; adds GIF-to-MP4 conversion with a quality slider, compressing a 3MB GIF down to approximately 159KB as MP4. The same week also brought AI tone suggestions in the post composer with automatic language detection and parallel precomputation of suggestions.&lt;/p&gt;

&lt;h3 id=&#34;nstrfy-launches-nostr-native-push-notifications-for-android-2&#34;&gt;nstrfy launches Nostr-native push notifications for Android&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/vcavallo/nstrfy-android&#34;&gt;nstrfy&lt;/a&gt; launched on April 13 with three releases from &lt;a href=&#34;https://github.com/vcavallo/nstrfy-android/releases/tag/v1.0.0&#34;&gt;v1.0.0&lt;/a&gt; through &lt;a href=&#34;https://github.com/vcavallo/nstrfy-android/releases/tag/v1.2.0&#34;&gt;v1.2.0&lt;/a&gt;. The app is a fork of ntfy-android with the HTTP transport replaced by Nostr. Instead of polling a server for push notifications, nstrfy subscribes to kind &lt;code&gt;7741&lt;/code&gt; events on configurable relays and displays them as native Android notifications.&lt;/p&gt;

&lt;p&gt;The notification model supports both plaintext and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; encrypted payloads. When encryption is enabled, nstrfy uses &lt;a href=&#34;https://github.com/greenart7c3/Amber&#34;&gt;Amber&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1w4uswmv6lu9yel005l3qgheysmr7tk9uvwluddznju3nuxalevvs2d0jr5&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;greenart7c3&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1w4u…0jr5&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) for signing via &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-55/&#34;&gt;NIP-55&lt;/a&gt; or a local nsec. Topic-based subscriptions let users configure per-topic sender allowlists with npub whitelisting, so only approved senders can trigger notifications for a given topic. The app imports relay lists from the user&amp;#39;s profile using &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-65/&#34;&gt;NIP-65&lt;/a&gt; and respects &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-40/&#34;&gt;NIP-40&lt;/a&gt; event expiration. User search is powered by &lt;a href=&#34;https://nostrcompass.org/en/topics/web-of-trust/&#34;&gt;Web of Trust&lt;/a&gt; data from brainstorm.world.&lt;/p&gt;

&lt;p&gt;A companion CLI tool, &lt;a href=&#34;https://github.com/vcavallo/nstrfy.sh&#34;&gt;nstrfy.sh&lt;/a&gt;, lets users send notifications from the command line. The app is available on &lt;a href=&#34;https://zapstore.dev/apps/io.nstrfy.android&#34;&gt;Zapstore&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub10r8xl2njyepcw2zwv3a6dyufj4e4ajx86hz6v4ehu4gnpupxxp7stjt2p8&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Zapstore&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub10r8…t2p8&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt;

&lt;h3 id=&#34;hamstr-adds-reticulum-for-nostr-over-lora-mesh-2&#34;&gt;HAMSTR adds Reticulum for Nostr over LoRa mesh&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/LibertyFarmer/hamstr&#34;&gt;HAMSTR&lt;/a&gt;, the project that sends Nostr events and Lightning zaps over ham radio, merged &lt;a href=&#34;https://github.com/LibertyFarmer/hamstr/pull/10&#34;&gt;PR #10&lt;/a&gt; on April 12, adding &lt;a href=&#34;https://reticulum.network/&#34;&gt;Reticulum&lt;/a&gt; mesh networking as a transport backend. Reticulum is a cryptographic mesh protocol that runs over LoRa, HF, VHF/UHF radio, serial links, and TCP/IP. With this addition, HAMSTR can relay Nostr events across a mesh of RNode hardware devices with no internet infrastructure at all.&lt;/p&gt;

&lt;p&gt;The existing AX.25 Packet Radio and VARA HF transports remain available, so operators can choose the radio link that fits their setup. HAMSTR&amp;#39;s zero-knowledge server architecture means the relay never sees private keys, and its &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-57/&#34;&gt;NIP-57&lt;/a&gt; zap compliance ensures that offline Lightning zaps appear correctly in clients like Amethyst and Primal. A setup guide for the Reticulum transport is included in &lt;a href=&#34;https://github.com/LibertyFarmer/hamstr/blob/master/RETICULUM.MD&#34;&gt;RETICULUM.MD&lt;/a&gt;. The same week, &lt;a href=&#34;https://github.com/LibertyFarmer/hamstr/pull/11&#34;&gt;PR #11&lt;/a&gt; migrated the frontend to Svelte 5 and TailwindCSS v4.&lt;/p&gt;

&lt;h2 id=&#34;shipping-this-week-11&#34;&gt;Shipping This Week&lt;/h2&gt;

&lt;h3 id=&#34;bloom-v0-1-0-ships-self-hosted-blossom-server-and-relay-2&#34;&gt;Bloom v0.1.0 ships self-hosted Blossom server and relay&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostrnative/bloom&#34;&gt;Bloom&lt;/a&gt; shipped its first release, &lt;a href=&#34;https://github.com/nostrnative/bloom/releases/tag/v0.1.0&#34;&gt;v0.1.0&lt;/a&gt;, on April 9. Built with Tauri v2 (Rust backend) and React 19, Bloom bundles a full &lt;a href=&#34;https://nostrcompass.org/en/topics/blossom/&#34;&gt;Blossom&lt;/a&gt; protocol media server (BUD-00 through BUD-10) and a Nostr relay into a single desktop application that runs on macOS, Windows, and Linux, with Android and iOS builds planned. Users get sovereign file storage with SHA-256 content addressing, &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-94/&#34;&gt;NIP-94&lt;/a&gt; file metadata support, and Blossom URI scheme (&lt;code&gt;blossom://&lt;/code&gt;) resolution without managing server infrastructure. Sixteen platform-specific binary assets ship with the release.&lt;/p&gt;

&lt;h3 id=&#34;wavefunc-v0-1-0-and-v0-1-1-launch-nostr-internet-radio-2&#34;&gt;WaveFunc v0.1.0 and v0.1.1 launch Nostr internet radio&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/zeSchlausKwab/wavefunc&#34;&gt;WaveFunc&lt;/a&gt; shipped &lt;a href=&#34;https://github.com/zeSchlausKwab/wavefunc/releases/tag/v0.1.0&#34;&gt;v0.1.0&lt;/a&gt; and &lt;a href=&#34;https://github.com/zeSchlausKwab/wavefunc/releases/tag/v0.1.1&#34;&gt;v0.1.1&lt;/a&gt; on April 13, launching as a Nostr-based internet radio directory and player. Custom event kinds define the data model: kind &lt;code&gt;31237&lt;/code&gt; for radio station listings, kind &lt;code&gt;30078&lt;/code&gt; for favorites lists, kind &lt;code&gt;1311&lt;/code&gt; for live chat, and kind &lt;code&gt;1111&lt;/code&gt; for station comments. A Khatru relay backend provides SQLite storage and Bluge full-text search supporting &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-50/&#34;&gt;NIP-50&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;WaveFunc ships with a &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-60/&#34;&gt;NIP-60&lt;/a&gt; Cashu wallet and nutzap support, migrated from NDK to applesauce-core. &lt;a href=&#34;https://github.com/zeSchlausKwab/wavefunc/releases/tag/v0.1.1&#34;&gt;v0.1.1&lt;/a&gt; adds genre carousels, a Lightning donation popover, station management for authenticated users, and Zapstore listing. The Tauri v2 desktop build gained system tray integration, media key support, autostart, and deep linking. Builds are available for macOS, Windows, Linux, and Android at &lt;a href=&#34;https://wavefunc.live&#34;&gt;wavefunc.live&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&#34;snort-ships-v0-5-0-through-v0-5-3-with-security-hardening-and-performance-overhaul-2&#34;&gt;Snort ships v0.5.0 through v0.5.3 with security hardening and performance overhaul&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/v0l/snort&#34;&gt;Snort&lt;/a&gt;, the React-based Nostr web client, shipped three releases from &lt;a href=&#34;https://github.com/v0l/snort/releases/tag/v0.5.0&#34;&gt;v0.5.0&lt;/a&gt; through &lt;a href=&#34;https://github.com/v0l/snort/releases/tag/v0.5.3&#34;&gt;v0.5.3&lt;/a&gt;. The v0.5.0 release is the largest, delivering a comprehensive security audit with real Schnorr signature verification, hardened &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; protection against forged relay messages, improved PIN encryption, and removal of unverified &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/26.md&#34;&gt;NIP-26&lt;/a&gt; delegation trust. Performance improvements include batched WASM signature verification, lazy-loaded routes, a rewritten priority profile loader with batch loading and chunking, and worker-relay optimizations. The release also adds kind &lt;code&gt;7000&lt;/code&gt; payment-required invoice display for &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-90/&#34;&gt;NIP-90&lt;/a&gt; DVMs. &lt;a href=&#34;https://github.com/v0l/snort/pull/620&#34;&gt;PR #620&lt;/a&gt; reworked the messaging system for performance, persisting gift wraps in the worker relay and replacing O(n²) chat list computation with a single-pass Map-based approach.&lt;/p&gt;

&lt;h3 id=&#34;primal-android-ships-3-0-21-and-redesigns-feed-layout-2&#34;&gt;Primal Android ships 3.0.21 and redesigns feed layout&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app&#34;&gt;Primal Android&lt;/a&gt; shipped &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/releases/tag/3.0.21&#34;&gt;v3.0.21&lt;/a&gt; with bug fixes for poll zap votes, wallet multi-account sharing, and auto-reconnect for the remote signer and wallet service. Seven merged PRs followed: &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/1008&#34;&gt;PR #1008&lt;/a&gt; unifies the main screen layout, &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/1010&#34;&gt;PR #1010&lt;/a&gt; implements a new feed card design with larger avatars and content indentation, &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/1009&#34;&gt;PR #1009&lt;/a&gt; adds video support and portrait layout to media feed cards, &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/1012&#34;&gt;PR #1012&lt;/a&gt; introduces a compact text field for quick replies, and &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/1013&#34;&gt;PR #1013&lt;/a&gt; redesigns the app bars.&lt;/p&gt;

&lt;h3 id=&#34;nostria-v3-1-19-through-v3-1-21-add-local-ai-image-generation-2&#34;&gt;Nostria v3.1.19 through v3.1.21 add local AI image generation&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostria-app/nostria&#34;&gt;Nostria&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1zl3g38a6qypp6py2z07shggg45cu8qex992xpss7d8zrl28mu52s4cjajh&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;sondreb&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1zl3…jajh&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) shipped three releases from &lt;a href=&#34;https://github.com/nostria-app/nostria/releases/tag/v3.1.19&#34;&gt;v3.1.19&lt;/a&gt; through &lt;a href=&#34;https://github.com/nostria-app/nostria/releases/tag/v3.1.21&#34;&gt;v3.1.21&lt;/a&gt; with over 80 commits. The headline addition is local image generation using Janus Pro with WebGPU acceleration, so users can generate images on-device without an external API. The releases also add cloud image generation, multimodal chat, ONNX runtime support, an AI prompt library, and AI cache management. On the client side, the update brings a new dialog system, note editor overhaul, music embed improvements, and signer login flow changes. &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-04-08-newsletter/#nostria-ships-native-mobile-app&#34;&gt;Newsletter #17&lt;/a&gt; covered the v3.1.18 native mobile release with local signer support.&lt;/p&gt;

&lt;h3 id=&#34;tubestr-v1-0-3-ships-feed-and-studio-updates-2&#34;&gt;TubeStr v1.0.3 ships feed and studio updates&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/Tubestr/tubestr-v2&#34;&gt;TubeStr&lt;/a&gt;, a private family video sharing app built on Nostr, shipped &lt;a href=&#34;https://github.com/Tubestr/tubestr-v2/releases/tag/v1.0.3&#34;&gt;v1.0.3&lt;/a&gt; on April 13. The release adds feed and studio improvements. &lt;a href=&#34;https://github.com/Tubestr/tubestr-v2/pull/3&#34;&gt;PR #3&lt;/a&gt; revamps the onboarding screens and &lt;a href=&#34;https://github.com/Tubestr/tubestr-v2/pull/2&#34;&gt;PR #2&lt;/a&gt; fixes a video export error. The app uses NDK and MDK (&lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt; Development Kit) for encrypted media sharing between family members, with &lt;a href=&#34;https://nostrcompass.org/en/topics/blossom/&#34;&gt;Blossom&lt;/a&gt; integration planned for media storage. TubeStr is available on &lt;a href=&#34;https://zapstore.dev&#34;&gt;Zapstore&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&#34;in-development-11&#34;&gt;In Development&lt;/h2&gt;

&lt;h3 id=&#34;botburrow-begins-development-as-marmot-bot-platform-2&#34;&gt;Botburrow begins development as Marmot bot platform&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/marmot-protocol/botburrow&#34;&gt;Botburrow&lt;/a&gt; is a new project from the Marmot team, started on April 3. It is a self-hosted bot management platform where each bot gets its own Nostr identity, joins &lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt; MLS-encrypted group chats via Welcome messages, and sends and receives end-to-end encrypted messages. The dashboard, built with Rails 8.1, communicates with a single whitenoise-rs daemon (&lt;code&gt;wnd&lt;/code&gt;) over a Unix socket.&lt;/p&gt;

&lt;p&gt;Botburrow exposes a substantial scripting and operations layer: commands, triggers, and scheduled actions run custom Ruby code, scripts can inspect profiles, group membership, and pending invites through &lt;code&gt;wnd&lt;/code&gt;, the dashboard includes a live chat view for messaging bots inside real groups, and each bot has its own file storage for configs, cached data, and generated output. A &lt;a href=&#34;https://github.com/marmot-protocol/botburrow/commit/2ed012078eaab3c5b92dff16b87865c2e353bd80&#34;&gt;Docker image&lt;/a&gt; with multi-arch builds targets zero-config self-hosting on Umbrel and Start9. A &lt;a href=&#34;https://github.com/marmot-protocol/botburrow/commit/c8ef8c306af247560b1952878206d854cde3fe20&#34;&gt;trust model section&lt;/a&gt; in the README documents the security boundaries.&lt;/p&gt;

&lt;h3 id=&#34;nostr-archives-adds-trending-feeds-relay-and-entity-resolution-2&#34;&gt;Nostr Archives adds trending feeds relay and entity resolution&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/barrydeen/nostrarchives-api&#34;&gt;Nostr Archives&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1utx00neqgqln72j22kej3ux7803c2k986henvvha4thuwfkper4s7r50e8&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;utxo the webmaster 🧑‍💻&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1utx…50e8&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), the Nostr archival and analytics platform at &lt;a href=&#34;https://nostrarchives.com&#34;&gt;nostrarchives.com&lt;/a&gt;, continued steady development across its &lt;a href=&#34;https://github.com/barrydeen/nostrarchives-api&#34;&gt;API&lt;/a&gt; (Rust) and &lt;a href=&#34;https://github.com/barrydeen/nostrarchives-frontend&#34;&gt;frontend&lt;/a&gt; (Next.js 16). On the API side, &lt;a href=&#34;https://github.com/barrydeen/nostrarchives-api/pull/118&#34;&gt;PR #118&lt;/a&gt; adds time-range filtering to the client leaderboard and &lt;a href=&#34;https://github.com/barrydeen/nostrarchives-api/pull/117&#34;&gt;PR #117&lt;/a&gt; adds engagement counters to reply events. On the frontend, &lt;a href=&#34;https://github.com/barrydeen/nostrarchives-frontend/pull/85&#34;&gt;PR #85&lt;/a&gt; resolves Nostr entities directly from URL paths (paste an npub or note ID into the URL and the site renders it), and &lt;a href=&#34;https://github.com/barrydeen/nostrarchives-frontend/pull/86&#34;&gt;PR #86&lt;/a&gt; adds an API documentation page. The platform runs four relay services: a NIP-50 search relay, a trending feeds relay (visible at &lt;code&gt;wss://feeds.nostrarchives.com&lt;/code&gt;), a scheduler relay for future-dated events, and an indexer relay for kinds 0, 3, and 10002.&lt;/p&gt;

&lt;h3 id=&#34;damus-fixes-favorites-timeline-2&#34;&gt;Damus fixes favorites timeline&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/damus-io/damus&#34;&gt;Damus&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub18m76awca3y37hkvuneavuw6pjj4525fw90necxmadrvjg0sdy6qsngq955&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;damus&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub18m7…q955&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;, the iOS client, merged &lt;a href=&#34;https://github.com/damus-io/damus/pull/3708&#34;&gt;PR #3708&lt;/a&gt; rewriting the &lt;code&gt;subscribe_to_favorites()&lt;/code&gt; function with in-place filtering, deduplication rebuilding, and persisted tab selection.&lt;/p&gt;

&lt;h3 id=&#34;nostur-adds-private-zaps-and-custom-emoji-viewing-2&#34;&gt;Nostur adds private zaps and custom emoji viewing&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostur-com/nostur-ios-public&#34;&gt;Nostur&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1n0stur7q092gyverzc2wfc00e8egkrdnnqq3alhv7p072u89m5es5mk6h0&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Nostur&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1n0s…k6h0&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;, the iOS client, pushed 10 commits this week adding private zap support, custom emoji viewing, an animated &lt;code&gt;.webp&lt;/code&gt; rendering fix, and voice message audio format detection.&lt;/p&gt;

&lt;h3 id=&#34;amber-ships-v6-0-1-through-v6-0-3-with-webdav-backup-and-relay-reconnection-fixes-2&#34;&gt;Amber ships v6.0.1 through v6.0.3 with WebDAV backup and relay reconnection fixes&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/greenart7c3/Amber&#34;&gt;Amber&lt;/a&gt;, the Android &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-55/&#34;&gt;NIP-55&lt;/a&gt; signer app, shipped three releases this week. &lt;a href=&#34;https://github.com/greenart7c3/Amber/releases/tag/v6.0.1&#34;&gt;v6.0.1&lt;/a&gt; adds two new backup options (WebDAV and share to Google Drive), implements exponential backoff for relay reconnections, updates the Quartz library to 1.08.0, and fixes event validation for app update and profile events. &lt;a href=&#34;https://github.com/greenart7c3/Amber/releases/tag/v6.0.2&#34;&gt;v6.0.2&lt;/a&gt; adds an account index option when using seed words and fixes relay reconnection when the relay is offline at startup. &lt;a href=&#34;https://github.com/greenart7c3/Amber/releases/tag/v6.0.3&#34;&gt;v6.0.3&lt;/a&gt; adds an additional fix for empty request IDs when receiving intents.&lt;/p&gt;

&lt;h3 id=&#34;plektos-v0-6-0-redesigns-with-ditto-themes-2&#34;&gt;Plektos v0.6.0 redesigns with Ditto themes&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/derekross/plektos&#34;&gt;Plektos&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub18ams6ewn5aj2n3wt2qawzglx9mr4nzksxhvrdc4gzrecw7n5tvjqctp424&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Derek Ross&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub18am…p424&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), the decentralized meetup and events platform built on &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-52/&#34;&gt;NIP-52&lt;/a&gt; with interactive maps, shipped &lt;a href=&#34;https://github.com/derekross/plektos/commit/7a691cdf089ceb7a8582dd5c0ee026830f2cdc77&#34;&gt;v0.6.0&lt;/a&gt; and &lt;a href=&#34;https://github.com/derekross/plektos/commit/3a6474ae380522d8ee1b3526423fcfc3328fd879&#34;&gt;v0.6.1&lt;/a&gt; on April 14. The update adds Ditto-style community themes with custom background image uploads, avatar shape configuration, and a UI overhaul. &lt;a href=&#34;https://github.com/derekross/plektos/pull/6&#34;&gt;PR #6&lt;/a&gt; addresses a full code review covering security, architecture, and UX findings. Plektos uses Nostrify for protocol integration, &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; for remote login, and zaps for ticket payments. The Android build is available on Zapstore.&lt;/p&gt;

&lt;h3 id=&#34;shadow-adds-nostr-os-api-and-cashu-wallet-app-2&#34;&gt;Shadow adds Nostr OS API and Cashu wallet app&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/justinmoon/shadow&#34;&gt;Shadow&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1zxu639qym0esxnn7rzrt48wycmfhdu3e5yvzwx7ja3t84zyc2r8qz8cx2y&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;justinmoon&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1zxu…cx2y&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), Justin Moon&amp;#39;s app runtime platform, pushed over 30 commits in two days. &lt;a href=&#34;https://github.com/justinmoon/shadow/commit/88cbda5131814d2730a2d892029932136db005df&#34;&gt;Commit 88cbda5&lt;/a&gt; adds a Cashu wallet app running inside the Shadow runtime. &lt;a href=&#34;https://github.com/justinmoon/shadow/commit/865c415&#34;&gt;Commit 865c415&lt;/a&gt; adds a podcast player demo. The runtime exposes &lt;code&gt;Shadow.os.nostr&lt;/code&gt; and &lt;code&gt;Shadow.os.audio&lt;/code&gt; as first-class OS-level APIs, and the Pixel runtime lane runs a Wayland compositor on rooted Android devices with GPU compositing. &lt;a href=&#34;https://github.com/justinmoon/shadow/pull/1&#34;&gt;PR #1&lt;/a&gt; and &lt;a href=&#34;https://github.com/justinmoon/shadow/pull/2&#34;&gt;PR #2&lt;/a&gt; from contributor k0sti fix desktop Linux font loading and XDG state directory handling. No formal release yet.&lt;/p&gt;

&lt;h3 id=&#34;lief-fixes-amber-login-and-adds-zapstore-2&#34;&gt;Lief fixes Amber login and adds Zapstore&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://gitlab.com/chad.curtis/lief&#34;&gt;Lief&lt;/a&gt;, a Nostr app for composing and sending long-form letters to other Nostr users, shipped build &lt;code&gt;v2026.04.12&lt;/code&gt; on April 12. The update fixes an &lt;a href=&#34;https://github.com/greenart7c3/Amber&#34;&gt;Amber&lt;/a&gt; signer login issue on Android, simplifies the signer nudge flow, upgrades the nostrify dependency, and adds Zapstore integration.&lt;/p&gt;

&lt;h3 id=&#34;espy-overhauls-color-picker-and-fixes-amber-login-2&#34;&gt;Espy overhauls color picker and fixes Amber login&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://gitlab.com/chad.curtis/espy&#34;&gt;Espy&lt;/a&gt;, a Nostr social app where users share &amp;#34;color moments,&amp;#34; capturing 3-6 color palettes from real-life scenes as a form of pre-verbal visual communication, shipped build &lt;code&gt;v2026.04.12&lt;/code&gt; on April 12. The update overhauls the color picker with a curved saturation arc replacing the grayscale toggle, fixes hue ring flicker bugs, and adds Easter egg characters (Alchemist and Astrologer). Compression reduced PNG assets by 703KB. The release also fixes an &lt;a href=&#34;https://github.com/greenart7c3/Amber&#34;&gt;Amber&lt;/a&gt; signer login issue, simplifies the signer nudge flow, upgrades the nostrify dependency, and adds Zapstore integration.&lt;/p&gt;

&lt;h3 id=&#34;jumble-adds-per-feed-kind-filters-and-articles-tab-2&#34;&gt;Jumble adds per-feed kind filters and articles tab&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/CodyTseng/jumble&#34;&gt;Jumble&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub17n4cuc4d6y6qh89dekvxrenfkt5s0n49xns00uavjaxpr36c55dq87fyh9&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Jumble&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub17n4…fyh9&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;, the Nostr client, pushed 13 commits this week adding per-feed kind filtering, an Articles tab, notification read status sync with a privacy-preserving option, an avatar hide mode, and an account switching race condition fix.&lt;/p&gt;

&lt;h3 id=&#34;primal-web-ships-8-version-bumps-2&#34;&gt;Primal Web ships 8 version bumps&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/PrimalHQ/primal-web-app&#34;&gt;Primal Web&lt;/a&gt; shipped versions 3.0.93 through 3.0.101 in one week with 21 commits. The work focused on live stream chat improvements, mention boundary fixes, bookmark pagination, duplicate like prevention, and relay proxy fixes.&lt;/p&gt;

&lt;h2 id=&#34;protocol-and-spec-work-11&#34;&gt;Protocol and Spec Work&lt;/h2&gt;

&lt;h3 id=&#34;nip-updates-11&#34;&gt;NIP Updates&lt;/h3&gt;

&lt;p&gt;Recent changes to the &lt;a href=&#34;https://github.com/nostr-protocol/nips&#34;&gt;NIPs repository&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Merged:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-34/&#34;&gt;NIP-34&lt;/a&gt; (Git Stuff): Add &lt;code&gt;nostr://&lt;/code&gt; clone URLs&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2312&#34;&gt;PR #2312&lt;/a&gt;): &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-34/&#34;&gt;NIP-34&lt;/a&gt; defines how to host git repositories on Nostr using kind &lt;code&gt;30617&lt;/code&gt; repository announcements that list branches, tags, relay locations, and maintainer pubkeys. Until now, the spec lacked a formal URL scheme for referencing these repositories. This PR adds a &lt;code&gt;nostr://&lt;/code&gt; clone URL format that works with &lt;code&gt;git-remote-nostr&lt;/code&gt; helpers, so &lt;code&gt;git clone nostr://npub1.../relay.ngit.dev/ngit&lt;/code&gt; resolves the npub (or &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/05.md&#34;&gt;NIP-05&lt;/a&gt; address), discovers the repository&amp;#39;s relay locations, and fetches the repository data. Three URL patterns are defined: &lt;code&gt;nostr://&amp;lt;naddr&amp;gt;&lt;/code&gt; for direct addressable event references, &lt;code&gt;nostr://&amp;lt;npub|nip05&amp;gt;/&amp;lt;identifier&amp;gt;&lt;/code&gt; for human-readable repository references, and &lt;code&gt;nostr://&amp;lt;npub|nip05&amp;gt;/&amp;lt;relay-hint&amp;gt;/&amp;lt;identifier&amp;gt;&lt;/code&gt; when the client needs a relay hint. Both the relay hint and identifier are percent-encoded per RFC 3986. The format is already implemented by Shakespeare and ngit&amp;#39;s git-remote-nostr helper, and displayed by GitWorkshop.dev and NostrHub.io. The PR also tightens the &lt;code&gt;d&lt;/code&gt; tag format for repository identifiers so that &lt;code&gt;nostr://&lt;/code&gt; URLs produce valid URIs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Open PRs and Discussions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;NIP-63a: Minimal Payment Gateway Descriptor&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2315&#34;&gt;PR #2315&lt;/a&gt;): Proposes a new kind &lt;code&gt;10164&lt;/code&gt; replaceable event that lets content creators declare payment gateways, pricing models, and subscription rules for accessing paid content. Today, payment-gated content on Nostr requires each client to implement its own payment flow, with no standard way for a creator to say &amp;#34;this content costs X sats via gateway Y.&amp;#34; The proposed event would embed payment gateway descriptors directly in Nostr events, letting clients discover a creator&amp;#39;s accepted payment methods, pricing tiers, and subscription options from a single replaceable event. This decouples payment presentation from specific providers, so a creator could accept Lightning, Cashu, or fiat gateways without each client needing custom integration for each payment method.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;NIP-XX: Relay Self-Declaration Manifest and Retention Horizon&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2314&#34;&gt;PR #2314&lt;/a&gt;): Proposes two wire protocol primitives for relay transparency. The first is kind &lt;code&gt;10100&lt;/code&gt;, a gossipable replaceable event where relay operators declare their endpoints (clearnet, Tor, I2P), retention window, write policy, and supported NIPs. Unlike &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-11/&#34;&gt;NIP-11&lt;/a&gt; relay information documents (HTTP-only, not discoverable through Nostr itself), kind &lt;code&gt;10100&lt;/code&gt; manifests propagate through the Nostr event network like any other event, with TOFU key binding via the NIP-11 &lt;code&gt;pubkey&lt;/code&gt; field to prevent spoofing. The second primitive is &lt;code&gt;HORIZON&lt;/code&gt;, a new relay-to-client message &lt;code&gt;[&amp;#34;HORIZON&amp;#34;, &amp;lt;sub_id&amp;gt;, &amp;lt;earliest_timestamp&amp;gt;]&lt;/code&gt; sent before &lt;code&gt;EOSE&lt;/code&gt;. When a client&amp;#39;s subscription time range extends past the relay&amp;#39;s retention window, the relay replies with the earliest timestamp it holds, replacing silent dead-ends (&amp;#34;no results found&amp;#34;) with explicit temporal boundaries (&amp;#34;I only have data from timestamp X onward&amp;#34;). The motivation is that NIP-11&amp;#39;s &lt;code&gt;retention&lt;/code&gt; field was removed in February 2026 as unused because HTTP-only delivery was a distribution failure. A reference implementation runs on nostr-rs-relay 0.9.0 with 90-day pruning.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;NIP-TPLD: Transient Private Location Data&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2309&#34;&gt;PR #2309&lt;/a&gt;): Proposes kind &lt;code&gt;20411&lt;/code&gt; (ephemeral range) for sharing encrypted geolocation data with specific recipients. Centralized location-sharing services like Google Maps and Apple Find My require trusting a central authority with real-time movements. This NIP defines a privacy-first alternative where the event content contains a JSON map of recipient pubkeys to &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; encrypted payloads, each containing a geohash at a configurable precision level (from city-level at precision 5 to street-level at precision 8). Multiple recipients are handled in a single event with per-recipient encryption, so each person can only decrypt their own payload. A &lt;code&gt;ttl&lt;/code&gt; tag sets the suggested time-to-live in seconds, and the ephemeral kind range (20000-20999) signals to relays that these events should not be stored indefinitely. The &lt;code&gt;p&lt;/code&gt; tags allow clients to filter relevant events without decrypting content.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-5c/&#34;&gt;NIP-5C&lt;/a&gt; (Scrolls): WASM programs update&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2281&#34;&gt;PR #2281&lt;/a&gt;): Continues development of the WebAssembly program publishing and execution spec, which defines conventions for publishing and discovering WASM binaries as Nostr events. Scrolls are self-contained programs that clients can download from relays and execute in a sandboxed runtime, turning Nostr into a distribution network for executable code. The PR refines the event format and runtime interface. A &lt;a href=&#34;https://nprogram.netlify.app/&#34;&gt;demo app&lt;/a&gt; shows scrolls running in-browser, with example programs published as Nostr events that any client can fetch and execute. The concept extends &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-5a/&#34;&gt;NIP-5A&lt;/a&gt; (static websites) from serving HTML pages to running interactive programs, all distributed through the same relay infrastructure.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; large payload support&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1907&#34;&gt;PR #1907&lt;/a&gt;): Proposes extending &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; versioned encryption to handle payloads larger than the current 65,535-byte limit. The change is backwards-compatible: implementations that do not need large messages can ignore it entirely. The practical motivation is &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; remote signing of large kind &lt;code&gt;3&lt;/code&gt; contact lists, where a user&amp;#39;s follow list can exceed the encryption size limit when serialized as JSON. Without this change, remote signers cannot encrypt responses containing large contact lists, forcing workarounds or truncation.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-c7/&#34;&gt;NIP-C7&lt;/a&gt;: Restrict kind 9 to chat views&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2310&#34;&gt;PR #2310&lt;/a&gt;): &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-c7/&#34;&gt;NIP-C7&lt;/a&gt; defines kind &lt;code&gt;9&lt;/code&gt; as a lightweight chat message, a short text note meant for real-time conversation in chat contexts like &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-29/&#34;&gt;NIP-29&lt;/a&gt; group chats and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-53/&#34;&gt;NIP-53&lt;/a&gt; live activity streams. This PR adds a requirement that clients rendering &amp;#34;chat view&amp;#34; as a stream of ordered events MUST only fetch kind &lt;code&gt;9&lt;/code&gt; events, preventing missing context when other content types (kind &lt;code&gt;1&lt;/code&gt; notes, kind &lt;code&gt;30023&lt;/code&gt; articles) are mixed into the chat timeline. Other content types can still be quoted within a kind &lt;code&gt;9&lt;/code&gt; message following &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-18/&#34;&gt;NIP-18&lt;/a&gt; reposts. The motivation comes from a community discussion about kind &lt;code&gt;9&lt;/code&gt; messages appearing in general-purpose feeds where they lack context, since chat messages are typically short responses that only make sense within a conversation thread.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;nip-deep-dive-nip-29-relay-based-groups-2&#34;&gt;NIP Deep Dive: NIP-29 (Relay-based Groups)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/29.md&#34;&gt;NIP-29&lt;/a&gt; defines a model for group messaging where the relay itself manages group membership and moderation. Groups live on a specific relay, identified by a random string ID, and the relay enforces who can write to the group. This is a different architecture from &lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt; (client-side MLS encryption) or &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; group chats (gift-wrapped DMs): in NIP-29, the relay is the authority, the messages are readable by the relay operator, and moderation happens at the relay level.&lt;/p&gt;

&lt;p&gt;A group is identified by the format &lt;code&gt;&amp;lt;host&amp;gt;&amp;#39;&amp;lt;group-id&amp;gt;&lt;/code&gt;, for example &lt;code&gt;groups.nostr.com&amp;#39;abcdef&lt;/code&gt;. The special group ID &lt;code&gt;_&lt;/code&gt; is reserved as a top-level group for relay-wide discussion. All user events sent to a group carry an &lt;code&gt;h&lt;/code&gt; tag with the group ID:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;d7e3a4b9c1f2e8d6a5b4c3d2e1f09876d7e3a4b9c1f2e8d6a5b4c3d2e1f09876&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1744675200,
  &amp;#34;kind&amp;#34;: 9,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;h&amp;#34;, &amp;#34;abcdef&amp;#34;],
    [&amp;#34;previous&amp;#34;, &amp;#34;a1b2c3d4&amp;#34;, &amp;#34;e5f67890&amp;#34;, &amp;#34;12345678&amp;#34;]
  ],
  &amp;#34;content&amp;#34;: &amp;#34;Has anyone tested the new relay config?&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The &lt;code&gt;previous&lt;/code&gt; tag is a tamper-detection mechanism. Clients include the first 8 hex characters (4 bytes) of recent events they have seen from the same relay in the last 50 messages. Relays reject events containing &lt;code&gt;previous&lt;/code&gt; references to events not in their database, which prevents messages from being replayed to a forked copy of the group on another relay. This is not a full chain of custody, but it makes out-of-context rebroadcasting detectable.&lt;/p&gt;

&lt;p&gt;Group membership is managed through a set of moderation event kinds in the &lt;code&gt;9000-9020&lt;/code&gt; range. A user joins by publishing a kind &lt;code&gt;9021&lt;/code&gt; join request, which the relay accepts or rejects based on its policy:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;f1a2b3c4d5e6f7890123456789abcdef0123456789abcdef1234567890abcdef&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1744675200,
  &amp;#34;kind&amp;#34;: 9021,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;h&amp;#34;, &amp;#34;abcdef&amp;#34;],
    [&amp;#34;code&amp;#34;, &amp;#34;invite-xyz-123&amp;#34;]
  ],
  &amp;#34;content&amp;#34;: &amp;#34;I&amp;#39;d like to join the dev discussion group.&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The optional &lt;code&gt;code&lt;/code&gt; tag ties to invite codes created by admins via kind &lt;code&gt;9009&lt;/code&gt; events. A user leaves by publishing kind &lt;code&gt;9022&lt;/code&gt;, and the relay automatically issues a kind &lt;code&gt;9001&lt;/code&gt; removal in response. Admins can add users with roles (kind &lt;code&gt;9000&lt;/code&gt;), remove users (kind &lt;code&gt;9001&lt;/code&gt;), edit group metadata (kind &lt;code&gt;9002&lt;/code&gt;), and delete events (kind &lt;code&gt;9005&lt;/code&gt;). The roles system is flexible: roles are arbitrary labels, and what each role can do is relay policy, not protocol-defined. The relay publishes the group&amp;#39;s configuration as addressable events: kind &lt;code&gt;39000&lt;/code&gt; for metadata (name, description, picture, visibility settings), kind &lt;code&gt;39001&lt;/code&gt; for the admin list, kind &lt;code&gt;39002&lt;/code&gt; for the member list, and kind &lt;code&gt;39003&lt;/code&gt; for the roles and their capabilities.&lt;/p&gt;

&lt;p&gt;Groups can be public (anyone can read, only members can write), closed (only members can read and write), or fully open. The visibility and write-access settings are orthogonal and controlled by the &lt;code&gt;public&lt;/code&gt;, &lt;code&gt;open&lt;/code&gt;, &lt;code&gt;visible&lt;/code&gt;, and &lt;code&gt;unrestricted&lt;/code&gt; flags in the kind &lt;code&gt;9002&lt;/code&gt; metadata edit event. A relay can host many groups simultaneously, each with independent membership and moderation.&lt;/p&gt;

&lt;p&gt;The spec accepts any event kind inside a group, not just chat messages. Long-form articles (&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-23/&#34;&gt;NIP-23&lt;/a&gt;), calendar events (&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-52/&#34;&gt;NIP-52&lt;/a&gt;), live streams (&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-53/&#34;&gt;NIP-53&lt;/a&gt;), and market listings can all carry an &lt;code&gt;h&lt;/code&gt; tag and participate in a group context. This makes NIP-29 groups function like Discord servers or Slack workspaces where different content types coexist in the same namespace.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://gitea.coracle.social/coracle/flotilla&#34;&gt;Flotilla&lt;/a&gt; is the most actively developed NIP-29 client, with voice rooms, email login, and proof-of-work DMs added in &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-04-01-newsletter/#flotilla-v170-adds-voice-rooms-and-email-login&#34;&gt;v1.7.0&lt;/a&gt;. &lt;a href=&#34;https://github.com/coracle-social/coracle&#34;&gt;Coracle&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1jlrs53pkdfjnts29kveljul2sm0actt6n8dxrrzqcersttvcuv3qdjynqn&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;hodlbod&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1jlr…ynqn&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) supports NIP-29 groups as well. On the relay side, &lt;a href=&#34;https://github.com/fiatjaf/relay29&#34;&gt;groups.fiatjaf.com&lt;/a&gt; is a reference implementation by fiatjaf. &lt;a href=&#34;https://github.com/Nostrord/nostrord&#34;&gt;Nostrord&lt;/a&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1ktxukd7ny5e3ghqqcn6r6hs7rh4hceaua6n77cl4ym9ye2ufzces7rzc2h&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Nostrord&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1ktx…zc2h&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;, a Kotlin Multiplatform NIP-29 client funded by &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-04-08-newsletter/#opensats-announces-sixteenth-wave-of-nostr-grants&#34;&gt;OpenSats&lt;/a&gt;, is in early development with Discord-style moderation and threading.&lt;/p&gt;

&lt;p&gt;The tradeoff against encrypted alternatives like &lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt; is explicit. NIP-29 groups are readable by the relay operator. There is no end-to-end encryption, no forward secrecy, and no post-compromise security. The relay is a trusted party for content integrity and membership enforcement. What you get in return is simplicity: no key material to manage, no state synchronization across devices, no MLS handshake negotiation. A relay operator spins up a group, users join, and messages flow. For public communities, dev channels, and open discussion spaces, the relay-trust model matches the use case. For private messaging where the relay should not read content, NIP-17 or Marmot are the appropriate choices.&lt;/p&gt;

&lt;h2 id=&#34;nip-deep-dive-nip-90-data-vending-machines-2&#34;&gt;NIP Deep Dive: NIP-90 (Data Vending Machines)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/90.md&#34;&gt;NIP-90&lt;/a&gt; defines a protocol for on-demand computation over Nostr. A customer publishes a job request, service providers compete to fulfill it, and results are delivered as Nostr events. The spec describes this as &amp;#34;money in, data out,&amp;#34; and the design treats Nostr as a marketplace for data processing where customers care about the output, not who produces it.&lt;/p&gt;

&lt;p&gt;The protocol reserves kinds &lt;code&gt;5000-5999&lt;/code&gt; for job requests, &lt;code&gt;6000-6999&lt;/code&gt; for job results, and kind &lt;code&gt;7000&lt;/code&gt; for job feedback. A result kind is always 1000 higher than its request kind: a kind &lt;code&gt;5001&lt;/code&gt; request produces a kind &lt;code&gt;6001&lt;/code&gt; result. Here is a job request asking for text summarization:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;d7e3a4b9c1f2e8d6a5b4c3d2e1f09876d7e3a4b9c1f2e8d6a5b4c3d2e1f09876&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1744675200,
  &amp;#34;kind&amp;#34;: 5001,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;i&amp;#34;, &amp;#34; https://example.com/article.txt&amp;#34;, &amp;#34;url&amp;#34;],
    [&amp;#34;output&amp;#34;, &amp;#34;text/plain&amp;#34;],
    [&amp;#34;relays&amp;#34;, &amp;#34;wss://relay.damus.io&amp;#34;, &amp;#34;wss://nos.lol&amp;#34;],
    [&amp;#34;bid&amp;#34;, &amp;#34;5000&amp;#34;],
    [&amp;#34;param&amp;#34;, &amp;#34;lang&amp;#34;, &amp;#34;en&amp;#34;],
    [&amp;#34;param&amp;#34;, &amp;#34;max_tokens&amp;#34;, &amp;#34;280&amp;#34;]
  ],
  &amp;#34;content&amp;#34;: &amp;#34;&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The &lt;code&gt;i&lt;/code&gt; tag specifies input data with a type marker. Four input types are defined: &lt;code&gt;url&lt;/code&gt; (fetch and process the data at this URL), &lt;code&gt;event&lt;/code&gt; (use a Nostr event as input), &lt;code&gt;job&lt;/code&gt; (chain from the output of a previous job), and &lt;code&gt;text&lt;/code&gt; (inline text). The &lt;code&gt;bid&lt;/code&gt; tag sets a maximum payment in millisats. The &lt;code&gt;param&lt;/code&gt; tag carries job-type-specific parameters, and the &lt;code&gt;output&lt;/code&gt; tag specifies the expected response format.&lt;/p&gt;

&lt;p&gt;A service provider picks up the request and publishes a result:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1744675260,
  &amp;#34;kind&amp;#34;: 6001,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;request&amp;#34;, &amp;#34;{\&amp;#34;id\&amp;#34;:\&amp;#34;c3d4e5...\&amp;#34;,\&amp;#34;kind\&amp;#34;:5001,...}&amp;#34;],
    [&amp;#34;e&amp;#34;, &amp;#34;c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2&amp;#34;, &amp;#34;wss://relay.damus.io&amp;#34;],
    [&amp;#34;i&amp;#34;, &amp;#34; https://example.com/article.txt&amp;#34;, &amp;#34;url&amp;#34;],
    [&amp;#34;p&amp;#34;, &amp;#34;d7e3a4b9c1f2e8d6a5b4c3d2e1f09876d7e3a4b9c1f2e8d6a5b4c3d2e1f09876&amp;#34;],
    [&amp;#34;amount&amp;#34;, &amp;#34;5000&amp;#34;, &amp;#34;lnbc50n1pj...&amp;#34;]
  ],
  &amp;#34;content&amp;#34;: &amp;#34;The article discusses three protocol changes proposed for the next quarter...&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The result tags the original request event, includes the input for reference, addresses the customer&amp;#39;s pubkey, and optionally includes a Lightning invoice in the &lt;code&gt;amount&lt;/code&gt; tag. The customer can verify the result came from a specific service provider by checking the pubkey.&lt;/p&gt;

&lt;p&gt;Job feedback (kind &lt;code&gt;7000&lt;/code&gt;) provides status updates while a job is in progress. Service providers can emit feedback events with status values like &lt;code&gt;payment-required&lt;/code&gt; (send a Lightning invoice before processing), &lt;code&gt;processing&lt;/code&gt; (work is underway), &lt;code&gt;error&lt;/code&gt; (something went wrong), or &lt;code&gt;success&lt;/code&gt; (job complete). This gives customers real-time visibility into long-running jobs:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1744675230,
  &amp;#34;kind&amp;#34;: 7000,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;status&amp;#34;, &amp;#34;payment-required&amp;#34;],
    [&amp;#34;e&amp;#34;, &amp;#34;c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2&amp;#34;, &amp;#34;wss://relay.damus.io&amp;#34;],
    [&amp;#34;p&amp;#34;, &amp;#34;d7e3a4b9c1f2e8d6a5b4c3d2e1f09876d7e3a4b9c1f2e8d6a5b4c3d2e1f09876&amp;#34;],
    [&amp;#34;amount&amp;#34;, &amp;#34;5000&amp;#34;, &amp;#34;lnbc50n1pj...&amp;#34;]
  ],
  &amp;#34;content&amp;#34;: &amp;#34;&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Job chaining allows outputs to feed into subsequent jobs. A customer can set the input type to &lt;code&gt;job&lt;/code&gt; and reference a previous job&amp;#39;s event ID. The service provider for the downstream job waits for the upstream result, then processes it. This creates composable pipelines: transcribe audio (kind &lt;code&gt;5002&lt;/code&gt;), then summarize the transcript (kind &lt;code&gt;5001&lt;/code&gt;), then translate the summary (kind &lt;code&gt;5003&lt;/code&gt;). Each step can be fulfilled by a different service provider.&lt;/p&gt;

&lt;p&gt;For privacy, customers can encrypt the &lt;code&gt;i&lt;/code&gt; and &lt;code&gt;param&lt;/code&gt; tags using &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-04/&#34;&gt;NIP-04&lt;/a&gt; encryption with the service provider&amp;#39;s pubkey, placing the encrypted payload in the &lt;code&gt;content&lt;/code&gt; field and adding an &lt;code&gt;encrypted&lt;/code&gt; tag. This hides the input data and parameters from relays and other service providers, though it requires the customer to select a specific provider up front.&lt;/p&gt;

&lt;p&gt;Specific job request types are defined in a &lt;a href=&#34;https://github.com/nostr-protocol/data-vending-machines/tree/master/kinds&#34;&gt;separate repository&lt;/a&gt;. Current types include text generation (kind &lt;code&gt;5050&lt;/code&gt;), summarization (kind &lt;code&gt;5001&lt;/code&gt;), translation (kind &lt;code&gt;5002&lt;/code&gt;), speech-to-text (kind &lt;code&gt;5003&lt;/code&gt;), image generation (kind &lt;code&gt;5100&lt;/code&gt;), and content recommendation (kind &lt;code&gt;5300&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/v0l/snort&#34;&gt;Snort&lt;/a&gt; added kind &lt;code&gt;7000&lt;/code&gt; payment-required invoice display in &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-04-08-newsletter/#snort-ships-security-hardening-and-dvm-payment-invoices&#34;&gt;Newsletter #17&lt;/a&gt;, rendering Lightning invoices directly in the feed when a DVM responds with a payment requirement. &lt;a href=&#34;https://github.com/hzrd149/nostrudel&#34;&gt;noStrudel&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1ye5ptcxfyyxl5vjvdjar2ua3f0hynkjzpx552mu5snj3qmx5pzjscpknpr&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;hzrd149&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1ye5…knpr&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) has a DVM explorer for browsing available service providers. On the provider side, projects like &lt;a href=&#34;https://github.com/dtdannen/dvmdash&#34;&gt;DVMDash&lt;/a&gt; track DVM activity across the network, and several AI-focused services offer text generation, image creation, and content moderation through the NIP-90 protocol. The &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-89/&#34;&gt;NIP-89&lt;/a&gt; (Recommended Application Handlers) spec complements NIP-90 by letting service providers publish their capabilities as discoverable Nostr events.&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;That&amp;#39;s it for this week. Building something or have news to share? DM us on Nostr or find us at &lt;a href=&#34;https://nostrcompass.org&#34;&gt;nostrcompass.org&lt;/a&gt;.&lt;/p&gt;
 &lt;/blockquote&gt;
    </content>
    <updated>2026-04-15T16:44:10Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsy0vmfdj3pl6y2rgxny9msglt672ck3ra097n25dn8y0zkmd5qkhczypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq7aukw2</id>
    
      <title type="html">Nostr Compass #17 is out. Amethyst ships Arti Tor in v1.08.0 and ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsy0vmfdj3pl6y2rgxny9msglt672ck3ra097n25dn8y0zkmd5qkhczypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq7aukw2" />
    <content type="html">
      Nostr Compass #17 is out.&lt;br/&gt;&lt;br/&gt;Amethyst ships Arti Tor in v1.08.0 and writes a full Kotlin implementation of MLS and Marmot in its Quartz library, removing all native C/Rust dependencies and opening the door to iOS via Kotlin Multiplatform. Nymchat reverts from Marmot to enhanced NIP-17 with rotating ephemeral keys after multi-device sync issues. Titan v0.1.0 launches a native nsite:// browser resolving human-readable names via Bitcoin, Nostr relays, and Blossom servers. Nostr VPN ships exit node support across six releases. Snort ships a security audit with NIP-46 relay forgery protection. Primal Android adds wallet multi-account sharing. Bikel v1.5.0 adds native foreground service for de-Googled phones. Sprout (Block) adds NIP-01, NIP-23, and NIP-33 support.&lt;br/&gt;&lt;br/&gt;OpenSats announces 16th wave of Nostr grants: Amethyst Desktop, Nostr Mail, Nostrord, and Nurunuru.&lt;br/&gt;&lt;br/&gt;Protocol: NIP-58 badge kind migration and NIP-34 follow lists merged. NIP-AC (P2P calls), NIP-340 (FROST threshold signing), NIP-5D (web applets), NIP-5C (WASM scrolls) proposed.&lt;br/&gt;&lt;br/&gt;NIP deep dives: NIP-17 (Private DMs) and NIP-46 (Remote Signing). 30&#43; projects covered. &lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/naddr1qqgrsvrrvd3nzcf5xa3rxen9x5enjq3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqp65wuregv2&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;naddr1qq…egv2&lt;/a&gt;&lt;/span&gt; &lt;/div&gt; &lt;p&gt;Welcome back to Nostr Compass, your weekly guide to Nostr.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This week:&lt;/strong&gt; &lt;a href=&#34;https://github.com/vitorpamplona/amethyst&#34;&gt;Amethyst&lt;/a&gt; ships &lt;a href=&#34;#amethyst-ships-arti-tor-merges-pure-kotlin-mls-and-marmot&#34;&gt;v1.08.0&lt;/a&gt; with Arti Tor integration and a redesigned Shorts UI, while merging pure Kotlin implementations of &lt;a href=&#34;https://nostrcompass.org/en/topics/mls/&#34;&gt;MLS&lt;/a&gt; and &lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt; into its &lt;a href=&#34;https://nostrcompass.org/en/topics/quartz/&#34;&gt;Quartz&lt;/a&gt; library. &lt;a href=&#34;https://github.com/nostur-com/nostur-ios-public&#34;&gt;Nostur&lt;/a&gt; ships &lt;a href=&#34;#nostur-v1270-adds-video-recording-and-private-replies&#34;&gt;v1.27.0&lt;/a&gt; with video recording, animated GIF profiles, and private replies. &lt;a href=&#34;https://github.com/r0d8lsh0p/shosho-releases&#34;&gt;Shosho&lt;/a&gt; launches &lt;a href=&#34;#shosho-v0150-launches-shows-and-vertical-video-carousel&#34;&gt;v0.15.0&lt;/a&gt; with Shows (custom live stream info connected to OBS) and a TikTok-style vertical video carousel. &lt;a href=&#34;https://github.com/Spl0itable/NYM&#34;&gt;Nymchat&lt;/a&gt; &lt;a href=&#34;#nymchat-reverts-marmot-ships-enhanced-nip-17-group-chats&#34;&gt;reverts Marmot and ships enhanced NIP-17 group chats&lt;/a&gt; with rotating ephemeral keys. &lt;a href=&#34;https://github.com/mmalmi/nostr-vpn&#34;&gt;Nostr VPN&lt;/a&gt; ships &lt;a href=&#34;#nostr-vpn-ships-exit-node-support-and-umbrel-packaging&#34;&gt;exit node support and Umbrel packaging&lt;/a&gt; across six releases. &lt;a href=&#34;https://github.com/greenart7c3/Amber&#34;&gt;Amber&lt;/a&gt; jumps to &lt;a href=&#34;#amber-v600-pre1-adds-per-connection-nip-46-signing-keys&#34;&gt;v6.0.0-pre1&lt;/a&gt; with per-connection &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; signing keys and Zapstore in-app updates. &lt;a href=&#34;https://github.com/damus-io/notedeck&#34;&gt;Notedeck&lt;/a&gt; reaches &lt;a href=&#34;#notedeck-v0100-beta-ships-zapstore-self-update&#34;&gt;v0.10.0-beta&lt;/a&gt; with APK self-update via Zapstore, and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-58/&#34;&gt;NIP-58&lt;/a&gt; (Badges) gets a &lt;a href=&#34;#nip-updates&#34;&gt;kind migration&lt;/a&gt;. Two NIP deep dives cover &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; (Private Direct Messages) and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; (Nostr Remote Signing).&lt;/p&gt;

&lt;h2 id=&#34;top-stories-20&#34;&gt;Top Stories&lt;/h2&gt;

&lt;h3 id=&#34;nostr-npub142gywvjkq0dv6nupggyn2euhx4nduwc7yz5f24ah9rpmunr2s39se3xrj0-ships-arti-tor-merges-pure-kotlin-mls-and-marmot-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub142gywvjkq0dv6nupggyn2euhx4nduwc7yz5f24ah9rpmunr2s39se3xrj0&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;amethyst&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub142g…xrj0&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; ships Arti Tor, merges pure Kotlin MLS and Marmot&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/vitorpamplona/amethyst&#34;&gt;Amethyst&lt;/a&gt;, the Android client maintained by vitorpamplona, shipped four releases from &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/releases/tag/v1.07.3&#34;&gt;v1.07.3&lt;/a&gt; through &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/releases/tag/v1.08.0&#34;&gt;v1.08.0&lt;/a&gt; and merged a large batch of unreleased work into its &lt;a href=&#34;https://nostrcompass.org/en/topics/quartz/&#34;&gt;Quartz&lt;/a&gt; library (the shared Kotlin Multiplatform Nostr module). The headline release is v1.08.0 &amp;#34;Arti Tor,&amp;#34; which migrates the app&amp;#39;s Tor connectivity from the C-based Tor library to &lt;a href=&#34;https://gitlab.torproject.org/tpo/core/arti&#34;&gt;Arti&lt;/a&gt;, the Tor Project&amp;#39;s Rust implementation. The migration addresses random crashes that occurred under the previous C Tor bindings. Arti is the Tor Project&amp;#39;s long-term replacement for the C codebase, written from scratch in Rust for memory safety and async I/O.&lt;/p&gt;

&lt;p&gt;The v1.07.3 release redesigned the Shorts UI, replacing the paged design with edge-to-edge feeds for pictures, shorts, and long videos. The same release migrated badges to kind &lt;code&gt;10008&lt;/code&gt; and bookmarks to kind &lt;code&gt;10003&lt;/code&gt;, aligning with the &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-58/&#34;&gt;NIP-58&lt;/a&gt; kind migration &lt;a href=&#34;#nip-updates&#34;&gt;merged this week&lt;/a&gt;. v1.07.4 fixed a Nostr Wallet Connect secret handling issue, and v1.07.5 fixed an image upload crash.&lt;/p&gt;

&lt;p&gt;On main but not yet in a tagged release, the team wrote a full Kotlin implementation of both &lt;a href=&#34;https://nostrcompass.org/en/topics/mls/&#34;&gt;MLS&lt;/a&gt; and the &lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt; protocol, replacing the need for native C/Rust library bindings. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2147&#34;&gt;PR #2147&lt;/a&gt; adds the core Marmot MLS group messaging layer, &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2149&#34;&gt;PR #2149&lt;/a&gt; adds the group chat UI, &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2146&#34;&gt;PR #2146&lt;/a&gt; adds inbound and outbound message processors with a subscription manager, &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2141&#34;&gt;PR #2141&lt;/a&gt; adds MLS group state persistence and KeyPackage rotation management, &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2150&#34;&gt;PR #2150&lt;/a&gt; adds a full MLS test suite with improved GroupInfo signing, and &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2158&#34;&gt;PR #2158&lt;/a&gt; adds KeyPackage publication status tracking. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2166&#34;&gt;PR #2166&lt;/a&gt; adds a pure Kotlin secp256k1 implementation for Nostr cryptographic operations, replacing the native C library dependency. Combined with the Kotlin MLS implementation, &lt;a href=&#34;https://nostrcompass.org/en/topics/quartz/&#34;&gt;Quartz&lt;/a&gt; can run Nostr signing and Marmot group messaging without any native bindings, which opens the door to Kotlin Multiplatform targets including iOS.&lt;/p&gt;

&lt;p&gt;The team is also building &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-ac/&#34;&gt;NIP-AC&lt;/a&gt; (P2P Voice and Video Calls) support: &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2143&#34;&gt;PR #2143&lt;/a&gt; adds a full test suite for the NIP-AC call state machine, and &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2164&#34;&gt;PR #2164&lt;/a&gt; prevents stale call offers from retriggering after app restart.&lt;/p&gt;

&lt;h3 id=&#34;nostr-npub1n0stur7q092gyverzc2wfc00e8egkrdnnqq3alhv7p072u89m5es5mk6h0-v1-27-0-adds-video-recording-and-private-replies-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1n0stur7q092gyverzc2wfc00e8egkrdnnqq3alhv7p072u89m5es5mk6h0&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Nostur&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1n0s…k6h0&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; v1.27.0 adds video recording and private replies&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostur-com/nostur-ios-public&#34;&gt;Nostur&lt;/a&gt;, the iOS Nostr client, shipped &lt;a href=&#34;https://github.com/nostur-com/nostur-ios-public/releases/tag/v1.27.0&#34;&gt;v1.27.0&lt;/a&gt; on April 2. The release adds in-app video recording with trim-before-upload, so users can capture short clips, cut them to length, and publish without leaving the client. Animated GIF support extends to profile and banner photos, with animated WebP rendering added as well. A new Shortcuts integration lets users send Nostr posts from Apple Shortcuts automations. The release also adds private replies and fixes DM compatibility issues that affected message delivery between Nostur and other clients.&lt;/p&gt;

&lt;h3 id=&#34;nostr-npub1sh0spghk4yvy2d2v35kelw45qq4msk6zykaw4ds047e9slzs8r4qr7q2xa-v0-15-0-launches-shows-and-vertical-video-carousel-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1sh0spghk4yvy2d2v35kelw45qq4msk6zykaw4ds047e9slzs8r4qr7q2xa&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Shosho – Live Stream on Nostr&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1sh0…q2xa&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; v0.15.0 launches Shows and vertical video carousel&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/r0d8lsh0p/shosho-releases&#34;&gt;Shosho&lt;/a&gt;, the Nostr live streaming app, shipped &lt;a href=&#34;https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v0.15.0&#34;&gt;v0.15.0&lt;/a&gt; and &lt;a href=&#34;https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v0.15.1&#34;&gt;v0.15.1&lt;/a&gt; on April 7. The headline feature is Shows: streamers can set up custom show info before going live and connect their show to OBS or any external encoder. This separates the &amp;#34;what am I streaming&amp;#34; metadata from the act of going live, so streamers can prepare titles, descriptions, and products before they start broadcasting. The same release adds a TikTok-style vertical video carousel for swiping through lives, clips, and replays in a full-screen feed, and Quick Add for publishing video clips and adding products directly from a profile page. v0.15.1 fixes a bug where the keyboard was hiding the live stream chat input.&lt;/p&gt;

&lt;h2 id=&#34;shipping-this-week-14&#34;&gt;Shipping This Week&lt;/h2&gt;

&lt;h3 id=&#34;nostr-npub18m76awca3y37hkvuneavuw6pjj4525fw90necxmadrvjg0sdy6qsngq955-v0-10-0-beta-ships-zapstore-self-update-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub18m76awca3y37hkvuneavuw6pjj4525fw90necxmadrvjg0sdy6qsngq955&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;damus&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub18m7…q955&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; v0.10.0-beta ships Zapstore self-update&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/damus-io/notedeck&#34;&gt;Notedeck&lt;/a&gt;, the desktop and mobile client from the Damus team, shipped &lt;a href=&#34;https://github.com/damus-io/notedeck/releases/tag/v0.10.0-beta.1&#34;&gt;v0.10.0-beta.1&lt;/a&gt; and &lt;a href=&#34;https://github.com/damus-io/notedeck/releases/tag/v0.10.0-beta.2&#34;&gt;v0.10.0-beta.2&lt;/a&gt; as test prereleases for APK self-update. &lt;a href=&#34;https://github.com/damus-io/notedeck/pull/1417&#34;&gt;PR #1417&lt;/a&gt; adds APK self-update via the Nostr/Zapstore updater on Android, building on the &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-03-18-newsletter/#notedeck-moves-release-discovery-onto-nostr&#34;&gt;Nostr-native update discovery work from Newsletter #14&lt;/a&gt;. The update flow discovers new releases through Nostr events published to relays, then downloads the APK from wherever the developer hosts it (GitHub releases, Blossom CDN, or other sources), verifies the SHA-256 hash against the signed Nostr event, and installs it. &lt;a href=&#34;https://github.com/damus-io/notedeck/pull/1438&#34;&gt;PR #1438&lt;/a&gt; fixes a welcome screen bug where Login and CreateAccount buttons immediately navigated back, and &lt;a href=&#34;https://github.com/damus-io/notedeck/pull/1424&#34;&gt;PR #1424&lt;/a&gt; fixes text overflow in the Agentium AI session view.&lt;/p&gt;

&lt;h3 id=&#34;amber-nostr-npub1w4uswmv6lu9yel005l3qgheysmr7tk9uvwluddznju3nuxalevvs2d0jr5-v6-0-0-pre1-adds-per-connection-nip-46-signing-keys-2&#34;&gt;Amber (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1w4uswmv6lu9yel005l3qgheysmr7tk9uvwluddznju3nuxalevvs2d0jr5&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;greenart7c3&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1w4u…0jr5&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) v6.0.0-pre1 adds per-connection NIP-46 signing keys&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/greenart7c3/Amber&#34;&gt;Amber&lt;/a&gt;, the &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-55/&#34;&gt;NIP-55&lt;/a&gt; (Android Signer Application) signer app, shipped &lt;a href=&#34;https://github.com/greenart7c3/Amber/releases/tag/v6.0.0-pre1&#34;&gt;v6.0.0-pre1&lt;/a&gt; on April 4. The most important change is per-connection signing keys for the &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; (Nostr Remote Signing) bunker protocol. Instead of using a single keypair for all bunker connections, Amber now generates a distinct key for each connected client. If one client connection is compromised, the attacker cannot impersonate the signer to other clients.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/greenart7c3/Amber/pull/377&#34;&gt;PR #377&lt;/a&gt; adds in-app update checking and installation via Zapstore, joining &lt;a href=&#34;#notedeck-v0100-beta-ships-zapstore-self-update&#34;&gt;Notedeck&lt;/a&gt; in adopting Nostr-native app distribution. &lt;a href=&#34;https://github.com/greenart7c3/Amber/pull/375&#34;&gt;PR #375&lt;/a&gt; handles AndroidKeyStore failures gracefully by displaying a warning to users instead of crashing, and &lt;a href=&#34;https://github.com/greenart7c3/Amber/pull/371&#34;&gt;PR #371&lt;/a&gt; adds database cleanup with size limits and content truncation to prevent unbounded storage growth. The pre-release also carries the &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-42/&#34;&gt;NIP-42&lt;/a&gt; relay auth whitelist and mnemonic recovery phrase login from the &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-04-01-newsletter/#amber-v502-through-v504&#34;&gt;v5.0.x cycle covered last week&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&#34;nostria-nostr-npub1zl3g38a6qypp6py2z07shggg45cu8qex992xpss7d8zrl28mu52s4cjajh-ships-native-mobile-app-2&#34;&gt;Nostria (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1zl3g38a6qypp6py2z07shggg45cu8qex992xpss7d8zrl28mu52s4cjajh&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;sondreb&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1zl3…jajh&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) ships native mobile app&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostria-app/nostria&#34;&gt;Nostria&lt;/a&gt;, the cross-platform Nostr client maintained by SondreB, released a native mobile app for Android with eight releases from &lt;a href=&#34;https://github.com/nostria-app/nostria/releases/tag/v3.1.11&#34;&gt;v3.1.11&lt;/a&gt; through &lt;a href=&#34;https://github.com/nostria-app/nostria/releases/tag/v3.1.18&#34;&gt;v3.1.18&lt;/a&gt;. The most important new capability is native local signer support for signers such as &lt;a href=&#34;https://github.com/greenart7c3/Amber&#34;&gt;Amber&lt;/a&gt; and Aegis. &lt;a href=&#34;https://www.nostria.app/download&#34;&gt;Desktop installers&lt;/a&gt; for Linux, macOS, and Windows are also available. &lt;a href=&#34;https://github.com/nostria-app/nostria/pull/610&#34;&gt;PR #610&lt;/a&gt; reduces feed memory pressure with adaptive runtime limits and preview URL cleanup. v3.1.14 fixes integration with Brainstorm, a &lt;a href=&#34;https://nostrcompass.org/en/topics/web-of-trust/&#34;&gt;Web of Trust&lt;/a&gt; provider. v3.1.15 focuses on music improvements. The new Android app is available on &lt;a href=&#34;https://zapstore.dev/apps/app.nostria&#34;&gt;Zapstore&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&#34;divine-nostr-npub1wmr34t36fy03m8hvgl96zl3znndyzyaqhwmwdtshwmtkg03fetaqhjg240-1-0-8-ships-resumable-uploads-and-dms-2&#34;&gt;diVine (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1wmr34t36fy03m8hvgl96zl3znndyzyaqhwmwdtshwmtkg03fetaqhjg240&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;rabble&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1wmr…g240&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) 1.0.8 ships resumable uploads and DMs&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/divinevideo/divine-mobile&#34;&gt;diVine&lt;/a&gt;, the short-form video client, shipped &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/releases/tag/1.0.8&#34;&gt;1.0.8&lt;/a&gt; with 87 merged PRs. Resumable uploads let creators pick up interrupted uploads chunk by chunk instead of restarting from scratch on a flaky connection. The release adds video quality and bitrate settings, double-tap to like, and DM improvements. &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/2722&#34;&gt;PR #2722&lt;/a&gt; adds a macOS camera plugin for desktop video capture, and &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/2820&#34;&gt;PR #2820&lt;/a&gt; migrates the notification system to a BLoC architecture with enrichment and grouping. The team also replaced AI-generated stickers and category art with OpenMoji SVGs (&lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/2844&#34;&gt;PR #2844&lt;/a&gt;, &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/2842&#34;&gt;PR #2842&lt;/a&gt;).&lt;/p&gt;

&lt;h3 id=&#34;manent-v1-3-0-adds-sensitive-note-blurring-and-nip-42-auth-2&#34;&gt;Manent v1.3.0 adds sensitive note blurring and NIP-42 auth&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/dtonon/manent&#34;&gt;Manent&lt;/a&gt;, the private encrypted notes and file storage app, shipped &lt;a href=&#34;https://github.com/dtonon/manent/releases/tag/v1.3.0&#34;&gt;v1.3.0&lt;/a&gt; on April 2. Users can now mark notes as sensitive to blur them in the list view, keeping private content hidden during casual scrolling. The release also adds &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-42/&#34;&gt;NIP-42&lt;/a&gt; (Authentication of Clients to Relays) support, letting Manent authenticate to relays that require it before accepting events. Manent stores all data encrypted on Nostr relays using the user&amp;#39;s keypair, so NIP-42 support expands the set of relays it can use for storage.&lt;/p&gt;

&lt;h3 id=&#34;wisp-nostr-npub1utx00neqgqln72j22kej3ux7803c2k986henvvha4thuwfkper4s7r50e8-v0-17-0-through-v0-17-3-add-live-stream-zaps-and-wallet-backup-2&#34;&gt;Wisp (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1utx00neqgqln72j22kej3ux7803c2k986henvvha4thuwfkper4s7r50e8&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;utxo the webmaster 🧑‍💻&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1utx…50e8&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) v0.17.0 through v0.17.3 add live stream zaps and wallet backup&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/barrydeen/wisp&#34;&gt;Wisp&lt;/a&gt;, the Android Nostr client, shipped six releases from &lt;a href=&#34;https://github.com/barrydeen/wisp/releases/tag/v0.16.2-beta&#34;&gt;v0.16.2-beta&lt;/a&gt; through &lt;a href=&#34;https://github.com/barrydeen/wisp/releases/tag/v0.17.3-beta&#34;&gt;v0.17.3-beta&lt;/a&gt; with 44 merged PRs. The v0.17.0 release adds wallet backup safety prompts and zap UX improvements. &lt;a href=&#34;https://github.com/barrydeen/wisp/releases/tag/v0.17.1-beta&#34;&gt;v0.17.1&lt;/a&gt; adds live stream chat visibility across platforms and live stream zap functionality. &lt;a href=&#34;https://github.com/barrydeen/wisp/pull/423&#34;&gt;PR #423&lt;/a&gt; adds auto-search profiles, a zap success animation, and user status improvements. &lt;a href=&#34;https://github.com/barrydeen/wisp/pull/426&#34;&gt;PR #426&lt;/a&gt; fixes an out-of-memory crash in &lt;code&gt;computeId&lt;/code&gt; for events with large tag lists. The v0.16.x releases added emoji shortcode autocomplete, group chat UI improvements, and blocked user filtering across all notification paths.&lt;/p&gt;

&lt;h3 id=&#34;nostr-npub1m0str0d7z2ww8rdh20t2n9lx520xjwhaq24p68umqp06wwrwtsnqen40un-ships-deep-links-nostr-exchange-rates-and-a-duplicate-payment-fix-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1m0str0d7z2ww8rdh20t2n9lx520xjwhaq24p68umqp06wwrwtsnqen40un&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Mostro&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1m0s…40un&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; ships deep links, Nostr exchange rates, and a duplicate payment fix&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/MostroP2P/mostro&#34;&gt;Mostro&lt;/a&gt;, the peer-to-peer Bitcoin exchange built on Nostr, saw updates across both its server daemon and mobile client this week. On the server side, &lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/692&#34;&gt;PR #692&lt;/a&gt; prevents stale order writes from causing duplicate payments, a bug that could result in a seller being paid twice for the same trade. &lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/693&#34;&gt;PR #693&lt;/a&gt; uses targeted updates for dev_fee writes instead of full order overwrites.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/MostroP2P/mobile&#34;&gt;Mostro Mobile&lt;/a&gt;, the Flutter client, shipped &lt;a href=&#34;https://github.com/MostroP2P/mobile/releases/tag/v1.2.3&#34;&gt;v1.2.3&lt;/a&gt; on April 3. The release handles deep links from different Mostro instances, so users can tap links that route to the correct exchange server. &lt;a href=&#34;https://github.com/MostroP2P/mobile/pull/498&#34;&gt;PR #498&lt;/a&gt; detects admin and dispute DMs in the background notification pipeline, and the app now fetches exchange rates from Nostr with an HTTP/cache fallback. &lt;a href=&#34;https://github.com/MostroP2P/mobile/pull/560&#34;&gt;PR #560&lt;/a&gt; fixes a relay connection blocking bug that prevented the app from reaching relays under certain network conditions.&lt;/p&gt;

&lt;h3 id=&#34;unfiltered-v1-0-12-adds-hashtags-and-comments-2&#34;&gt;Unfiltered v1.0.12 adds hashtags and comments&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/dmcarrington/unfiltered&#34;&gt;Unfiltered&lt;/a&gt;, a Nostr client focused on image-forward content, shipped &lt;a href=&#34;https://github.com/dmcarrington/unfiltered/releases/tag/v1.0.12&#34;&gt;v1.0.12&lt;/a&gt;. &lt;a href=&#34;https://github.com/dmcarrington/unfiltered/pull/69&#34;&gt;PR #69&lt;/a&gt; adds hashtag support and &lt;a href=&#34;https://github.com/dmcarrington/unfiltered/pull/72&#34;&gt;PR #72&lt;/a&gt; adds the ability to write and display comments on posts. &lt;a href=&#34;https://github.com/dmcarrington/unfiltered/pull/71&#34;&gt;PR #71&lt;/a&gt; fixes navigation issues with multiple images per post.&lt;/p&gt;

&lt;h3 id=&#34;nostr-npub12vkcxr0luzwp8e673v29eqjhrr7p9vqq8asav85swaepclllj09sylpugg-android-ships-wallet-multi-account-sharing-and-remote-signer-auto-reconnect-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub12vkcxr0luzwp8e673v29eqjhrr7p9vqq8asav85swaepclllj09sylpugg&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;primal&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub12vk…pugg&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; Android ships wallet multi-account sharing and remote signer auto-reconnect&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app&#34;&gt;Primal&lt;/a&gt;, the Android Nostr client, shipped a release on April 7. The update adds wallet multi-account sharing and overflow menu with wallet deletion in Dev Tools. The remote signer now auto-reconnects on connection drops, and the wallet service gained its own auto-reconnect logic. Fixes include poll zap votes no longer appearing as Top Zaps, empty poll option crash prevention, wallet balance hiding when no wallet exists, and WalletException type mapping to error codes in NWC responses.&lt;/p&gt;

&lt;h3 id=&#34;titan-v0-1-0-launches-native-nsite-browser-with-bitcoin-name-registration-2&#34;&gt;Titan v0.1.0 launches native nsite:// browser with Bitcoin name registration&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/btcjt/titan&#34;&gt;Titan&lt;/a&gt;, a native desktop browser for the Nostr web, shipped &lt;a href=&#34;https://github.com/btcjt/titan/releases/tag/v0.1.0&#34;&gt;v0.1.0&lt;/a&gt; on April 7. Titan resolves &lt;code&gt;nsite://&lt;/code&gt; URLs by looking up human-readable names registered on Bitcoin, querying Nostr relays for the site&amp;#39;s content events, and rendering pages fetched from &lt;a href=&#34;https://nostrcompass.org/en/topics/blossom/&#34;&gt;Blossom&lt;/a&gt; servers. The result is a web browsing experience with no DNS, no TLS certificates, and no hosting providers. Names are registered through a &lt;a href=&#34;https://npub1hmq6xuqnplk5lw0h3700cujmx5gymqn5wrn42u6432r6ntzumezqc3marw.nsite.lol/register&#34;&gt;web interface&lt;/a&gt; tied to Bitcoin transactions. The initial release ships as a macOS &lt;code&gt;.dmg&lt;/code&gt; (ARM, with Rosetta 2 support for Intel) and includes Nix development environment support.&lt;/p&gt;

&lt;h3 id=&#34;bikel-nostr-npub1jdn6j50nukyq82ug6vzn5xmmr0j98xkaemz4tdsulgvutu3e06psp3t054-v1-5-0-ships-native-foreground-service-for-de-googled-phones-2&#34;&gt;Bikel (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1jdn6j50nukyq82ug6vzn5xmmr0j98xkaemz4tdsulgvutu3e06psp3t054&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;mnpezz&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1jdn…t054&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) v1.5.0 ships native foreground service for de-Googled phones&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/Mnpezz/bikel&#34;&gt;Bikel&lt;/a&gt;, a decentralized cycling tracker that turns rides into public infrastructure data using Nostr, shipped &lt;a href=&#34;https://github.com/Mnpezz/bikel/releases/tag/v1.5.0&#34;&gt;v1.5.0&lt;/a&gt; on April 4. The release migrates from GMS-dependent Expo TaskManager to a custom native foreground service, ensuring reliable background ride tracking on LineageOS, GrapheneOS, and other de-Googled Android variants. The Bikel Bot gained dual-pocket architecture with autonomous eCash collection via Cashu nutzaps. v1.4.3 and v1.4.2 fix background tracking sync for non-standard Android environments, and the app adds OSM bike rack map point toggles.&lt;/p&gt;

&lt;h3 id=&#34;sprout-nostr-npub16l0ck0s5zened29dsaqtqm6z0t4fmk2mwtszw64fz7fppcnls8mss3yj9s-adds-nip-01-nip-23-and-nip-33-support-2&#34;&gt;Sprout (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub16l0ck0s5zened29dsaqtqm6z0t4fmk2mwtszw64fz7fppcnls8mss3yj9s&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;block-opensource&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub16l0…yj9s&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) adds NIP-01, NIP-23, and NIP-33 support&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/block/sprout&#34;&gt;Sprout&lt;/a&gt;, a communication platform by Block with a built-in Nostr relay, shipped &lt;a href=&#34;https://github.com/block/sprout/releases/tag/desktop/v0.1.0-rc7&#34;&gt;desktop/v0.1.0-rc7&lt;/a&gt; on April 6. This week the team added support for &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-23/&#34;&gt;NIP-23&lt;/a&gt; (Long-form Content) kind &lt;code&gt;30023&lt;/code&gt; articles, &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-33/&#34;&gt;NIP-33&lt;/a&gt; parameterized replaceable events with &lt;code&gt;d&lt;/code&gt;-tag keyed replacement, and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-01/&#34;&gt;NIP-01&lt;/a&gt;/&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-02/&#34;&gt;NIP-02&lt;/a&gt; kind &lt;code&gt;1&lt;/code&gt; text notes and kind &lt;code&gt;3&lt;/code&gt; follow lists. The release also adds an adaptive IDE theme system with 54 themes, workflow and agent run history UX polish, and a members sidebar cleanup.&lt;/p&gt;

&lt;h3 id=&#34;mesh-llm-v0-56-0-ships-distributed-config-protocol-2&#34;&gt;mesh-llm v0.56.0 ships distributed config protocol&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/michaelneale/mesh-llm&#34;&gt;mesh-llm&lt;/a&gt;, a distributed LLM inference system that uses Nostr keypairs for node identity, shipped &lt;a href=&#34;https://github.com/michaelneale/mesh-llm/releases/tag/v0.56.0&#34;&gt;v0.56.0&lt;/a&gt; on April 7. The release adds a distributed config protocol with ownership semantics, asymmetric KV cache quantization (Q8_0 keys with Q4 values) for reduced memory usage, OS keychain storage for identity keystores, smooth chat streaming with message queuing, and fixes for fullscreen layout and KV cache splitting with flash attention.&lt;/p&gt;

&lt;h3 id=&#34;nostr-vpn-nostr-npub1klgggm0e8jmjzde5sswx0ger4fzmkfjqy9erdsq79fqsz80kzlzsz9ky7h-ships-exit-node-support-and-umbrel-packaging-2&#34;&gt;Nostr VPN (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1klgggm0e8jmjzde5sswx0ger4fzmkfjqy9erdsq79fqsz80kzlzsz9ky7h&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;npub1klgggm0e8jmjzde5sswx0ger4fzmkfjqy9erdsq79fqsz80kzlzsz9ky7h&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1klg…ky7h&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) ships exit node support and Umbrel packaging&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/mmalmi/nostr-vpn&#34;&gt;Nostr VPN&lt;/a&gt;, a peer-to-peer VPN that uses Nostr relays for signaling and WireGuard for encrypted tunnels, shipped six releases from &lt;a href=&#34;https://github.com/mmalmi/nostr-vpn/releases/tag/v0.3.0&#34;&gt;v0.3.0&lt;/a&gt; through &lt;a href=&#34;https://github.com/mmalmi/nostr-vpn/releases/tag/v0.3.6&#34;&gt;v0.3.6&lt;/a&gt; this week. The v0.3.x cycle adds exit node support on Windows and macOS, letting peers route internet traffic through other nodes in the network. Invite and alias propagation now sync over Nostr, so users can share network access without out-of-band coordination. The releases add Umbrel packaging for self-hosted deployment, NAT punch-through using remembered public endpoints, automatic stale exit node cleanup, and a published protocol specification. The project also stabilized macOS route handling with self-healing default routes and underlay repair, and added an Android build via Tauri. Builds are available for macOS (Apple Silicon and Intel), Linux (AppImage and .deb), Windows, and Android.&lt;/p&gt;

&lt;h3 id=&#34;nostr-npub16jdfqgazrkapk0yrqm9rdxlnys7ck39c7zmdzxtxqlmmpxg04r0sd733sv-reverts-marmot-ships-enhanced-nip-17-group-chats-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub16jdfqgazrkapk0yrqm9rdxlnys7ck39c7zmdzxtxqlmmpxg04r0sd733sv&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Luxas&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub16jd…33sv&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; reverts Marmot, ships enhanced NIP-17 group chats&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/Spl0itable/NYM&#34;&gt;Nymchat&lt;/a&gt;, the MLS-capable chat client, shipped 14 releases from &lt;a href=&#34;https://github.com/Spl0itable/NYM/releases/tag/3.56.261&#34;&gt;v3.56.261&lt;/a&gt; through &lt;a href=&#34;https://github.com/Spl0itable/NYM/releases/tag/v3.58.274&#34;&gt;v3.58.274&lt;/a&gt;. The most significant change is a protocol pivot: &lt;a href=&#34;https://github.com/Spl0itable/NYM/releases/tag/v3.57.261&#34;&gt;v3.57.261&lt;/a&gt; added Marmot MLS group chats, but &lt;a href=&#34;https://github.com/Spl0itable/NYM/releases/tag/v3.58.268&#34;&gt;v3.58.268&lt;/a&gt; reverted back to &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; because Marmot&amp;#39;s multi-device support is not yet finished, which caused issues with group chat state synchronization across devices. v3.58.271 introduces enhanced NIP-17 group chats with rotating ephemeral keys for all messages, designed to prevent timing and correlation attacks. The week also brought a friend system with granular control over settings (&lt;a href=&#34;https://github.com/Spl0itable/NYM/releases/tag/v3.58.262&#34;&gt;v3.58.262&lt;/a&gt;), MLS group chat message sync in encrypted app settings, and multiple relay connectivity fixes.&lt;/p&gt;

&lt;h3 id=&#34;nak-nostr-npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6-v0-19-5-adds-blossom-multi-server-and-outbox-publishing-2&#34;&gt;nak (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;fiatjaf&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub180c…h6w6&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) v0.19.5 adds Blossom multi-server and outbox publishing&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/fiatjaf/nak&#34;&gt;nak&lt;/a&gt;, fiatjaf&amp;#39;s command-line Nostr toolkit, shipped &lt;a href=&#34;https://github.com/fiatjaf/nak/releases/tag/v0.19.5&#34;&gt;v0.19.5&lt;/a&gt;. The &lt;code&gt;blossom&lt;/code&gt; command now accepts multiple &lt;code&gt;--server&lt;/code&gt; flags for uploading to several &lt;a href=&#34;https://nostrcompass.org/en/topics/blossom/&#34;&gt;Blossom&lt;/a&gt; servers in one call. A new &lt;code&gt;key&lt;/code&gt; command expands partial keys by left-padding with zeroes. The &lt;code&gt;event&lt;/code&gt; command gains an &lt;code&gt;--outbox&lt;/code&gt; flag for publishing events through the outbox model, and &lt;code&gt;fetch&lt;/code&gt; now exits with an error code when no event is returned.&lt;/p&gt;

&lt;h2 id=&#34;in-development-14&#34;&gt;In Development&lt;/h2&gt;

&lt;h3 id=&#34;nostr-npub1whtn0s68y3cs98zysa4nxrfzss5g5snhndv35tk5m2sudsr7ltms48r3ec-adds-thumbhash-previews-and-push-registration-bridge-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1whtn0s68y3cs98zysa4nxrfzss5g5snhndv35tk5m2sudsr7ltms48r3ec&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;White Noise&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1wht…r3ec&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; adds thumbhash previews and push registration bridge&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/marmot-protocol/whitenoise&#34;&gt;White Noise&lt;/a&gt;, the private messenger built on the &lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt; protocol, merged five PRs. &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/549&#34;&gt;PR #549&lt;/a&gt; replaces blurhash image previews with thumbhash, a newer algorithm that produces sharper placeholder images at a smaller payload size (typically under 30 bytes versus blurhash&amp;#39;s ~50-100 bytes) while preserving the aspect ratio and color distribution of the original image. Blurhash is retained as a fallback for older content. &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/548&#34;&gt;PR #548&lt;/a&gt; updates whitenoise-rs and adds the &lt;a href=&#34;https://nostrcompass.org/en/topics/mip-05/&#34;&gt;MIP-05&lt;/a&gt; push registration bridge, connecting the &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-04-01-newsletter/#marmot-moves-keypackages-to-addressable-events-and-tightens-push-notifications&#34;&gt;push notification spec work from last week&lt;/a&gt; to the client. &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/493&#34;&gt;PR #493&lt;/a&gt; adds cursor-based pagination for chat messages, replacing the previous loading strategy with a scroll-driven approach.&lt;/p&gt;

&lt;h3 id=&#34;route96-nostr-npub1v0lxxxxutpvrelsksy8cdhgfux9l6a42hsj2qzquu2zk7vc9qnkszrqj49-adds-dynamic-label-configuration-and-zero-egress-cleanup-2&#34;&gt;Route96 (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1v0lxxxxutpvrelsksy8cdhgfux9l6a42hsj2qzquu2zk7vc9qnkszrqj49&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Kieran&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1v0l…qj49&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) adds dynamic label configuration and zero-egress cleanup&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/v0l/route96&#34;&gt;Route96&lt;/a&gt;, the &lt;a href=&#34;https://nostrcompass.org/en/topics/blossom/&#34;&gt;Blossom&lt;/a&gt; media server by v0l, merged three PRs. &lt;a href=&#34;https://github.com/v0l/route96/pull/80&#34;&gt;PR #80&lt;/a&gt; adds dynamic label model configuration via the admin API, letting operators swap content classification models without restarting the server. &lt;a href=&#34;https://github.com/v0l/route96/pull/82&#34;&gt;PR #82&lt;/a&gt; adds label configuration fields to the admin UI. &lt;a href=&#34;https://github.com/v0l/route96/pull/79&#34;&gt;PR #79&lt;/a&gt; adds a zero-egress file cleanup policy that automatically removes files that have never been downloaded, keeping storage costs down for operators.&lt;/p&gt;

&lt;h3 id=&#34;snort-ships-security-hardening-and-dvm-payment-invoices-2&#34;&gt;Snort ships security hardening and DVM payment invoices&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/v0l/snort&#34;&gt;Snort&lt;/a&gt;, the web client, shipped two releases this week with a comprehensive security audit. Fixes include Schnorr signature verification, &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; relay message forgery protection (preventing attackers from injecting signing requests through compromised relays), PIN encryption improvements, and removal of NIP-26 delegation trust. Performance gains come from batched Schnorr verification in WASM, lazy-loaded routes, pre-compiled translations, and elimination of double verification per event. &lt;a href=&#34;https://github.com/v0l/snort/pull/618&#34;&gt;PR #618&lt;/a&gt; adds &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-90/&#34;&gt;NIP-90&lt;/a&gt; (Data Vending Machine) kind &lt;code&gt;7000&lt;/code&gt; payment-required invoice display, so when a DVM responds with a payment requirement, Snort renders the Lightning invoice directly in the feed.&lt;/p&gt;

&lt;h3 id=&#34;damus-improves-lmdb-compaction-2&#34;&gt;Damus improves LMDB compaction&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/damus-io/damus&#34;&gt;Damus&lt;/a&gt;, the iOS client, merged &lt;a href=&#34;https://github.com/damus-io/damus/pull/3719&#34;&gt;PR #3719&lt;/a&gt; adding automatic LMDB compaction on a schedule, preventing the local database from growing unbounded over time. &lt;a href=&#34;https://github.com/damus-io/damus/pull/3663&#34;&gt;PR #3663&lt;/a&gt; improves the BlurOverlayView to look protective instead of broken.&lt;/p&gt;

&lt;h3 id=&#34;nostr-npub1809mpa7748df7kext899m2yatetky9w78zz72x7jgaxarvxyfvtqwvfpz8-adds-tag-indexing-and-note-sync-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1809mpa7748df7kext899m2yatetky9w78zz72x7jgaxarvxyfvtqwvfpz8&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;nodetec&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1809…fpz8&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; adds tag indexing and note sync&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nodetec/captains-log&#34;&gt;Captain&amp;#39;s Log&lt;/a&gt; (Comet), the Nostr-native long-form writing tool from Nodetec, merged four PRs this week. &lt;a href=&#34;https://github.com/nodetec/captains-log/pull/156&#34;&gt;PR #156&lt;/a&gt; adds tag indexing and sync support across notes, &lt;a href=&#34;https://github.com/nodetec/captains-log/pull/157&#34;&gt;PR #157&lt;/a&gt; refactors note sync and tag handling, and &lt;a href=&#34;https://github.com/nodetec/captains-log/pull/159&#34;&gt;PR #159&lt;/a&gt; fixes trashed note sync so deleted notes stay deleted across devices.&lt;/p&gt;

&lt;h3 id=&#34;nostr-npub1w5rgyvpunuxa446egx6fahyagm376vrtnm3nx5ec5gdruszvt73spqeu4t-v0-2-x-redesigns-plugin-system-with-nostr-native-validator-marketplace-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1w5rgyvpunuxa446egx6fahyagm376vrtnm3nx5ec5gdruszvt73spqeu4t&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Relatr&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1w5r…eu4t&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; v0.2.x redesigns plugin system with Nostr-native validator marketplace&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/ContextVM/relatr&#34;&gt;Relatr&lt;/a&gt;, a &lt;a href=&#34;https://nostrcompass.org/en/topics/web-of-trust/&#34;&gt;Web of Trust&lt;/a&gt; scoring engine that computes trust rankings from social graph distance and configurable validators, shipped the v0.2.x family with a complete plugin system redesign. Validators are now written in Elo, a portable functional expression language forked to support multi-step host-orchestrated capabilities (Nostr queries, social graph lookups, NIP-05 resolution). Plugins are published as kind &lt;code&gt;765&lt;/code&gt; Nostr events, making distribution native to the relay network. A new &lt;a href=&#34;https://relatr.net&#34;&gt;plugin marketplace&lt;/a&gt; lets operators discover, install, and weight validators from the browser, with a CLI (&lt;code&gt;relo&lt;/code&gt;) for local authoring and publishing. The architecture is sandboxed: plugins can only invoke capabilities the host explicitly provides, so a malicious validator cannot escape its defined scope. Relatr instances can now be managed from the website, with full visibility into which plugins compose the scoring algorithm and their individual weights.&lt;/p&gt;

&lt;h3 id=&#34;nostr-npub15dc33fyg3cpd9r58vlqge2hh8dy6hkkrjxkhluv2xpyfreqkmsesesyv6e-improves-mobile-navigation-and-access-control-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub15dc33fyg3cpd9r58vlqge2hh8dy6hkkrjxkhluv2xpyfreqkmsesesyv6e&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Shopstr Markets&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub15dc…yv6e&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; improves mobile navigation and access control&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/shopstr-eng/shopstr&#34;&gt;Shopstr&lt;/a&gt;, the Nostr-native marketplace for buying and selling with Bitcoin, pushed 158 commits across its main app and the &lt;a href=&#34;https://github.com/shopstr-eng/milk-market&#34;&gt;Milk Market&lt;/a&gt; companion project this week. Fixes include mobile community layout improvements, menu close-on-navigation behavior, and dropdown auto-close. Protected routes can no longer be accessed via direct URL without signing in, and the slug matching logic now handles multiple exact matches correctly.&lt;/p&gt;

&lt;h3 id=&#34;pollerama-nostr-npub1cgd35mxmy37vhkfcmjckk9dylguz6q8l67cj6h9m45tj5rx569cql9kfex-adds-notifications-movie-search-and-rating-ui-2&#34;&gt;Pollerama (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1cgd35mxmy37vhkfcmjckk9dylguz6q8l67cj6h9m45tj5rx569cql9kfex&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;ABH3PO&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1cgd…kfex&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) adds notifications, movie search, and rating UI&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/formstr-hq/nostr-polls&#34;&gt;Pollerama&lt;/a&gt;, a polling, survey, and social rating app built on Nostr, added thread notifications, a movie search feature, and a rating UI overhaul. The release also fixes feed loading issues and bumps dependency versions.&lt;/p&gt;

&lt;h3 id=&#34;purser-nostr-npub1tmycvul7aj4fxhypg5qkjgsjtx30zvnrfeufrgx9xlwtv0hne7cs67el78-builds-nostr-native-payment-daemon-with-marmot-encryption-2&#34;&gt;Purser (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1tmycvul7aj4fxhypg5qkjgsjtx30zvnrfeufrgx9xlwtv0hne7cs67el78&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Ethan Tuttle&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1tmy…el78&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) builds Nostr-native payment daemon with Marmot encryption&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/EthnTuttle/purser&#34;&gt;Purser&lt;/a&gt;, a Nostr-native payment daemon designed as a Zaprite replacement, merged nine PRs this week building out its core architecture. The project uses &lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt; MLS via MDK for encrypted merchant-customer messaging, with Strike and Square as payment providers. This week landed config and catalog loading, message schema validation, the MDK communication layer, Strike and Square provider implementations, a polling engine, anti-spam rate limiting, pending payment persistence, and the order processing pipeline. All 99 tests now exercise actual mdk-core MLS operations after the team removed mock MLS in favor of real encryption in local mode.&lt;/p&gt;

&lt;h3 id=&#34;nostr-npub1hrujuc08r4zcdtn0u6ts7u7apldcjqgftz0z7stmaaz9hwaf9jxs66f3yh-refactors-dm-attachments-and-adds-profile-editing-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1hrujuc08r4zcdtn0u6ts7u7apldcjqgftz0z7stmaaz9hwaf9jxs66f3yh&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;VectorPrivacy&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1hru…f3yh&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; refactors DM attachments and adds profile editing&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/VectorPrivacy/Vector&#34;&gt;Vector&lt;/a&gt;, the privacy-focused Nostr messenger built with Tauri, merged &lt;a href=&#34;https://github.com/VectorPrivacy/Vector/pull/55&#34;&gt;PR #55&lt;/a&gt; refactoring the frontend. DM attachment decryption and saving moved to the vector-core library, and the app now supports profile editing. The upload cancel flag is properly wired through TauriSendCallback, and unused attachment preview callbacks were cleaned up.&lt;/p&gt;

&lt;h2 id=&#34;protocol-and-spec-work-14&#34;&gt;Protocol and Spec Work&lt;/h2&gt;

&lt;h3 id=&#34;nip-updates-14&#34;&gt;NIP Updates&lt;/h3&gt;

&lt;p&gt;Recent changes to the &lt;a href=&#34;https://github.com/nostr-protocol/nips&#34;&gt;NIPs repository&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Merged:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-58/&#34;&gt;NIP-58&lt;/a&gt; (Badges): Profile Badges move to kind 10008, Badge Sets to kind 30008&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2276&#34;&gt;PR #2276&lt;/a&gt;): Migrates Profile Badges from kind &lt;code&gt;30008&lt;/code&gt; to kind &lt;code&gt;10008&lt;/code&gt; (a replaceable event, one per pubkey) and introduces kind &lt;code&gt;30008&lt;/code&gt; for Badge Sets. Previously, Profile Badges used the same kind (&lt;code&gt;30008&lt;/code&gt;) as Badge definitions, making them parameterized replaceable events keyed by a &lt;code&gt;d&lt;/code&gt; tag. The new kind &lt;code&gt;10008&lt;/code&gt; is a simple replaceable event: one per pubkey, no &lt;code&gt;d&lt;/code&gt; tag needed. Clients query a single replaceable event per user instead of scanning parameterized replaceable events. Amethyst v1.07.3 already ships with this migration.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-34/&#34;&gt;NIP-34&lt;/a&gt; (Git Stuff): Add git-related follow lists&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2130&#34;&gt;PR #2130&lt;/a&gt;): Adds follow list conventions for NIP-34 repository and issue tracking. Users publish kind &lt;code&gt;30000&lt;/code&gt; follow sets with &lt;code&gt;d&lt;/code&gt; tags like &lt;code&gt;git-repos&lt;/code&gt; or &lt;code&gt;git-issues&lt;/code&gt; containing &lt;code&gt;a&lt;/code&gt; tag references to repositories (kind &lt;code&gt;30617&lt;/code&gt;) they want to track. Clients can subscribe to these follow sets to show repository activity in a user&amp;#39;s feed, similar to how kind &lt;code&gt;3&lt;/code&gt; contact lists work for pubkeys.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Open PRs and Discussions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;NIP-AC: P2P Voice and Video Calls over WebRTC&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2301&#34;&gt;PR #2301&lt;/a&gt;): Expands the original NIP-100 (implemented by 0xChat) with three changes: migration to &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; encryption wrapped in &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-59/&#34;&gt;NIP-59&lt;/a&gt; gift wraps to eliminate metadata leaks, a specified WebRTC workflow for voice and video call setup (offer, answer, ICE candidates), and a mesh group call model where each peer establishes a direct WebRTC connection to every other peer. The spec is not backwards-compatible with NIP-100. Amethyst is already building against it, with a call state machine test suite (&lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2143&#34;&gt;PR #2143&lt;/a&gt;) and stale call offer handling (&lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2164&#34;&gt;PR #2164&lt;/a&gt;) landing this week.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-340/&#34;&gt;NIP-340&lt;/a&gt; (FROST Quorum)&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2299&#34;&gt;PR #2299&lt;/a&gt;): Proposes conventions for &lt;a href=&#34;https://nostrcompass.org/en/topics/frost/&#34;&gt;FROST&lt;/a&gt; (Flexible Round-Optimized Schnorr Threshold) threshold signing on Nostr. FROST lets a group of signers collectively control a Nostr identity where any t-of-n members can sign events without reconstructing the full private key. The NIP defines how to coordinate signing rounds, distribute key shares, and publish threshold-signed events, building on the Igloo signer work from the &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-04-01-newsletter/#igloo-signer-11&#34;&gt;FROSTR project&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-5d/&#34;&gt;NIP-5D&lt;/a&gt; (Nostr Web Applets)&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2303&#34;&gt;PR #2303&lt;/a&gt;): Defines a &lt;code&gt;postMessage&lt;/code&gt; protocol for sandboxed web applications (&amp;#34;napplets&amp;#34;) running in iframes to communicate with a hosting application (&amp;#34;shell&amp;#34;). The shell provides the napplet with Nostr signing, relay access, and user context through a structured message API, while the iframe sandbox prevents direct key access. This extends the static website hosting model from &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-5a/&#34;&gt;NIP-5A&lt;/a&gt; toward interactive applications that can read and write Nostr events. The NIP is under active development with a working runtime implementation.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-5c/&#34;&gt;NIP-5C&lt;/a&gt; (Scrolls)&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2281&#34;&gt;PR #2281&lt;/a&gt;): Renamed from the earlier NIP-A5 proposal. Defines conventions for publishing and discovering WebAssembly programs on Nostr. WASM binaries are stored as Nostr events, and clients can download and execute them in a sandboxed runtime. A &lt;a href=&#34;https://nprogram.netlify.app/&#34;&gt;demo app&lt;/a&gt; shows scrolls running in-browser, with example programs published as Nostr events that any client can fetch and execute.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-85/&#34;&gt;NIP-85&lt;/a&gt; (Trusted Assertions): Clarifications&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2304&#34;&gt;PR #2304&lt;/a&gt;): Tightens the specification language around multiple keys and relays per service provider, clarifying how clients should handle assertions from providers that operate across several pubkeys or relay endpoints.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-24/&#34;&gt;NIP-24&lt;/a&gt; (Extra Metadata Fields): published_at for replaceable events&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2300&#34;&gt;PR #2300&lt;/a&gt;): Generalizes the &lt;code&gt;published_at&lt;/code&gt; tag from &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-23/&#34;&gt;NIP-23&lt;/a&gt; (Long-form Content) to all replaceable and addressable events. The tag is display-only: if &lt;code&gt;published_at&lt;/code&gt; equals &lt;code&gt;created_at&lt;/code&gt;, clients show the event as &amp;#34;created&amp;#34; at that time; if they differ (because the event was updated), clients can show &amp;#34;updated&amp;#34; instead. This lets kind &lt;code&gt;0&lt;/code&gt; profiles display &amp;#34;joined at&amp;#34; dates and other replaceable events preserve their original publication timestamp across updates. A complementary &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-51/&#34;&gt;NIP-51&lt;/a&gt; proposal (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2302&#34;&gt;PR #2302&lt;/a&gt;) adds the same tag to list events.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-59/&#34;&gt;NIP-59&lt;/a&gt; (Gift Wrap): Ephemeral gift wrap kind&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2245&#34;&gt;PR #2245&lt;/a&gt;): Adds kind &lt;code&gt;21059&lt;/code&gt; as an ephemeral counterpart to the existing kind &lt;code&gt;1059&lt;/code&gt; gift wrap. Ephemeral events (kinds &lt;code&gt;20000&lt;/code&gt;-&lt;code&gt;29999&lt;/code&gt;) follow &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-01/&#34;&gt;NIP-01&lt;/a&gt; semantics: relays are not expected to store them and may discard them after delivery. This lets applications send gift-wrapped messages that disappear from relays once delivered, reducing storage requirements for high-volume messaging while keeping the same three-layer encryption model as regular &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; DMs.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&#34;opensats-announces-sixteenth-wave-of-nostr-grants-2&#34;&gt;OpenSats announces sixteenth wave of Nostr grants&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://opensats.org&#34;&gt;OpenSats&lt;/a&gt; announced its &lt;a href=&#34;https://opensats.org/blog/sixteenth-wave-of-nostr-grants&#34;&gt;sixteenth wave of Nostr grants&lt;/a&gt; on April 8, funding four first-time grants and one renewal. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/tree/main/desktopApp&#34;&gt;Amethyst Desktop&lt;/a&gt; receives funding for contributor Robert Nagy to build a standalone desktop app on top of the &lt;a href=&#34;https://nostrcompass.org/en/topics/quartz/&#34;&gt;Quartz&lt;/a&gt; and Commons modules, bringing the Android client&amp;#39;s feature set to mouse-driven interfaces with persistent relay connections. &lt;a href=&#34;https://github.com/nogringo/nostr-mail&#34;&gt;Nostr Mail&lt;/a&gt; receives funding to build a full email system on Nostr using kind &lt;code&gt;1301&lt;/code&gt; events wrapped in &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-59/&#34;&gt;NIP-59&lt;/a&gt; gift wraps, with a Flutter client and SMTP bridge servers for Gmail/Outlook compatibility. &lt;a href=&#34;https://github.com/Nostrord/nostrord&#34;&gt;Nostrord&lt;/a&gt; receives funding for a Kotlin Multiplatform &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-29/&#34;&gt;NIP-29&lt;/a&gt; relay-based group client with Discord-like group messaging, moderation, and threads. &lt;a href=&#34;https://github.com/tami1A84/null--nostr&#34;&gt;Nurunuru&lt;/a&gt; receives funding to build a native iOS version of the Japanese-focused Nostr client modeled on LINE&amp;#39;s familiar interface, with passkey-based biometric login for onboarding. HAMSTR received a grant renewal (first funded in the &lt;a href=&#34;https://opensats.org/blog/eleventh-wave-of-nostr-grants#hamstr&#34;&gt;eleventh wave&lt;/a&gt;).&lt;/p&gt;

&lt;h2 id=&#34;nip-deep-dive-nip-17-private-direct-messages-2&#34;&gt;NIP Deep Dive: NIP-17 (Private Direct Messages)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/17.md&#34;&gt;NIP-17&lt;/a&gt; defines the current standard for private direct messages on Nostr. It replaces the older &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-04/&#34;&gt;NIP-04&lt;/a&gt; (Encrypted Direct Messages) scheme, which leaked metadata (sender, receiver, and timestamps were all visible on relays) and used a weaker encryption construction. NIP-17 combines &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; (Encrypted Payloads) for encryption with &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-59/&#34;&gt;NIP-59&lt;/a&gt; (Gift Wrap) for metadata protection, creating a three-layer system where relays cannot see who is talking to whom.&lt;/p&gt;

&lt;p&gt;The protocol uses three event kinds stacked inside each other. The innermost layer is the actual message, an unsigned kind &lt;code&gt;14&lt;/code&gt; event:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;d7e3a4b9c1f2e8d6a5b4c3d2e1f09876d7e3a4b9c1f2e8d6a5b4c3d2e1f09876&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1744108800,
  &amp;#34;kind&amp;#34;: 14,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;p&amp;#34;, &amp;#34;f1a2b3c4d5e6f7890123456789abcdef01234567890abcdef1234567890abcdef&amp;#34;, &amp;#34;wss://inbox.example.com&amp;#34;],
    [&amp;#34;subject&amp;#34;, &amp;#34;Project update&amp;#34;]
  ],
  &amp;#34;content&amp;#34;: &amp;#34;The new relay config is deployed. Let me know if you see any issues.&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The kind &lt;code&gt;14&lt;/code&gt; event is deliberately unsigned (empty &lt;code&gt;sig&lt;/code&gt;). The spec describes this as providing deniability, but in practice the protection is limited. The kind &lt;code&gt;13&lt;/code&gt; seal that wraps the rumor is signed by the sender&amp;#39;s real key. A recipient can show the signed seal to a third party, proving the sender communicated with them, even without revealing the message content. With zero-knowledge proofs, a recipient can prove the exact message content without revealing their own private key. The unsigned rumor is like an unsigned letter in a signed envelope: the envelope&amp;#39;s signature links the sender to the contents. True deniability would require symmetric authentication (like Signal&amp;#39;s HMACs), which is incompatible with Nostr&amp;#39;s decentralized relay model where messages must be self-authenticating. NIP-17&amp;#39;s real strengths are metadata privacy and content secrecy, not deniability.&lt;/p&gt;

&lt;p&gt;This unsigned message gets wrapped in a kind &lt;code&gt;13&lt;/code&gt; seal, which is signed by the actual sender and encrypted with &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; to the recipient:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;d7e3a4b9c1f2e8d6a5b4c3d2e1f09876d7e3a4b9c1f2e8d6a5b4c3d2e1f09876&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1744022400,
  &amp;#34;kind&amp;#34;: 13,
  &amp;#34;tags&amp;#34;: [],
  &amp;#34;content&amp;#34;: &amp;#34;&amp;lt;nip44-encrypted kind 14 payload&amp;gt;&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The seal has no tags, so even if decrypted it would not reveal the recipient. The seal is signed by the sender&amp;#39;s real key, which lets the recipient authenticate the message by checking that the seal&amp;#39;s &lt;code&gt;pubkey&lt;/code&gt; matches the inner kind &lt;code&gt;14&lt;/code&gt;&amp;#39;s &lt;code&gt;pubkey&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The seal then gets wrapped in a kind &lt;code&gt;1059&lt;/code&gt; gift wrap, signed by a random throwaway key and addressed to the recipient:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1744065600,
  &amp;#34;kind&amp;#34;: 1059,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;p&amp;#34;, &amp;#34;f1a2b3c4d5e6f7890123456789abcdef01234567890abcdef1234567890abcdef&amp;#34;]
  ],
  &amp;#34;content&amp;#34;: &amp;#34;&amp;lt;nip44-encrypted kind 13 payload&amp;gt;&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The gift wrap&amp;#39;s &lt;code&gt;pubkey&lt;/code&gt; is a random key generated just for this message, and the &lt;code&gt;created_at&lt;/code&gt; is randomized up to two days in the past. This is the outermost layer that relays actually see: a message from an unknown pubkey addressed to the recipient, with a timestamp that does not reflect when the message was actually sent. The randomized timestamp protects against after-the-fact analysis of stored events, but an adversary actively connected to relays can still observe when the gift wrap first appeared, so this defense is limited to passive observers who query relay data later. Because the pubkey is random and the timestamp is fake, relays cannot determine the real sender. To read the message, the recipient decrypts the gift wrap using their own key and the random pubkey, finds the seal inside, decrypts the seal using their own key and the sender&amp;#39;s pubkey from the seal, and finds the kind &lt;code&gt;14&lt;/code&gt; message inside.&lt;/p&gt;

&lt;p&gt;NIP-17 does not provide forward secrecy. All messages are encrypted using the static Nostr keypair (via NIP-44&amp;#39;s key derivation from the sender and recipient&amp;#39;s keys). If a private key is compromised, every past and future message encrypted to that key can be decrypted. This is a deliberate tradeoff: because encryption depends only on the nsec, a user who backs up their nsec can recover their entire message history from any relay that still stores the gift wraps. Protocols like MLS (used by &lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt;) provide forward secrecy through rotating key material, but at the cost of requiring state synchronization and making historical message recovery impossible after key rotation.&lt;/p&gt;

&lt;p&gt;NIP-17 also defines kind &lt;code&gt;15&lt;/code&gt; for encrypted file messages, which adds &lt;code&gt;file-type&lt;/code&gt;, &lt;code&gt;encryption-algorithm&lt;/code&gt;, &lt;code&gt;decryption-key&lt;/code&gt;, and &lt;code&gt;decryption-nonce&lt;/code&gt; tags so the recipient can decrypt an attached file that was encrypted with AES-GCM before upload to a Blossom server. Kind &lt;code&gt;10050&lt;/code&gt; is used to publish the user&amp;#39;s preferred DM relay list, so senders know where to deliver gift wraps. The set of &lt;code&gt;pubkey&lt;/code&gt; &#43; &lt;code&gt;p&lt;/code&gt; tags in a message defines a chat room; adding or removing a participant creates a new room with clean history.&lt;/p&gt;

&lt;p&gt;Implementations cover most major clients. &lt;a href=&#34;https://github.com/psic4t/nospeak&#34;&gt;nospeak&lt;/a&gt; uses NIP-17 for all one-on-one messaging. &lt;a href=&#34;https://gitea.coracle.social/coracle/flotilla&#34;&gt;Flotilla&lt;/a&gt; uses NIP-17 for its proof-of-work DMs. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst&#34;&gt;Amethyst&lt;/a&gt;, &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app&#34;&gt;Primal&lt;/a&gt;, &lt;a href=&#34;https://github.com/nostur-com/nostur-ios-public&#34;&gt;Nostur&lt;/a&gt;, &lt;a href=&#34;https://github.com/damus-io/damus&#34;&gt;Damus&lt;/a&gt;, &lt;a href=&#34;https://github.com/hzrd149/nostrudel&#34;&gt;noStrudel&lt;/a&gt;, and &lt;a href=&#34;https://github.com/coracle-social/coracle&#34;&gt;Coracle&lt;/a&gt; all implement NIP-17 as their primary DM protocol. The spec also supports disappearing messages by setting an &lt;code&gt;expiration&lt;/code&gt; tag in the gift wrap.&lt;/p&gt;

&lt;h2 id=&#34;nip-deep-dive-nip-46-nostr-remote-signing-2&#34;&gt;NIP Deep Dive: NIP-46 (Nostr Remote Signing)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/46.md&#34;&gt;NIP-46&lt;/a&gt; defines a protocol for separating the user&amp;#39;s private key from the client application. Instead of pasting an nsec into a web app, the user runs a remote signer (also called a &amp;#34;bunker&amp;#34;) that holds the private key and responds to signing requests over Nostr relays. The client never sees the private key. This reduces the attack surface: a compromised client can request signatures but cannot extract the key itself.&lt;/p&gt;

&lt;p&gt;The protocol uses kind &lt;code&gt;24133&lt;/code&gt; for both requests and responses, encrypted with &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; (Encrypted Payloads). A client generates a disposable &lt;code&gt;client-keypair&lt;/code&gt; for the session and communicates with the remote signer through NIP-44 encrypted messages tagged with each other&amp;#39;s pubkeys. Here is a signing request from a client to a remote signer:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;aa11bb22cc33dd44ee55ff6677889900aabbccdd11223344556677889900aabb&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;eff37350d839ce3707332348af4549a96051bd695d3223af4aabce4993531d86&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1744108800,
  &amp;#34;kind&amp;#34;: 24133,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;p&amp;#34;, &amp;#34;fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52&amp;#34;]
  ],
  &amp;#34;content&amp;#34;: &amp;#34;&amp;lt;nip44-encrypted JSON-RPC request&amp;gt;&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;1122334455667788990011223344556677889900aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff0011223344556677&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The encrypted &lt;code&gt;content&lt;/code&gt; contains a JSON-RPC-like structure:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;random-request-id-1&amp;#34;,
  &amp;#34;method&amp;#34;: &amp;#34;sign_event&amp;#34;,
  &amp;#34;params&amp;#34;: [&amp;#34;{\&amp;#34;kind\&amp;#34;:1,\&amp;#34;content\&amp;#34;:\&amp;#34;Hello from remote signing\&amp;#34;,\&amp;#34;tags\&amp;#34;:[],\&amp;#34;created_at\&amp;#34;:1744108800}&amp;#34;]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The remote signer decrypts the request, presents it to the user for approval (or auto-approves based on configured permissions), signs the event with the user&amp;#39;s private key, and returns the signed event in a response:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;bb22cc33dd44ee55ff6677889900aabb11223344556677889900aabbccddeeff&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1744108801,
  &amp;#34;kind&amp;#34;: 24133,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;p&amp;#34;, &amp;#34;eff37350d839ce3707332348af4549a96051bd695d3223af4aabce4993531d86&amp;#34;]
  ],
  &amp;#34;content&amp;#34;: &amp;#34;&amp;lt;nip44-encrypted JSON-RPC response&amp;gt;&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Connections can be initiated from either side. A remote signer provides a &lt;code&gt;bunker://&lt;/code&gt; URL containing its pubkey and relay information. A client provides a &lt;code&gt;nostrconnect://&lt;/code&gt; URL with its client pubkey, relays, and a secret for connection verification. The &lt;code&gt;secret&lt;/code&gt; parameter prevents connection spoofing: only the party that received the URL out-of-band can complete the handshake.&lt;/p&gt;

&lt;p&gt;Eight methods are defined: &lt;code&gt;connect&lt;/code&gt; for establishing the session, &lt;code&gt;sign_event&lt;/code&gt; for signing events, &lt;code&gt;get_public_key&lt;/code&gt; for learning the user&amp;#39;s pubkey, &lt;code&gt;ping&lt;/code&gt; for keepalive, &lt;code&gt;nip04_encrypt&lt;/code&gt;/&lt;code&gt;nip04_decrypt&lt;/code&gt; for legacy encryption, &lt;code&gt;nip44_encrypt&lt;/code&gt;/&lt;code&gt;nip44_decrypt&lt;/code&gt; for current encryption, and &lt;code&gt;switch_relays&lt;/code&gt; for relay management. Relay migration is handled by the remote signer, which can move the connection to new relays over time without breaking the session.&lt;/p&gt;

&lt;p&gt;Clients request specific capabilities at connection time through a permission system. A permission string like &lt;code&gt;nip44_encrypt,sign_event:1,sign_event:14&lt;/code&gt; requests NIP-44 encryption access and signing access for kind &lt;code&gt;1&lt;/code&gt; and kind &lt;code&gt;14&lt;/code&gt; events only. The remote signer can accept, reject, or modify these permissions. This means a web client for reading and posting notes might only get &lt;code&gt;sign_event:1&lt;/code&gt; permission, while a DM client might also get &lt;code&gt;sign_event:14&lt;/code&gt; and &lt;code&gt;nip44_encrypt&lt;/code&gt; permissions.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/greenart7c3/Amber&#34;&gt;Amber&lt;/a&gt; implements NIP-46 on Android, and its &lt;a href=&#34;#amber-v600-pre1-adds-per-connection-nip-46-signing-keys&#34;&gt;v6.0.0-pre1&lt;/a&gt; this week adds per-connection signing keys for isolation between clients. &lt;a href=&#34;https://github.com/nicktee/nsecapp&#34;&gt;nsec.app&lt;/a&gt; (formerly Nostr Connect) provides a web-based bunker. &lt;a href=&#34;https://github.com/nbd-wtf/nostr-tools&#34;&gt;nostr-tools&lt;/a&gt; includes &lt;code&gt;BunkerSigner&lt;/code&gt; for JavaScript clients, and &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-04-01-newsletter/#nostr-tools-adds-bunker-relay-control-and-fixes-nip-47-multi-relay-parsing&#34;&gt;last week&amp;#39;s PR #530&lt;/a&gt; added &lt;code&gt;skipSwitchRelays&lt;/code&gt; for manual relay management. The protocol also supports auth challenges: when a remote signer needs additional authentication (password, biometric, or hardware token), it responds with an &lt;code&gt;auth_url&lt;/code&gt; that the client opens in a browser for the user to complete.&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;That&amp;#39;s it for this week. Building something or have news to share? DM us on Nostr or find us at &lt;a href=&#34;https://nostrcompass.org&#34;&gt;nostrcompass.org&lt;/a&gt;.&lt;/p&gt;
 &lt;/blockquote&gt;
    </content>
    <updated>2026-04-08T15:57:04Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqswjx9zv74jalcp2zp60ckpsstct0w44zy9n4kram0euhr4vepwgeszypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agql7t66d</id>
    
      <title type="html">Nostr Compass Podcast #16 is out. Amethyst ships six releases in ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqswjx9zv74jalcp2zp60ckpsstct0w44zy9n4kram0euhr4vepwgeszypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agql7t66d" />
    <content type="html">
      Nostr Compass Podcast #16 is out.&lt;br/&gt;&lt;br/&gt;Amethyst ships six releases in three days, adding pinned notes, NIP-86 relay management, and NIP-62 Request to Vanish. NIP-5A merges, defining how to host static websites under Nostr keypairs using Blossom storage. White Noise fixes relay churn with quorum-based publishing and scoped ephemeral sessions. Flotilla adds voice rooms, email login, and proof-of-work DMs. Nymchat adopts Marmot for MLS-encrypted group chats with NIP-17 fallback. nospeak launches 1.0 as a no-signup encrypted messenger. Calendar by Form* reaches v1.0.0, Amber adds mnemonic recovery, and Schemata ships 21 PRs across four releases.&lt;br/&gt;&lt;br/&gt;Plus: Nostr VPN roster sync, Igloo FROST threshold signing on iOS, Nalgorithm relevance-ranked feeds, TENEX RAG vector stores, and 10 open NIP proposals including agent reputation, paid API announcements, and LNURL-auth key derivation.&lt;br/&gt;&lt;br/&gt;Deep dives into NIP-5A (Static Websites) and NIP-62 (Request to Vanish) with &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqsqddupn4l3cl65wggcyehd009g0pwuatsfudh28f90vewx68vrylqprdmhxue69uhhyetvv9ujuem9w3ekzen9vfhhstnpwpcz7qglwaehxw309ashgmrpwvhxummnw3ezumrpdejz76twwehkjcm9wvq3jamnwvaz7tm9wdcx2mrgduhxw6tjd9hx7tn0wfnj70wag7g&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Tim Bouma&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…ag7g&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; , &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqsd73uwehl7j8deq356ankc6k3nal927afrrw6dw688zyvyf9gs0fcpr3mhxue69uhhyetvv9uju6n9wfek27tsd3jkyuewvdhk6tcpzamhxue69uhhyetvv9ujuurjd9kkzmpwdejhgtcpr9mhxue69uhhqun9d45h2mfwwpexjmtpdshxuet59uyywp0q&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;marcan0&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…wp0q&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;, &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqsza748zkamgmw4he4hm2xhwqpxd5gkwju38wqh3twmtshx8kv8xvgprpmhxue69uhhxurpw35kzttpwf3kzmnp9e3k7mf0qywhwumn8ghj7mn0wd68ytnrd3hh2epwwe5kumn90yh8s7t69uqsuamnwvaz7tmwdaejumr0dshsar36ag&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;vinney...axkl&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…36ag&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;, &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqsf03c2gsmx5ef4c9zmxvlew04gdh7u94afnknp33qvv3c94kvwxgsppemhxue69uhkummn9ekx7mp0qyvhwumn8ghj76rzwghxxmmjv93kcefwwdhkx6tpdshsz9thwden5te0wfjkccte9ejxzmt4wvhxjme0sadgdk&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;hodlbod&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…dgdk&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;, &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqsdxm5qs0a8kdk6aejxew9nlx074g7cnedrjeggws0sq03p4s9khmqppemhxue69uhkummn9ekx7mp0qyt8wumn8ghj76rpwejkutnrv9k8vcfwv3jhvtcpzamhxue69uhhyetvv9ujuurjd9kkzmpwdejhgtcghfnjr&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;calvadev&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…fnjr&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;, &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqst0mtgkp3du662ztj3l4fgts0purksu5fgek5n4vgmg9gt2hkn9lqppemhxue69uhkummn9ekx7mp0qythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qythwumn8ghj7un9d3shjtnp0faxzmt09ehx2ap06fen87&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Max&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…en87&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; and &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqsgpyxelqdyzm7yn763xjnhmte4jt9dhqwlg2plszvaxgjgh0yg23gpzamhxue69uhhyetvv9ujuurjd9kkzmpwdejhgtcpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhsz9mhwden5te0wfjkccte9ehx7um5wghxyctwvshse8mexr&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;VincenzoImp&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…mexr&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;. &lt;br/&gt;&lt;br/&gt;&lt;video controls width=&#34;100%&#34; class=&#34;max-h-[90vh] bg-neutral-300 dark:bg-zinc-700&#34;&gt;&lt;source src=&#34;https://blossom.primal.net/b4d5028dd53ca10f4ca75ac2fafd47fdeaf253b92657b3aef1f4a34975fbb990.ogg&#34;&gt;&lt;/video&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://podcast.nostrcompass.org/naddr1qvzqqqr4vcpzqa6e2nmnzsgjfzdy520vdy4hywr06c9ue6crpr2zxyq749uu275qqyt8wumn8ghj7un9d3shjtnwdaehgu3wvfskueqpp4mhxue69uhkummn9ekx7mqpz3mhxue69uhhyetvv9ujuerpd46hxtnfduqp7etsd9ek7er995cnwde4xvmnydf3xcunsded095hq7ngvaenxusjnh9wl&#34;&gt;https://podcast.nostrcompass.org/naddr1qvzqqqr4vcpzqa6e2nmnzsgjfzdy520vdy4hywr06c9ue6crpr2zxyq749uu275qqyt8wumn8ghj7un9d3shjtnwdaehgu3wvfskueqpp4mhxue69uhkummn9ekx7mqpz3mhxue69uhhyetvv9ujuerpd46hxtnfduqp7etsd9ek7er995cnwde4xvmnydf3xcunsded095hq7ngvaenxusjnh9wl&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;#podcast #nostr
    </content>
    <updated>2026-04-05T07:12:19Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsql05uur40p9rnwt08zwe5dzkrj0v9gmpt49wyjhf8wzfgdt76wdczypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq94yemn</id>
    
      <title type="html">Nostr Compass #16 is out. Amethyst v1.07.0 through v1.07.5 adds ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsql05uur40p9rnwt08zwe5dzkrj0v9gmpt49wyjhf8wzfgdt76wdczypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq94yemn" />
    <content type="html">
      Nostr Compass #16 is out. &lt;br/&gt;Amethyst v1.07.0 through v1.07.5 adds pinned notes, NIP-86 relay management, and NIP-62 Request to Vanish support. Flotilla v1.7.0 ships voice rooms and email login, while Nymchat adopts the Marmot protocol for MLS-encrypted group chats with NIP-17 fallback. NIP-5A (Static Websites) merges into the NIPs repository, defining how to host websites under Nostr keypairs using Blossom storage. This issue digs into NIP-5A and NIP-62 (Request to Vanish). &lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/naddr1qqgrgvt98qmkvdfkx56r2c34xe3rgq3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqp65w8vgwca&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;naddr1qq…gwca&lt;/a&gt;&lt;/span&gt; &lt;/div&gt; &lt;p&gt;Welcome back to Nostr Compass, your weekly guide to Nostr.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This week:&lt;/strong&gt; &lt;a href=&#34;https://github.com/vitorpamplona/amethyst&#34;&gt;Amethyst&lt;/a&gt; ships &lt;a href=&#34;#amethyst-ships-pinned-notes-relay-management-and-request-to-vanish&#34;&gt;v1.07.0&lt;/a&gt; with pinned notes, relay management via &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-86/&#34;&gt;NIP-86&lt;/a&gt;, and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-62/&#34;&gt;NIP-62&lt;/a&gt; Request to Vanish support. &lt;a href=&#34;#nip-5a-merges-bringing-static-websites-to-nostr&#34;&gt;NIP-5A&lt;/a&gt; (Static Websites) merges into the NIPs repository, defining how to host websites under Nostr keypairs using &lt;a href=&#34;https://nostrcompass.org/en/topics/blossom/&#34;&gt;Blossom&lt;/a&gt; storage. &lt;a href=&#34;https://gitea.coracle.social/coracle/flotilla&#34;&gt;Flotilla&lt;/a&gt; ships &lt;a href=&#34;#flotilla-v170-adds-voice-rooms-and-email-login&#34;&gt;v1.7.0&lt;/a&gt; with voice rooms, email/password login, and proof-of-work DMs. &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise&#34;&gt;White Noise&lt;/a&gt; fixes relay churn in &lt;a href=&#34;#white-noise-fixes-relay-churn-and-expands-client-controls&#34;&gt;v2026.3.23&lt;/a&gt;, &lt;a href=&#34;https://github.com/psic4t/nospeak&#34;&gt;nospeak&lt;/a&gt; launches its 1.0.0 as a no-signup encrypted messenger. &lt;a href=&#34;https://github.com/Spl0itable/NYM&#34;&gt;Nymchat&lt;/a&gt; &lt;a href=&#34;#nymchat-ships-marmot-powered-group-chats&#34;&gt;adopts Marmot&lt;/a&gt; for MLS-encrypted group chats with NIP-17 fallback. &lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar&#34;&gt;Calendar by Form*&lt;/a&gt; reaches &lt;a href=&#34;#calendar-by-form-v100&#34;&gt;v1.0.0&lt;/a&gt; with private calendar lists and ICS import, &lt;a href=&#34;https://github.com/greenart7c3/Amber&#34;&gt;Amber&lt;/a&gt; adds &lt;a href=&#34;#amber-v502-through-v504&#34;&gt;mnemonic recovery and NIP-42 relay auth whitelisting&lt;/a&gt;, and the &lt;a href=&#34;#marmot-moves-keypackages-to-addressable-events-and-tightens-push-notifications&#34;&gt;Marmot spec&lt;/a&gt; moves KeyPackages to addressable events while tightening MIP-05 push notification formatting.&lt;/p&gt;

&lt;h2 id=&#34;news-2&#34;&gt;News&lt;/h2&gt;

&lt;h3 id=&#34;nostr-npub142gywvjkq0dv6nupggyn2euhx4nduwc7yz5f24ah9rpmunr2s39se3xrj0-ships-pinned-notes-relay-management-and-request-to-vanish-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub142gywvjkq0dv6nupggyn2euhx4nduwc7yz5f24ah9rpmunr2s39se3xrj0&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;amethyst&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub142g…xrj0&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; ships pinned notes, relay management, and Request to Vanish&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/vitorpamplona/amethyst&#34;&gt;Amethyst&lt;/a&gt;, the Android client maintained by vitorpamplona, shipped six releases in three days, from &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/releases/tag/v1.07.0&#34;&gt;v1.07.0&lt;/a&gt; through &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/releases/tag/v1.07.5&#34;&gt;v1.07.5&lt;/a&gt;. The headline feature set spans six protocol surfaces: pinned notes, a dedicated polls feed screen, &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-62/&#34;&gt;NIP-62&lt;/a&gt; (Request to Vanish) support for requesting full event deletion from relays, &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-86/&#34;&gt;NIP-86&lt;/a&gt; (Relay Management API) from within the client, &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-66/&#34;&gt;NIP-66&lt;/a&gt; (Relay Discovery and Liveness Monitoring) assessments in the relay info screen, and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-43/&#34;&gt;NIP-43&lt;/a&gt; (Relay Access Metadata and Requests) member information display.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-86/&#34;&gt;NIP-86&lt;/a&gt; defines a JSON-RPC interface for relay operators, letting clients send administrative commands such as banning pubkeys, allowing pubkeys, and listing banned users over a standardized API. Amethyst now exposes this directly in its relay management UI, so users running their own relays can administer them from the same client they use for posting. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2039&#34;&gt;PR #2039&lt;/a&gt; replaces the old hex-input dialog for ban and allow pubkeys with an interactive user search dialog.&lt;/p&gt;

&lt;p&gt;v1.07.2 added GIF keyboard uploads and fixed a signing regression where Amber (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1w4uswmv6lu9yel005l3qgheysmr7tk9uvwluddznju3nuxalevvs2d0jr5&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;greenart7c3&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1w4u…0jr5&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) rejection responses were being misread because older Amber versions returned an empty string for the &lt;code&gt;rejected&lt;/code&gt; field (&lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/2042&#34;&gt;PR #2042&lt;/a&gt;). v1.07.5 fixes an image uploading crash. The &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/releases/tag/v1.06.2&#34;&gt;v1.06.2&lt;/a&gt; and &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/releases/tag/v1.06.3&#34;&gt;v1.06.3&lt;/a&gt; releases earlier in the week added a poll type selector for single vs. multiple choice polls, drag-to-seek on video progress bars, and anonymous posting improvements.&lt;/p&gt;

&lt;h3 id=&#34;nip-5a-merges-bringing-static-websites-to-nostr-2&#34;&gt;NIP-5A merges, bringing static websites to Nostr&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/5A.md&#34;&gt;NIP-5A&lt;/a&gt; (Static Websites) merged via &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1538&#34;&gt;PR #1538&lt;/a&gt;, defining how to host static websites under Nostr keypairs. The spec uses two event kinds: kind &lt;code&gt;15128&lt;/code&gt; for a root site, one per pubkey, and kind &lt;code&gt;35128&lt;/code&gt; for named sites identified by a &lt;code&gt;d&lt;/code&gt; tag. Each manifest maps URL paths to SHA256 hashes, with optional &lt;code&gt;server&lt;/code&gt; tags pointing to &lt;a href=&#34;https://nostrcompass.org/en/topics/blossom/&#34;&gt;Blossom&lt;/a&gt; storage hosts where the actual files live.&lt;/p&gt;

&lt;p&gt;The hosting model works like this: a site author builds a static site, uploads the files to one or more Blossom servers, then publishes a signed manifest event that maps paths to content hashes. A host server receives web requests, resolves the author&amp;#39;s pubkey from the subdomain, fetches the manifest from the author&amp;#39;s &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-65/&#34;&gt;NIP-65&lt;/a&gt; relay list, and serves files by downloading the matching blobs from Blossom. The site stays under the author&amp;#39;s control because only that key can sign an updated manifest. The host server is replaceable because any server that understands NIP-5A can serve the same site from the same manifest.&lt;/p&gt;

&lt;p&gt;The spec builds on infrastructure that already exists. &lt;a href=&#34;https://github.com/lez/nsite&#34;&gt;nsite&lt;/a&gt;, the NIP-5A reference host implementation built by lez, and &lt;a href=&#34;https://github.com/hzrd149/nsite-manager&#34;&gt;nsite-manager&lt;/a&gt;, hzrd149&amp;#39;s management UI, were already running before the NIP merged. The merge makes the event kinds and URL resolution rules official, which gives second and third implementations a stable target.&lt;/p&gt;

&lt;h3 id=&#34;nostr-npub1whtn0s68y3cs98zysa4nxrfzss5g5snhndv35tk5m2sudsr7ltms48r3ec-fixes-relay-churn-and-expands-client-controls-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1whtn0s68y3cs98zysa4nxrfzss5g5snhndv35tk5m2sudsr7ltms48r3ec&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;White Noise&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1wht…r3ec&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; fixes relay churn and expands client controls&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/marmot-protocol/whitenoise&#34;&gt;White Noise&lt;/a&gt;, the private messenger built on the &lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt; protocol, shipped &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/releases/tag/v2026.3.23&#34;&gt;v2026.3.23&lt;/a&gt; on March 25. The main work is relay stability. Login no longer waits for every relay-list publish before moving on, because relay-list publishing now uses quorum logic and retries the rest in the background. One-off fetches and publishes use scoped ephemeral relay sessions instead of lingering in the long-lived pool, restored sessions recover their group refresh path after startup, and the app now exposes relay diagnostics and relay state inspection through &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/495&#34;&gt;PR #495&lt;/a&gt; and &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/502&#34;&gt;PR #502&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The same release changes how conversations behave. &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/468&#34;&gt;PR #468&lt;/a&gt; adds NIP-C7 reply threading with &lt;code&gt;q&lt;/code&gt; tags and &lt;code&gt;nostr:nevent&lt;/code&gt; references, &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/471&#34;&gt;PR #471&lt;/a&gt; and &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/512&#34;&gt;PR #512&lt;/a&gt; keep deleted messages visible as deleted placeholders instead of silently removing them, &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/478&#34;&gt;PR #478&lt;/a&gt; adds an in-app bug report flow using &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; (Encrypted Payloads) anonymous reports, and &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/486&#34;&gt;PR #486&lt;/a&gt; adds support chat directly in the client. User-facing message controls also landed in the same window: &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/532&#34;&gt;PR #532&lt;/a&gt; archives chats, &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/541&#34;&gt;PR #541&lt;/a&gt; adds mute and unmute with configurable durations, and &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/535&#34;&gt;PR #535&lt;/a&gt; adds notification settings. &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/539&#34;&gt;PR #539&lt;/a&gt; is preparatory push-registration work, wiring APNs registration on iOS and Play Services detection on Android so registration can be built on top of it. On the backend side, the &lt;a href=&#34;https://github.com/marmot-protocol/mdk&#34;&gt;MDK&lt;/a&gt; (Marmot Development Kit) added MIP-05 push notification primitives and a notification request builder (&lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/235&#34;&gt;PR #235&lt;/a&gt;, &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/238&#34;&gt;PR #238&lt;/a&gt;), while &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs&#34;&gt;whitenoise-rs&lt;/a&gt; added push notification registration persistence (&lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/688&#34;&gt;PR #688&lt;/a&gt;), background task cancellation fixes (&lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/696&#34;&gt;PR #696&lt;/a&gt;), and key package recovery on startup (&lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/693&#34;&gt;PR #693&lt;/a&gt;).&lt;/p&gt;

&lt;h3 id=&#34;nostr-vpn-reaches-v0-3-0-with-roster-sync-and-invite-v2-2&#34;&gt;Nostr VPN reaches v0.3.0 with roster sync and invite v2&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-03-25-newsletter/#nostr-vpn-launches-as-a-tailscale-alternative&#34;&gt;Following last week&amp;#39;s launch coverage&lt;/a&gt;, &lt;a href=&#34;https://github.com/mmalmi/nostr-vpn&#34;&gt;nostr-vpn&lt;/a&gt;, the peer-to-peer VPN that uses Nostr relays for signaling and WireGuard for encrypted tunnels, continued its rapid release pace, shipping releases through &lt;a href=&#34;https://github.com/mmalmi/nostr-vpn/releases/tag/v0.3.3&#34;&gt;v0.3.3&lt;/a&gt;. The version bump brings two breaking changes: the invite format moves to v2 (0.3.0 can still import v1 invites, but older builds cannot import v2 invites), and admin-signed roster sync was added to the signaling protocol. Mixed-version peers can still connect at the mesh layer, but older peers will not participate in roster synchronization.&lt;/p&gt;

&lt;p&gt;The roster sync addition starts the move toward a managed network. An admin node can now push membership changes to all peers, so adding or removing a device from the mesh does not require each peer to manually update its configuration. The v0.2.x releases during the same week addressed specific deployment problems: &lt;a href=&#34;https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.22&#34;&gt;v0.2.22&lt;/a&gt; through &lt;a href=&#34;https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.28&#34;&gt;v0.2.28&lt;/a&gt; fixed Windows service management, added Android build scripts, and refined the LAN pairing flow.&lt;/p&gt;

&lt;h3 id=&#34;nospeak-launches-as-a-1-0-private-messenger-2&#34;&gt;nospeak launches as a 1.0 private messenger&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/psic4t/nospeak&#34;&gt;nospeak&lt;/a&gt;, a private messenger built on Nostr, shipped its &lt;a href=&#34;https://github.com/psic4t/nospeak/releases/tag/v1.0.0&#34;&gt;1.0.0&lt;/a&gt; release on March 27. The project includes one-on-one and group conversations, contact management, and a self-hostable architecture. One-on-one chats use &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; (Private Direct Messages), which combines &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-59/&#34;&gt;NIP-59&lt;/a&gt; (Gift Wrap) with &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; (Encrypted Payloads) to hide the sender from relays. For media, files are encrypted client-side with AES-256-GCM before upload to Blossom servers. The release also ships as a container image for self-hosting.&lt;/p&gt;

&lt;h3 id=&#34;flotilla-nostr-npub1jlrs53pkdfjnts29kveljul2sm0actt6n8dxrrzqcersttvcuv3qdjynqn-v1-7-0-adds-voice-rooms-and-email-login-2&#34;&gt;Flotilla (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1jlrs53pkdfjnts29kveljul2sm0actt6n8dxrrzqcersttvcuv3qdjynqn&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;hodlbod&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1jlr…ynqn&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) v1.7.0 adds voice rooms and email login&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://gitea.coracle.social/coracle/flotilla&#34;&gt;Flotilla&lt;/a&gt;, hodlbod&amp;#39;s Discord-like &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-29/&#34;&gt;NIP-29&lt;/a&gt; (Relay-based Groups) client built around the &amp;#34;relays as groups&amp;#34; model, shipped &lt;a href=&#34;https://gitea.coracle.social/coracle/flotilla/src/tag/1.7.0&#34;&gt;v1.7.0&lt;/a&gt; and &lt;a href=&#34;https://gitea.coracle.social/coracle/flotilla/src/tag/1.7.1&#34;&gt;v1.7.1&lt;/a&gt; on March 30 and 31. The headline feature is voice rooms, contributed by mplorentz. Users can now join voice calls within group channels, with a join dialog (&lt;a href=&#34;https://gitea.coracle.social/coracle/flotilla/pulls/109&#34;&gt;PR #109&lt;/a&gt;) that lets them select an audio input device and choose whether to join the voice call or just view the text chat. The dialog solves a UX problem from the previous iteration: entering a voice-enabled room previously forced microphone activation even when the user only wanted to read messages or check room settings.&lt;/p&gt;

&lt;p&gt;The same release adds email and password login as an alternative to Nostr key-based auth, proof-of-work on DMs, DM editing, redesigned relay onboarding and settings, Blossom support detection via &lt;code&gt;supported_nips&lt;/code&gt;, improved notification badges, Android push notification fallback, and file upload fixes on Android. v1.7.1 follows with a fix for pomade registration fallback when using an offline signer.&lt;/p&gt;

&lt;p&gt;Hodlbod is also building &lt;a href=&#34;https://gitea.coracle.social/coracle/caravel&#34;&gt;Caravel&lt;/a&gt;, a hosting manager and dashboard for zooid relays, which logged 40 commits this week in initial development.&lt;/p&gt;

&lt;h3 id=&#34;nostr-npub16jdfqgazrkapk0yrqm9rdxlnys7ck39c7zmdzxtxqlmmpxg04r0sd733sv-ships-marmot-powered-group-chats-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub16jdfqgazrkapk0yrqm9rdxlnys7ck39c7zmdzxtxqlmmpxg04r0sd733sv&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Luxas&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub16jd…33sv&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; ships Marmot-powered group chats&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/Spl0itable/NYM&#34;&gt;Nymchat&lt;/a&gt; (also known as NYM, Nostr Ynstant Messenger), the ephemeral chat client bridged with Bitchat, announced that all new group chats now use the &lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt; protocol for MLS-encrypted messaging. The integration uses kinds &lt;code&gt;443&lt;/code&gt;, &lt;code&gt;444&lt;/code&gt;, and &lt;code&gt;445&lt;/code&gt; for key packages, welcome messages, and group messages respectively, providing forward secrecy, post-compromise security, and zero metadata leakage. If a recipient cannot use MLS, Nymchat falls back to its earlier &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; (Private Direct Messages) group chat path, which is still end-to-end encrypted but lacks the ratchet-tree properties of MLS.&lt;/p&gt;

&lt;p&gt;The v3.55 and v3.56 series this week focused on group chat edge cases: loading on new devices, leave behavior, notification routing, and unread badge counts. The same cycle also patched an XSS vulnerability from unescaped HTML and added keyword and phrase blocking extended to user nicknames. This makes Nymchat yet another Marmot client joining &lt;a href=&#34;#white-noise-fixes-relay-churn-and-expands-client-controls&#34;&gt;White Noise&lt;/a&gt; and &lt;a href=&#34;#openchat-v024-through-v030&#34;&gt;OpenChat&lt;/a&gt;, broadening the set of apps that can exchange MLS-encrypted group messages over the same protocol.&lt;/p&gt;

&lt;h2 id=&#34;releases-8&#34;&gt;Releases&lt;/h2&gt;

&lt;h3 id=&#34;calendar-by-form-v1-0-0-2&#34;&gt;Calendar by Form* v1.0.0&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar&#34;&gt;Calendar by Form*&lt;/a&gt;, the decentralized calendar app built on &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-52/&#34;&gt;NIP-52&lt;/a&gt; (Calendar Events), reached &lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.0.0&#34;&gt;v1.0.0&lt;/a&gt; on March 29. The release adds private calendar lists using encrypted Nostr events (kind &lt;code&gt;32123&lt;/code&gt;) with &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; (Encrypted Payloads) self-encryption, so users can organize events into private collections without exposing the grouping to relays. The same release adds ICS intent handling for importing calendar data from other applications and invitation requests for sharing events between users.&lt;/p&gt;

&lt;h3 id=&#34;amber-v5-0-2-through-v5-0-4-2&#34;&gt;Amber v5.0.2 through v5.0.4&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/greenart7c3/Amber&#34;&gt;Amber&lt;/a&gt;, the &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-55/&#34;&gt;NIP-55&lt;/a&gt; (Android Signer Application) signer app, shipped three point releases: &lt;a href=&#34;https://github.com/greenart7c3/Amber/releases/tag/v5.0.2&#34;&gt;v5.0.2&lt;/a&gt;, &lt;a href=&#34;https://github.com/greenart7c3/Amber/releases/tag/v5.0.3&#34;&gt;v5.0.3&lt;/a&gt;, and &lt;a href=&#34;https://github.com/greenart7c3/Amber/releases/tag/v5.0.4&#34;&gt;v5.0.4&lt;/a&gt;. The most visible addition is mnemonic recovery phrase login (&lt;a href=&#34;https://github.com/greenart7c3/Amber/pull/358&#34;&gt;PR #358&lt;/a&gt;), which lets users restore their signer from a BIP39 seed phrase instead of requiring the raw nsec or ncryptsec string. &lt;a href=&#34;https://github.com/greenart7c3/Amber/pull/357&#34;&gt;PR #357&lt;/a&gt; adds a &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-42/&#34;&gt;NIP-42&lt;/a&gt; relay auth whitelist, so users can restrict which relays are allowed to request client authentication. &lt;a href=&#34;https://github.com/greenart7c3/Amber/pull/353&#34;&gt;PR #353&lt;/a&gt; adds encryption scope selection for decrypt permissions, letting users grant NIP-04-only or NIP-44-only decrypt access instead of a blanket permission. v5.0.4 fixes a bug where rejection was not respecting scoped encrypt and decrypt permissions and improves performance when receiving multiple bunker requests.&lt;/p&gt;

&lt;h3 id=&#34;aegis-nostr-npub179e5zckwq9vqsenc8ha9qv7p9vxwq20cq526ac67prts8kc4khmqu50zj8-v0-4-0-2&#34;&gt;Aegis (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub179e5zckwq9vqsenc8ha9qv7p9vxwq20cq526ac67prts8kc4khmqu50zj8&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;ZharlieW&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub179e…0zj8&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) v0.4.0&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/ZharlieW/Aegis&#34;&gt;Aegis&lt;/a&gt;, the cross-platform signer, shipped &lt;a href=&#34;https://github.com/ZharlieW/Aegis/releases/tag/v0.4.0&#34;&gt;v0.4.0&lt;/a&gt; on March 26. The release adds Full and Selective authorization modes in Settings and fixes multiple QR-scanning problems. Follow-up commits &lt;a href=&#34;https://github.com/ZharlieW/Aegis/commit/d4f799fe51dd82968d54f72ac77f2de29d0cfe6b&#34;&gt;d4f799f&lt;/a&gt;, &lt;a href=&#34;https://github.com/ZharlieW/Aegis/commit/3313af92e55e449ebc98fbd91a085bd444d716e7&#34;&gt;3313af9&lt;/a&gt;, &lt;a href=&#34;https://github.com/ZharlieW/Aegis/commit/3b214e4176f5dbe7f18690d0996e69dd151fe00f&#34;&gt;3b214e4&lt;/a&gt;, and &lt;a href=&#34;https://github.com/ZharlieW/Aegis/commit/e4f40b6f1f48c2dae1bb5e4246df26c26dba419e&#34;&gt;e4f40b6&lt;/a&gt; continue the same work with batch select controls, reusable batch selection stats, set-all-groups selection APIs, and per-permission usage statistics on the app permissions page.&lt;/p&gt;

&lt;h3 id=&#34;nostr-npub1g5qtwz2nh9q0mnw555kv787kh6lysds95522gzptre3qpvz9p20s83m80d-v0-2-7-through-v0-3-0-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1g5qtwz2nh9q0mnw555kv787kh6lysds95522gzptre3qpvz9p20s83m80d&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;nostrability&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1g5q…m80d&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; v0.2.7 through v0.3.0&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostrability/schemata&#34;&gt;Schemata&lt;/a&gt;, the JSON Schema definitions for validating Nostr event kinds, shipped four releases from &lt;a href=&#34;https://github.com/nostrability/schemata/releases/tag/v0.2.7&#34;&gt;v0.2.7&lt;/a&gt; through &lt;a href=&#34;https://github.com/nostrability/schemata/releases/tag/v0.3.0&#34;&gt;v0.3.0&lt;/a&gt; with 21 merged PRs. The v0.3.0 release brings pattern consistency fixes across relay URLs, hex IDs, MIME types, and BOLT-11 strings (&lt;a href=&#34;https://github.com/nostrability/schemata/pull/126&#34;&gt;PR #126&lt;/a&gt;), centralized relay URL patterns (&lt;a href=&#34;https://github.com/nostrability/schemata/pull/117&#34;&gt;PR #117&lt;/a&gt;), &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-19/&#34;&gt;NIP-19&lt;/a&gt; bech32 base type schemas (&lt;a href=&#34;https://github.com/nostrability/schemata/pull/118&#34;&gt;PR #118&lt;/a&gt;), and validation for kind 777 spell events (&lt;a href=&#34;https://github.com/nostrability/schemata/pull/125&#34;&gt;PR #125&lt;/a&gt;). The release pipeline now publishes a kind &lt;code&gt;1&lt;/code&gt; note to Nostr on each release (&lt;a href=&#34;https://github.com/nostrability/schemata/pull/120&#34;&gt;PR #120&lt;/a&gt;), so the project announces itself through the protocol it validates. Schemata now supports a dozen languages beyond the canonical JS/TS package: Rust, Go, Python, Kotlin, Java, Swift, Dart, PHP, C#/.NET, C&#43;&#43;, Ruby, and C.&lt;/p&gt;

&lt;p&gt;Alongside Schemata, the team published &lt;a href=&#34;https://github.com/nostrability/schemata-codegen&#34;&gt;schemata-codegen&lt;/a&gt;, an experimental code generator that takes a different approach to the same validation problem. Where Schemata&amp;#39;s validator packages require a JSON Schema runtime dependency, schemata-codegen ports schemas directly into typed native-language constructs (typed tag tuples, kind interfaces, and runtime validators), removing the need for a validator library at runtime. The &lt;a href=&#34;https://github.com/nostrability/schemata-codegen/blob/main/CODEGEN-VS-VALIDATORS.md&#34;&gt;codegen-vs-validators comparison&lt;/a&gt; documents when each approach fits.&lt;/p&gt;

&lt;h3 id=&#34;bigbrotr-v6-5-0-through-v6-5-4-2&#34;&gt;BigBrotr v6.5.0 through v6.5.4&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/BigBrotr/bigbrotr&#34;&gt;BigBrotr&lt;/a&gt;, the relay analytics platform, shipped five releases from &lt;a href=&#34;https://github.com/BigBrotr/bigbrotr/releases/tag/v6.5.0&#34;&gt;v6.5.0&lt;/a&gt; through &lt;a href=&#34;https://github.com/BigBrotr/bigbrotr/releases/tag/v6.5.4&#34;&gt;v6.5.4&lt;/a&gt;. The v6.5.0 release centralizes relay URL validation with a &lt;code&gt;parse_relay_url()&lt;/code&gt; factory function and adds URL length checking and path sanitization. The monitoring infrastructure also received fixes: announcement events now include geohash location tags (following &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-52/&#34;&gt;NIP-52&lt;/a&gt;), and timeout protection was added to the Geo/Net &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-66/&#34;&gt;NIP-66&lt;/a&gt; metadata tests that had no deadline and could hang indefinitely. &lt;a href=&#34;https://github.com/BigBrotr/bigbrotr/pull/410&#34;&gt;PR #410&lt;/a&gt; upgrades PostgreSQL from 16 to 18, which brings the async I/O subsystem and improved WAL throughput to the relay analytics pipeline.&lt;/p&gt;

&lt;h3 id=&#34;nostr-npub1kpt95rv4q3mcz8e4lamwtxq7men6jprf49l7asfac9lnv2gda0lqdknhmz-adds-nip-50-profile-search-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1kpt95rv4q3mcz8e4lamwtxq7men6jprf49l7asfac9lnv2gda0lqdknhmz&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Vertex&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1kpt…nhmz&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; adds NIP-50 profile search&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://vertexlab.io&#34;&gt;Vertex Lab&lt;/a&gt;, the team behind &lt;a href=&#34;https://github.com/vertex-lab/npub.world&#34;&gt;npub.world&lt;/a&gt; and the &lt;a href=&#34;https://github.com/vertex-lab/vertex&#34;&gt;Vertex&lt;/a&gt; Web of Trust engine, announced that &lt;code&gt;wss://relay.vertexlab.io&lt;/code&gt; now supports &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-50/&#34;&gt;NIP-50&lt;/a&gt; (Search) for profile queries. NIP-50 extends the standard Nostr &lt;code&gt;REQ&lt;/code&gt; filter with a &lt;code&gt;search&lt;/code&gt; field, letting clients send full-text search queries to relays that support indexing. Adding profile search to a relay that already serves Web of Trust data means clients connected to &lt;code&gt;relay.vertexlab.io&lt;/code&gt; can discover users by name or description without a separate search service.&lt;/p&gt;

&lt;h3 id=&#34;hashtree-nostr-npub1klgggm0e8jmjzde5sswx0ger4fzmkfjqy9erdsq79fqsz80kzlzsz9ky7h-v0-2-17-and-v0-2-18-ship-webrtc-mesh-and-iris-desktop-2&#34;&gt;Hashtree (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1klgggm0e8jmjzde5sswx0ger4fzmkfjqy9erdsq79fqsz80kzlzsz9ky7h&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;npub1klgggm0e8jmjzde5sswx0ger4fzmkfjqy9erdsq79fqsz80kzlzsz9ky7h&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1klg…ky7h&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) v0.2.17 and v0.2.18 ship WebRTC mesh and Iris Desktop&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/mmalmi/hashtree&#34;&gt;Hashtree&lt;/a&gt;, mmalmi&amp;#39;s content-addressed blob storage system that publishes Merkle roots on Nostr, shipped &lt;a href=&#34;https://github.com/mmalmi/hashtree/releases/tag/v0.2.17&#34;&gt;v0.2.17&lt;/a&gt; and &lt;a href=&#34;https://github.com/mmalmi/hashtree/releases/tag/v0.2.18&#34;&gt;v0.2.18&lt;/a&gt; on March 31. The two releases cap a 30-commit sprint that adds three distinct capabilities. First, the &lt;code&gt;hashtree-webrtc&lt;/code&gt; crate (renamed to &lt;code&gt;hashtree-network&lt;/code&gt; in v0.2.18) adds WebRTC-based peer-to-peer blob distribution with unified mesh signaling across the Rust CLI, the simulation harness, and the TypeScript client. Second, the release pipeline now builds Windows artifacts (CLI zip and Iris installer), bringing cross-platform coverage to macOS, Linux, and Windows. Third, both releases bundle Iris Desktop 0.1.0, mmalmi&amp;#39;s Nostr social client, as AppImage, .deb, and Windows installer assets alongside the hashtree CLI. &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-02-18-newsletter/&#34;&gt;Hashtree was first covered in Newsletter #10&lt;/a&gt; when it launched as a filesystem-based &lt;a href=&#34;https://nostrcompass.org/en/topics/blossom/&#34;&gt;Blossom&lt;/a&gt;-compatible store. The WebRTC layer is the first step toward peer-to-peer content distribution without depending on centralized Blossom servers.&lt;/p&gt;

&lt;h3 id=&#34;nostr-mail-client-v0-7-0-through-v0-7-2-2&#34;&gt;Nostr Mail Client v0.7.0 through v0.7.2&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nogringo/nostr-mail-client&#34;&gt;Nostr Mail Client&lt;/a&gt;, the Flutter mail-style client built on Nostr identities, shipped &lt;a href=&#34;https://github.com/nogringo/nostr-mail-client/releases/tag/v0.7.0&#34;&gt;v0.7.0&lt;/a&gt;, &lt;a href=&#34;https://github.com/nogringo/nostr-mail-client/releases/tag/v0.7.1&#34;&gt;v0.7.1&lt;/a&gt;, and &lt;a href=&#34;https://github.com/nogringo/nostr-mail-client/releases/tag/v0.7.2&#34;&gt;v0.7.2&lt;/a&gt; in three days. The visible product work centered on onboarding (&lt;a href=&#34;https://github.com/nogringo/nostr-mail-client/pull/9&#34;&gt;PR #9&lt;/a&gt;) and profile editing (&lt;a href=&#34;https://github.com/nogringo/nostr-mail-client/pull/10&#34;&gt;PR #10&lt;/a&gt;), which are basic pieces for any client trying to present Nostr as a mailbox. The later point releases packaged that work into fresh Android and Linux builds.&lt;/p&gt;

&lt;h3 id=&#34;wisp-nostr-npub1utx00neqgqln72j22kej3ux7803c2k986henvvha4thuwfkper4s7r50e8-v0-14-0-through-v0-16-1-2&#34;&gt;Wisp (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1utx00neqgqln72j22kej3ux7803c2k986henvvha4thuwfkper4s7r50e8&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;utxo the webmaster 🧑‍💻&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1utx…50e8&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) v0.14.0 through v0.16.1&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/barrydeen/wisp&#34;&gt;Wisp&lt;/a&gt;, the Android Nostr client, shipped 13 more releases from &lt;a href=&#34;https://github.com/barrydeen/wisp/releases/tag/v0.14.0-beta&#34;&gt;v0.14.0-beta&lt;/a&gt; through &lt;a href=&#34;https://github.com/barrydeen/wisp/releases/tag/v0.16.3-beta&#34;&gt;v0.16.3-beta&lt;/a&gt;. The work this week includes NIP-17 rumor JSON fixes (&lt;a href=&#34;https://github.com/barrydeen/wisp/pull/385&#34;&gt;PR #385&lt;/a&gt;), repost badges on gallery cards (&lt;a href=&#34;https://github.com/barrydeen/wisp/pull/383&#34;&gt;PR #383&lt;/a&gt;), expandable reaction details (&lt;a href=&#34;https://github.com/barrydeen/wisp/pull/382&#34;&gt;PR #382&lt;/a&gt;), persistent emoji sets (&lt;a href=&#34;https://github.com/barrydeen/wisp/pull/381&#34;&gt;PR #381&lt;/a&gt;), and video autoplay controls (&lt;a href=&#34;https://github.com/barrydeen/wisp/pull/380&#34;&gt;PR #380&lt;/a&gt;). The latest &lt;a href=&#34;https://github.com/barrydeen/wisp/releases/tag/v0.16.3-beta&#34;&gt;v0.16.3-beta&lt;/a&gt; also fixes custom emoji shortcodes with hyphens and missing emoji tags.&lt;/p&gt;

&lt;h3 id=&#34;nostr-npub12vkcxr0luzwp8e673v29eqjhrr7p9vqq8asav85swaepclllj09sylpugg-3-0-17-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub12vkcxr0luzwp8e673v29eqjhrr7p9vqq8asav85swaepclllj09sylpugg&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;primal&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub12vk…pugg&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; 3.0.17&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app&#34;&gt;Primal Android&lt;/a&gt; shipped &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/releases/tag/3.0.17&#34;&gt;3.0.17&lt;/a&gt; on March 24. &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/1000&#34;&gt;PR #1000&lt;/a&gt; maps WalletException types to error codes in NWC responses, giving &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-47/&#34;&gt;NIP-47&lt;/a&gt; clients structured failure information instead of generic errors. &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/995&#34;&gt;PR #995&lt;/a&gt; fixes poll zap votes appearing as Top Zaps, and &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/998&#34;&gt;PR #998&lt;/a&gt; hides wallet balance and action buttons when no wallet is configured.&lt;/p&gt;

&lt;h3 id=&#34;openchat-nostr-npub1nwt2g6fkshuj4udrs9zxr8992dyp75s9qx647kxaue98trzqqmssrxx05y-v0-2-4-through-v0-3-0-2&#34;&gt;OpenChat (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1nwt2g6fkshuj4udrs9zxr8992dyp75s9qx647kxaue98trzqqmssrxx05y&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;The Dude&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1nwt…x05y&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) v0.2.4 through v0.3.0&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/DavidGershony/openChat&#34;&gt;OpenChat&lt;/a&gt;, the Avalonia-based chat client built on the &lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt; stack, shipped six releases from &lt;a href=&#34;https://github.com/DavidGershony/openChat/releases/tag/v0.2.4&#34;&gt;v0.2.4&lt;/a&gt; through &lt;a href=&#34;https://github.com/DavidGershony/openChat/releases/tag/v0.3.0&#34;&gt;v0.3.0&lt;/a&gt; in four days. The commit log tells the story of a client filling in the gaps between &amp;#34;Marmot works&amp;#34; and &amp;#34;someone can actually use this daily.&amp;#34; &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-42/&#34;&gt;NIP-42&lt;/a&gt; relay authentication landed, followed by a relay picker UI with duplicate event filtering. Voice messages gained pause, resume, seek, and time display. The signer path was hardened: Amber connections were fixed with an updated &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; URI format, the WebSocket auto-reconnects before sending requests, and duplicate Amber requests are now caught by checking for replayed responses. On the storage side, Linux and macOS got AES-256-GCM secure storage with file-backed keys, and user metadata fetching now uses &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-65/&#34;&gt;NIP-65&lt;/a&gt; relay discovery and caches results in a local database.&lt;/p&gt;

&lt;h3 id=&#34;nostr-npub17uvdffljczhlpjfvfj0q30dmh4ugh8wlzm8u6w64y2v4ts7fqsqqj28tr4-signer-1-1-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub17uvdffljczhlpjfvfj0q30dmh4ugh8wlzm8u6w64y2v4ts7fqsqqj28tr4&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Frostr&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub17uv…8tr4&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; Signer 1.1&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/FROSTR-ORG/igloo-ios-prototype&#34;&gt;Igloo&lt;/a&gt;, the iOS &lt;a href=&#34;https://nostrcompass.org/en/topics/frost/&#34;&gt;FROST&lt;/a&gt; threshold signer from the FROSTR project, shipped &lt;a href=&#34;https://github.com/FROSTR-ORG/igloo-ios-prototype/releases/tag/v1.1&#34;&gt;v1.1&lt;/a&gt; on March 28. FROST (Flexible Round-Optimized Schnorr Threshold) signatures let a group of signers collectively control a Nostr keypair, where any t-of-n participants can sign an event without any single party holding the full private key. Igloo is one of the first mobile implementations of this approach for Nostr.&lt;/p&gt;

&lt;h3 id=&#34;nak-nostr-npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6-v0-19-3-and-v0-19-4-2&#34;&gt;nak (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;fiatjaf&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub180c…h6w6&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) v0.19.3 and v0.19.4&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/fiatjaf/nak&#34;&gt;nak&lt;/a&gt;, fiatjaf&amp;#39;s command-line Nostr toolkit, shipped &lt;a href=&#34;https://github.com/fiatjaf/nak/releases/tag/v0.19.3&#34;&gt;v0.19.3&lt;/a&gt; and &lt;a href=&#34;https://github.com/fiatjaf/nak/releases/tag/v0.19.4&#34;&gt;v0.19.4&lt;/a&gt; on March 26 and 30. Both releases fix panic conditions: &lt;a href=&#34;https://github.com/fiatjaf/nak/pull/118&#34;&gt;PR #118&lt;/a&gt; replaces &lt;code&gt;strings.Split&lt;/code&gt; with &lt;code&gt;strings.Cut&lt;/code&gt; to prevent a potential out-of-bounds access, and &lt;a href=&#34;https://github.com/fiatjaf/nak/pull/119&#34;&gt;PR #119&lt;/a&gt; prevents the same class of panic in curl flag parsing.&lt;/p&gt;

&lt;h3 id=&#34;flora-v0-3-0-2&#34;&gt;Flora v0.3.0&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/shawnyeager/flora-extension&#34;&gt;Flora&lt;/a&gt;, a Chrome extension for decentralized screen recording and sharing on Nostr, shipped &lt;a href=&#34;https://github.com/shawnyeager/flora-extension/releases/tag/v0.3.0&#34;&gt;v0.3.0&lt;/a&gt;. The release adds private encrypted video sharing with public, unlisted, and private modes. Private recordings are encrypted with AES-256-GCM and delivered to recipients via &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; (Private Direct Messages), so the recording never touches a server in cleartext.&lt;/p&gt;

&lt;h3 id=&#34;nostr-npub1yzvxlwp7wawed5vgefwfmugvumtp8c8t0etk3g8sky4n0ndvyxfslnm9n4-mobile-2-0-3-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1yzvxlwp7wawed5vgefwfmugvumtp8c8t0etk3g8sky4n0ndvyxfslnm9n4&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;npub1yzvxlwp7wawed5vgefwfmugvumtp8c8t0etk3g8sky4n0ndvyxfslnm9n4&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1yzv…m9n4&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; Mobile 2.0.3&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/YakiHonne/mobile-app&#34;&gt;YakiHonne&lt;/a&gt;, the mobile Nostr client, shipped &lt;a href=&#34;https://github.com/YakiHonne/mobile-app/releases/tag/YakiHonne-2.0.3&#34;&gt;2.0.3&lt;/a&gt; with relay reviews and join requests, expanded nested replies, auto-translation for notes, and NWC multi-relay support.&lt;/p&gt;

&lt;h2 id=&#34;project-updates-2&#34;&gt;Project Updates&lt;/h2&gt;

&lt;h3 id=&#34;nostr-npub1xxdd8eusvdxmaph3fkuu9x2mymhrcc3ghe2l38zv0l4f4nqp659qskkt7a-adds-zap-polls-and-nostr-npub16ndruwfg7dsdhnp3w8zvqrg0r2rn3wucnttgrg5acm2lhqpkepkqncr9qr-payment-verification-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1xxdd8eusvdxmaph3fkuu9x2mymhrcc3ghe2l38zv0l4f4nqp659qskkt7a&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;ZapCooking&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1xxd…kt7a&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; adds zap polls and &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub16ndruwfg7dsdhnp3w8zvqrg0r2rn3wucnttgrg5acm2lhqpkepkqncr9qr&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;BrantaOps&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub16nd…r9qr&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; payment verification&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/zapcooking/frontend&#34;&gt;Zap Cooking&lt;/a&gt;, the recipe and content platform, merged 11 PRs this week focused on interactive content and payment flows. &lt;a href=&#34;https://github.com/zapcooking/frontend/pull/277&#34;&gt;PR #277&lt;/a&gt; adds zap polls (kind 6969), where users vote by sending sats and can view voter lists with profile pictures. &lt;a href=&#34;https://github.com/zapcooking/frontend/pull/274&#34;&gt;PR #274&lt;/a&gt; redesigns the poll UX so the voting interface sits more naturally in the feed.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/zapcooking/frontend/pull/276&#34;&gt;PR #276&lt;/a&gt; adds camera-based QR scanning to the Send Payment flow and integrates &lt;a href=&#34;https://branta.pro/&#34;&gt;Branta&lt;/a&gt;, a verification service that checks whether a payment destination is legitimate before send. Branta checks payment destinations against phishing, address swaps, and man-in-the-middle interception before send. In Zap Cooking&amp;#39;s implementation, a Branta-verified platform name and logo show up directly in the payment flow, and Branta-enabled QR codes can carry &lt;code&gt;branta_id&lt;/code&gt; and &lt;code&gt;branta_secret&lt;/code&gt; parameters so the wallet can verify the destination from the scanned code itself.&lt;/p&gt;

&lt;h3 id=&#34;divine-nostr-npub1wmr34t36fy03m8hvgl96zl3znndyzyaqhwmwdtshwmtkg03fetaqhjg240-lays-groundwork-for-unified-search-and-hardens-video-delivery-2&#34;&gt;diVine (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1wmr34t36fy03m8hvgl96zl3znndyzyaqhwmwdtshwmtkg03fetaqhjg240&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;rabble&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1wmr…g240&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) lays groundwork for unified search and hardens video delivery&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/divinevideo/divine-mobile&#34;&gt;diVine&lt;/a&gt;, the short-form video client, spent the week tightening search, feed navigation, playback recovery, and upload behavior. &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/2540&#34;&gt;PR #2540&lt;/a&gt; lays down the foundation for a unified search screen, with grouped sections for Videos, People, and Tags. &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/2623&#34;&gt;PR #2623&lt;/a&gt; hardens pagination across profile feeds, inbox, notifications, discover lists, classic vines, search, and the composable grid feeds by moving them onto a shared pagination controller.&lt;/p&gt;

&lt;p&gt;Video delivery also got several concrete fixes. &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/2643&#34;&gt;PR #2643&lt;/a&gt; retries Divine-hosted derivative sources in order and falls back to the raw blob before surfacing a playback error, so transient failures on one source do not kill playback immediately. &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/2634&#34;&gt;PR #2634&lt;/a&gt; keeps resumable uploads on the Divine-owned path when capability probing fails transiently, reducing broken uploads from short network faults. &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/2637&#34;&gt;PR #2637&lt;/a&gt; also changes the sensitive-content gate so videos are only hard-gated for actual warning labels, not merely for creator-supplied content warning labels.&lt;/p&gt;

&lt;h3 id=&#34;nostr-npub15dc33fyg3cpd9r58vlqge2hh8dy6hkkrjxkhluv2xpyfreqkmsesesyv6e-adds-custom-storefronts-and-nostr-npub1wm7wcrsx8q6378gwphzwhtmd60t8gpqjd4ny23m8gpc0x96jw0vs2jpud0-keeps-shipping-marketplace-work-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub15dc33fyg3cpd9r58vlqge2hh8dy6hkkrjxkhluv2xpyfreqkmsesesyv6e&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Shopstr Markets&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub15dc…yv6e&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; adds custom storefronts and &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1wm7wcrsx8q6378gwphzwhtmd60t8gpqjd4ny23m8gpc0x96jw0vs2jpud0&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;milkmarket&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1wm7…pud0&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; keeps shipping marketplace work&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/shopstr-eng/shopstr&#34;&gt;Shopstr&lt;/a&gt;, the Nostr-based marketplace, merged &lt;a href=&#34;https://github.com/shopstr-eng/shopstr/pull/245&#34;&gt;PR #245&lt;/a&gt; adding custom storefronts. That gives sellers a more distinct home surface instead of forcing every listing into the same generic presentation.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/shopstr-eng/milk-market&#34;&gt;Milk Market&lt;/a&gt;, a dedicated marketplace for milk, continued with storefront optimizations (&lt;a href=&#34;https://github.com/shopstr-eng/milk-market/pull/18&#34;&gt;PR #18&lt;/a&gt;), account recovery (&lt;a href=&#34;https://github.com/shopstr-eng/milk-market/pull/17&#34;&gt;PR #17&lt;/a&gt;), beef splits (&lt;a href=&#34;https://github.com/shopstr-eng/milk-market/pull/15&#34;&gt;PR #15&lt;/a&gt;), and MCP tool typing fixes (&lt;a href=&#34;https://github.com/shopstr-eng/milk-market/pull/16&#34;&gt;PR #16&lt;/a&gt;).&lt;/p&gt;

&lt;h3 id=&#34;nostr-npub18m76awca3y37hkvuneavuw6pjj4525fw90necxmadrvjg0sdy6qsngq955-adds-sound-effects-and-extends-its-updater-path-toward-android-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub18m76awca3y37hkvuneavuw6pjj4525fw90necxmadrvjg0sdy6qsngq955&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;damus&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub18m7…q955&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; adds sound effects and extends its updater path toward Android&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/damus-io/notedeck&#34;&gt;Notedeck&lt;/a&gt;, the desktop client from the Damus team, merged &lt;a href=&#34;https://github.com/damus-io/notedeck/pull/1412&#34;&gt;PR #1412&lt;/a&gt; adding a sound effects subsystem with UI interaction sounds using rodio, and &lt;a href=&#34;https://github.com/damus-io/notedeck/pull/1399&#34;&gt;PR #1399&lt;/a&gt; with Agentium updates including a CLI title flag and collapsible session folders. An open &lt;a href=&#34;https://github.com/damus-io/notedeck/pull/1417&#34;&gt;PR #1417&lt;/a&gt; proposes APK self-update via Nostr/Zapstore on Android, building on &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-03-18-newsletter/#notedeck-moves-release-discovery-onto-nostr&#34;&gt;Notedeck&amp;#39;s Nostr-native updater work from Newsletter #14&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&#34;nostria-nostr-npub1zl3g38a6qypp6py2z07shggg45cu8qex992xpss7d8zrl28mu52s4cjajh-adds-repost-relay-hints-and-nip-98-alignment-2&#34;&gt;Nostria (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1zl3g38a6qypp6py2z07shggg45cu8qex992xpss7d8zrl28mu52s4cjajh&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;sondreb&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1zl3…jajh&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) adds repost relay hints and NIP-98 alignment&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostria-app/nostria&#34;&gt;Nostria&lt;/a&gt; merged &lt;a href=&#34;https://github.com/nostria-app/nostria/pull/583&#34;&gt;PR #583&lt;/a&gt; adding &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-18/&#34;&gt;NIP-18&lt;/a&gt; (Reposts) relay hints to repost &lt;code&gt;e&lt;/code&gt; tags for kind 6 and kind 16 events, &lt;a href=&#34;https://github.com/nostria-app/nostria/pull/582&#34;&gt;PR #582&lt;/a&gt; aligning Brainstorm HTTP auth (kind 27235) with &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-98/&#34;&gt;NIP-98&lt;/a&gt; (HTTP Auth) required tags, and &lt;a href=&#34;https://github.com/nostria-app/nostria/pull/576&#34;&gt;PR #576&lt;/a&gt; adding Schemata schema validation tests. The NIP-98 change means Nostria can authenticate to external services using the same HTTP auth format other clients use.&lt;/p&gt;

&lt;h3 id=&#34;nostr-doc-adds-desktop-packaging-and-offline-first-work-2&#34;&gt;Nostr-Doc adds desktop packaging and offline-first work&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/formstr-hq/nostr-docs&#34;&gt;Nostr-Doc&lt;/a&gt;, the collaborative editor from Form*, had a busy week of packaging and editor work. &lt;a href=&#34;https://github.com/formstr-hq/nostr-docs/commit/fcdc00a564c8d76f094c586b06efce07592a60e4&#34;&gt;commit fcdc00a&lt;/a&gt; adds a desktop app, &lt;a href=&#34;https://github.com/formstr-hq/nostr-docs/commit/3977a8eb2e62b84a67de756c2776e14de8470927&#34;&gt;commit 3977a8e&lt;/a&gt; starts native app work, and &lt;a href=&#34;https://github.com/formstr-hq/nostr-docs/commit/413a030f5b47fb8e32a5dff81bcef557ad9b5869&#34;&gt;commit 413a030&lt;/a&gt; pushes the app toward offline-first behavior. On the editor side, &lt;a href=&#34;https://github.com/formstr-hq/nostr-docs/commit/1855ce86ee83ad504e14e47d9c339baffb114786&#34;&gt;commit 1855ce8&lt;/a&gt; adds Ctrl&#43;S save, save warnings, link preview fixes, and corrected strikethrough rendering.&lt;/p&gt;

&lt;h3 id=&#34;rust-nostr-optimizes-nip-21-parsing-and-adds-relay-side-nip-62-support-2&#34;&gt;rust-nostr optimizes NIP-21 parsing and adds relay-side NIP-62 support&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/rust-nostr/nostr&#34;&gt;rust-nostr&lt;/a&gt; merged eight PRs. The most notable is &lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1308&#34;&gt;PR #1308&lt;/a&gt;, which optimizes &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/21.md&#34;&gt;NIP-21&lt;/a&gt; URI parsing in &lt;code&gt;PublicKey::parse&lt;/code&gt; by aligning it with standard bech32 parsing performance. Previously NIP-21 URIs took roughly twice as long to parse as raw bech32 keys. The project also has four open PRs adding relay-specific &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-62/&#34;&gt;NIP-62&lt;/a&gt; (Request to Vanish) support across the memory, LMDB, SQLite, and database test backends (&lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1315&#34;&gt;PR #1315&lt;/a&gt;, &lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1316&#34;&gt;PR #1316&lt;/a&gt;, &lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1317&#34;&gt;PR #1317&lt;/a&gt;, &lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1318&#34;&gt;PR #1318&lt;/a&gt;).&lt;/p&gt;

&lt;h3 id=&#34;nostr-tools-adds-bunker-relay-control-and-fixes-nip-47-multi-relay-parsing-2&#34;&gt;nostr-tools adds bunker relay control and fixes NIP-47 multi-relay parsing&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nbd-wtf/nostr-tools&#34;&gt;nostr-tools&lt;/a&gt; merged &lt;a href=&#34;https://github.com/nbd-wtf/nostr-tools/pull/530&#34;&gt;PR #530&lt;/a&gt; adding &lt;code&gt;skipSwitchRelays&lt;/code&gt; to BunkerSignerParams for manual relay management, and &lt;a href=&#34;https://github.com/nbd-wtf/nostr-tools/pull/529&#34;&gt;PR #529&lt;/a&gt; fixing &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-47/&#34;&gt;NIP-47&lt;/a&gt; (Nostr Wallet Connect) connection string parsing to support multiple relays as the spec allows.&lt;/p&gt;

&lt;h3 id=&#34;nostrability-integrates-sherlock-audit-data-and-publishes-schemata-overview-2&#34;&gt;Nostrability integrates Sherlock audit data and publishes Schemata overview&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostrability/nostrability&#34;&gt;Nostrability&lt;/a&gt;, the interoperability tracker for Nostr clients, merged 14 PRs. &lt;a href=&#34;https://github.com/nostrability/nostrability/pull/306&#34;&gt;PR #306&lt;/a&gt; integrates Sherlock scan statistics into the dashboard. Sherlock is Nostrability&amp;#39;s automated audit tool that connects to Nostr clients, captures the events they publish, and validates each event against the Schemata JSON Schema definitions to detect spec violations. The dashboard now shows per-client schema fail rates (&lt;a href=&#34;https://github.com/nostrability/nostrability/pull/315&#34;&gt;PR #315&lt;/a&gt;) so developers can see which event kinds their client gets wrong. &lt;a href=&#34;https://github.com/nostrability/nostrability/pull/323&#34;&gt;PR #323&lt;/a&gt; overhauls the Nostr publish workflow so release announcements run as a separate job that cannot be cancelled by earlier CI steps.&lt;/p&gt;

&lt;p&gt;elsat also published &lt;a href=&#34;https://njump.me/naddr1qvzqqqr4gupzq96n3hp2vfmf6z2y8uvvxl97xk86kkalnqghx4p25lzl79c76a7yqy2hwumn8ghj7un9d3shjtnyv9kh2uewd9hj7qgwwaehxw309ahx7uewd3hkctcqz4fnx4rkw3x57nrcwdn8zt22xd982jehfptsgqtrww&#34;&gt;Schemata for nostr devs&lt;/a&gt; on March 30, describing how schemata, schemata-codegen, and Sherlock fit together and giving current coverage numbers: 179 event kind schemas across 65 NIPs, 154 tag schemas, 13 protocol messages, and 310 sample events.&lt;/p&gt;

&lt;h3 id=&#34;nalgorithm-nostr-npub1m2mvvpjugwdehtaskrcl7ksvdqnnhnjur9v6g9v266nss504q7mqvlr8p9-adds-digest-generation-and-local-score-caching-2&#34;&gt;Nalgorithm (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1m2mvvpjugwdehtaskrcl7ksvdqnnhnjur9v6g9v266nss504q7mqvlr8p9&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Juraj&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1m2m…r8p9&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) adds digest generation and local score caching&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/jooray/nalgorithm&#34;&gt;Nalgorithm&lt;/a&gt;, a new relevance-ranked Nostr feed project, started public development this week. &lt;a href=&#34;https://github.com/jooray/nalgorithm/commit/cf6c501e754ef95a1b4fecc1a76288471a101f43&#34;&gt;commit cf6c501&lt;/a&gt; lays down the initial web app that fetches posts from follows and scores them against a user-defined preference prompt. &lt;a href=&#34;https://github.com/jooray/nalgorithm/commit/8e931b6ae85d470e73603752134ff49b7ba4bb86&#34;&gt;commit 8e931b6&lt;/a&gt; adds a CLI digest tool that turns top-ranked posts into a spoken-word summary, while &lt;a href=&#34;https://github.com/jooray/nalgorithm/commit/4cb9c635489a9a3429e8d71f3861dc2a11624153&#34;&gt;commit 4cb9c63&lt;/a&gt; adds file-based score caching and incremental learned-prompt evolution from recent likes. &lt;a href=&#34;https://github.com/jooray/nalgorithm/commit/c2edfb8b89fadbe0028c3f5729bda7e23b2e3c03&#34;&gt;commit c2edfb8&lt;/a&gt; also stops caching fallback scores from failed batches, so a transient scoring failure does not permanently flatten a post&amp;#39;s rank.&lt;/p&gt;

&lt;h3 id=&#34;tenex-nostr-npub1l2vyh47mk2p0qlsku7hg0vn29faehy9hy34ygaclpn66ukqp3afqutajft-adds-rag-vector-store-and-targeted-mcp-startup-2&#34;&gt;TENEX (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1l2vyh47mk2p0qlsku7hg0vn29faehy9hy34ygaclpn66ukqp3afqutajft&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;PABLOF7z&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1l2v…ajft&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) adds RAG vector store and targeted MCP startup&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/tenex-chat/tenex&#34;&gt;TENEX&lt;/a&gt;, the Nostr-native agent framework that bridges AI agents to Nostr channels via Telegram, merged seven PRs this week. &lt;a href=&#34;https://github.com/tenex-chat/tenex/pull/101&#34;&gt;PR #101&lt;/a&gt; adds a pluggable vector store abstraction with SQLite-vec, LanceDB, and Qdrant backends, giving agents retrieval-augmented generation without locking into one vector database. &lt;a href=&#34;https://github.com/tenex-chat/tenex/pull/102&#34;&gt;PR #102&lt;/a&gt; makes MCP startup targeted: only MCP servers whose tools an agent actually uses are started, instead of eagerly launching all servers on first execution. &lt;a href=&#34;https://github.com/tenex-chat/tenex/pull/100&#34;&gt;PR #100&lt;/a&gt; adds a &lt;code&gt;send_message&lt;/code&gt; tool so agents with Telegram channel bindings can proactively push messages instead of only responding to incoming ones. &lt;a href=&#34;https://github.com/tenex-chat/tenex/pull/106&#34;&gt;PR #106&lt;/a&gt; avoids a subprocess spawn that triggered a 9GB Bun/JSC memory pre-allocation by reading &lt;code&gt;.git/HEAD&lt;/code&gt; directly instead of running &lt;code&gt;git branch&lt;/code&gt;.&lt;/p&gt;

&lt;h3 id=&#34;dart-ndk-nostr-npub1relaystr0ng75ecpd8av2v35kwf3a86vlrr3c4gs02p3gvy57haaqgt3a6p-moves-amber-signer-and-adds-alby-go-1-click-2&#34;&gt;Dart NDK (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1relaystr0ng75ecpd8av2v35kwf3a86vlrr3c4gs02p3gvy57haaqgt3a6p&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;npub1relaystr0ng75ecpd8av2v35kwf3a86vlrr3c4gs02p3gvy57haaqgt3a6p&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1rel…3a6p&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) moves Amber signer and adds Alby Go 1-click&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/relaystr/ndk&#34;&gt;Dart NDK&lt;/a&gt;, the Flutter Nostr development kit, shipped 11 merged PRs. &lt;a href=&#34;https://github.com/relaystr/ndk/pull/525&#34;&gt;PR #525&lt;/a&gt; moves Amber signer support into the ndk_flutter package, and &lt;a href=&#34;https://github.com/relaystr/ndk/pull/552&#34;&gt;PR #552&lt;/a&gt; adds Alby Go one-click wallet connection to the sample app. &lt;a href=&#34;https://github.com/relaystr/ndk/pull/502&#34;&gt;PR #502&lt;/a&gt; adds an install.sh script for the CLI, and &lt;a href=&#34;https://github.com/relaystr/ndk/pull/523&#34;&gt;PR #523&lt;/a&gt; removes the Rust verifier dependency in favor of native asset handling.&lt;/p&gt;

&lt;h2 id=&#34;protocol-and-spec-work-17&#34;&gt;Protocol and Spec Work&lt;/h2&gt;

&lt;h3 id=&#34;marmot-moves-keypackages-to-addressable-events-and-tightens-push-notifications-2&#34;&gt;Marmot moves KeyPackages to addressable events and tightens push notifications&lt;/h3&gt;

&lt;p&gt;The &lt;a href=&#34;https://github.com/marmot-protocol/marmot&#34;&gt;Marmot specification&lt;/a&gt; merged four PRs that change how the protocol handles key material and group membership. &lt;a href=&#34;https://github.com/marmot-protocol/marmot/pull/54&#34;&gt;PR #54&lt;/a&gt; migrates KeyPackage events from regular &lt;code&gt;kind:443&lt;/code&gt; to addressable &lt;code&gt;kind:30443&lt;/code&gt; with a &lt;code&gt;d&lt;/code&gt; tag, eliminating the need for &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-09/&#34;&gt;NIP-09&lt;/a&gt; event deletion during key rotation. Addressable events overwrite in place, making rotation self-contained. &lt;a href=&#34;https://github.com/marmot-protocol/marmot/pull/57&#34;&gt;PR #57&lt;/a&gt; allows non-admin users to commit SelfRemove proposals (voluntary group departure), and &lt;a href=&#34;https://github.com/marmot-protocol/marmot/pull/62&#34;&gt;PR #62&lt;/a&gt; requires admins to relinquish admin status before using SelfRemove, preventing an admin from disappearing while still holding elevated privileges.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/marmot-protocol/marmot/pull/61&#34;&gt;PR #61&lt;/a&gt; tightens the &lt;a href=&#34;https://nostrcompass.org/en/topics/mip-05/&#34;&gt;MIP-05&lt;/a&gt; push notification format, making the single-blob base64 encoding, versioning, token wire format, and x-only key usage explicit. The effect is one defined wire representation for token blobs and x-only keys across spec, client libraries, and app backends. Implementation of these spec changes landed in the White Noise stack this week and is covered in the &lt;a href=&#34;#white-noise-fixes-relay-churn-and-expands-client-controls&#34;&gt;White Noise v2026.3.23 section above&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&#34;nip-updates-17&#34;&gt;NIP Updates&lt;/h3&gt;

&lt;p&gt;Recent changes to the &lt;a href=&#34;https://github.com/nostr-protocol/nips&#34;&gt;NIPs repository&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Merged:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/5A.md&#34;&gt;NIP-5A&lt;/a&gt;: Static Websites&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1538&#34;&gt;PR #1538&lt;/a&gt;): Defines kind &lt;code&gt;15128&lt;/code&gt; (root site) and kind &lt;code&gt;35128&lt;/code&gt; (named site) manifest events for hosting static websites under Nostr keypairs using Blossom storage. See the &lt;a href=&#34;#nip-deep-dive-nip-5a-static-websites&#34;&gt;deep dive below&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-30/&#34;&gt;NIP-30&lt;/a&gt; (Custom Emoji): Allow hyphens in shortcodes&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2297&#34;&gt;PR #2297&lt;/a&gt;): Updates the shortcode description to include hyphens. Hyphenated shortcodes have been used in practice since the NIP was introduced, so the spec now documents current usage.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Open PRs and Discussions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;NIP-C1: Agent TUI Messages&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2295&#34;&gt;PR #2295&lt;/a&gt;): Proposes a structured message format for agents to send interactive UI elements through encrypted DMs, including typed &lt;code&gt;text&lt;/code&gt;, &lt;code&gt;buttons&lt;/code&gt;, &lt;code&gt;card&lt;/code&gt;, and &lt;code&gt;table&lt;/code&gt; payloads. The draft keeps everything inside existing &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-04/&#34;&gt;NIP-04&lt;/a&gt; direct-message content as JSON. It does not define a new event kind, and it uses a simple callback string format for button responses.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;NIP-95: Hybrid Peer-to-Peer Relay Protocol&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2293&#34;&gt;PR #2293&lt;/a&gt;): Proposes a hybrid relay model where relays stay authoritative but can also coordinate peer-to-peer distribution of recent events over WebRTC. The draft introduces relay messages such as &lt;code&gt;PEER_REGISTER&lt;/code&gt;, &lt;code&gt;PEER_REQUEST&lt;/code&gt;, and &lt;code&gt;PEER_OFFER&lt;/code&gt;, with stable clients acting as Super Peers and the relay acting as the seed node and fallback.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;NIP-B9: Zap Poll Events&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2284&#34;&gt;PR #2284&lt;/a&gt;): Reopens the old NIP-69 zap-poll idea now that &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/88.md&#34;&gt;NIP-88&lt;/a&gt; (Polls) covers free polls. The draft uses kind &lt;code&gt;6969&lt;/code&gt; poll definitions and kind &lt;code&gt;9734&lt;/code&gt; zaps as votes, making it a paid polling system with economic Sybil resistance. It complements free one-key-one-vote polls.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;NIP-AD: Super Zap&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2289&#34;&gt;PR #2289&lt;/a&gt;): Proposes a convention where zaps sent to a relay&amp;#39;s pubkey or a client&amp;#39;s pubkey are displayed as specialized promotional notes, effectively turning zap receipts into an ad surface. Relay operators and clients would publish profiles with &lt;code&gt;lud16&lt;/code&gt;, fetch those receipts, extract the embedded content from zap descriptions, and optionally set minimum-sats thresholds to suppress spam.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;NIP-XX: Agent Reputation Attestations&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2285&#34;&gt;PR #2285&lt;/a&gt;): Proposes kind &lt;code&gt;30085&lt;/code&gt; as a parameterized replaceable event for structured reputation attestations about Nostr agents. The draft avoids a single global score by making reputation observer-dependent, adds temporal decay so old attestations fade, supports negative ratings with evidence requirements, and sketches both simple weighted scoring and graph-diversity scoring for better Sybil resistance.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;NIP-XX: Paid API Service Announcements&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2291&#34;&gt;PR #2291&lt;/a&gt;): Proposes kind &lt;code&gt;31402&lt;/code&gt; addressable events for advertising paid HTTP APIs, with Nostr handling discovery and HTTP 402 handling payment. The draft is tags-first so relays can filter on payment methods, prices, and capabilities without parsing JSON content, and it allows optional request and response schemas so clients or agents can auto-generate calls.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;NIP-XX: Key Derivation from LNURL-auth via SplitSig&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2294&#34;&gt;PR #2294&lt;/a&gt;): Proposes deriving a Nostr keypair from an LNURL-auth ECDSA signature combined with a client-side random nonce. The derivation formula is &lt;code&gt;nsec = SHA256(ecdsa_signature || nonce)&lt;/code&gt;. The server sees the ECDSA signature (inherent to the LNURL-auth handshake) but never sees the nonce, and the browser generates the nonce but does not control the signature. Neither piece alone can derive the nsec. The intended outcome is that the same Lightning wallet produces the same Nostr key across devices, with the wallet as the recovery anchor and no server able to reconstruct the private key.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-55/&#34;&gt;NIP-55&lt;/a&gt;: Document rejected field&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2290&#34;&gt;PR #2290&lt;/a&gt;): Documents the &lt;code&gt;rejected&lt;/code&gt; field for intent-based signer responses, formalizing the behavior that &lt;a href=&#34;#amethyst-ships-pinned-notes-relay-management-and-request-to-vanish&#34;&gt;Amethyst&amp;#39;s v1.07.x fix&lt;/a&gt; had to work around.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;nip-deep-dive-nip-5a-static-websites-2&#34;&gt;NIP Deep Dive: NIP-5A (Static Websites)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/5A.md&#34;&gt;NIP-5A&lt;/a&gt; defines how to host static websites under Nostr keypairs, using two event kinds and existing blob storage infrastructure to turn signed events into served web pages. The &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/5A.md&#34;&gt;specification&lt;/a&gt; was merged on March 25 via &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1538&#34;&gt;PR #1538&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The model uses kind &lt;code&gt;15128&lt;/code&gt; for a root site, one per pubkey, and kind &lt;code&gt;35128&lt;/code&gt; for named sites identified by a &lt;code&gt;d&lt;/code&gt; tag. Each manifest maps absolute URL paths to SHA256 hashes. Here is a root site manifest:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;5324d695ed7abf7cdd2a48deb881c93b7f4e43de702989bbfb55a1b97b35a3de&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;266815e0c9210dfa324c6cba3573b14bee49da4209a9456f9484e5106cd408a5&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1743465600,
  &amp;#34;kind&amp;#34;: 15128,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;path&amp;#34;, &amp;#34;/index.html&amp;#34;, &amp;#34;186ea5fd14e88fd1ac49351759e7ab906fa94892002b60bf7f5a428f28ca1c99&amp;#34;],
    [&amp;#34;path&amp;#34;, &amp;#34;/about.html&amp;#34;, &amp;#34;a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456&amp;#34;],
    [&amp;#34;path&amp;#34;, &amp;#34;/favicon.ico&amp;#34;, &amp;#34;fedcba0987654321fedcba0987654321fedcba0987654321fedcba0987654321&amp;#34;],
    [&amp;#34;server&amp;#34;, &amp;#34; https://blossom.primal.net&amp;#34;],
    [&amp;#34;title&amp;#34;, &amp;#34;My Nostr Site&amp;#34;],
    [&amp;#34;description&amp;#34;, &amp;#34;A static website hosted on Nostr&amp;#34;],
    [&amp;#34;source&amp;#34;, &amp;#34; https://github.com/lez/nsite (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1lez7kezu34ntcpe3xyshkmz8wnyhvmad0aulqez47rfscu4zxmrspm7u08&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;npub1lez7kezu34ntcpe3xyshkmz8wnyhvmad0aulqez47rfscu4zxmrspm7u08&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1lez…7u08&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;)&amp;#34;]
  ],
  &amp;#34;content&amp;#34;: &amp;#34;&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;f4e4a9e785f70e9fcaa855d769438fea10781e84cd889e3fcb823774f83d094cf2c05d5a3ac4aebc1227a4ebc3d56867286c15a6df92d55045658bb428fd5fb5&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The serving flow works in three steps. A host server receives an HTTP request, extracts the author&amp;#39;s pubkey from the subdomain (either an npub for root sites or a base36-encoded pubkey for named sites), fetches the author&amp;#39;s relay list via &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-65/&#34;&gt;NIP-65&lt;/a&gt;, and queries for the site manifest. Once the manifest is found, the server resolves the requested path to a content hash, downloads the matching blob from the Blossom server or servers listed in the &lt;code&gt;server&lt;/code&gt; tags, and returns it.&lt;/p&gt;

&lt;p&gt;The DNS subdomain format is tightly specified. Root sites use the standard npub as the subdomain. Named sites use a 50-character base36 encoding of the raw pubkey followed by the &lt;code&gt;d&lt;/code&gt; tag value, all in a single DNS label. Because DNS labels are limited to 63 characters and the base36 encoding always takes 50, the &lt;code&gt;d&lt;/code&gt; tag is limited to 13 characters. The spec also requires &lt;code&gt;d&lt;/code&gt; tags to match &lt;code&gt;^[a-z0-9-]{1,13}$&lt;/code&gt; and not end with a hyphen, preventing DNS resolution ambiguities.&lt;/p&gt;

&lt;p&gt;Using content hashes means the same site can be served by different host servers, and file integrity is verifiable without trusting the server. A host server does not need to store any files itself. It fetches them on demand from Blossom using the hashes in the manifest. That means the author controls what is served, the Blossom server stores the raw files, and the host server just connects the two. Any of these three components can be replaced independently.&lt;/p&gt;

&lt;p&gt;Existing implementations include &lt;a href=&#34;https://github.com/lez/nsite&#34;&gt;nsite&lt;/a&gt;, the host server that resolves manifests and serves files, and &lt;a href=&#34;https://github.com/hzrd149/nsite-manager&#34;&gt;nsite-manager&lt;/a&gt;, a UI for building and publishing manifests. The spec also added a &lt;code&gt;source&lt;/code&gt; tag for linking to the site&amp;#39;s source code repository, and the README update merged separately in &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2286&#34;&gt;PR #2286&lt;/a&gt; registered both kind &lt;code&gt;15128&lt;/code&gt; and &lt;code&gt;35128&lt;/code&gt; in the NIP kind index.&lt;/p&gt;

&lt;h2 id=&#34;nip-deep-dive-nip-62-request-to-vanish-2&#34;&gt;NIP Deep Dive: NIP-62 (Request to Vanish)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/62.md&#34;&gt;NIP-62&lt;/a&gt; defines kind &lt;code&gt;62&lt;/code&gt; as a request for relays to delete all events from the requesting pubkey. The &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/62.md&#34;&gt;specification&lt;/a&gt; is legally motivated: in jurisdictions with right-to-be-forgotten laws, having a standardized, signed deletion request gives relay operators a clear signal to act on.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;a7b8c9d0e1f23456789012345678901234567890abcdef1234567890abcdef12&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;f1e2d3c4b5a697887766554433221100ffeeddccbbaa99887766554433221100&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1743465600,
  &amp;#34;kind&amp;#34;: 62,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;relay&amp;#34;, &amp;#34;wss://relay.example.com&amp;#34;]
  ],
  &amp;#34;content&amp;#34;: &amp;#34;Requesting deletion of all events from this relay.&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;11aa22bb33cc44dd55ee66ff77889900aabbccddeeff0011223344556677889911aa22bb33cc44dd55ee66ff77889900aabbccddeeff00112233445566778899&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The spec separates targeted and global vanish requests. A targeted request includes specific &lt;code&gt;relay&lt;/code&gt; tags identifying which relays should act. A global request uses the literal string &lt;code&gt;ALL_RELAYS&lt;/code&gt; as the relay tag value, asking every relay that sees the event to delete all events from that pubkey. Relays that comply must also ensure deleted events cannot be re-broadcast back into the relay, making the deletion sticky.&lt;/p&gt;

&lt;p&gt;NIP-62 goes beyond &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-09/&#34;&gt;NIP-09&lt;/a&gt; (Event Deletion) in both scope and intent. NIP-09 lets you delete individual events, and relays MAY comply. NIP-62 requests deletion of everything, and the spec says relays MUST comply if their URL is tagged. It also asks relays to delete &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-59/&#34;&gt;NIP-59&lt;/a&gt; (Gift Wrap) events that p-tagged the requesting pubkey, which means incoming DMs get cleaned up alongside the user&amp;#39;s own events. Publishing a NIP-09 deletion against a NIP-62 vanish request has no effect: once you vanish, you cannot un-vanish by deleting the vanish request.&lt;/p&gt;

&lt;p&gt;This week, &lt;a href=&#34;#amethyst-ships-pinned-notes-relay-management-and-request-to-vanish&#34;&gt;Amethyst v1.07.0&lt;/a&gt; shipped client-side NIP-62 support, letting users initiate vanish requests from the app. On the relay side, &lt;a href=&#34;https://github.com/rust-nostr/nostr&#34;&gt;rust-nostr&lt;/a&gt; has four open PRs adding NIP-62 support across the memory, LMDB, SQLite, and database test backends (&lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1315&#34;&gt;PR #1315&lt;/a&gt;, &lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1316&#34;&gt;PR #1316&lt;/a&gt;, &lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1317&#34;&gt;PR #1317&lt;/a&gt;, &lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1318&#34;&gt;PR #1318&lt;/a&gt;). This puts client support and relay support work into the same week.&lt;/p&gt;

&lt;p&gt;The protocol design raises a practical tension. Nostr&amp;#39;s value proposition includes censorship resistance, meaning relays should not be able to prevent publication. NIP-62 introduces a case where a relay MUST prevent re-publication from a specific pubkey. The two properties coexist because the request is self-directed: you are asking for deletion of your own events, not someone else&amp;#39;s. The censorship-resistance property remains intact for everyone except the person who explicitly opted out.&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;That&amp;#39;s it for this week. Building something or have news to share? Reach out via &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; DM or find us on Nostr.&lt;/p&gt;
 &lt;/blockquote&gt;
    </content>
    <updated>2026-04-01T15:59:17Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs0znz7v6uqjq2xtx6yepv3rttwphpvekk2w0nn6yzxn57yznu7trczypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqlqqzxs</id>
    
      <title type="html">Nostr Compass Podcast #15 is published: Pip, Abh3po, Pete and Max ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs0znz7v6uqjq2xtx6yepv3rttwphpvekk2w0nn6yzxn57yznu7trczypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqlqqzxs" />
    <content type="html">
      In reply to &lt;a href=&#39;/naddr1qq0k2urfwdhkgefdxymnwdpe8qmr2de3xucnsttrdeuxwv35vdexkq3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqp6kv0qjy53&#39;&gt;naddr1qq…jy53&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;Nostr Compass Podcast #15 is published:&lt;br/&gt;Pip, Abh3po, Pete and Max walk through the biggest stories from [Newsletter #15](&lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-03-25-newsletter/&#34;&gt;https://nostrcompass.org/en/newsletters/2026-03-25-newsletter/&lt;/a&gt;), from Primal&amp;#39;s new Follow Packs and BigBrotr&amp;#39;s relay-scale nsec leak analysis to nostr-vpn, peer-to-peer DOOM, and a dense week of client and protocol releases.&lt;br/&gt;&lt;br/&gt;The second half of the episode moves from weekly updates into a longer retrospective, tracing what happened in Nostr each March from 2021 through 2026. That arc runs from fiatjaf making two protocol commits in March 2021 to a March 2026 ecosystem where VPNs, games, signers, CI pipelines, and agent proposals all coexist on the same event-and-relay model.&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://blossom.primal.net/f7556db630e4ac275a92ae3626056db317c505f0259b32ca5145c172c35bbde4.mp3&#34;&gt;https://blossom.primal.net/f7556db630e4ac275a92ae3626056db317c505f0259b32ca5145c172c35bbde4.mp3&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://podcast.nostrcompass.org/naddr1qvzqqqr4vcpzqa6e2nmnzsgjfzdy520vdy4hywr06c9ue6crpr2zxyq749uu275qqyt8wumn8ghj7un9d3shjtnwdaehgu3wvfskueqpp4mhxue69uhkummn9ekx7mqpz3mhxue69uhhyetvv9ujuerpd46hxtnfduqp7etsd9ek7er995cnwde58yurvdfhxymnzwpdvdh8seejx33hy6cx7jpaf&#34;&gt;https://podcast.nostrcompass.org/naddr1qvzqqqr4vcpzqa6e2nmnzsgjfzdy520vdy4hywr06c9ue6crpr2zxyq749uu275qqyt8wumn8ghj7un9d3shjtnwdaehgu3wvfskueqpp4mhxue69uhkummn9ekx7mqpz3mhxue69uhhyetvv9ujuerpd46hxtnfduqp7etsd9ek7er995cnwde58yurvdfhxymnzwpdvdh8seejx33hy6cx7jpaf&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;#podcast #nostr
    </content>
    <updated>2026-03-31T19:51:36Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsv09thmqsuwylz9z56rxajh7lhuazvvc2zytnz9lrtctk5304094gzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqk0d8ae</id>
    
      <title type="html">Podcast #14 is out: wallet clients broaden NWC support, Notedeck ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsv09thmqsuwylz9z56rxajh7lhuazvvc2zytnz9lrtctk5304094gzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqk0d8ae" />
    <content type="html">
      In reply to &lt;a href=&#39;/naddr1qq0k2urfwdhkgefdxymnwdpkxy6nydps8q6rgtt9dehk57npdaehvq3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqp6kvhn2ges&#39;&gt;naddr1qq…2ges&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;Podcast #14 is out: wallet clients broaden NWC support, Notedeck moves release discovery onto Nostr, relay behavior gets more adaptive, and we close with deep dives into NIP-94 and NIP-54.&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://blossom.primal.net/3d6522f1d1a26483ddb6189266a96f9549b19d4c2ad4ef7d9ae259353b1ccb47.mp3&#34;&gt;https://blossom.primal.net/3d6522f1d1a26483ddb6189266a96f9549b19d4c2ad4ef7d9ae259353b1ccb47.mp3&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://podcast.nostrcompass.org/naddr1qvzqqqr4vcpzqa6e2nmnzsgjfzdy520vdy4hywr06c9ue6crpr2zxyq749uu275qqyt8wumn8ghj7un9d3shjtnwdaehgu3wvfskueqpp4mhxue69uhkummn9ekx7mqpz3mhxue69uhhyetvv9ujuerpd46hxtnfduqp7etsd9ek7er995cnwde5xccn2v35xqurgdpdv4hx76n6v9hhxasuyksuk&#34;&gt;https://podcast.nostrcompass.org/naddr1qvzqqqr4vcpzqa6e2nmnzsgjfzdy520vdy4hywr06c9ue6crpr2zxyq749uu275qqyt8wumn8ghj7un9d3shjtnwdaehgu3wvfskueqpp4mhxue69uhkummn9ekx7mqpz3mhxue69uhhyetvv9ujuerpd46hxtnfduqp7etsd9ek7er995cnwde5xccn2v35xqurgdpdv4hx76n6v9hhxasuyksuk&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;#podcast #nostr
    </content>
    <updated>2026-03-27T12:43:05Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsyss9sv32ld8acnar6jvme2arvs4p8pmf0m7g84pv3sn48r06726gzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqvvj7ad</id>
    
      <title type="html">Nostr Compass #15 is out. Primal followed its 3.0 wallet release ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsyss9sv32ld8acnar6jvme2arvs4p8pmf0m7g84pv3sn48r06726gzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqvvj7ad" />
    <content type="html">
      Nostr Compass #15 is out. &lt;br/&gt;&lt;br/&gt;Primal followed its 3.0 wallet release with Follow Packs, zap enrichment, and `primalconnect://` deep links, while BigBrotr scanned 41 million events across 1,085 relays and found 16,599 valid private keys. Martti Malmi&amp;#39;s nostr-vpn shipped 11 releases in seven days, and Vector open-sourced multiplayer DOOM over Nostr while FIPS added Tor transport, reproducible builds, and a Nostr relay sidecar example. &lt;br/&gt;This issue closes with Five Years of Nostr Marches, tracing the protocol from two March 2021 commits to VPNs, git forges, and multiplayer games in 2026. &lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/naddr1qqgrjcmp89snzepjvesnjve3xdnrxq3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqp65wjyrzf8&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;naddr1qq…rzf8&lt;/a&gt;&lt;/span&gt; &lt;/div&gt; &lt;p&gt;Welcome back to Nostr Compass, your weekly guide to Nostr.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This week:&lt;/strong&gt; &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app&#34;&gt;Primal Android&lt;/a&gt; follows its 3.0 wallet release with &lt;a href=&#34;#primal-adds-follow-packs-zap-enrichment-and-deep-links&#34;&gt;Follow Packs, zap enrichment, and &lt;code&gt;primalconnect://&lt;/code&gt; deep links&lt;/a&gt;. &lt;a href=&#34;https://github.com/BigBrotr/bigbrotr&#34;&gt;BigBrotr&lt;/a&gt; publishes an &lt;a href=&#34;#bigbrotr-maps-exposed-private-keys-across-the-relay-network&#34;&gt;nsec leak analysis&lt;/a&gt; scanning 41 million events across 1,085 relays, finding 16,599 valid private keys, while &lt;a href=&#34;https://npub.world&#34;&gt;npub.world&lt;/a&gt; integrates leak warnings into profile pages the same week. Martti Malmi (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1xdhnr9mrv47kkrn95k6cwecearydeh8e895990n3acntwvmgk2dsdeeycm&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Sirius Business Ltd&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1xdh…eycm&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) launches &lt;a href=&#34;#nostr-vpn-launches-as-a-tailscale-alternative&#34;&gt;nostr-vpn&lt;/a&gt;, a Tailscale alternative that signals over Nostr relays and creates WireGuard tunnels, shipping 11 releases in seven days. The &lt;a href=&#34;https://github.com/VectorPrivacy/Vector&#34;&gt;Vector&lt;/a&gt; team &lt;a href=&#34;#open-source-doom-runs-peer-to-peer-over-nostr&#34;&gt;open-sources P2P DOOM&lt;/a&gt; over Nostr, &lt;a href=&#34;https://github.com/jmcorgan/fips&#34;&gt;FIPS&lt;/a&gt; ships &lt;a href=&#34;#fips-v020-ships-tor-transport-reproducible-builds-and-sidecar-examples&#34;&gt;v0.2.0&lt;/a&gt;, and &lt;a href=&#34;https://github.com/nostrability/schemata&#34;&gt;Nostrability Schemata&lt;/a&gt; expands to &lt;a href=&#34;#nostrability-schemata-goes-multilingual&#34;&gt;six languages&lt;/a&gt; in one week.&lt;/p&gt;

&lt;h2 id=&#34;news-5&#34;&gt;News&lt;/h2&gt;

&lt;h3 id=&#34;nostr-npub12vkcxr0luzwp8e673v29eqjhrr7p9vqq8asav85swaepclllj09sylpugg-adds-follow-packs-zap-enrichment-and-deep-links-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub12vkcxr0luzwp8e673v29eqjhrr7p9vqq8asav85swaepclllj09sylpugg&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;primal&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub12vk…pugg&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; adds Follow Packs, zap enrichment, and deep links&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-03-18-newsletter/&#34;&gt;Following last week&amp;#39;s 3.0.7 coverage&lt;/a&gt;, &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app&#34;&gt;Primal Android&lt;/a&gt; spent this week on post-release work around onboarding, composer UX, and wallet context. Redesigned onboarding introduces Follow Packs (&lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/949&#34;&gt;PR #949&lt;/a&gt;), a native GIF button joins the note composer, a zap enrichment service (&lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/979&#34;&gt;PR #979&lt;/a&gt;) annotates wallet transactions with zap context, and a &lt;code&gt;primalconnect://&lt;/code&gt; deep-linking protocol (&lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/969&#34;&gt;PR #969&lt;/a&gt;) enables cross-app navigation.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/PrimalHQ/primal-ios-app&#34;&gt;Primal iOS&lt;/a&gt; is shipping the same work through TestFlight in parallel, with the wallet switch (&lt;a href=&#34;https://github.com/PrimalHQ/primal-ios-app/pull/191&#34;&gt;PR #191&lt;/a&gt;), poll implementation, and onboarding refactor landing in the same window.&lt;/p&gt;

&lt;h3 id=&#34;nostr-npub176p7sup477k5738qhxx0hk2n0cty2k5je5uvalzvkvwmw4tltmeqw7vgup-maps-exposed-private-keys-across-the-relay-network-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub176p7sup477k5738qhxx0hk2n0cty2k5je5uvalzvkvwmw4tltmeqw7vgup&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;pip&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub176p…vgup&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; maps exposed private keys across the relay network&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/BigBrotr/bigbrotr&#34;&gt;BigBrotr&lt;/a&gt;, the Nostr relay analytics platform, published a &lt;a href=&#34;https://bigbrotr.com/blog/exposed-nsec-analysis/&#34;&gt;detailed analysis of exposed private keys&lt;/a&gt; on the relay network. The study scanned 41 million events from 1,085 relays, searching for valid nsec strings embedded in event content, and found 16,599 valid private keys. That number looks alarming until you filter out a bot called &amp;#34;Mr.nsec&amp;#34; that accounts for 92% of the matches. After removing bot traffic, only 38 real accounts with more than 21,000 combined followers had exposed keys, and none showed signs of awareness that their keys were public.&lt;/p&gt;

&lt;p&gt;The team built an nsec-leak-checker as a &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-90/&#34;&gt;NIP-90&lt;/a&gt; (Data Vending Machine) service, letting users check whether their private key appears anywhere in the scanned dataset without revealing the key to the checker. &lt;a href=&#34;https://npub.world&#34;&gt;npub.world&lt;/a&gt; integrated the leak data the same week, displaying warning banners on profile pages where exposed keys were detected. The combination gives the network both a programmatic interface for DVMs and agents and a human-readable warning for regular users. The underlying dataset also feeds &lt;a href=&#34;https://github.com/BigBrotr/bigbrotr/releases/tag/v6.4.0&#34;&gt;BigBrotr v6.4.0&lt;/a&gt;, which adds replaceable and addressable event materialized views and a synchronizer idle timeout fix.&lt;/p&gt;

&lt;h3 id=&#34;nostr-vpn-nostr-npub1xdhnr9mrv47kkrn95k6cwecearydeh8e895990n3acntwvmgk2dsdeeycm-launches-as-a-tailscale-alternative-2&#34;&gt;Nostr VPN (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1xdhnr9mrv47kkrn95k6cwecearydeh8e895990n3acntwvmgk2dsdeeycm&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Sirius Business Ltd&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1xdh…eycm&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) launches as a Tailscale alternative&lt;/h3&gt;

&lt;p&gt;Martti Malmi (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1xdhnr9mrv47kkrn95k6cwecearydeh8e895990n3acntwvmgk2dsdeeycm&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Sirius Business Ltd&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1xdh…eycm&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), creator of Iris, built and shipped &lt;a href=&#34;https://github.com/mmalmi/nostr-vpn&#34;&gt;nostr-vpn&lt;/a&gt;, a peer-to-peer VPN that uses Nostr relays for signaling and WireGuard (via boringtun) for encrypted tunnels. The motivation was direct: &amp;#34;Got annoyed by Tailscale requiring 3rd party accounts, so created Nostr VPN.&amp;#34; The tool creates mesh networks between devices using Nostr keypairs as identity, with no central coordination server.&lt;/p&gt;

&lt;p&gt;The project shipped 11 releases in seven days, from &lt;a href=&#34;https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.2&#34;&gt;v0.2.2&lt;/a&gt; through &lt;a href=&#34;https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.13&#34;&gt;v0.2.13&lt;/a&gt;. That sprint added Windows support, LAN pairing for local network discovery, and an Android sidecar for mobile devices. The architecture is simple: two devices exchange connection metadata over Nostr relays, then establish a direct WireGuard tunnel. Nostr handles discovery and NAT traversal signaling. WireGuard handles the actual traffic. Identity is a Nostr keypair.&lt;/p&gt;

&lt;p&gt;Malmi also continued pushing &lt;a href=&#34;https://github.com/mmalmi/nostr-double-ratchet&#34;&gt;nostr-double-ratchet&lt;/a&gt;, a Signal-style secure messaging channel library, shipping six releases from &lt;a href=&#34;https://github.com/mmalmi/nostr-double-ratchet/releases/tag/v0.0.86&#34;&gt;v0.0.86&lt;/a&gt; through &lt;a href=&#34;https://github.com/mmalmi/nostr-double-ratchet/releases/tag/v0.0.93&#34;&gt;v0.0.93&lt;/a&gt; during the same week.&lt;/p&gt;

&lt;h3 id=&#34;open-source-doom-runs-peer-to-peer-over-nostr-2&#34;&gt;Open-source DOOM runs peer-to-peer over Nostr&lt;/h3&gt;

&lt;p&gt;The &lt;a href=&#34;https://github.com/VectorPrivacy/Vector&#34;&gt;Vector&lt;/a&gt; team open-sourced a peer-to-peer multiplayer DOOM implementation that uses Nostr for peer discovery, &lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt; for end-to-end encryption, and &lt;a href=&#34;https://github.com/n0-computer/iroh&#34;&gt;Iroh&lt;/a&gt;, the QUIC networking library from n0, for gossip transport. The game ships as a 4.2 MB WebXDC file that can be sent inside chat messages, requiring no servers to host or coordinate a match.&lt;/p&gt;

&lt;p&gt;The technical approach replaces the original 1993 lockstep netcode with a real-time hybrid sync model. Players discover each other through Nostr relay queries, negotiate sessions through Marmot-encrypted channels, then hand off to Iroh&amp;#39;s QUIC gossip layer for the low-latency game traffic. The stack uses Nostr for discovery, Marmot for encryption, and Iroh for transport.&lt;/p&gt;

&lt;p&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1hrujuc08r4zcdtn0u6ts7u7apldcjqgftz0z7stmaaz9hwaf9jxs66f3yh&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;VectorPrivacy&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1hru…f3yh&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; also shipped security hardening this week. The release adds a memory-hardened key vault with anti-debug protections and zeroize for sensitive key material, user blocking with full DM and group message filtering, and WebXDC realtime channel fixes for Mini Apps.&lt;/p&gt;

&lt;h3 id=&#34;fips-nostr-npub19wavu4f7l6l43h24jyskn7fvzy37kcfp67aqjtmv2qgy4lp34nhsda8p6k-v0-2-0-ships-tor-transport-reproducible-builds-and-sidecar-examples-2&#34;&gt;FIPS (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub19wavu4f7l6l43h24jyskn7fvzy37kcfp67aqjtmv2qgy4lp34nhsda8p6k&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;jcorgan&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub19wa…8p6k&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) v0.2.0 ships Tor transport, reproducible builds, and sidecar examples&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/jmcorgan/fips&#34;&gt;FIPS&lt;/a&gt;, the Free Internetworking Peering System and Nostr-adjacent mesh networking project, shipped &lt;a href=&#34;https://github.com/jmcorgan/fips/releases/tag/v0.2.0-rel&#34;&gt;v0.2.0&lt;/a&gt;. The release adds Tor transport support for anonymized mesh links, reproducible builds, a sidecar example that connects through a Nostr relay, and Nostr release publishing in the OpenWrt package workflow. The release also fixes post-rekey jitter spikes caused by drain-window frames. The wire format changed from v0.1.0, so existing v0.1.0 nodes cannot interoperate with v0.2.0 without upgrading.&lt;/p&gt;

&lt;h3 id=&#34;nostr-npub1g5qtwz2nh9q0mnw555kv787kh6lysds95522gzptre3qpvz9p20s83m80d-schemata-goes-multilingual-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1g5qtwz2nh9q0mnw555kv787kh6lysds95522gzptre3qpvz9p20s83m80d&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;nostrability&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1g5q…m80d&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; Schemata goes multilingual&lt;/h3&gt;

&lt;p&gt;The &lt;a href=&#34;https://github.com/nostrability/schemata&#34;&gt;Nostrability Schemata&lt;/a&gt; project, which maintains JSON Schema definitions for validating Nostr event kinds, expanded from JavaScript-only to six languages in one week. New packages shipped for Rust, Go, Dart, Swift, and Python, each providing both a data package and a validator. &lt;a href=&#34;https://github.com/nostrability/schemata/releases/tag/v0.2.6&#34;&gt;v0.2.6&lt;/a&gt; also added 17 new event kind schemas.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&#34;https://nostrability.github.io/nostrability/&#34;&gt;Nostrability interop tracker&lt;/a&gt; received a parallel overhaul. A new What&amp;#39;s New tab publishes updates through both an Atom feed and a Nostr event, app category filtering lets visitors drill into specific client types, and the tracker now auto-detects programming languages from GitHub repository metadata. Nostrability also has its own npub now, making the project itself discoverable through the protocol it documents. For library authors working across languages, the multi-language schema packages mean the same event kind definitions are available as native imports instead of requiring each project to maintain its own schema copy.&lt;/p&gt;

&lt;h2 id=&#34;releases-11&#34;&gt;Releases&lt;/h2&gt;

&lt;h3 id=&#34;nostr-npub142gywvjkq0dv6nupggyn2euhx4nduwc7yz5f24ah9rpmunr2s39se3xrj0-v1-06-0-and-v1-06-1-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub142gywvjkq0dv6nupggyn2euhx4nduwc7yz5f24ah9rpmunr2s39se3xrj0&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;amethyst&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub142g…xrj0&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; v1.06.0 and v1.06.1&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/vitorpamplona/amethyst&#34;&gt;Amethyst&lt;/a&gt;, the Android client maintained by vitorpamplona (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1gcxzte5zlkncx26j68ez60fzkvtkm9e0vrwdcvsjakxf9mu9qewqlfnj5z&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;VitorPamplona&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1gcx…nj5z&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), shipped &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/releases/tag/v1.06.0&#34;&gt;v1.06.0&lt;/a&gt; and &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/releases/tag/v1.06.1&#34;&gt;v1.06.1&lt;/a&gt; on March 23. The headline feature is poll support using &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-85/&#34;&gt;NIP-85&lt;/a&gt; (Trusted Assertions) data for weighted voting, with redesigned poll and zap poll cards. The new rendering gives both standard polls and zap-weighted polls a cleaner visual layout. v1.06.1 follows with concurrent modification crash fixes that address stability regressions introduced in the poll rendering path.&lt;/p&gt;

&lt;h3 id=&#34;amber-nostr-npub1w4uswmv6lu9yel005l3qgheysmr7tk9uvwluddznju3nuxalevvs2d0jr5-v5-0-0-and-v5-0-1-2&#34;&gt;Amber (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1w4uswmv6lu9yel005l3qgheysmr7tk9uvwluddznju3nuxalevvs2d0jr5&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;greenart7c3&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1w4u…0jr5&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) v5.0.0 and v5.0.1&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/greenart7c3/Amber&#34;&gt;Amber&lt;/a&gt;, the &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-55/&#34;&gt;NIP-55&lt;/a&gt; (Android Signer Application) signer app, promoted its recent 4.1.x pre-release work into stable with &lt;a href=&#34;https://github.com/greenart7c3/Amber/releases/tag/v5.0.0&#34;&gt;v5.0.0&lt;/a&gt; on March 18. That stable release carries the &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-42/&#34;&gt;NIP-42&lt;/a&gt; relay-auth, built-in Tor, content-type-specific permissions, and encrypted PIN storage changes covered last week. &lt;a href=&#34;https://github.com/greenart7c3/Amber/releases/tag/v5.0.1&#34;&gt;v5.0.1&lt;/a&gt; then removes internet permission from the offline build flavor, so that build can no longer make network requests at the Android permission layer.&lt;/p&gt;

&lt;h3 id=&#34;nostr-npub1m0str0d7z2ww8rdh20t2n9lx520xjwhaq24p68umqp06wwrwtsnqen40un-v0-17-0-and-mostro-mobile-v1-2-2-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1m0str0d7z2ww8rdh20t2n9lx520xjwhaq24p68umqp06wwrwtsnqen40un&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Mostro&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1m0s…40un&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; v0.17.0 and Mostro Mobile v1.2.2&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/MostroP2P/mostro&#34;&gt;Mostro&lt;/a&gt;, the peer-to-peer Bitcoin exchange built on Nostr, shipped &lt;a href=&#34;https://github.com/MostroP2P/mostro/releases/tag/v0.17.0&#34;&gt;v0.17.0&lt;/a&gt; on March 18. The server release continues the dispute and rating work from the v0.16.x cycle, adding more complete trade reputation data for buyers and sellers as Nostr events. &lt;a href=&#34;https://github.com/MostroP2P/mobile&#34;&gt;Mostro Mobile&lt;/a&gt;, the Flutter client, followed with &lt;a href=&#34;https://github.com/MostroP2P/mobile/releases/tag/v1.2.2&#34;&gt;v1.2.2&lt;/a&gt; on March 23, keeping the mobile interface in sync with the latest protocol changes.&lt;/p&gt;

&lt;h3 id=&#34;nostr-npub1sh0spghk4yvy2d2v35kelw45qq4msk6zykaw4ds047e9slzs8r4qr7q2xa-v0-14-0-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1sh0spghk4yvy2d2v35kelw45qq4msk6zykaw4ds047e9slzs8r4qr7q2xa&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Shosho – Live Stream on Nostr&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1sh0…q2xa&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; v0.14.0&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/r0d8lsh0p/shosho-releases&#34;&gt;Shosho&lt;/a&gt;, the Nostr live streaming app, shipped &lt;a href=&#34;https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v0.14.0&#34;&gt;v0.14.0&lt;/a&gt; on March 19 with the launch of Shosho Shop. The release adds a Shop tab on profiles, Shop in Browse, and an In-Live Shop button on lives and clips. The release notes say existing &amp;#34;Nostr products&amp;#34; appear automatically and buyers click through to the seller&amp;#39;s Plebeian Market page for purchase. Shosho&amp;#39;s release notes do not identify the listing event kind, so it is not yet possible to confirm whether Shosho Shop reads the same &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-99/&#34;&gt;NIP-99&lt;/a&gt; classified listings that &lt;a href=&#34;https://github.com/shopstr-eng/shopstr&#34;&gt;Shopstr&lt;/a&gt; explicitly supports in its README.&lt;/p&gt;

&lt;h3 id=&#34;applesauce-nostr-npub1ye5ptcxfyyxl5vjvdjar2ua3f0hynkjzpx552mu5snj3qmx5pzjscpknpr-v5-2-0-2&#34;&gt;Applesauce (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1ye5ptcxfyyxl5vjvdjar2ua3f0hynkjzpx552mu5snj3qmx5pzjscpknpr&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;hzrd149&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1ye5…knpr&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) v5.2.0&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/hzrd149/applesauce&#34;&gt;Applesauce&lt;/a&gt;, hzrd149&amp;#39;s collection of helper packages for building Nostr applications, shipped &lt;a href=&#34;https://github.com/hzrd149/applesauce/releases/tag/applesauce-core@5.2.0&#34;&gt;v5.2.0&lt;/a&gt; on March 22. The release spans six packages. The SQLite package fixes a UNIQUE constraint collision on event tags that caused duplicate inserts. The signers package adds &lt;code&gt;AndroidNativeSigner&lt;/code&gt;, which wraps the &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-55/&#34;&gt;NIP-55&lt;/a&gt; native Android signer interface so web-view-based apps can use hardware-backed signing without custom bridge code. The relay package adds a &lt;code&gt;challenge&lt;/code&gt; field to relay and pool status objects, tracking &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-42/&#34;&gt;NIP-42&lt;/a&gt; auth state so apps can detect when a relay is requesting authentication and respond programmatically. The core package gains &lt;code&gt;isEventPointerSame&lt;/code&gt; and &lt;code&gt;isAddressPointerSame&lt;/code&gt; methods for deduplicating event references, and the common package adds &lt;code&gt;user.blossomServers$&lt;/code&gt; for resolving a user&amp;#39;s Blossom media servers. Applesauce powers noStrudel, Satellite, and several other web clients, so these fixes propagate across the web client layer.&lt;/p&gt;

&lt;h3 id=&#34;wisp-nostr-npub1utx00neqgqln72j22kej3ux7803c2k986henvvha4thuwfkper4s7r50e8-ships-16-releases-in-one-week-2&#34;&gt;Wisp (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1utx00neqgqln72j22kej3ux7803c2k986henvvha4thuwfkper4s7r50e8&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;utxo the webmaster 🧑‍💻&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1utx…50e8&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) ships 16 releases in one week&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/barrydeen/wisp&#34;&gt;Wisp&lt;/a&gt;, the Android Nostr client, shipped 16 releases from &lt;a href=&#34;https://github.com/barrydeen/wisp/releases/tag/v0.9.3-beta&#34;&gt;v0.9.3-beta&lt;/a&gt; through &lt;a href=&#34;https://github.com/barrydeen/wisp/releases/tag/v0.13.1-beta&#34;&gt;v0.13.1-beta&lt;/a&gt; this week. The feature additions include multi-account support, a zen notifications mode for reduced interruptions, drafts and scheduled posts, safety content filters, and a new flame icon.&lt;/p&gt;

&lt;h3 id=&#34;manent-v1-2-0-2&#34;&gt;Manent v1.2.0&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/dtonon/manent&#34;&gt;Manent&lt;/a&gt;, the private encrypted notes and file storage app, shipped &lt;a href=&#34;https://github.com/dtonon/manent/releases/tag/v1.2.0&#34;&gt;v1.2.0&lt;/a&gt; on March 20. The release adds camera capture directly from the app, image resizing before upload to reduce storage costs, and pinch-to-zoom for reviewing stored images. Manent stores notes and files encrypted on Nostr relays using the user&amp;#39;s keypair, making the phone or desktop app a thin client that can reconstruct its full state from relay data.&lt;/p&gt;

&lt;h3 id=&#34;divine-nostr-npub1wmr34t36fy03m8hvgl96zl3znndyzyaqhwmwdtshwmtkg03fetaqhjg240-1-0-7-2&#34;&gt;diVine (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1wmr34t36fy03m8hvgl96zl3znndyzyaqhwmwdtshwmtkg03fetaqhjg240&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;rabble&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1wmr…g240&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) 1.0.7&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/divinevideo/divine-mobile&#34;&gt;diVine&lt;/a&gt;, the short-form video client, shipped &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/releases/tag/1.0.7&#34;&gt;1.0.7&lt;/a&gt; on March 21 with a video playback watchdog that auto-resumes stalled videos. After the E2E test infrastructure and direct MP4 loading in &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/#divine-ships-v106-with-e2e-test-infrastructure-and-nip-49-import&#34;&gt;v1.0.6&lt;/a&gt;, this release targets the remaining playback failure path: videos that stop mid-stream without throwing an error.&lt;/p&gt;

&lt;h3 id=&#34;alby-extension-nostr-npub1getal6ykt05fsz5nqu4uld09nfj3y3qxmv8crys4aeut53unfvlqr80nfm-v3-14-2-2&#34;&gt;Alby Extension (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1getal6ykt05fsz5nqu4uld09nfj3y3qxmv8crys4aeut53unfvlqr80nfm&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Alby&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1get…0nfm&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) v3.14.2&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/getAlby/lightning-browser-extension&#34;&gt;Alby Extension&lt;/a&gt;, the &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-07/&#34;&gt;NIP-07&lt;/a&gt; (Browser Extension Signer) browser extension, shipped &lt;a href=&#34;https://github.com/getAlby/lightning-browser-extension/releases/tag/v3.14.2&#34;&gt;v3.14.2&lt;/a&gt; on March 18 with Lightning address QR code display and Schnorr signing support. The Schnorr addition aligns the browser extension with the secp256k1 signature scheme that Nostr uses natively.&lt;/p&gt;

&lt;h3 id=&#34;noornote-nostr-npub175nul9cvufswwsnpy99lvyhg7ad9nkccxhkhusznxfkr7e0zxthql9g6w0-v0-6-5-through-v0-6-11-2&#34;&gt;NoorNote (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub175nul9cvufswwsnpy99lvyhg7ad9nkccxhkhusznxfkr7e0zxthql9g6w0&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;alp&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub175n…g6w0&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) v0.6.5 through v0.6.11&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/77elements/noornote&#34;&gt;NoorNote&lt;/a&gt;, the note-taking app, shipped seven releases from &lt;a href=&#34;https://github.com/77elements/noornote/releases/tag/v0.6.5&#34;&gt;v0.6.5&lt;/a&gt; through &lt;a href=&#34;https://github.com/77elements/noornote/releases/tag/v0.6.11&#34;&gt;v0.6.11&lt;/a&gt;. The headline addition is Follow Packs: curated bundles of accounts that users can browse and subscribe to in bulk, similar to Twitter Lists but designed for onboarding. Users can create, edit, and share Follow Packs with custom titles, descriptions, and cover images. The series also upgrades the underlying Nostr library from NDK (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1l2vyh47mk2p0qlsku7hg0vn29faehy9hy34ygaclpn66ukqp3afqutajft&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;PABLOF7z&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1l2v…ajft&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) v2 to v3, which brings improved relay connection handling and subscription management. Picture notes and a redesigned relay connection experience round out the run.&lt;/p&gt;

&lt;h3 id=&#34;nak-v0-19-1-and-v0-19-2-2&#34;&gt;nak v0.19.1 and v0.19.2&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/fiatjaf/nak&#34;&gt;nak&lt;/a&gt;, fiatjaf&amp;#39;s command-line Nostr toolkit for interacting with relays, encoding and decoding &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-19/&#34;&gt;NIP-19&lt;/a&gt; (Bech32-Encoded Entities) identifiers, signing events, and querying relay data, shipped &lt;a href=&#34;https://github.com/fiatjaf/nak/releases/tag/v0.19.1&#34;&gt;v0.19.1&lt;/a&gt; and &lt;a href=&#34;https://github.com/fiatjaf/nak/releases/tag/v0.19.2&#34;&gt;v0.19.2&lt;/a&gt; on March 17 and 20. The two point releases follow the &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-03-18-newsletter/&#34;&gt;v0.19.0&lt;/a&gt; group-forum UI addition from last week.&lt;/p&gt;

&lt;h3 id=&#34;calendar-by-form-v0-2-1-2&#34;&gt;Calendar by Form* v0.2.1&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar&#34;&gt;Calendar by Form*&lt;/a&gt;, the decentralized calendar app built on &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-52/&#34;&gt;NIP-52&lt;/a&gt; (Calendar Events), shipped &lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar/releases/tag/v0.2.1&#34;&gt;v0.2.1&lt;/a&gt; on March 20. The release fixes a notification template issue that affected event reminders. Calendar stores events as Nostr kind 31922 (date-based) and kind 31923 (time-based) events, letting any Nostr client render calendar data if it chooses to support the kinds. The app is built by the Formstr team, who also maintain Formstr (decentralized forms) and Pollerama (polls).&lt;/p&gt;

&lt;h3 id=&#34;nym-v3-50-through-v3-53-2&#34;&gt;NYM v3.50 through v3.53&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/Spl0itable/NYM&#34;&gt;NYM&lt;/a&gt;, the lightweight ephemeral chat client bridged with Bitchat, shipped 28 releases from v3.50 through v3.53 (the patch versions increment rapidly). The most notable feature is Nymbot, a built-in chat bot that responds to &lt;code&gt;@nymbot&lt;/code&gt; mentions in channels and provides relay status and management functions. A &amp;#34;hardcore mode&amp;#34; generates a fresh keypair for every sent message, making conversation threads unlinkable at the identity level. The tradeoff is clear: you lose persistent identity but gain per-message anonymity. The relay proxy layer also received work, with sharded relay proxy workers for better connectivity, geohash channel support, and clock skew tolerance for nodes with imprecise system clocks.&lt;/p&gt;

&lt;h2 id=&#34;project-updates-5&#34;&gt;Project Updates&lt;/h2&gt;

&lt;h3 id=&#34;ditto-nostr-npub10qdp2fc9ta6vraczxrcs8prqnv69fru2k6s2dj48gqjcylulmtjsg9arpj-adds-bluesky-bridge-and-wikipedia-integration-2&#34;&gt;Ditto (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub10qdp2fc9ta6vraczxrcs8prqnv69fru2k6s2dj48gqjcylulmtjsg9arpj&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Team Soapbox&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub10qd…arpj&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) adds Bluesky bridge and Wikipedia integration&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/soapbox-pub/ditto&#34;&gt;Ditto&lt;/a&gt;, the Soapbox team&amp;#39;s customizable Nostr social client, logged over 300 commits this week across three distinct feature tracks. The first is a Bluesky bridge (19 commits) that renders Bluesky posts inline as full feed-style threads, adds sidebar navigation to a Bluesky discovery page backed by the official Discover (whats-hot) feed, and wires up action buttons for commenting, sharing, reacting, and copying links. When a user replies to a Bluesky post from within Ditto, the compose modal shows a disclaimer callout noting the cross-protocol nature of the interaction. &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-73/&#34;&gt;NIP-73&lt;/a&gt; (External Content IDs) kind 17 reactions power the cross-protocol model: a Nostr user reacts to a Bluesky post, and the reaction is stored as a standard Nostr event referencing the external content identifier. This is the same NIP-73 pattern that could bridge reactions to any external content, from Bluesky posts to YouTube videos to web pages.&lt;/p&gt;

&lt;p&gt;The second track is a Wikipedia integration (9 commits). Ditto now renders rich Wikipedia article content on detail pages instead of generic link previews, adds search autocomplete with article thumbnails, and provides a &lt;code&gt;/wikipedia&lt;/code&gt; page pulling featured content from the Wikipedia API. Wikipedia and Archive.org results also appear in the general search autocomplete dropdown. The third track is iOS platform support via Capacitor, with a remote build script and platform configuration landing alongside a UI overhaul (55 commits) that replaces backdrop-blur headers with a new arc-based navigation design across every page in the app. The 314 commits move Ditto from a Nostr-only client toward a multi-protocol aggregator that treats Bluesky and Wikipedia as first-class content sources alongside the Nostr feed.&lt;/p&gt;

&lt;h3 id=&#34;pika-nostr-npub1zxu639qym0esxnn7rzrt48wycmfhdu3e5yvzwx7ja3t84zyc2r8qz8cx2y-builds-a-nip-34-forge-ci-pipeline-2&#34;&gt;Pika (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1zxu639qym0esxnn7rzrt48wycmfhdu3e5yvzwx7ja3t84zyc2r8qz8cx2y&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;justinmoon&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1zxu…cx2y&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) builds a NIP-34 forge CI pipeline&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/sledtools/pika&#34;&gt;Pika&lt;/a&gt;, the Marmot-based encrypted messaging app, merged 33 PRs this week focused on a self-hosted &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-34/&#34;&gt;NIP-34&lt;/a&gt; forge with pre-merge CI. The forge is a git hosting layer that receives patches as NIP-34 events, runs CI checks before merge, and reports structured status back through Nostr events. &lt;a href=&#34;https://github.com/sledtools/pika/pull/701&#34;&gt;PR #701&lt;/a&gt; adds lane-based pre-merge and nightly CI, where each code path (Rust, TypeScript, Apple builds) runs in its own lane with independent pass/fail status. &lt;a href=&#34;https://github.com/sledtools/pika/pull/715&#34;&gt;PR #715&lt;/a&gt; cuts managed CI agents to Incus OpenClaw containers for isolation, and &lt;a href=&#34;https://github.com/sledtools/pika/pull/733&#34;&gt;PR #733&lt;/a&gt; adds a &lt;code&gt;ph forge&lt;/code&gt; CLI for interacting with the hosted forge from the command line. Supporting PRs handle repo write permissions for merges (&lt;a href=&#34;https://github.com/sledtools/pika/pull/736&#34;&gt;PR #736&lt;/a&gt;), structured CI metadata with live status badges (&lt;a href=&#34;https://github.com/sledtools/pika/pull/722&#34;&gt;PR #722&lt;/a&gt;), Apple nightly build splits (&lt;a href=&#34;https://github.com/sledtools/pika/pull/738&#34;&gt;PR #738&lt;/a&gt;), and forge auth and branch lookup fixes (&lt;a href=&#34;https://github.com/sledtools/pika/pull/734&#34;&gt;PR #734&lt;/a&gt;). This is one of the first working CI/CD systems built on top of NIP-34 git events, moving Nostr-based source code hosting beyond basic patch exchange toward the merge-and-test workflow that developers expect from GitHub or GitLab.&lt;/p&gt;

&lt;h3 id=&#34;nostria-nostr-npub1zl3g38a6qypp6py2z07shggg45cu8qex992xpss7d8zrl28mu52s4cjajh-adds-communities-code-snippets-and-voice-event-handling-2&#34;&gt;Nostria (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1zl3g38a6qypp6py2z07shggg45cu8qex992xpss7d8zrl28mu52s4cjajh&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;sondreb&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1zl3…jajh&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) adds communities, code snippets, and voice event handling&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostria-app/nostria&#34;&gt;Nostria&lt;/a&gt;, the cross-platform Nostr client maintained by sondreb (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1zl3g38a6qypp6py2z07shggg45cu8qex992xpss7d8zrl28mu52s4cjajh&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;sondreb&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1zl3…jajh&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), spent this week extending the app surface beyond the Web of Trust filtering covered in #14. The main addition is a full &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-72/&#34;&gt;NIP-72&lt;/a&gt; (Moderated Communities) implementation with community creation, moderator and relay configuration, post approval tracking with image previews, and a dedicated community page with Posts and Moderators tabs.&lt;/p&gt;

&lt;p&gt;The same stretch of work also adds code snippet rendering and editing with a syntax-highlighted editor, voice event reply support for audio conversations, chat relay settings for direct messages, channel sharing through the Web Share API, a toolbar docking system for the media player, in-app signup for the latest Brainstorm Web of Trust service, send and receive money flows in DMs using &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1getal6ykt05fsz5nqu4uld09nfj3y3qxmv8crys4aeut53unfvlqr80nfm&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Alby&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1get…0nfm&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; and BOLT-11 invoices, Nostr-native GIF handling, and a stronger RSS import path for musicians that can pick up existing Lightning splits from podcast feeds.&lt;/p&gt;

&lt;h3 id=&#34;nostr-vpn-rapid-iteration-2&#34;&gt;nostr-vpn rapid iteration&lt;/h3&gt;

&lt;p&gt;Beyond the &lt;a href=&#34;#nostr-vpn-launches-as-a-tailscale-alternative&#34;&gt;initial launch&lt;/a&gt;, the &lt;a href=&#34;https://github.com/mmalmi/nostr-vpn&#34;&gt;nostr-vpn&lt;/a&gt; commit log reveals the specific problems encountered during real deployment. &lt;a href=&#34;https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.3&#34;&gt;v0.2.3&lt;/a&gt; through &lt;a href=&#34;https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.5&#34;&gt;v0.2.5&lt;/a&gt; added the initial installer script and cross-platform CLI. &lt;a href=&#34;https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.6&#34;&gt;v0.2.6&lt;/a&gt; and &lt;a href=&#34;https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.7&#34;&gt;v0.2.7&lt;/a&gt; brought Windows support, which required UAC path quoting for config writes and daemon-owned config updates. &lt;a href=&#34;https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.8&#34;&gt;v0.2.8&lt;/a&gt; through &lt;a href=&#34;https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.10&#34;&gt;v0.2.10&lt;/a&gt; fixed Windows GUI service actions, CLI subprocess handling, and machine-scoped service configuration. &lt;a href=&#34;https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.12&#34;&gt;v0.2.12&lt;/a&gt; replaced LAN discovery with timed LAN pairing, a user-initiated flow where two devices on the same local network pair without relay signaling. The pattern is textbook early-stage field testing: each release targets a specific deployment failure, the user base is small enough to iterate daily, and the developer is using the tool personally between releases.&lt;/p&gt;

&lt;h3 id=&#34;comet-automated-builds-2&#34;&gt;Comet automated builds&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nodetec/comet&#34;&gt;Comet&lt;/a&gt; (formerly Captain&amp;#39;s Log), the Nostr-native long-form writing tool from Nodetec, produced over 40 automated alpha builds this week. Comet is a desktop app for writing and publishing NIP-23 (Long-form Content) articles, with local draft storage, markdown editing, and one-click publishing to the user&amp;#39;s relay set. The automated build pipeline generates a tagged release for every commit to the main branch, which makes the raw release count misleading as a measure of feature velocity. What the 40 builds do show is that the app is under daily active development, with each commit tested, packaged, and made available for download within minutes.&lt;/p&gt;

&lt;h2 id=&#34;nip-updates-20&#34;&gt;NIP Updates&lt;/h2&gt;

&lt;p&gt;Recent changes to the &lt;a href=&#34;https://github.com/nostr-protocol/nips&#34;&gt;NIPs repository&lt;/a&gt; during the March 17-24 window:&lt;/p&gt;

&lt;p&gt;No NIP merges landed between March 18 and March 24.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open PRs and Discussions updated during the window:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;NIP-AA: Autonomous Agents on Nostr&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2259&#34;&gt;PR #2259&lt;/a&gt;): Proposes conventions for autonomous agents operating on the Nostr network. The PR defines how agents identify themselves, discover services, and coordinate with other agents and humans through Nostr events.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-50/&#34;&gt;NIP-50&lt;/a&gt; (Search): Sort extensions&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2283&#34;&gt;PR #2283&lt;/a&gt;): Adds sort parameters to NIP-50 search queries, including top, hot, zaps, and new. This would let clients request ranked results from relays that support full-text search instead of sorting client-side.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;NIP-A5: WASM Programs&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2281&#34;&gt;PR #2281&lt;/a&gt;): Proposes a convention for publishing and discovering WebAssembly programs on Nostr. WASM binaries could be distributed as Nostr events, with relays serving as a discovery layer for portable executable code.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;NIP-CF: Combine Forces interoperable napps&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2277&#34;&gt;PR #2277&lt;/a&gt;): Defines a convention for interoperable Nostr applications (&amp;#34;napps&amp;#34;) that can compose functionality across different clients and services.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Snapshots NIP&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2279&#34;&gt;PR #2279&lt;/a&gt;): Proposes a mechanism for relay state snapshots, for relay synchronization and backup.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Checkpoints NIP&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2278&#34;&gt;PR #2278&lt;/a&gt;): Proposes checkpoint events for marking known-good relay state, complementing the snapshots proposal.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-58/&#34;&gt;NIP-58&lt;/a&gt; (Badges): Badge Sets refactor&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2276&#34;&gt;PR #2276&lt;/a&gt;): Restructures how badge collections are organized and referenced.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-11/&#34;&gt;NIP-11&lt;/a&gt; (Relay Information Document): Extensions&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2280&#34;&gt;PR #2280&lt;/a&gt;): Adds additional fields to the relay information document for richer machine-readable relay metadata.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;five-years-of-nostr-marches-2&#34;&gt;Five Years of Nostr Marches&lt;/h2&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-03-04-newsletter/#five-years-of-nostr-februaries&#34;&gt;Last month&amp;#39;s newsletter&lt;/a&gt; covered how Nostr&amp;#39;s Februaries progressed from the NIP-01 (Basic Protocol Flow) rewrite through the Damus App Store wave to mesh networking and agent proposals. This retrospective traces what happened each March from 2021 through 2026.&lt;/p&gt;

&lt;h3 id=&#34;march-2021-two-commits-2&#34;&gt;March 2021: Two Commits&lt;/h3&gt;

&lt;p&gt;Four months into its existence, Nostr&amp;#39;s March produced exactly two commits to the protocol repository, both on March 4. fiatjaf (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;fiatjaf&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub180c…h6w6&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) &lt;a href=&#34;https://github.com/nostr-protocol/nostr/commit/dcd8cc3&#34;&gt;added links to nostwitter instances&lt;/a&gt;, pointing early visitors to working deployments, and &lt;a href=&#34;https://github.com/nostr-protocol/nostr/commit/54dfb46&#34;&gt;added kind to the basic filter definition&lt;/a&gt;. That second commit is revealing: in March 2021, you could not yet filter Nostr events by kind. The protocol was that primitive. Two or three relays served the network. The Telegram group was the sole coordination channel. The NIPs repository did not exist yet; protocol proposals lived as files in the main nostr repo. fiatjaf was the only committer that month. The entire March 2021 output of what would become a protocol supporting VPNs, multiplayer games, and mesh networking five years later fits in a single git diff.&lt;/p&gt;

&lt;h3 id=&#34;march-2022-pre-damus-building-2&#34;&gt;March 2022: Pre-Damus Building&lt;/h3&gt;

&lt;p&gt;The main protocol repository received zero commits in March 2022. Development had shifted entirely to tool repositories. &lt;a href=&#34;https://github.com/fiatjaf/branle&#34;&gt;Branle&lt;/a&gt;, fiatjaf&amp;#39;s Vue.js web client and at the time the primary Nostr interface, received 5 commits including Docker deployment support and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-05/&#34;&gt;NIP-05&lt;/a&gt; (DNS-Based Verification) display name fixes that removed the &lt;code&gt;_@&lt;/code&gt; prefix from verification badges. Robert C. Martin (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub19mun7qwdyjf7qs3456u8kyxncjn5u2n7klpu4utgy68k4aenzj6synjnft&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;unclebobmartin&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub19mu…jnft&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;)&amp;#39;s &lt;a href=&#34;https://github.com/unclebob/more-speech&#34;&gt;more-speech&lt;/a&gt;, the Clojure desktop client, logged 13 or more commits adding threading, keyboard navigation, and an edit window. The most famous software author actively building on Nostr that month was not a crypto developer but the person whose &amp;#34;Clean Code&amp;#34; has sold millions of copies, writing a Nostr client in Clojure, a language choice that tells you everything about the early community: these were opinionated programmers building for themselves.&lt;/p&gt;

&lt;p&gt;The relay network had expanded to roughly 15 relays with an active user base in the hundreds. Damus did not exist yet and would not be created until April 2022. Nostream also had not appeared. The month&amp;#39;s work was infrastructure: making the existing tools more reliable for the small community that was already using them daily.&lt;/p&gt;

&lt;h3 id=&#34;march-2023-post-explosion-infrastructure-2&#34;&gt;March 2023: Post-Explosion Infrastructure&lt;/h3&gt;

&lt;p&gt;One month after the Damus App Store wave and the surge past 300,000 public keys, March 2023 was about absorbing the growth. The &lt;a href=&#34;https://github.com/nostr-protocol/nips&#34;&gt;NIPs repository&lt;/a&gt; merged 28 pull requests, the second-highest monthly count in protocol history. &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-51/&#34;&gt;NIP-51&lt;/a&gt; (Lists) merged, giving clients structured follow, mute, and bookmark collections. &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-39/&#34;&gt;NIP-39&lt;/a&gt; (External Identities in Profiles) landed, NIP-78 (Application-Specific Data) provided a general-purpose storage kind for apps that needed private state, and a rewrite of &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-57/&#34;&gt;NIP-57&lt;/a&gt; (Lightning Zaps) (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/392&#34;&gt;PR #392&lt;/a&gt;) consolidated the zap flow and clarified terminology. The most-discussed PR of the month was an alternative mention handling proposal (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/381&#34;&gt;PR #381&lt;/a&gt;) with over 50 comments.&lt;/p&gt;

&lt;p&gt;The most consequential new project was &lt;a href=&#34;https://github.com/nostr-dev-kit/ndk&#34;&gt;NDK&lt;/a&gt; (Nostr Development Kit), the TypeScript library for relay connections, event signing, caching, and subscription management. pablof7z (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1l2vyh47mk2p0qlsku7hg0vn29faehy9hy34ygaclpn66ukqp3afqutajft&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;PABLOF7z&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1l2v…ajft&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) made the &lt;a href=&#34;https://github.com/nostr-dev-kit/ndk/commit/09e5e03&#34;&gt;initial commit&lt;/a&gt; on March 16, 2023, then rewrote it from scratch 11 days later on March 27 (&amp;#34;basically another initial commit&amp;#34;), and had LNURL and zap support working by March 31. NDK went from nothing to zap-capable in 15 days. Five days after NDK&amp;#39;s creation, on March 21, the Alby team created &lt;a href=&#34;https://github.com/getAlby/nostr-wallet-connect&#34;&gt;NWC&lt;/a&gt; (Nostr Wallet Connect), the reference implementation of &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-47/&#34;&gt;NIP-47&lt;/a&gt; that connected Lightning wallets to Nostr applications. The two projects that would underpin the next three years of web-based Nostr development were born in the same 30-day window. OpenSats had not yet launched its Nostr fund; the first wave would not come until &lt;a href=&#34;https://opensats.org/blog/nostr-grants-july-2023&#34;&gt;July 2023&lt;/a&gt;, four months after NDK&amp;#39;s creation.&lt;/p&gt;

&lt;p&gt;Other notable creations that month included NostrGit, NostrChat, a nostr-signing-device project by LNbits, and nostrmo. &lt;a href=&#34;https://github.com/mikedilger/gossip&#34;&gt;Gossip&lt;/a&gt;, the Rust desktop client focused on intelligent relay selection, shipped three releases. The protocol was in build mode, and the tools created in March 2023 are still in use three years later.&lt;/p&gt;

&lt;h3 id=&#34;march-2024-protocol-maturation-2&#34;&gt;March 2024: Protocol Maturation&lt;/h3&gt;

&lt;p&gt;March 2024 was about hardening the protocol for long-term use. The NIPs repository merged 12 pull requests. The most significant was &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-34/&#34;&gt;NIP-34&lt;/a&gt; (Git Stuff), &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/997&#34;&gt;PR #997&lt;/a&gt;, which merged on March 5 after over 130 comments and 44 days of review. The discussion thread is a time capsule of the community debating how to build a decentralized GitHub. jb55 (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1xtscya34g58tk0z605fvr788k263gsu6cy9x0mhnm87echrgufzsevkk5s&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;jb55&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1xts…kk5s&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) drew parallels to &lt;code&gt;git send-email&lt;/code&gt;, Giszmo proposed using root commit hashes for cross-fork discovery (&amp;#34;something GitHub doesn&amp;#39;t do and we could&amp;#34;), mikedilger (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1acg6thl5psv62405rljzkj8spesceyfz2c32udakc2ak0dmvfeyse9p35c&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Mike Dilger ☑️&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1acg…p35c&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) suggested &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-98/&#34;&gt;NIP-98&lt;/a&gt; (HTTP Auth) event-signed authentication instead of SSH keys, and fiatjaf bluntly dismissed the need for version-control generality: &amp;#34;not for each version control system, just for git. No one uses the others.&amp;#34; Within hours of opening the PR, fiatjaf had already switched nak, go-nostr, and gitstr to accept patches over Nostr. DanConwayDev, whose ngit was already an OpenSats grantee, was among the most active contributors to the discussion. A bot field for profile metadata also merged, giving clients a machine-readable way to distinguish automated accounts from human ones.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/vitorpamplona/amethyst&#34;&gt;Amethyst&lt;/a&gt; shipped v0.85.0 with git event support, wiki articles, medical data rendering, and content editing in a single release. &lt;a href=&#34;https://github.com/MostroP2P/mostro&#34;&gt;Mostro&lt;/a&gt; reached v0.10.0. &lt;a href=&#34;https://github.com/Spl0itable/nosflare&#34;&gt;Nosflare&lt;/a&gt;, a serverless Nostr relay running on Cloudflare Workers, proved that relay logic could run at the edge. OpenSats issued a &lt;a href=&#34;https://opensats.org/blog/long-term-support-for-bruno-garcia&#34;&gt;Long-Term Support grant to Bruno Garcia&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub12a6hhhcn3lvhehzm7wgx44jjh4cvu2djj0txezentawumdk5ky8qquclwp&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;bruno&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub12a6…clwp&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) for sustained contributions to the Amethyst client.&lt;/p&gt;

&lt;h3 id=&#34;march-2025-infrastructure-expansion-2&#34;&gt;March 2025: Infrastructure Expansion&lt;/h3&gt;

&lt;p&gt;March 2025 produced 10 merged NIPs. The headline was &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-66/&#34;&gt;NIP-66&lt;/a&gt; (Relay Discovery and Liveness Monitoring), &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/230&#34;&gt;PR #230&lt;/a&gt;, which merged on March 3 after a 25-month journey. dskvr first proposed relay monitoring in February 2023, was told it could be done client-side, explained why connecting to thousands of relays at once was impractical for individual clients, went through seven complete drafts, built monitoring nodes across eight geographic regions (Northeast US, Brazil, US-West, US-East, Australia, India, Korea, South Africa), and waited for the relay tooling to catch up. By the time it merged, implementations already existed in nostr.watch, relaypag.es, monitorlizard, Snort, noStrudel, and Jumble. The NIP-66 data would later fuel the Nostrability outbox benchmarks &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-03-04-newsletter/#outbox-model-under-the-microscope&#34;&gt;covered in Newsletter #12&lt;/a&gt;. NIP-C0 (Code Snippets) also merged (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1852&#34;&gt;PR #1852&lt;/a&gt;, 63 comments), adding kind 1337 events for sharing source code.&lt;/p&gt;

&lt;p&gt;The first MCP servers for Nostr appeared this month. &lt;a href=&#34;https://github.com/AustinKelsay/nostr-mcp-server&#34;&gt;nostr-mcp-server&lt;/a&gt; appeared on March 23 and &lt;a href=&#34;https://github.com/getAlby/nwc-mcp-server&#34;&gt;nwc-mcp-server&lt;/a&gt; on March 14, just four months after Anthropic announced the Model Context Protocol in November 2024. These early bridges preceded the full &lt;a href=&#34;https://nostrcompass.org/en/topics/contextvm/&#34;&gt;ContextVM&lt;/a&gt; SDK and the agent commerce work that followed in late 2025 and early 2026.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/mikedilger/gossip&#34;&gt;Gossip&lt;/a&gt; shipped v0.14.0. &lt;a href=&#34;https://github.com/coracle-social/coracle&#34;&gt;Coracle&lt;/a&gt;, hodlbod (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1jlrs53pkdfjnts29kveljul2sm0actt6n8dxrrzqcersttvcuv3qdjynqn&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;hodlbod&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1jlr…ynqn&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;)&amp;#39;s web client with relay-aware feed management, shipped three releases. OpenSats announced its &lt;a href=&#34;https://opensats.org/blog/tenth-wave-of-nostr-grants&#34;&gt;tenth wave of Nostr grants&lt;/a&gt;, continuing the funding pipeline that had been running since mid-2023.&lt;/p&gt;

&lt;h3 id=&#34;march-2026-convergence-2&#34;&gt;March 2026: Convergence&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;March 2026 activity is drawn from Nostr Compass issues &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-03-04-newsletter/&#34;&gt;#12&lt;/a&gt; through #15 (this issue).&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;March 2026 is the month where disparate threads converged into working systems. The &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-03-04-newsletter/#marmot-development-kit-ships-first-public-release&#34;&gt;Marmot Development Kit&lt;/a&gt; shipped its first public release with encrypted media, multi-language bindings, and a ChaCha20-Poly1305 migration that required coordinated updates across spec, Rust, and TypeScript. &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/#shopstr-and-milk-market-open-mcp-commerce-surfaces&#34;&gt;Shopstr and Milk Market&lt;/a&gt; added MCP commerce surfaces for agent-driven purchasing. &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-42/&#34;&gt;NIP-42&lt;/a&gt; relay auth landed simultaneously in &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/#nip-42-relay-auth-across-bunker-signer-and-relay&#34;&gt;Amber&lt;/a&gt;, strfry, and OAuth Bunker, closing the loop between signer, relay, and bunker software. &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-03-18-newsletter/#notedeck-moves-release-discovery-onto-nostr&#34;&gt;Notedeck&lt;/a&gt; shipped Nostr-native software updates using &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-94/&#34;&gt;NIP-94&lt;/a&gt; (File Metadata) release events.&lt;/p&gt;

&lt;p&gt;This week, &lt;a href=&#34;#bigbrotr-maps-exposed-private-keys-across-the-relay-network&#34;&gt;BigBrotr&lt;/a&gt; scanned the full relay network for leaked private keys and published both the analysis and a DVM checker. &lt;a href=&#34;#nostr-vpn-launches-as-a-tailscale-alternative&#34;&gt;Nostr VPN&lt;/a&gt; proved that Nostr&amp;#39;s key model works for network infrastructure, not only social media. &lt;a href=&#34;#open-source-doom-runs-peer-to-peer-over-nostr&#34;&gt;DOOM&lt;/a&gt; demonstrated that Nostr discovery, Marmot encryption, and QUIC transport can run a real-time multiplayer game. &lt;a href=&#34;#amber-v500-and-v501&#34;&gt;Amber&lt;/a&gt; jumped to v5.0.0. &lt;a href=&#34;#wisp-ships-16-releases-in-one-week&#34;&gt;Wisp&lt;/a&gt; shipped 16 releases in seven days. Twenty-five or more tagged releases came from major projects in a single week.&lt;/p&gt;

&lt;p&gt;Seven NIPs merged in the first 24 days of the month. The protocol added &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-54/&#34;&gt;NIP-54&lt;/a&gt; (Wiki) Djot markup, &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-19/&#34;&gt;NIP-19&lt;/a&gt; (Bech32-Encoded Entities) input limits, &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-91/&#34;&gt;NIP-91&lt;/a&gt; (AND Operator for Filters) boolean query logic, and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-85/&#34;&gt;NIP-85&lt;/a&gt; (Trusted Assertions) Web of Trust assertions. Open proposals ranged from autonomous agents (NIP-AA) to WASM programs (NIP-A5) to search sort extensions for &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-50/&#34;&gt;NIP-50&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&#34;looking-ahead-2&#34;&gt;Looking Ahead&lt;/h3&gt;

&lt;p&gt;Five Marches of Nostr trace a clear arc. In 2021, one person made two commits to a protocol that could not yet filter events by kind. By 2023, NDK and NWC were born five days apart to absorb the post-Damus explosion. By 2024, a 141-comment PR thread debated how git collaboration should work on a social protocol. By 2025, a relay monitoring spec that had been patiently rewritten seven times over 25 months finally merged. In 2026, someone got annoyed by Tailscale requiring an account and built a VPN using Nostr keypairs, while someone else shipped multiplayer DOOM that discovers peers through Nostr relays and encrypts gameplay through Marmot. BigBrotr&amp;#39;s scan of 41 million events across 1,085 relays gives a concrete measure of how far the network has grown. The protocol&amp;#39;s surface area in March 2026 would have been unrecognizable to March 2021, but the underlying model, events signed by secp256k1 keys and distributed through relays, has not changed.&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;That&amp;#39;s it for this week. Building something or have news to share? Reach out via DM or find us on Nostr.&lt;/p&gt;
 &lt;/blockquote&gt;
    </content>
    <updated>2026-03-25T15:43:54Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs2pkvkduascrv2yfu2y9zjc2z8e92g2zy34kck8ax2cfe25mkwgjqzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq0vx3w8</id>
    
      <title type="html">Podcast #13 is out. We cover Shopstr and Milk Market&amp;#39;s MCP ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs2pkvkduascrv2yfu2y9zjc2z8e92g2zy34kck8ax2cfe25mkwgjqzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq0vx3w8" />
    <content type="html">
      In reply to &lt;a href=&#39;/naddr1qq0k2urfwdhkgefdxymnwdpnxsurgdecxuunytt4washzapk89nh5q3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqp6kvmyt2hn&#39;&gt;naddr1qq…t2hn&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;Podcast #13 is out. &lt;br/&gt;We cover Shopstr and Milk Market&amp;#39;s MCP commerce push plus NIP-42 relay auth across the stack. We also dig into Route96, Samizdat, and this week&amp;#39;s releases. Then we close with deep dives on NIP-49 and NIP-70. Read the issue at nostrcompass.org.&lt;br/&gt;&lt;br/&gt;&lt;video controls width=&#34;100%&#34; class=&#34;max-h-[90vh] bg-neutral-300 dark:bg-zinc-700&#34;&gt;&lt;source src=&#34;https://blossom.primal.net/2d32f45baaea6746f0f95efc4e197e3c09e29fa1b0dac3847a2454c6382d6b20.ogg&#34;&gt;&lt;/video&gt;&lt;br/&gt;&lt;a href=&#34;https://podcast.nostrcompass.org/naddr1qvzqqqr4vcpzqa6e2nmnzsgjfzdy520vdy4hywr06c9ue6crpr2zxyq749uu275qqyt8wumn8ghj7un9d3shjtnwdaehgu3wvfskueqpp4mhxue69uhkummn9ekx7mqpz3mhxue69uhhyetvv9ujuerpd46hxtnfduqp7etsd9ek7er995cnwde5xv6rsdph8qmnjv3dw4mkzut5xcukw7s0pud9g&#34;&gt;https://podcast.nostrcompass.org/naddr1qvzqqqr4vcpzqa6e2nmnzsgjfzdy520vdy4hywr06c9ue6crpr2zxyq749uu275qqyt8wumn8ghj7un9d3shjtnwdaehgu3wvfskueqpp4mhxue69uhkummn9ekx7mqpz3mhxue69uhhyetvv9ujuerpd46hxtnfduqp7etsd9ek7er995cnwde5xv6rsdph8qmnjv3dw4mkzut5xcukw7s0pud9g&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;#podcast #nostra&lt;br/&gt;
    </content>
    <updated>2026-03-24T10:36:52Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsvydegp7zgusxlg248rudq8hakztm5dku4rztxfdmxspre3tyht8czypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqdjr9ff</id>
    
      <title type="html">Nostr Compass Podcast #12 is out. We unpack outbox benchmarks, ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsvydegp7zgusxlg248rudq8hakztm5dku4rztxfdmxspre3tyht8czypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqdjr9ff" />
    <content type="html">
      Nostr Compass Podcast #12 is out. We unpack outbox benchmarks, ContextVM&amp;#39;s MCP, and MDK&amp;#39;s public release. We also run through this week&amp;#39;s releases and NIP updates. Then we trace five Februaries of Nostr from the 2021 rewrite to 2026 infrastructure growth. Read the issue at nostrcompass.org.&lt;br/&gt;&lt;br/&gt;&lt;video controls width=&#34;100%&#34; class=&#34;max-h-[90vh] bg-neutral-300 dark:bg-zinc-700&#34;&gt;&lt;source src=&#34;https://blossom.primal.net/d2b742322a8f1a804adacaf863581b7d2b8cb138c21c5281d9bf529d620d23e2.ogg&#34;&gt;&lt;/video&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://podcast.nostrcompass.org/naddr1qvzqqqr4vcpzqa6e2nmnzsgjfzdy520vdy4hywr06c9ue6crpr2zxyq749uu275qqyt8wumn8ghj7un9d3shjtnwdaehgu3wvfskueqpp4mhxue69uhkummn9ekx7mqpz3mhxue69uhhyetvv9ujuerpd46hxtnfduqp7etsd9ek7er995cnwde5xqurgwphxscnjwpdd4shjurp0q6x76sy36rd6&#34;&gt;https://podcast.nostrcompass.org/naddr1qvzqqqr4vcpzqa6e2nmnzsgjfzdy520vdy4hywr06c9ue6crpr2zxyq749uu275qqyt8wumn8ghj7un9d3shjtnwdaehgu3wvfskueqpp4mhxue69uhkummn9ekx7mqpz3mhxue69uhhyetvv9ujuerpd46hxtnfduqp7etsd9ek7er995cnwde5xqurgwphxscnjwpdd4shjurp0q6x76sy36rd6&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;#podcast #nostr
    </content>
    <updated>2026-03-21T09:26:36Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsyjmfu9fm5z8gzxj6sgyg8nfd5wa0xqm7zrg2dw86sfyhkg4wtelgzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqt0qxh7</id>
    
      <title type="html">Nostr Compass #14 is out. Amethyst expands NWC. Notedeck turns ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsyjmfu9fm5z8gzxj6sgyg8nfd5wa0xqm7zrg2dw86sfyhkg4wtelgzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqt0qxh7" />
    <content type="html">
      Nostr Compass #14 is out.&lt;br/&gt;Amethyst expands NWC. Notedeck turns signed NIP-94 events into app updates. Relay routing gets sharper across Damus, Nostur, and Outbox. We also dig into NIP-94 and NIP-54.&lt;br/&gt;Read it here: &lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/naddr1qqgrje3jxejnvephvgcr2wpjvvcngq3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqp65wl6sckz&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;naddr1qq…sckz&lt;/a&gt;&lt;/span&gt; &lt;/div&gt; &lt;p&gt;Welcome back to Nostr Compass, your weekly guide to Nostr.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This week:&lt;/strong&gt; &lt;a href=&#34;https://github.com/vitorpamplona/amethyst&#34;&gt;Amethyst&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub142gywvjkq0dv6nupggyn2euhx4nduwc7yz5f24ah9rpmunr2s39se3xrj0&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;amethyst&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub142g…xrj0&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) lands full &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-47/&#34;&gt;NIP-47&lt;/a&gt; (Nostr Wallet Connect) method support, &lt;a href=&#34;https://github.com/getAlby/hub&#34;&gt;Alby Hub&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1getal6ykt05fsz5nqu4uld09nfj3y3qxmv8crys4aeut53unfvlqr80nfm&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Alby&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1get…0nfm&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) adds multiple relay support in &lt;a href=&#34;https://github.com/getAlby/hub/releases/tag/v1.21.6&#34;&gt;v1.21.6&lt;/a&gt;, &lt;a href=&#34;https://github.com/greenart7c3/Amber&#34;&gt;Amber&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1w4uswmv6lu9yel005l3qgheysmr7tk9uvwluddznju3nuxalevvs2d0jr5&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;greenart7c3&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1w4u…0jr5&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) ships &lt;a href=&#34;https://github.com/greenart7c3/Amber/releases/tag/v4.1.3&#34;&gt;v4.1.3&lt;/a&gt; with built-in Tor and finer signer permissions, and &lt;a href=&#34;https://github.com/ZeusLN/zeus&#34;&gt;Zeus&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1xnf02f60r9v0e5kty33a404dm79zr7z2eepyrk5gsq3m7pwvsz2sazlpr5&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;ZEUS&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1xnf…lpr5&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) removes a risky NWC keysend path in &lt;a href=&#34;https://github.com/ZeusLN/zeus/pull/3835&#34;&gt;PR #3835&lt;/a&gt;. &lt;a href=&#34;https://github.com/damus-io/notedeck&#34;&gt;Notedeck&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub18m76awca3y37hkvuneavuw6pjj4525fw90necxmadrvjg0sdy6qsngq955&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;damus&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub18m7…q955&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) ships a signed updater in &lt;a href=&#34;https://github.com/damus-io/notedeck/releases/tag/v0.8.0-rc2&#34;&gt;v0.8.0-rc2&lt;/a&gt; that discovers releases through &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-94/&#34;&gt;NIP-94&lt;/a&gt; (File Metadata) events, while &lt;a href=&#34;https://github.com/damus-io/damus&#34;&gt;Damus&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub18m76awca3y37hkvuneavuw6pjj4525fw90necxmadrvjg0sdy6qsngq955&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;damus&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub18m7…q955&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) fixes stale &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-65/&#34;&gt;NIP-65&lt;/a&gt; (Relay List Metadata) state, &lt;a href=&#34;https://github.com/nostrability/outbox&#34;&gt;Nostrability Outbox&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1zafcms4xya5ap9zr7xxr0jlrtrattwlesytn2s42030lzu0dwlzqpd26k5&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;elsat&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1zaf…26k5&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) revises its benchmark results with corrected data, and &lt;a href=&#34;https://github.com/PrimalHQ/primal-ios-app&#34;&gt;Primal iOS&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub12vkcxr0luzwp8e673v29eqjhrr7p9vqq8asav85swaepclllj09sylpugg&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;primal&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub12vk…pugg&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) tests direct relay subscriptions for DMs. &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app&#34;&gt;Primal Android&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub12vkcxr0luzwp8e673v29eqjhrr7p9vqq8asav85swaepclllj09sylpugg&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;primal&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub12vk…pugg&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) ships &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/releases/tag/3.0.7&#34;&gt;3.0.7&lt;/a&gt;, &lt;a href=&#34;https://github.com/v0l/route96&#34;&gt;Route96&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1v0lxxxxutpvrelsksy8cdhgfux9l6a42hsj2qzquu2zk7vc9qnkszrqj49&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Kieran&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1v0l…qj49&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) ships &lt;a href=&#34;https://github.com/v0l/route96/releases/tag/v0.6.0&#34;&gt;v0.6.0&lt;/a&gt;, &lt;a href=&#34;https://github.com/DavidGershony/openChat&#34;&gt;OpenChat&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1nwt2g6fkshuj4udrs9zxr8992dyp75s9qx647kxaue98trzqqmssrxx05y&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;The Dude&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1nwt…x05y&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) keeps tightening Marmot interoperability in &lt;a href=&#34;https://github.com/DavidGershony/openChat/releases/tag/v0.1.0-alpha.11&#34;&gt;v0.1.0-alpha.11&lt;/a&gt;, &lt;a href=&#34;https://github.com/sledtools/pika&#34;&gt;Pika&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1zxu639qym0esxnn7rzrt48wycmfhdu3e5yvzwx7ja3t84zyc2r8qz8cx2y&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;justinmoon&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1zxu…cx2y&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) consolidates its runtime in &lt;a href=&#34;https://github.com/sledtools/pika/releases/tag/pika/v1.1.1&#34;&gt;pika/v1.1.1&lt;/a&gt;, and &lt;a href=&#34;https://github.com/nostria-app/nostria&#34;&gt;Nostria&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1zl3g38a6qypp6py2z07shggg45cu8qex992xpss7d8zrl28mu52s4cjajh&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;sondreb&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1zl3…jajh&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) adds &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-85/&#34;&gt;NIP-85&lt;/a&gt; (Trusted Assertions) Web of Trust filtering. The NIPs repository merges &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-54/&#34;&gt;NIP-54&lt;/a&gt; (Wiki) Djot markup and a 5000-character input cap for &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-19/&#34;&gt;NIP-19&lt;/a&gt; (Bech32-Encoded Entities), and this issue digs into &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-94/&#34;&gt;NIP-94&lt;/a&gt; (File Metadata) and what the &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-54/&#34;&gt;NIP-54&lt;/a&gt; Djot switch changes for implementers.&lt;/p&gt;

&lt;h2 id=&#34;news-8&#34;&gt;News&lt;/h2&gt;

&lt;h3 id=&#34;wallet-connect-support-broadens-and-wallet-clients-tighten-failure-paths-2&#34;&gt;Wallet Connect support broadens, and wallet clients tighten failure paths&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/vitorpamplona/amethyst&#34;&gt;Amethyst&lt;/a&gt;, the Android client maintained by vitorpamplona, merged &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/1828&#34;&gt;PR #1828&lt;/a&gt;, which brings its &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-47/&#34;&gt;NIP-47&lt;/a&gt; implementation close to full protocol coverage. The patch adds &lt;code&gt;make_invoice&lt;/code&gt;, &lt;code&gt;lookup_invoice&lt;/code&gt;, &lt;code&gt;list_transactions&lt;/code&gt;, &lt;code&gt;get_balance&lt;/code&gt;, &lt;code&gt;get_info&lt;/code&gt;, hold invoice methods, keysend support with TLV records, capability discovery via kind &lt;code&gt;13194&lt;/code&gt;, and notification events on kind &lt;code&gt;23197&lt;/code&gt; with &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; (Encrypted Payloads). That gives the client a much wider NWC surface without leaning on app-specific extensions.&lt;/p&gt;

&lt;p&gt;The surrounding wallet stack moved in the same direction. &lt;a href=&#34;https://github.com/getAlby/hub&#34;&gt;Alby Hub&lt;/a&gt;, the self-custodial Lightning node and wallet service behind many NWC deployments, shipped &lt;a href=&#34;https://github.com/getAlby/hub/releases/tag/v1.21.6&#34;&gt;v1.21.6&lt;/a&gt; with multiple relay support and simpler connection and swap flows. &lt;a href=&#34;https://github.com/ZeusLN/zeus&#34;&gt;Zeus&lt;/a&gt;, the mobile Lightning wallet, merged &lt;a href=&#34;https://github.com/ZeusLN/zeus/pull/3835&#34;&gt;PR #3835&lt;/a&gt; removing NWC keysend support after identifying a silent fund-drain path in that flow, while also fixing pending-event and Cashu activity handling. Wallet connectivity on Nostr is getting broader, and implementers are removing flows that are hard to secure.&lt;/p&gt;

&lt;h3 id=&#34;notedeck-moves-release-discovery-onto-nostr-2&#34;&gt;Notedeck moves release discovery onto Nostr&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/&#34;&gt;Following last week&amp;#39;s Notedeck coverage&lt;/a&gt;, &lt;a href=&#34;https://github.com/damus-io/notedeck&#34;&gt;Notedeck&lt;/a&gt;, the native desktop client from the Damus team, shipped &lt;a href=&#34;https://github.com/damus-io/notedeck/releases/tag/v0.8.0-rc2&#34;&gt;v0.8.0-rc2&lt;/a&gt; after merging &lt;a href=&#34;https://github.com/damus-io/notedeck/pull/1326&#34;&gt;PR #1326&lt;/a&gt;. The new updater subscribes to signed kind &lt;code&gt;1063&lt;/code&gt; release events, matches the local platform, downloads the referenced binary, and verifies its SHA256 hash before install. Release metadata no longer has to come from the GitHub API or a project website. A trusted release pubkey and a relay connection are enough.&lt;/p&gt;

&lt;p&gt;The same patch adds a &lt;code&gt;notedeck-release&lt;/code&gt; CLI that publishes those events from GitHub release artifacts, which means the release pipeline now has a Nostr-native publishing path as well as a Nostr-native discovery path. It also puts the Damus and Notedeck updater model much closer to Zapstore (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub10r8xl2njyepcw2zwv3a6dyufj4e4ajx86hz6v4ehu4gnpupxxp7stjt2p8&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Zapstore&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub10r8…t2p8&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;)&amp;#39;s relay-published signed release flow: Zapstore&amp;#39;s &lt;code&gt;zsp&lt;/code&gt; tooling already handles software assets as kind &lt;code&gt;1063&lt;/code&gt; or &lt;code&gt;3063&lt;/code&gt; events, so this path is not locked to one client or one publisher. The rest of the release candidate is practical desktop work, follows columns, profile &amp;#34;View As User,&amp;#34; &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-59/&#34;&gt;NIP-59&lt;/a&gt; (Gift Wrap) support, real-time note stats, and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-11/&#34;&gt;NIP-11&lt;/a&gt; (Relay Information Document) limitation handling, but the updater is the part likely to outlive this one release cycle.&lt;/p&gt;

&lt;h3 id=&#34;relay-state-is-moving-closer-to-runtime-behavior-2&#34;&gt;Relay state is moving closer to runtime behavior&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/damus-io/damus&#34;&gt;Damus&lt;/a&gt; merged &lt;a href=&#34;https://github.com/damus-io/damus/pull/3665&#34;&gt;PR #3665&lt;/a&gt;, replacing a stale stored relay-list event ID with a direct database query for the latest kind &lt;code&gt;10002&lt;/code&gt; event. When the old value went stale, relay add and remove operations could fall back to bootstrap or year-old lists, which made some relay changes appear to succeed while leaving the active state unchanged. &lt;a href=&#34;https://github.com/damus-io/damus/pull/3690&#34;&gt;PR #3690&lt;/a&gt; fixes a second failure path by deleting stale &lt;code&gt;lock.mdb&lt;/code&gt; state during LMDB compaction so the app does not crash with &lt;code&gt;SIGBUS&lt;/code&gt; on the next launch.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/PrimalHQ/primal-ios-app&#34;&gt;Primal iOS&lt;/a&gt; opened &lt;a href=&#34;https://github.com/PrimalHQ/primal-ios-app/pull/194&#34;&gt;PR #194&lt;/a&gt;, which subscribes directly to a chat partner&amp;#39;s &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-04/&#34;&gt;NIP-04&lt;/a&gt; (Encrypted Direct Messages) write relays while a conversation is open, keeping the cache server as fallback. &lt;a href=&#34;https://github.com/nostur-com/nostur-ios-public&#34;&gt;Nostur&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1n0stur7q092gyverzc2wfc00e8egkrdnnqq3alhv7p072u89m5es5mk6h0&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Nostur&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1n0s…k6h0&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) opened &lt;a href=&#34;https://github.com/nostur-com/nostur-ios-public/pull/53&#34;&gt;PR #53&lt;/a&gt;, which combines randomized relay scoring, &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-66/&#34;&gt;NIP-66&lt;/a&gt; liveness filtering from nostr.watch, and Thompson sampling to change relay selection from a fixed heuristic into a learned policy. Clients have long treated relay choice as setup data. More apps now treat it as live state that needs measurement and repair logic.&lt;/p&gt;

&lt;h2 id=&#34;releases-14&#34;&gt;Releases&lt;/h2&gt;

&lt;h3 id=&#34;primal-android-3-0-7-2&#34;&gt;Primal Android 3.0.7&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app&#34;&gt;Primal Android&lt;/a&gt;, the Android client from Primal, shipped &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/releases/tag/3.0.7&#34;&gt;3.0.7&lt;/a&gt; with a new poll and wallet cycle. &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/945&#34;&gt;PR #945&lt;/a&gt; adds zap-based poll voting, &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/948&#34;&gt;PR #948&lt;/a&gt; paginates vote loading so larger polls stay usable, and &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/965&#34;&gt;PR #965&lt;/a&gt; fetches zap receipts for all transactions. The same release also tags supported events with &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-89/&#34;&gt;NIP-89&lt;/a&gt; (Recommended Application Handlers) client metadata in &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/968&#34;&gt;PR #968&lt;/a&gt;, which helps downstream clients attribute event origins more cleanly.&lt;/p&gt;

&lt;h3 id=&#34;amber-v4-1-3-2&#34;&gt;Amber v4.1.3&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/&#34;&gt;Following last week&amp;#39;s Amber coverage&lt;/a&gt;, &lt;a href=&#34;https://github.com/greenart7c3/Amber&#34;&gt;Amber&lt;/a&gt;, the Android signer app for &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-55/&#34;&gt;NIP-55&lt;/a&gt; flows, shipped &lt;a href=&#34;https://github.com/greenart7c3/Amber/releases/tag/v4.1.3&#34;&gt;v4.1.3&lt;/a&gt;. The release builds on its recent &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-42/&#34;&gt;NIP-42&lt;/a&gt; relay-auth work with more operational hardening: &lt;a href=&#34;https://github.com/greenart7c3/Amber/pull/327&#34;&gt;PR #327&lt;/a&gt; adds built-in Tor alongside Orbot support, &lt;a href=&#34;https://github.com/greenart7c3/Amber/pull/324&#34;&gt;PR #324&lt;/a&gt; replaces coarse NIP-based encryption permissions with content-type-specific rules, and &lt;a href=&#34;https://github.com/greenart7c3/Amber/pull/336&#34;&gt;PR #336&lt;/a&gt; removes network permissions from the offline flavor while &lt;a href=&#34;https://github.com/greenart7c3/Amber/pull/335&#34;&gt;PR #335&lt;/a&gt; adds CI checks to keep it that way. &lt;a href=&#34;https://github.com/greenart7c3/Amber/pull/322&#34;&gt;PR #322&lt;/a&gt; also moves PIN storage into encrypted DataStore.&lt;/p&gt;

&lt;p&gt;This release tightens the signer boundary itself. That is useful for any Android flow that hands real keys or relay-auth decisions to Amber, because the hard part is not only what the signer can do. It is also how narrowly it can be scoped.&lt;/p&gt;

&lt;h3 id=&#34;route96-v0-6-0-2&#34;&gt;Route96 v0.6.0&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/&#34;&gt;Following last week&amp;#39;s Route96 coverage&lt;/a&gt;, &lt;a href=&#34;https://github.com/v0l/route96&#34;&gt;Route96&lt;/a&gt;, the media server that supports Blossom and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-96/&#34;&gt;NIP-96&lt;/a&gt; (HTTP File Storage), released &lt;a href=&#34;https://github.com/v0l/route96/releases/tag/v0.6.0&#34;&gt;v0.6.0&lt;/a&gt;. The release moves configuration and whitelist state into the database with hot reload and adds retention policies for cold or aging files. It also adds a richer &lt;code&gt;GET /user/files&lt;/code&gt; endpoint plus file-stat tracking for downloads and egress, which gives operators more visibility into how their storage server is being used.&lt;/p&gt;

&lt;h3 id=&#34;openchat-v0-1-0-alpha-11-2&#34;&gt;OpenChat v0.1.0-alpha.11&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/&#34;&gt;Following last week&amp;#39;s OpenChat coverage&lt;/a&gt;, &lt;a href=&#34;https://github.com/DavidGershony/openChat&#34;&gt;OpenChat&lt;/a&gt;, the Avalonia-based chat client built on the Marmot stack, shipped &lt;a href=&#34;https://github.com/DavidGershony/openChat/releases/tag/v0.1.0-alpha.11&#34;&gt;v0.1.0-alpha.11&lt;/a&gt; after a week of fast protocol work. &lt;a href=&#34;https://github.com/DavidGershony/openChat/commit/c33895d6b1a198f01b9b01a7be974bdce033fb9c&#34;&gt;Commit c33895d&lt;/a&gt; wraps Welcome events in &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-59/&#34;&gt;NIP-59&lt;/a&gt; gift wrap and removes old MIP-00 tag-normalization shims, &lt;a href=&#34;https://github.com/DavidGershony/openChat/commit/2738ff428154f60f50debb8f2a53662d427b28f1&#34;&gt;commit 2738ff4&lt;/a&gt; completes the MIP-02 compliance audit, and &lt;a href=&#34;https://github.com/DavidGershony/openChat/commit/8e470cf7945bced010168c8229d73d67db638b9f&#34;&gt;commit 8e470cf&lt;/a&gt; does the same for MIP-03 group message encryption. &lt;a href=&#34;https://github.com/DavidGershony/openChat/commit/129ca37e264efaa2d1a8b04fe95cd72e5e212547&#34;&gt;Commit 129ca37&lt;/a&gt; also consolidates NIP-44 handling onto the shared marmot-cs implementation, reducing the risk of client-side crypto drift.&lt;/p&gt;

&lt;h3 id=&#34;nak-v0-19-0-and-v0-19-1-2&#34;&gt;nak v0.19.0 and v0.19.1&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/fiatjaf/nak&#34;&gt;nak&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;fiatjaf&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub180c…h6w6&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), fiatjaf&amp;#39;s command-line Nostr toolkit, shipped &lt;a href=&#34;https://github.com/fiatjaf/nak/releases/tag/v0.19.0&#34;&gt;v0.19.0&lt;/a&gt; and &lt;a href=&#34;https://github.com/fiatjaf/nak/releases/tag/v0.19.1&#34;&gt;v0.19.1&lt;/a&gt;. The 0.19 series adds a group-forum UI in &lt;a href=&#34;https://github.com/fiatjaf/nak/commit/5f4efdbc69a36fc80ea3f97b2cdee1db6a7c5b47&#34;&gt;commit 5f4efdb&lt;/a&gt;, switches group metadata edits to a full replace flow in &lt;a href=&#34;https://github.com/fiatjaf/nak/commit/da0b75337198010687aceb6a07bbae67407faee3&#34;&gt;commit da0b753&lt;/a&gt;, and replaces the older &lt;code&gt;no-text&lt;/code&gt; handling with &lt;code&gt;supported_kinds&lt;/code&gt; in &lt;a href=&#34;https://github.com/fiatjaf/nak/commit/bef67d35d259e0450debf0fd870e1a937a2406bf&#34;&gt;commit bef67d3&lt;/a&gt;. For group implementers, that keeps the CLI aligned with the direction group specs and clients are moving.&lt;/p&gt;

&lt;h2 id=&#34;project-updates-8&#34;&gt;Project Updates&lt;/h2&gt;

&lt;h3 id=&#34;amethyst-2&#34;&gt;Amethyst&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/&#34;&gt;Following last week&amp;#39;s Amethyst coverage&lt;/a&gt;, &lt;a href=&#34;https://github.com/vitorpamplona/amethyst&#34;&gt;Amethyst&lt;/a&gt;, the Android client with one of the broadest protocol surfaces in Nostr, kept building on its wallet and relay work after the NIP-47 patch. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/1853&#34;&gt;PR #1853&lt;/a&gt; adds &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-45/&#34;&gt;NIP-45&lt;/a&gt; (Event Counting) COUNT queries across relay management screens, so users can see how many events each relay actually holds for home feed, notifications, DMs, and index data. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/1849&#34;&gt;PR #1849&lt;/a&gt; adds encrypted file uploads for &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; (Private Direct Messages) chats, with a retry path for unencrypted uploads when a storage host rejects the encrypted version.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/1791&#34;&gt;PR #1791&lt;/a&gt; also brings full &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; (Nostr Connect) desktop bunker login with a heartbeat indicator, which matters because remote signing failures often feel like random UI breakage from the user&amp;#39;s side. The client shows whether the signer is alive and how recently it answered, while also making it obvious when the current session uses a bunker.&lt;/p&gt;

&lt;h3 id=&#34;nostria-2&#34;&gt;Nostria&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostria-app/nostria&#34;&gt;Nostria&lt;/a&gt;, the multi-platform client built around a local-first stack, merged &lt;a href=&#34;https://github.com/nostria-app/nostria/pull/561&#34;&gt;PR #561&lt;/a&gt; adding Web of Trust filtering for feeds and thread replies. The feature uses the existing trust-service rank data and exposes it as both a feed filter and a reply filter, hiding authors whose rank does not clear the threshold while preserving thread structure when trusted descendants are present. That gives users a middle layer between &amp;#34;show everyone&amp;#34; and hardcoded list-based curation.&lt;/p&gt;

&lt;p&gt;The same week also brought &lt;a href=&#34;https://github.com/nostria-app/nostria/pull/563&#34;&gt;PR #563&lt;/a&gt;, which adds content filtering and repost support to the summary page. Outside the tracked PR list, Nostria has also been filling in more of its power-user surface. It now supports the latest Brainstorm Web of Trust service with in-app signup, along with send and receive money flows in DMs using NWC and BOLT-11 invoices. It also adds Nostr-native GIF handling through the emoji NIP and a stronger RSS import path for musicians that can pick up existing Lightning splits from podcast feeds. Nostria is treating ranking, media, payments, and publishing as one connected app surface.&lt;/p&gt;

&lt;h3 id=&#34;nostur-2&#34;&gt;Nostur&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostur-com/nostur-ios-public&#34;&gt;Nostur&lt;/a&gt;, the iOS client maintained by nostur-com, opened &lt;a href=&#34;https://github.com/nostur-com/nostur-ios-public/pull/53&#34;&gt;PR #53&lt;/a&gt; to change outbox routing from a fixed plan into a scored policy. The patch adds randomized relay scoring, &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-66/&#34;&gt;NIP-66&lt;/a&gt; liveness filtering with a cached nostr.watch feed, and Thompson sampling so relay success and failure data changes future selections. The design keeps a safety valve when too many relays would be filtered out and preserves &lt;code&gt;.onion&lt;/code&gt; relays. This is one of the clearest current examples of a client treating relay selection as an adaptive system.&lt;/p&gt;

&lt;h3 id=&#34;nostrability-outbox-2&#34;&gt;Nostrability Outbox&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-03-04-newsletter/&#34;&gt;Following the earlier Outbox benchmark report&lt;/a&gt;, &lt;a href=&#34;https://github.com/nostrability/outbox&#34;&gt;Nostrability Outbox&lt;/a&gt;, the benchmark and analysis project focused on &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-65/&#34;&gt;NIP-65&lt;/a&gt; and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-66/&#34;&gt;NIP-66&lt;/a&gt; client routing, spent the week tightening its own claims. &lt;a href=&#34;https://github.com/nostrability/outbox/pull/35&#34;&gt;PR #35&lt;/a&gt; replaces inflated Thompson-sampling results with a full re-benchmark across 1,511 runs and recommends the &lt;code&gt;CG3&lt;/code&gt; variant for NDK-style routing. &lt;a href=&#34;https://github.com/nostrability/outbox/pull/43&#34;&gt;PR #43&lt;/a&gt; adds decay and use-case comparisons, fixes a &lt;code&gt;0 follows&lt;/code&gt; cache-poisoning bug, then re-runs the Telluride dataset after pinning cache TTLs.&lt;/p&gt;

&lt;p&gt;That is not product work in the usual sense, but it matters for client authors because the project&amp;#39;s numbers are now sharper and less flattering in the places where they had previously overclaimed. The corrected result is still useful. Randomized selection keeps beating purely deterministic routing in the cases Outbox cares about, Thompson-style learning can materially improve coverage when clients persist useful relay history, and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-66/&#34;&gt;NIP-66&lt;/a&gt; liveness filtering cuts wasted time on dead relays. The work is also turning into concrete implementation proposals, including &lt;a href=&#34;https://github.com/nostr-dev-kit/ndk/pull/387&#34;&gt;NDK #387&lt;/a&gt;, &lt;a href=&#34;https://github.com/nostur-com/nostur-ios-public/pull/53&#34;&gt;Nostur #53&lt;/a&gt;, &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/1833&#34;&gt;Amethyst #1833&lt;/a&gt;, &lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1282&#34;&gt;rust-nostr #1282&lt;/a&gt;, &lt;a href=&#34;https://github.com/coracle-social/welshman/pull/53&#34;&gt;welshman #53&lt;/a&gt;, and &lt;a href=&#34;https://github.com/hzrd149/applesauce/pull/54&#34;&gt;applesauce #54&lt;/a&gt; plus &lt;a href=&#34;https://github.com/hzrd149/applesauce/pull/55&#34;&gt;applesauce #55&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&#34;white-noise-backend-nostr-npub1whtn0s68y3cs98zysa4nxrfzss5g5snhndv35tk5m2sudsr7ltms48r3ec-2&#34;&gt;White Noise backend (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1whtn0s68y3cs98zysa4nxrfzss5g5snhndv35tk5m2sudsr7ltms48r3ec&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;White Noise&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1wht…r3ec&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs&#34;&gt;whitenoise-rs&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1whtn0s68y3cs98zysa4nxrfzss5g5snhndv35tk5m2sudsr7ltms48r3ec&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;White Noise&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1wht…r3ec&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), the Rust backend used by White Noise and other Marmot tooling, merged two boundary-hardening patches around Blossom media handling. &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/637&#34;&gt;PR #637&lt;/a&gt; enforces HTTPS on Blossom URLs and adds an upload timeout, while &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/642&#34;&gt;PR #642&lt;/a&gt; caps blob downloads at &lt;code&gt;100 MiB&lt;/code&gt; to block oversized media pulls from turning into a denial-of-service path. For private messaging software, media URLs are one of the sharpest interfaces between encrypted application logic and untrusted network infrastructure. This week the team tightened that edge.&lt;/p&gt;

&lt;h3 id=&#34;rust-nostr-2&#34;&gt;rust-nostr&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/rust-nostr/nostr&#34;&gt;rust-nostr&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1drvpzev3syqt0kjrls50050uzf25gehpz9vgdw08hvex7e0vgfeq0eseet&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Yuki Kishimoto&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1drv…seet&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), the Rust protocol library, merged &lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1280&#34;&gt;PR #1280&lt;/a&gt; adding convenience constructors for &lt;code&gt;LocalRelayBuilderNip42&lt;/code&gt;. The new read and write helpers give embedded relay and test setups a clearer way to turn &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-42/&#34;&gt;NIP-42&lt;/a&gt; auth policy into code. This is a small library patch, but it matters for teams building local or app-bundled relays that need auth turned on without repeating boilerplate every time.&lt;/p&gt;

&lt;h3 id=&#34;pika-2&#34;&gt;Pika&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-03-04-newsletter/&#34;&gt;Following earlier Pika coverage&lt;/a&gt;, &lt;a href=&#34;https://github.com/sledtools/pika&#34;&gt;Pika&lt;/a&gt;, the Marmot-based messaging app, shipped &lt;a href=&#34;https://github.com/sledtools/pika/releases/tag/pika/v1.1.1&#34;&gt;pika/v1.1.1&lt;/a&gt; and &lt;a href=&#34;https://github.com/sledtools/pika/releases/tag/pikachat-v1.1.1&#34;&gt;pikachat-v1.1.1&lt;/a&gt; with a release cycle focused on runtime convergence. &lt;a href=&#34;https://github.com/sledtools/pika/pull/542&#34;&gt;PR #542&lt;/a&gt; introduces a shared Marmot runtime facade for the CLI and sidecar, with the app host moving onto the same surface. &lt;a href=&#34;https://github.com/sledtools/pika/pull/556&#34;&gt;PR #556&lt;/a&gt; tightens OpenClaw agent lifecycle and provisioning state, while &lt;a href=&#34;https://github.com/sledtools/pika/pull/600&#34;&gt;PR #600&lt;/a&gt; adds restore-from-backup and stricter recovery safety for managed environments.&lt;/p&gt;

&lt;p&gt;The direct user-facing surface here is smaller than in the last Pika writeup, but the architectural change is meaningful. Pulling group, media, call, and session logic behind one shared runtime reduces the chance that the app and daemon drift apart as the Marmot stack grows.&lt;/p&gt;

&lt;h2 id=&#34;nip-updates-23&#34;&gt;NIP Updates&lt;/h2&gt;

&lt;p&gt;Recent changes to the &lt;a href=&#34;https://github.com/nostr-protocol/nips&#34;&gt;NIPs repository&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Merged:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-54/&#34;&gt;NIP-54&lt;/a&gt; (Wiki): Switch from Asciidoc to Djot&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2242&#34;&gt;PR #2242&lt;/a&gt;): Wiki content on kind &lt;code&gt;30818&lt;/code&gt; now uses Djot as the canonical markup format. The merged text adds explicit wikilink behavior, merge-request examples for kind &lt;code&gt;818&lt;/code&gt;, redirect examples for kind &lt;code&gt;30819&lt;/code&gt;, and non-Latin normalization examples for &lt;code&gt;d&lt;/code&gt; tags. That gives implementers a cleaner parsing target than Asciidoc and removes one more spec path that depended on a Ruby-centered toolchain.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-19/&#34;&gt;NIP-19&lt;/a&gt; (Bech32-Encoded Entities): Add input limit&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2264&#34;&gt;PR #2264&lt;/a&gt;): The spec now recommends capping Bech32-encoded entity strings at 5000 characters. This is a small change with real parser value, because NIP-19 strings now appear in QR flows, deep links, share sheets, and user-pasted input across many clients.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Open PRs and Discussions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Nostr Key File for &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-49/&#34;&gt;NIP-49&lt;/a&gt; (Private Key Encryption)&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2269&#34;&gt;PR #2269&lt;/a&gt;): Proposes a &lt;code&gt;.nostrkey&lt;/code&gt; file format for password-encrypted key export and import. If merged, it would give clients a more normal file-based backup path than copying raw &lt;code&gt;ncryptsec&lt;/code&gt; strings around.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Membership state consistency for &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-43/&#34;&gt;NIP-43&lt;/a&gt; (Relay Access Metadata and Requests)&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2267&#34;&gt;PR #2267&lt;/a&gt;): Adds a section clarifying that relays should maintain one authoritative membership state per pubkey. That would simplify group-client logic around membership changes and replayed history.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Deletion guidance for &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; (Private Direct Messages)&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2260&#34;&gt;PR #2260&lt;/a&gt;): Proposes a concrete path for editing and deleting private messages through gift-wrapped delete events. The work is still open, but client authors need an answer here if NIP-17 is going to replace older DM flows fully.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Share-intent URI for &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-222/&#34;&gt;NIP-222&lt;/a&gt;&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2266&#34;&gt;PR #2266&lt;/a&gt;): The draft would standardize how mobile and desktop apps hand shared content into a Nostr client. That is one of the roughest interop edges in current app-to-app flows.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;nip-deep-dive-nip-94-file-metadata-2&#34;&gt;NIP Deep Dive: NIP-94 (File Metadata)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-94/&#34;&gt;NIP-94&lt;/a&gt; defines kind &lt;code&gt;1063&lt;/code&gt; as a first-class metadata event for a file. The &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/94.md&#34;&gt;specification&lt;/a&gt; gives the event its own human-readable &lt;code&gt;content&lt;/code&gt; plus machine-readable tags for download URL, MIME type, hashes, dimensions, previews, fallbacks, and storage service hints. That matters because the file becomes queryable on relays as its own object. A client does not have to scrape metadata out of surrounding content to understand what the file is.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;6a92ef8d7c3a1b5d4e8f9a0b1c2d3e4f567890abcdef1234567890abcdef1234&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;f1e2d3c4b5a697887766554433221100ffeeddccbbaa99887766554433221100&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1742342400,
  &amp;#34;kind&amp;#34;: 1063,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;url&amp;#34;, &amp;#34; https://downloads.example.org/notedeck/v0.8.0-rc2/notedeck-macos-universal.tar.gz&amp;#34;],
    [&amp;#34;m&amp;#34;, &amp;#34;application/gzip&amp;#34;],
    [&amp;#34;x&amp;#34;, &amp;#34;4a5b6c7d8e9f00112233445566778899aabbccddeeff00112233445566778899&amp;#34;],
    [&amp;#34;ox&amp;#34;, &amp;#34;4a5b6c7d8e9f00112233445566778899aabbccddeeff00112233445566778899&amp;#34;],
    [&amp;#34;size&amp;#34;, &amp;#34;48392011&amp;#34;],
    [&amp;#34;dim&amp;#34;, &amp;#34;0x0&amp;#34;],
    [&amp;#34;magnet&amp;#34;, &amp;#34;magnet:?xt=urn:btih:00112233445566778899aabbccddeeff00112233&amp;#34;],
    [&amp;#34;i&amp;#34;, &amp;#34;00112233445566778899aabbccddeeff00112233&amp;#34;],
    [&amp;#34;blurhash&amp;#34;, &amp;#34;LEHV6nWB2yk8pyo0adR*.7kCMdnj&amp;#34;],
    [&amp;#34;thumb&amp;#34;, &amp;#34; https://downloads.example.org/notedeck/v0.8.0-rc2/thumb.png&amp;#34;, &amp;#34;bbccddeeff00112233445566778899aabbccddeeff0011223344556677889900&amp;#34;],
    [&amp;#34;image&amp;#34;, &amp;#34; https://downloads.example.org/notedeck/v0.8.0-rc2/screenshot.png&amp;#34;, &amp;#34;ccddeeff00112233445566778899aabbccddeeff001122334455667788990011&amp;#34;],
    [&amp;#34;summary&amp;#34;, &amp;#34;Signed macOS release artifact for Notedeck v0.8.0-rc2&amp;#34;],
    [&amp;#34;alt&amp;#34;, &amp;#34;Notedeck desktop release archive&amp;#34;],
    [&amp;#34;fallback&amp;#34;, &amp;#34; https://mirror.example.net/notedeck/v0.8.0-rc2/notedeck-macos-universal.tar.gz&amp;#34;],
    [&amp;#34;service&amp;#34;, &amp;#34;nip96&amp;#34;]
  ],
  &amp;#34;content&amp;#34;: &amp;#34;Notedeck macOS universal build&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;11aa22bb33cc44dd55ee66ff77889900aabbccddeeff0011223344556677889911aa22bb33cc44dd55ee66ff77889900aabbccddeeff00112233445566778899&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The tags do more work than they first appear to do. &lt;code&gt;x&lt;/code&gt; identifies the served file, while &lt;code&gt;ox&lt;/code&gt; identifies the original file before any server-side transformation. The preview tags let clients build browseable file indexes without downloading the full asset, and &lt;code&gt;summary&lt;/code&gt; can carry a short excerpt beside them. &lt;code&gt;fallback&lt;/code&gt; gives a second source when the main URL fails, and &lt;code&gt;service&lt;/code&gt; hints at the storage protocol behind the file, such as &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-96/&#34;&gt;NIP-96&lt;/a&gt; or another host. NIP-94 therefore sits below social posting and above raw storage. It describes the file, not the conversation around the file.&lt;/p&gt;

&lt;p&gt;That is why this week&amp;#39;s Notedeck updater is interesting. &lt;a href=&#34;https://github.com/damus-io/notedeck/pull/1326&#34;&gt;PR #1326&lt;/a&gt; uses signed kind &lt;code&gt;1063&lt;/code&gt; events for software release discovery, then verifies the downloaded binary against the published SHA256. The same event shape can describe a software artifact or a media upload. NIP-94 is old enough to be stable, but it still has room to grow because more projects are treating metadata events as a transport for machines, not only as decoration for people.&lt;/p&gt;

&lt;h2 id=&#34;nip-deep-dive-nip-54-wiki-2&#34;&gt;NIP Deep Dive: NIP-54 (Wiki)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-54/&#34;&gt;NIP-54&lt;/a&gt; defines kind &lt;code&gt;30818&lt;/code&gt; as a wiki article event. The &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/54.md&#34;&gt;specification&lt;/a&gt; treats the &lt;code&gt;d&lt;/code&gt; tag as the normalized article topic and lets many authors publish entries for the same subject. The article body lives in &lt;code&gt;content&lt;/code&gt;, while tags handle normalized identity, display title, summaries, and references to earlier versions. That means NIP-54 is not only a content format. It is also a retrieval and ranking problem, because each client still has to decide which article version to show.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;8c94e5d1f2a300112233445566778899aabbccddeeff00112233445566778899&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1742342400,
  &amp;#34;kind&amp;#34;: 30818,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;d&amp;#34;, &amp;#34;nostr-wiki&amp;#34;],
    [&amp;#34;title&amp;#34;, &amp;#34;Nostr Wiki&amp;#34;],
    [&amp;#34;summary&amp;#34;, &amp;#34;Djot-formatted reference article about Nostr wiki events&amp;#34;],
    [&amp;#34;a&amp;#34;, &amp;#34;30818:11223344556677889900aabbccddeeff00112233445566778899aabbccddeeff:nostr-wiki&amp;#34;, &amp;#34;wss://relay.example.org&amp;#34;, &amp;#34;fork&amp;#34;],
    [&amp;#34;e&amp;#34;, &amp;#34;11223344556677889900aabbccddeeff00112233445566778899aabbccddeeff&amp;#34;, &amp;#34;wss://relay.example.org&amp;#34;, &amp;#34;fork&amp;#34;]
  ],
  &amp;#34;content&amp;#34;: &amp;#34;Nostr is a [protocol][] for carrying events across relays.\n\n[protocol]: &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nevent1example&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;nevent1e…mple&lt;/a&gt;&lt;/span&gt;&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;33cc44dd55ee66ff77889900aabbccddeeff0011223344556677889900112233cc44dd55ee66ff77889900aabbccddeeff00112233445566778899001122&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The merge this week changes the canonical markup from Asciidoc to Djot in &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2242&#34;&gt;PR #2242&lt;/a&gt;. That matters for implementers because Djot has a tighter standalone spec and simpler parser story across languages. The merged text also clarifies how reference-style wikilinks resolve, how merge requests use kind &lt;code&gt;818&lt;/code&gt;, how redirects use kind &lt;code&gt;30819&lt;/code&gt;, and how &lt;code&gt;d&lt;/code&gt; tag normalization should behave for non-Latin scripts. Those are the parts that make two independent clients agree on what article a link points to.&lt;/p&gt;

&lt;p&gt;NIP-54 also sits in an unusual place in the protocol. A wiki client needs content rendering, but it also needs ranking policy. Reactions, relay lists, contact lists, and explicit deference signals all feed into which article wins for a given topic. The Djot switch does not solve that ranking problem, but it does remove one of the parser ambiguities that sat underneath it. That is why the merge matters now: the change is less about nicer prose formatting and more about making multi-client wiki behavior easier to implement consistently.&lt;/p&gt;

&lt;p&gt;Building something, or want us to cover it? Reach out via &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; DM on Nostr at &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Nostr Compass&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1wav…2923&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt;
 &lt;/blockquote&gt;
    </content>
    <updated>2026-03-18T15:28:54Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsqjvuvuwlc8p49066x6m9hhy7nz6gft0nt838xhn5ggavywy5qp2qzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq27dysz</id>
    
      <title type="html">Nostr Compass #13 is out. Shopstr and Milk Market open MCP ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsqjvuvuwlc8p49066x6m9hhy7nz6gft0nt838xhn5ggavywy5qp2qzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq27dysz" />
    <content type="html">
      Nostr Compass #13 is out. Shopstr and Milk Market open MCP commerce surfaces. Samizdat ships Android alpha, and NIP-42 relay auth reaches Amber and strfry. &lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/naddr1qqgxxvmr893nswtrxvcrsd3jv3snjq3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqp65wtlh8fj&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;naddr1qq…h8fj&lt;/a&gt;&lt;/span&gt; &lt;/div&gt; &lt;p&gt;Welcome back to Nostr Compass, your weekly guide to Nostr.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This week:&lt;/strong&gt; &lt;a href=&#34;https://github.com/shopstr-eng/shopstr&#34;&gt;Shopstr&lt;/a&gt; and &lt;a href=&#34;https://github.com/shopstr-eng/milk-market&#34;&gt;Milk Market&lt;/a&gt; add MCP surfaces for agent-driven commerce, while &lt;a href=&#34;https://github.com/flox1an/oauth-bunker&#34;&gt;OAuth Bunker&lt;/a&gt;, &lt;a href=&#34;https://github.com/greenart7c3/Amber&#34;&gt;Amber&lt;/a&gt;, and &lt;a href=&#34;https://github.com/hoytech/strfry&#34;&gt;strfry&lt;/a&gt; add &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-42/&#34;&gt;NIP-42&lt;/a&gt; (Authentication of Clients to Relays) relay-auth and protected-event support across app, signer, and relay software. &lt;a href=&#34;https://github.com/v0l/route96&#34;&gt;Route96&lt;/a&gt; ships two releases around AI labeling, moderation queues, perceptual hashing, and machine-readable server docs. &lt;a href=&#34;https://github.com/satsdisco/samizdat&#34;&gt;Samizdat&lt;/a&gt;, already live on the web, released its first Android alpha and later added &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-55/&#34;&gt;NIP-55&lt;/a&gt; (Android Signer Application) signer support. &lt;a href=&#34;https://github.com/formstr-hq/nostr-forms&#34;&gt;Formstr&lt;/a&gt; adds signup through &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-49/&#34;&gt;NIP-49&lt;/a&gt; (Private Key Encryption), &lt;a href=&#34;https://github.com/vitorpamplona/amethyst&#34;&gt;Amethyst&lt;/a&gt; ships Namecoin-based &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-05/&#34;&gt;NIP-05&lt;/a&gt; (Domain Verification) resolution work, &lt;a href=&#34;https://github.com/MostroP2P/mostro&#34;&gt;Mostro&lt;/a&gt; ships &lt;a href=&#34;https://github.com/MostroP2P/mostro/releases/tag/v0.16.4&#34;&gt;v0.16.4&lt;/a&gt;, and the NIPs repo merges &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-91/&#34;&gt;NIP-91&lt;/a&gt; (AND Operator for Filters) and defensive guidance for &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-66/&#34;&gt;NIP-66&lt;/a&gt; (Relay Discovery and Liveness Monitoring).&lt;/p&gt;

&lt;h2 id=&#34;news-11&#34;&gt;News&lt;/h2&gt;

&lt;h3 id=&#34;nostr-npub15dc33fyg3cpd9r58vlqge2hh8dy6hkkrjxkhluv2xpyfreqkmsesesyv6e-and-nostr-npub1wm7wcrsx8q6378gwphzwhtmd60t8gpqjd4ny23m8gpc0x96jw0vs2jpud0-open-mcp-commerce-surfaces-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub15dc33fyg3cpd9r58vlqge2hh8dy6hkkrjxkhluv2xpyfreqkmsesesyv6e&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Shopstr Markets&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub15dc…yv6e&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; and &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1wm7wcrsx8q6378gwphzwhtmd60t8gpqjd4ny23m8gpc0x96jw0vs2jpud0&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;milkmarket&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1wm7…pud0&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; Open MCP Commerce Surfaces&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/shopstr-eng/shopstr&#34;&gt;Shopstr&lt;/a&gt;, the peer-to-peer marketplace with Lightning and Cashu payments, merged &lt;a href=&#34;https://github.com/shopstr-eng/shopstr/pull/234&#34;&gt;PR #234&lt;/a&gt; (&lt;a href=&#34;https://github.com/shopstr-eng/shopstr/commit/94ef7d1a4519e8e0158668d13c8cb8684b1d46e2&#34;&gt;commit 94ef7d1&lt;/a&gt;), adding an MCP server with API-key authentication for agent account management. The change adds &lt;code&gt;.well-known/agent.json&lt;/code&gt; for agent discovery, MCP onboarding and status endpoints, order creation and payment-verification routes, dedicated purchase and read tools, and a settings screen for API keys. &lt;a href=&#34;https://github.com/shopstr-eng/shopstr/pull/236&#34;&gt;PR #236&lt;/a&gt; extends that with seller-side actions for messages, addresses, order updates, and product-spec selection. A security fix in &lt;a href=&#34;https://github.com/shopstr-eng/shopstr/pull/235&#34;&gt;PR #235&lt;/a&gt; replaces single-iteration SHA-256 API key hashing with salted PBKDF2 at 100,000 iterations.&lt;/p&gt;

&lt;p&gt;Agents can read &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-99/&#34;&gt;NIP-99&lt;/a&gt; (Classified Listings) listings and move through checkout using the existing &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-47/&#34;&gt;NIP-47&lt;/a&gt; (Nostr Wallet Connect) and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-60/&#34;&gt;NIP-60&lt;/a&gt; (Cashu Wallet) payment flows without scraping pages or reverse-engineering client behavior.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/shopstr-eng/milk-market&#34;&gt;Milk Market&lt;/a&gt;, a food marketplace on Nostr at &lt;a href=&#34;https://milk.market&#34;&gt;milk.market&lt;/a&gt;, landed the same MCP and API-key foundation in &lt;a href=&#34;https://github.com/shopstr-eng/milk-market/commit/da6c0b499494b4e4861c4ff8a220e066c46285b3&#34;&gt;commit da6c0b4&lt;/a&gt;. &lt;a href=&#34;https://github.com/shopstr-eng/milk-market/pull/10&#34;&gt;PR #10&lt;/a&gt; adds subscription orders, shipping address changes post-purchase, and multi-merchant and multi-currency checkout handling for Stripe and other fiat payment paths. A follow-up &lt;a href=&#34;https://github.com/shopstr-eng/milk-market/pull/11&#34;&gt;PR #11&lt;/a&gt; fixes a startup database initialization bug where the failed relay publishes table was not created on fresh installs, causing 500 errors on first load. The agent-facing interface works with Bitcoin-native checkout on Shopstr or mixed fiat and Bitcoin checkout on Milk Market.&lt;/p&gt;

&lt;h3 id=&#34;nip-42-relay-auth-across-bunker-signer-and-relay-2&#34;&gt;NIP-42 Relay Auth Across Bunker, Signer, and Relay&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/flox1an/oauth-bunker&#34;&gt;OAuth Bunker&lt;/a&gt;, a &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; (Nostr Connect) bunker that bridges OAuth providers to Nostr signing, added &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-07/&#34;&gt;NIP-07&lt;/a&gt; (Browser Extension Signer) login, automatic single-identity selection, and cleanup for deleted identities (&lt;a href=&#34;https://github.com/flox1an/oauth-bunker/commit/f0c7683cb2374fd9a3ebd1b186055da8abd2c2ff&#34;&gt;commit f0c7683&lt;/a&gt;). When only one identity exists, the bunker now selects it automatically instead of prompting. Deleting an identity also removes its dangling assignments and connections. &lt;a href=&#34;https://github.com/flox1an/oauth-bunker/commit/6b8796c6c59c7d48dc1ede92d6de6bf54feb56cc&#34;&gt;Commit 6b8796c&lt;/a&gt; adds an &lt;code&gt;ALWAYS_ALLOWED_KINDS&lt;/code&gt; configuration path for assigned users, defaulting to kind &lt;code&gt;30078&lt;/code&gt; app-specific data, so delegated identities can write to app-specific storage without per-event approval.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/greenart7c3/Amber&#34;&gt;Amber&lt;/a&gt;, the primary &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-55/&#34;&gt;NIP-55&lt;/a&gt; signer for Android, shipped &lt;a href=&#34;https://github.com/greenart7c3/Amber/releases/tag/v4.1.3-pre4&#34;&gt;v4.1.3-pre4&lt;/a&gt; with four pre-releases across the week. &lt;a href=&#34;https://github.com/greenart7c3/Amber/pull/317&#34;&gt;PR #317&lt;/a&gt; adds &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-42/&#34;&gt;NIP-42&lt;/a&gt; relay authentication handling for kind &lt;code&gt;22242&lt;/code&gt; requests. The implementation adds a new database column tracking relay-specific permissions with a unique index on &lt;code&gt;(pkKey, type, kind, relay)&lt;/code&gt;. Users see a dedicated auth screen where they can grant or deny per relay or across all relays with a wildcard &lt;code&gt;*&lt;/code&gt; scope, and persist that choice. Wildcard permissions clear all relay-specific entries for a kind. &lt;a href=&#34;https://github.com/greenart7c3/Amber/pull/318&#34;&gt;PR #318&lt;/a&gt; follows up by refactoring multi-event request screens to display details inline using composable cards instead of navigating to a separate screen. The release also updates default profile relays, adds bottom-sheet request display, and fixes a crash on MediaTek devices by disabling StrongBox keystore.&lt;/p&gt;

&lt;p&gt;On the relay side, &lt;a href=&#34;https://github.com/hoytech/strfry/pull/156&#34;&gt;strfry PR #156&lt;/a&gt; implements NIP-42 auth handling for &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-70/&#34;&gt;NIP-70&lt;/a&gt; (Protected Events), and &lt;a href=&#34;https://github.com/hoytech/strfry/pull/176&#34;&gt;PR #176&lt;/a&gt; rejects reposts that embed protected events.&lt;/p&gt;

&lt;h3 id=&#34;nostr-npub18m76awca3y37hkvuneavuw6pjj4525fw90necxmadrvjg0sdy6qsngq955-adds-nip-11-relay-limits-and-agentium-features-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub18m76awca3y37hkvuneavuw6pjj4525fw90necxmadrvjg0sdy6qsngq955&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;damus&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub18m7…q955&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; Adds NIP-11 Relay Limits and Agentium Features&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/damus-io/notedeck&#34;&gt;Notedeck&lt;/a&gt;, the native desktop client by the Damus team, merged 14 PRs this week. &lt;a href=&#34;https://github.com/damus-io/notedeck/pull/1316&#34;&gt;PR #1316&lt;/a&gt; adds &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-11/&#34;&gt;NIP-11&lt;/a&gt; (Relay Information Document) relay limitation fetching, so all outbox relays now respect &lt;code&gt;max_message_length&lt;/code&gt; and &lt;code&gt;max_subscriptions&lt;/code&gt; from the relay info document. The implementation includes background job processing, exponential backoff with jitter for connection retries, and custom HTTP Accept headers. &lt;a href=&#34;https://github.com/damus-io/notedeck/pull/1312&#34;&gt;PR #1312&lt;/a&gt; fixes a bug where DMs sometimes failed to load after account switching, and &lt;a href=&#34;https://github.com/damus-io/notedeck/pull/1333&#34;&gt;PR #1333&lt;/a&gt; adds a backoff mechanism to multicast relay communication to prevent broadcast spam on errors.&lt;/p&gt;

&lt;p&gt;The Agentium subsystem (Notedeck&amp;#39;s built-in coding agent UI, internally called &amp;#34;Dave&amp;#34;) received clipboard image paste, named run configurations that sync across devices via kind &lt;code&gt;31991&lt;/code&gt; events (&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-33/&#34;&gt;NIP-33&lt;/a&gt; (Parameterized Replaceable Events)), a git worktree creator, and a model picker for selecting backends per session (&lt;a href=&#34;https://github.com/damus-io/notedeck/pull/1336&#34;&gt;PR #1336&lt;/a&gt;). &lt;a href=&#34;https://github.com/damus-io/notedeck/pull/1338&#34;&gt;PR #1338&lt;/a&gt; integrates &lt;code&gt;egui_kittest&lt;/code&gt; for headless UI testing, and &lt;a href=&#34;https://github.com/damus-io/notedeck/pull/1339&#34;&gt;PR #1339&lt;/a&gt; adds a dashboard card tracking new contact list creations by client. An open &lt;a href=&#34;https://github.com/damus-io/notedeck/pull/1314&#34;&gt;PR #1314&lt;/a&gt; ports &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub142gywvjkq0dv6nupggyn2euhx4nduwc7yz5f24ah9rpmunr2s39se3xrj0&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;amethyst&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub142g…xrj0&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;&amp;#39;s Namecoin NIP-05 resolution to Notedeck with ElectrumX lookups, SOCKS5 Tor routing, and search bar integration.&lt;/p&gt;

&lt;h3 id=&#34;divine-nostr-npub1wmr34t36fy03m8hvgl96zl3znndyzyaqhwmwdtshwmtkg03fetaqhjg240-ships-v1-0-6-with-e2e-test-infrastructure-and-nip-49-import-2&#34;&gt;diVine (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1wmr34t36fy03m8hvgl96zl3znndyzyaqhwmwdtshwmtkg03fetaqhjg240&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;rabble&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1wmr…g240&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) Ships v1.0.6 with E2E Test Infrastructure and NIP-49 Import&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/divinevideo/divine-mobile&#34;&gt;diVine&lt;/a&gt;, the short-form looping video client restoring Vine archives at &lt;a href=&#34;https://divine.video&#34;&gt;divine.video&lt;/a&gt;, shipped &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/releases/tag/1.0.6&#34;&gt;v1.0.6&lt;/a&gt; with 127 merged PRs. The release adds &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-49/&#34;&gt;NIP-49&lt;/a&gt; account import, external &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-05/&#34;&gt;NIP-05&lt;/a&gt; support, multi-account handling, macOS and experimental Linux builds, and a redesigned drafts and clips library backed by local storage.&lt;/p&gt;

&lt;p&gt;On the engineering side, &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/1928&#34;&gt;PR #1928&lt;/a&gt; adds a full E2E integration test infrastructure using Patrol for native UI automation against a Docker backend stack (relay, API, Blossom (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1ye5ptcxfyyxl5vjvdjar2ua3f0hynkjzpx552mu5snj3qmx5pzjscpknpr&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;hzrd149&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1ye5…knpr&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), Postgres, Redis, ClickHouse). Five auth journey tests cover registration, verification, password reset, session expiry, and token refresh. &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/2105&#34;&gt;PR #2105&lt;/a&gt; switches video loading from HLS-first to direct MP4 with automatic HLS fallback, reducing load times from 30-60 seconds to near-instant. &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/2076&#34;&gt;PR #2076&lt;/a&gt; caches the home feed API response to SharedPreferences for instant cold-start display. &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/2104&#34;&gt;PR #2104&lt;/a&gt; enforces &lt;code&gt;ai-generated&lt;/code&gt; content labels as hidden in feeds, and &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/2100&#34;&gt;PR #2100&lt;/a&gt; adds a safety setting to show only diVine-hosted videos. The Hive-to-Drift profile cache migration continues across &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/1881&#34;&gt;PR #1881&lt;/a&gt;, &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/1883&#34;&gt;PR #1883&lt;/a&gt;, and &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/1903&#34;&gt;PR #1903&lt;/a&gt;, replacing ~1,074 lines of Hive code with Drift DAOs.&lt;/p&gt;

&lt;h3 id=&#34;nostr-npub1hrujuc08r4zcdtn0u6ts7u7apldcjqgftz0z7stmaaz9hwaf9jxs66f3yh-v0-3-2-ships-nip-77-negentropy-sync-and-mls-improvements-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1hrujuc08r4zcdtn0u6ts7u7apldcjqgftz0z7stmaaz9hwaf9jxs66f3yh&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;VectorPrivacy&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1hru…f3yh&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; v0.3.2 Ships NIP-77 Negentropy Sync and MLS Improvements&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/VectorPrivacy/Vector&#34;&gt;Vector&lt;/a&gt;, a privacy-focused desktop messenger using MLS group encryption with &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; (Private Direct Messages) and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; (Encrypted Payloads) encryption, shipped &lt;a href=&#34;https://github.com/VectorPrivacy/Vector/releases/tag/v0.3.2&#34;&gt;v0.3.2&lt;/a&gt;. The headline change is NIP-77 negentropy for MLS group sync (&lt;a href=&#34;https://github.com/VectorPrivacy/Vector/commit/b06adf4af2673fb5ac5add01356999ea70628eac&#34;&gt;commit b06adf4&lt;/a&gt;), which catches up on missed messages significantly faster using parallel boot. The release also adds a rebuilt audio engine with full Linux support, image spoilers with blurred previews, clickable hyperlinks with rich link previews, &lt;code&gt;@mention&lt;/code&gt; pings with &lt;code&gt;@everyone&lt;/code&gt; for group admins, emoji shortcode autocomplete, group muting, tap-to-react on existing reactions, and cancellable file uploads. Vector explicitly filters out NIP-17 group chat events (&lt;a href=&#34;https://github.com/VectorPrivacy/Vector/commit/2179a51c0449b3a70663a1573195b7945adf58ba&#34;&gt;commit 2179a51&lt;/a&gt;), using MLS exclusively for group encryption.&lt;/p&gt;

&lt;h2 id=&#34;releases-17&#34;&gt;Releases&lt;/h2&gt;

&lt;h3 id=&#34;route96-nostr-npub1v0lxxxxutpvrelsksy8cdhgfux9l6a42hsj2qzquu2zk7vc9qnkszrqj49-v0-5-0-and-v0-5-1-2&#34;&gt;Route96 (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1v0lxxxxutpvrelsksy8cdhgfux9l6a42hsj2qzquu2zk7vc9qnkszrqj49&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Kieran&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1v0l…qj49&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) v0.5.0 and v0.5.1&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/v0l/route96&#34;&gt;Route96&lt;/a&gt;, a media server that supports Blossom and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-96/&#34;&gt;NIP-96&lt;/a&gt; (HTTP File Storage), shipped &lt;a href=&#34;https://github.com/v0l/route96/releases/tag/v0.5.0&#34;&gt;v0.5.0&lt;/a&gt; and &lt;a href=&#34;https://github.com/v0l/route96/releases/tag/v0.5.1&#34;&gt;v0.5.1&lt;/a&gt;. v0.5.0 adds automated AI labeling, retroactive backfill for unlabeled uploads, moderation queues for flagged files, EXIF-based privacy rejection, and banned-hash handling.&lt;/p&gt;

&lt;p&gt;v0.5.1 adds perceptual image hashes, locality-sensitive hashing for similar-image lookup, batch admin endpoints, and a published &lt;a href=&#34;https://github.com/v0l/route96/releases/tag/v0.5.1&#34;&gt;&lt;code&gt;SKILL.md&lt;/code&gt;&lt;/a&gt; describing the server&amp;#39;s Blossom and NIP-96 API surface for agent tooling. &lt;a href=&#34;https://github.com/v0l/route96/pull/58&#34;&gt;PR #58&lt;/a&gt; moves background workers onto fully async Tokio tasks, and &lt;a href=&#34;https://github.com/v0l/route96/commit/97b00a39e27b07053c2ad335dbf475bacba57bf8&#34;&gt;commit 97b00a3&lt;/a&gt; adds backoff to avoid hot loops.&lt;/p&gt;

&lt;h3 id=&#34;samizdat-nostr-npub1gunkavtrl32txueexz44el2l49rg0gv48pc6suadf7hwj852tuuqj3nudq-v1-0-0-alpha-2&#34;&gt;Samizdat (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1gunkavtrl32txueexz44el2l49rg0gv48pc6suadf7hwj852tuuqj3nudq&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;satsdisco&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1gun…nudq&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) v1.0.0-alpha&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/satsdisco/samizdat&#34;&gt;Samizdat&lt;/a&gt;, a long-form reader and publisher available at &lt;a href=&#34;https://samizdat.press&#34;&gt;samizdat.press&lt;/a&gt;, shipped its first Android build in &lt;a href=&#34;https://github.com/satsdisco/samizdat/releases/tag/v1.0.0-alpha&#34;&gt;v1.0.0-alpha&lt;/a&gt;. The app opens to a curated Press page of long-form Nostr articles with bottom tab navigation across Press, Feed, Saved, and Write views. The Android build adds native key storage through Android Keystore encryption with biometric unlock, handles &lt;code&gt;nostr:&lt;/code&gt; URIs and &lt;code&gt;samizdat.press&lt;/code&gt; deep links, and supports signer handoff via the Android app chooser (Amber (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1w4uswmv6lu9yel005l3qgheysmr7tk9uvwluddznju3nuxalevvs2d0jr5&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;greenart7c3&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1w4u…0jr5&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), Primal, etc.) instead of requiring direct key import. Pull-to-refresh, safe-area handling across screen sizes, and native share, clipboard, haptics, and splash-screen integrations are now part of the Android shell rather than the web wrapper.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/satsdisco/samizdat/commit/d17308f3c2e6020e14074fbb1c03a8f60f29a3e6&#34;&gt;Commit d17308f&lt;/a&gt; adds intent-based &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-55/&#34;&gt;NIP-55&lt;/a&gt; signing for Amber and Primal flows, and &lt;a href=&#34;https://github.com/satsdisco/samizdat/commit/e29dab84f7b58edd621f7b86ed7ca6458f965614&#34;&gt;commit e29dab8&lt;/a&gt; replaces a JavaScript bridge workaround with a native Capacitor plugin using &lt;code&gt;startActivityForResult&lt;/code&gt;. The app requires Android 7.0&#43; (API 24), ships as a debug APK in this alpha, and still lacks push notifications. Publishing currently depends on a signer app, while &lt;code&gt;nsec&lt;/code&gt; login covers local reading and account access.&lt;/p&gt;

&lt;h3 id=&#34;calendar-by-form-v0-2-0-2&#34;&gt;Calendar by Form* v0.2.0&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar&#34;&gt;Calendar by Form*&lt;/a&gt;, a decentralized calendar app with &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-59/&#34;&gt;NIP-59&lt;/a&gt; (Gift Wrap) private event sharing available at &lt;a href=&#34;https://calendar.formstr.app&#34;&gt;calendar.formstr.app&lt;/a&gt;, shipped &lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar/releases/tag/v0.2.0&#34;&gt;v0.2.0&lt;/a&gt; with &lt;a href=&#34;https://github.com/formstr-hq/nostr-calendar/pull/38&#34;&gt;PR #38&lt;/a&gt;. The release extends recurring-event handling for &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-52/&#34;&gt;NIP-52&lt;/a&gt; (Calendar Events), moving past the v0.1.0 single-event foundation. The underlying changes also touch local event storage, signer handling, and Android notification plumbing. This is the second active application from the Formstr organization following last month&amp;#39;s repository migration.&lt;/p&gt;

&lt;h3 id=&#34;nostr-npub1m0str0d7z2ww8rdh20t2n9lx520xjwhaq24p68umqp06wwrwtsnqen40un-v0-16-4-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1m0str0d7z2ww8rdh20t2n9lx520xjwhaq24p68umqp06wwrwtsnqen40un&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Mostro&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1m0s…40un&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; v0.16.4&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/MostroP2P/mostro&#34;&gt;Mostro&lt;/a&gt;, the peer-to-peer Bitcoin exchange built on Nostr, released &lt;a href=&#34;https://github.com/MostroP2P/mostro/releases/tag/v0.16.4&#34;&gt;v0.16.4&lt;/a&gt;. The dispute-session restore (&lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/599&#34;&gt;PR #599&lt;/a&gt;) and auto-close (&lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/606&#34;&gt;PR #606&lt;/a&gt;) fixes &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-03-04-newsletter/&#34;&gt;covered last week&lt;/a&gt; are included. New in this release: &lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/625&#34;&gt;PR #625&lt;/a&gt; adds a &lt;code&gt;days&lt;/code&gt; field to user rating events of kind &lt;code&gt;38384&lt;/code&gt;, &lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/612&#34;&gt;PR #612&lt;/a&gt; adds expiration to those rating events, and &lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/614&#34;&gt;PR #614&lt;/a&gt; switches order events to configured expiration settings instead of a hardcoded 24-hour window. &lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/622&#34;&gt;PR #622&lt;/a&gt; adds an idempotency check to prevent duplicate development-fee payments.&lt;/p&gt;

&lt;h3 id=&#34;mostro-mobile-v1-2-1-2&#34;&gt;Mostro Mobile v1.2.1&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/MostroP2P/mobile&#34;&gt;Mostro Mobile&lt;/a&gt;, the Flutter client for the Mostro P2P exchange, shipped &lt;a href=&#34;https://github.com/MostroP2P/mobile/releases/tag/v1.2.1&#34;&gt;v1.2.1&lt;/a&gt; with 11 new features and 11 bug fixes. The release adds encrypted multimedia rendering in dispute chat (&lt;a href=&#34;https://github.com/MostroP2P/mobile/pull/514&#34;&gt;PR #514&lt;/a&gt;), auto-close of dispute UI when orders reach terminal state (&lt;a href=&#34;https://github.com/MostroP2P/mobile/pull/503&#34;&gt;PR #503&lt;/a&gt;), QR scanning for NWC wallet import (&lt;a href=&#34;https://github.com/MostroP2P/mobile/commit/12eaee4d154fa31b07f82b96819de520e825aee6&#34;&gt;commit 12eaee4&lt;/a&gt;), French translations, and FCM push notification handling. &lt;a href=&#34;https://github.com/MostroP2P/mobile/pull/496&#34;&gt;PR #496&lt;/a&gt; fixes a Schnorr signature padding bug by pinning the bip340 dependency to v0.2.0.&lt;/p&gt;

&lt;h3 id=&#34;nostr-npub1tm99pgz2lth724jeld6gzz6zv48zy6xp4n9xu5uqrwvx9km54qaqkkxn72-v1-5-4-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1tm99pgz2lth724jeld6gzz6zv48zy6xp4n9xu5uqrwvx9km54qaqkkxn72&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;0xchat&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1tm9…xn72&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; v1.5.4&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/0xchat-app/0xchat-app-main&#34;&gt;0xchat&lt;/a&gt;, the Telegram-style messaging client with Cashu support, shipped &lt;a href=&#34;https://github.com/0xchat-app/0xchat-app-main/releases/tag/v1.5.4-release&#34;&gt;v1.5.4&lt;/a&gt; focused on Linux desktop fixes: AppImage dock icons, emoji rendering, context menu freezes, and reply/copy UI hangs. The release also fixes image upload issues and npub.cash integration. &lt;a href=&#34;https://github.com/0xchat-app/0xchat-app-main/pull/49&#34;&gt;PR #49&lt;/a&gt; eliminates unnecessary UI rebuilds by removing a 3-second polling timer that forced glassmorphic repaints while doing nothing, and unblocks login initialization by running the event cache load concurrently instead of blocking relay, contacts, and channel startup.&lt;/p&gt;

&lt;h3 id=&#34;keep-nostr-npub1h3fzzzeq60acjvnyvw34rpn5clkaueteffmkt3ln4ygekg9lcm0qhw96sj-v0-6-0-2&#34;&gt;Keep (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1h3fzzzeq60acjvnyvw34rpn5clkaueteffmkt3ln4ygekg9lcm0qhw96sj&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;williamk⚡santiago🔑☢️&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1h3f…96sj&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) v0.6.0&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/privkeyio/keep-android&#34;&gt;Keep&lt;/a&gt;, a FROST threshold signer for Android with &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-55/&#34;&gt;NIP-55&lt;/a&gt; and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; support, shipped &lt;a href=&#34;https://github.com/privkeyio/keep-android/releases/tag/v0.6.0&#34;&gt;v0.6.0&lt;/a&gt; and &lt;a href=&#34;https://github.com/privkeyio/keep-android/releases/tag/v0.6.1&#34;&gt;v0.6.1&lt;/a&gt;. v0.6.0 adds wallet descriptor coordination and management UI, a backup/restore flow with biometric authentication (&lt;a href=&#34;https://github.com/privkeyio/keep-android/pull/184&#34;&gt;PR #184&lt;/a&gt;), nsec recovery from threshold shares (&lt;a href=&#34;https://github.com/privkeyio/keep-android/pull/187&#34;&gt;PR #187&lt;/a&gt;), cross-platform animated QR frame generation via Rust UniFFI (&lt;a href=&#34;https://github.com/privkeyio/keep-android/pull/188&#34;&gt;PR #188&lt;/a&gt;), and a signing audit trail with chain verification (&lt;a href=&#34;https://github.com/privkeyio/keep-android/pull/189&#34;&gt;PR #189&lt;/a&gt;). v0.6.1 switches the license from AGPL-3.0 to MIT (&lt;a href=&#34;https://github.com/privkeyio/keep-android/pull/191&#34;&gt;PR #191&lt;/a&gt;).&lt;/p&gt;

&lt;h3 id=&#34;njump-nostr-npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6-v0-3-0-2&#34;&gt;njump (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;fiatjaf&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub180c…h6w6&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) v0.3.0&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/fiatjaf/njump&#34;&gt;njump&lt;/a&gt;, the static gateway for viewing Nostr content at &lt;a href=&#34;https://njump.me&#34;&gt;njump.me&lt;/a&gt;, shipped &lt;a href=&#34;https://github.com/fiatjaf/njump/releases/tag/v0.3.0&#34;&gt;v0.3.0&lt;/a&gt; with a breaking change in &lt;code&gt;note1&lt;/code&gt; code parsing and an update to the underlying nostr library.&lt;/p&gt;

&lt;h3 id=&#34;roadstr-nostr-npub1m2mvvpjugwdehtaskrcl7ksvdqnnhnjur9v6g9v266nss504q7mqvlr8p9-v0-1-1-2&#34;&gt;Roadstr (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1m2mvvpjugwdehtaskrcl7ksvdqnnhnjur9v6g9v266nss504q7mqvlr8p9&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Juraj&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1m2m…r8p9&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) v0.1.1&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/jooray/roadstr&#34;&gt;Roadstr&lt;/a&gt;, a decentralized road event reporting app using Nostr, shipped its initial demo release &lt;a href=&#34;https://github.com/jooray/roadstr/releases/tag/v0.1.1&#34;&gt;v0.1.1&lt;/a&gt;. The app displays road events on a map using vector tiles from openfreemap.org.&lt;/p&gt;

&lt;h3 id=&#34;nostr-npub1eajvs8x67vmzsnwaf9ltfgt59e6acmeztx9shduewvfgwftx8ahsagcd93-v0-5-3-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1eajvs8x67vmzsnwaf9ltfgt59e6acmeztx9shduewvfgwftx8ahsagcd93&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Bitcredit Protocol&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1eaj…cd93&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; v0.5.3&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/BitcreditProtocol/Bitcredit-Core&#34;&gt;Bitcredit&lt;/a&gt;, an e-bill application with a Nostr transport layer and dedicated relay at &lt;a href=&#34;https://www.bit.cr/&#34;&gt;bit.cr&lt;/a&gt;, shipped &lt;a href=&#34;https://github.com/BitcreditProtocol/Bitcredit-Core/releases/tag/v0.5.3&#34;&gt;v0.5.3&lt;/a&gt;. &lt;a href=&#34;https://github.com/BitcreditProtocol/Bitcredit-Core/pull/846&#34;&gt;PR #846&lt;/a&gt; adds &lt;code&gt;payment_actions&lt;/code&gt; and &lt;code&gt;bill_state&lt;/code&gt; fields to the API for payment and acceptance state, and &lt;a href=&#34;https://github.com/BitcreditProtocol/Bitcredit-Core/pull/849&#34;&gt;PR #849&lt;/a&gt; fixes signing address handling for anonymous signers.&lt;/p&gt;

&lt;h3 id=&#34;openchat-nostr-npub1nwt2g6fkshuj4udrs9zxr8992dyp75s9qx647kxaue98trzqqmssrxx05y-v0-1-0-alpha-3-2&#34;&gt;OpenChat (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1nwt2g6fkshuj4udrs9zxr8992dyp75s9qx647kxaue98trzqqmssrxx05y&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;The Dude&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1nwt…x05y&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) v0.1.0-alpha.3&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/DavidGershony/openChat&#34;&gt;OpenChat&lt;/a&gt;, a chat application built on the Marmot protocol&amp;#39;s .NET MLS and C# libraries, shipped &lt;a href=&#34;https://github.com/DavidGershony/openChat/releases/tag/v0.1.0-alpha.3&#34;&gt;v0.1.0-alpha.3&lt;/a&gt;. The release adds external signer support for Amber and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; flows (&lt;a href=&#34;https://github.com/DavidGershony/openChat/commit/e568d979fe15eead19172f2eb6f8cf26ca845247&#34;&gt;commit e568d97&lt;/a&gt;), moves MLS state persistence into the MLS service to eliminate crash-window data loss (&lt;a href=&#34;https://github.com/DavidGershony/openChat/commit/4720bc8625136a0d5b0e23322bc0c50cd80577e8&#34;&gt;commit 4720bc8&lt;/a&gt;), and publishes Windows, Linux, and Android builds through a new CI pipeline.&lt;/p&gt;

&lt;h3 id=&#34;opensignal-nostr-npub1q6ps7m94jfdastx2tx76sj8sq4nxdhlsgmzns2tr4xt6ydx6grzspm0kxr-v1-0-0-2&#34;&gt;OpenSignal (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1q6ps7m94jfdastx2tx76sj8sq4nxdhlsgmzns2tr4xt6ydx6grzspm0kxr&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Turiz&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1q6p…0kxr&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) v1.0.0&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/turizspace/opensignal&#34;&gt;OpenSignal&lt;/a&gt;, a Kotlin Multiplatform trading copilot for Nostr, shipped &lt;a href=&#34;https://github.com/turizspace/OpenSignal/releases/tag/v1.0.0&#34;&gt;v1.0.0&lt;/a&gt;. The release packages shared KMP modules for domain logic, chart rendering, Nostr authentication and publishing, Blossom &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-96/&#34;&gt;NIP-96&lt;/a&gt; upload support, and ONNX-based AI inference hooks across Desktop and Android shells. The published architecture also includes a FastAPI AI service for chart screenshot analysis, model training pipelines, and a risk engine that produces structured trade plans with sizing and warnings. Login supports either raw &lt;code&gt;nsec&lt;/code&gt; keys or external signers, and the output flow ends in Nostr event publishing rather than local-only analysis.&lt;/p&gt;

&lt;h2 id=&#34;project-updates-11&#34;&gt;Project Updates&lt;/h2&gt;

&lt;h3 id=&#34;formstr-2&#34;&gt;Formstr&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/formstr-hq/nostr-forms&#34;&gt;Formstr&lt;/a&gt;, the Google Forms alternative on Nostr, merged &lt;a href=&#34;https://github.com/formstr-hq/nostr-forms/pull/434&#34;&gt;PR #434&lt;/a&gt; (&lt;a href=&#34;https://github.com/formstr-hq/nostr-forms/commit/e9c4fd5dadfa0b83f1e87d7596eaf35f9fdb7da8&#34;&gt;commit e9c4fd5&lt;/a&gt;), adding a signup flow using &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-49/&#34;&gt;NIP-49&lt;/a&gt; (Private Key Encryption) encrypted private keys. Before this change, users needed either a &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-07/&#34;&gt;NIP-07&lt;/a&gt; browser extension or a raw &lt;code&gt;nsec&lt;/code&gt; paste to use Formstr. The new flow generates a key pair client-side, encrypts the private key with a user-chosen password via NIP-49&amp;#39;s scrypt &#43; XChaCha20-Poly1305 scheme, and stores the resulting &lt;code&gt;ncryptsec&lt;/code&gt; string. Users can then log back in with their password without installing a signer extension. Key management stays client-side throughout.&lt;/p&gt;

&lt;h3 id=&#34;amethyst-5&#34;&gt;Amethyst&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/vitorpamplona/amethyst&#34;&gt;Amethyst&lt;/a&gt;, the feature-rich Android client, merged four PRs shipping the Namecoin-backed &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-05/&#34;&gt;NIP-05&lt;/a&gt; resolution work that was &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-03-04-newsletter/&#34;&gt;open last week&lt;/a&gt;. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/1734&#34;&gt;PR #1734&lt;/a&gt; adds censorship-resistant NIP-05 verification via ElectrumX for &lt;code&gt;.bit&lt;/code&gt;, &lt;code&gt;d/&lt;/code&gt;, and &lt;code&gt;id/&lt;/code&gt; identifiers. When Amethyst detects one of these suffixes in a NIP-05 field, it queries an ElectrumX-NMC server for the name&amp;#39;s transaction history, parses the &lt;code&gt;NAME_UPDATE&lt;/code&gt; script from the latest output to extract the Nostr pubkey, and rejects names older than 36,000 blocks (Namecoin&amp;#39;s expiry window). ElectrumX connections route through SOCKS5 when Tor is enabled, with dynamic server selection between clearnet and &lt;code&gt;.onion&lt;/code&gt; endpoints. An LRU cache with a one-hour TTL prevents repeated blockchain queries.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/1771&#34;&gt;PR #1771&lt;/a&gt; fixes race conditions and resolver correctness in that flow. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/1785&#34;&gt;PR #1785&lt;/a&gt; lets new users import a follow list during signup from either ordinary NIP-05 identifiers or Namecoin-backed ones. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/1786&#34;&gt;PR #1786&lt;/a&gt; adds custom ElectrumX server settings so users can choose which server handles their lookups.&lt;/p&gt;

&lt;h3 id=&#34;nostr-idb-2&#34;&gt;nostr-idb&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/hzrd149/nostr-idb&#34;&gt;nostr-idb&lt;/a&gt;, a library providing helper methods for storing Nostr events in IndexedDB, merged &lt;a href=&#34;https://github.com/hzrd149/nostr-idb/pull/6&#34;&gt;PR #6&lt;/a&gt; adding support for &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-91/&#34;&gt;NIP-91&lt;/a&gt; AND tag filters. The change adds intersection semantics to the client-side filter matching so IndexedDB queries can require all listed tag values rather than any one. &lt;a href=&#34;https://github.com/hzrd149/nostr-idb/pull/8&#34;&gt;PR #8&lt;/a&gt; updates the library to the latest NIP-DB interface, and a follow-up &lt;a href=&#34;https://github.com/hzrd149/nostr-idb/commit/b49b3d32c575ff8214dc3fb07675109c2a971972&#34;&gt;commit b49b3d3&lt;/a&gt; fixes a subscribe deadlock and removes nostr-tools as a production dependency.&lt;/p&gt;

&lt;h3 id=&#34;pensieve-nostr-npub1zuuajd7u3sx8xu92yav9jwxpr839cs0kc3q6t56vd5u9q033xmhsk6c2uc-2&#34;&gt;Pensieve (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1zuuajd7u3sx8xu92yav9jwxpr839cs0kc3q6t56vd5u9q033xmhsk6c2uc&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;JeffG&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1zuu…c2uc&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/andotherstuff/pensieve&#34;&gt;Pensieve&lt;/a&gt;, an archive-first Nostr indexer with ClickHouse analytics, merged &lt;a href=&#34;https://github.com/andotherstuff/pensieve/pull/8&#34;&gt;PR #8&lt;/a&gt; adding per-entry cache TTL enforcement and per-key miss coalescing to reduce API CPU spikes. The highest-cost time-series endpoints (engagement stats, hourly activity, per-kind activity) now use 10-minute server-side TTLs instead of triggering synchronized recompute storms.&lt;/p&gt;

&lt;h3 id=&#34;blossom-2&#34;&gt;Blossom&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/hzrd149/blossom&#34;&gt;Blossom&lt;/a&gt;, the decentralized media-hosting protocol and server stack, merged two BUD-11 authorization updates. &lt;a href=&#34;https://github.com/hzrd149/blossom/pull/91&#34;&gt;PR #91&lt;/a&gt; moves optional authorization into its own BUD and clarifies the role of the &lt;code&gt;x&lt;/code&gt; and &lt;code&gt;server&lt;/code&gt; tags. &lt;a href=&#34;https://github.com/hzrd149/blossom/pull/93&#34;&gt;PR #93&lt;/a&gt; cleans up endpoint-specific auth behavior and formalizes the &lt;code&gt;X-SHA-256&lt;/code&gt; header for upload verification. The two PRs consolidate auth logic into BUD-11 and remove ambiguities around request hashing for upload, delete, and media-management flows.&lt;/p&gt;

&lt;h2 id=&#34;nip-updates-26&#34;&gt;NIP Updates&lt;/h2&gt;

&lt;p&gt;Recent changes to the &lt;a href=&#34;https://github.com/nostr-protocol/nips&#34;&gt;NIPs repository&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Merged:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-91/&#34;&gt;NIP-91&lt;/a&gt; (AND Operator for Filters)&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1365&#34;&gt;PR #1365&lt;/a&gt;): Adds intersection semantics for tag filters, letting relays answer queries that require all listed tag values instead of any one of them. Reduces client-side post-filtering and bandwidth on tag-heavy queries.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-66/&#34;&gt;NIP-66&lt;/a&gt; (Relay Discovery and Liveness Monitoring): Defensive Measures&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2240&#34;&gt;PR #2240&lt;/a&gt;): Following the &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-03-04-newsletter/&#34;&gt;outbox benchmark work covered last week&lt;/a&gt;, the spec now adds warnings around unhappy paths for relay monitoring data. Clients must not require kind &lt;code&gt;30166&lt;/code&gt; monitoring events in order to function. A monitor can be wrong, stale, or malicious. Clients are expected to cross-check sources and avoid cutting off large parts of a user&amp;#39;s relay graph based on a single feed.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-39/&#34;&gt;NIP-39&lt;/a&gt; (External Identities in Profiles): kind 10011 Registry Cleanup&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2256&#34;&gt;PR #2256&lt;/a&gt;): Adds the kind &lt;code&gt;10011&lt;/code&gt; reference directly to the spec, aligning with Amethyst&amp;#39;s implementation &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-03-04-newsletter/&#34;&gt;covered last week&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Open PRs and Discussions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-70/&#34;&gt;NIP-70&lt;/a&gt; (Protected Events): Reject reposts that embed protected events&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2251&#34;&gt;PR #2251&lt;/a&gt;): If a relay enforces NIP-70 on the original event but accepts reposts carrying the same content, the &lt;code&gt;-&lt;/code&gt; tag has no practical effect. This PR adds the rule that relays must also reject kind 6 and kind 16 reposts of protected events. &lt;a href=&#34;https://github.com/hoytech/strfry/pull/176&#34;&gt;strfry PR #176&lt;/a&gt; already implements this.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-71/&#34;&gt;NIP-71&lt;/a&gt; (Video Events): Multiple Audio Tracks&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2255&#34;&gt;PR #2255&lt;/a&gt;): Adds audio &lt;code&gt;imeta&lt;/code&gt; tags for alternate tracks, language variants, and audio-only streams. A client could keep a stable video file while switching audio languages, or serve audio as a separate track for podcast-like content.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-11/&#34;&gt;NIP-11&lt;/a&gt; (Relay Information Document) and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-66/&#34;&gt;NIP-66&lt;/a&gt; Relay Attributes&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2257&#34;&gt;PR #2257&lt;/a&gt;): Adds a structured &lt;code&gt;attributes&lt;/code&gt; field to relay information documents, giving clients and discovery tools machine-readable metadata beyond the current free-text description.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;nip-deep-dive-nip-49-private-key-encryption-2&#34;&gt;NIP Deep Dive: NIP-49 (Private Key Encryption)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-49/&#34;&gt;NIP-49&lt;/a&gt; defines how a client encrypts a private key with a password and encodes the result as an &lt;code&gt;ncryptsec&lt;/code&gt; bech32 string. &lt;a href=&#34;#formstr&#34;&gt;Formstr&lt;/a&gt; uses NIP-49 in its new signup flow.&lt;/p&gt;

&lt;p&gt;The format is not tied to a dedicated event kind. A client starts with the raw 32-byte secp256k1 private key, derives a symmetric key from the user&amp;#39;s password with scrypt, encrypts the key using XChaCha20-Poly1305, then wraps the result into a bech32 &lt;code&gt;ncryptsec&lt;/code&gt; string. A one-byte flag records whether the key was ever known to have been handled insecurely before encryption.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;4d47f4f0a6f6edbc1bbd7f4e2a45ec68f27cba91d6c6ab5cf28d8d87b0f3d57e&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;1f8b4c3e7b0f9451d4f9b8a7c6e5d4c3b2a1908f7e6d5c4b3a29181716151413&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1741699200,
  &amp;#34;kind&amp;#34;: 30078,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;d&amp;#34;, &amp;#34;encrypted-key-backup&amp;#34;],
    [&amp;#34;format&amp;#34;, &amp;#34;ncryptsec&amp;#34;],
    [&amp;#34;encryption&amp;#34;, &amp;#34;nip49&amp;#34;]
  ],
  &amp;#34;content&amp;#34;: &amp;#34;ncryptsec1qgg9947rlpvqu76pj5ecreduf9jxhselq2nae2kghhvd5g7dgjtcxfqtd67p9m0w57lspw8gsq6yphnm8623nsl8xn9j4jdzz84zm3frztj3z7s35vpzmqf6ksu8r89qk5z2zxfmu5gv8th8wclt0h4p&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;6a8f6e4b2d1901735f0ad4b6e8c1f3a579d0e2b4c6f8a1d3e5f7091b2c3d4e5f11223344556677889900aabbccddeeff00112233445566778899aabbccddeeff&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The JSON event above is an application-level example, not a NIP-49 requirement. The NIP standardizes the encrypted key format. A client can store the &lt;code&gt;ncryptsec&lt;/code&gt; locally, sync it through app-specific storage, or export it as a backup string. Passwords are normalized to Unicode NFKC before key derivation so the same password decrypts consistently across clients and platforms.&lt;/p&gt;

&lt;p&gt;The one-byte key-security flag has three defined values: &lt;code&gt;0x00&lt;/code&gt; means the key&amp;#39;s handling history is unknown, &lt;code&gt;0x01&lt;/code&gt; means the key is known to have been handled insecurely (e.g., pasted as plaintext in a web form before encryption), and &lt;code&gt;0x02&lt;/code&gt; means the key was generated and encrypted in a safe context and has never been exposed. Clients can use this to show warnings when importing keys with a known-insecure history.&lt;/p&gt;

&lt;p&gt;NIP-49 protects keys better than plain &lt;code&gt;nsec&lt;/code&gt; export, but the encryption is only as strong as the password and the configured scrypt cost. Higher &lt;code&gt;LOG_N&lt;/code&gt; values make offline guessing harder but slow down legitimate decrypt operations. The spec warns against publishing encrypted keys to public relays, since attackers benefit from collecting ciphertext for offline cracking. For comparison, &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; remote signing avoids exposing keys entirely, and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-55/&#34;&gt;NIP-55&lt;/a&gt; Android signing keeps keys inside a dedicated signer app. NIP-49 fills a different slot: portable encrypted backup for users who manage their own keys.&lt;/p&gt;

&lt;p&gt;Implementations include &lt;a href=&#34;https://github.com/formstr-hq/nostr-forms/pull/434&#34;&gt;Formstr PR #434&lt;/a&gt; for signup, &lt;a href=&#34;https://github.com/greenart7c3/Amber&#34;&gt;Amber&lt;/a&gt; for ncryptsec backup and restore, &lt;a href=&#34;#divine-ships-v106-with-e2e-test-infrastructure-and-nip-49-import&#34;&gt;diVine v1.0.6&lt;/a&gt; for account import, &lt;a href=&#34;#keep-v060&#34;&gt;Keep v0.6.0&lt;/a&gt; for FROST share export, and key management tools like &lt;a href=&#34;https://nsec.app&#34;&gt;nsec.app&lt;/a&gt; and &lt;a href=&#34;https://github.com/getAlby/hub&#34;&gt;Alby&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&#34;nip-deep-dive-nip-70-protected-events-2&#34;&gt;NIP Deep Dive: NIP-70 (Protected Events)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-70/&#34;&gt;NIP-70&lt;/a&gt; defines protected events. When an event carries the tag &lt;code&gt;[&amp;#34;-&amp;#34;]&lt;/code&gt;, a relay must reject it unless the relay requires &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-42/&#34;&gt;NIP-42&lt;/a&gt; authentication and the authenticated pubkey matches the event author.&lt;/p&gt;

&lt;p&gt;The NIP-42 auth flow works as follows: the relay sends an &lt;code&gt;AUTH&lt;/code&gt; challenge containing a random string, and the client responds with a signed kind &lt;code&gt;22242&lt;/code&gt; event whose tags include the relay URL and the challenge. The relay verifies the signature and checks that the pubkey in the auth event matches the pubkey in the protected event being published. If the pubkeys do not match, the relay rejects the event with a &lt;code&gt;restricted&lt;/code&gt; message prefix.&lt;/p&gt;

&lt;p&gt;The event content can still be public. The &lt;code&gt;-&lt;/code&gt; tag only controls who can publish the event to a relay that honors the tag. This covers &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-29/&#34;&gt;NIP-29&lt;/a&gt; (Simple Groups) semi-closed feeds, member-only relay spaces, and other contexts where the author wants to limit redistribution through the relay graph. NIP-70 is a single-tag convention, not a new event kind, so any existing event kind can carry the &lt;code&gt;-&lt;/code&gt; tag.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;cb8feca582979d91fe90455867b34dbf4d65e4b86e86b3c68c368ca9f9eef6f2&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1707409439,
  &amp;#34;kind&amp;#34;: 1,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;-&amp;#34;]
  ],
  &amp;#34;content&amp;#34;: &amp;#34;hello members of the secret group&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;fa163f5cfb75d77d9b6269011872ee22b34fb48d23251e9879bb1e4ccbdd8aaaf4b6dc5f5084a65ef42c52fbcde8f3178bac3ba207de827ec513a6aa39fa684c&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Even if a relay blocks third-party publishing of the original event, someone can republish the content inside a repost. &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2251&#34;&gt;PR #2251&lt;/a&gt; addresses this by requiring relays to also reject kind 6 and kind 16 reposts of protected events. &lt;a href=&#34;https://github.com/hoytech/strfry/pull/156&#34;&gt;strfry PR #156&lt;/a&gt; adds NIP-42 auth handling for protected events, and &lt;a href=&#34;https://github.com/hoytech/strfry/pull/176&#34;&gt;strfry PR #176&lt;/a&gt; blocks reposts that embed protected content.&lt;/p&gt;

&lt;p&gt;NIP-70 controls relay behavior. A recipient can still copy the content elsewhere, and the spec says so. The &lt;code&gt;-&lt;/code&gt; tag gives relays a machine-readable signal to refuse republication. For comparison, &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-62/&#34;&gt;NIP-62&lt;/a&gt; (Request to Vanish) asks relays to delete data after the fact, while NIP-70 prevents unauthorized publishing at ingest time. The two are complementary: an author can mark events as protected to limit spread, and later request deletion if they want the content removed from relays that did accept it.&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;That&amp;#39;s it for this week. Building something or have news to share? Reach out via DM or find us on Nostr.&lt;/p&gt;
 &lt;/blockquote&gt;
    </content>
    <updated>2026-03-11T15:21:04Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsvnaka7tcdv0ac4etz680n54sv7dxv409sh7e9dmah8lhprqszv5gzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agquxt7ff</id>
    
      <title type="html">Nostr Compass Podcast #11 is out. This week: FIPS ships a working ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsvnaka7tcdv0ac4etz680n54sv7dxv409sh7e9dmah8lhprqszv5gzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agquxt7ff" />
    <content type="html">
      In reply to &lt;a href=&#39;/naddr1qq0k2urfwdhkgefdxymnwv3exu6n2desxumnwtfsd3cnwur4x4c82q3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqp6kvp8hnk0&#39;&gt;naddr1qq…hnk0&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;Nostr Compass Podcast #11 is out.&lt;br/&gt;&lt;br/&gt;This week: FIPS ships a working Rust mesh network using Nostr keypairs. White Noise v0.3.0 brings real-time messaging and Amber signer support. HAVEN v1.2.0 adds multi-npub relay hosting with JSONL backup. Burrow launches MLS messaging for AI agents and humans. Plus diVine 1.0.5, Pika, Ridestr, Coracle, Nostur, nak, Unfiltered, and Nostria Signer Extension.&lt;br/&gt;&lt;br/&gt;NIP updates: NIP-85 service provider discovery, NIP-29 drops unmanaged groups, NIP-11 removes deprecated fields, NIP-39 moves identity tags. Four AI agent NIPs progress. NIP-144 and NIP-DC open.&lt;br/&gt;&lt;br/&gt;Deep dives into NIP-55 (Android Signer Application) and NIP-60 (Cashu Wallet).&lt;br/&gt;&lt;br/&gt;&lt;video controls width=&#34;100%&#34; class=&#34;max-h-[90vh] bg-neutral-300 dark:bg-zinc-700&#34;&gt;&lt;source src=&#34;https://blossom.primal.net/f3665be995ebe188b9c8a84ca2d392c452dc061e4f9eb4a4181eee1aa49be9b3.ogg&#34;&gt;&lt;/video&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://podcast.nostrcompass.org/naddr1qvzqqqr4vcpzqa6e2nmnzsgjfzdy520vdy4hywr06c9ue6crpr2zxyq749uu275qqyt8wumn8ghj7un9d3shjtnwdaehgu3wvfskueqpp4mhxue69uhkummn9ekx7mqpz3mhxue69uhhyetvv9ujuerpd46hxtnfduqp7etsd9ek7er995cnwdej8ymn2dfhxqmnwdedxpk8zdmsw56hqagsrwap2&#34;&gt;https://podcast.nostrcompass.org/naddr1qvzqqqr4vcpzqa6e2nmnzsgjfzdy520vdy4hywr06c9ue6crpr2zxyq749uu275qqyt8wumn8ghj7un9d3shjtnwdaehgu3wvfskueqpp4mhxue69uhkummn9ekx7mqpz3mhxue69uhhyetvv9ujuerpd46hxtnfduqp7etsd9ek7er995cnwdej8ymn2dfhxqmnwdedxpk8zdmsw56hqagsrwap2&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;#podcast #nostr
    </content>
    <updated>2026-03-08T13:34:20Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsx9rnlm4wg56m9f5tale950vd37j6p7zmw8q48rrx2484kqhaqwnqzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqqlmw82</id>
    
      <title type="html">Nostr Compass now has a search engine on the website, this will ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsx9rnlm4wg56m9f5tale950vd37j6p7zmw8q48rrx2484kqhaqwnqzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqqlmw82" />
    <content type="html">
      Nostr Compass now has a search engine on the website, this will help you find the news you&amp;#39;re looking for.&lt;br/&gt;&lt;a href=&#34;https://nostrcompass.org/en/search/&#34;&gt;https://nostrcompass.org/en/search/&lt;/a&gt;
    </content>
    <updated>2026-03-07T18:08:28Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsgg9gj0knk86mha3qdezr52uvawyzf0d3dstgaqa07kvf6j80rchgzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqr22pux</id>
    
      <title type="html">We are now tracking 442 projects! Nostr has grown a lot.</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsgg9gj0knk86mha3qdezr52uvawyzf0d3dstgaqa07kvf6j80rchgzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqr22pux" />
    <content type="html">
      We are now tracking 442 projects!&lt;br/&gt;Nostr has grown a lot.
    </content>
    <updated>2026-03-06T23:33:40Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs9tuqds40hs4y8hxke59yw3haafgggm8n52nsf392r2x0l3pm58sszypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqdd4kak</id>
    
      <title type="html">Will do, Thanks!</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs9tuqds40hs4y8hxke59yw3haafgggm8n52nsf392r2x0l3pm58sszypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqdd4kak" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsqgsgg9djs2c8syaq4wv44dca6qutmkd995dfxqp0jetzt45lda7qpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhszyzu8w&#39;&gt;nevent1q…zu8w&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;Will do, Thanks!
    </content>
    <updated>2026-03-05T21:29:59Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsg4qc0dyklrrg556xdzuwew0q9yv5e4y55ffcfrqddtqu86wud58gzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqv9y9cq</id>
    
      <title type="html">Nostr Compass Podcast #10 is out. This week: Blossom local cache ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsg4qc0dyklrrg556xdzuwew0q9yv5e4y55ffcfrqddtqu86wud58gzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqv9y9cq" />
    <content type="html">
      In reply to &lt;a href=&#39;/naddr1qq0k2urfwdhkgefdxymnwvfexcer2wfkxccnsttywphxcwfc0fchsq3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqp6kvcuqkuy&#39;&gt;naddr1qq…qkuy&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;Nostr Compass Podcast #10 is out.&lt;br/&gt;&lt;br/&gt;This week: Blossom local cache from 4 independent projects, competing AI agent NIPs from joelklabo and pablof7z, Alby&amp;#39;s NWC sandbox, FROST threshold signing on Android, decentralized map tiles over Nostr, Mostro&amp;#39;s built-in Lightning wallet, and deep dives into NIP-85 Trusted Assertions and NIP-52 Calendar Events.&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://blossom.primal.net/193b251f8368b793351f9d37c23d725b4b9fcc532a444388f0e48fc775b53cd3.mp3&#34;&gt;https://blossom.primal.net/193b251f8368b793351f9d37c23d725b4b9fcc532a444388f0e48fc775b53cd3.mp3&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://podcast.nostrcompass.org/naddr1qvzqqqr4vcpzqa6e2nmnzsgjfzdy520vdy4hywr06c9ue6crpr2zxyq749uu275qqyt8wumn8ghj7un9d3shjtnwdaehgu3wvfskueqpp4mhxue69uhkummn9ekx7mqpz3mhxue69uhhyetvv9ujuerpd46hxtnfduqp7etsd9ek7er995cnwde38ymrydfexcmrzwpdv3cxumpe8pa8z7qvpm54w&#34;&gt;https://podcast.nostrcompass.org/naddr1qvzqqqr4vcpzqa6e2nmnzsgjfzdy520vdy4hywr06c9ue6crpr2zxyq749uu275qqyt8wumn8ghj7un9d3shjtnwdaehgu3wvfskueqpp4mhxue69uhkummn9ekx7mqpz3mhxue69uhhyetvv9ujuerpd46hxtnfduqp7etsd9ek7er995cnwde38ymrydfexcmrzwpdv3cxumpe8pa8z7qvpm54w&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;#podcast #nostr
    </content>
    <updated>2026-03-05T21:26:28Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsdrajrmsgzg9e2gytrscz4q7xj6wpqyfvpnw2c376afheuady6k5qzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqfljvg9</id>
    
      <title type="html">Here are all the projects we track for updates in Nostr Compass. ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsdrajrmsgzg9e2gytrscz4q7xj6wpqyfvpnw2c376afheuady6k5qzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqfljvg9" />
    <content type="html">
      Here are all the projects we track for updates in Nostr Compass. &lt;br/&gt;If we&amp;#39;re missing your project, please let us know!&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://codeberg.org/DanConwayDev/ngit-cli&#34;&gt;https://codeberg.org/DanConwayDev/ngit-cli&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://gitea.coracle.social/coracle/bucket&#34;&gt;https://gitea.coracle.social/coracle/bucket&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://gitea.coracle.social/coracle/coracle&#34;&gt;https://gitea.coracle.social/coracle/coracle&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://gitea.coracle.social/coracle/flotilla&#34;&gt;https://gitea.coracle.social/coracle/flotilla&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/0ceanslim/grain&#34;&gt;https://github.com/0ceanslim/grain&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/0xchat-app/0xchat-app-main&#34;&gt;https://github.com/0xchat-app/0xchat-app-main&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/77elements/noornote&#34;&gt;https://github.com/77elements/noornote&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/abh3po/nostr-forms&#34;&gt;https://github.com/abh3po/nostr-forms&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/abh3po/nostr-polls&#34;&gt;https://github.com/abh3po/nostr-polls&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/andotherstuff/chorus&#34;&gt;https://github.com/andotherstuff/chorus&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/andotherstuff/pensieve&#34;&gt;https://github.com/andotherstuff/pensieve&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/ArcadeCity/wally&#34;&gt;https://github.com/ArcadeCity/wally&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/ArcadeCity/zapstore&#34;&gt;https://github.com/ArcadeCity/zapstore&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/atrifat/nostr-filter-relay&#34;&gt;https://github.com/atrifat/nostr-filter-relay&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/AustinKelsay/nostr-mcp-server&#34;&gt;https://github.com/AustinKelsay/nostr-mcp-server&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/AustinKelsay/snstr&#34;&gt;https://github.com/AustinKelsay/snstr&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/barrydeen/wisp&#34;&gt;https://github.com/barrydeen/wisp&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/beacon21m/beacon&#34;&gt;https://github.com/beacon21m/beacon&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/bitvora/haven&#34;&gt;https://github.com/bitvora/haven&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/bitvora/wot-relay&#34;&gt;https://github.com/bitvora/wot-relay&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/block-core/angor&#34;&gt;https://github.com/block-core/angor&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/camelus-hq/camelus&#34;&gt;https://github.com/camelus-hq/camelus&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/Cameri/nostream&#34;&gt;https://github.com/Cameri/nostream&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/cashubtc/cashu.me&#34;&gt;https://github.com/cashubtc/cashu.me&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/cashubtc/cdk&#34;&gt;https://github.com/cashubtc/cdk&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/cashubtc/eNuts&#34;&gt;https://github.com/cashubtc/eNuts&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/cashubtc/npubcash-server&#34;&gt;https://github.com/cashubtc/npubcash-server&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/cashubtc/nutshell&#34;&gt;https://github.com/cashubtc/nutshell&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/clawstr/clawstr&#34;&gt;https://github.com/clawstr/clawstr&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/cnixbtc/NostrKit&#34;&gt;https://github.com/cnixbtc/NostrKit&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/CodyTseng/jumble&#34;&gt;https://github.com/CodyTseng/jumble&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/CodyTseng/nostr-relay-nestjs&#34;&gt;https://github.com/CodyTseng/nostr-relay-nestjs&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/CodyTseng/nostr-relay-tray&#34;&gt;https://github.com/CodyTseng/nostr-relay-tray&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/coinos/coinos-ui&#34;&gt;https://github.com/coinos/coinos-ui&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/contextvm/ts-sdk&#34;&gt;https://github.com/contextvm/ts-sdk&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/damus-io/damus&#34;&gt;https://github.com/damus-io/damus&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/damus-io/notedeck&#34;&gt;https://github.com/damus-io/notedeck&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/DanConwayDev/gitworkshop&#34;&gt;https://github.com/DanConwayDev/gitworkshop&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/DanConwayDev/nostr-profile-manager&#34;&gt;https://github.com/DanConwayDev/nostr-profile-manager&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/DavidGershony/dotnet-mls&#34;&gt;https://github.com/DavidGershony/dotnet-mls&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/DavidGershony/marmot-cs&#34;&gt;https://github.com/DavidGershony/marmot-cs&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/DavidGershony/openChat&#34;&gt;https://github.com/DavidGershony/openChat&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/derekross/syncstr&#34;&gt;https://github.com/derekross/syncstr&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/dergigi/ants&#34;&gt;https://github.com/dergigi/ants&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/dergigi/boris&#34;&gt;https://github.com/dergigi/boris&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/dergigi/castr.me&#34;&gt;https://github.com/dergigi/castr.me&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/dextryz/shipyard&#34;&gt;https://github.com/dextryz/shipyard&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/dezh-tech/immortal&#34;&gt;https://github.com/dezh-tech/immortal&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/DhananjayPurohit/paygress&#34;&gt;https://github.com/DhananjayPurohit/paygress&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/divinevideo/divine-mobile&#34;&gt;https://github.com/divinevideo/divine-mobile&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/dluvian/voyage&#34;&gt;https://github.com/dluvian/voyage&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/dmcarrington/unfiltered&#34;&gt;https://github.com/dmcarrington/unfiltered&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/dskvr/cassette&#34;&gt;https://github.com/dskvr/cassette&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/dtdannen/dvmdash&#34;&gt;https://github.com/dtdannen/dvmdash&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/dtonon/nstart&#34;&gt;https://github.com/dtonon/nstart&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/dzdidi/gitpear&#34;&gt;https://github.com/dzdidi/gitpear&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/elnosh/gonuts&#34;&gt;https://github.com/elnosh/gonuts&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/eskema/alphaama&#34;&gt;https://github.com/eskema/alphaama&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/ethicnology/dart-nostr&#34;&gt;https://github.com/ethicnology/dart-nostr&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/fiatjaf/khatru&#34;&gt;https://github.com/fiatjaf/khatru&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/fiatjaf/nak&#34;&gt;https://github.com/fiatjaf/nak&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/fiatjaf/njump&#34;&gt;https://github.com/fiatjaf/njump&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/fiatjaf/nos2x&#34;&gt;https://github.com/fiatjaf/nos2x&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/fiatjaf/wikistr&#34;&gt;https://github.com/fiatjaf/wikistr&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/frnandu/yana&#34;&gt;https://github.com/frnandu/yana&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/FROSTR-ORG/frost2x&#34;&gt;https://github.com/FROSTR-ORG/frost2x&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/FROSTR-ORG/igloo-android&#34;&gt;https://github.com/FROSTR-ORG/igloo-android&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/FROSTR-ORG/igloo-desktop&#34;&gt;https://github.com/FROSTR-ORG/igloo-desktop&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/FROSTR-ORG/igloo-ios-prototype&#34;&gt;https://github.com/FROSTR-ORG/igloo-ios-prototype&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/futurepaul/hypernote&#34;&gt;https://github.com/futurepaul/hypernote&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/futurepaul/innpub&#34;&gt;https://github.com/futurepaul/innpub&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/Galaxoid-Labs/Seer&#34;&gt;https://github.com/Galaxoid-Labs/Seer&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/gandlafbtc/nutstash-wallet&#34;&gt;https://github.com/gandlafbtc/nutstash-wallet&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/getAlby/bitcoin-connect&#34;&gt;https://github.com/getAlby/bitcoin-connect&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/getAlby/go&#34;&gt;https://github.com/getAlby/go&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/getAlby/hub&#34;&gt;https://github.com/getAlby/hub&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/getAlby/lightning-browser-extension&#34;&gt;https://github.com/getAlby/lightning-browser-extension&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/geyserfund/geyser-app&#34;&gt;https://github.com/geyserfund/geyser-app&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/greenart7c3/amber&#34;&gt;https://github.com/greenart7c3/amber&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/greenart7c3/Citrine&#34;&gt;https://github.com/greenart7c3/Citrine&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/greenart7c3/Morganite&#34;&gt;https://github.com/greenart7c3/Morganite&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/greenart7c3/pokey&#34;&gt;https://github.com/greenart7c3/pokey&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/grunch/rana&#34;&gt;https://github.com/grunch/rana&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/gzuuus/dvmcp&#34;&gt;https://github.com/gzuuus/dvmcp&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/gzuuus/keynest&#34;&gt;https://github.com/gzuuus/keynest&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/gzuuus/mimoty&#34;&gt;https://github.com/gzuuus/mimoty&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/gzuuus/note-mixer-relay&#34;&gt;https://github.com/gzuuus/note-mixer-relay&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/gzuuus/nutoff-wallet&#34;&gt;https://github.com/gzuuus/nutoff-wallet&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/haorendashu/nostrmo&#34;&gt;https://github.com/haorendashu/nostrmo&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/haorendashu/nowser&#34;&gt;https://github.com/haorendashu/nowser&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/hardran3/Aerith&#34;&gt;https://github.com/hardran3/Aerith&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/hardran3/Prism&#34;&gt;https://github.com/hardran3/Prism&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/holgern/pynostr&#34;&gt;https://github.com/holgern/pynostr&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/HORNET-Storage/HORNETS-Nostr-Relay&#34;&gt;https://github.com/HORNET-Storage/HORNETS-Nostr-Relay&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/hoytech/strfry&#34;&gt;https://github.com/hoytech/strfry&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/hzrd149/applesauce&#34;&gt;https://github.com/hzrd149/applesauce&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/hzrd149/backyard-explorer&#34;&gt;https://github.com/hzrd149/backyard-explorer&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/hzrd149/blossom&#34;&gt;https://github.com/hzrd149/blossom&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/hzrd149/blossom-drive&#34;&gt;https://github.com/hzrd149/blossom-drive&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/hzrd149/nostr-bucket&#34;&gt;https://github.com/hzrd149/nostr-bucket&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/hzrd149/nostr-gatekeeper&#34;&gt;https://github.com/hzrd149/nostr-gatekeeper&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/hzrd149/nostr-idb&#34;&gt;https://github.com/hzrd149/nostr-idb&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/hzrd149/nostrudel&#34;&gt;https://github.com/hzrd149/nostrudel&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/hzrd149/nsite-manager&#34;&gt;https://github.com/hzrd149/nsite-manager&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/hzrd149/umbrel-blob-box&#34;&gt;https://github.com/hzrd149/umbrel-blob-box&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/irislib/iris-messenger&#34;&gt;https://github.com/irislib/iris-messenger&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/jamesmagoo/nostr-writer&#34;&gt;https://github.com/jamesmagoo/nostr-writer&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/jeffthibault/python-nostr&#34;&gt;https://github.com/jeffthibault/python-nostr&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/justinmoon/neet-native&#34;&gt;https://github.com/justinmoon/neet-native&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/k0sti/spotstr&#34;&gt;https://github.com/k0sti/spotstr&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/keychat-io/keychat-app&#34;&gt;https://github.com/keychat-io/keychat-app&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/Letdown2491/signet&#34;&gt;https://github.com/Letdown2491/signet&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/lez/nsite&#34;&gt;https://github.com/lez/nsite&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/LibertyFarmer/hamstr&#34;&gt;https://github.com/LibertyFarmer/hamstr&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/lovvtide/satellite-web&#34;&gt;https://github.com/lovvtide/satellite-web&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/lumehq/coop&#34;&gt;https://github.com/lumehq/coop&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/lumehq/lume&#34;&gt;https://github.com/lumehq/lume&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/marmot-protocol/marmot&#34;&gt;https://github.com/marmot-protocol/marmot&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/marmot-protocol/marmot-ts&#34;&gt;https://github.com/marmot-protocol/marmot-ts&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/marmot-protocol/mdk&#34;&gt;https://github.com/marmot-protocol/mdk&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/marmot-protocol/whitenoise&#34;&gt;https://github.com/marmot-protocol/whitenoise&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs&#34;&gt;https://github.com/marmot-protocol/whitenoise-rs&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/marmot-protocol/wn-tui&#34;&gt;https://github.com/marmot-protocol/wn-tui&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/mattn/algia&#34;&gt;https://github.com/mattn/algia&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/mattn/nostr-webhook&#34;&gt;https://github.com/mattn/nostr-webhook&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/mikedilger/chorus&#34;&gt;https://github.com/mikedilger/chorus&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/mikedilger/gossip&#34;&gt;https://github.com/mikedilger/gossip&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/mikedilger/nostr-types&#34;&gt;https://github.com/mikedilger/nostr-types&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/mikedilger/relay-tester&#34;&gt;https://github.com/mikedilger/relay-tester&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/minibits-cash/minibits_wallet&#34;&gt;https://github.com/minibits-cash/minibits_wallet&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/MostroP2P/mobile&#34;&gt;https://github.com/MostroP2P/mobile&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/MostroP2P/mostro&#34;&gt;https://github.com/MostroP2P/mostro&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/MostroP2P/mostro-skill&#34;&gt;https://github.com/MostroP2P/mostro-skill&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/MutinyWallet/mutiny-web&#34;&gt;https://github.com/MutinyWallet/mutiny-web&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/nbd-wtf/go-nostr&#34;&gt;https://github.com/nbd-wtf/go-nostr&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/nbd-wtf/nostr-tools&#34;&gt;https://github.com/nbd-wtf/nostr-tools&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/nicfab/matrix-nostr-bridge&#34;&gt;https://github.com/nicfab/matrix-nostr-bridge&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/nicfab/nostr-secrets&#34;&gt;https://github.com/nicfab/nostr-secrets&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/nostrability/outbox&#34;&gt;https://github.com/nostrability/outbox&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/nostrability/schemata&#34;&gt;https://github.com/nostrability/schemata&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/nostrband/noauth&#34;&gt;https://github.com/nostrband/noauth&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/nostrband/nostr-band-app&#34;&gt;https://github.com/nostrband/nostr-band-app&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/nostrband/nostrsite&#34;&gt;https://github.com/nostrband/nostrsite&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/nostrband/nostr-universe&#34;&gt;https://github.com/nostrband/nostr-universe&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/nostr-dev-kit/ndk&#34;&gt;https://github.com/nostr-dev-kit/ndk&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/nostria-app/nostria&#34;&gt;https://github.com/nostria-app/nostria&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/nostrnests/nests&#34;&gt;https://github.com/nostrnests/nests&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/nostrocket/oxygen&#34;&gt;https://github.com/nostrocket/oxygen&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips&#34;&gt;https://github.com/nostr-protocol/nips&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/Nostr-Safebox/safebox&#34;&gt;https://github.com/Nostr-Safebox/safebox&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/nostur-com/nostur-ios-public&#34;&gt;https://github.com/nostur-com/nostur-ios-public&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/OpenTollGate/tollgate&#34;&gt;https://github.com/OpenTollGate/tollgate&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/Origami74/nostr-epoxy-reverse-proxy&#34;&gt;https://github.com/Origami74/nostr-epoxy-reverse-proxy&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/pablof7z/highlighter&#34;&gt;https://github.com/pablof7z/highlighter&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/pablof7z/mcp-money&#34;&gt;https://github.com/pablof7z/mcp-money&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/pablof7z/olas&#34;&gt;https://github.com/pablof7z/olas&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/pablof7z/wikifreedia&#34;&gt;https://github.com/pablof7z/wikifreedia&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/penpenpng/rx-nostr&#34;&gt;https://github.com/penpenpng/rx-nostr&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/permissionlesstech/bitchat&#34;&gt;https://github.com/permissionlesstech/bitchat&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/planetary-social/nos&#34;&gt;https://github.com/planetary-social/nos&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/Pleb5/satshoot&#34;&gt;https://github.com/Pleb5/satshoot&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/PlebeianTech/plebeian-market&#34;&gt;https://github.com/PlebeianTech/plebeian-market&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/plebstr/plebstr&#34;&gt;https://github.com/plebstr/plebstr&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app&#34;&gt;https://github.com/PrimalHQ/primal-android-app&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/PrimalHQ/primal-ios-app&#34;&gt;https://github.com/PrimalHQ/primal-ios-app&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/PrimalHQ/primal-web-app&#34;&gt;https://github.com/PrimalHQ/primal-web-app&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/primalpaul1/instagram-to-nostr-v2&#34;&gt;https://github.com/primalpaul1/instagram-to-nostr-v2&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/privkeyio/keep-android&#34;&gt;https://github.com/privkeyio/keep-android&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/psic4t/nospeak&#34;&gt;https://github.com/psic4t/nospeak&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/purrgrammer/chachi&#34;&gt;https://github.com/purrgrammer/chachi&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/r0d8lsh0p/shosho-releases&#34;&gt;https://github.com/r0d8lsh0p/shosho-releases&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/rnostr/rnostr&#34;&gt;https://github.com/rnostr/rnostr&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/Routstr/local-plus-plus&#34;&gt;https://github.com/Routstr/local-plus-plus&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/Routstr/otrta-client&#34;&gt;https://github.com/Routstr/otrta-client&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/rust-nostr/nostr&#34;&gt;https://github.com/rust-nostr/nostr&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/sanah9/noscall&#34;&gt;https://github.com/sanah9/noscall&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/sandwichfarm/nostr-watch&#34;&gt;https://github.com/sandwichfarm/nostr-watch&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/sandwichfarm/spryte&#34;&gt;https://github.com/sandwichfarm/spryte&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/sebdeveloper6952/featurestr-bountiestr&#34;&gt;https://github.com/sebdeveloper6952/featurestr-bountiestr&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/sebdeveloper6952/godvm&#34;&gt;https://github.com/sebdeveloper6952/godvm&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/servus-social/servus&#34;&gt;https://github.com/servus-social/servus&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/shopstr-eng/shopstr&#34;&gt;https://github.com/shopstr-eng/shopstr&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/Shugur-Network/relay&#34;&gt;https://github.com/Shugur-Network/relay&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/sledtools/pika&#34;&gt;https://github.com/sledtools/pika&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/snarfed/granary&#34;&gt;https://github.com/snarfed/granary&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/SnowCait/nostter&#34;&gt;https://github.com/SnowCait/nostter&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/soapbox-pub/nostrify&#34;&gt;https://github.com/soapbox-pub/nostrify&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/Spl0itable/nosflare&#34;&gt;https://github.com/Spl0itable/nosflare&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/susumuota/nostr-keyx&#34;&gt;https://github.com/susumuota/nostr-keyx&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/tcheeric/nostr-java&#34;&gt;https://github.com/tcheeric/nostr-java&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/teamnovia/novia&#34;&gt;https://github.com/teamnovia/novia&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/tenex-chat/tenex&#34;&gt;https://github.com/tenex-chat/tenex&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/totemize/totem&#34;&gt;https://github.com/totemize/totem&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/TsukemonoGit/lumilumi&#34;&gt;https://github.com/TsukemonoGit/lumilumi&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/tzongocu/nostr-secrets&#34;&gt;https://github.com/tzongocu/nostr-secrets&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/v0l/cuda_vanity&#34;&gt;https://github.com/v0l/cuda_vanity&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/v0l/snort&#34;&gt;https://github.com/v0l/snort&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/v0l/zap.stream&#34;&gt;https://github.com/v0l/zap.stream&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/variablefate/ridestr&#34;&gt;https://github.com/variablefate/ridestr&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/VectorPrivacy/Vector&#34;&gt;https://github.com/VectorPrivacy/Vector&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/verbiricha/habla.news&#34;&gt;https://github.com/verbiricha/habla.news&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/vertex-lab/vertex&#34;&gt;https://github.com/vertex-lab/vertex&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/vicariousdrama/cornychat&#34;&gt;https://github.com/vicariousdrama/cornychat&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/vitorpamplona/amethyst&#34;&gt;https://github.com/vitorpamplona/amethyst&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/vivganes/zapddit&#34;&gt;https://github.com/vivganes/zapddit&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/vnprc/hashpool&#34;&gt;https://github.com/vnprc/hashpool&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/vstabile/kartapio&#34;&gt;https://github.com/vstabile/kartapio&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/wavlake/wavman&#34;&gt;https://github.com/wavlake/wavman&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/YakiHonne/yakihonne-mobile-app&#34;&gt;https://github.com/YakiHonne/yakihonne-mobile-app&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/zapcooking/frontend&#34;&gt;https://github.com/zapcooking/frontend&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/zerosats/mdk-pwa-reference&#34;&gt;https://github.com/zerosats/mdk-pwa-reference&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/zeSchlausKwab/mapnolia&#34;&gt;https://github.com/zeSchlausKwab/mapnolia&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/ZeusLN/zeus&#34;&gt;https://github.com/ZeusLN/zeus&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/ZharlieW/Aegis&#34;&gt;https://github.com/ZharlieW/Aegis&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://git.nostrdev.com/sigit/sigit.io&#34;&gt;https://git.nostrdev.com/sigit/sigit.io&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://git.vanderwarker.family/wellbeing/holyfit-android&#34;&gt;https://git.vanderwarker.family/wellbeing/holyfit-android&lt;/a&gt;&lt;br/&gt;&lt;a href=&#34;https://sr.ht/~gheartsfield/nostr-rs-relay/&#34;&gt;https://sr.ht/~gheartsfield/nostr-rs-relay/&lt;/a&gt;
    </content>
    <updated>2026-03-05T14:36:28Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsg7scuvwly55f2mrruqdjd53weckmeccw7pmm5560c2thculyauqczypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq27qk2d</id>
    
      <title type="html">Nostr Compass #12 is out. The Marmot Development Kit shipped ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsg7scuvwly55f2mrruqdjd53weckmeccw7pmm5560c2thculyauqczypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq27qk2d" />
    <content type="html">
      Nostr Compass #12 is out. &lt;br/&gt;&lt;br/&gt;The Marmot Development Kit shipped v0.6.0 as its first public release with encrypted media, multi-language bindings, and over 200 merged PRs. Nostrability published outbox model benchmarks testing 14 relay selection algorithms across 15 clients, finding that Thompson Sampling with dead relay filtering pushes event recall above 90%. Wisp, a new Android client, went from first alpha to beta in eight days with 19 releases, Tor support, and NIP-55 signing. This issue also covers NIP-91 (AND filters) merging, Vector v0.3.1&amp;#39;s 15x performance gains, and a Five Years of Nostr Februaries retrospective tracing the protocol from three relays to mesh networking. &lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/naddr1qqgrwdnxvyukxdnpv3jnjcehxdnrvq3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqp65wem3n2q&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;naddr1qq…3n2q&lt;/a&gt;&lt;/span&gt; &lt;/div&gt; &lt;p&gt;Welcome back to Nostr Compass, your weekly guide to Nostr.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This week:&lt;/strong&gt; The &lt;a href=&#34;https://github.com/marmot-protocol/mdk&#34;&gt;Marmot Development Kit&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1whtn0s68y3cs98zysa4nxrfzss5g5snhndv35tk5m2sudsr7ltms48r3ec&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;White Noise&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1wht…r3ec&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) ships its &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-03-04-newsletter/#marmot-development-kit-ships-first-public-release&#34;&gt;first public release&lt;/a&gt; with encrypted media and multi-language bindings. &lt;a href=&#34;https://github.com/nostrability/outbox&#34;&gt;Nostrability&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1zafcms4xya5ap9zr7xxr0jlrtrattwlesytn2s42030lzu0dwlzqpd26k5&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;elsat&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1zaf…26k5&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) publishes &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-03-04-newsletter/#outbox-model-under-the-microscope&#34;&gt;outbox model benchmarks&lt;/a&gt; across 14 relay selection algorithms. &lt;a href=&#34;https://github.com/barrydeen/wisp&#34;&gt;Wisp&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1utx00neqgqln72j22kej3ux7803c2k986henvvha4thuwfkper4s7r50e8&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;utxo the webmaster 🧑‍💻&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1utx…50e8&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) goes from &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-03-04-newsletter/#wisp-ships-from-alpha-to-beta&#34;&gt;first alpha to beta&lt;/a&gt; in eight days with Tor and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-55/&#34;&gt;NIP-55&lt;/a&gt; (Android Signer Application) signing. &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-03-04-newsletter/#nip-updates&#34;&gt;NIP-91&lt;/a&gt; (AND filters) merges. &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-03-04-newsletter/#vector-v031&#34;&gt;Vector v0.3.1&lt;/a&gt; delivers negentropy sync with 15x performance gains. This issue also includes the Five Years of Nostr Februaries retrospective, tracing the protocol from a spec rewrite serving three relays through the Damus App Store explosion to mesh networking and AI agent proposals.&lt;/p&gt;

&lt;h2 id=&#34;news-14&#34;&gt;News&lt;/h2&gt;

&lt;h3 id=&#34;outbox-model-under-the-microscope-2&#34;&gt;Outbox Model Under the Microscope&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostrability/outbox&#34;&gt;Nostrability&lt;/a&gt; published a series of outbox model benchmarks testing how well different relay selection algorithms retrieve events from the decentralized relay network. The project merged 16 PRs and 76 commits in ten days, producing what may be the most thorough empirical analysis of &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-65/&#34;&gt;NIP-65&lt;/a&gt; (Relay List Metadata) implementation strategies to date.&lt;/p&gt;

&lt;p&gt;The benchmarks test 14 relay selection algorithms against real-world follow lists across 15 clients and libraries in five languages. A baseline approach of querying only popular relays retrieves roughly 26% of events. Greedy set-cover with Thompson Sampling reaches 80-90% recall. Adding a latency-aware variant using hyperbolic discounting and EWMA relay latency tracking pushed completeness from 62-80% to 72-96% at the 2-second mark across six test profiles.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-66/&#34;&gt;NIP-66&lt;/a&gt; (Relay Monitoring) dead relay filtering proved consequential. Pre-filtering relay candidates against &lt;a href=&#34;https://nostr.watch&#34;&gt;nostr.watch&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1uac67zc9er54ln0kl6e4qp2y6ta3enfcg7ywnayshvlw9r5w6ehsqq99rx&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;sandwich&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1uac…99rx&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) liveness data removed 40-64% of dead relays and doubled relay success rates from 30% to 75-85%. Feed load times dropped 39% (from 40 seconds to 24 seconds across 10 profiles). An EOSE-race simulation found that waiting for EOSE plus a 200ms grace period improved completeness over stopping at the first relay to finish.&lt;/p&gt;

&lt;p&gt;For clients that cannot fully rewrite their relay routing, a &amp;#34;hybrid outbox enrichment&amp;#34; approach adds per-author outbox queries on top of existing hardcoded app relays. This hybrid achieved 80% one-year event recall versus the 26% baseline, offering a migration path for clients with legacy relay architectures.&lt;/p&gt;

&lt;h3 id=&#34;contextvm-opens-mcp-nip-and-ships-ephemeral-gift-wraps-2&#34;&gt;ContextVM Opens MCP NIP and Ships Ephemeral Gift Wraps&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://contextvm.org&#34;&gt;ContextVM&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;ContextVM&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1dvm…3jdm&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), the protocol bridging Nostr with the &lt;a href=&#34;https://modelcontextprotocol.io/&#34;&gt;Model Context Protocol&lt;/a&gt;, opened two proposals in the &lt;a href=&#34;https://github.com/nostr-protocol/nips&#34;&gt;NIPs repository&lt;/a&gt; this week. &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2246&#34;&gt;PR #2246&lt;/a&gt; formalizes CVM as a convention for transporting MCP JSON-RPC messages over Nostr using ephemeral kind 25910 events. &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2245&#34;&gt;PR #2245&lt;/a&gt; extends &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-59/&#34;&gt;NIP-59&lt;/a&gt; (Gift Wrap) with an ephemeral kind (21059) that follows &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-01/&#34;&gt;NIP-01&lt;/a&gt; (Basic Protocol Flow) ephemeral semantics, letting relays discard wrapped messages after delivery.&lt;/p&gt;

&lt;p&gt;The ephemeral gift wrap convention shipped as &lt;a href=&#34;https://docs.contextvm.org/spec/ceps/cep-19/&#34;&gt;CEP-19&lt;/a&gt; in the ContextVM SDK v0.6.x release family. The &lt;a href=&#34;https://github.com/ContextVM/sdk&#34;&gt;SDK implementation&lt;/a&gt; adds a &lt;code&gt;GiftWrapMode&lt;/code&gt; enum with three settings: OPTIONAL (accept both kinds and auto-detect peer capability), EPHEMERAL (kind 21059 only), and PERSISTENT (kind 1059 only). For AI tool calls, ephemeral mode avoids storing intermediate request-response traffic on relays, reducing both storage costs and privacy exposure.&lt;/p&gt;

&lt;p&gt;New public MCP servers appeared on the network from independent operators, including a Wolfram Alpha query server. The ContextVM team published CEP-15 (common tools schema) and CEP-17 (server relay list publication) alongside the v0.6.x release cycle.&lt;/p&gt;

&lt;h3 id=&#34;marmot-development-kit-ships-first-public-release-2&#34;&gt;Marmot Development Kit Ships First Public Release&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/marmot-protocol/mdk&#34;&gt;MDK&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1whtn0s68y3cs98zysa4nxrfzss5g5snhndv35tk5m2sudsr7ltms48r3ec&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;White Noise&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1wht…r3ec&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;, Marmot Development Kit), the Rust library powering &lt;a href=&#34;https://nostrcompass.org/en/topics/mls/&#34;&gt;Marmot&lt;/a&gt;-encrypted messaging across &lt;a href=&#34;https://github.com/sledtools/pika&#34;&gt;Pika&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1zxu639qym0esxnn7rzrt48wycmfhdu3e5yvzwx7ja3t84zyc2r8qz8cx2y&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;justinmoon&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1zxu…cx2y&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) and &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise&#34;&gt;White Noise&lt;/a&gt;, shipped &lt;a href=&#34;https://github.com/marmot-protocol/mdk/releases/tag/v0.6.0&#34;&gt;v0.6.0&lt;/a&gt; as its first public release. Over 200 PRs merged into this version, with six new contributors.&lt;/p&gt;

&lt;p&gt;The release includes encrypted media support (MIP-04) with HKDF seed derivation (MIP-01 v2), deterministic commit race resolution (MIP-03), encrypted local storage, admin authorization validation for Marmot commits and proposals, and GREASE support for protocol extensibility. Bindings ship for Kotlin, Python, Ruby, and Windows alongside Android cross-compilation. The library upgrades to OpenMLS 0.8.0 with security advisory fixes and a &lt;code&gt;Secret&amp;lt;T&amp;gt;&lt;/code&gt; type that zeroizes sensitive values in memory.&lt;/p&gt;

&lt;p&gt;A companion protocol change (&lt;a href=&#34;https://github.com/marmot-protocol/marmot/pull/48&#34;&gt;MIP-03&lt;/a&gt;) replaced &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; (Encrypted Payloads) encryption with ChaCha20-Poly1305 for kind 445 messages. NIP-44 required UTF-8 string input per its specification, making it impossible to pass raw Marmot message bytes through standard TypeScript Nostr libraries. The replacement derives keys directly from the Marmot exporter secret. This breaking change required coordinated updates across the &lt;a href=&#34;https://github.com/marmot-protocol/marmot/pull/48&#34;&gt;core spec&lt;/a&gt;, &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/208&#34;&gt;MDK&lt;/a&gt;, and &lt;a href=&#34;https://github.com/marmot-protocol/marmot-ts/pull/54&#34;&gt;TypeScript SDK&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/marmot-protocol/marmot-ts&#34;&gt;marmot-ts&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1whtn0s68y3cs98zysa4nxrfzss5g5snhndv35tk5m2sudsr7ltms48r3ec&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;White Noise&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1wht…r3ec&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), the TypeScript implementation maintained by hzrd149, merged four PRs with breaking API changes in its own right. An &lt;a href=&#34;https://github.com/marmot-protocol/marmot-ts/pull/52&#34;&gt;omnibus update&lt;/a&gt; added a key package manager for create/publish/rotate lifecycle, a &lt;code&gt;sendChatMessage&lt;/code&gt; convenience method, invite preview without joining (&lt;code&gt;readInviteGroupInfo&lt;/code&gt;), self-update for forward-secrecy rotations, and structured debug logging. Group decryption APIs were renamed from &lt;code&gt;readGroupMessage&lt;/code&gt; to &lt;code&gt;decryptGroupMessage&lt;/code&gt; with richer result variants (processed/skipped/rejected/unreadable). gzuuus contributed example cleanup with NIP-65 relay support and last-resort key package handling per MIP-00.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs&#34;&gt;White Noise CLI&lt;/a&gt; (&lt;code&gt;wn&lt;/code&gt;), the Rust backend powering both the mobile app and the new TUI, merged 16 PRs in ten days. Signer lifecycle handling gained cancellation safety through an RAII scope guard (&lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/538&#34;&gt;PR #538&lt;/a&gt;), fixing a class of bugs where aborted operations could leak signer state. Login now blocks when required relay lists (kind 10002/10050/10051) are missing (&lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/515&#34;&gt;PR #515&lt;/a&gt;), and giftwrap subscriptions fall back to &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-65/&#34;&gt;NIP-65&lt;/a&gt; relays when inbox lists are absent (&lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/518&#34;&gt;PR #518&lt;/a&gt;). A debug mode (&lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/528&#34;&gt;PR #528&lt;/a&gt;) exposes database queries and MLS ratchet-tree inspection as JSON output. Other fixes addressed subscription recovery after signer re-registration, welcome message catch-up timing, relay filter validation, and user search radius limits.&lt;/p&gt;

&lt;p&gt;Marmot saw significant expansion beyond the core Rust stack this week. &lt;a href=&#34;https://github.com/marmot-protocol/wn-tui&#34;&gt;White Noise TUI&lt;/a&gt;, a terminal-based interface to the White Noise messaging stack, launched March 3. It wraps the &lt;code&gt;wn&lt;/code&gt; CLI as a subprocess and renders its JSON output through an Elm-inspired unidirectional architecture, providing multi-conversation navigation with unread indicators, group creation and member search, real-time message streaming, and emoji reactions from the terminal.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/DavidGershony&#34;&gt;DavidGershony&lt;/a&gt; published a complete C# Marmot stack mirroring the Rust toolchain&amp;#39;s layered architecture. &lt;a href=&#34;https://github.com/DavidGershony/dotnet-mls&#34;&gt;dotnet-mls&lt;/a&gt; implements MLS RFC 9420 cryptographic primitives in C#. &lt;a href=&#34;https://github.com/DavidGershony/marmot-cs&#34;&gt;marmot-cs&lt;/a&gt; builds on it to add Nostr relay transport, functioning as a C# equivalent of MDK. &lt;a href=&#34;https://github.com/DavidGershony/openChat&#34;&gt;OpenChat&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1nwt2g6fkshuj4udrs9zxr8992dyp75s9qx647kxaue98trzqqmssrxx05y&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;The Dude&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1nwt…x05y&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), a cross-platform desktop app built with .NET 9 and Avalonia UI, ties both together into a working chat client with NIP-44 DMs, Marmot group encryption, &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; (Nostr Connect) remote signing, and multi-relay status indicators.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/zerosats/mdk-pwa-reference&#34;&gt;MDK PWA Reference&lt;/a&gt; provides a Progressive Web App template for building Marmot-encrypted applications, with experimental support for AI agent participation in group chats and Bitcoin payments via Arkade wallet infrastructure.&lt;/p&gt;

&lt;h3 id=&#34;wisp-ships-from-alpha-to-beta-2&#34;&gt;Wisp Ships from Alpha to Beta&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/barrydeen/wisp&#34;&gt;Wisp&lt;/a&gt; is a new Android Nostr client that went from &lt;a href=&#34;https://github.com/barrydeen/wisp/releases/tag/v0.1.0-alpha&#34;&gt;first alpha&lt;/a&gt; on February 24 to &lt;a href=&#34;https://github.com/barrydeen/wisp/releases/tag/v0.3.4-beta&#34;&gt;v0.3.4-beta&lt;/a&gt; on March 3, producing 19 releases, 115 merged PRs, and 276 commits in eight days.&lt;/p&gt;

&lt;p&gt;The feature trajectory covers ground that most clients take months to reach. v0.1.0 shipped with outbox/inbox relay model support and onboarding flows. By v0.1.3, the client had &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-55/&#34;&gt;NIP-55&lt;/a&gt; intent-based signing for Amber, an embedded Tor SOCKS5 proxy for &lt;code&gt;.onion&lt;/code&gt; relay connectivity, and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-47/&#34;&gt;NIP-47&lt;/a&gt; (Nostr Wallet Connect). v0.2.0 graduated to beta with mute list filtering and custom emoji support, while v0.2.4 added content warning overlays. The v0.3.x series introduced &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-13/&#34;&gt;NIP-13&lt;/a&gt; proof-of-work for notes, background PoW mining with persistent settings, &lt;code&gt;.onion&lt;/code&gt; relay storage, and mute thread notifications.&lt;/p&gt;

&lt;p&gt;On-device translation via Google ML Kit runs locally without network access after the initial model download. An interactive social graph visualization uses a velocity Verlet physics simulation at approximately 30fps with pinch-to-zoom navigation and profile inspection.&lt;/p&gt;

&lt;h2 id=&#34;releases-20&#34;&gt;Releases&lt;/h2&gt;

&lt;h3 id=&#34;vector-v0-3-1-2&#34;&gt;Vector v0.3.1&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/VectorPrivacy/Vector&#34;&gt;Vector&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1hrujuc08r4zcdtn0u6ts7u7apldcjqgftz0z7stmaaz9hwaf9jxs66f3yh&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;VectorPrivacy&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1hru…f3yh&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), the Marmot-encrypted messaging app, shipped &lt;a href=&#34;https://github.com/VectorPrivacy/Vector/releases/tag/v0.3.1&#34;&gt;v0.3.1&lt;/a&gt; with group management improvements and performance work. Multi-admin groups, bulk invites, invite-by-npub, and group avatars expand the collaboration features. Android background notifications now support inline Reply and Mark Read actions.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/negentropy/&#34;&gt;Negentropy&lt;/a&gt;-based deterministic sync retrieves full conversation history including messages that were missed during offline periods. Voice-to-text rebuilt with GPU acceleration on Android. File attachment handling was overhauled with download progress, retry states, directory zip-and-send, and live progress indicators throughout. Performance improved over 15x across boot time, image processing, audio playback, and general UI responsiveness. App install size dropped by more than a third, with the frontend reduced by roughly half. 32-bit ARM Android support was added.&lt;/p&gt;

&lt;h3 id=&#34;alby-hub-v1-21-5-2&#34;&gt;Alby Hub v1.21.5&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/getAlby/hub&#34;&gt;Alby Hub&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1getal6ykt05fsz5nqu4uld09nfj3y3qxmv8crys4aeut53unfvlqr80nfm&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Alby&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1get…0nfm&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), the self-custodial Lightning node with Nostr Wallet Connect (&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-47/&#34;&gt;NIP-47&lt;/a&gt;) support, shipped &lt;a href=&#34;https://github.com/getAlby/hub/releases/tag/v1.21.5&#34;&gt;v1.21.5&lt;/a&gt;. A second relay was added to the default NWC configuration, improving reliability during relay restarts. A fix for invalid zap data in the transaction list resolves a display issue with malformed &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-57/&#34;&gt;NIP-57&lt;/a&gt; (Lightning Zaps) events. New app store entries include Alby CLI and LNVPS.&lt;/p&gt;

&lt;h3 id=&#34;nospeak-v0-12-x-2&#34;&gt;nospeak v0.12.x&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/psic4t/nospeak&#34;&gt;nospeak&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub174t832slt4252dk526cnh64sfa3k6claah2cdl3c5n9eeeyvjz7q2fmqm6&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;psic4t&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub174t…mqm6&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), the text-based Nostr messaging client, shipped three releases across the period. &lt;a href=&#34;https://github.com/psic4t/nospeak/releases/tag/v0.12.0&#34;&gt;v0.12.0&lt;/a&gt; added a PIN app lock with 4-digit keypad and over 15 new language translations including Bengali, Thai, Vietnamese, Hindi, Arabic, Hebrew, Urdu, Turkish, Japanese, Chinese, Korean, Dutch, Polish, Russian, and Persian with RTL support. &lt;a href=&#34;https://github.com/psic4t/nospeak/releases/tag/v0.12.1&#34;&gt;v0.12.1&lt;/a&gt; introduced a Cypher theme with pure black backgrounds and cyan accents, plus Android video poster generation. &lt;a href=&#34;https://github.com/psic4t/nospeak/releases/tag/v0.12.2&#34;&gt;v0.12.2&lt;/a&gt; added chat export and View Profile in contact menus.&lt;/p&gt;

&lt;h3 id=&#34;citrine-v2-0-0-pre2-2&#34;&gt;Citrine v2.0.0-pre2&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/greenart7c3/Citrine&#34;&gt;Citrine&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1w4uswmv6lu9yel005l3qgheysmr7tk9uvwluddznju3nuxalevvs2d0jr5&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;greenart7c3&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1w4u…0jr5&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), the Android personal relay by greenart7c3, shipped &lt;a href=&#34;https://github.com/greenart7c3/Citrine/releases/tag/v2.0.0-pre2&#34;&gt;v2.0.0-pre2&lt;/a&gt; with relay performance improvements through new database indexes and restructured Kotlin coroutines. Each hosted web app now starts on its own port. Full-text search and a redesigned events screen with event expansion round out the changes.&lt;/p&gt;

&lt;h3 id=&#34;noornote-v0-5-x-2&#34;&gt;NoorNote v0.5.x&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/77elements/noornote&#34;&gt;NoorNote&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub175nul9cvufswwsnpy99lvyhg7ad9nkccxhkhusznxfkr7e0zxthql9g6w0&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;alp&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub175n…g6w0&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), a Nostr-based note-taking application, shipped 8 releases from &lt;a href=&#34;https://github.com/77elements/noornote/releases/tag/v0.5.0&#34;&gt;v0.5.0&lt;/a&gt; through &lt;a href=&#34;https://github.com/77elements/noornote/releases/tag/v0.5.7&#34;&gt;v0.5.7&lt;/a&gt;. The v0.5.0 launch on Android added &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-55/&#34;&gt;NIP-55&lt;/a&gt; Amber signer support and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-71/&#34;&gt;NIP-71&lt;/a&gt; (Video Events) note publishing. A redesigned welcome page in v0.5.1 included public timeline previews and reduced the APK to 15 MB. The Relay Browser in v0.5.2 lets users browse public relay timelines via shareable URLs, alongside media download and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-30/&#34;&gt;NIP-30&lt;/a&gt; custom emoji reactions. Subsequent releases through v0.5.7 addressed sync race conditions in the collaborative &amp;#34;tribes&amp;#34; note-sharing system.&lt;/p&gt;

&lt;h3 id=&#34;noscall-v0-5-1-2&#34;&gt;NosCall v0.5.1&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/sanah9/noscall&#34;&gt;NosCall&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1qn6wvpmqfnpl3xsu79yvfcgpjz4azdfe5ft220nqjmwqg223fvaq58xsha&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;sana&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1qn6…xsha&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), the Nostr voice and video calling app, shipped &lt;a href=&#34;https://github.com/sanah9/noscall/releases/tag/v0.5.1-release&#34;&gt;v0.5.1&lt;/a&gt; with voice message support, an optimized desktop experience with group entry, contact favorites on desktop, contact notes and filtering, data export and cleanup options, and system font size accessibility support.&lt;/p&gt;

&lt;h3 id=&#34;shosho-v0-13-0-2&#34;&gt;Shosho v0.13.0&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/r0d8lsh0p/shosho-releases&#34;&gt;Shosho&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1sh0spghk4yvy2d2v35kelw45qq4msk6zykaw4ds047e9slzs8r4qr7q2xa&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Shosho – Live Stream on Nostr&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1sh0…q2xa&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), the Nostr live streaming app, shipped &lt;a href=&#34;https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v0.13.0&#34;&gt;v0.13.0&lt;/a&gt; with MP4 replay downloads from stream card menus and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-05/&#34;&gt;NIP-05&lt;/a&gt; (DNS-Based Verification) for profiles. The RTMP publisher migrated to Expo Modules API. Streaming performance on lower-bandwidth connections improved, and crashes on older devices and iOS streaming to &lt;a href=&#34;https://zap.stream&#34;&gt;Zap.Stream&lt;/a&gt; are fixed.&lt;/p&gt;

&lt;h3 id=&#34;nostr-java-v2-0-0-2&#34;&gt;nostr-java v2.0.0&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/tcheeric/nostr-java&#34;&gt;nostr-java&lt;/a&gt; shipped &lt;a href=&#34;https://github.com/tcheeric/nostr-java/releases/tag/v2.0.0&#34;&gt;v2.0.0&lt;/a&gt; with configurable WebSocket buffer sizes, allowing applications to handle larger Nostr events without truncation. The major version bump reflects breaking changes to the connection API.&lt;/p&gt;

&lt;h3 id=&#34;prism-1-1-0-2&#34;&gt;Prism 1.1.0&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/hardran3/Prism&#34;&gt;Prism&lt;/a&gt; shipped &lt;a href=&#34;https://github.com/hardran3/Prism/releases/tag/1.1.0&#34;&gt;1.1.0&lt;/a&gt; with long-form content support (kind 30023 articles) and a Markdown editor for composing directly in the app, followed by a &lt;a href=&#34;https://github.com/hardran3/Prism/releases/tag/1.1.1&#34;&gt;1.1.1&lt;/a&gt; bug fix release.&lt;/p&gt;

&lt;h3 id=&#34;angor-v0-2-6-2&#34;&gt;Angor v0.2.6&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/block-core/angor&#34;&gt;Angor&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1wrzguj625auyeysfuuxzf7ywhzlwfz9gm3fml2lul72gwqxw8n9swtcm02&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Angor&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1wrz…cm02&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), the Bitcoin crowdfunding platform, shipped &lt;a href=&#34;https://github.com/block-core/angor/releases/tag/v0.2.6&#34;&gt;v0.2.6&lt;/a&gt; with Boltz integration and a 1-click invest flow. Both invest and fund project types work end-to-end on testnet. The team notes the UI is approximately 70% complete.&lt;/p&gt;

&lt;h2 id=&#34;nip-updates-29&#34;&gt;NIP Updates&lt;/h2&gt;

&lt;p&gt;Recent changes to the &lt;a href=&#34;https://github.com/nostr-protocol/nips&#34;&gt;NIPs repository&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Merged:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1365&#34;&gt;NIP-91: AND Operator for Filters&lt;/a&gt;&lt;/strong&gt;: Adds AND filter semantics for tag arrays in relay subscriptions. Currently, specifying multiple values in a tag filter (e.g., multiple &lt;code&gt;p&lt;/code&gt; tags) matches events containing any of them. NIP-91 lets clients require events matching all specified tag values simultaneously, reducing bandwidth and enabling faster index operations. Multiple relay implementations already exist including nostr-rs-relay, satellite-node, worker-relay, and applesauce. Formerly numbered NIP-119.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2247&#34;&gt;NIP-30: Emoji Set Address in Tags&lt;/a&gt;&lt;/strong&gt;: Custom emoji tags in &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-30/&#34;&gt;NIP-30&lt;/a&gt; can now include an optional emoji set address. Clicking an emoji in a client can open the set it belongs to for bookmarking or browsing. Originated from the &lt;a href=&#34;https://github.com/purrgrammer/chachi&#34;&gt;Chachi&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1gm7gw8q6akeft2pjt270we35vlff0v9g2fene6cxkz2h68q5hl6qls0fte&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;chachi&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1gm7…0fte&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) client.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2111&#34;&gt;NIP-29: Add unallowpubkey and unbanpubkey&lt;/a&gt;&lt;/strong&gt;: Two new admin commands for &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-29/&#34;&gt;NIP-29&lt;/a&gt; group chat. &lt;code&gt;unallowpubkey&lt;/code&gt; removes a pubkey from the allowed list without banning them. &lt;code&gt;unbanpubkey&lt;/code&gt; lifts a ban without re-adding the pubkey to the member list. Previously, the only way to remove someone from the allowed list also banned them, and unbanning required re-adding the user as a member.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Open PRs and Discussions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2244&#34;&gt;NIP-A7: Spells&lt;/a&gt;&lt;/strong&gt; (opened Feb 27): Proposed by purrgrammer, spells are portable saved Nostr queries published as kind 777 events. A spell encodes a REQ or COUNT filter in structured tags (&lt;code&gt;k&lt;/code&gt; for kinds, &lt;code&gt;authors&lt;/code&gt; for pubkeys, &lt;code&gt;tag&lt;/code&gt; for arbitrary tag filters) with runtime variables: &lt;code&gt;$me&lt;/code&gt; resolves to the logged-in user&amp;#39;s pubkey, &lt;code&gt;$contacts&lt;/code&gt; expands to the user&amp;#39;s kind 3 follow list. Relative timestamps (&lt;code&gt;7d&lt;/code&gt;, &lt;code&gt;2w&lt;/code&gt;, &lt;code&gt;1mo&lt;/code&gt;) let spells define rolling time windows without hardcoded dates. Already implemented in &lt;a href=&#34;https://github.com/fiatjaf/nak&#34;&gt;nak&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;fiatjaf&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub180c…h6w6&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) and &lt;a href=&#34;https://github.com/purrgrammer/grimoire&#34;&gt;Grimoire&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1eras6w483zu6ee8kewfdm97n72fdkfd4e8ujgch0d3jfycfflwhsytskz0&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;grimoire&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1era…skz0&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), spells let users create, share, and subscribe to curated feeds that travel across clients.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2245&#34;&gt;NIP-59: Ephemeral Gift Wrap (kind 21059)&lt;/a&gt;&lt;/strong&gt; (opened Feb 27): Adds an ephemeral variant of &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-59/&#34;&gt;NIP-59&lt;/a&gt; gift wraps. Kind 21059 follows NIP-01 ephemeral semantics, so relays discard events after delivery. Proposed by ContextVM for MCP transport where message persistence is unnecessary.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2246&#34;&gt;ContextVM: MCP JSON-RPC over Nostr&lt;/a&gt;&lt;/strong&gt; (opened Feb 27): Specifies how to transport Model Context Protocol messages over Nostr using ephemeral kind 25910 events with &lt;code&gt;p&lt;/code&gt; and &lt;code&gt;e&lt;/code&gt; tags for addressing and correlation. Intentionally thin, deferring protocol detail to the &lt;a href=&#34;https://docs.contextvm.org&#34;&gt;ContextVM spec&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2238&#34;&gt;NIP-29: Audio/Video Live Spaces&lt;/a&gt;&lt;/strong&gt; (opened Feb 25, draft): fiatjaf&amp;#39;s draft extending &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-29/&#34;&gt;NIP-29&lt;/a&gt; groups with live audio and video. The proposal adds optional &lt;code&gt;livekit&lt;/code&gt; and &lt;code&gt;no-text&lt;/code&gt; tags to group metadata events. When a user wants to join a voice space, the client requests a JWT from the relay at &lt;code&gt;/.well-known/nip29/livekit/{groupId}&lt;/code&gt;. The relay checks group membership and issues a token with the user&amp;#39;s hex pubkey as the &lt;code&gt;sub&lt;/code&gt; claim, which is passed to &lt;a href=&#34;https://livekit.io/&#34;&gt;LiveKit&lt;/a&gt; for media transport. Voice room access inherits the group&amp;#39;s existing permission model, so relay-side membership rules govern who can speak. Being tested in Pyramid and Chachi.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2235&#34;&gt;Collaborative Event Ownership&lt;/a&gt;&lt;/strong&gt; (opened Feb 24): pablof7z proposes a pointer event (kind 39382) that declares a collaborative space by listing co-owner pubkeys in &lt;code&gt;p&lt;/code&gt; tags and a target event kind in a &lt;code&gt;k&lt;/code&gt; tag. Any listed owner can publish events of that kind with the same &lt;code&gt;d&lt;/code&gt; tag, and clients resolve the current state by querying all owners and taking the most recent event. Co-authorship attribution only displays when a verifiable &lt;code&gt;a&lt;/code&gt; tag back-references the pointer and the author appears in its &lt;code&gt;p&lt;/code&gt; tags, preventing spoofed claims. This enables shared wiki pages and co-authored resources without assigning control to a single keypair.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2234&#34;&gt;NIP-09: Cascading Deletion of Reposts&lt;/a&gt;&lt;/strong&gt; (opened Feb 24): When an original author deletes a note, relays should also delete any kind 6 or kind 16 reposts referencing it. Motivated by privacy concerns: reposts can preserve accidentally leaked information after the author deletes the source. The change is relay-side only, requiring no client modifications.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2233&#34;&gt;NIP-07: peekPublicKey&lt;/a&gt;&lt;/strong&gt; (opened Feb 23): Adds a &lt;code&gt;peekPublicKey()&lt;/code&gt; method to &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-07/&#34;&gt;NIP-07&lt;/a&gt; browser extensions. Unlike &lt;code&gt;getPublicKey()&lt;/code&gt;, it returns the current pubkey without prompting for user confirmation, enabling silent auto-login when the user has auto-login enabled.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2248&#34;&gt;NIP-BB: Book&lt;/a&gt;&lt;/strong&gt; (opened Feb 28, draft): Defines four addressable event kinds (30300-30303) for structured book publishing on Nostr. A Cover event holds root metadata including title, cover image, license via &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-32/&#34;&gt;NIP-32&lt;/a&gt; (Labeling) labels, and language code. An Index event maps each chapter to its position using base62 fractional indexing, which lets authors insert new chapters between existing ones without renumbering. Chapter events act as structural headers with optional images, while Episode events carry the actual prose capped at 30,000 characters with positioned image tags. Reviews use Zaps on Cover events with the Zap description as review text.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2242&#34;&gt;NIP-54: Switch from Asciidoc to Djot&lt;/a&gt;&lt;/strong&gt; (opened Feb 26): Following the &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2025-12-31-newsletter/&#34;&gt;d-tag internationalization fix&lt;/a&gt; in December, this PR proposes replacing &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-54/&#34;&gt;NIP-54&lt;/a&gt; wiki&amp;#39;s Asciidoc markup format with &lt;a href=&#34;https://djot.net/&#34;&gt;Djot&lt;/a&gt;, adding a rationale section and wikilink examples for non-Latin scripts.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2240&#34;&gt;NIP-66: Defensive Measures&lt;/a&gt;&lt;/strong&gt; (opened Feb 26): Based on learnings from the &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-03-04-newsletter/#outbox-model-under-the-microscope&#34;&gt;nostrability/outbox&lt;/a&gt; benchmarks, adds explicit callouts for &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-66/&#34;&gt;NIP-66&lt;/a&gt; edge cases. A companion &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2241&#34;&gt;PR #2241&lt;/a&gt; defines output tags for SSL, geolocation, network, and connectivity checks.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;NIP-C1: Cryptographic Identity Proofs&lt;/strong&gt; (wiki entry, kind 30817): Proposes kind 30509 events that cryptographically link APK signing certificates to Nostr profiles. The proof works by signing a canonical message containing the Nostr pubkey with the certificate&amp;#39;s private key (supporting ECDSA, RSA PKCS1v15, Ed25519, and other standard algorithms), then publishing the signature in a kind 30509 event signed with the Nostr key. Verifiers can confirm that the person who controls an app&amp;#39;s Android signing certificate also controls the Nostr pubkey claiming to publish it. Proofs expire after one year by default and can be explicitly revoked. Implemented in the &lt;a href=&#34;https://github.com/zapstore/zapstore&#34;&gt;Zapstore&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub10r8xl2njyepcw2zwv3a6dyufj4e4ajx86hz6v4ehu4gnpupxxp7stjt2p8&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Zapstore&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub10r8…t2p8&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) toolchain.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;NIP-31402: SARA Revenue Share Offering Registry&lt;/strong&gt; (wiki entry, kind 30817): Defines kind 31402 addressable events for publishing Simple Autonomous Revenue Agreement (SARA) offerings on Nostr relays. Issuers advertise Lightning-settled revenue share terms including pool share percentage, payout trigger, threshold in sats, term length, and tiered pricing. Agents and humans can discover offerings across relays and subscribe autonomously without a central platform. The kind number mirrors kind 30402 (L402 Service Registry, published by the same author as a companion wiki entry) since SARA represents the return leg of the L402 payment relationship.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;open-prs-and-project-updates-2&#34;&gt;Open PRs and Project Updates&lt;/h2&gt;

&lt;h3 id=&#34;damus-nip-89-https-nostrcompass-org-en-topics-nip-89-recommended-application-handlers-2&#34;&gt;Damus: &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-89/&#34;&gt;NIP-89&lt;/a&gt; (Recommended Application Handlers)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/damus-io/damus/pull/3337&#34;&gt;PR #3337&lt;/a&gt; implements NIP-89 client tag support for &lt;a href=&#34;https://github.com/damus-io/damus&#34;&gt;Damus&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub18m76awca3y37hkvuneavuw6pjj4525fw90necxmadrvjg0sdy6qsngq955&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;damus&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub18m7…q955&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;). The app now emits a client tag on all posting paths (main app, share extension, highlighter, drafts) and displays &amp;#34;via ClientName&amp;#34; beside timestamps when other apps include their tags. A Privacy toggle in Appearance settings lets users disable tag emission. &lt;a href=&#34;https://github.com/damus-io/damus/pull/3652&#34;&gt;PR #3652&lt;/a&gt; adds a Storage section in Settings with an interactive pie chart breaking down NostrDB and Kingfisher cache disk usage with export support.&lt;/p&gt;

&lt;p&gt;Open: &lt;a href=&#34;https://github.com/damus-io/damus/pull/3657&#34;&gt;PR #3657&lt;/a&gt; adds &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-65/&#34;&gt;NIP-65&lt;/a&gt; relay fallback for quoted notes. When an inline &lt;code&gt;nevent&lt;/code&gt; includes an author pubkey but no relay hints and the note is missing from the user&amp;#39;s pool, Damus fetches the author&amp;#39;s kind 10002 relay list and retries from their write relays.&lt;/p&gt;

&lt;h3 id=&#34;amethyst-nip-39-https-nostrcompass-org-en-topics-nip-39-external-identities-nip-c0-nip-66-https-nostrcompass-org-en-topics-nip-66-2&#34;&gt;Amethyst: &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-39/&#34;&gt;NIP-39&lt;/a&gt; (External Identities), NIP-C0, &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-66/&#34;&gt;NIP-66&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/vitorpamplona/amethyst&#34;&gt;Amethyst&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub142gywvjkq0dv6nupggyn2euhx4nduwc7yz5f24ah9rpmunr2s39se3xrj0&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;amethyst&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub142g…xrj0&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) merged a wave of NIP implementations across 28 PRs. External identity claims now publish as dedicated kind 10011 events under &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-39/&#34;&gt;NIP-39&lt;/a&gt; (&lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/1747&#34;&gt;PR #1747&lt;/a&gt;), separating social identity from kind 0 metadata with backward-compatible fallback. Code snippet support via NIP-C0 (&lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/1744&#34;&gt;PR #1744&lt;/a&gt;) adds kind 1337 events with accessors for language, extension, runtime, license, and dependencies. The &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-66/&#34;&gt;NIP-66&lt;/a&gt; relay monitoring implementation (&lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/1742&#34;&gt;PR #1742&lt;/a&gt;) covers both event kinds with full tag parsing for RTT metrics, network type, supported NIPs, and geohash.&lt;/p&gt;

&lt;p&gt;Encrypted DMs arrived on Amethyst Desktop (&lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/1710&#34;&gt;PR #1710&lt;/a&gt;) with a split-pane chat layout supporting both &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-04/&#34;&gt;NIP-04&lt;/a&gt; (Encrypted Direct Messages) and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; (Private Direct Messages). A new relay feed screen (&lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/1733&#34;&gt;PR #1733&lt;/a&gt;) lets users browse posts from a specific relay with follow/unfollow functionality. Open: censorship-resistant NIP-05 verification (&lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/1734&#34;&gt;PR #1734&lt;/a&gt;) adds a parallel verification path for &lt;code&gt;.bit&lt;/code&gt; identifiers that resolves against the Namecoin blockchain instead of HTTP DNS. When Amethyst detects a &lt;code&gt;.bit&lt;/code&gt; suffix in a NIP-05 field, it queries an ElectrumX-NMC server for the name&amp;#39;s transaction history, parses the &lt;code&gt;NAME_UPDATE&lt;/code&gt; script from the latest output to extract the Nostr pubkey, and rejects names older than 36,000 blocks (Namecoin&amp;#39;s expiry window). ElectrumX connections route through SOCKS5 when Tor is enabled, with dynamic server selection between clearnet and &lt;code&gt;.onion&lt;/code&gt; endpoints. An LRU cache with a one-hour TTL prevents repeated blockchain queries.&lt;/p&gt;

&lt;h3 id=&#34;notedeck-outbox-architecture-2&#34;&gt;Notedeck: Outbox Architecture&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/damus-io/notedeck/pull/1303&#34;&gt;PR #1303&lt;/a&gt; migrates &lt;a href=&#34;https://github.com/damus-io/notedeck&#34;&gt;Notedeck&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub18m76awca3y37hkvuneavuw6pjj4525fw90necxmadrvjg0sdy6qsngq955&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;damus&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub18m7…q955&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) from ad-hoc relay pool management to a centralized outbox model with account-scoped subscriptions. The Messages module now publishes a default DM relay list if none exists and routes DMs to recipients&amp;#39; preferred relays per kind 10050.&lt;/p&gt;

&lt;h3 id=&#34;pika-per-group-profiles-and-tutorial-feed-2&#34;&gt;Pika: Per-Group Profiles and Tutorial Feed&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/sledtools/pika&#34;&gt;Pika&lt;/a&gt;, the Marmot-encrypted messaging app available on iOS and Android with a desktop build, gained per-group profiles (&lt;a href=&#34;https://github.com/sledtools/pika/pull/368&#34;&gt;PR #368&lt;/a&gt;). Users can now set a separate display name and picture for each group chat, along with a custom bio. These profiles publish as encrypted kind 0 events inside the Marmot group, invisible to anyone outside it, with a fallback to the user&amp;#39;s global Nostr profile when no group-specific profile is set. When new members join, the admin rebroadcasts all stored group profiles and each member republishes their own on commit. Profile pictures are Marmot-media-encrypted before Blossom upload. The PR includes 16 new unit tests and exposes the feature both through a CLI command (&lt;code&gt;update-group-profile&lt;/code&gt;) and the UI.&lt;/p&gt;

&lt;p&gt;A new &lt;code&gt;pika-news&lt;/code&gt; web app (&lt;a href=&#34;https://github.com/sledtools/pika/pull/401&#34;&gt;PR #401&lt;/a&gt;) monitors Pika&amp;#39;s own GitHub PRs and auto-generates step-by-step tutorial walkthroughs from PR diffs, publishing them as server-rendered pages with &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-07/&#34;&gt;NIP-07&lt;/a&gt; authentication. Users can discuss specific tutorials in real time through Nostr-authenticated chat.&lt;/p&gt;

&lt;h3 id=&#34;divine-embeddable-widgets-and-video-replies-2&#34;&gt;diVine: Embeddable Widgets and Video Replies&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/divinevideo/divine-mobile&#34;&gt;diVine&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1wmr34t36fy03m8hvgl96zl3znndyzyaqhwmwdtshwmtkg03fetaqhjg240&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;rabble&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1wmr…g240&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), the Nostr-native video sharing platform, merged 132 PRs in ten days. Embeddable iframe widgets (&lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/1843&#34;&gt;PR #1843&lt;/a&gt;) provide a self-contained &lt;code&gt;/embed?npub=...&lt;/code&gt; page that renders a user&amp;#39;s profile and latest videos. Video reply functionality (&lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/1915&#34;&gt;PR #1915&lt;/a&gt;), gated behind a feature flag, uses Kind 1111 comments (&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-22/&#34;&gt;NIP-22&lt;/a&gt;) with &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-92/&#34;&gt;NIP-92&lt;/a&gt; (Media Attachments) imeta metadata. Bluesky-inspired three-way content filters (&lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/1797&#34;&gt;PR #1797&lt;/a&gt;) offer Show/Warn/Hide controls across 17 &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-32/&#34;&gt;NIP-32&lt;/a&gt; content warning categories.&lt;/p&gt;

&lt;h3 id=&#34;strfry-req-filter-validation-2&#34;&gt;strfry: REQ Filter Validation&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/hoytech/strfry/pull/163&#34;&gt;PR #163&lt;/a&gt; adds configurable REQ filter validation to &lt;a href=&#34;https://github.com/hoytech/strfry&#34;&gt;strfry&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1yxprsscnjw2e6myxz73mmzvnqw5kvzd5ffjya9ecjypc5l0gvgksh8qud4&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Doug Hoyte&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1yxp…qud4&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), the C&#43;&#43; Nostr relay. Operators can set maximum filters per REQ, required author or tag presence, allowed kind whitelists, and per-filter kind limits. The feature targets NWC relay deployments that need strict filter enforcement. Open: &lt;a href=&#34;https://github.com/hoytech/strfry/pull/173&#34;&gt;PR #173&lt;/a&gt; adds optional zstd compression for event payloads at ingest time.&lt;/p&gt;

&lt;h3 id=&#34;rust-nostr-nip-62-https-nostrcompass-org-en-topics-nip-62-request-to-vanish-2&#34;&gt;rust-nostr: &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-62/&#34;&gt;NIP-62&lt;/a&gt; Request to Vanish&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/rust-nostr/nostr&#34;&gt;rust-nostr&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1drvpzev3syqt0kjrls50050uzf25gehpz9vgdw08hvex7e0vgfeq0eseet&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Yuki Kishimoto&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1drv…seet&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), the Rust Nostr protocol library, added &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-62/&#34;&gt;NIP-62&lt;/a&gt; (Request to Vanish) support across all three database backends: &lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1268&#34;&gt;LMDB&lt;/a&gt;, &lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1270&#34;&gt;SQLite&lt;/a&gt;, and &lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1272&#34;&gt;in-memory&lt;/a&gt;. The LMDB implementation includes configurable options to enable or disable &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-09/&#34;&gt;NIP-09&lt;/a&gt; and NIP-62 enforcement per deployment.&lt;/p&gt;

&lt;h3 id=&#34;ndk-collaborative-events-and-nip-46-timeout-2&#34;&gt;NDK: Collaborative Events and NIP-46 Timeout&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-dev-kit/ndk&#34;&gt;NDK&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1l2vyh47mk2p0qlsku7hg0vn29faehy9hy34ygaclpn66ukqp3afqutajft&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;PABLOF7z&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1l2v…ajft&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), the Nostr Development Kit for JavaScript/TypeScript, merged &lt;a href=&#34;https://github.com/nostr-dev-kit/ndk/pull/380&#34;&gt;PR #380&lt;/a&gt; introducing &lt;code&gt;NDKCollaborativeEvent&lt;/code&gt; for multi-author collaborative documents using an addressable pointer event (kind 39382) that defines authorized authors. A configurable timeout for &lt;code&gt;NDKNip46Signer&lt;/code&gt; (&lt;a href=&#34;https://github.com/nostr-dev-kit/ndk/pull/381&#34;&gt;PR #381&lt;/a&gt;) prevents &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; remote signing operations from hanging indefinitely when a bunker does not respond.&lt;/p&gt;

&lt;h3 id=&#34;tenex-agent-categorization-and-pubkey-gating-2&#34;&gt;TENEX: Agent Categorization and Pubkey Gating&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/tenex-chat/tenex&#34;&gt;TENEX&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1l2vyh47mk2p0qlsku7hg0vn29faehy9hy34ygaclpn66ukqp3afqutajft&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;PABLOF7z&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1l2v…ajft&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), the Nostr-native AI agent orchestration platform, merged two security-related PRs. TIP-01 role-based agent categorization (&lt;a href=&#34;https://github.com/tenex-chat/tenex/pull/91&#34;&gt;PR #91&lt;/a&gt;) maps agent categories (principal, orchestrator, worker, advisor, auditor) to automated tool restrictions via a denied-tools map. Front-door pubkey gating (&lt;a href=&#34;https://github.com/tenex-chat/tenex/pull/87&#34;&gt;PR #87&lt;/a&gt;) ensures only events from whitelisted or backend-signed pubkeys are routed alongside known agents; unknown pubkeys are silently dropped with OpenTelemetry spans for audit.&lt;/p&gt;

&lt;h3 id=&#34;zap-cooking-membership-dashboard-2&#34;&gt;Zap Cooking: Membership Dashboard&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/zapcooking/frontend&#34;&gt;Zap Cooking&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1xxdd8eusvdxmaph3fkuu9x2mymhrcc3ghe2l38zv0l4f4nqp659qskkt7a&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;ZapCooking&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1xxd…kt7a&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), the Nostr-based recipe sharing platform, merged 25 PRs and 85 commits in ten days. A membership dashboard (&lt;a href=&#34;https://github.com/zapcooking/frontend/pull/228&#34;&gt;PR #228&lt;/a&gt;) shows subscription status with expiration dates and manage/upgrade options, re-enables feature gates for Sous Chef and Zappy tiers with both client-side and server-side checks, and standardizes tier naming across 26 files. Two-phase group message loading (&lt;a href=&#34;https://github.com/zapcooking/frontend/pull/227&#34;&gt;PR #227&lt;/a&gt;) provides a fast 3-day initial fetch for instant display followed by a background 40-day backfill.&lt;/p&gt;

&lt;p&gt;Wallet mnemonic storage moved from pubkey-derived encryption to &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; encrypt-to-self (&lt;a href=&#34;https://github.com/zapcooking/frontend/pull/224&#34;&gt;PR #224&lt;/a&gt;), fixing a vulnerability where the old scheme derived its key from &lt;code&gt;SHA-256(pubkey)&lt;/code&gt;, which is effectively unencrypted since pubkeys are public. Existing wallets are silently migrated on first load. &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-29/&#34;&gt;NIP-29&lt;/a&gt; group chat gained unread indicators with red dot badges and invite-only access with kind 9009 invite codes (&lt;a href=&#34;https://github.com/zapcooking/frontend/pull/213&#34;&gt;PR #213&lt;/a&gt;). Link previews and Nostr event embeds now render in DMs and group messages (&lt;a href=&#34;https://github.com/zapcooking/frontend/pull/218&#34;&gt;PR #218&lt;/a&gt;). A Nostr backup section in Settings (&lt;a href=&#34;https://github.com/zapcooking/frontend/pull/210&#34;&gt;PR #210&lt;/a&gt;) stores follows and mute lists via &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-78/&#34;&gt;NIP-78&lt;/a&gt; (Application-specific Data) encrypted storage with rotating 3-slot versioning. Startup performance improved through deferred notification services, lazy DOM rendering via IntersectionObserver (reducing DOM nodes from ~15,000 to ~3,000 on a 200-event feed), and extended outbox cache TTLs (&lt;a href=&#34;https://github.com/zapcooking/frontend/pull/208&#34;&gt;PR #208&lt;/a&gt;). A customizable print recipe modal (&lt;a href=&#34;https://github.com/zapcooking/frontend/pull/205&#34;&gt;PR #205&lt;/a&gt;) lets users toggle which sections to include with a live preview. &lt;a href=&#34;https://github.com/BrantaOps/branta-core&#34;&gt;Branta SDK&lt;/a&gt; integration (&lt;a href=&#34;https://github.com/zapcooking/frontend/pull/222&#34;&gt;PR #222&lt;/a&gt;) adds verification guardrails for POST and GET requests.&lt;/p&gt;

&lt;h3 id=&#34;keep-rust-driven-state-migration-2&#34;&gt;Keep: Rust-Driven State Migration&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/privkeyio/keep-android&#34;&gt;Keep&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1h3fzzzeq60acjvnyvw34rpn5clkaueteffmkt3ln4ygekg9lcm0qhw96sj&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;williamk⚡santiago🔑☢️&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1h3f…96sj&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), the Nostr-based private key manager for Android, merged &lt;a href=&#34;https://github.com/privkeyio/keep-android/pull/178&#34;&gt;PR #178&lt;/a&gt;, deleting four Kotlin configuration stores in favor of Rust-driven shared state from the keep-mobile layer. A 10-second polling loop was replaced with push-based &lt;code&gt;KeepStateCallback&lt;/code&gt; from Rust. &lt;a href=&#34;https://github.com/privkeyio/keep-android/pull/179&#34;&gt;PR #179&lt;/a&gt; adds encrypted backup and restore with passphrase protection.&lt;/p&gt;

&lt;h3 id=&#34;mostro-mobile-dispute-chat-encryption-2&#34;&gt;Mostro Mobile: Dispute Chat Encryption&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/MostroP2P/mobile&#34;&gt;Mostro Mobile&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1m0str0d7z2ww8rdh20t2n9lx520xjwhaq24p68umqp06wwrwtsnqen40un&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Mostro&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1m0s…40un&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), the mobile client for the Mostro P2P Bitcoin trading platform, shipped a two-phase migration of dispute chat encryption. The first step (&lt;a href=&#34;https://github.com/MostroP2P/mobile/pull/495&#34;&gt;PR #495&lt;/a&gt;) switches from mostro-specific wrapping to shared key encryption derived from the admin&amp;#39;s pubkey. Building on that, &lt;a href=&#34;https://github.com/MostroP2P/mobile/pull/501&#34;&gt;PR #501&lt;/a&gt; unifies the message model with &lt;code&gt;NostrEvent&lt;/code&gt; and stores gift wrap events encrypted on disk, consistent with the peer-to-peer chat pattern. A BIP-340 signature fix (&lt;a href=&#34;https://github.com/MostroP2P/mobile/pull/496&#34;&gt;PR #496&lt;/a&gt;) overrides the bip340 dependency to 0.2.0, resolving a &lt;code&gt;bigToBytes()&lt;/code&gt; padding bug that caused 1-2% of Schnorr signatures to be invalid and 100% failure for keys whose public key starts with &lt;code&gt;0x00&lt;/code&gt;. Order Details now shows human-readable status labels instead of raw protocol values, localized across English, Spanish, Italian, and French (&lt;a href=&#34;https://github.com/MostroP2P/mobile/pull/502&#34;&gt;PR #502&lt;/a&gt;). HalCash was added and SEPA removed as a payment method (&lt;a href=&#34;https://github.com/MostroP2P/mobile/pull/493&#34;&gt;PR #493&lt;/a&gt;), since SEPA transfers can exceed 24 hours (SEPA Instant remains).&lt;/p&gt;

&lt;p&gt;On the server side, &lt;a href=&#34;https://github.com/MostroP2P/mostro&#34;&gt;Mostro&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1m0str0d7z2ww8rdh20t2n9lx520xjwhaq24p68umqp06wwrwtsnqen40un&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Mostro&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1m0s…40un&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) fixed dispute session restore to include the initiator field (&lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/599&#34;&gt;PR #599&lt;/a&gt;) and now automatically closes active disputes when a seller releases funds, publishing a settled Nostr event so admin clients see the resolution (&lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/606&#34;&gt;PR #606&lt;/a&gt;).&lt;/p&gt;

&lt;h2 id=&#34;five-years-of-nostr-februaries-2&#34;&gt;Five Years of Nostr Februaries&lt;/h2&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-01-28-newsletter/#five-years-of-nostr-januaries&#34;&gt;Last month&amp;#39;s newsletter&lt;/a&gt; traced Nostr&amp;#39;s January milestones from early development through the Damus breakout to security infrastructure in 2026. This retrospective covers what happened each February from 2021 through 2026.&lt;/p&gt;

&lt;h3 id=&#34;february-2021-the-rewrite-2&#34;&gt;February 2021: The Rewrite&lt;/h3&gt;

&lt;p&gt;Three months into its existence, Nostr&amp;#39;s February produced the protocol&amp;#39;s most consequential early change. On February 14-15, fiatjaf &lt;a href=&#34;https://github.com/nostr-protocol/nostr/commit/33a1a70&#34;&gt;rewrote NIP-01&lt;/a&gt;, replacing the original message format with the EVENT/REQ/CLOSE model that the protocol still uses. Before this rewrite, clients and relays communicated through a simpler structure. Separating event publishing (EVENT) from subscription management (REQ/CLOSE) enabled relay-side filtering that would prove essential for scaling.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-04/&#34;&gt;NIP-04&lt;/a&gt; arrived the same month, adding encrypted direct messages using shared secrets derived from Diffie-Hellman key exchange over secp256k1. Its encryption was basic (AES-256-CBC) and would later be replaced by &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt;&amp;#39;s audited cryptography, but it gave the handful of early users their first private communication channel on the protocol.&lt;/p&gt;

&lt;p&gt;Tooling expanded with &lt;a href=&#34;https://github.com/fiatjaf/noscl&#34;&gt;noscl&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;fiatjaf&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub180c…h6w6&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), a Go command-line client for terminal-based relay interaction, and futurepaul started &lt;a href=&#34;https://github.com/futurepaul/nostr-rs&#34;&gt;nostr-rs&lt;/a&gt;, an early Rust implementation. The entire network ran on two or three relays, coordinated through a &lt;a href=&#34;https://t.me/nostr_protocol&#34;&gt;Telegram group&lt;/a&gt;, with roughly seven active contributors.&lt;/p&gt;

&lt;h3 id=&#34;february-2022-building-momentum-2&#34;&gt;February 2022: Building Momentum&lt;/h3&gt;

&lt;p&gt;The &lt;a href=&#34;https://news.ycombinator.com/item?id=29749061&#34;&gt;Hacker News post&lt;/a&gt; from December 31, 2021 continued to draw developers into February. The &lt;a href=&#34;https://github.com/nostr-protocol/nostr&#34;&gt;nostr-protocol/nostr&lt;/a&gt; repository (the formal &lt;a href=&#34;https://github.com/nostr-protocol/nips&#34;&gt;NIPs repository&lt;/a&gt; would not exist until May 2022) received six pull requests in February, including NIP-13 (Proof of Work) from vinliao, NIP-14 (Reputation) from fiatjaf, NIP-15 (Resource Relations) from Cameri, and &lt;a href=&#34;https://github.com/nostr-protocol/nostr/pull/75&#34;&gt;NIP-17&lt;/a&gt; (Git Updates Over Nostr) from melvincarvalho. The NIP number was later reassigned to Private Direct Messages; git collaboration on Nostr continued separately through what became &lt;a href=&#34;https://gitworkshop.dev&#34;&gt;gitworkshop.dev&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Greg Heartsfield&amp;#39;s &lt;a href=&#34;https://github.com/scsibug/nostr-rs-relay&#34;&gt;nostr-rs-relay&lt;/a&gt; was the month&amp;#39;s workhorse with 34 commits and three releases. Version 0.5.0 on February 12 added &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-05/&#34;&gt;NIP-05&lt;/a&gt; verified user publishing limits. Versions 0.5.1 and 0.5.2 followed over the next two weeks, and the relay handled the bulk of the network&amp;#39;s traffic alone.&lt;/p&gt;

&lt;p&gt;Robert C. Martin (Uncle Bob) was building &lt;a href=&#34;https://github.com/unclebob/more-speech&#34;&gt;more-speech&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub19mun7qwdyjf7qs3456u8kyxncjn5u2n7klpu4utgy68k4aenzj6synjnft&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;unclebobmartin&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub19mu…jnft&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), a Clojure desktop client, logging 69 commits between January 18 and the end of February. His involvement brought attention from the broader software engineering community. fiatjaf&amp;#39;s &lt;a href=&#34;https://github.com/fiatjaf/nos2x&#34;&gt;nos2x&lt;/a&gt; browser extension shipped &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-04/&#34;&gt;NIP-04&lt;/a&gt; decrypt support and relay preference policies in February, implementing the &lt;code&gt;window.nostr&lt;/code&gt; interface (&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-07/&#34;&gt;NIP-07&lt;/a&gt;) that web clients still use for key delegation.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/fiatjaf/branle&#34;&gt;Branle&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;fiatjaf&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub180c…h6w6&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;), still the primary web client, gained &lt;code&gt;web&#43;nostr&lt;/code&gt; protocol handler registration on February 13, an early attempt at deep linking between Nostr applications. &lt;a href=&#34;https://github.com/nbd-wtf/nostr-tools&#34;&gt;nostr-tools&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;fiatjaf&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub180c…h6w6&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) tightened NIP-05 validation. &lt;a href=&#34;https://github.com/nbd-wtf/go-nostr&#34;&gt;go-nostr&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1937vv2nf06360qn9y8el6d8sevnndy7tuh5nzre4gj05xc32tnwqauhaj6&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;mattn&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1937…haj6&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) added NIP-04 encrypted DM support and NIP-12 (Generic Tag Queries) parsing across 11 commits. The network operated on roughly 7-15 relays with an active user base likely in the low hundreds. Damus and Nostream did not yet exist and would not appear until April 2022.&lt;/p&gt;

&lt;h3 id=&#34;february-2023-international-attention-2&#34;&gt;February 2023: International Attention&lt;/h3&gt;

&lt;p&gt;February 2023 brought Nostr its largest wave of public attention. &lt;a href=&#34;https://github.com/damus-io/damus&#34;&gt;Damus&lt;/a&gt;, the iOS client by William Casarin, had been &lt;a href=&#34;https://www.coindesk.com/tech/2023/02/01/decentralized-social-media-project-nostrs-damus-gets-listed-on-apple-app-store&#34;&gt;approved on Apple&amp;#39;s App Store on January 31&lt;/a&gt; after repeated rejections. By February 1 it reached the top 10 in U.S. Social Networking. Two days later, on February 2, &lt;a href=&#34;https://techcrunch.com/2023/02/02/damus-pulled-from-apples-app-store-in-china-after-two-days/&#34;&gt;Apple pulled Damus from China&amp;#39;s App Store&lt;/a&gt; reportedly at the request of the Cyberspace Administration of China.&lt;/p&gt;

&lt;p&gt;Major outlets including TechCrunch and CoinDesk covered the removal, amplifying awareness of both the app and the protocol. Unique public keys with metadata on nostr.directory crossed 300,000 by February 3. All relays were operated by enthusiasts paying out-of-pocket, and infrastructure scrambled to handle the load. Approximately 289 relays were tracked by early February, a number that continued to climb.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&#34;https://github.com/nostr-protocol/nips&#34;&gt;NIPs repository&lt;/a&gt; logged 29 merged pull requests that month, the highest single-month count in the protocol&amp;#39;s history to that point. &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/224&#34;&gt;NIP-57&lt;/a&gt; (Lightning Zaps) and &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/220&#34;&gt;NIP-23&lt;/a&gt; (Long-form Content) both merged on February 13, adding Bitcoin micropayments and expanding Nostr beyond short posts in a single day. &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-65/&#34;&gt;NIP-65&lt;/a&gt; (Relay List Metadata) had merged a week earlier on February 7, enabling the outbox model that followed. &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; (Nostr Connect) and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-58/&#34;&gt;NIP-58&lt;/a&gt; (Badges) also landed before month&amp;#39;s end.&lt;/p&gt;

&lt;p&gt;The Human Rights Foundation &lt;a href=&#34;https://hrf.org/devfund2023q1&#34;&gt;granted $50,000 to William Casarin for Nostr and Damus development&lt;/a&gt; on February 21, one of the first institutional grants to a Nostr project. OpenSats had not yet launched its Nostr fund (that would come in &lt;a href=&#34;https://opensats.org/blog/nostr-grants-july-2023&#34;&gt;July 2023&lt;/a&gt;).&lt;/p&gt;

&lt;h3 id=&#34;february-2024-protocol-durability-2&#34;&gt;February 2024: Protocol Durability&lt;/h3&gt;

&lt;p&gt;February 2024 shifted focus from growth to protocol durability. &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; (Private Direct Messages), open since the previous July, was working toward a replacement for the aging &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-04/&#34;&gt;NIP-04&lt;/a&gt; encryption using &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt;&amp;#39;s audited cryptography and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-59/&#34;&gt;NIP-59&lt;/a&gt; gift wrapping. NIP-04 leaked metadata to relay operators, who could see sender-recipient pairs. NIP-17 hides sender identity behind disposable keypairs and merged that spring after a final round of review in March.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-29/&#34;&gt;NIP-29&lt;/a&gt; (Simple Groups) &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/566&#34;&gt;merged February 28&lt;/a&gt; after months of discussion, defining how relays can host moderated group chats with admin roles and access control. &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-92/&#34;&gt;NIP-92&lt;/a&gt; (imeta tags) merged February 1, standardizing how clients attach image dimensions and blurhash previews to media events.&lt;/p&gt;

&lt;p&gt;On February 16, the NIPs repository added &lt;a href=&#34;https://github.com/nostr-protocol/nips/commit/62c48eff&#34;&gt;BREAKING.md&lt;/a&gt;, a file tracking backward-incompatible changes to the protocol specification. Its creation acknowledged that Nostr had reached a maturity level where breaking changes needed formal documentation.&lt;/p&gt;

&lt;p&gt;Twenty-two pull requests merged that month. &lt;a href=&#34;https://github.com/cashubtc/npubcash-server&#34;&gt;npub.cash&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1s4m06xdlu6fuhfhs4m3nhpp8xdpsdprwccdktckkzusfu8qzzprqnfpz6a&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;npubcash&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1s4m…pz6a&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) launched as a Lightning address service letting any npub receive payments without running a server. An &lt;a href=&#34;https://arxiv.org/abs/2402.05709&#34;&gt;academic paper&lt;/a&gt; published February 8 found that 95% of free-to-use relays could not cover operational costs through donations, with 35% of paid relays charging admission fees below 1,000 sats (roughly $0.45 at the time).&lt;/p&gt;

&lt;h3 id=&#34;february-2025-infrastructure-growth-2&#34;&gt;February 2025: Infrastructure Growth&lt;/h3&gt;

&lt;p&gt;February 2025 produced 28 merged pull requests to the NIPs repository. A &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-62/&#34;&gt;Right to Vanish&lt;/a&gt; NIP merged February 19, defining how users can request deletion of their data from relays in response to regulatory questions around data portability and user control.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-60/&#34;&gt;NIP-60&lt;/a&gt; (Cashu Wallet) and NIP-61 (Nutzaps) received simplification updates, streamlining the ecash token storage format. A q-tag (quote tag) rollout continued across multiple NIPs, standardizing how events reference other events for quoting and threading.&lt;/p&gt;

&lt;p&gt;Client releases marked steady progress. &lt;a href=&#34;https://github.com/damus-io/notedeck&#34;&gt;Notedeck&lt;/a&gt; v0.3.0 alpha shipped on the last day of January, with adoption continuing into February. Primal v2.1 followed on February 7, and &lt;a href=&#34;https://github.com/0ceanSlim/grain&#34;&gt;GRAIN&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1zmc6qyqdfnllhnzzxr5wpepfpnzcf8q6m3jdveflmgruqvd3qa9sjv7f60&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;OceanSlim&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1zmc…7f60&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) v0.3.0, a Go relay implementation, released on February 21.&lt;/p&gt;

&lt;p&gt;NOSTRLDN v5 brought the London Nostr community together for its fifth meetup. A DVMCP bridge connected Nostr&amp;#39;s Data Vending Machines (&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-90/&#34;&gt;NIP-90&lt;/a&gt;) with the Model Context Protocol, prefiguring the AI agent integration work that arrived the following month.&lt;/p&gt;

&lt;h3 id=&#34;february-2026-beyond-social-media-2&#34;&gt;February 2026: Beyond Social Media&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;February 2026 activity is drawn from Nostr Compass issues &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-02-04-newsletter/&#34;&gt;#8&lt;/a&gt; through &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-02-25-newsletter/&#34;&gt;#11&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;February 2026 produced the broadest range of application-layer development in any single Nostr month. &lt;a href=&#34;https://github.com/MostroP2P/mostro&#34;&gt;Mostro&lt;/a&gt; shipped its &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-02-11-newsletter/#mostro-ships-first-public-beta&#34;&gt;first public beta&lt;/a&gt; for decentralized peer-to-peer Bitcoin trading, and &lt;a href=&#34;https://github.com/zapstore/zapstore&#34;&gt;Zapstore&lt;/a&gt; reached &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-02-11-newsletter/#zapstore-v100&#34;&gt;1.0 stable&lt;/a&gt; after months in release candidate testing. &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-02-25-newsletter/#white-noise-v030&#34;&gt;White Noise v0.3.0&lt;/a&gt; delivered real-time &lt;a href=&#34;https://nostrcompass.org/en/topics/mls/&#34;&gt;Marmot&lt;/a&gt;-encrypted messaging with Amber signer support and over 160 merged improvements.&lt;/p&gt;

&lt;p&gt;Competing AI agent proposals from pablof7z (NIP-AE for agent workflows, NIP-AD for MCP server announcements) and joelklabo (AI Agent Messages) arrived alongside a &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-02-25-newsletter/#nip-updates&#34;&gt;DVM Agent Coordination proposal&lt;/a&gt; extending &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-90/&#34;&gt;NIP-90&lt;/a&gt;. &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-02-25-newsletter/#contextvm-mcp-over-nostr&#34;&gt;ContextVM&lt;/a&gt; shipped SDK improvements connecting the Model Context Protocol to Nostr transport. &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-02-25-newsletter/#burrow-mls-messaging-for-ai-agents&#34;&gt;Burrow&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub18ams6ewn5aj2n3wt2qawzglx9mr4nzksxhvrdc4gzrecw7n5tvjqctp424&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Derek Ross&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub18am…p424&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) added &lt;a href=&#34;https://nostrcompass.org/en/topics/mls/&#34;&gt;Marmot&lt;/a&gt;-encrypted messaging for both AI agents and humans, extending Nostr&amp;#39;s identity and relay infrastructure into machine-to-machine communication.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-02-25-newsletter/#fips-nostr-native-mesh-networking&#34;&gt;FIPS&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub19wavu4f7l6l43h24jyskn7fvzy37kcfp67aqjtmv2qgy4lp34nhsda8p6k&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;jcorgan&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub19wa…8p6k&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) shipped a working Rust implementation of Nostr-native mesh networking, using secp256k1 keypairs as node identities with transport-agnostic routing over UDP, Ethernet, Bluetooth, or LoRa radio. Its design showed that Nostr&amp;#39;s key model extends beyond social media into physical network infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://opensats.org/blog/fifteenth-wave-of-nostr-grants&#34;&gt;OpenSats announced its fifteenth wave of Nostr grants&lt;/a&gt;, funding projects including ContextVM and Nostube. Protocol changes included &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-47/&#34;&gt;NIP-47&lt;/a&gt; hold invoice support for Nostr Wallet Connect and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-45/&#34;&gt;NIP-45&lt;/a&gt; (Counting Results) HyperLogLog for relay-side count estimation. &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-85/&#34;&gt;NIP-85&lt;/a&gt; (Trusted Assertions) service provider discoverability for &lt;a href=&#34;https://nostrcompass.org/en/topics/web-of-trust/&#34;&gt;Web of Trust&lt;/a&gt; scoring also merged. &lt;a href=&#34;https://github.com/rust-nostr/nostr&#34;&gt;rust-nostr&lt;/a&gt; began a full API redesign while Nostria 3.0 and &lt;a href=&#34;https://github.com/FROSTR-ORG&#34;&gt;Frostr&lt;/a&gt; (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub17uvdffljczhlpjfvfj0q30dmh4ugh8wlzm8u6w64y2v4ts7fqsqqj28tr4&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Frostr&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub17uv…8tr4&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;, iOS TestFlight) both shipped. &lt;a href=&#34;https://nostrcompass.org/en/topics/blossom/&#34;&gt;Blossom&lt;/a&gt;&amp;#39;s local cache layer addressed media availability across relays.&lt;/p&gt;

&lt;h3 id=&#34;looking-ahead-5&#34;&gt;Looking Ahead&lt;/h3&gt;

&lt;p&gt;Five Februaries of protocol history show a consistent progression from foundational work to application-layer diversification, with the 2023 user influx as the turning point. In 2021, seven contributors worked across three relays. By 2026, the same protocol supported mesh networking and autonomous agent proposals running on production infrastructure.&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;That&amp;#39;s it for this week. Building something or have news to share? DM us on Nostr.&lt;/p&gt;
 &lt;/blockquote&gt;
    </content>
    <updated>2026-03-04T12:24:39Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqspqpy9m7dyhfsqtezkyugn4s5gzl3ezq4fxargl9lnej0ys2qnvugzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqzjde8c</id>
    
      <title type="html">Nostr Compass #11 is out. White Noise v0.3.0 lands real-time ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqspqpy9m7dyhfsqtezkyugn4s5gzl3ezq4fxargl9lnej0ys2qnvugzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqzjde8c" />
    <content type="html">
      Nostr Compass #11 is out. &lt;br/&gt;&lt;br/&gt;White Noise v0.3.0 lands real-time messaging with Amber signer support and over 160 merged improvements. FIPS delivers a working Rust implementation of self-organizing mesh networking using Nostr keypairs as node identities. ContextVM bridges the Model Context Protocol to Nostr, and Burrow launches MLS-encrypted messaging for both humans and AI agents. Deep dives this week cover NIP-55 Android signing and NIP-60 Cashu wallet synchronization.&lt;br/&gt;&lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/naddr1qqgr2epex33nqde3xyursdfsx3sngqg4waehxw309aex2mrp0yhxgctdw4eju6t09upzqa6e2nmnzsgjfzdy520vdy4hywr06c9ue6crpr2zxyq749uu275qqvzqqqr4gu7xllmq&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;naddr1qq…llmq&lt;/a&gt;&lt;/span&gt;&lt;br/&gt; &lt;/div&gt; &lt;p&gt;Welcome back to Nostr Compass, your weekly guide to Nostr.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This week:&lt;/strong&gt; &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/releases/tag/v0.3.0&#34;&gt;White Noise v0.3.0&lt;/a&gt; brings real-time messaging and Amber (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1w4uswmv6lu9yel005l3qgheysmr7tk9uvwluddznju3nuxalevvs2d0jr5&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;greenart7c3&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1w4u…0jr5&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) signer support with 160&#43; merged improvements. &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/releases/tag/1.0.5&#34;&gt;diVine 1.0.5&lt;/a&gt; fixes video playback issues and adds Kind 22236 view events for creator analytics. &lt;a href=&#34;https://github.com/sledtools/pika&#34;&gt;Pika&lt;/a&gt;, &lt;a href=&#34;https://github.com/variablefate/ridestr&#34;&gt;Ridestr&lt;/a&gt;, and &lt;a href=&#34;https://github.com/dmcarrington/unfiltered&#34;&gt;Unfiltered&lt;/a&gt; ship updates. &lt;a href=&#34;https://github.com/jmcorgan/fips&#34;&gt;FIPS&lt;/a&gt; ships a working Rust implementation of Nostr-native mesh networking. &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub18m76awca3y37hkvuneavuw6pjj4525fw90necxmadrvjg0sdy6qsngq955&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;damus&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub18m7…q955&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; gets stability fixes for damus.io link previews. &lt;a href=&#34;https://contextvm.org&#34;&gt;ContextVM&lt;/a&gt; bridges Nostr with the Model Context Protocol. New projects include &lt;a href=&#34;https://github.com/CentauriAgent/burrow&#34;&gt;Burrow&lt;/a&gt; for MLS-encrypted messaging between AI agents and humans, and &lt;a href=&#34;https://github.com/nostria-app/nostria-signer-extension&#34;&gt;Nostria Signer&lt;/a&gt; for browser-based vault and identity management. Deep dives cover NIP-55 Android signing and NIP-60 Cashu wallet synchronization.&lt;/p&gt;

&lt;h2 id=&#34;news-17&#34;&gt;News&lt;/h2&gt;

&lt;h3 id=&#34;notecrumbs-stability-improvements-2&#34;&gt;Notecrumbs Stability Improvements&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/damus-io/notecrumbs&#34;&gt;Notecrumbs&lt;/a&gt;, the Nostr API and web server that powers damus.io link previews, received a series of fixes addressing reliability issues.&lt;/p&gt;

&lt;p&gt;A &lt;a href=&#34;https://github.com/damus-io/notecrumbs/commit/3f201f63ea49&#34;&gt;concurrency fix&lt;/a&gt; replaced the inflight deduplication mechanism with watch channels. Two callers requesting the same note could both become fetchers, leading to a deadlock when one completed before the other subscribed to the notification. Watch channels with atomic operations ensure only one fetcher runs while others wait on the result.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/damus-io/notecrumbs/commit/b0d0bf5a2f17&#34;&gt;Rate limiting&lt;/a&gt; implements a two-layer defense against relay hammering. When users repeatedly access the same note, the system now debounces relay requests with a 5-minute cooldown window. This protection extends to all &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-19/&#34;&gt;NIP-19&lt;/a&gt; types and profile feeds, preventing proportional spam to relays during heavy traffic.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/damus-io/notecrumbs/commit/38670b3972b6&#34;&gt;Performance improvements&lt;/a&gt; moved secondary data fetches to background tokio tasks. Pages now render instantly with cached data instead of blocking on sequential relay timeouts that could add up to 7.5 seconds. An upgrade to nostrdb 0.10.0 accompanied these fixes.&lt;/p&gt;

&lt;h3 id=&#34;nostr-npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm-mcp-over-nostr-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1dvmcpmefwtnn6dctsj3728n64xhrf06p9yude77echmrkgs5zmyqw33jdm&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;ContextVM&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1dvm…3jdm&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;: MCP Over Nostr&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://contextvm.org&#34;&gt;ContextVM&lt;/a&gt; is a suite of tools bridging Nostr and the &lt;a href=&#34;https://modelcontextprotocol.io/&#34;&gt;Model Context Protocol&lt;/a&gt; (MCP). Recent commits have introduced the new &lt;a href=&#34;https://docs.contextvm.org/spec/ceps/cep-8/&#34;&gt;CEP-8&lt;/a&gt; spec enabling payments, and have been pushing &lt;a href=&#34;https://github.com/ContextVM/sdk&#34;&gt;SDK&lt;/a&gt; improvements through February.&lt;/p&gt;

&lt;p&gt;The SDK provides TypeScript client and server transports for MCP over Nostr. Developers can expose MCP servers across the Nostr network and clients can connect to them. Relays act like a blind message bus, just routing encrypted events blindly. Clients without native Nostr support connect through a proxy layer. The library handles relay management and cryptographic signing for event authentication. It works in both Node.js and browser environments.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/ContextVM/cvmi&#34;&gt;CVMI&lt;/a&gt; provides a CLI for server discovery and method invocation. &lt;a href=&#34;https://github.com/ContextVM/relatr&#34;&gt;Relatr&lt;/a&gt; calculates personalized trust scores from social graph distance combined with profile validation.&lt;/p&gt;

&lt;p&gt;ContextVM positions itself as a bridge layer: existing MCP servers gain Nostr interoperability while maintaining their conventional transports.&lt;/p&gt;

&lt;h3 id=&#34;nostr-npub1whtn0s68y3cs98zysa4nxrfzss5g5snhndv35tk5m2sudsr7ltms48r3ec-documents-decentralized-user-search-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1whtn0s68y3cs98zysa4nxrfzss5g5snhndv35tk5m2sudsr7ltms48r3ec&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;White Noise&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1wht…r3ec&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; Documents Decentralized User Search&lt;/h3&gt;

&lt;p&gt;A &lt;a href=&#34;https://blog.jgmontoya.com/2026/02/22/user-search.html&#34;&gt;blog post from jgmontoya&lt;/a&gt; details how &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise&#34;&gt;White Noise&lt;/a&gt; handles user search across the decentralized relay network.&lt;/p&gt;

&lt;p&gt;Profile distribution creates the challenge: unlike centralized messengers with unified databases, Nostr profiles scatter across dozens of relays with no central index. White Noise solves this through a producer-consumer architecture running in parallel.&lt;/p&gt;

&lt;p&gt;A producer process continuously expands the social graph outward from the user&amp;#39;s follows, fetching follow lists at increasing distances and queuing discovered pubkeys for profile resolution. The consumer resolves matches through five increasingly expensive tiers: local user table (fastest), cached profiles from previous searches, connected relays, user relay lists per &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-65/&#34;&gt;NIP-65&lt;/a&gt;, and direct queries to user-declared relays (slowest).&lt;/p&gt;

&lt;p&gt;Cold searches take approximately 3 seconds while warm searches from cache drop to around 10 milliseconds. For new users without established social graphs, the system injects well-connected bootstrap nodes to ensure search functionality. Group membership provides an implicit social signal alongside explicit follows.&lt;/p&gt;

&lt;p&gt;Instrumentation proved critical for optimization, the author notes. Without metrics, improvements were guesswork.&lt;/p&gt;

&lt;h3 id=&#34;fips-nostr-npub19wavu4f7l6l43h24jyskn7fvzy37kcfp67aqjtmv2qgy4lp34nhsda8p6k-nostr-native-mesh-networking-2&#34;&gt;FIPS (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub19wavu4f7l6l43h24jyskn7fvzy37kcfp67aqjtmv2qgy4lp34nhsda8p6k&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;jcorgan&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub19wa…8p6k&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;): Nostr-Native Mesh Networking&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/jmcorgan/fips&#34;&gt;FIPS&lt;/a&gt; (Free Internetworking Peering System) is a working Rust implementation of a self-organizing mesh network that uses Nostr keypairs (secp256k1) as node identities. The &lt;a href=&#34;https://github.com/jmcorgan/fips/blob/master/docs/design/fips-intro.md&#34;&gt;design documentation&lt;/a&gt; accompanies functional code.&lt;/p&gt;

&lt;p&gt;The protocol addresses infrastructure independence: nodes discover each other automatically without central servers or certificate authorities. A spanning tree provides coordinate-based routing while bloom filters propagate reachability information, letting nodes make forwarding decisions with only local knowledge. Transport agnosticism means the same protocol works over UDP, Ethernet, Bluetooth, LoRa radio, or any datagram-capable medium.&lt;/p&gt;

&lt;p&gt;Two encryption layers protect traffic. Link-layer encryption (Noise IK pattern) secures hop-by-hop communication between neighbors with mutual authentication and forward secrecy. Session-layer encryption (Noise XK pattern) provides end-to-end protection against intermediate routers, where only the destination can decrypt the payload. This mirrors how TLS protects HTTP traffic even when traversing untrusted networks.&lt;/p&gt;

&lt;p&gt;The architecture uses a &amp;#34;greedy embedding&amp;#34; spanning tree for routing. Each node receives coordinates based on its position relative to the tree root and parent. Packets route greedily toward coordinates closer to the destination, with bloom filters advertising reachable endpoints. When greedy routing fails (local minima), nodes can fall back to tree-based paths.&lt;/p&gt;

&lt;p&gt;The Rust implementation already includes UDP transport with bloom filter discovery. Future work targets Nostr relay integration for peer bootstrapping.&lt;/p&gt;

&lt;h2 id=&#34;releases-23&#34;&gt;Releases&lt;/h2&gt;

&lt;p&gt;This week brought releases across relay infrastructure and client applications, with new projects also entering the space.&lt;/p&gt;

&lt;h3 id=&#34;haven-nostr-npub1utx00neqgqln72j22kej3ux7803c2k986henvvha4thuwfkper4s7r50e8-v1-2-0-2&#34;&gt;HAVEN (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1utx00neqgqln72j22kej3ux7803c2k986henvvha4thuwfkper4s7r50e8&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;utxo the webmaster 🧑‍💻&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1utx…50e8&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) v1.2.0&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/bitvora/haven&#34;&gt;HAVEN&lt;/a&gt;, the all-in-one personal relay bundling four relay functions with a &lt;a href=&#34;https://nostrcompass.org/en/topics/blossom/&#34;&gt;Blossom&lt;/a&gt; media server, shipped &lt;a href=&#34;https://github.com/bitvora/haven/releases/tag/v1.2.0&#34;&gt;v1.2.0&lt;/a&gt;. This release moves beyond the RC stage &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-02-18-newsletter/#haven-v120-rc3&#34;&gt;covered last week&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Multi-npub support lets a single HAVEN instance serve several Nostr identities through whitelisting, with new blacklisting functionality for access control. A rewritten backup system uses portable JSONL format, with a &lt;code&gt;haven restore&lt;/code&gt; command for importing notes from JSONL files. Cloud storage integration adds &lt;code&gt;--to-cloud&lt;/code&gt; and &lt;code&gt;--from-cloud&lt;/code&gt; flags for remote backup management.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/web-of-trust/&#34;&gt;Web of Trust&lt;/a&gt; improvements include configurable depth levels for trust calculations and automatic 24-hour refresh intervals with lockless optimization reducing memory overhead. User-agent configuration for relay requests and configurable Blastr timeout settings complete the release, alongside data export to compressed JSONL.&lt;/p&gt;

&lt;h3 id=&#34;white-noise-v0-3-0-2&#34;&gt;White Noise v0.3.0&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/marmot-protocol/whitenoise&#34;&gt;White Noise&lt;/a&gt;, the &lt;a href=&#34;https://nostrcompass.org/en/topics/mls/&#34;&gt;MLS&lt;/a&gt;-based encrypted messaging app implementing the &lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt; protocol, shipped &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/releases/tag/v0.3.0&#34;&gt;v0.3.0&lt;/a&gt; with over 160 merged improvements.&lt;/p&gt;

&lt;p&gt;This release brings real-time messaging through streaming connections instead of polling, so messages arrive instantly. Amber support (&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-55/&#34;&gt;NIP-55&lt;/a&gt;) means private keys never need to touch the app. Image sharing now works with upload progress tracking and blurhash placeholders while loading. Full-screen viewing supports pinch-to-zoom.&lt;/p&gt;

&lt;p&gt;Group messaging received reliability improvements with chat lists showing sender names and &lt;a href=&#34;https://nostrcompass.org/en/topics/mls/&#34;&gt;MLS&lt;/a&gt; encryption ensuring forward secrecy. User search expands outward from follows up to four degrees of separation with results streaming in as found.&lt;/p&gt;

&lt;p&gt;A breaking change resets all local data on upgrade due to Marmot protocol changes and the switch to encrypted local storage. Users should back up nsec keys before upgrading.&lt;/p&gt;

&lt;h3 id=&#34;divine-nostr-npub1wmr34t36fy03m8hvgl96zl3znndyzyaqhwmwdtshwmtkg03fetaqhjg240-1-0-5-2&#34;&gt;diVine (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1wmr34t36fy03m8hvgl96zl3znndyzyaqhwmwdtshwmtkg03fetaqhjg240&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;rabble&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1wmr…g240&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) 1.0.5&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/divinevideo/divine-mobile&#34;&gt;diVine&lt;/a&gt;, the short-form looping video client built on restored Vine archives, shipped &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/releases/tag/1.0.5&#34;&gt;1.0.5&lt;/a&gt; with extensive video playback fixes and a new decentralized analytics system.&lt;/p&gt;

&lt;p&gt;Video playback issues dominated the fixes: phantom pause, dual audio between videos, black flash between thumbnails and first frames, and disposed player crashes are all resolved. A pooled video player now handles the Home feed for consistent playback.&lt;/p&gt;

&lt;p&gt;Kind 22236 ephemeral view events enable creator analytics and recommendations. The system tracks traffic sources (home, discovery variants, profile, share, search) and loop counts while filtering out self-views. Local file path leaks in Nostr event imeta tags are fixed with canonical Blossom URLs constructed client-side per BUD-01 spec.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; remote signer improvements include parallelized relay connections and callback URL support. Android reconnects WebSocket connections on app resume after signer approval.&lt;/p&gt;

&lt;h3 id=&#34;coracle-nostr-npub1jlrs53pkdfjnts29kveljul2sm0actt6n8dxrrzqcersttvcuv3qdjynqn-0-6-30-2&#34;&gt;Coracle (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1jlrs53pkdfjnts29kveljul2sm0actt6n8dxrrzqcersttvcuv3qdjynqn&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;hodlbod&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1jlr…ynqn&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) 0.6.30&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/coracle-social/coracle&#34;&gt;Coracle&lt;/a&gt;, the web-based Nostr client focused on relay management and &lt;a href=&#34;https://nostrcompass.org/en/topics/web-of-trust/&#34;&gt;Web of Trust&lt;/a&gt; moderation, shipped &lt;a href=&#34;https://github.com/coracle-social/coracle/releases/tag/0.6.30&#34;&gt;0.6.30&lt;/a&gt; with video thumbnail support, improving media browsing in feeds.&lt;/p&gt;

&lt;h3 id=&#34;nostr-npub1n0stur7q092gyverzc2wfc00e8egkrdnnqq3alhv7p072u89m5es5mk6h0-v1-26-0-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1n0stur7q092gyverzc2wfc00e8egkrdnnqq3alhv7p072u89m5es5mk6h0&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Nostur&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1n0s…k6h0&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; v1.26.0&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostur-com/nostur-ios-public&#34;&gt;Nostur&lt;/a&gt;, the iOS Nostr client, shipped &lt;a href=&#34;https://github.com/nostur-com/nostur-ios-public/releases/tag/1.26.0&#34;&gt;v1.26.0&lt;/a&gt; with a new Live Streams feed section and a redesigned Settings screen. GIFs can now host on Blossom media servers, reducing reliance on centralized services. Klipy GIFs integration provides backup when Tenor becomes unavailable. Year headers in DM conversations and mention count display round out the user-facing changes.&lt;/p&gt;

&lt;p&gt;Developer tooling and CLI apps also received updates this week.&lt;/p&gt;

&lt;h3 id=&#34;nak-nostr-npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6-v0-18-5-2&#34;&gt;nak (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;fiatjaf&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub180c…h6w6&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) v0.18.5&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/fiatjaf/nak&#34;&gt;nak&lt;/a&gt;, fiatjaf&amp;#39;s command-line Swiss Army knife for Nostr, shipped &lt;a href=&#34;https://github.com/fiatjaf/nak/releases/tag/v0.18.5&#34;&gt;v0.18.5&lt;/a&gt; with a new &lt;code&gt;nak profile&lt;/code&gt; subcommand for fetching and displaying user profiles. The &lt;code&gt;git clone&lt;/code&gt; command now supports &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-05/&#34;&gt;NIP-05&lt;/a&gt; names in &lt;code&gt;nostr://&lt;/code&gt; URIs, enabling repository cloning by human-readable identifiers.&lt;/p&gt;

&lt;h3 id=&#34;pika-nostr-npub1zxu639qym0esxnn7rzrt48wycmfhdu3e5yvzwx7ja3t84zyc2r8qz8cx2y-v0-5-3-2&#34;&gt;Pika (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1zxu639qym0esxnn7rzrt48wycmfhdu3e5yvzwx7ja3t84zyc2r8qz8cx2y&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;justinmoon&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1zxu…cx2y&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) v0.5.3&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/sledtools/pika&#34;&gt;Pika&lt;/a&gt;, the &lt;a href=&#34;https://nostrcompass.org/en/topics/mls/&#34;&gt;MLS&lt;/a&gt;-encrypted messenger for iOS, Android, and desktop built on the &lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt; protocol, shipped &lt;a href=&#34;https://github.com/sledtools/pika/releases/tag/pikachat-v0.5.3&#34;&gt;v0.5.3&lt;/a&gt;. Recent commits add file upload and drag-and-drop media support to the desktop app, alongside Cloudflare Workers deployment fixes.&lt;/p&gt;

&lt;p&gt;Pika uses a Rust core that owns all business logic while iOS (SwiftUI) and Android (Kotlin) act as thin UI layers rendering state snapshots. MDK (Marmot Development Kit) provides the MLS implementation. The project notes alpha status and warns against use for sensitive workloads.&lt;/p&gt;

&lt;h3 id=&#34;nostr-npub1mfushgvwvwh8nvtwzu5swvqeq62h530n3mcvnuse6rcpd6h3vy5qegpf33-v0-2-6-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1mfushgvwvwh8nvtwzu5swvqeq62h530n3mcvnuse6rcpd6h3vy5qegpf33&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;ridestr&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1mfu…pf33&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; v0.2.6&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/variablefate/ridestr&#34;&gt;Ridestr&lt;/a&gt;, the decentralized rideshare platform with Cashu payments, shipped &lt;a href=&#34;https://github.com/variablefate/ridestr/releases/tag/v0.2.6&#34;&gt;v0.2.6&lt;/a&gt;. This release fixes TalkBack accessibility issues and resolves bugs where drivers disappeared from the nearby list when switching payment methods or where selected driver counts failed to update when drivers went offline.&lt;/p&gt;

&lt;p&gt;The &amp;#34;Send to All&amp;#34; feature is now &amp;#34;Broadcast RoadFlare&amp;#34; with fixes for silent failures on fresh driver installs. Ridestr implements HTLC escrow for trustless ride payments and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-60/&#34;&gt;NIP-60&lt;/a&gt; wallet sync across devices.&lt;/p&gt;

&lt;h3 id=&#34;unfiltered-v1-0-6-2&#34;&gt;Unfiltered v1.0.6&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/dmcarrington/unfiltered&#34;&gt;Unfiltered&lt;/a&gt;, the Instagram-like photo-sharing app for Android, shipped &lt;a href=&#34;https://github.com/dmcarrington/unfiltered/releases/tag/v1.0.6&#34;&gt;v1.0.6&lt;/a&gt; with improved user search and automatic relay reconnection every 60 seconds.&lt;/p&gt;

&lt;p&gt;Built with Kotlin and Jetpack Compose, Unfiltered uses rust-nostr bindings and Blossom-compatible servers for image hosting. Amber integration (&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-55/&#34;&gt;NIP-55&lt;/a&gt;) handles secure key management. The app shows posts from followed accounts in chronological order without algorithms or ads.&lt;/p&gt;

&lt;p&gt;Two new messaging and signing projects also launched this week.&lt;/p&gt;

&lt;h3 id=&#34;burrow-nostr-npub18ams6ewn5aj2n3wt2qawzglx9mr4nzksxhvrdc4gzrecw7n5tvjqctp424-mls-messaging-for-ai-agents-2&#34;&gt;Burrow (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub18ams6ewn5aj2n3wt2qawzglx9mr4nzksxhvrdc4gzrecw7n5tvjqctp424&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Derek Ross&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub18am…p424&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;): MLS Messaging for AI Agents&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/CentauriAgent/burrow&#34;&gt;Burrow&lt;/a&gt; is a messenger implementing the &lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt; protocol for MLS-encrypted communication without phone numbers or centralized servers. Both human users and AI agents can participate.&lt;/p&gt;

&lt;p&gt;A pure Rust CLI daemon with JSONL output mode handles integration with automated systems. A Flutter cross-platform app covers Android, iOS, Linux, macOS, and Windows. Media attachments encrypt alongside messages, and WebRTC handles audio and video calls with configurable TURN servers.&lt;/p&gt;

&lt;p&gt;Burrow layers MLS encryption on Nostr infrastructure. Identity uses Nostr keypairs (secp256k1) while MLS KeyPackages publish as kind 443 events. Messages encrypt with &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; as kind 445 events, and welcome invitations use &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-59/&#34;&gt;NIP-59&lt;/a&gt; gift-wrapping.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://openclaw.ai&#34;&gt;OpenClaw&lt;/a&gt; integration enables AI agent participation with full tool access. Access control lists with audit logging manage contact and group permissions. This combination positions Burrow for agent-to-agent and agent-to-human messaging scenarios requiring Signal-level encryption on decentralized infrastructure.&lt;/p&gt;

&lt;h3 id=&#34;nostria-signer-nostr-npub1zl3g38a6qypp6py2z07shggg45cu8qex992xpss7d8zrl28mu52s4cjajh-extension-2&#34;&gt;Nostria Signer (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1zl3g38a6qypp6py2z07shggg45cu8qex992xpss7d8zrl28mu52s4cjajh&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;sondreb&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1zl3…jajh&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) Extension&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostria-app/nostria-signer-extension&#34;&gt;Nostria Signer&lt;/a&gt; is a Chromium-based browser extension providing vault and identity management for Nostr users.&lt;/p&gt;

&lt;p&gt;Multiple vaults containing multiple accounts let users organize identities for different contexts. Internationalization includes RTL language support. Built with Angular and TypeScript (79.2% of the codebase), it works as both a browser extension and Progressive Web App.&lt;/p&gt;

&lt;p&gt;Nostria Signer implements &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-07/&#34;&gt;NIP-07&lt;/a&gt; for browser extension signing, enabling web-based Nostr clients to request event signatures without accessing private keys directly. Automated wallet migration handles updates distributed through the Chrome Web Store. Users can also sideload from the &lt;code&gt;dist/extension&lt;/code&gt; folder.&lt;/p&gt;

&lt;p&gt;Developers emphasize the experimental status: users must manage their own secret recovery phrases since the developers cannot restore access to lost keys.&lt;/p&gt;

&lt;h2 id=&#34;project-updates-14&#34;&gt;Project Updates&lt;/h2&gt;

&lt;h3 id=&#34;nostr-npub1qu7dsd44275lms4x9snnwvnnmgx926nsppmr7lcw9dlj36n4fltqgs7p98-migrates-to-new-organization-2&#34;&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1qu7dsd44275lms4x9snnwvnnmgx926nsppmr7lcw9dlj36n4fltqgs7p98&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Form*&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1qu7…7p98&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; Migrates to New Organization&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/formstr-hq/nostr-forms&#34;&gt;Formstr&lt;/a&gt;, the Google Forms alternative on Nostr, migrated its repository from &lt;code&gt;abh3po/nostr-forms&lt;/code&gt; to the &lt;code&gt;formstr-hq&lt;/code&gt; organization. This OpenSats grant recipient continues development at the new location.&lt;/p&gt;

&lt;h3 id=&#34;notable-open-prs-2&#34;&gt;Notable Open PRs&lt;/h3&gt;

&lt;p&gt;Work in progress across Nostr projects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Damus Outbox Model&lt;/strong&gt; (&lt;a href=&#34;https://github.com/damus-io/damus/pull/3602&#34;&gt;PR #3602&lt;/a&gt;): Implementation plan for the gossip/outbox relay model on iOS. This architectural change improves message delivery by publishing to the relays where recipients actually read.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Notedeck Cross-Platform Notifications&lt;/strong&gt; (&lt;a href=&#34;https://github.com/damus-io/notedeck/pull/1296&#34;&gt;PR #1296&lt;/a&gt;): Native notification system for the Damus desktop client covering Android FCM, macOS, and Linux.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;NDK Cashu v3 Upgrade&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nostr-dev-kit/ndk/pull/370&#34;&gt;PR #370&lt;/a&gt;): Updates the Nostr Development Kit&amp;#39;s wallet integration to cashu-ts v3.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Zeus Cashu Offline&lt;/strong&gt; (&lt;a href=&#34;https://github.com/ZeusLN/zeus/pull/3742&#34;&gt;PR #3742&lt;/a&gt;): Offline ecash sending and receiving for the Zeus Lightning wallet.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Shopstr Encrypted Digital Delivery&lt;/strong&gt; (&lt;a href=&#34;https://github.com/shopstr-eng/shopstr/pull/231&#34;&gt;PR #231&lt;/a&gt;): Adds encrypted delivery for digital goods with dynamic weight support for physical items.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;nip-updates-32&#34;&gt;NIP Updates&lt;/h2&gt;

&lt;p&gt;Recent changes to the &lt;a href=&#34;https://github.com/nostr-protocol/nips&#34;&gt;NIPs repository&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Merged This Week:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2223&#34;&gt;NIP-85 Service Provider Discoverability&lt;/a&gt;&lt;/strong&gt;: The &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-85/&#34;&gt;NIP-85&lt;/a&gt; spec now includes guidance on how clients discover trusted assertion providers. When a client needs &lt;a href=&#34;https://nostrcompass.org/en/topics/web-of-trust/&#34;&gt;Web of Trust&lt;/a&gt; scores or other computed metrics, it can query relays for kind 30085 announcements from providers the user already follows or trusts.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2229&#34;&gt;NIP-29 Removes Unmanaged Groups&lt;/a&gt;&lt;/strong&gt;: The &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-29/&#34;&gt;NIP-29&lt;/a&gt; group chat spec dropped support for unmanaged groups (where any member could add others). All NIP-29 groups now require relay-side management with explicit admin roles, simplifying implementations and reducing spam vectors.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2231&#34;&gt;NIP-11 Removes Deprecated Fields&lt;/a&gt;&lt;/strong&gt;: &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-11/&#34;&gt;NIP-11&lt;/a&gt; relay information documents no longer include the deprecated &lt;code&gt;software&lt;/code&gt; and &lt;code&gt;version&lt;/code&gt; fields. Implementations should remove these from their responses.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2227&#34;&gt;NIP-39 Moves Identity Tags&lt;/a&gt;&lt;/strong&gt;: External identity claims (&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-39/&#34;&gt;NIP-39&lt;/a&gt; &lt;code&gt;i&lt;/code&gt; tags for GitHub, Twitter, etc.) moved from kind 0 profiles to dedicated kind 30382 events. This separates identity verification from profile metadata.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;AI Agent NIPs Progress:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Four AI-focused NIPs continue active development. Since &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-02-18-newsletter/#ai-agent-nips-arrive&#34;&gt;last week&amp;#39;s coverage&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2220&#34;&gt;NIP-AE: Agents&lt;/a&gt;&lt;/strong&gt; (updated Feb 19): Defines agent identity with kind 4199 for agent definitions and kind 4201 for prompting (&amp;#34;nudges&amp;#34;). Agents can reference &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-94/&#34;&gt;NIP-94&lt;/a&gt; file metadata for extended descriptions.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2226&#34;&gt;NIP-XX: AI Agent Messages&lt;/a&gt;&lt;/strong&gt; (updated Feb 18): Standardizes conversational messaging with seven ephemeral event kinds (25800-25806) for status, streaming deltas, prompts, responses, tool calls, errors, and cancellation. Kind 31340 &amp;#34;AI Info&amp;#34; events let agents advertise supported models and capabilities.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2228&#34;&gt;NIP-AC: DVM Agent Coordination&lt;/a&gt;&lt;/strong&gt; (opened Feb 18): Extends &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-90/&#34;&gt;NIP-90&lt;/a&gt; for autonomous agent workflows. Adds heartbeats for agent discovery, job reviews for quality tracking, data escrow for result commitment, workflow chains for multi-step pipelines, and swarm bidding for competitive provider selection. A reference implementation runs at 2020117.xyz.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2221&#34;&gt;NIP-AD: MCP Server Announcements&lt;/a&gt;&lt;/strong&gt; (opened Feb 12): Standardizes announcement of Model Context Protocol servers and skills on Nostr. Already in use on the TENEX platform.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Other Open PRs:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2232&#34;&gt;NIP-144: Service Authorization Protocol&lt;/a&gt;&lt;/strong&gt;: Defines how clients prove identity and permissions to service providers on Nostr.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2230&#34;&gt;NIP-DC: Nostr Webxdc&lt;/a&gt;&lt;/strong&gt;: alexgleason proposes integrating Webxdc (decentralized web applications) with Nostr events.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;nip-deep-dive-nip-55-android-signer-application-2&#34;&gt;NIP Deep Dive: NIP-55 (Android Signer Application)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/55.md&#34;&gt;NIP-55&lt;/a&gt; defines how Android Nostr clients request cryptographic operations from dedicated signer applications. With &lt;a href=&#34;#white-noise-v030&#34;&gt;White Noise v0.3.0&lt;/a&gt; and &lt;a href=&#34;#unfiltered-v106&#34;&gt;Unfiltered v1.0.6&lt;/a&gt; both adding Amber support this week, the Android signing protocol warrants examination.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Communication Channels:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;NIP-55 enables inter-app signing through two mechanisms. Intents provide manual user approval with visual feedback for one-time operations. Content Resolvers enable automated signing when users grant persistent permissions, letting apps sign in the background without repeated prompts.&lt;/p&gt;

&lt;p&gt;Communication uses the custom &lt;code&gt;nostrsigner:&lt;/code&gt; URI scheme. A client initiates contact with:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;nostrsigner:&amp;lt;base64-encoded-event&amp;gt;?type=sign_event&amp;amp;callbackUrl=myapp://callback
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Supported Operations:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The spec defines seven cryptographic methods: event signing (&lt;code&gt;sign_event&lt;/code&gt;), public key retrieval (&lt;code&gt;get_public_key&lt;/code&gt;), &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-04/&#34;&gt;NIP-04&lt;/a&gt; encryption/decryption, &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; encryption/decryption, and zap event decryption (&lt;code&gt;decrypt_zap_event&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Permission Model:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Clients call &lt;code&gt;get_public_key&lt;/code&gt; once to establish a trust relationship, receiving the signer&amp;#39;s package name and user pubkey. The spec mandates that clients save these values and never call &lt;code&gt;get_public_key&lt;/code&gt; again, preventing fingerprinting attacks.&lt;/p&gt;

&lt;p&gt;For signing requests, users can approve once or grant &amp;#34;remember my choice&amp;#34; for background operations. If users consistently reject operations, the signer returns a &amp;#34;rejected&amp;#34; status, preventing repeated prompts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implementations:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/greenart7c3/amber&#34;&gt;Amber&lt;/a&gt; is the primary NIP-55 signer for Android. Clients supporting NIP-55 include &lt;a href=&#34;https://github.com/vitorpamplona/amethyst&#34;&gt;Amethyst&lt;/a&gt;, &lt;a href=&#34;#white-noise-v030&#34;&gt;White Noise&lt;/a&gt;, &lt;a href=&#34;#unfiltered-v106&#34;&gt;Unfiltered&lt;/a&gt;, and others. Web applications cannot directly receive signer responses and must use callback URLs or clipboard operations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Relationship to Other Signing NIPs:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;NIP-55 complements &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-07/&#34;&gt;NIP-07&lt;/a&gt; (browser extensions) and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; (remote signing over relays). Where NIP-07 handles desktop browsers and NIP-46 handles cross-device signing, NIP-55 provides native Android integration with minimal latency.&lt;/p&gt;

&lt;h2 id=&#34;nip-deep-dive-nip-60-cashu-wallet-2&#34;&gt;NIP Deep Dive: NIP-60 (Cashu Wallet)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/60.md&#34;&gt;NIP-60&lt;/a&gt; defines how &lt;a href=&#34;https://nostrcompass.org/en/topics/cashu/&#34;&gt;Cashu&lt;/a&gt; ecash wallets store state on Nostr relays, enabling cross-application wallet synchronization. With &lt;a href=&#34;#ridestr-v026&#34;&gt;Ridestr v0.2.6&lt;/a&gt; using NIP-60 for wallet sync across devices, the protocol deserves examination.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Event Kinds:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;NIP-60 uses four event types. The replaceable kind 17375 stores wallet configuration including mint URLs and a dedicated private key for receiving P2PK ecash payments. Token events (kind 7375) contain unspent cryptographic proofs, while spending history (kind 7376) records transactions for user transparency. An optional kind 7374 tracks mint payment quotes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wallet Architecture:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Wallet state lives on relays, making it accessible across applications. A user&amp;#39;s wallet event contains encrypted references to Cashu mints and a wallet-specific private key separate from the user&amp;#39;s Nostr identity. This separation matters: the wallet key handles ecash operations while the Nostr key handles social functions.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;kind&amp;#34;: 17375,
  &amp;#34;content&amp;#34;: &amp;#34;&amp;lt;nip44-encrypted-wallet-config&amp;gt;&amp;#34;,
  &amp;#34;tags&amp;#34;: [[&amp;#34;d&amp;#34;, &amp;#34;cashu-wallet&amp;#34;]]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Proof Management:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Cashu proofs are bearer instruments. Once spent, a proof becomes invalid. NIP-60 manages this through a rollover mechanism: when spending, clients create a new token event with remaining unspent proofs and delete the original via &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-09/&#34;&gt;NIP-09&lt;/a&gt;. Destroyed token IDs go in a &lt;code&gt;del&lt;/code&gt; field for state tracking.&lt;/p&gt;

&lt;p&gt;Clients should periodically validate proofs against mints to detect previously-spent credentials. Multiple token events per mint are permitted, and spending history events help users track transactions even though they&amp;#39;re optional.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security Model:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;All sensitive data uses &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; encryption. The wallet private key never appears in plaintext. Since relays store encrypted blobs without understanding their contents, wallet state remains private even on untrusted relays.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implementations:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Wallets supporting NIP-60 include &lt;a href=&#34;https://github.com/gandlafbtc/nutsack&#34;&gt;Nutsack&lt;/a&gt; and &lt;a href=&#34;https://github.com/cashubtc/eNuts&#34;&gt;eNuts&lt;/a&gt;. Clients like &lt;a href=&#34;#ridestr-v026&#34;&gt;Ridestr&lt;/a&gt; use NIP-60 for cross-device sync, letting users top up on desktop and spend from mobile without manual transfers.&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;That&amp;#39;s it for this week. Building something or have news to share? Reach out via &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; DM or find us on Nostr.&lt;/p&gt;
 &lt;/blockquote&gt;&lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqs827g8dkd07zjvlhh60csytujgd3l9mz7x807xk3fewge7rwlukxgppemhxue69uhkummn9ekx7mp0qydhwumn8ghj7argv4nx7un9wd6zumn0wd68yvfwvdhk6tcpz9mhxue69uhkummnw3ezumrpdejz7d9xcpk&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;greenart7c3&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…xcpk&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqs24yz8xftq8kkdf7q5yzf4v7tn2ek78v0zp2y427mj3sa7f34ggjcpzamhxue69uhhv6t5daezumn0wd68yvfwvdhk6tcpzpmhxue69uhkummnw3ezumt0d5hszrnhwden5te0dehhxtnvdakz769wywf&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;amethyst&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…wywf&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqsr7acdvhf6we9fch94qwhpy0nza36e3tgrtkpku25ppuu80f69kfqppemhxue69uhkummn9ekx7mp0qyghwumn8ghj7mn0wd68ytnhd9hx2tcpzemhxue69uhkummnw3ex2mrfw3jhxtn0wfnj76p2szn&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Derek Ross&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…2szn&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqsxkduqau5h9eeaxu9cfgl9rea2nt35haqjjwxul0vuta3myg2pdjqpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhsz9mhwden5te0wfjkccte9ec8y6tdv9kzumn9wshszxnhwden5te0wfjkccte9ehx7um5wf3ksetrdvhx6ef0mhg2s8&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;ContextVM&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…g2s8&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqsf03c2gsmx5ef4c9zmxvlew04gdh7u94afnknp33qvv3c94kvwxgsppemhxue69uhkummn9ekx7mp0qyvhwumn8ghj76rzwghxxmmjv93kcefwwdhkx6tpdshsz9thwden5te0wfjkccte9ejxzmt4wvhxjme0sadgdk&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;hodlbod&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…dgdk&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqs8d3c64cayj8canmky0jap0c3fekjpzwsthdhx4cthd4my8c5u47spz4mhxue69uhhyetvv9ujuerpd46hxtnfduhszythwden5te0dehhxarj9ekxzmny9uq3zamnwvaz7tmwdaehgu3wwa5kuef0nw62p3&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;rabble&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…62p3&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqsxn2q9vlnek6umcu5z44v42yklpwqy0prpd0kmvg7pytadgg9zvdgeldk34&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;eNuts&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…dk34&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqszhwkw25l0a06cm42ezgtflykpzgltvysa0wsf9ak9qyz2lsc6emcpzemhxue69uhkyetkduhxummnw3erztnrdakj7qghwaehxw309a3xjarrda5kuetj9eek7cmfv9kz7qg4waehxw309aex2mrp0yhxgctdw4eju6t09u02aypl&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;jcorgan&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…aypl&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqsqw0xcx664020ac2nzcfehxfea5rz4dfcqsa3l0u8zklegaf65l4spz4mhxue69uhhyetvv9ujuerpd46hxtnfduhszrnhwden5te0dehhxtnvdakz7qgewaehxw309amk2mrrdakk2tnwdaehgu3wwa5kuef0urz46u&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Form*&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…z46u&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqsw9n8heusyq0el9f99tveg7r0rhcu9tznatuekxt764m78ymqu36cpr3mhxue69uhhyetvv9ujucnfw33k76twwpshy6ewvdhk6tcpz4mhxue69uhhyetvv9ujuat50phjummwv5hszrnhwden5te0dehhxtnvdakz7hsr7ku&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;utxo the webmaster 🧑‍💻&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…r7ku&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqsrhuxx8l9ex335q7he0f09aej04zpazpl0ne2cgukyawd24mayt8gprfmhxue69uhhq7tjv9kkjepwve5kzar2v9nzucm0d5hszxmhwden5te0wfjkccte9emk2um5v4exucn5vvhxxmmd9us2xuyp&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;fiatjaf&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…xuyp&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqsp0c5gn7aqzqsaqj9p8lgt5yy26vwrsvnzj4rqcg0xn3pl4ra729gppemhxue69uhkummn9ekx7mp0qy2hwumn8ghj7un9d3shjtnyv9kh2uewd9hj7qghwaehxw309aex2mrp0yh8qunfd4skctnwv46z7kug8ue&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;sondreb&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…g8ue&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqsfhc97plq8j4yzxv33v98yu8hunu5tpkeesqg7lmk0qhl9wrja6vctqe3n6&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Nostur&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…e3n6&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqsraldwhvwcjgltmxwfu7kw8dqef2692yhzheuurd7k3kfy8cxjdqgpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhszxthwden5te0wajkccm0d4jjumn0wd68ytnhd9hx2tcpzemhxue69uhk2er9dchxummnw3ezumrpdejz7n4mh2x&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;damus&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…mh2x&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqsvfdfkn2wmy73wr0yhkf065jrzm8705ar4q6clyuhc7jekhqfdh4spz4mhxue69uhhyetvv9ujuerpd46hxtnfduhszgrhwden5te0dehhxarj9ejkjmn4dej85ampdeaxjeewwdcxzcm99uq3wamnwvaz7tmjv4kxz7fwwpexjmtpdshxuet59u5g480z&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;gandlaf21&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…480z&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqsprwdgjszdhucrfelp3p46nhzvd5mk7gu6zxp8r0fwc4n63zv9pnspz4mhxue69uhhyetvv9ujuerpd46hxtnfduhsz9mhwden5te0wfjkccte9ec8y6tdv9kzumn9wshszrnhwden5te0dehhxtnvdakz75qcd2e&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;justinmoon&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…cd2e&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqs82p5zxq7f7rw66av5rdy7mjw5dcldxp4eacen2vu2yx37gpx9lgc4tcxtk&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Relatr&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…cxtk&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqsd57gt5x8x8tnek9hpw2g8xqvsd9t6ghecauxf7gvapuqkatckz2qa67f9y&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;ridestr&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…7f9y&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqs8t4ehcdrjgugzn3zgw6enp53gg2y2gfmekkg69m2d4gwxcpl04acpzamhxue69uhhyetvv9ujuurjd9kkzmpwdejhgtcppemhxue69uhkummn9ekx7mp0w3radp&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;White Noise&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…radp&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;&lt;br/&gt;
    </content>
    <updated>2026-02-25T16:45:04Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsqsemew542rv2hy5ul0hxujysvmxcpkvtxlvec0m5288gvdgj7tugzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqxtxgnd</id>
    
      <title type="html">Nostr Compass Podcast #9 Mostro ships its first public beta for ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsqsemew542rv2hy5ul0hxujysvmxcpkvtxlvec0m5288gvdgj7tugzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqxtxgnd" />
    <content type="html">
      Nostr Compass Podcast #9&lt;br/&gt;&lt;br/&gt;Mostro ships its first public beta for P2P Bitcoin trading on mobile, Zapstore reaches 1.0 stable, and OpenSats renews funding for Minibits Wallet. NIP-45 gains HyperLogLog for approximate cross-relay event counting. Primal Android expands NWC infrastructure while Antiprimal bridges Primal&amp;#39;s cache to standard Nostr protocols. A campaign to slim kind 0 metadata begins with identity tags moving to their own event kind. NIP-96 continues its deprecation as projects migrate to Blossom for content-addressed media hosting.&lt;br/&gt;&lt;br/&gt;&lt;video controls width=&#34;100%&#34; class=&#34;max-h-[90vh] bg-neutral-300 dark:bg-zinc-700&#34;&gt;&lt;source src=&#34;https://blossom.primal.net/fbe06d68714282a05c669396aa55ef57a8c34abb9020aed580f4a0e7de3a63bb.ogg&#34;&gt;&lt;/video&gt;&lt;br/&gt;&lt;br/&gt;Hosts: &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqszv6q4uryjzr06xfxxew34wwc5hmjfmfpqn229d72gfegsdn2q3fgpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhszythwden5te0dehhxarj9emkjmn99uq35amnwvaz7tms09exzmtfvshxv6tpw34xze3wvdhk6tc4uevew&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;hzrd149&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…evew&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqs0dqlgwq6l0t20gnstnr8mm9fhu9j9t2fv6wxwl3xtx8dh24l4auspz4mhxue69uhhyetvv9ujuerpd46hxtnfduhsz9mhwden5te0wfjkccte9ehx7um5wghxyctwvshsz9mhwden5te0wfjkccte9ec8y6tdv9kzumn9wshse9sxzq&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;pip&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…sxzq&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqs8y6s7ycwvv36xwn5zsh3e2xemkyumaxnh85dv7jwus6xmscdpcygpz9mhxue69uhkummnw3ezumrpdejz76jympz&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;franzap&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…ympz&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqsfydhe43fphchwpf20rnllmukl0ayc9h6wd6ue9pnawv77hnu4kdgpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhszrnhwden5te0dehhxtnvdakz7qghwaehxw309aex2mrp0yh8qunfd4skctnwv46z7f4yxm3&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;jgmontoya&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…yxm3&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqst0mtgkp3du662ztj3l4fgts0purksu5fgek5n4vgmg9gt2hkn9lqppemhxue69uhkummn9ekx7mp0qythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qythwumn8ghj7un9d3shjtnp0faxzmt09ehx2ap06fen87&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Max&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…en87&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://podcast.nostrcompass.org/naddr1qvzqqqr4vcpzqa6e2nmnzsgjfzdy520vdy4hywr06c9ue6crpr2zxyq749uu275qqyt8wumn8ghj7un9d3shjtnwdaehgu3wvfskueqpp4mhxue69uhkummn9ekx7mqpz3mhxue69uhhyetvv9ujuerpd46hxtnfduqp7etsd9ek7er995cnwde38ymrydfexcmrzwpdv3cxumpe8pa8z7qvpm54w&#34;&gt;https://podcast.nostrcompass.org/naddr1qvzqqqr4vcpzqa6e2nmnzsgjfzdy520vdy4hywr06c9ue6crpr2zxyq749uu275qqyt8wumn8ghj7un9d3shjtnwdaehgu3wvfskueqpp4mhxue69uhkummn9ekx7mqpz3mhxue69uhhyetvv9ujuerpd46hxtnfduqp7etsd9ek7er995cnwde38ymrydfexcmrzwpdv3cxumpe8pa8z7qvpm54w&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;#podcast #nostr
    </content>
    <updated>2026-02-24T20:03:35Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs9hra0cn8h3hw0r5uytcek6lmajxnczyc8va2gt005evl8tfj2jeczypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq8zua3y</id>
    
      <title type="html">Nostr Compass #10 is out! This week: Blossom projects converge on ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs9hra0cn8h3hw0r5uytcek6lmajxnczyc8va2gt005evl8tfj2jeczypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq8zua3y" />
    <content type="html">
      Nostr Compass #10 is out! &lt;br/&gt;This week: Blossom projects converge on offline media caching for Android, with four independent teams tackling local storage. Alby launches a developer sandbox for testing NWC integrations without real funds. Two competing AI agent communication proposals arrive as fiatjaf strips unused fields from NIP-11. Deep dives cover NIP-85&amp;#39;s Trusted Assertions for delegating Web of Trust calculations and NIP-52&amp;#39;s Calendar Events with new day-granularity indexing. &lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/naddr1qqgrwvm9xsmxxwr9xenrzwrxvgurzq3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqp65w5fkwtw&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;naddr1qq…kwtw&lt;/a&gt;&lt;/span&gt; &lt;/div&gt; &lt;p&gt;Welcome back to Nostr Compass, your weekly guide to Nostr.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This week:&lt;/strong&gt; A Blossom local cache layer takes shape as independent projects converge on offline media access for Android. &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1getal6ykt05fsz5nqu4uld09nfj3y3qxmv8crys4aeut53unfvlqr80nfm&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Alby&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1get…0nfm&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; launches an &lt;a href=&#34;https://sandbox.albylabs.com&#34;&gt;NWC developer sandbox&lt;/a&gt; for building and testing Nostr Wallet Connect integrations without risking real funds. Competing proposals for AI agent communication on Nostr arrive in the same week from two authors. fiatjaf strips unused fields from &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1946&#34;&gt;NIP-11&lt;/a&gt;, removing retention policies, country codes, privacy policy, and community preference tags that relay operators never adopted. &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2223&#34;&gt;NIP-85&lt;/a&gt; merges service provider discoverability guidance for Trusted Assertions. A new &lt;code&gt;D&lt;/code&gt; tag in &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1752&#34;&gt;NIP-52&lt;/a&gt; enables day-granularity timestamp indexing of calendar events. New projects include &lt;a href=&#34;https://github.com/zeSchlausKwab/mapnolia&#34;&gt;Mapnolia&lt;/a&gt; for decentralized map tile distribution, &lt;a href=&#34;https://github.com/sledtools/pika&#34;&gt;Pika&lt;/a&gt; for MLS-encrypted messaging, &lt;a href=&#34;https://github.com/privkeyio/keep-android&#34;&gt;Keep&lt;/a&gt; for FROST threshold signing on Android, &lt;a href=&#34;https://files.iris.to/#/&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1xndmdgymsf4a34rzr7346vp8qcptxf75pjqweh8naa8rklgxpfqqmfjtce&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Hashtree publisher&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1xnd…jtce&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;/hashtree&#34;&gt;Hashtree&lt;/a&gt; for content-addressed storage with Nostr integration, and &lt;a href=&#34;https://github.com/hardran3/Prism&#34;&gt;Prism&lt;/a&gt; for sharing content to Nostr from any Android app. &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app&#34;&gt;Primal Android&lt;/a&gt; merges 11 NWC PRs adding dual wallet support and automatic service lifecycle. &lt;a href=&#34;https://github.com/MostroP2P/mobile&#34;&gt;Mostro Mobile&lt;/a&gt; ships a &lt;a href=&#34;https://github.com/MostroP2P/mobile/releases/tag/v1.2.0%2B2&#34;&gt;built-in Lightning wallet&lt;/a&gt; through NWC integration. &lt;a href=&#34;https://github.com/damus-io/notedeck&#34;&gt;Notedeck&lt;/a&gt; prepares for Android App Store release while HAVEN (&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1utx00neqgqln72j22kej3ux7803c2k986henvvha4thuwfkper4s7r50e8&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;utxo the webmaster 🧑‍💻&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1utx…50e8&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;) reaches &lt;a href=&#34;https://github.com/bitvora/haven/releases/tag/v1.2.0-rc3&#34;&gt;v1.2.0-rc3&lt;/a&gt; with multi-npub support and cloud backup. Deep dives this week cover NIP-85&amp;#39;s Trusted Assertions system for delegating Web of Trust calculations to service providers, and NIP-52&amp;#39;s Calendar Events protocol following its day-granularity indexing update.&lt;/p&gt;

&lt;h2 id=&#34;news-20&#34;&gt;News&lt;/h2&gt;

&lt;h3 id=&#34;blossom-local-cache-layer-emerges-2&#34;&gt;Blossom Local Cache Layer Emerges&lt;/h3&gt;

&lt;p&gt;Multiple independent projects are converging on the same problem: offline access to &lt;a href=&#34;https://nostrcompass.org/en/topics/blossom/&#34;&gt;Blossom&lt;/a&gt; media on mobile devices.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/greenart7c3/Morganite&#34;&gt;Morganite&lt;/a&gt;, a new Android app from &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1w4uswmv6lu9yel005l3qgheysmr7tk9uvwluddznju3nuxalevvs2d0jr5&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;greenart7c3&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1w4u…0jr5&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; (the developer behind &lt;a href=&#34;https://github.com/greenart7c3/amber&#34;&gt;Amber&lt;/a&gt; and &lt;a href=&#34;https://github.com/greenart7c3/Citrine&#34;&gt;Citrine&lt;/a&gt;), implements client-side caching for Blossom media. Users can access previously viewed images and files without a network connection.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/hardran3/Aerith&#34;&gt;Aerith&lt;/a&gt; shipped &lt;a href=&#34;https://github.com/hardran3/Aerith/releases/tag/v0.2&#34;&gt;v0.2&lt;/a&gt; with image labeling, bulk mirror/tag/delete operations, filtering by label and file type, plus initial local Blossom cache support. Aerith is a management interface for users who store media across multiple Blossom servers and need to organize and mirror their blobs.&lt;/p&gt;

&lt;p&gt;A new &lt;a href=&#34;https://github.com/hzrd149/blossom/blob/master/implementations/local-blossom-cache.md&#34;&gt;local cache implementation guide&lt;/a&gt; in the Blossom specification documents client-side blob storage, while &lt;a href=&#34;https://github.com/hardran3/Prism&#34;&gt;Prism&lt;/a&gt; (from the same developer as Aerith) adds Blossom upload integration to its Android share-to-Nostr flow. Four independent projects converged on the same problem this week: a dedicated caching app, a media manager, a reference specification, and a share tool with Blossom integration, all implementing persistent local storage beyond simple upload-and-retrieve.&lt;/p&gt;

&lt;h3 id=&#34;alby-nwc-developer-sandbox-2&#34;&gt;Alby NWC Developer Sandbox&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://sandbox.albylabs.com&#34;&gt;Alby&lt;/a&gt; launched a sandbox environment for developers building with &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-47/&#34;&gt;Nostr Wallet Connect (NIP-47)&lt;/a&gt;. The sandbox provides a hosted NWC wallet service where developers can create test connections and send simulated payments without connecting to a real Lightning wallet, while observing the full request/response cycle of NWC events in real time. Developers generate a &lt;code&gt;nostr&#43;walletconnect://&lt;/code&gt; connection string from the sandbox and pass it to their client. The sandbox then shows the resulting kind 23194 request and kind 23195 response events as they flow between client and wallet service.&lt;/p&gt;

&lt;p&gt;This lowers the barrier for new NWC integrations. Previously, testing required either a personal Lightning wallet or a self-hosted NWC service. The sandbox abstracts that away, giving developers an immediate feedback loop for implementing &lt;code&gt;pay_invoice&lt;/code&gt;, &lt;code&gt;get_balance&lt;/code&gt;, &lt;code&gt;make_invoice&lt;/code&gt;, &lt;code&gt;lookup_invoice&lt;/code&gt;, and &lt;code&gt;list_transactions&lt;/code&gt; methods against a live NWC endpoint.&lt;/p&gt;

&lt;h3 id=&#34;ai-agent-nips-arrive-2&#34;&gt;AI Agent NIPs Arrive&lt;/h3&gt;

&lt;p&gt;Proposals for AI agent communication on Nostr appeared within days of each other, approaching the problem from different angles.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2226&#34;&gt;NIP-XX: AI Agent Messages&lt;/a&gt; from &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub19a86gzxctwtz68l8zld2u9y2fjvyyj4juyx8m5geylssrmfj27eqs22ckt&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;klabo&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub19a8…2ckt&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; defines a complete protocol for AI agent interaction: event kinds for prompts, responses, streaming deltas, status updates, tool telemetry, errors, cancellations, and capability discovery. An &lt;code&gt;ai.info&lt;/code&gt; discovery event (kind 31340, replaceable) lets agents announce their supported models, tools with schemas, streaming support, and rate limits. joelklabo&amp;#39;s proposal includes run correlation via prompt ID, session management, stream reconciliation with sequence ordering, and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-59/&#34;&gt;NIP-59&lt;/a&gt; guidance for metadata privacy.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2220&#34;&gt;NIP-AE: Agents&lt;/a&gt; from &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1l2vyh47mk2p0qlsku7hg0vn29faehy9hy34ygaclpn66ukqp3afqutajft&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;PABLOF7z&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1l2v…ajft&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; takes a different approach, defining kinds for agent instantiation: definitions and lessons. These are the event types pablof7z uses in &lt;a href=&#34;https://github.com/tenex-chat/tenex&#34;&gt;TENEX&lt;/a&gt;, the autonomous learning system built on Nostr. A companion proposal, &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2221&#34;&gt;NIP-AD: MCP Server and Skill Announcements&lt;/a&gt;, also from pablof7z, defines events for announcing &lt;a href=&#34;https://modelcontextprotocol.io/&#34;&gt;Model Context Protocol&lt;/a&gt; servers and skills on Nostr. &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-22/&#34;&gt;NIP-22&lt;/a&gt; comments are supported, so the community can discuss and rate MCP servers directly on Nostr.&lt;/p&gt;

&lt;p&gt;NIP-XX covers full agent communication while NIP-AE and NIP-AD address identity and tool discovery. These proposals may converge into a unified standard or coexist as complementary layers.&lt;/p&gt;

&lt;h2 id=&#34;releases-26&#34;&gt;Releases&lt;/h2&gt;

&lt;h3 id=&#34;haven-v1-2-0-rc3-2&#34;&gt;HAVEN v1.2.0-rc3&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/bitvora/haven&#34;&gt;HAVEN&lt;/a&gt;, the all-in-one personal relay that bundles four relay functions with a &lt;a href=&#34;https://nostrcompass.org/en/topics/blossom/&#34;&gt;Blossom&lt;/a&gt; media server, reached &lt;a href=&#34;https://github.com/bitvora/haven/releases/tag/v1.2.0-rc3&#34;&gt;v1.2.0-rc3&lt;/a&gt;. This release candidate adds support for multiple npubs, letting a single HAVEN instance serve several Nostr identities. Earlier RCs added &lt;code&gt;--from-cloud&lt;/code&gt; and &lt;code&gt;--to-cloud&lt;/code&gt; flags for cloud backup (RC2) and fixed a Web of Trust double-counting bug (RC1).&lt;/p&gt;

&lt;h3 id=&#34;mostro-mobile-v1-2-0-built-in-lightning-wallet-2&#34;&gt;Mostro Mobile v1.2.0: Built-In Lightning Wallet&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/MostroP2P/mobile&#34;&gt;Mostro Mobile&lt;/a&gt;, the mobile client for the &lt;a href=&#34;https://github.com/MostroP2P/mostro&#34;&gt;Mostro&lt;/a&gt; P2P Bitcoin exchange (&lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-02-11-newsletter/#mostro-ships-first-public-beta&#34;&gt;v1.1.0 covered last week&lt;/a&gt;), shipped &lt;a href=&#34;https://github.com/MostroP2P/mobile/releases/tag/v1.2.0%2B2&#34;&gt;v1.2.0&lt;/a&gt; with a built-in Lightning wallet through full &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-47/&#34;&gt;NWC (NIP-47)&lt;/a&gt; integration. Buyers and sellers no longer need to switch apps to handle invoices. The app detects hold invoices for sellers and pays them automatically through the connected wallet, while buyers get automatic invoice generation. The release follows &lt;a href=&#34;https://github.com/MostroP2P/mobile/releases/tag/v1.1.1%2B1&#34;&gt;v1.1.1&lt;/a&gt; from earlier in the week, which added multi-Mostro node support with a curated registry of trusted instances, kind 0 metadata fetching for node display, custom node management by pubkey, and automatic fallback when a selected node goes offline.&lt;/p&gt;

&lt;p&gt;On the server side, &lt;a href=&#34;https://github.com/MostroP2P/mostro/releases/tag/v0.16.2&#34;&gt;Mostro v0.16.2&lt;/a&gt; landed with fixes for duplicate dev fee payments, rate limiting on the password validation RPC endpoint, and proper dispute cleanup on cooperative cancellation.&lt;/p&gt;

&lt;p&gt;A new companion project, &lt;a href=&#34;https://github.com/MostroP2P/mostro-skill&#34;&gt;mostro-skill&lt;/a&gt;, enables agents to trade on Mostro through Nostr.&lt;/p&gt;

&lt;h3 id=&#34;aerith-v0-2-2&#34;&gt;Aerith v0.2&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/hardran3/Aerith&#34;&gt;Aerith&lt;/a&gt;, the &lt;a href=&#34;https://nostrcompass.org/en/topics/blossom/&#34;&gt;Blossom&lt;/a&gt; image manager, shipped &lt;a href=&#34;https://github.com/hardran3/Aerith/releases/tag/v0.2&#34;&gt;v0.2&lt;/a&gt; with image labels for organizing media, bulk mirror/tag/delete operations across servers, filtering by label and file type, plus initial local cache support. See &lt;a href=&#34;#blossom-local-cache-layer-emerges&#34;&gt;News section&lt;/a&gt; for context on the broader local cache trend.&lt;/p&gt;

&lt;h3 id=&#34;mapnolia-decentralized-map-tiles-over-nostr-2&#34;&gt;Mapnolia: Decentralized Map Tiles Over Nostr&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/zeSchlausKwab/mapnolia&#34;&gt;Mapnolia&lt;/a&gt; is a new geospatial data server that chunks &lt;a href=&#34;https://github.com/protomaps/PMTiles&#34;&gt;PMTiles&lt;/a&gt; map archives into geographic regions and announces them over Nostr for decentralized discovery. It publishes kind 34444 parametrized replaceable events to Nostr relays containing a complete index of map tile chunks with layer metadata, geohash regions, file references, and &lt;a href=&#34;https://nostrcompass.org/en/topics/blossom/&#34;&gt;Blossom&lt;/a&gt; server details.&lt;/p&gt;

&lt;p&gt;Clients discover and retrieve map data through the Nostr network instead of centralized tile servers, with announcement events carrying enough metadata to request only needed geographic regions from listed Blossom servers. Mapnolia is the first project to bring geospatial data distribution to Nostr, opening possibilities for offline-capable mapping applications.&lt;/p&gt;

&lt;h3 id=&#34;pika-marmot-based-encrypted-messaging-2&#34;&gt;Pika: Marmot-Based Encrypted Messaging&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/sledtools/pika&#34;&gt;Pika&lt;/a&gt; is a new end-to-end encrypted messaging app for iOS and Android using the &lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt; protocol, which layers &lt;a href=&#34;https://nostrcompass.org/en/topics/mls/&#34;&gt;Messaging Layer Security (MLS)&lt;/a&gt; over Nostr relays. The architecture separates concerns into a Rust core (&lt;code&gt;pika_core&lt;/code&gt;) handling MLS state management and message encryption/decryption over Nostr relays, with thin native UI shells in SwiftUI (iOS) and Kotlin (Android). State flows unidirectionally: the UI dispatches actions to the Rust actor, which mutates state and emits snapshots with revision numbers back to the UI via UniFFI and JNI bindings.&lt;/p&gt;

&lt;p&gt;Pika joins a growing field of MLS-on-Nostr messengers alongside &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise&#34;&gt;White Noise&lt;/a&gt;, &lt;a href=&#34;https://github.com/VectorPrivacy&#34;&gt;Vector&lt;/a&gt;, and &lt;a href=&#34;https://0xchat.com&#34;&gt;0xchat&lt;/a&gt;. All use Nostr relays as the transport layer for MLS-encrypted ciphertext, keeping relay operators unable to read message content. Pika uses the Marmot Development Kit (MDK) for its MLS implementation and nostr-sdk for relay connectivity.&lt;/p&gt;

&lt;h3 id=&#34;keep-frost-https-nostrcompass-org-en-topics-frost-threshold-signing-for-android-2&#34;&gt;Keep: &lt;a href=&#34;https://nostrcompass.org/en/topics/frost/&#34;&gt;FROST&lt;/a&gt; Threshold Signing for Android&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/privkeyio/keep-android&#34;&gt;Keep&lt;/a&gt; is a new Android application for &lt;a href=&#34;https://nostrcompass.org/en/topics/frost/&#34;&gt;FROST&lt;/a&gt; threshold signing where no single device holds the complete private key. It implements &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-55/&#34;&gt;NIP-55&lt;/a&gt; (Android Signer) and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; (remote signing), so compatible Nostr clients can request signatures while key material stays distributed across devices. The default configurations are 2-of-3 and 3-of-5, though any t-of-n threshold is supported.&lt;/p&gt;

&lt;p&gt;Keep&amp;#39;s distributed key generation (DKG) ceremony runs over Nostr relays using custom event kinds: kind 21101 for group announcements, kind 21102 for round 1 commitment polynomials (broadcast publicly), and kind 21103 for round 2 secret shares (&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; encrypted point-to-point between participants). The group private key scalar is never computed or assembled anywhere during DKG. Each device holds only its polynomial evaluation share, and any t shares can produce a valid Schnorr signature through a two-round commit-then-sign protocol. The resulting 64-byte signature is indistinguishable from a single-signer Schnorr signature. Under the hood, Keep uses the Zcash Foundation&amp;#39;s &lt;code&gt;frost-secp256k1-tr&lt;/code&gt; crate with Taproot tweaking, so the group public key works directly as a Nostr npub.&lt;/p&gt;

&lt;p&gt;Keep joins the &lt;a href=&#34;https://frostr.org&#34;&gt;Frostr&lt;/a&gt; family of projects alongside &lt;a href=&#34;https://github.com/FROSTR-ORG/igloo-desktop&#34;&gt;Igloo Desktop&lt;/a&gt;, &lt;a href=&#34;https://github.com/FROSTR-ORG/igloo-android&#34;&gt;Igloo for Android&lt;/a&gt;, &lt;a href=&#34;https://github.com/FROSTR-ORG/frost2x&#34;&gt;Frost2x&lt;/a&gt;, and &lt;a href=&#34;https://github.com/FROSTR-ORG/igloo-ios&#34;&gt;Igloo for iOS&lt;/a&gt;, expanding options for threshold key management on Nostr.&lt;/p&gt;

&lt;h3 id=&#34;prism-share-anything-to-nostr-from-android-2&#34;&gt;Prism: Share Anything to Nostr from Android&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/hardran3/Prism&#34;&gt;Prism&lt;/a&gt; is a new Android app (Kotlin/Jetpack Compose, API 26&#43;) that registers as a system share target, letting users publish text, URLs, images, and video to Nostr from any app on their phone. Shared URLs pass through a tracking parameter stripper before being composed into notes. Prism fetches OpenGraph metadata to generate rich link previews and renders native Nostr references (&lt;code&gt;note1&lt;/code&gt;, &lt;code&gt;nevent1&lt;/code&gt;) inline.&lt;/p&gt;

&lt;p&gt;The scheduling engine uses a hybrid &lt;code&gt;AlarmManager&lt;/code&gt;/&lt;code&gt;WorkManager&lt;/code&gt; approach to bypass Android battery optimizations: AlarmManager handles precise wake-up timing while expedited WorkManager tasks ensure delivery, with exponential backoff retry for offline scenarios. Media uploads go through configurable &lt;a href=&#34;https://nostrcompass.org/en/topics/blossom/&#34;&gt;Blossom&lt;/a&gt; servers with thumbnail generation for images and video frames. All event signing is delegated to &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-55/&#34;&gt;NIP-55&lt;/a&gt; external signers like &lt;a href=&#34;https://github.com/greenart7c3/amber&#34;&gt;Amber&lt;/a&gt;, with multi-account support for switching between identities. Prism also supports &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-84/&#34;&gt;NIP-84 (Highlights)&lt;/a&gt; posts. From the same developer as &lt;a href=&#34;#aerith-v02&#34;&gt;Aerith&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&#34;hashtree-content-addressed-storage-with-nostr-integration-2&#34;&gt;Hashtree: Content-Addressed Storage with Nostr Integration&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://files.iris.to/#/&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1xndmdgymsf4a34rzr7346vp8qcptxf75pjqweh8naa8rklgxpfqqmfjtce&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Hashtree publisher&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1xnd…jtce&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;/hashtree&#34;&gt;Hashtree&lt;/a&gt; is a filesystem-based content-addressed blob storage system that publishes Merkle roots on Nostr to create mutable npub/path addresses. The system uses &amp;#34;dumb storage&amp;#34; that works with any key-value store, chunking content into 2MB blocks optimized for &lt;a href=&#34;https://nostrcompass.org/en/topics/blossom/&#34;&gt;Blossom&lt;/a&gt; uploads. Unlike BitTorrent, no active Merkle proof computation is needed, just store and retrieve blobs by hash.&lt;/p&gt;

&lt;p&gt;The Nostr integration enables git remote URLs like &lt;code&gt;htree://npub.../repo-name&lt;/code&gt; for cloning repositories, with commands like &lt;code&gt;htree publish mydata &amp;lt;hash&amp;gt;&lt;/code&gt; to publish content hashes to &lt;code&gt;npub.../mydata&lt;/code&gt; addresses. The comprehensive CLI supports both encrypted (default) and public storage modes, content pinning, pushing to Blossom servers, and managing Nostr identities. Each stored item is either raw bytes or a tree node, providing a foundation for decentralized content distribution through Nostr&amp;#39;s relay network.&lt;/p&gt;

&lt;h3 id=&#34;espy-color-palette-capture-on-shakespeare-2&#34;&gt;Espy: Color Palette Capture on Shakespeare&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://espy.you&#34;&gt;Espy&lt;/a&gt;, built on the &lt;a href=&#34;https://soapbox.pub/tools/shakespeare/&#34;&gt;Shakespeare&lt;/a&gt; platform, lets users capture color palettes from photos and share them as Nostr events. Shakespeare is an AI-powered app builder that authenticates users via NIP-07 browser extensions and provides built-in Nostr relay connectivity, so developers ship apps without implementing their own key management or relay pool. Espy extracts dominant colors from camera input into shareable palette cards discoverable through standard Nostr feeds.&lt;/p&gt;

&lt;h3 id=&#34;flotilla-1-6-4-2&#34;&gt;Flotilla 1.6.4&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://gitea.coracle.social/coracle/flotilla&#34;&gt;Flotilla&lt;/a&gt;, &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1jlrs53pkdfjnts29kveljul2sm0actt6n8dxrrzqcersttvcuv3qdjynqn&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;hodlbod&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1jlr…ynqn&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;&amp;#39;s Discord-like Nostr client that organizes relays as groups, shipped &lt;a href=&#34;https://gitea.coracle.social/coracle/flotilla/releases/tag/1.6.4&#34;&gt;1.6.4&lt;/a&gt;. The Coracle family of projects has migrated from GitHub to a self-hosted &lt;a href=&#34;https://gitea.coracle.social/coracle&#34;&gt;Gitea instance&lt;/a&gt;. This release adds push notifications via NIP-9a and a wallet receive flow, plus classified listings and space URL support. Interface improvements include cleaned-up modals and notification handling. Room muting and safe area insets on mobile round out the changes, alongside fixes for Safari image uploads and calendar event details.&lt;/p&gt;

&lt;h3 id=&#34;shosho-v0-12-0-2&#34;&gt;Shosho v0.12.0&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/r0d8lsh0p/shosho-releases&#34;&gt;Shosho&lt;/a&gt;, the mobile live-streaming app with Nostr integration, shipped &lt;a href=&#34;https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v0.12.0&#34;&gt;v0.12.0&lt;/a&gt;. This release adds video Clips with in-player replies and custom emoji integration. Thread protection blocks indirect mention spam, and a new QR sharing feature lets users exchange profiles offline. A new horizontal playback mode gives streams a Twitch-style viewing experience, and the browse screen now features creator clips alongside live streams.&lt;/p&gt;

&lt;h3 id=&#34;granary-v10-0-2&#34;&gt;Granary v10.0&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/snarfed/granary&#34;&gt;Granary&lt;/a&gt;, a social web translation library that converts data between Nostr, Bluesky, ActivityPub, and other platforms into a common format, shipped &lt;a href=&#34;https://github.com/snarfed/granary/releases/tag/v10.0&#34;&gt;v10.0&lt;/a&gt; with breaking changes. The release switches Nostr&amp;#39;s default ActivityStreams 1 IDs from bech32 to hex and adds expanded Nostr support including &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/27.md&#34;&gt;NIP-27&lt;/a&gt; mention parsing and article tags. A new multiple-output option across converters lets developers translate between protocols in batch.&lt;/p&gt;

&lt;h3 id=&#34;nostr-mcp-server-v3-0-0-2&#34;&gt;Nostr MCP Server v3.0.0&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/AustinKelsay/nostr-mcp-server&#34;&gt;Nostr MCP Server&lt;/a&gt;, a &lt;a href=&#34;https://modelcontextprotocol.io/&#34;&gt;Model Context Protocol&lt;/a&gt; server that enables AI agents to interact with the Nostr network, shipped &lt;a href=&#34;https://github.com/AustinKelsay/nostr-mcp-server/releases/tag/v3.0.0&#34;&gt;v3.0.0&lt;/a&gt;. This major release adds social actions (follows, reactions, reposts, replies) and relay list management with &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/65.md&#34;&gt;NIP-65&lt;/a&gt; support plus optional &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-42/&#34;&gt;NIP-42&lt;/a&gt; authentication. Direct messaging via &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; is also new. The release pairs with this week&amp;#39;s &lt;a href=&#34;#ai-agent-nips-arrive&#34;&gt;AI agent NIP proposals&lt;/a&gt; as practical tooling for agents operating on Nostr.&lt;/p&gt;

&lt;h3 id=&#34;aegis-v0-3-8-2&#34;&gt;Aegis v0.3.8&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/ZharlieW/Aegis&#34;&gt;Aegis&lt;/a&gt;, the cross-platform Nostr signer, shipped &lt;a href=&#34;https://github.com/ZharlieW/Aegis/releases/tag/v0.3.8&#34;&gt;v0.3.8&lt;/a&gt; with multilingual UI support and an incremental update manager for its built-in Nostr app browser. The new update mechanism diffs incrementally against local state, keeping the in-app directory of Nostr web apps current with lower bandwidth usage. The release also introduces 5-minute key material caching to reduce database round-trips when signing multiple events in succession.&lt;/p&gt;

&lt;h3 id=&#34;snstr-v0-3-1-2&#34;&gt;SNSTR v0.3.1&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/AustinKelsay/snstr&#34;&gt;SNSTR&lt;/a&gt; (Secure Nostr Software Toolkit for Renegades), a TypeScript library for the Nostr protocol, shipped &lt;a href=&#34;https://github.com/AustinKelsay/snstr/releases/tag/v0.3.1&#34;&gt;v0.3.1&lt;/a&gt;. The release adds package verification guards ensuring all entry points are included in npm tarballs, with CI enforcement on Node and Bun. &lt;a href=&#34;https://github.com/AustinKelsay/snstr/releases/tag/v0.3.0&#34;&gt;v0.3.0&lt;/a&gt; shipped the same week.&lt;/p&gt;

&lt;h3 id=&#34;citrine-v2-0-0-pre1-2&#34;&gt;Citrine v2.0.0-pre1&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/greenart7c3/Citrine&#34;&gt;Citrine&lt;/a&gt;, the Android Nostr relay from &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1w4uswmv6lu9yel005l3qgheysmr7tk9uvwluddznju3nuxalevvs2d0jr5&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;greenart7c3&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1w4u…0jr5&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;, released &lt;a href=&#34;https://github.com/greenart7c3/Citrine/releases/tag/v2.0.0-pre1&#34;&gt;v2.0.0-pre1&lt;/a&gt; with performance improvements through optimized database indexes and better Kotlin coroutine handling. The release also enhances support for hosting web apps, with each app now running on its own port.&lt;/p&gt;

&lt;h2 id=&#34;project-updates-17&#34;&gt;Project Updates&lt;/h2&gt;

&lt;h3 id=&#34;primal-android-nwc-infrastructure-expansion-2&#34;&gt;Primal Android: NWC Infrastructure Expansion&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app&#34;&gt;Primal Android&lt;/a&gt; merged 11 NWC-related PRs this week, continuing the buildout &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-02-04-newsletter/#primal-android-ships-nwc-encryption&#34;&gt;started two weeks ago&lt;/a&gt;. This batch adds dual wallet NWC support, automatic service start/stop tied to backend notifications, connection routing by wallet type, and proper data cleanup on wallet deletion. The NWC service now manages its own lifecycle based on wallet connection state, reducing manual user intervention.&lt;/p&gt;

&lt;h3 id=&#34;notedeck-android-app-store-prep-2&#34;&gt;Notedeck: Android App Store Prep&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/damus-io/notedeck&#34;&gt;Notedeck&lt;/a&gt;, the multi-platform Nostr client from the &lt;a href=&#34;https://github.com/damus-io/damus&#34;&gt;Damus&lt;/a&gt; team, merged &lt;a href=&#34;https://github.com/damus-io/notedeck/pull/1287&#34;&gt;Android App Store release preparation&lt;/a&gt; this week. The PR adds a UGC (User Generated Content) compliance plan required by Google Play, including a Terms of Service acceptance screen, user blocking via context menus and settings, &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-56/&#34;&gt;NIP-56 (Reporting)&lt;/a&gt; functionality that publishes report events to relays, and a Content &amp;amp; Safety settings section. Build infrastructure was added for generating signed release APKs and AABs (Android App Bundles) via new Makefile targets. An EULA document establishes a 17&#43; age requirement and Nostr-specific disclaimers about decentralized content. The compliance features themselves ship in follow-up PRs; this merge lays the documentation and signing groundwork.&lt;/p&gt;

&lt;p&gt;On the Damus iOS side, a fix landed for an &lt;a href=&#34;https://github.com/damus-io/damus/pull/3593&#34;&gt;infinite loading spinner regression&lt;/a&gt; where the spinner would persist indefinitely after content had loaded.&lt;/p&gt;

&lt;h3 id=&#34;nostria-discovery-relays-and-dm-fixes-2&#34;&gt;Nostria: Discovery Relays and DM Fixes&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostria-app/nostria&#34;&gt;Nostria&lt;/a&gt;, the cross-platform Nostr client focused on global scale, merged 9 PRs this week. The most notable adds &lt;a href=&#34;https://github.com/nostria-app/nostria/pull/460&#34;&gt;auto-initialization of Discovery Relays&lt;/a&gt; for profile lookup, giving new users working relay connectivity without manual configuration. Other fixes address &lt;a href=&#34;https://github.com/nostria-app/nostria/pull/466&#34;&gt;DM textarea wrapping&lt;/a&gt;, &lt;a href=&#34;https://github.com/nostria-app/nostria/pull/479&#34;&gt;fullscreen video viewport fill&lt;/a&gt;, &lt;a href=&#34;https://github.com/nostria-app/nostria/pull/481&#34;&gt;article metadata extraction in repost previews&lt;/a&gt;, and &lt;a href=&#34;https://github.com/nostria-app/nostria/pull/458&#34;&gt;nostr: URI resolution in notifications&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&#34;camelus-riverpod-v3-migration-2&#34;&gt;Camelus: Riverpod v3 Migration&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/camelus-hq/camelus&#34;&gt;Camelus&lt;/a&gt;, the Flutter-based Nostr client, merged 5 PRs this week centered on a &lt;a href=&#34;https://github.com/camelus-hq/camelus/pull/158&#34;&gt;Riverpod v3 API migration&lt;/a&gt; and &lt;a href=&#34;https://github.com/camelus-hq/camelus/pull/159&#34;&gt;generic feed refactor&lt;/a&gt;. An &lt;a href=&#34;https://github.com/camelus-hq/camelus/pull/161&#34;&gt;embedded note cache&lt;/a&gt; avoids redundant relay fetches for quoted notes.&lt;/p&gt;

&lt;h2 id=&#34;nip-updates-35&#34;&gt;NIP Updates&lt;/h2&gt;

&lt;p&gt;Recent changes to the &lt;a href=&#34;https://github.com/nostr-protocol/nips&#34;&gt;NIPs repository&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Merged:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2223&#34;&gt;NIP-85: Service Provider Discoverability&lt;/a&gt;&lt;/strong&gt;: vitorpamplona added guidance on client discovery of &lt;a href=&#34;https://nostrcompass.org/en/topics/trusted-relay-assertions/&#34;&gt;NIP-85 Trusted Assertions&lt;/a&gt; service providers, including relay hints and algorithm-specific service keys. See the &lt;a href=&#34;#nip-deep-dive-nip-85-trusted-assertions&#34;&gt;deep dive below&lt;/a&gt; for full coverage.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1946&#34;&gt;NIP-11: Relay Information Cleanup&lt;/a&gt;&lt;/strong&gt;: fiatjaf removed &lt;code&gt;privacy_policy&lt;/code&gt;, the &lt;code&gt;retention&lt;/code&gt; array, &lt;code&gt;relay_countries&lt;/code&gt;, and the community preferences block from &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-11/&#34;&gt;NIP-11&lt;/a&gt;. Relay operators rarely populated these fields and clients did not act on them.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1752&#34;&gt;NIP-52: Day-Granularity Timestamp Tag&lt;/a&gt;&lt;/strong&gt;: staab added a required &lt;code&gt;D&lt;/code&gt; tag to &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-52/&#34;&gt;NIP-52&lt;/a&gt; time-based calendar events (kind 31923) representing the day-granularity Unix timestamp, calculated as &lt;code&gt;floor(unix_seconds / 86400)&lt;/code&gt;. Multiple &lt;code&gt;D&lt;/code&gt; tags cover multi-day events, enabling efficient temporal indexing without parsing full timestamps.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2210&#34;&gt;NIP-47: Simplification&lt;/a&gt;&lt;/strong&gt;: The simplification PR &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-02-11-newsletter/&#34;&gt;discussed in Newsletter #9&lt;/a&gt; merged this week, removing &lt;code&gt;multi_pay_invoice&lt;/code&gt; and &lt;code&gt;multi_pay_keysend&lt;/code&gt; from &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-47/&#34;&gt;NIP-47 (Nostr Wallet Connect)&lt;/a&gt;. See &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-02-04-newsletter/#nip-deep-dive-nip-47-nostr-wallet-connect&#34;&gt;Newsletter #8&lt;/a&gt; for the full NWC protocol deep dive.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Open PRs and Discussions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2211&#34;&gt;NIP-74: Podcasts&lt;/a&gt;&lt;/strong&gt;: Covered in &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-02-04-newsletter/&#34;&gt;Newsletter #8&lt;/a&gt;, this podcast specification proposal saw heated discussion this week. staab noted at least three competing podcast standards already exist in the wild, and derekross pointed to an existing six-month-old implementation with active apps and podcasts. The path forward requires convergence between implementations before a NIP number can be assigned.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2226&#34;&gt;NIP-XX: AI Agent Messages&lt;/a&gt;&lt;/strong&gt;: joelklabo proposes a complete AI agent communication protocol with event kinds for prompts, responses, streaming, tool telemetry, errors, and capability discovery. See &lt;a href=&#34;#ai-agent-nips-arrive&#34;&gt;News section&lt;/a&gt; for coverage of all AI proposals this week.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1893&#34;&gt;NIP-PNS: Private Note Storage&lt;/a&gt;&lt;/strong&gt;: jb55&amp;#39;s private note system defines kind 1080 events for storing encrypted personal notes on relays without revealing who wrote them. The scheme derives a deterministic pseudonymous keypair from the user&amp;#39;s nsec via HKDF: &lt;code&gt;pns_key = hkdf_extract(ikm=device_key, salt=&amp;#34;nip-pns&amp;#34;)&lt;/code&gt;, then generates a secp256k1 keypair from that derived key. A second derivation produces a symmetric encryption key: &lt;code&gt;pns_nip44_key = hkdf_extract(ikm=pns_key, salt=&amp;#34;nip44-v2&amp;#34;)&lt;/code&gt;. Inner notes are encrypted with &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; v2 using this key and published under the pseudonymous pubkey, so relays see kind 1080 events from an identity unlinked to the user&amp;#39;s main key. Unlike &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-59/&#34;&gt;NIP-59&lt;/a&gt; gift wraps, PNS is not spammable (the pseudonymous key is deterministic, not random) and carries zero public metadata (no &lt;code&gt;p&lt;/code&gt; tags needed since there is no recipient). This week, jb55 posted findings from implementing PNS in Notedeck&amp;#39;s Rust backend (&lt;code&gt;enostr::pns&lt;/code&gt; module). He identified that the spec&amp;#39;s &lt;code&gt;hkdf_extract&lt;/code&gt; call is ambiguous because RFC 5869 HKDF has two phases (Extract and Expand) that produce different output, and most libraries expect both. He clarified that &lt;code&gt;pns_nip44_key&lt;/code&gt; bypasses NIP-44&amp;#39;s normal ECDH key agreement and is used directly as the conversation key, a detail implementers need to know since most NIP-44 libraries default to ECDH. He also flagged an undefined variable in the reference implementation&amp;#39;s TypeScript. The PR, originally from April 2025, is now being actively implemented.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2220&#34;&gt;NIP-AE: Agents&lt;/a&gt;&lt;/strong&gt;: pablof7z defines four event kinds for agent identity on Nostr, drawn from his work on &lt;a href=&#34;https://github.com/tenex-chat/tenex&#34;&gt;TENEX&lt;/a&gt;. The base template is kind 4199 (Agent Definition), carrying title, role description, system instructions, tool declarations, and version. Behavioral modifiers live in kind 4201 (Agent Nudge), which uses &lt;code&gt;only-tool&lt;/code&gt;, &lt;code&gt;allow-tool&lt;/code&gt;, and &lt;code&gt;deny-tool&lt;/code&gt; tags for runtime capability control. Agents publish what they learn as kind 4129 (Agent Lesson) events, categorized and linked back to the parent definition via &lt;code&gt;e&lt;/code&gt; tags, refinable through &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-22/&#34;&gt;NIP-22&lt;/a&gt; comment threads. Ownership verification uses kind 14199, a replaceable event where human operators list their agent pubkeys, establishing a bidirectional chain when matched against the agent&amp;#39;s kind 0 profile &lt;code&gt;p&lt;/code&gt; tag.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2221&#34;&gt;NIP-AD: MCP Server and Skill Announcements&lt;/a&gt;&lt;/strong&gt;: pablof7z defines events for announcing &lt;a href=&#34;https://modelcontextprotocol.io/&#34;&gt;Model Context Protocol&lt;/a&gt; servers and individual skills on Nostr. MCP server announcements carry the server&amp;#39;s endpoint URL and supported protocol version alongside a list of available tools with their input schemas. &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-22/&#34;&gt;NIP-22&lt;/a&gt; comments are supported on server announcements, so the community can discuss and rate MCP servers directly on Nostr.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2224&#34;&gt;NIP-73: OSM Tag Kind&lt;/a&gt;&lt;/strong&gt;: DestBro proposes adding OpenStreetMap identifiers to &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-73/&#34;&gt;NIP-73 (External Content IDs)&lt;/a&gt;, which standardizes how Nostr events reference external content like books (ISBN), movies (ISAN), podcast feeds (GUID), geohashes, and URLs via &lt;code&gt;i&lt;/code&gt; and &lt;code&gt;k&lt;/code&gt; tags. The proposed OSM kind would let events reference specific map features (buildings, roads, parks) by their OpenStreetMap node or way ID, connecting Nostr content to the open geographic database.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2219&#34;&gt;NIP-XX: Responsive Image Variants&lt;/a&gt;&lt;/strong&gt;: woikos proposes extending &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-94/&#34;&gt;NIP-94&lt;/a&gt; file metadata events with tags for responsive image variants at different resolutions. Clients could select the appropriate variant based on display size and network conditions, reducing bandwidth for mobile users viewing high-resolution images hosted on &lt;a href=&#34;https://nostrcompass.org/en/topics/blossom/&#34;&gt;Blossom&lt;/a&gt; servers.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;nip-deep-dive-nip-85-trusted-assertions-2&#34;&gt;NIP Deep Dive: NIP-85 (Trusted Assertions)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/85.md&#34;&gt;NIP-85&lt;/a&gt; defines a system for delegating expensive calculations to trusted service providers who publish signed results as Nostr events. Web of Trust scores and engagement metrics require crawling many relays and processing large event volumes, work that is impractical on mobile devices. This week&amp;#39;s &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2223&#34;&gt;merge&lt;/a&gt; added guidance on the client discovery process for these providers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Delegation:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Calculating a user&amp;#39;s Web of Trust score requires crawling follow graphs multiple hops deep across many relays, and computing accurate follower counts means deduplicating across the entire relay network. Mobile devices and browser clients cannot perform these operations, yet the results are essential for spam filtering and content ranking. NIP-85 bridges this gap by letting users designate trusted providers to run the computations and publish results as standard Nostr events.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Protocol Design:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;NIP-85 uses four event kinds for assertions about different subject types. User assertions (kind 30382) carry follower count, post/reply/reaction counts, zap amounts, normalized rank (0-100), common topics, and active hours:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;&amp;lt;service pubkey&amp;gt;&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1739836800,
  &amp;#34;kind&amp;#34;: 30382,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;d&amp;#34;, &amp;#34;e88a691e98d9987c964521dff60025f60700378a4879180dcbbb4a5027850411&amp;#34;],
    [&amp;#34;rank&amp;#34;, &amp;#34;89&amp;#34;],
    [&amp;#34;followers&amp;#34;, &amp;#34;4521&amp;#34;],
    [&amp;#34;first_created_at&amp;#34;, &amp;#34;1609459200&amp;#34;],
    [&amp;#34;post_cnt&amp;#34;, &amp;#34;1283&amp;#34;],
    [&amp;#34;reply_cnt&amp;#34;, &amp;#34;647&amp;#34;],
    [&amp;#34;reactions_cnt&amp;#34;, &amp;#34;8920&amp;#34;],
    [&amp;#34;zap_amt_recd&amp;#34;, &amp;#34;850000&amp;#34;],
    [&amp;#34;zap_amt_sent&amp;#34;, &amp;#34;320000&amp;#34;],
    [&amp;#34;zap_cnt_recd&amp;#34;, &amp;#34;412&amp;#34;],
    [&amp;#34;zap_cnt_sent&amp;#34;, &amp;#34;198&amp;#34;],
    [&amp;#34;zap_avg_amt_day_recd&amp;#34;, &amp;#34;1150&amp;#34;],
    [&amp;#34;zap_avg_amt_day_sent&amp;#34;, &amp;#34;430&amp;#34;],
    [&amp;#34;reports_cnt_recd&amp;#34;, &amp;#34;2&amp;#34;],
    [&amp;#34;reports_cnt_sent&amp;#34;, &amp;#34;0&amp;#34;],
    [&amp;#34;t&amp;#34;, &amp;#34;nostr&amp;#34;],
    [&amp;#34;t&amp;#34;, &amp;#34;bitcoin&amp;#34;],
    [&amp;#34;active_hours_start&amp;#34;, &amp;#34;14&amp;#34;],
    [&amp;#34;active_hours_end&amp;#34;, &amp;#34;22&amp;#34;]
  ],
  &amp;#34;content&amp;#34;: &amp;#34;&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;&amp;lt;service key signature&amp;gt;&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Event assertions (kind 30383) rate individual notes with comment count, quote count, reposts, reactions, and zap data:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;&amp;lt;service pubkey&amp;gt;&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1739836800,
  &amp;#34;kind&amp;#34;: 30383,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;d&amp;#34;, &amp;#34;&amp;lt;target event id&amp;gt;&amp;#34;],
    [&amp;#34;rank&amp;#34;, &amp;#34;72&amp;#34;],
    [&amp;#34;comment_cnt&amp;#34;, &amp;#34;45&amp;#34;],
    [&amp;#34;quote_cnt&amp;#34;, &amp;#34;12&amp;#34;],
    [&amp;#34;repost_cnt&amp;#34;, &amp;#34;89&amp;#34;],
    [&amp;#34;reaction_cnt&amp;#34;, &amp;#34;310&amp;#34;],
    [&amp;#34;zap_cnt&amp;#34;, &amp;#34;23&amp;#34;],
    [&amp;#34;zap_amount&amp;#34;, &amp;#34;125000&amp;#34;]
  ],
  &amp;#34;content&amp;#34;: &amp;#34;&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;&amp;lt;service key signature&amp;gt;&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;For addressable events (long-form articles, wiki pages), kind 30384 applies the same engagement metrics across all versions collectively. Kind 30385 rates external identifiers (books, movies, websites, locations, hashtags) referenced through &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-73/&#34;&gt;NIP-73 (External Content IDs)&lt;/a&gt;, which standardizes how Nostr events reference external content via &lt;code&gt;i&lt;/code&gt; and &lt;code&gt;k&lt;/code&gt; tags:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;&amp;lt;service pubkey&amp;gt;&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1739836800,
  &amp;#34;kind&amp;#34;: 30385,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;d&amp;#34;, &amp;#34;isbn:9780765382030&amp;#34;],
    [&amp;#34;k&amp;#34;, &amp;#34;isbn&amp;#34;],
    [&amp;#34;rank&amp;#34;, &amp;#34;94&amp;#34;],
    [&amp;#34;comment_cnt&amp;#34;, &amp;#34;67&amp;#34;],
    [&amp;#34;reaction_cnt&amp;#34;, &amp;#34;203&amp;#34;]
  ],
  &amp;#34;content&amp;#34;: &amp;#34;&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;&amp;lt;service key signature&amp;gt;&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Each assertion is a replaceable addressable event where the &lt;code&gt;d&lt;/code&gt; tag contains the subject: a pubkey, event ID, event address, or NIP-73 identifier. Service providers sign these events with their own keys, and clients evaluate them based on trust relationships.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Provider Discovery:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Users declare which assertion providers they trust by publishing kind 10040 events. Each entry specifies the assertion type with the provider pubkey and relay hint, plus optional algorithm variants:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;&amp;lt;user pubkey&amp;gt;&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1739836800,
  &amp;#34;kind&amp;#34;: 10040,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;30382:rank&amp;#34;, &amp;#34;4fd5e210...&amp;#34;, &amp;#34;wss://nip85.nostr.band&amp;#34;],
    [&amp;#34;30382:rank&amp;#34;, &amp;#34;3d842afe...&amp;#34;, &amp;#34;wss://nostr.wine&amp;#34;],
    [&amp;#34;30382:zap_amt_sent&amp;#34;, &amp;#34;4fd5e210...&amp;#34;, &amp;#34;wss://nip85.nostr.band&amp;#34;],
    [&amp;#34;30383:rank&amp;#34;, &amp;#34;4fd5e210...&amp;#34;, &amp;#34;wss://nip85.nostr.band&amp;#34;]
  ],
  &amp;#34;content&amp;#34;: &amp;#34;&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;&amp;lt;user signature&amp;gt;&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Users can encrypt the tag list in &lt;code&gt;.content&lt;/code&gt; using &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; to keep their provider preferences private. Clients build a provider list by checking which providers their followed accounts trust, creating a decentralized reputation layer for the assertion providers themselves.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security Model:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Providers must use different service keys for distinct algorithms, and a unique key per user when algorithms are personalized, preventing cross-correlation of queries across users. Each service key gets a kind 0 metadata event describing the algorithm&amp;#39;s behavior, giving users transparency into what they are trusting. Assertion events should only be updated when the underlying data actually changes, preventing unnecessary relay traffic and letting clients cache results with confidence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Current Adoption:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;NIP-85 formalizes a pattern already emerging informally. Primal&amp;#39;s cache server computes engagement metrics and Web of Trust scores. &lt;a href=&#34;https://gitlab.com/soapbox-pub/antiprimal&#34;&gt;Antiprimal&lt;/a&gt;, covered in &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-02-11-newsletter/#antiprimal-standards-compliant-gateway-to-primals-cache&#34;&gt;Newsletter #9&lt;/a&gt;, bridges these calculations to standard Nostr clients using NIP-85 event kinds. &lt;a href=&#34;https://nostr.band&#34;&gt;Nostr.band&lt;/a&gt; operates the &lt;code&gt;wss://nip85.nostr.band&lt;/code&gt; relay referenced in the spec&amp;#39;s own examples, serving assertion events for its search index data. On the client side, &lt;a href=&#34;https://github.com/vitorpamplona/amethyst&#34;&gt;Amethyst&lt;/a&gt; (authored by vitorpamplona, who also wrote this NIP) has experimental Trusted Assertions support in its &lt;code&gt;quartz&lt;/code&gt; library, parsing assertion events and service provider declarations. &lt;a href=&#34;https://vertexlab.io&#34;&gt;Vertex&lt;/a&gt; computes similar Web of Trust metrics but &lt;a href=&#34;https://vertexlab.io/blog/dvms_vs_nip_85/&#34;&gt;chose a different approach&lt;/a&gt;, using a direct API instead of NIP-85 events, citing the discovery problem and computational overhead of assertion-based architectures. With NIP-85, any client can consume assertions from any provider through a standard event format, and providers compete on accuracy while users choose whom to trust.&lt;/p&gt;

&lt;h2 id=&#34;nip-deep-dive-nip-52-calendar-events-2&#34;&gt;NIP Deep Dive: NIP-52 (Calendar Events)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/52.md&#34;&gt;NIP-52&lt;/a&gt; defines calendar events on Nostr, giving clients a standard way to represent and discover occurrences at specific moments or between moments. This week&amp;#39;s &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1752&#34;&gt;D tag merge&lt;/a&gt; added day-granularity indexing, completing a missing piece in the spec&amp;#39;s query infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Two Event Types:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;NIP-52 separates calendar events into two kinds based on temporal precision. Date-based events (kind 31922) represent all-day occurrences like holidays or multi-day festivals. They use ISO 8601 date strings in their &lt;code&gt;start&lt;/code&gt; and optional &lt;code&gt;end&lt;/code&gt; tags, with no time zone consideration:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;&amp;lt;event creator pubkey&amp;gt;&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1735689600,
  &amp;#34;kind&amp;#34;: 31922,
  &amp;#34;content&amp;#34;: &amp;#34;Annual celebration of Bitcoin&amp;#39;s genesis block&amp;#34;,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;d&amp;#34;, &amp;#34;bitcoin-independence-day-2026&amp;#34;],
    [&amp;#34;title&amp;#34;, &amp;#34;Bitcoin Independence Day&amp;#34;],
    [&amp;#34;start&amp;#34;, &amp;#34;2026-01-03&amp;#34;],
    [&amp;#34;end&amp;#34;, &amp;#34;2026-01-04&amp;#34;],
    [&amp;#34;location&amp;#34;, &amp;#34;Worldwide&amp;#34;],
    [&amp;#34;g&amp;#34;, &amp;#34;u4pruydqqv&amp;#34;],
    [&amp;#34;t&amp;#34;, &amp;#34;bitcoin&amp;#34;],
    [&amp;#34;p&amp;#34;, &amp;#34;&amp;lt;organizer-pubkey&amp;gt;&amp;#34;, &amp;#34;wss://relay.example.com&amp;#34;, &amp;#34;host&amp;#34;],
    [&amp;#34;r&amp;#34;, &amp;#34; https://bitcoinindependenceday.com&amp;#34;]
  ],
  &amp;#34;sig&amp;#34;: &amp;#34;&amp;lt;event creator signature&amp;gt;&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Time-based events (kind 31923) represent specific moments with Unix timestamps in their &lt;code&gt;start&lt;/code&gt; and optional &lt;code&gt;end&lt;/code&gt; tags, plus IANA time zone identifiers (&lt;code&gt;start_tzid&lt;/code&gt;, &lt;code&gt;end_tzid&lt;/code&gt;) for display. Both kinds are parameterized replaceable events, so organizers update details by publishing a new event with the same &lt;code&gt;d&lt;/code&gt; tag.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Calendars and RSVPs:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Kind 31924 events define calendars as collections, referencing events via &lt;code&gt;a&lt;/code&gt; tags that point to kind 31922 or 31923 events by their address coordinates:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;&amp;lt;calendar owner pubkey&amp;gt;&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1739836800,
  &amp;#34;kind&amp;#34;: 31924,
  &amp;#34;content&amp;#34;: &amp;#34;Nostr community events worldwide&amp;#34;,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;d&amp;#34;, &amp;#34;nostr-community-calendar&amp;#34;],
    [&amp;#34;title&amp;#34;, &amp;#34;Nostr Community Events&amp;#34;],
    [&amp;#34;a&amp;#34;, &amp;#34;31923:&amp;lt;organizer-pubkey&amp;gt;:nostr-meetup-2026&amp;#34;, &amp;#34;wss://relay.example.com&amp;#34;],
    [&amp;#34;a&amp;#34;, &amp;#34;31922:&amp;lt;organizer-pubkey&amp;gt;:bitcoin-independence-day-2026&amp;#34;]
  ],
  &amp;#34;sig&amp;#34;: &amp;#34;&amp;lt;calendar owner signature&amp;gt;&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Users can maintain multiple calendars (personal, work, community) and clients can subscribe to calendars from specific pubkeys. Calendar events can include an &lt;code&gt;a&lt;/code&gt; tag referencing a calendar to request inclusion, enabling collaborative calendar management where multiple users contribute events to calendars they do not own.&lt;/p&gt;

&lt;p&gt;RSVPs use kind 31925, where users publish their attendance status along with an optional free/busy indicator:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;&amp;lt;attendee pubkey&amp;gt;&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1739836800,
  &amp;#34;kind&amp;#34;: 31925,
  &amp;#34;content&amp;#34;: &amp;#34;Looking forward to it&amp;#34;,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;a&amp;#34;, &amp;#34;31923:&amp;lt;organizer-pubkey&amp;gt;:nostr-meetup-2026&amp;#34;, &amp;#34;wss://relay.example.com&amp;#34;],
    [&amp;#34;e&amp;#34;, &amp;#34;&amp;lt;kind 31923 event id&amp;gt;&amp;#34;, &amp;#34;wss://relay.example.com&amp;#34;],
    [&amp;#34;d&amp;#34;, &amp;#34;&amp;lt;unique-rsvp-id&amp;gt;&amp;#34;],
    [&amp;#34;status&amp;#34;, &amp;#34;accepted&amp;#34;],
    [&amp;#34;fb&amp;#34;, &amp;#34;busy&amp;#34;],
    [&amp;#34;p&amp;#34;, &amp;#34;&amp;lt;organizer-pubkey&amp;gt;&amp;#34;, &amp;#34;wss://relay.example.com&amp;#34;]
  ],
  &amp;#34;sig&amp;#34;: &amp;#34;&amp;lt;attendee signature&amp;gt;&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Valid &lt;code&gt;status&lt;/code&gt; values are &amp;#34;accepted&amp;#34;, &amp;#34;declined&amp;#34;, &amp;#34;tentative&amp;#34;, and the optional &lt;code&gt;fb&lt;/code&gt; tag marks the user as free or busy for that period. RSVP events reference the calendar event&amp;#39;s &lt;code&gt;a&lt;/code&gt; tag and carry the organizer&amp;#39;s &lt;code&gt;p&lt;/code&gt; tag, so the organizer&amp;#39;s client can aggregate responses across relays.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The D Tag Addition:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before this week&amp;#39;s merge, clients querying for events in a date range had to fetch all events from a pubkey or calendar and filter client-side. The new required &lt;code&gt;D&lt;/code&gt; tag on time-based events (kind 31923) contains a day-granularity Unix timestamp calculated as &lt;code&gt;floor(unix_seconds / 86400)&lt;/code&gt;. Multi-day events carry multiple &lt;code&gt;D&lt;/code&gt; tags, one per day. Relays can now index events by day and respond to filtered queries efficiently, turning what was a client-side filtering problem into a relay-side index lookup.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;&amp;lt;event creator pubkey&amp;gt;&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1739836800,
  &amp;#34;kind&amp;#34;: 31923,
  &amp;#34;content&amp;#34;: &amp;#34;Monthly meetup for Nostr developers in Austin&amp;#34;,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;d&amp;#34;, &amp;#34;nostr-meetup-2026&amp;#34;],
    [&amp;#34;title&amp;#34;, &amp;#34;Nostr Developer Meetup&amp;#34;],
    [&amp;#34;summary&amp;#34;, &amp;#34;Talks and demos from local Nostr builders&amp;#34;],
    [&amp;#34;image&amp;#34;, &amp;#34; https://example.com/meetup-banner.jpg&amp;#34;],
    [&amp;#34;start&amp;#34;, &amp;#34;1740067200&amp;#34;],
    [&amp;#34;end&amp;#34;, &amp;#34;1740078000&amp;#34;],
    [&amp;#34;start_tzid&amp;#34;, &amp;#34;America/New_York&amp;#34;],
    [&amp;#34;end_tzid&amp;#34;, &amp;#34;America/New_York&amp;#34;],
    [&amp;#34;D&amp;#34;, &amp;#34;20139&amp;#34;],
    [&amp;#34;location&amp;#34;, &amp;#34;Bitcoin Commons, Austin TX&amp;#34;],
    [&amp;#34;g&amp;#34;, &amp;#34;9v6knb2pg&amp;#34;],
    [&amp;#34;p&amp;#34;, &amp;#34;&amp;lt;organizer-pubkey&amp;gt;&amp;#34;, &amp;#34;wss://relay.example.com&amp;#34;, &amp;#34;host&amp;#34;],
    [&amp;#34;p&amp;#34;, &amp;#34;&amp;lt;speaker-pubkey&amp;gt;&amp;#34;, &amp;#34;wss://relay.example.com&amp;#34;, &amp;#34;speaker&amp;#34;],
    [&amp;#34;t&amp;#34;, &amp;#34;nostr&amp;#34;],
    [&amp;#34;t&amp;#34;, &amp;#34;meetup&amp;#34;],
    [&amp;#34;r&amp;#34;, &amp;#34; https://bitcoincommons.com&amp;#34;]
  ],
  &amp;#34;sig&amp;#34;: &amp;#34;&amp;lt;event creator signature&amp;gt;&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The &lt;code&gt;D&lt;/code&gt; value &lt;code&gt;20139&lt;/code&gt; equals &lt;code&gt;floor(1740067200 / 86400)&lt;/code&gt;, placing this event on February 20, 2025. Clients querying for &amp;#34;all events this week&amp;#34; send a filter with the corresponding &lt;code&gt;D&lt;/code&gt; range, and relays return only matching events.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Design Decisions:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;NIP-52 intentionally omits recurring events. The spec leaves recurrence rules (RRULE from iCalendar) out entirely, delegating that complexity to clients. An organizer publishes individual events for each occurrence, keeping the relay-side data model simple. Participant tags carry optional roles (&amp;#34;host&amp;#34;, &amp;#34;speaker&amp;#34;, &amp;#34;attendee&amp;#34;), and location tags can include geohash &lt;code&gt;g&lt;/code&gt; tags for spatial queries alongside human-readable addresses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implementations:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/zmeyer44/flockstr&#34;&gt;Flockstr&lt;/a&gt; is the primary calendar client built on NIP-52. &lt;a href=&#34;https://gitea.coracle.social/coracle/coracle&#34;&gt;Coracle&lt;/a&gt; displays calendar events in its social feed. The &lt;code&gt;D&lt;/code&gt; tag addition this week enables relay-side temporal indexing that both clients can use to reduce bandwidth when querying for events in a specific date range.&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;That&amp;#39;s it for this week. Building something or have news to share? Want us to cover your project? Reach out via NIP-17 DM or find us on Nostr.&lt;/p&gt;
 &lt;/blockquote&gt;
    </content>
    <updated>2026-02-18T15:17:35Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqspnsuut993axr495su29ax7ufespc0kas9faml255vjqr3tqcaysgzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq8ap7vw</id>
    
      <title type="html">Nostr Compass Podcast #8 rust-nostr ships a massive SDK overhaul ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqspnsuut993axr495su29ax7ufespc0kas9faml255vjqr3tqcaysgzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq8ap7vw" />
    <content type="html">
      In reply to &lt;a href=&#39;/naddr1qq0k2urfwdhkgefdxymnwvf3x5mrjwpexcenjtt2xy6nqdpndq6nwq3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqp6kv69ggjr&#39;&gt;naddr1qq…ggjr&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;Nostr Compass Podcast #8&lt;br/&gt;&lt;br/&gt;rust-nostr ships a massive SDK overhaul  &lt;br/&gt;Nostria 3.0 delivers modern UI and list sync  &lt;br/&gt;Frostr hits iOS, Vector hits SIMD speeds  &lt;br/&gt;And we explore fresh NIP proposals  &lt;br/&gt;&lt;br/&gt;&lt;video controls width=&#34;100%&#34; class=&#34;max-h-[90vh] bg-neutral-300 dark:bg-zinc-700&#34;&gt;&lt;source src=&#34;https://blossom.primal.net/ad85e46e66cad4d6e672e63573533cd67bbaea4206d8a4a6e5242af8bb53ca43.ogg&#34;&gt;&lt;/video&gt; &lt;br/&gt;&lt;br/&gt;#podcast #nostr
    </content>
    <updated>2026-02-15T12:15:13Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs2zn829ht5gkzqu5gkc2s5ad8stjwkxj4fmpl4tvm35qpqspx9dnqzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq6ar37f</id>
    
      <title type="html">Nostr Compass #9 The next edition of the newsletter is out, ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs2zn829ht5gkzqu5gkc2s5ad8stjwkxj4fmpl4tvm35qpqspx9dnqzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq6ar37f" />
    <content type="html">
      Nostr Compass #9&lt;br/&gt;&lt;br/&gt;The next edition of the newsletter is out, covering many development updates across Mostro beta: P2P Bitcoin trading on mobile after 3 years dev. Zapstore 1.0: Permissionless Android app store is stable. Antiprimal: Bridges Primal cache to standard NIPs&lt;br/&gt;NIP-45: HyperLogLog counting with 256 bytes &lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/naddr1qqgxvd33xpskyvn9v3jryvfcxycxvq3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqp65wl8g6ug&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;naddr1qq…g6ug&lt;/a&gt;&lt;/span&gt; &lt;/div&gt; &lt;p&gt;Welcome back to Nostr Compass, your weekly guide to Nostr.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This week:&lt;/strong&gt; Mostro ships its first public beta after three years of development, bringing P2P Bitcoin trading to mobile via Nostr. OpenSats awards its sixteenth wave of Bitcoin grants, with Minibits Wallet receiving a renewal for its Nostr-integrated Cashu wallet. &lt;strong&gt;Zapstore reaches 1.0 stable release&lt;/strong&gt;, marking the maturation of the decentralized Android app store. Coracle 0.6.29 adds topics and highlight commenting. Igloo Desktop v1.0.3 ships major security hardening for Frostr threshold signing. Amber v4.1.2-pre1 migrates to Flow architecture. Angor reaches v0.2.5 with a revamped funding UI and NIP-96 image server configuration. NostrPress launches as a tool that converts Nostr profiles into static blogs. Antiprimal ships a standards-compliant gateway that bridges Primal&amp;#39;s proprietary cache server to standard Nostr NIPs. Primal Android merges 18 PRs expanding NWC infrastructure with dual wallet support, audit logging, and the &lt;code&gt;lookup_invoice&lt;/code&gt; method. diVine ships API-first video feeds. The Marmot TypeScript SDK spins out its reference chat app into a standalone repo and begins migrating to ts-mls v2. The NIPs repository merges HyperLogLog approximate counting for NIP-45 and extracts identity tags from kind 0. A wave of proposals from vitorpamplona begins systematically slimming kind 0 metadata events. New protocol proposals include Nostr Relay Connect for NAT traversal and Nostr Web Tokens for signed web claims. This week&amp;#39;s deep dives cover NIP-45&amp;#39;s new HyperLogLog approximate counting for cross-relay event metrics and NIP-96&amp;#39;s HTTP file storage protocol, now deprecated in favor of Blossom, as projects navigate the transition between the two media standards.&lt;/p&gt;

&lt;h2 id=&#34;news-23&#34;&gt;News&lt;/h2&gt;

&lt;h3 id=&#34;mostro-ships-first-public-beta-2&#34;&gt;Mostro Ships First Public Beta&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/MostroP2P/mostro&#34;&gt;Mostro&lt;/a&gt;, the peer-to-peer Bitcoin exchange built on Nostr, released its &lt;a href=&#34;https://github.com/MostroP2P/mobile/releases/tag/v1.1.0&#34;&gt;mobile app v1.1.0&lt;/a&gt;, the project&amp;#39;s first public beta after three years of development. The app enables users to trade Bitcoin directly using Nostr for order coordination, with Lightning for settlement and no custodial intermediary.&lt;/p&gt;

&lt;p&gt;The release introduces push notifications with improved background reliability on Android, an optional logging system that lets users capture and share diagnostic data when issues arise, smoother relay updates using additive initialization, and Phase 2 UI refinements with internationalization support. The app is available on &lt;a href=&#34;https://zapstore.dev&#34;&gt;Zapstore&lt;/a&gt; and as a direct &lt;a href=&#34;https://github.com/MostroP2P/mobile/releases/tag/v1.1.0&#34;&gt;GitHub download&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Mostro joins Shopstr and Plebeian Market as a Nostr-native commerce application, with the distinction that it focuses on fiat-to-Bitcoin exchange coordination. The underlying &lt;a href=&#34;https://github.com/MostroP2P/mostro&#34;&gt;Mostro daemon&lt;/a&gt; handles order matching and dispute resolution through Nostr relays.&lt;/p&gt;

&lt;h3 id=&#34;opensats-sixteenth-wave-of-bitcoin-grants-2&#34;&gt;OpenSats Sixteenth Wave of Bitcoin Grants&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://opensats.org/blog/sixteenth-wave-of-bitcoin-grants&#34;&gt;OpenSats&lt;/a&gt; announced grants to 17 open-source projects. The Nostr-relevant highlight: &lt;a href=&#34;https://github.com/minibits-cash/minibits_wallet&#34;&gt;Minibits Wallet&lt;/a&gt;, the Android Cashu wallet with NIP-60 wallet event support and nutzap integration, received a renewal grant. Minibits uses Nostr events to store ecash token state, making wallet backups portable across devices through relay sync.&lt;/p&gt;

&lt;h3 id=&#34;nostrpress-nostr-profile-to-static-blog-2&#34;&gt;NostrPress: Nostr Profile to Static Blog&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/besoeasy/NostrPress&#34;&gt;NostrPress&lt;/a&gt; (&lt;a href=&#34;https://blog.besoeasy.com&#34;&gt;blog.besoeasy.com&lt;/a&gt;) is a new tool that converts a Nostr profile into a fully static blog deployable anywhere. Users publish articles on Nostr through any client, and NostrPress generates a standalone website from those events, complete with local media hosting and RSS feeds.&lt;/p&gt;

&lt;p&gt;Built with Nunjucks templating and JavaScript, NostrPress produces sites with zero platform lock-in. The generated output is plain HTML/CSS that can be hosted on any static file server, GitHub Pages, Netlify, or a personal VPS. The tool joins &lt;a href=&#34;https://github.com/nostrband/nostrsite&#34;&gt;Npub.pro&lt;/a&gt; and &lt;a href=&#34;https://github.com/servus-social/servus&#34;&gt;Servus&lt;/a&gt; as options for turning Nostr content into traditional websites.&lt;/p&gt;

&lt;h3 id=&#34;antiprimal-standards-compliant-gateway-to-primal-s-cache-2&#34;&gt;Antiprimal: Standards-Compliant Gateway to Primal&amp;#39;s Cache&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://gitlab.com/soapbox-pub/antiprimal&#34;&gt;antiprimal&lt;/a&gt; (&lt;a href=&#34;https://antiprimal.net&#34;&gt;antiprimal.net&lt;/a&gt;), a new project from Alex Gleason and the Soapbox team, is a WebSocket gateway that bridges Primal&amp;#39;s proprietary cache server to standard Nostr protocol messages. Primal offers features like event statistics, content search, and Web of Trust calculations through &lt;code&gt;wss://cache.primal.net/v1&lt;/code&gt;, but accessing these requires a proprietary message format with a non-standard &lt;code&gt;cache&lt;/code&gt; field that standard Nostr clients cannot use. Antiprimal translates standard NIP requests into Primal&amp;#39;s format and converts responses back.&lt;/p&gt;

&lt;p&gt;The gateway supports NIP-45 COUNT queries (reactions, replies, reposts, zap counts, follower counts), NIP-50 search, NIP-11 relay information, and NIP-85 Trusted Assertions for Primal&amp;#39;s precomputed Web of Trust data. A companion bot publishes NIP-85 kind 30382 (user statistics) and kind 30383 (event engagement) events to configurable relays. The project is built with TypeScript on Bun and uses the Nostrify library. Created February 6, it has 53 commits in its first three days of development and is live at antiprimal.net.&lt;/p&gt;

&lt;h3 id=&#34;ikaros-ai-agent-messaging-gateway-for-signal-and-nostr-2&#34;&gt;Ikaros: AI Agent Messaging Gateway for Signal and Nostr&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://gitlab.com/soapbox-pub/ikaros&#34;&gt;Ikaros&lt;/a&gt;, a new project from the Soapbox team, is a messaging gateway that enables AI agents to communicate through both Signal and Nostr encrypted DMs. The bridge uses the &lt;a href=&#34;https://agentclientprotocol.org&#34;&gt;Agent Client Protocol&lt;/a&gt; (ACP) to connect any ACP-compatible AI coding assistant to real messaging networks. Three pull requests constitute the project&amp;#39;s initial build this week.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://gitlab.com/soapbox-pub/ikaros/-/merge_requests/1&#34;&gt;PR #1&lt;/a&gt; implements a complete NIP-04 encrypted DM adapter with send/receive support, response buffering with explicit flush on completion, &lt;code&gt;nsec&lt;/code&gt; and hex private key formats, multi-relay publishing with automatic reconnection, and an interactive setup wizard. The adapter uses nostr-tools v2.23.0 and updates the ACP SDK to v0.14.1.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://gitlab.com/soapbox-pub/ikaros/-/merge_requests/2&#34;&gt;PR #2&lt;/a&gt; fixes a silent message drop caused by a session update race condition: incoming notifications that arrived before a session was registered in the map were silently lost, and the fix buffers those notifications for replay once registration completes. &lt;a href=&#34;https://gitlab.com/soapbox-pub/ikaros/-/merge_requests/3&#34;&gt;PR #3&lt;/a&gt; adds Signal user and group name/UUID metadata to agent interactions, so the AI agent knows who it is talking to and in which group. The project opens a new design space: AI agents addressable via Nostr DMs that can also be reached from Signal, or vice versa.&lt;/p&gt;

&lt;h3 id=&#34;kind-0-slimming-campaign-2&#34;&gt;Kind 0 Slimming Campaign&lt;/h3&gt;

&lt;p&gt;vitorpamplona opened a series of PRs this week proposing systematic extraction of data from kind 0 (user metadata) events into dedicated event kinds. The campaign addresses a growing problem: kind 0 events have accumulated fields over time that most clients do not use, inflating the size of every profile fetch.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2216&#34;&gt;PR #2216&lt;/a&gt; (merged) moves identity tags (&lt;code&gt;i&lt;/code&gt; tags) from kind 0 to a new kind 10011, since adoption of these tags has been minimal. &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2213&#34;&gt;PR #2213&lt;/a&gt; proposes moving NIP-05 verification to kind 10008, which would enable users to have multiple NIP-05 identifiers and allow filtering events by NIP-05 address. &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2217&#34;&gt;PR #2217&lt;/a&gt; proposes extracting Lightning addresses (lud06/lud16) to a new kind, stopping all kind 0 users from carrying zap-related fields that only matter to clients with Lightning integration.&lt;/p&gt;

&lt;p&gt;The proposals have revived discussion on the broader question of kind 0 structure, including &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1770&#34;&gt;PR #1770&lt;/a&gt;, the long-standing proposal to replace stringified JSON in kind 0 content with structured tags.&lt;/p&gt;

&lt;h3 id=&#34;nip-70-relay-support-critical-for-encrypted-messaging-security-2&#34;&gt;NIP-70 Relay Support Critical for Encrypted Messaging Security&lt;/h3&gt;

&lt;p&gt;The Marmot protocol&amp;#39;s White Noise implementation has &lt;a href=&#34;https://blog.jgmontoya.com/2026/02/10/nip70-relay-status.html&#34;&gt;identified a critical gap&lt;/a&gt; in relay support for &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/70.md&#34;&gt;NIP-70&lt;/a&gt; (Protected Events) and NIP-42 (Authentication). Testing revealed that major public relays including Damus, Primal, and nos.lol reject protected events outright with &lt;code&gt;blocked: event marked as protected&lt;/code&gt; errors instead of initiating the required authentication challenge.&lt;/p&gt;

&lt;p&gt;This breaks a key security feature: NIP-70 enables secure deletion of spent MLS KeyPackages, preventing &amp;#34;harvest now, decrypt later&amp;#34; attacks. Without relay support, encrypted messaging protocols cannot protect users from future key compromise. White Noise has disabled NIP-70 by default in response, keeping an optional flag for users with supportive relays.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Call to action for relay operators:&lt;/strong&gt; Implement the complete NIP-42 authentication flow. When receiving protected events, challenge clients to prove ownership, then accept validated writes. Rejecting protected events without authentication breaks protocol security guarantees that encrypted messaging applications depend on.&lt;/p&gt;

&lt;h2 id=&#34;releases-29&#34;&gt;Releases&lt;/h2&gt;

&lt;h3 id=&#34;coracle-0-6-29-2&#34;&gt;Coracle 0.6.29&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/coracle-social/coracle&#34;&gt;Coracle&lt;/a&gt; (&lt;a href=&#34;https://coracle.social&#34;&gt;coracle.social&lt;/a&gt;), hodlbod&amp;#39;s web client, shipped &lt;a href=&#34;https://github.com/coracle-social/coracle/releases/tag/0.6.29&#34;&gt;0.6.29&lt;/a&gt;. The release adds display of topics and comments on kind 9802 highlights. A new list navigation item gives quick access to user-curated lists from the main UI. Under the hood, Coracle upgraded to a new version of Welshman, the shared Nostr library that powers Coracle&amp;#39;s relay management and event handling. The default relay list was refreshed, and Glitchtip error tracking was removed from the codebase.&lt;/p&gt;

&lt;h3 id=&#34;igloo-desktop-v1-0-3-2&#34;&gt;Igloo Desktop v1.0.3&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/FROSTR-ORG/igloo-desktop&#34;&gt;Igloo Desktop&lt;/a&gt;, the FROST-based threshold signer and key management application, shipped &lt;a href=&#34;https://github.com/FROSTR-ORG/igloo-desktop/releases/tag/v1.0.3&#34;&gt;v1.0.3&lt;/a&gt; with extensive security hardening. The release introduces IPC validation, Electron isolation, and SSRF-aware relay checks for defense against server-side request forgery. A new onboarding and share-import flow simplifies key distribution, relay planning now includes normalization and priority merging, and a preload-based Electron API architecture improves the security boundary between the renderer and main process. A signer keep-alive system maintains threshold signing session stability, and recovery UX improvements reduce the friction of key restoration.&lt;/p&gt;

&lt;h3 id=&#34;amber-v4-1-2-pre1-2&#34;&gt;Amber v4.1.2-pre1&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/greenart7c3/Amber&#34;&gt;Amber&lt;/a&gt;, the Android event signer, released &lt;a href=&#34;https://github.com/greenart7c3/Amber/releases/tag/v4.1.2-pre1&#34;&gt;v4.1.2-pre1&lt;/a&gt; fixing the missing relay trust score display introduced in v4.1.1, resolving JSON parsing issues for non-Nostr encrypt/decrypt requests, and migrating the account model from LiveData to Flow for more predictable state management. The release switches bunker secrets to full UUIDs and upgrades to Gradle plugin 9.&lt;/p&gt;

&lt;h3 id=&#34;mostro-mobile-v1-1-0-and-daemon-v0-16-1-2&#34;&gt;Mostro Mobile v1.1.0 and Daemon v0.16.1&lt;/h3&gt;

&lt;p&gt;See the News section above for full coverage of the mobile release. On the server side, the &lt;a href=&#34;https://github.com/MostroP2P/mostro&#34;&gt;Mostro daemon&lt;/a&gt; shipped &lt;a href=&#34;https://github.com/MostroP2P/mostro/releases/tag/v0.16.1&#34;&gt;v0.16.1&lt;/a&gt;, adding automatic publishing of NIP-01 kind 0 metadata on startup (&lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/575&#34;&gt;PR #575&lt;/a&gt;), so the daemon now announces its identity to the network when it comes online. The release also fixes dev fee calculation documentation (&lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/571&#34;&gt;PR #571&lt;/a&gt;).&lt;/p&gt;

&lt;h3 id=&#34;angor-v0-2-5-2&#34;&gt;Angor v0.2.5&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/block-core/angor&#34;&gt;Angor&lt;/a&gt; (&lt;a href=&#34;https://angor.io&#34;&gt;angor.io&lt;/a&gt;), the decentralized P2P funding protocol built on Bitcoin and Nostr, shipped &lt;a href=&#34;https://github.com/block-core/angor/releases/tag/v0.2.5&#34;&gt;v0.2.5&lt;/a&gt; with three merged PRs. &lt;a href=&#34;https://github.com/block-core/angor/pull/649&#34;&gt;PR #649&lt;/a&gt; redesigns the Funds management section (V2), replacing the previous layout with a new interface for tracking individual UTXOs and investment positions. &lt;a href=&#34;https://github.com/block-core/angor/pull/651&#34;&gt;PR #651&lt;/a&gt; overhauls the InvoiceView with updated button styles, closeable dialogs, a new &amp;#34;Copy Address&amp;#34; command, cancellation support for address monitoring, and improved investment flow handling. &lt;a href=&#34;https://github.com/block-core/angor/pull/652&#34;&gt;PR #652&lt;/a&gt; adds configurable NIP-96 image servers in settings, letting users choose which media upload endpoint handles their project images and documentation. &lt;a href=&#34;https://github.com/block-core/angor/releases/tag/v0.2.4&#34;&gt;v0.2.4&lt;/a&gt; shipped the previous week.&lt;/p&gt;

&lt;h3 id=&#34;ridestr-v0-2-2-and-v0-2-3-2&#34;&gt;Ridestr v0.2.2 and v0.2.3&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/variablefate/ridestr&#34;&gt;Ridestr&lt;/a&gt;, the decentralized rideshare platform, continued rapid iteration with &lt;a href=&#34;https://github.com/variablefate/ridestr/releases/tag/v0.2.2&#34;&gt;v0.2.2&lt;/a&gt; (Bridge Payment Hotfix) and &lt;a href=&#34;https://github.com/variablefate/ridestr/releases/tag/v0.2.3&#34;&gt;v0.2.3&lt;/a&gt; following the v0.2.0 &amp;#34;RoadFlare Release.&amp;#34; The v0.2.2 hotfix addresses a bug where cross-mint Cashu bridge payments were auto-canceling rides while the payment was still processing or would eventually succeed, preventing premature ride cancellation on slower settlements. The release also fixes UI flickering and broken touch-hitboxes on the &amp;#34;my location&amp;#34; button. v0.2.3 ships additional bug fixes. Both releases include separate APKs for Ridestr (rider app) and Drivestr (driver app).&lt;/p&gt;

&lt;h3 id=&#34;nostr-php-1-9-4-2&#34;&gt;Nostr PHP 1.9.4&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostrver-se/nostr-php&#34;&gt;Nostr PHP&lt;/a&gt; (&lt;a href=&#34;https://nostr-php.dev&#34;&gt;nostr-php.dev&lt;/a&gt;), the PHP helper library for the Nostr protocol, shipped &lt;a href=&#34;https://github.com/nostrver-se/nostr-php/releases/tag/1.9.4&#34;&gt;1.9.4&lt;/a&gt; adding a configurable &lt;code&gt;timeout&lt;/code&gt; property to the request class (&lt;a href=&#34;https://github.com/nostrver-se/nostr-php/pull/106&#34;&gt;PR #106&lt;/a&gt;). This lets developers set custom timeout durations for relay connections and message requests, preventing indefinite hangs when a relay is unresponsive or slow to reply.&lt;/p&gt;

&lt;h3 id=&#34;zapstore-v1-0-0-2&#34;&gt;Zapstore v1.0.0&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/zapstore/zapstore/releases/tag/1.0.0&#34;&gt;Zapstore&lt;/a&gt; (&lt;a href=&#34;https://zapstore.dev&#34;&gt;zapstore.dev&lt;/a&gt;), the permissionless Android app store built on Nostr, &lt;strong&gt;reached its stable 1.0 release milestone&lt;/strong&gt; this week after months of release candidates.&lt;/p&gt;

&lt;p&gt;The 1.0 release includes critical stability improvements: install button state handling that ensures Delete appears immediately after installation completes, user-friendly error messages with expandable technical details, and a &amp;#34;Report issue&amp;#34; button that sends encrypted DMs via Nostr using ephemeral keys. The release also ships a new updates screen with polling and batch tracking, better download watchdog for stalled transfers, dynamic concurrent download limits based on device performance, more frequent installed package syncing, and improved version comparison logic. The team fixed a critical flutter_secure_storage issue and enhanced package manager handling of edge cases.&lt;/p&gt;

&lt;p&gt;This milestone represents the maturation of Nostr&amp;#39;s first dedicated app distribution platform, enabling developers to publish Android applications directly to users without centralized app store gatekeeping.&lt;/p&gt;

&lt;h3 id=&#34;zsp-v0-3-1-2&#34;&gt;ZSP v0.3.1&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/zapstore/zsp&#34;&gt;ZSP&lt;/a&gt;, the Go CLI tool from the Zapstore team that replaces Zapstore&amp;#39;s previous publishing tooling for signing and uploading Android apps to Nostr relays, released &lt;a href=&#34;https://github.com/zapstore/zsp/releases/tag/v0.3.1&#34;&gt;v0.3.1&lt;/a&gt;. ZSP handles APK acquisition from GitHub, GitLab, Codeberg, F-Droid, or local files, then parses metadata, signs Nostr events (via private key, NIP-46 bunker, or NIP-07 browser extension), and uploads artifacts to Blossom servers. This release adds a full offline mode for keystore linking without a network connection, &lt;code&gt;Content-Digest&lt;/code&gt; headers on Blossom uploads for protocol compliance, fixed arm64-v8a APK detection from F-Droid repositories, GitLab trailing query parameter fixes, and full &lt;code&gt;.env&lt;/code&gt; file support for configuration.&lt;/p&gt;

&lt;h3 id=&#34;damus-ios-1-17-2&#34;&gt;Damus iOS 1.17&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/damus-io/damus&#34;&gt;Damus&lt;/a&gt;, the iOS Nostr client, bumped to version 1.17 (&lt;a href=&#34;https://github.com/damus-io/damus/pull/3606&#34;&gt;PR #3606&lt;/a&gt;). The release fixes a RelayPool issue where connections would close after ephemeral lease release (&lt;a href=&#34;https://github.com/damus-io/damus/pull/3605&#34;&gt;PR #3605&lt;/a&gt;), which could cause subscriptions to drop unexpectedly. It also resolves a bug where the favorites timeline would not display events when switching between tabs (&lt;a href=&#34;https://github.com/damus-io/damus/pull/3603&#34;&gt;PR #3603&lt;/a&gt;).&lt;/p&gt;

&lt;h3 id=&#34;nak-v0-18-3-2&#34;&gt;nak v0.18.3&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/fiatjaf/nak&#34;&gt;nak&lt;/a&gt;, the Nostr army knife CLI, shipped &lt;a href=&#34;https://github.com/fiatjaf/nak/releases/tag/v0.18.3&#34;&gt;v0.18.3&lt;/a&gt; with three stability fixes: preventing a panic when AUTH challenge tags are nil or too short, checking dateparser errors before using the parsed value, and handling Cashu mint URLs that lack a &lt;code&gt;://&lt;/code&gt; separator.&lt;/p&gt;

&lt;h3 id=&#34;mi-browser-based-local-relay-2&#34;&gt;Mi: Browser-Based Local Relay&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://git.shakespeare.diy/npub1scvyzz02ayma34hesz62pdrd5nhsmxp74hjq8msmfs9khh3r3drsnw68d8/mi.git&#34;&gt;Mi&lt;/a&gt; (&lt;a href=&#34;https://mi.shakespeare.wtf&#34;&gt;mi.shakespeare.wtf&lt;/a&gt;), a new Shakespeare MiniApp, is a browser-based local relay that archives a user&amp;#39;s Nostr events in IndexedDB. Mi fetches profiles (kind 0), contact lists (kind 3), relay lists (kind 10002), and wallet events from connected relays and stores them locally, giving users offline access to their own data. Built with React and nostr-tools 2.15.0.&lt;/p&gt;

&lt;h3 id=&#34;agora-v1-0-2-2&#34;&gt;Agora v1.0.2&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://gitlab.com/soapbox-pub/agora&#34;&gt;Agora&lt;/a&gt; (&lt;a href=&#34;https://agora.spot&#34;&gt;agora.spot&lt;/a&gt;), a decentralized activism and fundraising platform from the Soapbox team, shipped &lt;a href=&#34;https://gitlab.com/soapbox-pub/agora/-/releases/v1.0.2&#34;&gt;v1.0.2&lt;/a&gt; with an Android APK available for direct install. This is the first Compass mention of Agora, which launched on January 17 with a mission statement: &amp;#34;Join the global movement for freedom. Send support to activists on the ground internationally and take part in local actions.&amp;#34;&lt;/p&gt;

&lt;p&gt;The platform centers on a world map where users browse by country, create location-tagged &amp;#34;actions&amp;#34; (protests, campaigns, community organizing), and discuss them through threaded comments. All content propagates through Nostr relays, so no central server can be taken offline to silence coordination. Agora supports multiple languages with CI-enforced translation parity, integrates Blossom media servers for uploads, and includes search, hashtag browsing with global/regional toggle, user profiles, and reaction systems. The v1.0.2 release is the current Android build, available as a direct APK download.&lt;/p&gt;

&lt;h3 id=&#34;xonos-v0-1-6-2&#34;&gt;xonos v0.1.6&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://codeberg.org/xonos/xonos&#34;&gt;xonos&lt;/a&gt;, the experimental 3D Nostr client built with the Bevy game engine, shipped &lt;a href=&#34;https://codeberg.org/xonos/xonos/releases/tag/v0.1.6&#34;&gt;v0.1.6&lt;/a&gt;. xonos renders Nostr events in a 3D spatial environment with text-to-speech capabilities, exploring how social protocol data might work outside of conventional 2D interfaces.&lt;/p&gt;

&lt;h2 id=&#34;project-updates-20&#34;&gt;Project Updates&lt;/h2&gt;

&lt;h3 id=&#34;primal-android-expands-nwc-infrastructure-2&#34;&gt;Primal Android Expands NWC Infrastructure&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app&#34;&gt;Primal Android&lt;/a&gt; merged 18 PRs this week, continuing the NWC buildout. &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/883&#34;&gt;PR #883&lt;/a&gt; adds support for NWC connections across both wallets (Spark and external), and &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/879&#34;&gt;PR #879&lt;/a&gt; implements the &lt;code&gt;lookup_invoice&lt;/code&gt; NWC method for checking payment status.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/880&#34;&gt;PR #880&lt;/a&gt; adds NWC request-response audit logging for debugging wallet interactions. &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/877&#34;&gt;PR #877&lt;/a&gt; adds multi-account support to &lt;code&gt;PrimalNwcService&lt;/code&gt;, enabling users with multiple profiles to maintain separate wallet connections. &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/882&#34;&gt;PR #882&lt;/a&gt; implements periodic cleanup of expired budget holds, preventing stale payment reservations from blocking wallet operations.&lt;/p&gt;

&lt;p&gt;UI work includes wallet upgrade screen redesigns (&lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/889&#34;&gt;PR #889&lt;/a&gt;), a wallet upgrade FAQ (&lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/885&#34;&gt;PR #885&lt;/a&gt;), Lightning address setting during onboarding (&lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/888&#34;&gt;PR #888&lt;/a&gt;), and a fix for zap transactions appearing as regular payments for non-Lightning types (&lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/887&#34;&gt;PR #887&lt;/a&gt;).&lt;/p&gt;

&lt;h3 id=&#34;divine-ships-api-first-video-feeds-2&#34;&gt;diVine Ships API-First Video Feeds&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/divinevideo/divine-mobile&#34;&gt;diVine&lt;/a&gt;, the short-form video client, merged 19 PRs this week, shifting toward an API-first architecture. &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/1468&#34;&gt;PR #1468&lt;/a&gt; introduces API-first video feeds, and &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/1466&#34;&gt;PR #1466&lt;/a&gt; adds trending, recent, and home API endpoints. &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/1433&#34;&gt;PR #1433&lt;/a&gt; indexes specific video controllers for efficient feed rendering.&lt;/p&gt;

&lt;p&gt;Profile handling improved with &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/1440&#34;&gt;PR #1440&lt;/a&gt; implementing a cache-plus-fresh pattern for viewing other profiles, reducing load times while ensuring data freshness. The team also shipped notification fixes (&lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/1437&#34;&gt;PR #1437&lt;/a&gt;), comment flow refactoring (&lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/1431&#34;&gt;PR #1431&lt;/a&gt;), and tab swiping on the Notifications screen (&lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/1388&#34;&gt;PR #1388&lt;/a&gt;).&lt;/p&gt;

&lt;h3 id=&#34;white-noise-keyring-unification-and-user-search-2&#34;&gt;White Noise: Keyring Unification and User Search&lt;/h3&gt;

&lt;p&gt;The &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs&#34;&gt;White Noise&lt;/a&gt; backend for the Marmot protocol merged 4 PRs this week. Two PRs improved keyring handling: &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/468&#34;&gt;PR #468&lt;/a&gt; makes the keyring service identifier configurable via &lt;code&gt;WhitenoiseConfig&lt;/code&gt;, and &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/475&#34;&gt;PR #475&lt;/a&gt; unifies the implementation on a single &lt;code&gt;keyring-core&lt;/code&gt; crate with platform-native stores, replacing fragmented platform-specific code. Separately, &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/470&#34;&gt;PR #470&lt;/a&gt; adds user search functionality.&lt;/p&gt;

&lt;h3 id=&#34;marmot-ts-extracts-reference-chat-app-2&#34;&gt;Marmot TS Extracts Reference Chat App&lt;/h3&gt;

&lt;p&gt;The Marmot TypeScript SDK (&lt;a href=&#34;https://github.com/marmot-protocol/marmot-ts&#34;&gt;marmot-ts&lt;/a&gt;) merged &lt;a href=&#34;https://github.com/marmot-protocol/marmot-ts/pull/40&#34;&gt;PR #40&lt;/a&gt;, removing the built-in reference chat application and spinning it out into a standalone repo: &lt;a href=&#34;https://github.com/marmot-protocol/marmots-web-chat&#34;&gt;marmots-web-chat&lt;/a&gt;. The new repo, created February 6, is a reference implementation of the Marmot TypeScript SDK with its own CI pipeline, tabbed chat view, and independent build system. The separation lets the SDK focus on library concerns while the chat app iterates on UX independently.&lt;/p&gt;

&lt;p&gt;An open PR (&lt;a href=&#34;https://github.com/marmot-protocol/marmot-ts/pull/41&#34;&gt;#41&lt;/a&gt;) migrates marmot-ts to ts-mls v2.0.0, bringing a redesigned API with unified context objects, new message handling utilities (event creation, reading, deserialization), key package metadata helpers, and deletion event support.&lt;/p&gt;

&lt;h3 id=&#34;alby-hub-updates-2&#34;&gt;Alby Hub Updates&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/getAlby/hub&#34;&gt;Alby Hub&lt;/a&gt; merged 5 PRs this week. &lt;a href=&#34;https://github.com/getAlby/hub/pull/2049&#34;&gt;PR #2049&lt;/a&gt; adds an Alby CLI to the app store interface. &lt;a href=&#34;https://github.com/getAlby/hub/pull/2033&#34;&gt;PR #2033&lt;/a&gt; fixes handling of invalid zap data in the transaction list, and &lt;a href=&#34;https://github.com/getAlby/hub/pull/2046&#34;&gt;PR #2046&lt;/a&gt; removes the unused &lt;code&gt;ListTransactions&lt;/code&gt; method from the LNClient interface.&lt;/p&gt;

&lt;h3 id=&#34;notedeck-ships-dashboard-and-agentium-2&#34;&gt;Notedeck Ships Dashboard and Agentium&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/damus-io/notedeck&#34;&gt;Notedeck&lt;/a&gt;, the cross-platform Nostr client from Damus, merged 6 PRs this week. &lt;a href=&#34;https://github.com/damus-io/notedeck/pull/1247&#34;&gt;PR #1247&lt;/a&gt; adds an initial dashboard app. &lt;a href=&#34;https://github.com/damus-io/notedeck/pull/1293&#34;&gt;PR #1293&lt;/a&gt; introduces Agentium, a multi-agent development environment that transforms the Dave AI assistant into a system with dual AI modes and scene-based agent management. &lt;a href=&#34;https://github.com/damus-io/notedeck/pull/1276&#34;&gt;PR #1276&lt;/a&gt; adds a multiline message composer with Signal-style keybindings, and &lt;a href=&#34;https://github.com/damus-io/notedeck/pull/1278&#34;&gt;PR #1278&lt;/a&gt; delivers media performance improvements. Open PRs of note include &lt;a href=&#34;https://github.com/damus-io/notedeck/pull/1288&#34;&gt;outbox infrastructure&lt;/a&gt; and NIP-34 &lt;a href=&#34;https://github.com/damus-io/notedeck/pull/1289&#34;&gt;Git App planning&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&#34;agora-ships-major-ui-overhaul-2&#34;&gt;Agora Ships Major UI Overhaul&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://gitlab.com/soapbox-pub/agora&#34;&gt;Agora&lt;/a&gt; merged 7 PRs this week alongside its v1.0.2 release. &lt;a href=&#34;https://gitlab.com/soapbox-pub/agora/-/merge_requests/106&#34;&gt;PR #106&lt;/a&gt; is the largest, closing 11 UI tasks across settings, profile editing, map interactions, search results, comment filtering, and Blossom server management. The merge disabled reaction buttons for unauthenticated users (who previously got silent failures when trying to react to posts on the map), fixed date-line map panning, and added bold matching text in search results.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://gitlab.com/soapbox-pub/agora/-/merge_requests/108&#34;&gt;PR #108&lt;/a&gt; adds comment counts under feed posts and on thread pages. &lt;a href=&#34;https://gitlab.com/soapbox-pub/agora/-/merge_requests/107&#34;&gt;PR #107&lt;/a&gt; adds automatic retry on event load failures with an explicit reload button when retries exhaust. &lt;a href=&#34;https://gitlab.com/soapbox-pub/agora/-/merge_requests/104&#34;&gt;PR #104&lt;/a&gt; changes hashtag browsing to default to a global scope, since the previous country-scoped default often returned zero results.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://gitlab.com/soapbox-pub/agora/-/merge_requests/109&#34;&gt;PR #109&lt;/a&gt; adds a CI step that checks translation parity across all languages, failing the build if any key is missing a value. &lt;a href=&#34;https://gitlab.com/soapbox-pub/agora/-/merge_requests/110&#34;&gt;PR #110&lt;/a&gt; clips large notes in feeds to preserve scroll rhythm, and &lt;a href=&#34;https://gitlab.com/soapbox-pub/agora/-/merge_requests/111&#34;&gt;PR #111&lt;/a&gt; fixes an iOS mobile zoom issue when commenting on actions caused by small font sizes.&lt;/p&gt;

&lt;h3 id=&#34;clawstr-ships-cli-and-lightning-zap-buttons-2&#34;&gt;Clawstr Ships CLI and Lightning Zap Buttons&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://gitlab.com/soapbox-pub/clawstr&#34;&gt;Clawstr&lt;/a&gt;, the Reddit-inspired platform where AI agents create and manage communities on Nostr, merged 3 PRs this week. &lt;a href=&#34;https://gitlab.com/soapbox-pub/clawstr/-/merge_requests/11&#34;&gt;PR #11&lt;/a&gt; replaces all manual nak commands in the AI agent skill definitions with the new &lt;code&gt;@clawstr/cli&lt;/code&gt; package (&lt;code&gt;npx -y @clawstr/cli@latest&lt;/code&gt;), removing manual JSON event construction in favor of CLI commands and adding wallet operations (init, balance, zap, npc) and NIP-50 full-text search.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://gitlab.com/soapbox-pub/clawstr/-/merge_requests/13&#34;&gt;PR #13&lt;/a&gt; adds a &amp;#34;For Humans&amp;#34; documentation page and a &lt;code&gt;ProfileZapDialog&lt;/code&gt; component. The zap button appears on profile pages when a user has a Lightning address configured and works without login, using LNURL-pay directly with preset sats amounts and QR code display. &lt;a href=&#34;https://gitlab.com/soapbox-pub/clawstr/-/merge_requests/12&#34;&gt;PR #12&lt;/a&gt; documents the &lt;code&gt;wallet sync&lt;/code&gt; command, explaining how payments to Lightning addresses are held by NPC until agents explicitly sync their wallets.&lt;/p&gt;

&lt;h2 id=&#34;nip-updates-38&#34;&gt;NIP Updates&lt;/h2&gt;

&lt;p&gt;Recent changes to the &lt;a href=&#34;https://github.com/nostr-protocol/nips&#34;&gt;NIPs repository&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Merged:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1561&#34;&gt;NIP-45: HyperLogLog Relay Response&lt;/a&gt;&lt;/strong&gt; - NIP-45 (Event Counting) now supports HyperLogLog (HLL) approximate counting. Relays can return 256-byte HLL register values alongside COUNT responses. Clients merge these registers from multiple relays to compute approximate cardinality without downloading full event sets. The primary use case is follower and reaction counts without relying on a single relay as the authoritative source. Even two reaction events consume more bandwidth than the 256-byte HLL payload. Clients can apply HyperLogLog&#43;&#43; corrections for improved accuracy on small cardinalities.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2216&#34;&gt;NIP-39: Identity Tags Moved from Kind 0&lt;/a&gt;&lt;/strong&gt; - NIP-39 identity claim tags (&lt;code&gt;i&lt;/code&gt; tags) have been extracted from kind 0 metadata events to a new dedicated kind 10011. The rationale: almost no clients support these tags, so they add size to every kind 0 fetch without providing value. This is the first in a series of kind 0 extraction PRs from vitorpamplona.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Open PRs and Discussions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2214&#34;&gt;NIP-XX: Nostr Relay Connect (NRC)&lt;/a&gt;&lt;/strong&gt; - woikos proposes a protocol for accessing Nostr relays through encrypted tunneling via a public rendezvous relay. The mechanism enables access to relays behind NAT or firewalls, including personal relays running on home servers or mobile devices. The tunneling uses kind 24891/24892 events with NIP-44 encryption through a rendezvous relay that cannot decrypt the traffic. One practical application: any Nostr client can expose local storage (IndexedDB, SQLite) as a relay endpoint for cross-device sync. Standard NIP-01 semantics (REQ, EVENT, CLOSE, COUNT) pass through the tunnel transparently. Reference implementations exist in Go (ORLY Relay) and TypeScript (Smesh).&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2187&#34;&gt;Nostr Web Tokens (NWT)&lt;/a&gt;&lt;/strong&gt; - pippellia-btc proposes Nostr Web Tokens, a Nostr event format for conveying signed claims between web parties, inspired by JSON Web Tokens (JWTs). NWT can represent both NIP-98 (HTTP Auth) and Blossom authorization events, giving clients flexibility in how and how long tokens remain valid. A reference Go library is available. A &lt;a href=&#34;https://github.com/pippellia-btc/nostr-web-tokens&#34;&gt;video explanation&lt;/a&gt; and &lt;a href=&#34;https://github.com/pippellia-btc/nostr-web-tokens?tab=readme-ov-file#comparisons&#34;&gt;detailed comparison&lt;/a&gt; with NIP-98 and Blossom Auth are linked in the PR.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2210&#34;&gt;NIP-47 Simplification&lt;/a&gt;&lt;/strong&gt; - rolznz proposes removing the &lt;code&gt;multi_&lt;/code&gt; methods from NIP-47 (Nostr Wallet Connect), which were complex to implement and did not gain adoption. The PR also reduces duplication in encryption and backward compatibility handling, cleaning up the spec.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2213&#34;&gt;NIP-05: Move to Own Event Kind&lt;/a&gt;&lt;/strong&gt; - vitorpamplona proposes moving NIP-05 verification from kind 0 to a new kind 10008, enabling multiple NIP-05 identifiers per user and filtering by NIP-05 address. Part of the kind 0 slimming campaign.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2217&#34;&gt;NIP-57: Lightning Addresses from Kind 0&lt;/a&gt;&lt;/strong&gt; - vitorpamplona proposes extracting lud06/lud16 (Lightning addresses) from kind 0 to a dedicated event kind per NIP-57, continuing the kind 0 slimming effort.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2165&#34;&gt;Profile Hypercustomization&lt;/a&gt;&lt;/strong&gt; - fiatjaf proposes extended profile customization capabilities beyond what kind 0 currently supports.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;nip-deep-dive-nip-45-event-counting-and-hyperloglog-2&#34;&gt;NIP Deep Dive: NIP-45 (Event Counting) and HyperLogLog&lt;/h2&gt;

&lt;p&gt;NIP-45 (&lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/45.md&#34;&gt;spec&lt;/a&gt;) defines how clients can ask relays to count events matching a filter without transferring the events themselves. This week&amp;#39;s merge of &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1561&#34;&gt;HyperLogLog support&lt;/a&gt; adds a probabilistic data structure that solves a fundamental problem: how to count things across multiple independent relays.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Problem:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Counting events on a single relay is simple: send a COUNT request, get a number back. Counting across the network is harder. If relay A reports 50 reactions and relay B reports 40, the total is not 90 because many events exist on both relays. Without downloading all events to deduplicate, clients cannot compute the true count.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HyperLogLog:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;HyperLogLog (HLL) is a probabilistic algorithm that estimates the number of distinct elements in a set using a fixed amount of memory. The NIP-45 implementation uses 256 registers of one byte each, consuming exactly 256 bytes regardless of how many events are counted. The algorithm works by examining the binary representation of each event ID and tracking the position of the leading zeros. Events whose IDs start with many zeros are statistically rare, so their occurrence indicates a large set.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How It Works in NIP-45:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A relay responding to a COUNT request can include an &lt;code&gt;hll&lt;/code&gt; field containing base64-encoded register values:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[&amp;#34;COUNT&amp;#34;, &amp;#34;&amp;lt;subscription_id&amp;gt;&amp;#34;, {&amp;#34;count&amp;#34;: 4527, &amp;#34;hll&amp;#34;: &amp;#34;&amp;lt;base64 encoded 256 bytes&amp;gt;&amp;#34;}]
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The client collects HLL values from multiple relays and merges them by taking the maximum value at each register position. This merged HLL represents the union of all event sets across relays, automatically handling deduplication. The final cardinality estimate is computed from the merged registers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Accuracy:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With 256 registers, the standard error is approximately 5.2%. For a true count of 1,000, the estimate will typically fall between 948 and 1,052. For larger counts, the relative error stays constant: a true count of 100,000 will estimate to roughly 94,800-105,200. HyperLogLog&#43;&#43; corrections improve accuracy for small cardinalities (under ~200), where the basic algorithm tends to overestimate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why It Matters:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Social metrics (follower counts, reaction counts, repost counts) are a core feature of social media clients. Without HLL, clients must either query a single &amp;#34;trusted&amp;#34; relay (centralizing the count) or download all events from all relays (wasting bandwidth). HLL lets clients get a good approximate count from multiple relays with a total overhead of 256 bytes per relay, regardless of the actual count. Even two reaction events consume more bandwidth than a full HLL payload.&lt;/p&gt;

&lt;p&gt;The spec fixes the number of registers at 256 for interoperability. All relays produce HLL values that clients can merge, regardless of which relay implementation they run. This standardization means clients can implement HLL support once and benefit from every relay that supports it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Current Status:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The PR was opened by fiatjaf and had been under discussion for several months before merging this week. Relay implementations will need to add HLL computation to their COUNT handlers. Client implementations will need to add HLL merging to their count aggregation logic.&lt;/p&gt;

&lt;h2 id=&#34;nip-deep-dive-nip-96-http-file-storage-and-the-transition-to-blossom-2&#34;&gt;NIP Deep Dive: NIP-96 (HTTP File Storage) and the Transition to Blossom&lt;/h2&gt;

&lt;p&gt;NIP-96 (&lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/96.md&#34;&gt;spec&lt;/a&gt;) defined how Nostr clients upload, download, and manage files on HTTP media servers. Now marked as &amp;#34;unrecommended&amp;#34; in favor of Blossom (BUD-based media hosting), NIP-96 remains relevant this week because Angor v0.2.5 added NIP-96 server configuration and ZSP v0.3.1 uploads to Blossom servers, illustrating a protocol transition in progress.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How NIP-96 Works:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A client discovers a file server&amp;#39;s capabilities by fetching &lt;code&gt;/.well-known/nostr/nip96.json&lt;/code&gt;, which returns the API URL, supported content types, size limits, and available media transformations:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;api_url&amp;#34;: &amp;#34; https://file-server.example/api&amp;#34;,
  &amp;#34;download_url&amp;#34;: &amp;#34; https://cdn.example/files&amp;#34;,
  &amp;#34;content_types&amp;#34;: [&amp;#34;image/jpeg&amp;#34;, &amp;#34;video/webm&amp;#34;, &amp;#34;audio/*&amp;#34;],
  &amp;#34;plans&amp;#34;: {
    &amp;#34;free&amp;#34;: {
      &amp;#34;is_nip98_required&amp;#34;: true,
      &amp;#34;max_byte_size&amp;#34;: 10485760,
      &amp;#34;media_transformations&amp;#34;: {
        &amp;#34;image&amp;#34;: [&amp;#34;resizing&amp;#34;]
      }
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;To upload, the client sends a &lt;code&gt;multipart/form-data&lt;/code&gt; POST to the API URL with a NIP-98 authorization header (a signed Nostr event proving the uploader&amp;#39;s identity). The server returns a NIP-94 file metadata structure containing the file URL, original and transformed SHA-256 hashes, MIME type, and dimensions:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;status&amp;#34;: &amp;#34;success&amp;#34;,
  &amp;#34;nip94_event&amp;#34;: {
    &amp;#34;tags&amp;#34;: [
      [&amp;#34;url&amp;#34;, &amp;#34; https://cdn.example/files/&amp;lt;hash&amp;gt;.png&amp;#34;],
      [&amp;#34;ox&amp;#34;, &amp;#34;&amp;lt;original-file-hash&amp;gt;&amp;#34;],
      [&amp;#34;x&amp;#34;, &amp;#34;&amp;lt;transformed-file-hash&amp;gt;&amp;#34;],
      [&amp;#34;m&amp;#34;, &amp;#34;image/png&amp;#34;],
      [&amp;#34;dim&amp;#34;, &amp;#34;800x600&amp;#34;]
    ]
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Downloads use GET requests to &lt;code&gt;&amp;lt;api_url&amp;gt;/&amp;lt;sha256-hash&amp;gt;&lt;/code&gt;, with optional query parameters for server-side transforms like image resizing (&lt;code&gt;?w=320&lt;/code&gt;). Deletion uses DELETE with NIP-98 auth, and only the original uploader can delete their files. A file listing endpoint returns paginated results of a user&amp;#39;s uploads.&lt;/p&gt;

&lt;p&gt;Users publish kind 10096 events to declare their preferred upload servers, letting clients automatically select the right server without manual configuration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why It Was Deprecated:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;NIP-96 tied file URLs to specific servers. If &lt;code&gt;files.example.com&lt;/code&gt; went down, every Nostr note referencing that server&amp;#39;s URLs lost its media. The server was the address, and the address was fragile.&lt;/p&gt;

&lt;p&gt;Blossom (Blobs Stored Simply on Mediaservers) inverts this by making the SHA-256 hash of the file content the canonical identifier. A Blossom URL looks like &lt;code&gt;https://blossom.example/&amp;lt;sha256&amp;gt;.png&lt;/code&gt;, but any Blossom server hosting the same file serves it at the same hash path. If one server disappears, clients query another server for the same hash. Content addressing makes the data portable across servers by default.&lt;/p&gt;

&lt;p&gt;Blossom also simplifies the API. NIP-96 used multipart form uploads with JSON responses, transform policies, and a discovery endpoint. Blossom uses plain PUT for uploads, GET for downloads, and signed Nostr events (not HTTP headers) for authorization. The blossom specification is split into modular documents: BUD-01 covers server protocol, authorization, and retrieval, BUD-02 covers blob upload, BUD-03 covers users servers, and BUD-04 covers mirroring between servers.&lt;/p&gt;

&lt;p&gt;The deprecation happened in September 2025 via &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2047&#34;&gt;PR #2047&lt;/a&gt;, which marked NIP-96 as &amp;#34;unrecommended&amp;#34; in the NIPs index.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Transition in Practice:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Servers like nostr.build and void.cat supported NIP-96 and have added or migrated to Blossom endpoints. Clients are at various stages: Angor&amp;#39;s v0.2.5 release this week added NIP-96 server configuration for project images, while ZSP&amp;#39;s v0.3.1 release uploads artifacts exclusively to Blossom servers with &lt;code&gt;Content-Digest&lt;/code&gt; headers for protocol compliance. Amethyst and Primal support Blossom uploads. The coexistence will likely continue until the remaining NIP-96 implementations complete their migration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Carries Over:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Kind 10096 server preference events remain useful for Blossom server selection. NIP-94 file metadata (kind 1063 events) still describes file properties regardless of which upload protocol created them. The SHA-256 hashing that NIP-96 used for download URLs became the foundation of Blossom&amp;#39;s content addressing. NIP-96&amp;#39;s design informed what Blossom simplified: the lesson was that media hosting on a decentralized network requires content-addressed storage to match the censorship resistance of the relay layer.&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;That&amp;#39;s it for this week. Building something? Have news to share? Want us to cover your project? Reach out via NIP-17 DM or find us on Nostr.&lt;/p&gt;
 &lt;/blockquote&gt;
    </content>
    <updated>2026-02-11T16:18:27Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs24val54ej2pggpwrsw3ymed7zz4507xuehj8hmhv7aptedtmv6cszypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqn7cwx2</id>
    
      <title type="html">Nostr Compass #8 is out! This week: • rust-nostr ships major ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs24val54ej2pggpwrsw3ymed7zz4507xuehj8hmhv7aptedtmv6cszypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqn7cwx2" />
    <content type="html">
      Nostr Compass #8 is out!&lt;br/&gt;&lt;br/&gt;This week:&lt;br/&gt;• rust-nostr ships major API redesign (21 PRs)&lt;br/&gt;• Nostria 3.0 launches with dual pane navigation&lt;br/&gt;• Vector adds SIMD acceleration (65x-184x speedups)&lt;br/&gt;• Frostr brings threshold signing to iOS&lt;br/&gt;• NIP-47 gets hold invoice support for escrow payments&lt;br/&gt;• NIP-74 proposes podcast standards&lt;br/&gt;• Pod21 launches decentralized 3D printing marketplace&lt;br/&gt;&lt;br/&gt;Plus: Damus NIP-19 relay hints, Primal NWC encryption, nostr-tools fixes, and 17 more project updates.&lt;br/&gt;&lt;br/&gt;Read the full issue:  &lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/naddr1qqgrsvp4xu6kxcnrxe3nzcfsvcmnzq3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqp65whxmxh5&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;naddr1qq…mxh5&lt;/a&gt;&lt;/span&gt; &lt;/div&gt; &lt;p&gt;Welcome back to Nostr Compass, your weekly guide to Nostr.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This week:&lt;/strong&gt; rust-nostr ships a major API redesign with 21 PRs overhauling the SDK&amp;#39;s architecture. Nostria 3.0 launches with dual pane navigation, lists management, and a complete UI overhaul. Vector adds SIMD acceleration achieving 65x-184x speedups and ships &lt;a href=&#34;https://nostrcompass.com/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt; protocol support for encrypted group messaging. Frostr brings threshold signing to iOS via TestFlight. Damus implements &lt;a href=&#34;https://nostrcompass.com/en/topics/nip-19/&#34;&gt;NIP-19 (Bech32 Encoded Entities)&lt;/a&gt; relay hints for cross-relay content discovery. Primal Android adds NWC encryption and wallet transaction exports. nostr-tools and NDK receive reliability improvements. NIP-82 (Software Applications) expands to cover 98% of device platforms. The NIPs repository merges hold invoice support for &lt;a href=&#34;https://nostrcompass.com/en/topics/nip-47/&#34;&gt;NIP-47 (Nostr Wallet Connect)&lt;/a&gt;. New protocol proposals include NIP-74 for podcasting, NIP-DB for browser event databases, and a TRUSTed Filters suite for decentralized content curation. New projects include Instagram to Nostr v2 for content migration, Pod21 launching a decentralized 3D printing marketplace, Clawstr introducing AI agent-managed communities, and Shosho and NosCall expanding live streaming and video calling capabilities.&lt;/p&gt;

&lt;h2 id=&#34;news-26&#34;&gt;News&lt;/h2&gt;

&lt;h3 id=&#34;rust-nostr-ships-major-api-redesign-2&#34;&gt;rust-nostr Ships Major API Redesign&lt;/h3&gt;

&lt;p&gt;The &lt;a href=&#34;https://github.com/rust-nostr/nostr&#34;&gt;rust-nostr&lt;/a&gt; SDK underwent a significant architecture overhaul this week with 21 merged PRs introducing breaking changes across the library. The redesign affects core APIs that most Rust developers rely on.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1245&#34;&gt;PR #1245&lt;/a&gt; redesigns notification APIs, while &lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1244&#34;&gt;PR #1244&lt;/a&gt; replaces &lt;code&gt;RelayNotification::Shutdown&lt;/code&gt; with &lt;code&gt;RelayStatus::Shutdown&lt;/code&gt; for cleaner state handling. The signer APIs now align with other SDK patterns via &lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1243&#34;&gt;PR #1243&lt;/a&gt;. Client and Relay methods received cleanup in &lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1242&#34;&gt;PR #1242&lt;/a&gt;, and client options now use a builder pattern (&lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1241&#34;&gt;PR #1241&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Message sending APIs were redesigned in &lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1240&#34;&gt;PR #1240&lt;/a&gt;, REQ unsubscription in &lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1239&#34;&gt;PR #1239&lt;/a&gt;, and relay removal in &lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1229&#34;&gt;PR #1229&lt;/a&gt;. An &lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1246&#34;&gt;open PR #1246&lt;/a&gt; adds support for blocking APIs to round out the redesign.&lt;/p&gt;

&lt;p&gt;The changes bring consistency to the SDK but will require migration effort from existing projects. Developers building on rust-nostr should review the changelog carefully before upgrading.&lt;/p&gt;

&lt;h3 id=&#34;instagram-to-nostr-v2-enables-content-migration-2&#34;&gt;Instagram to Nostr v2 Enables Content Migration&lt;/h3&gt;

&lt;p&gt;A new tool enables creators to migrate their existing content from centralized platforms to Nostr. &lt;a href=&#34;https://github.com/primalpaul1/instagram-to-nostr-v2&#34;&gt;Instagram to Nostr v2&lt;/a&gt; supports importing from Instagram, TikTok, Twitter, and Substack without requiring access to the user&amp;#39;s private keys.&lt;/p&gt;

&lt;p&gt;The tool addresses a common onboarding barrier: users hesitant to start fresh on a new platform can now preserve their content history. It also supports gifting Nostr accounts to new users or proposing content to existing accounts, making it useful for helping others transition to the protocol.&lt;/p&gt;

&lt;h3 id=&#34;pod21-decentralized-3d-printing-network-2&#34;&gt;Pod21: Decentralized 3D Printing Network&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://pod21.com&#34;&gt;Pod21&lt;/a&gt; connects 3D printer operators with buyers using Nostr for marketplace coordination. The platform includes a &lt;a href=&#34;https://nostrcompass.com/en/topics/nip-17/&#34;&gt;NIP-17 (Private Direct Messages)&lt;/a&gt; compatible DM bot that handles marketplace interactions, allowing buyers to request prints and negotiate with makers through encrypted direct messages.&lt;/p&gt;

&lt;p&gt;Makers list their printing capacity and capabilities; buyers browse listings and initiate orders via the bot. The architecture follows a similar pattern to other Nostr commerce applications: relay-based discovery, encrypted messaging for order coordination, and Lightning for settlement. Pod21 joins Ridestr and Shopstr as Nostr applications coordinating real-world transactions through the protocol.&lt;/p&gt;

&lt;h3 id=&#34;clawstr-ai-agent-social-network-2&#34;&gt;Clawstr: AI Agent Social Network&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/clawstr/clawstr&#34;&gt;Clawstr&lt;/a&gt; launches as a Reddit-inspired platform where AI agents create and manage communities on Nostr. The platform enables autonomous agents to establish topical communities, curate content, and engage with users. Communities function like subreddits but with AI moderators and curators guiding discussions. The architecture uses Nostr&amp;#39;s open protocol for agent-to-agent and agent-to-human interactions, establishing a new model for community formation on decentralized social media.&lt;/p&gt;

&lt;h2 id=&#34;releases-32&#34;&gt;Releases&lt;/h2&gt;

&lt;h3 id=&#34;ridestr-v0-2-0-roadflare-release-2&#34;&gt;Ridestr v0.2.0: RoadFlare Release&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/variablefate/ridestr&#34;&gt;Ridestr&lt;/a&gt; shipped &lt;a href=&#34;https://github.com/variablefate/ridestr/releases/tag/v0.2.0&#34;&gt;v0.2.0&lt;/a&gt;, dubbed the &amp;#34;RoadFlare Release,&amp;#34; introducing personal rideshare networks. The feature lets riders add favorite drivers to a trusted network. Drivers approve followers and share encrypted locations, enabling riders to see when trusted drivers are online and nearby. Ride requests go directly to known drivers.&lt;/p&gt;

&lt;p&gt;Payment reliability improved with automatic escrow recovery, better wallet sync across devices, and faster payment processing via progressive polling. &lt;a href=&#34;https://github.com/variablefate/ridestr/pull/37&#34;&gt;PR #37&lt;/a&gt; adds the Phase 5-6 infrastructure supporting these features. &lt;a href=&#34;https://github.com/variablefate/ridestr/releases/tag/v0.2.1&#34;&gt;v0.2.1&lt;/a&gt; followed with hotfixes for payment dialog bugs and the post-ride &amp;#34;Add to Favorites&amp;#34; flow.&lt;/p&gt;

&lt;h3 id=&#34;nostria-3-0-2&#34;&gt;Nostria 3.0&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostria-app/nostria&#34;&gt;Nostria&lt;/a&gt;, sondreb&amp;#39;s cross-platform client built for global scale, shipped version 3.0 with a complete UI overhaul, new logo, and hundreds of fixes. The release represents an intensive six-week development cycle.&lt;/p&gt;

&lt;p&gt;Dual pane navigation is the biggest UX change, allowing desktop users to reduce context switching when moving between lists, details, and threads. A new Home section provides an overview of all available features, and all screens share a unified toolbar, layout, and functionality.&lt;/p&gt;

&lt;p&gt;Lists management is the most significant feature update, integrating throughout the application. Users can manage profile lists and filter content in any feature: Streams, Music, or Feeds. Tired of spam in threads? Filter by favorites to see only their replies. Quick Zaps adds one-tap zapping with configurable values. Copy/Screenshot generates clipboard screenshots for sharing events anywhere. Muted Words now filters on profile fields (name, display_name, NIP-05), enabling users to block all bridged profiles with a single banned word. Settings became searchable for faster configuration changes.&lt;/p&gt;

&lt;p&gt;The release adds BOLT11 and BOLT12 payment request rendering, text-size and font selection, and &amp;#34;Note-to-Self&amp;#34; messaging in the Messages section with rendering of referenced content like articles and events. The new Share dialog enables quick sharing via email, websites, or direct messages to multiple recipients. Additional features include custom emoji sets, Interests (hashtag lists as dynamic feeds), Bookmarks, Public Relay Feeds, and full menu customization including which option the Nostria icon opens.&lt;/p&gt;

&lt;p&gt;Available on Android, iOS, Windows, and web at &lt;a href=&#34;https://www.nostria.app/&#34;&gt;nostria.app&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&#34;applesauce-v5-1-0-2&#34;&gt;Applesauce v5.1.0&lt;/h3&gt;

&lt;p&gt;hzrd149&amp;#39;s &lt;a href=&#34;https://github.com/hzrd149/applesauce&#34;&gt;Applesauce&lt;/a&gt; library suite released v5.1.0 across all packages. &lt;a href=&#34;https://github.com/hzrd149/applesauce/releases/tag/applesauce-signers%405.1.0&#34;&gt;applesauce-signers&lt;/a&gt; adds support for &lt;code&gt;switch_relays&lt;/code&gt; and &lt;code&gt;ping&lt;/code&gt; methods on Nostr Connect remote signers, useful for managing signer connections programmatically. &lt;a href=&#34;https://github.com/hzrd149/applesauce/releases/tag/applesauce-loaders%405.1.0&#34;&gt;applesauce-loaders&lt;/a&gt; introduces &lt;code&gt;loadAsyncMap&lt;/code&gt; for parallel async loading. &lt;a href=&#34;https://github.com/hzrd149/applesauce/releases/tag/applesauce-react%405.1.0&#34;&gt;applesauce-react&lt;/a&gt; adds padding arguments to &lt;code&gt;useAction().run()&lt;/code&gt;. &lt;a href=&#34;https://github.com/hzrd149/applesauce/releases/tag/applesauce-core%405.1.0&#34;&gt;applesauce-core&lt;/a&gt; updates event-to-store mapping to handle strings directly without requiring &lt;code&gt;onlyEvents&lt;/code&gt;.&lt;/p&gt;

&lt;h3 id=&#34;nak-v0-18-3-5&#34;&gt;nak v0.18.3&lt;/h3&gt;

&lt;p&gt;fiatjaf&amp;#39;s &lt;a href=&#34;https://github.com/fiatjaf/nak&#34;&gt;nak&lt;/a&gt; (Nostr Army Knife) reached &lt;a href=&#34;https://github.com/fiatjaf/nak/releases/tag/v0.18.3&#34;&gt;v0.18.3&lt;/a&gt; with stability fixes from mattn. The release prevents panics when mint URLs lack the &lt;code&gt;://&lt;/code&gt; separator, validates dateparser errors before using date values, and handles edge cases in AUTH challenge tag parsing. These defensive fixes make the CLI more resilient when processing malformed inputs.&lt;/p&gt;

&lt;h3 id=&#34;aegis-v0-3-7-2&#34;&gt;Aegis v0.3.7&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/ZharlieW/Aegis&#34;&gt;Aegis&lt;/a&gt;, the cross-platform desktop signer, shipped &lt;a href=&#34;https://github.com/ZharlieW/Aegis/releases/tag/v0.3.7&#34;&gt;v0.3.7&lt;/a&gt; adding Nostr App Browser support with &lt;a href=&#34;https://nostrcompass.com/en/topics/nip-07/&#34;&gt;NIP-07 (Browser Extension Interface)&lt;/a&gt; signing. The release records &lt;a href=&#34;https://nostrcompass.com/en/topics/nip-04/&#34;&gt;NIP-04 (Encrypted Direct Messages)&lt;/a&gt; and &lt;a href=&#34;https://nostrcompass.com/en/topics/nip-44/&#34;&gt;NIP-44 (Versioned Encryption)&lt;/a&gt; encryption events, allowing users to track which applications request encryption operations. The browser segment now filters by platform to show only web apps.&lt;/p&gt;

&lt;h3 id=&#34;bitchat-v1-5-1-ios-2&#34;&gt;Bitchat v1.5.1 (iOS)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/permissionlesstech/bitchat&#34;&gt;Bitchat&lt;/a&gt;, the offline-capable messaging app using Nostr and Bluetooth mesh, released &lt;a href=&#34;https://github.com/permissionlesstech/bitchat/releases/tag/v1.5.1&#34;&gt;v1.5.1&lt;/a&gt; with iOS security hardening. &lt;a href=&#34;https://github.com/permissionlesstech/bitchat/pull/1012&#34;&gt;PR #1012&lt;/a&gt; validates Nostr event signatures before processing, rejects invalid giftwraps and embedded packets, caps oversized payloads, and blocks spoofed BLE announce sender IDs. &lt;a href=&#34;https://github.com/permissionlesstech/bitchat/pull/998&#34;&gt;PR #998&lt;/a&gt; fixes iOS BLE mesh authentication by binding sender IDs to connection UUIDs, preventing identity spoofing in the mesh network. &lt;a href=&#34;https://github.com/permissionlesstech/bitchat/pull/972&#34;&gt;PR #972&lt;/a&gt; adds notification rate limiting to prevent peer discovery floods when multiple mesh devices are nearby.&lt;/p&gt;

&lt;h3 id=&#34;keychat-v1-39-2-2&#34;&gt;KeyChat v1.39.2&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/keychat-io/keychat-app&#34;&gt;KeyChat&lt;/a&gt; released &lt;a href=&#34;https://github.com/keychat-io/keychat-app/releases/tag/v1.39.2%2B6495&#34;&gt;v1.39.2&lt;/a&gt; adding &lt;a href=&#34;https://nostrcompass.com/en/topics/nip-47/&#34;&gt;NIP-47&lt;/a&gt; Nostr Wallet Connect support via &lt;a href=&#34;https://github.com/keychat-io/keychat-app/pull/148&#34;&gt;PR #148&lt;/a&gt;. Users can now connect external Lightning wallets for payments within the messaging app. The release also adds macOS desktop notifications.&lt;/p&gt;

&lt;h3 id=&#34;nostrmo-v3-5-0-2&#34;&gt;Nostrmo v3.5.0&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/haorendashu/nostrmo&#34;&gt;Nostrmo&lt;/a&gt;, the cross-platform Flutter client, shipped &lt;a href=&#34;https://github.com/haorendashu/nostrmo/releases/tag/3.5.0&#34;&gt;v3.5.0&lt;/a&gt; overhauling its feed system. The update replaces fixed feeds with customizable alternatives: General Feed, Mentioned Feed, and Relay Feed, each configurable through new edit pages. The release implements outbox model support for better event routing and expands local relay functionality with configurable size limits and subscription support.&lt;/p&gt;

&lt;h3 id=&#34;shosho-v0-11-1-2&#34;&gt;Shosho v0.11.1&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/r0d8lsh0p/shosho-releases&#34;&gt;Shosho&lt;/a&gt;, the live streaming app for Nostr, released &lt;a href=&#34;https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v0.11.1&#34;&gt;v0.11.1&lt;/a&gt; with recording and VOD capabilities. The update adds room presence indicators showing who is watching streams, threaded chat conversations for better discussion organization, and Nostr Connect support on iOS via &lt;a href=&#34;https://nostrcompass.com/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt;. Streamers can now save their broadcasts for later viewing while maintaining real-time chat interactions with their audience.&lt;/p&gt;

&lt;h3 id=&#34;noscall-v0-5-0-2&#34;&gt;NosCall v0.5.0&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/sanah9/noscall&#34;&gt;NosCall&lt;/a&gt;, the audio and video calling app for Nostr, shipped &lt;a href=&#34;https://github.com/sanah9/noscall/releases/tag/v0.5.0-release&#34;&gt;v0.5.0&lt;/a&gt; with contact groups for organizing calls by category, relay management for connection optimization, and configurable ICE server settings for improved NAT traversal. The release also adds dark mode support. NosCall uses Nostr for call signaling and coordination, enabling peer-to-peer calls without centralized servers.&lt;/p&gt;

&lt;h3 id=&#34;divine-1-0-4-2&#34;&gt;diVine 1.0.4&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/divinevideo/divine-mobile&#34;&gt;diVine&lt;/a&gt;, rabble&amp;#39;s short-form looping video client, released &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/releases/tag/1.0.4&#34;&gt;1.0.4&lt;/a&gt; as an Android pre-release alpha ahead of its Zapstore submission. The release focuses on testing Nostr key management, including nsec import, &lt;a href=&#34;https://nostrcompass.com/en/topics/nip-46/&#34;&gt;NIP-46 (Nostr Connect)&lt;/a&gt; remote signing with nsecBunker and Amber, and nostrconnect:// URL handling. The team is soliciting feedback on relay compatibility and video interoperability with other clients. &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/1265&#34;&gt;PR #1265&lt;/a&gt; fixes iOS file path handling that caused video clips to become unusable after app updates by storing relative paths instead of absolute container paths. &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/1251&#34;&gt;PR #1251&lt;/a&gt; fixes navigation issues when viewing profiles from comments.&lt;/p&gt;

&lt;h3 id=&#34;zeus-v0-12-2-2&#34;&gt;Zeus v0.12.2&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/ZeusLN/zeus&#34;&gt;Zeus&lt;/a&gt; shipped &lt;a href=&#34;https://github.com/ZeusLN/zeus/releases/tag/v0.12.2&#34;&gt;v0.12.2&lt;/a&gt; as a stable release, consolidating the &lt;a href=&#34;https://nostrcompass.com/en/newsletters/2026-01-28-newsletter/#zeus-v0122-beta---nwc-fixes&#34;&gt;NWC fixes covered in previous editions&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&#34;frostr-igloo-ios-testflight-2&#34;&gt;Frostr Igloo iOS TestFlight&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://frostr.org/&#34;&gt;Frostr&lt;/a&gt; launched &lt;a href=&#34;https://github.com/FROSTR-ORG/igloo-ios-prototype&#34;&gt;Igloo for iOS&lt;/a&gt; on &lt;a href=&#34;https://testflight.apple.com/join/72hjQe3J&#34;&gt;TestFlight&lt;/a&gt;, expanding threshold signing to Apple devices. Frostr uses FROST (Flexible Round-Optimized Schnorr Threshold) signatures to split nsec keys into shares distributed across devices, enabling k-of-n signing with fault tolerance. Users joining in &amp;#34;demo mode&amp;#34; participate in a live 2-of-2 threshold signature experiment, demonstrating the protocol&amp;#39;s real-time coordination capabilities. The iOS release joins &lt;a href=&#34;https://github.com/FROSTR-ORG/igloo-android&#34;&gt;Igloo for Android&lt;/a&gt; (v0.1.2), which shipped in December with &lt;a href=&#34;https://nostrcompass.com/en/topics/nip-55/&#34;&gt;NIP-55 (Android Signer)&lt;/a&gt; support for cross-app signing requests. Both mobile clients complement &lt;a href=&#34;https://github.com/FROSTR-ORG/igloo-desktop&#34;&gt;Igloo desktop&lt;/a&gt; and the &lt;a href=&#34;https://github.com/FROSTR-ORG/frost2x&#34;&gt;Frost2x&lt;/a&gt; browser extension.&lt;/p&gt;

&lt;h2 id=&#34;project-updates-23&#34;&gt;Project Updates&lt;/h2&gt;

&lt;h3 id=&#34;damus-implements-nip-19-relay-hints-2&#34;&gt;Damus Implements NIP-19 Relay Hints&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/damus-io/damus&#34;&gt;Damus&lt;/a&gt; merged &lt;a href=&#34;https://github.com/damus-io/damus/pull/3477&#34;&gt;PR #3477&lt;/a&gt;, implementing &lt;a href=&#34;https://nostrcompass.com/en/topics/nip-19/&#34;&gt;NIP-19&lt;/a&gt; relay hint consumption for event fetching. The feature enables viewing notes on relays not in the user&amp;#39;s configured pool by extracting hints from &lt;a href=&#34;https://nostrcompass.com/en/topics/nip-10/&#34;&gt;NIP-10 (Reply Threads)&lt;/a&gt;, &lt;a href=&#34;https://nostrcompass.com/en/topics/nip-18/&#34;&gt;NIP-18 (Reposts)&lt;/a&gt;, and NIP-19 references. The implementation uses ephemeral relay connections with reference-counted cleanup, avoiding permanent relay pool expansion.&lt;/p&gt;

&lt;p&gt;Additional fixes include Lightning invoice parsing (&lt;a href=&#34;https://github.com/damus-io/damus/pull/3566&#34;&gt;PR #3566&lt;/a&gt;), wallet view loading (&lt;a href=&#34;https://github.com/damus-io/damus/pull/3554&#34;&gt;PR #3554&lt;/a&gt;), relay list timing (&lt;a href=&#34;https://github.com/damus-io/damus/pull/3553&#34;&gt;PR #3553&lt;/a&gt;), and profile preloading to reduce visual &amp;#34;popping&amp;#34; (&lt;a href=&#34;https://github.com/damus-io/damus/pull/3550&#34;&gt;PR #3550&lt;/a&gt;). A &lt;a href=&#34;https://github.com/damus-io/damus/pull/3590&#34;&gt;draft PR #3590&lt;/a&gt; shows &lt;a href=&#34;https://nostrcompass.com/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; private DM support in progress.&lt;/p&gt;

&lt;h3 id=&#34;primal-android-ships-nwc-encryption-2&#34;&gt;Primal Android Ships NWC Encryption&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app&#34;&gt;Primal Android&lt;/a&gt; had a very active week with 18 merged PRs focused on wallet infrastructure. The app now integrates with Spark, Lightspark&amp;#39;s self-custodial Lightning protocol. &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/874&#34;&gt;PR #874&lt;/a&gt; adds NWC encryption support, while &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/872&#34;&gt;PR #872&lt;/a&gt; sends NWC info events when connections establish.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/870&#34;&gt;PR #870&lt;/a&gt; enables CSV export for wallet transactions, useful for accounting and tax purposes. &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/716&#34;&gt;PR #716&lt;/a&gt; adds a local account switcher in the Note Editor. Multiple wallet restore fixes (&lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/876&#34;&gt;PR #876&lt;/a&gt;, &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/875&#34;&gt;PR #875&lt;/a&gt;, &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/873&#34;&gt;PR #873&lt;/a&gt;) address edge cases for users with non-Spark wallet configurations.&lt;/p&gt;

&lt;h3 id=&#34;marmot-typescript-sdk-adds-message-history-2&#34;&gt;Marmot TypeScript SDK Adds Message History&lt;/h3&gt;

&lt;p&gt;The &lt;a href=&#34;https://github.com/marmot-protocol/marmot&#34;&gt;Marmot&lt;/a&gt; protocol&amp;#39;s TypeScript implementation continues development. &lt;a href=&#34;https://github.com/marmot-protocol/marmot-ts/pull/38&#34;&gt;PR #38&lt;/a&gt; by hzrd149 implements message history persistence with pagination for the reference chat application, while &lt;a href=&#34;https://github.com/marmot-protocol/marmot-ts/pull/39&#34;&gt;PR #39&lt;/a&gt; improves library ergonomics.&lt;/p&gt;

&lt;p&gt;On the Rust side, &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/161&#34;&gt;PR #161&lt;/a&gt; implements retryable state handling to preserve message context on failure, and &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/164&#34;&gt;PR #164&lt;/a&gt; switches to std::sync::Mutex to avoid tokio panics with SQLite. The whitenoise-rs backend adds &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/418&#34;&gt;Amber integration&lt;/a&gt; (&lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/418&#34;&gt;PR #418&lt;/a&gt;), &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/467&#34;&gt;upgrades to MDK and nostr-sdk 0.44&lt;/a&gt; (&lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/467&#34;&gt;PR #467&lt;/a&gt;), and introduces real-time notification streaming via &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/460&#34;&gt;PR #460&lt;/a&gt; with NewMessage and GroupInvite event types.&lt;/p&gt;

&lt;h3 id=&#34;haven-adds-periodic-wot-refresh-2&#34;&gt;HAVEN Adds Periodic WoT Refresh&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/bitvora/haven&#34;&gt;HAVEN&lt;/a&gt;, the personal relay, merged &lt;a href=&#34;https://github.com/bitvora/haven/pull/108&#34;&gt;PR #108&lt;/a&gt; adding periodic &lt;a href=&#34;https://nostrcompass.com/en/topics/web-of-trust/&#34;&gt;Web of Trust&lt;/a&gt; refresh. The feature ensures trust scores stay current as users&amp;#39; social graphs evolve, improving spam filtering accuracy over time.&lt;/p&gt;

&lt;h3 id=&#34;nostr-tools-2&#34;&gt;nostr-tools&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nbd-wtf/nostr-tools&#34;&gt;nostr-tools&lt;/a&gt;, the core JavaScript library, received multiple improvements this week. Commits include a &lt;a href=&#34;https://github.com/nbd-wtf/nostr-tools/commit/c2423f7f31853d97fef2e3d649204cec328e81d5&#34;&gt;fix for hashtag parsing after newlines&lt;/a&gt; in &lt;a href=&#34;https://nostrcompass.com/en/topics/nip-27/&#34;&gt;NIP-27 (Text Note References)&lt;/a&gt; mentions, &lt;a href=&#34;https://github.com/nbd-wtf/nostr-tools/commit/ab802c8dbe35d29feb732ba54e82a346c21c32e2&#34;&gt;automatic pruning of broken relay objects with idle tracking&lt;/a&gt; for connection cleanup, &lt;a href=&#34;https://github.com/nbd-wtf/nostr-tools/commit/be9b91318fea6a0cb154b8734a15b50a4c1e7638&#34;&gt;message queue removal&lt;/a&gt; for single-threaded performance optimization, and &lt;a href=&#34;https://github.com/nbd-wtf/nostr-tools/commit/05b1fba5113182ac0aa3c72d1f511cd956a7c139&#34;&gt;source file exports&lt;/a&gt; for better TypeScript imports.&lt;/p&gt;

&lt;h3 id=&#34;ndk-2&#34;&gt;NDK&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-dev-kit/ndk&#34;&gt;NDK&lt;/a&gt; shipped &lt;a href=&#34;https://github.com/nostr-dev-kit/ndk/commit/26abea24726ed844fdd091744ac9f768f1a530a0&#34;&gt;beta.71&lt;/a&gt; with a &lt;a href=&#34;https://github.com/nostr-dev-kit/ndk/commit/33e759508bc656dc45d3d77c741edf581af323f3&#34;&gt;fix for reconnection after device sleep/wake cycles and stale connection handling&lt;/a&gt;, addressing reliability issues for mobile applications.&lt;/p&gt;

&lt;h3 id=&#34;notedeck-2&#34;&gt;Notedeck&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/damus-io/notedeck&#34;&gt;Notedeck&lt;/a&gt;, the Damus team&amp;#39;s desktop client, has an &lt;a href=&#34;https://github.com/damus-io/notedeck/pull/1279&#34;&gt;open PR #1279&lt;/a&gt; adding a &lt;a href=&#34;https://nostrcompass.com/en/topics/nip-34/&#34;&gt;NIP-34 (Git Collaboration)&lt;/a&gt; viewer. This would enable browsing git repositories, patches, and issues published to Nostr relays directly within the client, making Notedeck a potential front-end for ngit-based workflows.&lt;/p&gt;

&lt;h3 id=&#34;njump-2&#34;&gt;njump&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/fiatjaf/njump&#34;&gt;njump&lt;/a&gt;, the Nostr web gateway, added support for two &lt;a href=&#34;https://nostrcompass.com/en/topics/nip-51/&#34;&gt;NIP-51 (Lists)&lt;/a&gt; event types via &lt;a href=&#34;https://github.com/fiatjaf/njump/pull/152&#34;&gt;PR #152&lt;/a&gt;. The gateway now renders kind:30000 Follow Sets, which are categorized groupings of users that clients can display in different contexts, and kind:39089 Starter Packs, which are curated profile collections designed for sharing and group following. These additions let njump display community-curated lists when users share nevent links.&lt;/p&gt;

&lt;h3 id=&#34;amethyst-8&#34;&gt;Amethyst&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/vitorpamplona/amethyst&#34;&gt;Amethyst&lt;/a&gt;, the Android client, fixed a bug preventing video sharing from the player view (&lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/1695&#34;&gt;PR #1695&lt;/a&gt;). The &amp;#34;Share video&amp;#34; option was failing to appear because the content parameter was not being passed to the control buttons component. Users can now share Nostr video content to other apps directly from the player. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/1693&#34;&gt;PR #1693&lt;/a&gt; fixes Jackson JSON deserialization crashes that occurred when parsing certain malformed events.&lt;/p&gt;

&lt;h3 id=&#34;jumble-2&#34;&gt;Jumble&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/CodyTseng/jumble&#34;&gt;Jumble&lt;/a&gt;, the web client focused on relay feed browsing, added audio file uploads via clipboard in &lt;a href=&#34;https://github.com/CodyTseng/jumble/pull/743&#34;&gt;PR #743&lt;/a&gt;. Users can now paste audio files directly into the post editor, which uploads them to configured media servers and embeds the URL in the note. The feature mirrors existing image paste functionality.&lt;/p&gt;

&lt;h3 id=&#34;flotilla-2&#34;&gt;Flotilla&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/coracle-social/flotilla&#34;&gt;Flotilla&lt;/a&gt;, hodlbod&amp;#39;s &lt;a href=&#34;https://nostrcompass.com/en/topics/nip-29/&#34;&gt;NIP-29 (Relay-Based Groups)&lt;/a&gt; communities client, shipped notifications via &lt;a href=&#34;https://github.com/coracle-social/flotilla/pull/270&#34;&gt;PR #270&lt;/a&gt;. The update refactors the alert system from anchor-based polling to local pull notifications for web and push notifications for mobile. The architecture implements the proposed NIP-9a standard (see &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2194&#34;&gt;PR #2194&lt;/a&gt; below), where users register webhook callbacks with relays and receive encrypted event payloads when filters match.&lt;/p&gt;

&lt;h3 id=&#34;formstr-5&#34;&gt;Formstr&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/abh3po/nostr-forms&#34;&gt;Formstr&lt;/a&gt;, the Nostr-native forms application, added form import and encrypted form support in &lt;a href=&#34;https://github.com/abh3po/nostr-forms/pull/422&#34;&gt;PR #422&lt;/a&gt;. Users can now import existing forms from JSON or other Formstr instances. The encryption feature allows form creators to restrict responses so only designated recipients can read submissions, useful for surveys collecting sensitive information.&lt;/p&gt;

&lt;h3 id=&#34;pollerama-2&#34;&gt;Pollerama&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://pollerama.fun&#34;&gt;Pollerama&lt;/a&gt;, built on the &lt;a href=&#34;https://github.com/abh3po/nostr-polls&#34;&gt;nostr-polls&lt;/a&gt; library, added &lt;a href=&#34;https://nostrcompass.com/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; DM sharing for polls via &lt;a href=&#34;https://github.com/abh3po/nostr-polls/pull/141&#34;&gt;PR #141&lt;/a&gt; and &lt;a href=&#34;https://github.com/abh3po/nostr-polls/pull/142&#34;&gt;PR #142&lt;/a&gt;. Users can now share polls directly to contacts through encrypted direct messages.&lt;/p&gt;

&lt;h3 id=&#34;nostrability-schemata-2&#34;&gt;Nostrability Schemata&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostrability/schemata&#34;&gt;Nostrability schemata&lt;/a&gt;, the JSON verification schema collection for Nostr events, added &lt;a href=&#34;https://nostrcompass.com/en/topics/nip-59/&#34;&gt;NIP-59 (Gift Wrap)&lt;/a&gt; coverage via &lt;a href=&#34;https://github.com/nostrability/schemata/pull/59&#34;&gt;PR #59&lt;/a&gt;. The update includes schemas for kind 13 (seal) and kind 1059 (gift wrap) events, complementing existing &lt;a href=&#34;https://nostrcompass.com/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; schema coverage.&lt;/p&gt;

&lt;h3 id=&#34;vector-2&#34;&gt;Vector&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/VectorPrivacy/Vector&#34;&gt;Vector&lt;/a&gt;, the privacy-focused desktop messenger using &lt;a href=&#34;https://nostrcompass.com/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt;, &lt;a href=&#34;https://nostrcompass.com/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt;, and &lt;a href=&#34;https://nostrcompass.com/en/topics/nip-59/&#34;&gt;NIP-59&lt;/a&gt; for zero-metadata encryption, merged &lt;a href=&#34;https://github.com/VectorPrivacy/Vector/pull/39&#34;&gt;PR #39&lt;/a&gt; introducing SIMD-accelerated performance optimizations. Hex encoding runs 65x faster, image preview generation up to 38x faster, and message lookups 184x faster via binary search indexing. The PR adds ARM64 NEON intrinsics for Apple Silicon and x86_64 AVX2/SSE2 with runtime detection for Windows and Linux. Memory usage dropped with message structs reduced from 472 to 128 bytes and npub storage cut by 99.6% through interning.&lt;/p&gt;

&lt;p&gt;Vector v0.3.0 (December 2025) integrated &lt;a href=&#34;https://github.com/marmot-protocol/mdk&#34;&gt;MDK (Marmot Development Kit)&lt;/a&gt; for MLS protocol-based group messaging, bringing end-to-end encrypted groups with forward secrecy to the client. MIP-04 file sharing now handles imeta attachments for MLS groups, designed for interoperability with &lt;a href=&#34;https://nostrcompass.com/en/newsletters/2026-01-28-newsletter/#marmot-typescript-sdk-adds-message-history&#34;&gt;White Noise&lt;/a&gt;. The release also introduced a Mini Apps platform with WebXDC-based P2P multiplayer games, a decentralized app store called The Nexus, PIVX wallet integration for in-app payments, message editing with full history tracking, and 4x memory reduction during image uploads.&lt;/p&gt;

&lt;h2 id=&#34;nip-updates-41&#34;&gt;NIP Updates&lt;/h2&gt;

&lt;p&gt;Recent changes to the &lt;a href=&#34;https://github.com/nostr-protocol/nips&#34;&gt;NIPs repository&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Merged:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1913&#34;&gt;NIP-47: Hold Invoice Support&lt;/a&gt;&lt;/strong&gt; - &lt;a href=&#34;https://nostrcompass.com/en/topics/nip-47/&#34;&gt;NIP-47 (Nostr Wallet Connect)&lt;/a&gt; now supports hold invoices, enabling advanced payment workflows where receivers must explicitly settle or cancel payments. The PR adds three new RPC methods: &lt;code&gt;make_hold_invoice&lt;/code&gt; creates a hold invoice using a pre-generated preimage and payment hash, &lt;code&gt;settle_hold_invoice&lt;/code&gt; claims payment by providing the original preimage, and &lt;code&gt;cancel_hold_invoice&lt;/code&gt; rejects payment using its payment hash. A new &lt;code&gt;hold_invoice_accepted&lt;/code&gt; notification fires when a payer locks in payment. This enables use cases like pay-to-unlock content, marketplace escrow systems, and payment gating. Implementations are already underway in &lt;a href=&#34;https://github.com/getAlby/hub/pull/1298&#34;&gt;Alby Hub&lt;/a&gt;, &lt;a href=&#34;https://github.com/getAlby/js-sdk/pull/382&#34;&gt;Alby JS-SDK&lt;/a&gt;, and &lt;a href=&#34;https://github.com/relaystr/ndk/pull/147&#34;&gt;dart NDK&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2208&#34;&gt;NIP-05: Lowercase Requirement&lt;/a&gt;&lt;/strong&gt; - &lt;a href=&#34;https://nostrcompass.com/en/topics/nip-05/&#34;&gt;NIP-05 (Domain Verification)&lt;/a&gt; now explicitly requires lowercase for both hex public keys and local names in the &lt;code&gt;nostr.json&lt;/code&gt; file. This was implicit in the spec but not stated, causing interoperability issues when some implementations used mixed case while others normalized to lowercase. Clients validating NIP-05 identifiers should now reject any &lt;code&gt;nostr.json&lt;/code&gt; responses containing uppercase characters in keys or names.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2205&#34;&gt;NIP-73: Country Codes&lt;/a&gt;&lt;/strong&gt; - &lt;a href=&#34;https://nostrcompass.com/en/topics/nip-73/&#34;&gt;NIP-73 (Geotags)&lt;/a&gt; now supports ISO 3166 country codes as an alternative to geohashes. Events can include &lt;code&gt;[&amp;#34;g&amp;#34;, &amp;#34;US&amp;#34;, &amp;#34;countryCode&amp;#34;]&lt;/code&gt; tags to indicate country-level location without requiring precise coordinates. This enables country-based content filtering and discovery for applications where exact location is unnecessary or undesirable. The PR also added a missing geohash example to the spec documentation.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Open PRs and Discussions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1336&#34;&gt;NIP-82: Software Applications&lt;/a&gt;&lt;/strong&gt; - franzap announced a major update to this draft specification, which defines how software applications are distributed via Nostr using kind 30063 release events. The update now covers approximately 98% of device platforms globally, including macOS, Linux, Windows, FreeBSD, WASM environments, VS Code extensions, Chrome extensions, and Web Bundles/PWAs. The team is focusing next on Android, PWA, and iOS support, inviting developers to converge on this shared standard. Zapstore plans to migrate to the new format in the coming weeks.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2211&#34;&gt;NIP-74: Podcasts&lt;/a&gt;&lt;/strong&gt; - Defines addressable events for podcast shows (kind 30074) and episodes (kind 30075). Shows include metadata like title, description, categories, and cover images. Episodes reference their parent show and include enclosure URLs, durations, and chapter markers. The spec integrates with Podcasting 2.0 metadata standards and includes value tags for V4V (value-for-value) monetization via Lightning. Platforms like &lt;a href=&#34;https://transmit.fm&#34;&gt;transmit.fm&lt;/a&gt;, a Nostr-native podcast publishing platform, can publish directly to relays using this format, enabling podcasters to distribute content without intermediaries.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2207&#34;&gt;NIP-FR: Friends-Only Notes&lt;/a&gt;&lt;/strong&gt; - Proposes a mechanism for publishing notes visible only to mutual follows. The implementation uses &lt;a href=&#34;https://nostrcompass.com/en/topics/nip-59/&#34;&gt;NIP-59 (Gift Wrap)&lt;/a&gt; to encrypt content: the author creates a regular note, then gift-wraps copies to each mutual follow. Each recipient&amp;#39;s copy is encrypted to their pubkey using NIP-44 and sent via the gift wrap mechanism. Recipients can verify the note came from someone they follow, while non-mutuals cannot access the content. This approach reuses existing cryptographic infrastructure while enabling a frequently requested privacy feature.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/hzrd149/nostr-bucket&#34;&gt;NIP-DB: Browser Nostr Event Database Interface&lt;/a&gt;&lt;/strong&gt; - Proposes a standard &lt;code&gt;window.nostrdb&lt;/code&gt; interface for browser extensions that provide local Nostr event storage. The API includes methods for adding events, querying by ID or filter, counting matches, and subscribing to updates. Web applications can use this interface to read from locally cached events without making relay requests, reducing bandwidth and latency. hzrd149&amp;#39;s &lt;a href=&#34;https://github.com/hzrd149/nostr-bucket&#34;&gt;nostr-bucket&lt;/a&gt; browser extension provides a reference implementation, injecting the interface into all browser tabs. A companion &lt;a href=&#34;https://github.com/hzrd149/window.nostrdb.js&#34;&gt;polyfill library&lt;/a&gt; implements the same API using IndexedDB for environments without the extension.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1534&#34;&gt;TRUSTed Filters&lt;/a&gt;&lt;/strong&gt; - A suite of five related proposals for decentralized content curation, building on vitorpamplona&amp;#39;s &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1534&#34;&gt;Trusted Assertions PR #1534&lt;/a&gt;. The core specification introduces kind 17570 events for declaring Trust Provider Preferences, allowing users to specify which services they trust for event filtering and ranking. Trust providers publish assertions (kind 37571), statistics (kind 37572), and rankings (kind 37573) that clients can subscribe to. The system uses a plugin architecture with W/w tags to specify filter types and transformations. This enables computationally expensive operations like spam detection, reputation scoring, and content ranking to run on dedicated infrastructure while users maintain control over which providers they trust. The suite includes separate specs for filter presets, user rankings, trusted events, and plugin definitions.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2194&#34;&gt;NIP-9a: Push Notifications&lt;/a&gt;&lt;/strong&gt; - hodlbod proposes a standard for relay-based push notifications using kind 30390 registration events. Users create a registration containing filters for events they want to receive and a webhook callback URL. The registration is encrypted to the relay&amp;#39;s pubkey (from its NIP-11 &lt;code&gt;self&lt;/code&gt; field). When matching events occur, relays POST to the callback with the event ID (plaintext for deduplication) and the event itself (NIP-44 encrypted to the user). This architecture lets relays push notifications while protecting event content from intermediary push servers. Flotilla&amp;#39;s &lt;a href=&#34;https://github.com/coracle-social/flotilla/pull/270&#34;&gt;PR #270&lt;/a&gt; implements this standard.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/SigmaEnterprise/Catallax&#34;&gt;Catallax&lt;/a&gt;&lt;/strong&gt; - Proposes a decentralized contract work protocol with escrow using kind 33400 events. The system defines three roles: arbiters announce availability and terms, patrons create funded tasks with escrowed Bitcoin, and free agents complete work to claim payment. Arbiters resolve disputes when needed. The protocol enables trustless freelance work coordination where funds are locked until deliverables are accepted or arbitration concludes.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;nip-deep-dive-nip-47-nostr-wallet-connect-2&#34;&gt;NIP Deep Dive: NIP-47 (Nostr Wallet Connect)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.com/en/topics/nip-47/&#34;&gt;NIP-47&lt;/a&gt; defines Nostr Wallet Connect (NWC), a protocol for remote Lightning wallet control using Nostr as the communication layer. With this week&amp;#39;s hold invoice support addition, NWC now covers the full range of Lightning operations.&lt;/p&gt;

&lt;p&gt;The protocol works through a simple exchange. A wallet application publishes a &amp;#34;wallet info&amp;#34; event (kind 13194) describing its capabilities. Client applications send encrypted requests (kind 23194) asking the wallet to perform operations like paying invoices, creating invoices, or checking balances. The wallet responds with encrypted results (kind 23195).&lt;/p&gt;

&lt;p&gt;NWC uses &lt;a href=&#34;https://nostrcompass.com/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; encryption between the client and wallet, with a dedicated keypair for wallet operations, keeping it separate from the user&amp;#39;s main identity. This separation means compromising an NWC connection does not expose the user&amp;#39;s Nostr identity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Supported Methods:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The spec defines methods for core Lightning operations: &lt;code&gt;pay_invoice&lt;/code&gt; sends payments, &lt;code&gt;make_invoice&lt;/code&gt; generates invoices for receiving, &lt;code&gt;lookup_invoice&lt;/code&gt; checks payment status, &lt;code&gt;get_balance&lt;/code&gt; returns the wallet balance, and &lt;code&gt;list_transactions&lt;/code&gt; provides payment history. The newly merged &lt;code&gt;pay_keysend&lt;/code&gt; enables payments without invoices, and &lt;code&gt;hold_invoice&lt;/code&gt; supports conditional payments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example Events:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The wallet service publishes an info event (kind 13194) advertising its capabilities:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;kind&amp;#34;: 13194,
  &amp;#34;pubkey&amp;#34;: &amp;#34;&amp;lt;wallet service pubkey&amp;gt;&amp;#34;,
  &amp;#34;content&amp;#34;: &amp;#34;pay_invoice get_balance make_invoice lookup_invoice list_transactions notifications&amp;#34;,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;encryption&amp;#34;, &amp;#34;nip44_v2&amp;#34;],
    [&amp;#34;notifications&amp;#34;, &amp;#34;payment_received payment_sent&amp;#34;]
  ],
  &amp;#34;created_at&amp;#34;: &amp;#34;&amp;lt;unix timestamp&amp;gt;&amp;#34;,
  &amp;#34;id&amp;#34;: &amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;&amp;lt;wallet service signature&amp;gt;&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;A client sends an encrypted request (kind 23194) to pay an invoice:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;kind&amp;#34;: 23194,
  &amp;#34;pubkey&amp;#34;: &amp;#34;&amp;lt;client ephemeral pubkey from connection URI secret&amp;gt;&amp;#34;,
  &amp;#34;content&amp;#34;: &amp;#34;&amp;lt;NIP-44 encrypted: {\&amp;#34;method\&amp;#34;: \&amp;#34;pay_invoice\&amp;#34;, \&amp;#34;params\&amp;#34;: {\&amp;#34;invoice\&amp;#34;: \&amp;#34;lnbc50n1...\&amp;#34;}}&amp;gt;&amp;#34;,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;p&amp;#34;, &amp;#34;&amp;lt;wallet service pubkey&amp;gt;&amp;#34;],
    [&amp;#34;encryption&amp;#34;, &amp;#34;nip44_v2&amp;#34;]
  ],
  &amp;#34;created_at&amp;#34;: &amp;#34;&amp;lt;unix timestamp&amp;gt;&amp;#34;,
  &amp;#34;id&amp;#34;: &amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;&amp;lt;client ephemeral key signature&amp;gt;&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The wallet service responds (kind 23195) with the payment result:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;kind&amp;#34;: 23195,
  &amp;#34;pubkey&amp;#34;: &amp;#34;&amp;lt;wallet service pubkey&amp;gt;&amp;#34;,
  &amp;#34;content&amp;#34;: &amp;#34;&amp;lt;NIP-44 encrypted: {\&amp;#34;result_type\&amp;#34;: \&amp;#34;pay_invoice\&amp;#34;, \&amp;#34;result\&amp;#34;: {\&amp;#34;preimage\&amp;#34;: \&amp;#34;...\&amp;#34;}, \&amp;#34;error\&amp;#34;: null}&amp;gt;&amp;#34;,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;p&amp;#34;, &amp;#34;&amp;lt;client ephemeral pubkey&amp;gt;&amp;#34;],
    [&amp;#34;e&amp;#34;, &amp;#34;&amp;lt;request event id&amp;gt;&amp;#34;]
  ],
  &amp;#34;created_at&amp;#34;: &amp;#34;&amp;lt;unix timestamp&amp;gt;&amp;#34;,
  &amp;#34;id&amp;#34;: &amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;&amp;lt;wallet service signature&amp;gt;&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The &lt;code&gt;e&lt;/code&gt; tag in the response references the original request, allowing clients to match responses to their requests.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hold Invoices:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This week&amp;#39;s &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1913&#34;&gt;PR #1913&lt;/a&gt; added hold invoice support, enabling escrow-style payments. Unlike standard invoices where the recipient immediately claims payment by releasing the preimage, hold invoices let the recipient defer this decision. When a payer sends to a hold invoice, funds lock along the payment route. The recipient then chooses to either settle (release the preimage and claim funds) or cancel (reject payment, returning funds to the payer). If neither action occurs, the payment times out and funds return automatically. The PR adds three NWC methods: &lt;code&gt;make_hold_invoice&lt;/code&gt;, &lt;code&gt;settle_hold_invoice&lt;/code&gt;, and &lt;code&gt;cancel_hold_invoice&lt;/code&gt;, plus a &lt;code&gt;hold_invoice_accepted&lt;/code&gt; notification. This mechanism powers applications like Ridestr&amp;#39;s rideshare escrow and marketplace dispute resolution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Current Implementations:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Major wallets support NWC: Zeus, Alby, and Primal (as of this week&amp;#39;s &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/874&#34;&gt;PR #874&lt;/a&gt;) all implement wallet-side support. On the client side, Damus, Amethyst, and most major Nostr clients can connect to NWC wallets for zapping and payments.&lt;/p&gt;

&lt;p&gt;The protocol enables a separation of concerns: users can run their wallet on one device while interacting with Nostr from another, with Nostr relays serving as the communication channel. This architecture means mobile clients do not need to hold funds directly, improving security by keeping wallet infrastructure separate from social clients.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security Considerations:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;NWC connections should be treated as sensitive. While the encryption protects message content, the wallet pubkey and connection secret must be guarded. Applications should allow users to revoke connections and set spending limits. The protocol supports capability restrictions, so wallets can limit what operations a particular connection can perform.&lt;/p&gt;

&lt;h2 id=&#34;nip-deep-dive-nip-59-gift-wrap-2&#34;&gt;NIP Deep Dive: NIP-59 (Gift Wrap)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.com/en/topics/nip-59/&#34;&gt;NIP-59&lt;/a&gt; defines a protocol for encapsulating any Nostr event in multiple layers of encryption, hiding the sender&amp;#39;s identity from relays and observers. This week&amp;#39;s proposals for friends-only notes (NIP-FR) and push notifications (NIP-9a) both rely on gift wrapping, making it a foundational privacy primitive worth understanding.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Three Layers:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Gift wrapping uses three nested structures:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rumor&lt;/strong&gt; (unsigned event): The original content as a Nostr event without a signature. The rumor cannot be sent directly to relays because relays reject unsigned events.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Seal&lt;/strong&gt; (kind 13): The rumor is encrypted using &lt;a href=&#34;https://nostrcompass.com/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; and placed in a kind 13 event. The seal IS signed by the actual author&amp;#39;s key. This is the cryptographic proof of authorship.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Gift Wrap&lt;/strong&gt; (kind 1059): The seal is encrypted and placed in a kind 1059 event signed by a random, one-time keypair. The gift wrap includes a &lt;code&gt;p&lt;/code&gt; tag for routing to the recipient.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;A Common Misconception: Deniability&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The spec mentions that unsigned rumors provide &amp;#34;deniability,&amp;#34; but this is misleading. The seal layer IS signed by the real author. When the recipient decrypts the gift wrap and then the seal, they have cryptographic proof of who sent the message. The recipient could even construct a zero-knowledge proof revealing the sender&amp;#39;s identity without exposing their own private key.&lt;/p&gt;

&lt;p&gt;What gift wrap actually provides is &lt;strong&gt;sender privacy from observers&lt;/strong&gt;: relays and third parties cannot determine who sent the message because they only see the gift wrap signed by a random key. But the recipient always knows, and can prove it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example Events:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here is the complete three-layer structure from the spec (sending &amp;#34;Are you going to the party tonight?&amp;#34;):&lt;/p&gt;

&lt;p&gt;The rumor (unsigned, cannot be published to relays):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;created_at&amp;#34;: 1691518405,
  &amp;#34;content&amp;#34;: &amp;#34;Are you going to the party tonight?&amp;#34;,
  &amp;#34;tags&amp;#34;: [],
  &amp;#34;kind&amp;#34;: 1,
  &amp;#34;pubkey&amp;#34;: &amp;#34;611df01bfcf85c26ae65453b772d8f1dfd25c264621c0277e1fc1518686faef9&amp;#34;,
  &amp;#34;id&amp;#34;: &amp;#34;9dd003c6d3b73b74a85a9ab099469ce251653a7af76f523671ab828acd2a0ef9&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The seal (kind 13, signed by real author, contains encrypted rumor):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;kind&amp;#34;: 13,
  &amp;#34;pubkey&amp;#34;: &amp;#34;611df01bfcf85c26ae65453b772d8f1dfd25c264621c0277e1fc1518686faef9&amp;#34;,
  &amp;#34;content&amp;#34;: &amp;#34;AqBCdwoS7/tPK&#43;QGkPCadJTn8FxGkd24iApo3BR9/M0uw6n4RFAFSPAKKMgkzVMo...&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1703015180,
  &amp;#34;tags&amp;#34;: [],
  &amp;#34;id&amp;#34;: &amp;#34;28a87d7c074d94a58e9e89bb3e9e4e813e2189f285d797b1c56069d36f59eaa7&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;02fc3facf6621196c32912b1ef53bac8f8bfe9db51c0e7102c073103586b0d29...&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The gift wrap (kind 1059, signed by random ephemeral key, contains encrypted seal):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;kind&amp;#34;: 1059,
  &amp;#34;pubkey&amp;#34;: &amp;#34;18b1a75918f1f2c90c23da616bce317d36e348bcf5f7ba55e75949319210c87c&amp;#34;,
  &amp;#34;content&amp;#34;: &amp;#34;AhC3Qj/QsKJFWuf6xroiYip&#43;2yK95qPwJjVvFujhzSguJWb/6TlPpBW0CGFwfuf...&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1703021488,
  &amp;#34;tags&amp;#34;: [[&amp;#34;p&amp;#34;, &amp;#34;166bf3765ebd1fc55decfe395beff2ea3b2a4e0a8946e7eb578512b555737c99&amp;#34;]],
  &amp;#34;id&amp;#34;: &amp;#34;5c005f3ccf01950aa8d131203248544fb1e41a0d698e846bd419cec3890903ac&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;35fabdae4634eb630880a1896a886e40fd6ea8a60958e30b89b33a93e6235df7...&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Notice: the seal&amp;#39;s &lt;code&gt;pubkey&lt;/code&gt; is the real author (&lt;code&gt;611df01...&lt;/code&gt;), while the gift wrap&amp;#39;s &lt;code&gt;pubkey&lt;/code&gt; is a random one-time key (&lt;code&gt;18b1a75...&lt;/code&gt;). Relays only see the gift wrap, so they cannot attribute the message to the real author.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Each Layer Protects:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The rumor is unsigned and cannot be published to relays directly. The seal is signed by the real author and proves authorship to the recipient. The gift wrap is signed by a random one-time key, hiding the real author from relays and observers. Only the recipient can decrypt through both layers to reach the original content and verify the author&amp;#39;s signature on the seal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Current Applications:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.com/en/topics/nip-17/&#34;&gt;NIP-17 (Private Direct Messages)&lt;/a&gt; uses gift wrap for encrypted DMs, replacing the older NIP-04 scheme. The proposed NIP-FR (friends-only notes) gift-wraps notes to each mutual follow. NIP-9a (push notifications) encrypts notification payloads using gift wrap principles.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Metadata Protection:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Timestamps should be randomized to thwart timing analysis. Relays should require AUTH before serving kind 1059 events and only serve them to the marked recipient. When sending to multiple recipients, create separate gift wraps for each.&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;That&amp;#39;s it for this week. Building something? Have news to share? Want us to cover your project? Reach out via DM or find us on Nostr.&lt;/p&gt;
 &lt;/blockquote&gt;
    </content>
    <updated>2026-02-04T15:56:25Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsvsx2d6gg0pw6gdcsnzmsrxxzmra4mpfgtn07ql5rruu7uv8ppn5qzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqu9exn7</id>
    
      <title type="html">Nostr Compass Podcast #7 Ridestr builds decentralized ridesharing ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsvsx2d6gg0pw6gdcsnzmsrxxzmra4mpfgtn07ql5rruu7uv8ppn5qzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqu9exn7" />
    <content type="html">
      Nostr Compass Podcast #7&lt;br/&gt;&lt;br/&gt;Ridestr builds decentralized ridesharing with Cashu. Pomade adds email-based multisig recovery. Damus ships negentropy. Five years of Nostr. The participants discuss decentralized ridesharing with Ridestr, multisig key recovery via Pomade, and Damus’s new DM sync via negentropy. We review client updates across Amethyst, Amber, Marmot, and Shopstr — plus major NIP proposals for encrypted sync, file storage, and community management. Finally, we reflect on five years of Nostr&amp;#39;s evolution.&lt;br/&gt;&lt;br/&gt;&lt;video controls width=&#34;100%&#34; class=&#34;max-h-[90vh] bg-neutral-300 dark:bg-zinc-700&#34;&gt;&lt;source src=&#34;https://blossom.primal.net/e5a05d9413d4a9a15b2375bc2a93dec5b13bbe0c95c3d12662f3b6460ed00ba7.ogg&#34;&gt;&lt;/video&gt;&lt;br/&gt;&lt;br/&gt;#podcast
    </content>
    <updated>2026-02-04T15:37:24Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsp9cw28jnzf7h07p55szyxtuaqryxsf7ux8qwd665rk438f85kuvszypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqgtkhzc</id>
    
      <title type="html">Nostr Compass Podcast #7 Ridestr builds decentralized ridesharing ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsp9cw28jnzf7h07p55szyxtuaqryxsf7ux8qwd665rk438f85kuvszypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqgtkhzc" />
    <content type="html">
      In reply to &lt;a href=&#39;/naddr1qq0k2urfwdhkgefdxymnwvpjxymnxdejxsuryttrvsmhs6t58qekgq3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqp6kvhs00j3&#39;&gt;naddr1qq…00j3&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;Nostr Compass Podcast #7&lt;br/&gt;&lt;br/&gt;Ridestr builds decentralized ridesharing with Cashu. Pomade adds email-based multisig recovery. Damus ships negentropy. Five years of Nostr. The participants discuss decentralized ridesharing with Ridestr, multisig key recovery via Pomade, and Damus’s new DM sync via negentropy. We review client updates across Amethyst, Amber, Marmot, and Shopstr — plus major NIP proposals for encrypted sync, file storage, and community management. Finally, we reflect on five years of Nostr&amp;#39;s evolution.&lt;br/&gt;&lt;br/&gt;
    </content>
    <updated>2026-02-04T15:26:22Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs8pjfe67md59dc2qng50sa9x234th87ye7dt8re5qf0439w6zcamszypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq5jtu27</id>
    
      <title type="html">Yes, here is the rss: https://podcast.nostrcompass.org/rss.xml</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs8pjfe67md59dc2qng50sa9x234th87ye7dt8re5qf0439w6zcamszypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq5jtu27" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxt5kcwuvq75mpylwl27ymm5p70ekjwtnpkn24khepap4ly7g2tjcpzpmhxue69uhkummnw3ezumt0d5hshrj0pn&#39;&gt;nevent1q…j0pn&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;Yes, here is the rss: &lt;a href=&#34;https://podcast.nostrcompass.org/rss.xml&#34;&gt;https://podcast.nostrcompass.org/rss.xml&lt;/a&gt;
    </content>
    <updated>2026-01-30T13:23:56Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs2qck67kzgr26zynp472u23hkm5lnsmh6242565tf4c98qgylk56gzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqlx3rtv</id>
    
      <title type="html">Nostr Compass Podcast #6 Bitchat ditches C Tor for Rust Tor, we ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs2qck67kzgr26zynp472u23hkm5lnsmh6242565tf4c98qgylk56gzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqlx3rtv" />
    <content type="html">
      Nostr Compass Podcast #6&lt;br/&gt;&lt;br/&gt;Bitchat ditches C Tor for Rust Tor, we explore how AI is reviving abandoned Nostr projects, with JeffG sharing how he resurrected Listr after a year of dormancy. The panel debates relay trust assertions and whether standardized scoring helps or hurts decentralization. Post-quantum cryptography gets a reality check: 105 qubits today versus the million needed to break current crypto. Plus release updates from Amber, Zeus, Primal,  White Noise, and NostrDB&amp;#39;s new streaming queries.&lt;br/&gt;&lt;br/&gt;&lt;video controls width=&#34;100%&#34; class=&#34;max-h-[90vh] bg-neutral-300 dark:bg-zinc-700&#34;&gt;&lt;source src=&#34;https://blossom.primal.net/f55d32533ebeb053d51674e0f9671c8bca9aae0f9768f6037627559e04b6bb53.ogg&#34;&gt;&lt;/video&gt;&lt;br/&gt;&lt;br/&gt;#podcast #nostr&lt;br/&gt;&lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1zuuajd7u3sx8xu92yav9jwxpr839cs0kc3q6t56vd5u9q033xmhsk6c2uc&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;JeffG&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1zuu…c2uc&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1q6mcr8tlr3l4gus3sfnw6772s7zae6hqncmw5wj27ejud5wcxf7q0nx7d5&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Tim Bouma&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1q6m…x7d5&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1m2jphmdkskgnvwl5gplksl9e0zwv2sldqf9mwlpz6tyymz84g9fsqr3wgu&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Geek&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1m2j…3wgu&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1jgm0ntzjr03wuzj5788llhed7l6fst05um4ej2r86ueaa08etv6sgd669p&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;jgmontoya&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1jgm…669p&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1ye5ptcxfyyxl5vjvdjar2ua3f0hynkjzpx552mu5snj3qmx5pzjscpknpr&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;hzrd149&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1ye5…knpr&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1klkk3vrzme455yh9rl2jshq7rc8dpegj3ndf82c3ks2sk40dxt7qulx3vt&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Max&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1klk…x3vt&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; 
    </content>
    <updated>2026-01-29T16:09:29Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsgw2hdqegauyhneqx72ljfcj6kx8tq7xakvjrprc08p39twux9rxgzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqudwky3</id>
    
      <title type="html">We&amp;#39;ve migrated out podcast over to podstr.org Now you can ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsgw2hdqegauyhneqx72ljfcj6kx8tq7xakvjrprc08p39twux9rxgzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqudwky3" />
    <content type="html">
      We&amp;#39;ve migrated out podcast over to podstr.org &lt;br/&gt;&lt;br/&gt;Now you can listen to the episodes on podcast.nostrcompass.org or subscribe to our RSS feed in any podcasting app on podcast.nostrcompass.org/rss.xml
    </content>
    <updated>2026-01-28T17:33:43Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsdaze2n5wx9h3fpmcchw5ckzlau6qnxvqvppjqk3ld952njcelg5czypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq4da3y2</id>
    
      <title type="html">Nostr Compass #7 is out. This week: someone&amp;#39;s actually ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsdaze2n5wx9h3fpmcchw5ckzlau6qnxvqvppjqk3ld952njcelg5czypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq4da3y2" />
    <content type="html">
      Nostr Compass #7 is out. &lt;br/&gt;&lt;br/&gt;This week: someone&amp;#39;s actually building Uber on Nostr: Ridestr uses Cashu escrow for trustless rides. Damus finally fixes those missing DMs with negentropy sync. We also traced Nostr&amp;#39;s full journey every January from 7 relays and a Hacker News thread in 2021 to audited infrastructure today. &lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/naddr1qqgrsvt9v4jrzdfexq6rwvtrv3jxxq3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqp65wqra22k&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;naddr1qq…a22k&lt;/a&gt;&lt;/span&gt; &lt;/div&gt; &lt;p&gt;Welcome back to Nostr Compass, your weekly guide to Nostr.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This week:&lt;/strong&gt; Ridestr brings decentralized ridesharing to Nostr with &lt;a href=&#34;https://nostrcompass.org/en/topics/cashu/&#34;&gt;Cashu&lt;/a&gt; payments and encrypted location sharing. Pomade introduces email-based recovery for multisig signers. Damus ships &lt;a href=&#34;https://nostrcompass.org/en/topics/negentropy/&#34;&gt;negentropy&lt;/a&gt; for reliable DM syncing. Amethyst&amp;#39;s desktop app adds search, bookmarks, and zaps. Amber v4.1.1 displays relay trust scores. Marmot merges MIP-03 and builds a TypeScript reference chat app. diVine adds &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; QR authentication and mentions support. New NIP proposals address community management, sequence-based sync, and encrypted file storage. We also take a look back at five years of Nostr Januaries, tracing the protocol&amp;#39;s evolution from a handful of early adopters in 2021 through Damus&amp;#39;s explosive App Store launch in 2023 to the maturing client ecosystem of 2025.&lt;/p&gt;

&lt;h2 id=&#34;news-29&#34;&gt;News&lt;/h2&gt;

&lt;h3 id=&#34;ridestr-brings-decentralized-ridesharing-to-nostr-2&#34;&gt;Ridestr Brings Decentralized Ridesharing to Nostr&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/variablefate/ridestr&#34;&gt;Ridestr&lt;/a&gt; is developing a peer-to-peer rideshare application built entirely on Nostr, enabling direct driver-rider transactions with Bitcoin and &lt;a href=&#34;https://nostrcompass.org/en/topics/cashu/&#34;&gt;Cashu&lt;/a&gt; payments. The protocol uses custom event kinds (30173, 3173-3175, 30180/30181) to coordinate rides while maintaining privacy through progressive location disclosure and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; encryption.&lt;/p&gt;

&lt;p&gt;The system works through a carefully choreographed flow: drivers broadcast availability using geohash-encoded locations (~5km precision) via kind 30173 events, riders request rides with fare estimates through kind 3173, and payments are secured using HTLC escrow tokens before the ride begins. Location privacy is preserved through progressive disclosure, where pickup details are only revealed when drivers arrive and destinations are shared after PIN verification. All communication between parties uses &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; encryption for privacy.&lt;/p&gt;

&lt;p&gt;Ridestr implements payment security through HTLC escrow with P2PK signatures. When a rider accepts a driver&amp;#39;s offer, they lock &lt;a href=&#34;https://nostrcompass.org/en/topics/cashu/&#34;&gt;Cashu&lt;/a&gt; tokens with a payment hash that only the driver can claim after ride completion. The protocol currently operates with single-mint architecture, requiring riders and drivers to use the same &lt;a href=&#34;https://nostrcompass.org/en/topics/cashu/&#34;&gt;Cashu&lt;/a&gt; mint. The project&amp;#39;s Kotlin-based Android implementation handles proof verification and recovery of stale proofs through NUT-07 state checks.&lt;/p&gt;

&lt;p&gt;Ridestr tackles challenges that most Nostr applications avoid: real-time location coordination, payment escrow with dispute resolution, and reputation systems for physical-world interactions. The project is in beta and demonstrates that Nostr&amp;#39;s event model can support peer-to-peer service marketplaces, not just content sharing.&lt;/p&gt;

&lt;h3 id=&#34;pomade-launches-alpha-recovery-system-for-multisig-signers-2&#34;&gt;Pomade Launches Alpha Recovery System for Multisig Signers&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/coracle-social/pomade&#34;&gt;Pomade&lt;/a&gt;, developed by hodlbod, builds on the existing &lt;a href=&#34;https://github.com/FROSTR-ORG&#34;&gt;FROSTR&lt;/a&gt; ecosystem to provide a recovery-focused threshold signing service. Using &lt;a href=&#34;https://nostrcompass.org/en/topics/frost/&#34;&gt;FROST&lt;/a&gt; (Flexible Round-Optimized Schnorr Threshold) signatures via the @frostr/bifrost library, Pomade adds email-based recovery flows on top of the threshold cryptography. The system shards a user&amp;#39;s secret key using Shamir Secret Sharing, distributing shares across multiple independent signers with a configurable threshold (2-of-3, 3-of-5, etc.).&lt;/p&gt;

&lt;p&gt;The protocol operates entirely over Nostr using a single event kind (28350) with &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; encrypted payloads. When signing, the client requests partial signatures from at least &lt;code&gt;threshold&lt;/code&gt; signers, then aggregates these into a valid Schnorr signature. For encryption, signers collaborate to derive shared secrets via ECDH without any single party learning the full key.&lt;/p&gt;

&lt;p&gt;Recovery works through two authentication methods: password-based (using argon2id with the signer&amp;#39;s pubkey as salt) or email OTP. To prevent MITM attacks during OTP recovery, each signer generates its own verification code with a client-provided prefix, requiring users to authenticate independently with each signer. The protocol requires proof-of-work on registration events (20&#43; bits per &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-13/&#34;&gt;NIP-13&lt;/a&gt;) to prevent spam.&lt;/p&gt;

&lt;p&gt;The trust model is explicit: if &lt;code&gt;threshold&lt;/code&gt; signers collude, they can steal the key. Email providers are fully trusted since they can intercept OTPs. Users cannot independently recover their full secret key; doing so requires cooperation from &lt;code&gt;threshold&lt;/code&gt; signers. The protocol is designed for onboarding new users unfamiliar with key management, with the explicit recommendation that users migrate to self-custody once comfortable. Pomade warns about potential &amp;#34;key loss, theft, denial of service, or metadata leakage&amp;#34; given its unaudited alpha status.&lt;/p&gt;

&lt;h2 id=&#34;releases-35&#34;&gt;Releases&lt;/h2&gt;

&lt;h3 id=&#34;damus-ships-negentropy-for-reliable-dm-syncing-2&#34;&gt;Damus Ships Negentropy for Reliable DM Syncing&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/damus-io/damus/releases/tag/v1.13-6&#34;&gt;Damus v1.13&lt;/a&gt; ships the negentropy implementation &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-01-21-newsletter/#damus-ios-client---open-prs&#34;&gt;we previewed as an open PR last week&lt;/a&gt;. &lt;a href=&#34;https://github.com/damus-io/damus/pull/3536&#34;&gt;PR #3536&lt;/a&gt; adds base &lt;a href=&#34;https://nostrcompass.org/en/topics/negentropy/&#34;&gt;negentropy&lt;/a&gt; support to the networking layer, enabling set reconciliation with relays that support the protocol. A companion &lt;a href=&#34;https://github.com/damus-io/damus/pull/3547&#34;&gt;PR #3547&lt;/a&gt; adds pull-to-refresh DM syncing that uses negentropy to recover missing messages when standard REQ subscriptions fail.&lt;/p&gt;

&lt;p&gt;The implementation follows a conservative approach: normal DM loading continues unchanged, with &lt;a href=&#34;https://nostrcompass.org/en/topics/negentropy/&#34;&gt;negentropy&lt;/a&gt; available as a recovery mechanism when users manually refresh. Automated tests demonstrate the fix by generating a DM with an old timestamp that standard queries would miss, then using &lt;a href=&#34;https://nostrcompass.org/en/topics/negentropy/&#34;&gt;negentropy&lt;/a&gt; sync to successfully retrieve it. While &lt;a href=&#34;https://nostrcompass.org/en/topics/negentropy/&#34;&gt;negentropy&lt;/a&gt; support requires compatible relays, the implementation gracefully handles mixed relay environments by using the protocol where available.&lt;/p&gt;

&lt;h3 id=&#34;amber-v4-1-1-relay-trust-scores-2&#34;&gt;Amber v4.1.1 - Relay Trust Scores&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/greenart7c3/Amber/releases/tag/v4.1.1&#34;&gt;Amber v4.1.1&lt;/a&gt; ships relay trust score display (&lt;a href=&#34;https://github.com/greenart7c3/Amber/pull/289&#34;&gt;PR #289&lt;/a&gt;), implementing the relay evaluation concepts discussed in &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-01-21-newsletter/#nip-updates&#34;&gt;last week&amp;#39;s Trusted Relay Assertions NIP coverage&lt;/a&gt;. Trust scores now appear in the Relays page and for NostrConnect connection requests, helping users assess relay reliability before authorizing connections. The release also includes a redesigned login/events/permissions UI and support for the &lt;code&gt;switch_relays&lt;/code&gt; method. Performance improvements cache keystore operations, addressing reports of 20&#43; second load times on older devices.&lt;/p&gt;

&lt;h3 id=&#34;nak-v0-18-2-mcp-integration-2&#34;&gt;nak v0.18.2 - MCP Integration&lt;/h3&gt;

&lt;p&gt;fiatjaf&amp;#39;s &lt;a href=&#34;https://github.com/fiatjaf/nak&#34;&gt;nak&lt;/a&gt; (Nostr Army Knife) &lt;a href=&#34;https://github.com/fiatjaf/nak/releases/tag/v0.18.2&#34;&gt;v0.18.2&lt;/a&gt; adds &lt;a href=&#34;https://nostrify.dev/mcp&#34;&gt;Model Context Protocol&lt;/a&gt; support via &lt;code&gt;nak mcp&lt;/code&gt;, enabling AI agents to search for people on Nostr, publish notes, mention users, and read content using the outbox model. The release also introduces a &lt;a href=&#34;https://github.com/fiatjaf/nak/blob/master/install.sh&#34;&gt;one-line installer&lt;/a&gt; (&lt;code&gt;curl -sSL https://raw.githubusercontent.com/fiatjaf/nak/master/install.sh | sh&lt;/code&gt;) that downloads pre-built binaries, eliminating the Go toolchain requirement for end users. Bunker mode now supports Unix sockets and &lt;code&gt;switch_relays&lt;/code&gt;.&lt;/p&gt;

&lt;h3 id=&#34;zeus-v0-12-2-beta-nwc-fixes-2&#34;&gt;Zeus v0.12.2 Beta - NWC Fixes&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/ZeusLN/zeus/releases&#34;&gt;Zeus v0.12.2-beta1&lt;/a&gt; ships multiple NWC fixes addressing issues covered in &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-01-21-newsletter/#zeus-lightning-wallet-with-nostr-wallet-connect&#34;&gt;last week&amp;#39;s Zeus coverage&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&#34;project-updates-26&#34;&gt;Project Updates&lt;/h2&gt;

&lt;h3 id=&#34;amethyst-desktop-phase-2a-ships-2&#34;&gt;Amethyst Desktop - Phase 2A Ships&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/vitorpamplona/amethyst&#34;&gt;Amethyst&lt;/a&gt; rolled out &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/1676&#34;&gt;Phase 2A of its desktop app&lt;/a&gt;, adding Search, Bookmarks, Zaps, Thread views, and long-form content (Reads) to the desktop experience. A companion &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/1683&#34;&gt;PR #1683&lt;/a&gt; adds transparent event broadcasting feedback so users now see real-time per-relay status as their events propagate across the network, making it easier to diagnose connectivity issues.&lt;/p&gt;

&lt;h3 id=&#34;notedeck-progress-calendar-app-and-ux-polish-2&#34;&gt;Notedeck Progress: Calendar App and UX Polish&lt;/h3&gt;

&lt;p&gt;The Damus team&amp;#39;s &lt;a href=&#34;https://github.com/damus-io/notedeck&#34;&gt;Notedeck&lt;/a&gt; desktop client merged auto-hide toolbar behavior (&lt;a href=&#34;https://github.com/damus-io/notedeck/pull/1268&#34;&gt;PR #1268&lt;/a&gt;) that responds to scroll velocity for more screen space on mobile views. A &lt;a href=&#34;https://github.com/damus-io/notedeck/pull/1271&#34;&gt;draft PR #1271&lt;/a&gt; adds a full &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-52/&#34;&gt;NIP-52&lt;/a&gt; Calendar app with month/week/day/agenda views, RSVP support, and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-22/&#34;&gt;NIP-22&lt;/a&gt; comments on calendar events, currently feature-flagged for testing.&lt;/p&gt;

&lt;h3 id=&#34;jumble-adds-community-mode-2&#34;&gt;Jumble Adds Community Mode&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/CodyTseng/jumble&#34;&gt;Jumble&lt;/a&gt;, the relay-focused web client, added &lt;a href=&#34;https://github.com/CodyTseng/jumble/pull/738&#34;&gt;community mode&lt;/a&gt; and support for &lt;a href=&#34;https://github.com/CodyTseng/jumble/pull/736&#34;&gt;relay set presets via environment variables&lt;/a&gt;, making it easier to deploy themed instances like &lt;a href=&#34;https://nostr.moe/&#34;&gt;nostr.moe&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&#34;shopstr-orders-dashboard-2&#34;&gt;Shopstr Orders Dashboard&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/shopstr-eng/shopstr&#34;&gt;Shopstr&lt;/a&gt; replaced its chat-based order management with a dedicated &lt;a href=&#34;https://github.com/shopstr-eng/shopstr/pull/219&#34;&gt;Orders Dashboard&lt;/a&gt;. The new interface provides a centralized view for merchants to track order status, mark messages as read, and manage fulfillment without scrolling through chat threads. The update deprecates IndexedDB caching in favor of server-side order status APIs and revises how order DMs are tagged for better filtering.&lt;/p&gt;

&lt;h3 id=&#34;formstr-adds-grid-questions-2&#34;&gt;Formstr Adds Grid Questions&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/abh3po/nostr-forms&#34;&gt;Formstr&lt;/a&gt;, the Nostr-native forms app, added &lt;a href=&#34;https://github.com/abh3po/nostr-forms/pull/419&#34;&gt;grid questions&lt;/a&gt; and &lt;a href=&#34;https://github.com/abh3po/nostr-forms/pull/410&#34;&gt;rewrote its SDK&lt;/a&gt; with embed support. A &lt;a href=&#34;https://github.com/abh3po/nostr-forms/pull/418&#34;&gt;fix for non-NIP-07 signers&lt;/a&gt; resolved issues for users with bunker or local signers trying to submit forms with their identity.&lt;/p&gt;

&lt;h3 id=&#34;nostr-tools-upgrades-crypto-dependencies-2&#34;&gt;nostr-tools Upgrades Crypto Dependencies&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nbd-wtf/nostr-tools&#34;&gt;nostr-tools&lt;/a&gt;, the core JavaScript library, &lt;a href=&#34;https://github.com/nbd-wtf/nostr-tools/pull/520&#34;&gt;upgraded to @noble/curves v2.0.1&lt;/a&gt;, addressing breaking API changes across 27 files and adopting the latest audited noble libraries. fiatjaf also added &lt;code&gt;switch_relays&lt;/code&gt; support to &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt;, enabling bunker clients to dynamically change relay connections.&lt;/p&gt;

&lt;h3 id=&#34;zeus-working-on-nip-87-mint-reviews-2&#34;&gt;Zeus Working on NIP-87 Mint Reviews&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/ZeusLN/zeus&#34;&gt;Zeus&lt;/a&gt; has an &lt;a href=&#34;https://github.com/ZeusLN/zeus/pull/3576&#34;&gt;open PR for NIP-87 mint reviews&lt;/a&gt;, allowing users to discover and review &lt;a href=&#34;https://nostrcompass.org/en/topics/cashu/&#34;&gt;Cashu&lt;/a&gt; mints filtered by Nostr follows. Reviews include star ratings and can be submitted anonymously or with a user&amp;#39;s nsec.&lt;/p&gt;

&lt;h3 id=&#34;camelus-ships-full-dm-support-2&#34;&gt;Camelus Ships Full DM Support&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/camelus-hq/camelus&#34;&gt;Camelus&lt;/a&gt;, a Flutter-based Android client built with Dart NDK for battery-efficient mobile performance, added comprehensive direct messaging with 20&#43; commits this week. The update includes chat categories, message dates, optimistic send UI, note-to-self functionality, and proper DM relay handling.&lt;/p&gt;

&lt;h3 id=&#34;marmot-protocol-updates-2&#34;&gt;Marmot Protocol Updates&lt;/h3&gt;

&lt;p&gt;The MIP-03 deterministic commit resolution &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-01-21-newsletter/#marmot-protocol-white-noise-encrypted-group-chat-library&#34;&gt;we covered as an open PR last week&lt;/a&gt; has now merged. &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/152&#34;&gt;MDK PR #152&lt;/a&gt; ensures all &lt;a href=&#34;https://nostrcompass.org/en/topics/mls/&#34;&gt;MLS&lt;/a&gt;-based group chats converge on the same state when multiple valid commits arrive for the same epoch.&lt;/p&gt;

&lt;p&gt;A companion &lt;a href=&#34;https://github.com/marmot-protocol/marmot/pull/28&#34;&gt;spec PR #28&lt;/a&gt; adds init_key lifecycle requirements addressing gaps from implementation audits: private key material from Welcome messages must be securely deleted after processing (zeroization, storage cleanup), and new members must perform self-updates within 24 hours for forward secrecy.&lt;/p&gt;

&lt;p&gt;The TypeScript SDK (&lt;a href=&#34;https://github.com/marmot-protocol/marmot-ts&#34;&gt;marmot-ts&lt;/a&gt;) is building a reference chat application. &lt;a href=&#34;https://github.com/marmot-protocol/marmot-ts/pull/37&#34;&gt;PR #37&lt;/a&gt; adds group creation/listing, key package management with publish/broadcast/delete flows, and QR code invitations. An &lt;a href=&#34;https://github.com/marmot-protocol/marmot-ts/pull/38&#34;&gt;open PR #38&lt;/a&gt; by hzrd149 implements message history persistence with pagination. The whitenoise-rs backend merged 15 PRs this week including multi-language support (&lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/455&#34;&gt;PR #455&lt;/a&gt;) and MIP-04 v2 media references (&lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/450&#34;&gt;PR #450&lt;/a&gt;).&lt;/p&gt;

&lt;h3 id=&#34;divine-adds-nostr-integration-features-2&#34;&gt;diVine Adds Nostr Integration Features&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/divinevideo/divine-mobile&#34;&gt;diVine&lt;/a&gt;, the short-form video app, continues rapid Nostr integration.&lt;/p&gt;

&lt;p&gt;Recent merges include &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; QR code authentication (&lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/1019&#34;&gt;PR #1019&lt;/a&gt;) and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; encrypted direct messaging (&lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/834&#34;&gt;PR #834&lt;/a&gt;). This week&amp;#39;s activity focused on &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/1098&#34;&gt;mentions support&lt;/a&gt; converting &lt;code&gt;nostr:&lt;/code&gt; URIs and @mentions to clickable profile links, &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/1097&#34;&gt;Classic Viners avatar fallbacks&lt;/a&gt; using Nostr profiles, and video editing tools including &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/1056&#34;&gt;drawing&lt;/a&gt;, &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/1053&#34;&gt;filters&lt;/a&gt;, and &lt;a href=&#34;https://github.com/divinevideo/divine-mobile/pull/1050&#34;&gt;stickers&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&#34;nip-updates-44&#34;&gt;NIP Updates&lt;/h2&gt;

&lt;p&gt;Recent changes to the &lt;a href=&#34;https://github.com/nostr-protocol/nips&#34;&gt;NIPs repository&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open PRs and Discussions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1534&#34;&gt;Trusted Relay Assertions&lt;/a&gt;&lt;/strong&gt; - The draft proposal for standardizing relay trust scoring &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-01-21-newsletter/#nip-updates&#34;&gt;we covered last week&lt;/a&gt; continues discussion. The core debate centers on whether trust scores should be &amp;#34;global&amp;#34; (computed once for all users) or &amp;#34;personalized&amp;#34; (relative to each observer&amp;#39;s social graph). PageRank-style algorithms like &lt;a href=&#34;https://trust.nostr.band/&#34;&gt;nostr.band&amp;#39;s Trust Rank&lt;/a&gt; and &lt;a href=&#34;https://github.com/Pretty-Good-Freedom-Tech/graperank-nodejs&#34;&gt;GrapeRank&lt;/a&gt; resist sybil attacks by dividing any rank passed through fake accounts by the size of the bot farm. Critics argue that truly personalized scores are more accurate but require expensive per-user computation. The discussion also explores whether to use DVMs for on-demand scoring versus pre-computed kind 30382 attestation events that clients can cache.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Communikeys&lt;/strong&gt; - A &lt;a href=&#34;https://nostrhub.io&#34;&gt;comprehensive proposal&lt;/a&gt; for community management that uses existing npubs as community identifiers instead of relay-based approaches. Any npub can become a community by publishing a kind 10222 event; publications target communities via kind 30222 events. Access control uses &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-58/&#34;&gt;NIP-58&lt;/a&gt; badges, enabling delegated membership management with cold storage for community keys.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://njump.me/nevent1qqsyxrrdu09yktr7x5cqqrcj9v2hrqqqefem6f3stkrzwf8anr236sgcpzfmhxue69uhkummnw3ezu7nzvshxwec4wa0qn&#34;&gt;NIP-CF: Changes Feed&lt;/a&gt;&lt;/strong&gt; - A draft proposing sequence-based event synchronization as an alternative to timestamp-based &lt;code&gt;since&lt;/code&gt; filters. The problem: standard Nostr sync using &lt;code&gt;since&lt;/code&gt; timestamps can miss events when multiple events share the same second-precision timestamp, client and relay clocks drift apart, or checkpointing is imprecise. NIP-CF solves this by having relays assign monotonically increasing sequence numbers to stored events, providing strict total ordering. Clients request changes since a specific sequence number and receive events in guaranteed order, with precise checkpointing that never misses events. The proposal also supports live/continuous mode where subscriptions stay open after initial sync for real-time updates.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://njump.me/nevent1qqsr98tvcy7c4y5w03rd6cdujq9dpdt75uzv4kmkgpdlq7ggdmzptrqcpzfmhxue69uhkummnw3ezu7nzvshxwec4wa0qn&#34;&gt;NIP-XX: Encrypted File Sync&lt;/a&gt;&lt;/strong&gt; - A protocol defining kinds 30800 (encrypted files), 30801 (vault indices), and 30802 (shared documents) for syncing encrypted content across devices using Nostr relays. The protocol enables local-first note-taking apps to provide end-to-end encrypted sync without centralized servers. File contents, paths, names, and folder structure are all encrypted using &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; self-encryption, so relays store blobs they cannot read. Binary attachments like images use &lt;a href=&#34;https://nostrcompass.org/en/topics/blossom/&#34;&gt;Blossom&lt;/a&gt; servers with client-side encryption. Kind 30802 enables document sharing between users by encrypting to the recipient&amp;#39;s public key.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;p&gt;Read the full newsletter with the Five Years of Nostr Januaries retrospective at: &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-01-28-newsletter/&#34;&gt;https://nostrcompass.org/en/newsletters/2026-01-28-newsletter/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Building something? Have news to share? Want us to cover your project? Reach out via NIP-17 DM or find us on Nostr.&lt;/p&gt;
 &lt;/blockquote&gt;
    </content>
    <updated>2026-01-28T16:04:58Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs2c6jvu5azkj0kncpclyjrkm63ngkgzm04hvgffk5pph4mffaynvgzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq966llt</id>
    
      <title type="html">Thank you for shipping!</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs2c6jvu5azkj0kncpclyjrkm63ngkgzm04hvgffk5pph4mffaynvgzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq966llt" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsx5z7chp8kmd6h0snhm88f2alfgs8y50ssunekuykk7lj0vlt5jgsppemhxue69uhkummn9ekx7mp0fvdp6a&#39;&gt;nevent1q…dp6a&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;Thank you for shipping!
    </content>
    <updated>2026-01-22T21:25:24Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsrq9dw3rwgnrv69a3509yy74fzjzmw8n3xq0lztfsqe8yn5znf5xczypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqjq4j93</id>
    
      <title type="html"># Nostr Compass #6 Nostr infrastructure levels up this week. ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsrq9dw3rwgnrv69a3509yy74fzjzmw8n3xq0lztfsqe8yn5znf5xczypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqjq4j93" />
    <content type="html">
      # Nostr Compass #6&lt;br/&gt;&lt;br/&gt;Nostr infrastructure levels up this week. Bitchat migrates to Rust&amp;#39;s Arti for memory-safe Tor, eliminating crashes and battery drain. nostrdb-rs adds streaming queries for zero-allocation database ops. Listr returns after a year dormant with NDK 3 beta and pagination. Zeus merges 17 NWC fixes while Primal Android ships wallet backups and NIP-92 media dimensions.&lt;br/&gt;&lt;br/&gt;Draft NIP for Trusted Relay Assertions proposes scoring relays 0-100 across reliability, quality, and accessibility metrics. NIP-11 self-reported relay docs combine with NIP-66 independent monitoring (kind 30166 events) for informed relay selection beyond hardcoded defaults.&lt;br/&gt;&lt;br/&gt;Open PRs signal major architectural shifts: Damus embeds Arti for native Tor, implements Negentropy for efficient sync (megabytes to kilobytes), and adds Low Data Mode. Marmot&amp;#39;s MIP-03 solves distributed chat race conditions with deterministic commit ordering.&lt;br/&gt;&lt;br/&gt;Full newsletter: &lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/naddr1qqgx2vtyxuuxve3jvsergdt9v43rsq3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqp65w8agv4a&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;naddr1qq…gv4a&lt;/a&gt;&lt;/span&gt; &lt;/div&gt; &lt;p&gt;Welcome back to Nostr Compass, your weekly guide to Nostr.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This week:&lt;/strong&gt; Bitchat replaces C Tor with the Rust Arti implementation for better reliability and performance. nostrdb-rs gains streaming fold queries that enable zero-allocation database operations. Listr receives a major refactor with NDK 3 beta migration and AI-assisted maintenance after a year of dormancy. Zeus ships 17 merged PRs focused on &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-47/&#34;&gt;NIP-47&lt;/a&gt; (Nostr Wallet Connect for remote Lightning control) fixes and Cashu improvements, while Primal Android adds wallet backup flows and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-92/&#34;&gt;NIP-92&lt;/a&gt; (media dimensions for proper aspect ratios) support. A new draft NIP proposes &lt;a href=&#34;https://nostrcompass.org/en/topics/trusted-relay-assertions/&#34;&gt;Trusted Relay Assertions&lt;/a&gt; for standardized relay trust scoring.&lt;/p&gt;

&lt;h2 id=&#34;news-32&#34;&gt;News&lt;/h2&gt;

&lt;h3 id=&#34;bitchat-moves-to-rust-arti-for-tor-support-2&#34;&gt;Bitchat Moves to Rust Arti for Tor Support&lt;/h3&gt;

&lt;p&gt;Bitchat has migrated from C Tor to &lt;a href=&#34;https://gitlab.torproject.org/tpo/core/arti&#34;&gt;Arti&lt;/a&gt;, the Rust implementation of the Tor protocol. &lt;a href=&#34;https://github.com/permissionlesstech/bitchat/pull/958&#34;&gt;PR #958&lt;/a&gt; removes the C Tor dependency and integrates Arti, bringing memory safety guarantees and improved reliability. The change eliminates dormant wake attempts that caused foreground service restarts, a longstanding issue with the C implementation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What this means for users:&lt;/strong&gt; More stable encrypted messaging with fewer disconnections, especially on mobile devices. The Rust implementation reduces crash risks and battery drain from constant reconnection attempts.&lt;/p&gt;

&lt;p&gt;Arti is a ground-up rewrite of Tor in Rust, developed by the Tor Project to provide better security through memory safety and easier integration into applications. For Bitchat, the memory safety properties reduce attack surface when handling encrypted messages and relay connections. The migration follows the team&amp;#39;s recent &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-01-13-newsletter/#bitchat-completes-cure53-security-audit&#34;&gt;Cure53 security audit&lt;/a&gt; (covered in Newsletter #5), continuing their security improvements.&lt;/p&gt;

&lt;p&gt;The PR also introduces comprehensive test coverage for ChatViewModel and BLEService, removes dead code, and stabilizes the test suite. Bluetooth Low Energy mesh reliability improvements accompany the Tor changes, addressing large transfer failures. Together, these changes improve Bitchat&amp;#39;s resilience for offline mesh networking scenarios where Tor provides internet connectivity alongside local BLE communication.&lt;/p&gt;

&lt;h3 id=&#34;listr-revitalized-with-ai-powered-maintenance-2&#34;&gt;Listr Revitalized with AI-Powered Maintenance&lt;/h3&gt;

&lt;p&gt;JeffG announced a major refactor of &lt;a href=&#34;https://github.com/erskingardner/listr&#34;&gt;Listr&lt;/a&gt;, the Nostr list management application available at &lt;a href=&#34;https://listr.lol&#34;&gt;listr.lol&lt;/a&gt;, after the project had been dormant for over a year. Using AI assistance, he completed a comprehensive upgrade including migration to &lt;a href=&#34;https://github.com/nostr-dev-kit/ndk&#34;&gt;NDK&lt;/a&gt; 3 beta, updates to latest versions of Svelte and Vite, and all dependencies brought current. The refactor adds first-class support for following packs, implements pagination for lists exceeding 50 items, and fixes numerous bugs that had accumulated during the dormant period.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What this means for users:&lt;/strong&gt; Listr is back online with improved performance and new features for managing follow lists, content collections, and topic curation. The pagination fix makes large lists actually usable.&lt;/p&gt;

&lt;p&gt;JeffG noted that without AI assistance, this maintenance work would likely never have happened, preventing the project from becoming abandoned. Listr enables content curation on Nostr, allowing users to create, manage, and share lists of profiles, topics, and resources. The upgrade keeps the application compatible with current Nostr standards and client expectations as list management becomes more central to content discovery on the protocol.&lt;/p&gt;

&lt;h2 id=&#34;nip-updates-47&#34;&gt;NIP Updates&lt;/h2&gt;

&lt;p&gt;Recent changes to the &lt;a href=&#34;https://github.com/nostr-protocol/nips&#34;&gt;NIPs repository&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Merged:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-29/&#34;&gt;NIP-29&lt;/a&gt;&lt;/strong&gt; (Relay-based groups) - Relay Key Clarification (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2190&#34;&gt;#2190&lt;/a&gt; - merged) clarifies that the relay key is the relay URL itself, not a pubkey. The spec now explicitly states &amp;#34;The relay key is the relay&amp;#39;s WebSocket URL (e.g., wss://groups.example.com)&amp;#34; to avoid confusion. This affects how clients identify which relay hosts a given group, ensuring groups are properly attributed to their hosting relays.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Open PRs and Discussions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Trusted Relay Assertions&lt;/strong&gt; - A draft NIP proposes standardizing relay trust scoring through kind 30385 events containing trust scores (0-100) computed from &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-66/&#34;&gt;NIP-66&lt;/a&gt; (relay discovery and monitoring) metrics, operator reputation, and user reports. The specification divides trust into reliability (uptime, latency), quality (TLS, documentation, operator verification), and accessibility (jurisdiction, barriers, surveillance risk) components. Operator verification includes cryptographic signatures via &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-11/&#34;&gt;NIP-11&lt;/a&gt; (relay information documents), DNS TXT records, and .well-known files. Users declare trusted assertion providers via kind 10385 events, enabling clients to query multiple providers for diverse perspectives. The proposal complements &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-66/&#34;&gt;NIP-66&lt;/a&gt; discovery with evaluation, helping &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; (remote signing/Nostr Connect) assess relay trustworthiness in connection URIs.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Post-Quantum Cryptography&lt;/strong&gt; - &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2185&#34;&gt;PR #2185&lt;/a&gt; (open) continues evolving since &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2026-01-13-newsletter/#nip-updates&#34;&gt;Newsletter #5&lt;/a&gt; introduced the proposal for quantum-resistant algorithms. This week&amp;#39;s discussion focused on implementation details for crypto-agility: how clients handle dual signatures during migration, backward compatibility for older clients, and performance implications of larger quantum-resistant signatures. Contributors debated whether to mandate ML-DSA-44 only or support multiple algorithms (ML-DSA-44, Falcon-512, Dilithium) for flexibility. The consensus leans toward a phased approach: optional quantum signatures initially, becoming mandatory only after widespread client support and real quantum threat emergence.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;nip-deep-dive-nip-11-and-nip-66-2&#34;&gt;NIP Deep Dive: NIP-11 and NIP-66&lt;/h2&gt;

&lt;p&gt;This week we examine two NIPs that work together to enable relay discovery and evaluation: NIP-11 defines how relays describe themselves, and NIP-66 standardizes how we measure relay behavior. Together they form the foundation for relay trust evaluation systems.&lt;/p&gt;

&lt;h3 id=&#34;nip-11-https-nostrcompass-org-en-topics-nip-11-relay-information-document-2&#34;&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-11/&#34;&gt;NIP-11&lt;/a&gt;: Relay Information Document&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/11.md&#34;&gt;NIP-11&lt;/a&gt; defines a JSON document that relays serve over HTTP to describe their capabilities, policies, and operator information. When a client connects to &lt;code&gt;wss://relay.example.com&lt;/code&gt;, it can fetch &lt;code&gt;https://relay.example.com&lt;/code&gt; (replacing &lt;code&gt;wss://&lt;/code&gt; with &lt;code&gt;https://&lt;/code&gt;) to retrieve the relay&amp;#39;s information document.&lt;/p&gt;

&lt;p&gt;The document uses standard HTTP content negotiation with the &lt;code&gt;Accept: application/nostr&#43;json&lt;/code&gt; header. This allows relays to serve their normal website to browsers while providing machine-readable metadata to Nostr clients. The response includes relay software name and version, operator contact information (pubkey, email, alternative contact), supported NIPs, and operational parameters like payment requirements or content restrictions.&lt;/p&gt;

&lt;p&gt;Importantly, basic NIP-11 documents are unsigned JSON served over HTTPS, relying solely on TLS certificates for authenticity. This means anyone controlling the relay&amp;#39;s web server can modify the document, making operator claims unverifiable. The Trusted Relay Assertions proposal addresses this gap by introducing signed attestations through a relay&amp;#39;s &lt;code&gt;self&lt;/code&gt; pubkey field, enabling cryptographic proof of operator identity similar to how relays use signed events for authentication mechanisms.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;name&amp;#34;: &amp;#34;relay.example.com&amp;#34;,
  &amp;#34;description&amp;#34;: &amp;#34;A general-purpose public relay&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798&amp;#34;,
  &amp;#34;contact&amp;#34;: &amp;#34;admin@example.com&amp;#34;,
  &amp;#34;supported_nips&amp;#34;: [1, 2, 4, 9, 11, 12, 16, 20, 22],
  &amp;#34;software&amp;#34;: &amp;#34;git&#43; https://github.com/relay/relay.git&amp;#34;,
  &amp;#34;version&amp;#34;: &amp;#34;1.2.3&amp;#34;,
  &amp;#34;limitation&amp;#34;: {
    &amp;#34;max_message_length&amp;#34;: 16384,
    &amp;#34;max_subscriptions&amp;#34;: 20,
    &amp;#34;max_filters&amp;#34;: 100,
    &amp;#34;max_limit&amp;#34;: 5000,
    &amp;#34;max_subid_length&amp;#34;: 100,
    &amp;#34;min_prefix&amp;#34;: 4,
    &amp;#34;max_event_tags&amp;#34;: 2000,
    &amp;#34;max_content_length&amp;#34;: 8196,
    &amp;#34;min_pow_difficulty&amp;#34;: 0,
    &amp;#34;auth_required&amp;#34;: false,
    &amp;#34;payment_required&amp;#34;: false
  },
  &amp;#34;payments_url&amp;#34;: &amp;#34; https://relay.example.com/payments&amp;#34;,
  &amp;#34;fees&amp;#34;: {
    &amp;#34;admission&amp;#34;: [{&amp;#34;amount&amp;#34;: 5000, &amp;#34;unit&amp;#34;: &amp;#34;msats&amp;#34;}],
    &amp;#34;subscription&amp;#34;: [{&amp;#34;amount&amp;#34;: 1000, &amp;#34;unit&amp;#34;: &amp;#34;msats&amp;#34;, &amp;#34;period&amp;#34;: 2592000}],
    &amp;#34;publication&amp;#34;: []
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The &lt;code&gt;limitation&lt;/code&gt; object tells clients what constraints the relay enforces. &lt;code&gt;max_message_length&lt;/code&gt; limits WebSocket frame size, &lt;code&gt;max_subscriptions&lt;/code&gt; caps concurrent REQ subscriptions per connection, &lt;code&gt;max_filters&lt;/code&gt; limits filters per REQ, and &lt;code&gt;max_limit&lt;/code&gt; constrains how many events a single filter can request. These parameters help clients adapt their behavior to relay capabilities, avoiding disconnections from exceeding limits.&lt;/p&gt;

&lt;p&gt;Payment information appears in &lt;code&gt;fees&lt;/code&gt; and &lt;code&gt;payments_url&lt;/code&gt;. Relays can charge for admission (one-time access), subscription (recurring access), or publication (per-event fees). The &lt;code&gt;payments_url&lt;/code&gt; points to details about payment methods, typically Lightning invoices or ecash mints. Paid relays use these fields to communicate pricing before clients attempt authentication.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;supported_nips&lt;/code&gt; array lets clients discover relay capabilities. If a relay lists &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-50/&#34;&gt;NIP-50&lt;/a&gt;, clients know they can send full-text search queries. If &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-42/&#34;&gt;NIP-42&lt;/a&gt; appears, clients should expect authentication challenges. This declarative capability advertisement enables progressive enhancement: clients can use advanced features where available while gracefully degrading on relays with limited support.&lt;/p&gt;

&lt;p&gt;Operator information builds accountability. The &lt;code&gt;pubkey&lt;/code&gt; field identifies the relay operator on Nostr, enabling direct communication via &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; DMs or public mentions. The &lt;code&gt;contact&lt;/code&gt; email provides an off-protocol fallback. Together, these fields help users reach operators for abuse reports, access requests, or technical issues.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-11/&#34;&gt;NIP-11&lt;/a&gt; documents are self-reported: relays describe what they claim to support, not necessarily what they actually do. This is where NIP-66 becomes important.&lt;/p&gt;

&lt;h3 id=&#34;nip-66-https-nostrcompass-org-en-topics-nip-66-relay-discovery-and-liveness-monitoring-2&#34;&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-66/&#34;&gt;NIP-66&lt;/a&gt;: Relay Discovery and Liveness Monitoring&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/66.md&#34;&gt;NIP-66&lt;/a&gt; standardizes publishing relay monitoring data to Nostr. Monitor services continuously test relays for availability, latency, protocol compliance, and supported NIPs. They publish results as kind 30166 events, providing real-time relay status independent of relay self-reporting.&lt;/p&gt;

&lt;p&gt;Monitors check relay availability by connecting and sending test subscriptions. Latency measurements track connection time, subscription response time, and event propagation delay. Protocol compliance testing verifies relay behavior matches specifications, catching implementation bugs or intentional deviations. NIP support verification goes beyond &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-11/&#34;&gt;NIP-11&lt;/a&gt; claims by actually testing whether advertised features work correctly.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;a34b5c7d89e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;4e2d0bc6f8e7c3a5b9f1d2e3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1736784000,
  &amp;#34;kind&amp;#34;: 30166,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;d&amp;#34;, &amp;#34;wss://relay.example.com&amp;#34;],
    [&amp;#34;rtt&amp;#34;, &amp;#34;open&amp;#34;, &amp;#34;143&amp;#34;, &amp;#34;1736784000&amp;#34;],
    [&amp;#34;rtt&amp;#34;, &amp;#34;read&amp;#34;, &amp;#34;89&amp;#34;, &amp;#34;1736784000&amp;#34;],
    [&amp;#34;rtt&amp;#34;, &amp;#34;write&amp;#34;, &amp;#34;92&amp;#34;, &amp;#34;1736784000&amp;#34;],
    [&amp;#34;nips&amp;#34;, &amp;#34;1&amp;#34;, &amp;#34;2&amp;#34;, &amp;#34;4&amp;#34;, &amp;#34;9&amp;#34;, &amp;#34;11&amp;#34;, &amp;#34;12&amp;#34;],
    [&amp;#34;geo&amp;#34;, &amp;#34;US&amp;#34;, &amp;#34;United States&amp;#34;, &amp;#34;New York&amp;#34;],
    [&amp;#34;other&amp;#34;, &amp;#34;network&amp;#34;, &amp;#34;clearnet&amp;#34;],
    [&amp;#34;other&amp;#34;, &amp;#34;payment_required&amp;#34;, &amp;#34;false&amp;#34;],
    [&amp;#34;other&amp;#34;, &amp;#34;auth_required&amp;#34;, &amp;#34;false&amp;#34;]
  ],
  &amp;#34;content&amp;#34;: &amp;#34;{\&amp;#34;last_check\&amp;#34;: 1736784000, \&amp;#34;checks\&amp;#34;: 8760}&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;8b9c4d5e6a7f8b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The &lt;code&gt;d&lt;/code&gt; tag contains the relay URL, making this a parameterized replaceable event. Each monitor publishes one event per relay, updated as measurements change. Multiple monitors can track the same relay, providing redundancy and cross-validation. Clients query multiple monitor pubkeys to get diverse perspectives on relay health.&lt;/p&gt;

&lt;p&gt;Round-trip time (rtt) tags measure latency for different operations. &lt;code&gt;rtt open&lt;/code&gt; tracks WebSocket connection establishment, &lt;code&gt;rtt read&lt;/code&gt; measures subscription response time, and &lt;code&gt;rtt write&lt;/code&gt; tests event publication speed. All values are in milliseconds. Clients use these metrics to prefer low-latency relays for time-sensitive operations or deprioritize slow relays.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;nips&lt;/code&gt; tag lists actually verified NIP support, not just claimed support. Monitors test each NIP by exercising its functionality. If a relay claims &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-50/&#34;&gt;NIP-50&lt;/a&gt; search in its &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-11/&#34;&gt;NIP-11&lt;/a&gt; document but search queries fail, monitors will omit NIP-50 from the verified list. This provides ground truth about relay capabilities.&lt;/p&gt;

&lt;p&gt;Geographic information helps clients select nearby relays for better latency and censorship resistance. The &lt;code&gt;geo&lt;/code&gt; tag contains country code, country name, and region. The &lt;code&gt;network&lt;/code&gt; tag distinguishes clearnet relays from Tor hidden services or I2P endpoints. Together, these tags enable geographic diversity: clients can connect to relays in multiple jurisdictions to resist regional censorship.&lt;/p&gt;

&lt;p&gt;Monitor data powers relay selectors in clients, explorer websites, and the Trusted Relay Assertions proposal. By combining self-reported &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-11/&#34;&gt;NIP-11&lt;/a&gt; documents with measured &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-66/&#34;&gt;NIP-66&lt;/a&gt; data and computed trust assertions, the ecosystem moves toward informed relay selection rather than relying on hardcoded defaults or word-of-mouth recommendations.&lt;/p&gt;

&lt;h2 id=&#34;releases-38&#34;&gt;Releases&lt;/h2&gt;

&lt;h3 id=&#34;0xchat-v1-5-3-enhanced-messaging-features-2&#34;&gt;0xchat v1.5.3 - Enhanced Messaging Features&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/0xchat-app/0xchat-app-main/releases/tag/v1.5.3-release&#34;&gt;0xchat v1.5.3&lt;/a&gt; brings significant improvements to the Telegram-style Nostr messaging client. The release addresses &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-55/&#34;&gt;NIP-55&lt;/a&gt; (Android signer application) compliance issues that were preventing proper event signing through external signers like Amber. Full compliance means 0xchat now correctly delegates signing operations, improving security by keeping private keys isolated.&lt;/p&gt;

&lt;p&gt;The update integrates both FileDropServer and BlossomServer as default media storage options, giving users redundancy for file uploads. &lt;a href=&#34;https://github.com/hzrd149/blossom&#34;&gt;Blossom&lt;/a&gt; provides content-addressed storage where files are referenced by their SHA-256 hashes, ensuring integrity and enabling deduplication across the network. Automatic draft saving for Moments prevents data loss when composing long-form content, addressing user complaints about lost posts during app switches or connectivity interruptions.&lt;/p&gt;

&lt;p&gt;Cashu wallet integration receives polish with automatic proof filtering that removes spent tokens from the wallet view. This solves the confusing UX where users saw invalid proofs alongside valid ecash, making balance calculations unreliable. The filtering happens client-side, maintaining privacy while improving the payment experience for peer-to-peer transactions within chats.&lt;/p&gt;

&lt;h3 id=&#34;amber-v4-1-0-pre-releases-ui-overhaul-2&#34;&gt;Amber v4.1.0 Pre-releases - UI Overhaul&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/greenart7c3/Amber/releases/tag/v4.1.0-pre1&#34;&gt;Amber v4.1.0-pre1&lt;/a&gt; through &lt;a href=&#34;https://github.com/greenart7c3/Amber/releases/tag/v4.1.0-pre3&#34;&gt;v4.1.0-pre3&lt;/a&gt; introduce a redesigned interface for the popular Android event signer. The login screen now clearly displays which application is requesting signature permissions, addressing user confusion about authorization flows. The new events screen provides detailed inspection of what data applications want to sign, allowing users to make informed security decisions before approving operations.&lt;/p&gt;

&lt;p&gt;Permission management receives significant attention with a revamped interface showing exactly what capabilities each connected application has been granted. Users can revoke specific permissions without disconnecting entirely, enabling fine-grained control over signing delegation. The refactored relay counters using the updated quartz library provide real-time statistics on event throughput and relay performance. &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/46.md&#34;&gt;NIP-46&lt;/a&gt; (Nostr Connect) bunker connections now surface detailed error messages when connections fail, replacing cryptic timeout errors with actionable diagnostics.&lt;/p&gt;

&lt;h2 id=&#34;notable-code-and-documentation-changes-2&#34;&gt;Notable code and documentation changes&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;These are merged pull requests and early-stage developments worth tracking. Some are experimental features that may evolve before release.&lt;/em&gt;&lt;/p&gt;

&lt;h3 id=&#34;zeus-lightning-wallet-with-nostr-wallet-connect-2&#34;&gt;Zeus (Lightning Wallet with Nostr Wallet Connect)&lt;/h3&gt;

&lt;p&gt;Zeus merged 17 pull requests this week, strengthening its position as a leading &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-47/&#34;&gt;NIP-47&lt;/a&gt; Nostr Wallet Connect implementation. The most significant fixes address data consistency and protocol compliance issues that were causing interoperability problems with Nostr clients.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Transaction History Fix&lt;/strong&gt; - &lt;a href=&#34;https://github.com/ZeusLN/zeus/pull/3542&#34;&gt;PR #3542&lt;/a&gt; resolves a critical bug where NWC transaction lists displayed incorrect or duplicate entries. The issue occurred when Zeus cached transaction data without properly handling event updates, causing users to see phantom transactions or missing payments. The fix implements proper event deduplication and cache invalidation, ensuring transaction history accurately reflects Lightning node state.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Protocol Compliance&lt;/strong&gt; - &lt;a href=&#34;https://github.com/ZeusLN/zeus/pull/3548&#34;&gt;PR #3548&lt;/a&gt; addresses incomplete &lt;code&gt;getInfo&lt;/code&gt; responses that broke compatibility with clients expecting full NIP-47 compliance. Some Nostr clients crashed when receiving partial responses missing fields like &lt;code&gt;block_height&lt;/code&gt; or &lt;code&gt;network&lt;/code&gt;. The PR ensures all required fields return with sensible defaults even when the underlying Lightning implementation doesn&amp;#39;t provide them, improving Zeus&amp;#39;s compatibility across the ecosystem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Connection Resilience&lt;/strong&gt; - &lt;a href=&#34;https://github.com/ZeusLN/zeus/pull/3543&#34;&gt;PR #3543&lt;/a&gt; implements timeout notifications for stalled Nostr connections. Previously, users waited indefinitely when relay connections dropped silently. Now Zeus displays clear timeout messages after 30 seconds of inactivity, letting users retry or switch relays. &lt;a href=&#34;https://github.com/ZeusLN/zeus/pull/3541&#34;&gt;PR #3541&lt;/a&gt; adds backend validation to prevent NWC activation on incompatible Lightning implementations, catching configuration errors before they cause runtime crashes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cashu Race Condition&lt;/strong&gt; - &lt;a href=&#34;https://github.com/ZeusLN/zeus/pull/3531&#34;&gt;PR #3531&lt;/a&gt; fixes a concurrency bug in Cashu token management where simultaneous mint operations could corrupt the token database. The race condition occurred when multiple threads updated token counts without proper locking, occasionally resulting in incorrect balances. The fix adds mutex protection around critical sections, ensuring atomic updates to token state.&lt;/p&gt;

&lt;h3 id=&#34;primal-android-client-2&#34;&gt;Primal Android (Client)&lt;/h3&gt;

&lt;p&gt;Primal Android shipped 12 merged PRs with significant improvements to wallet security and media handling. The wallet backup implementation addresses one of the most requested features, while NIP-92 support improves the visual experience across the application.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wallet Backup System&lt;/strong&gt; - A four-PR series (&lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/844&#34;&gt;#844&lt;/a&gt;, &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/845&#34;&gt;#845&lt;/a&gt;, &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/846&#34;&gt;#846&lt;/a&gt;, &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/848&#34;&gt;#848&lt;/a&gt;) implements comprehensive seed phrase backup functionality. Users can now export their 12-word mnemonic through a secure flow that prevents screenshots, displays backup status in the wallet dashboard, and guides existing users through migration. The implementation follows BIP-39 standards and includes validation to prevent users from losing funds due to incorrect phrase recording.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Media Dimensions (NIP-92)&lt;/strong&gt; - &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/718&#34;&gt;PR #718&lt;/a&gt; implements &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-92/&#34;&gt;NIP-92&lt;/a&gt; support for proper image and video aspect ratios. Without dimension metadata, clients must download images to determine their size, causing layout jumps as content loads. NIP-92 adds &lt;code&gt;dim&lt;/code&gt; tags (like &lt;code&gt;[&amp;#34;dim&amp;#34;, &amp;#34;1920x1080&amp;#34;]&lt;/code&gt;) to file metadata events, allowing Primal to reserve correct space before downloading media. This eliminates jarring reflows in image galleries and improves perceived performance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Remote Signer Reliability&lt;/strong&gt; - &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/841&#34;&gt;PR #841&lt;/a&gt; fixes &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; connection issues where missing &lt;code&gt;wss://&lt;/code&gt; prefixes caused silent failures. The PR validates relay URIs during bunker connection setup, adding the protocol prefix automatically when users paste bare domains. &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/843&#34;&gt;PR #843&lt;/a&gt; addresses a threading bug where poor network conditions caused replies to post as root notes, breaking conversation flow. The fix ensures parent event IDs persist through network interruptions.&lt;/p&gt;

&lt;h3 id=&#34;marmot-protocol-white-noise-encrypted-group-chat-library-2&#34;&gt;Marmot Protocol: White Noise (Encrypted Group Chat Library)&lt;/h3&gt;

&lt;p&gt;White Noise, the Rust library powering &lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt; Protocol&amp;#39;s encrypted group chats, merged six PRs improving user experience and security. The changes bring Marmot closer to feature parity with mainstream messaging applications while maintaining its privacy-first architecture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read Receipts&lt;/strong&gt; - &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/433&#34;&gt;PR #433&lt;/a&gt; and &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/436&#34;&gt;#436&lt;/a&gt; implement message read tracking for group conversations. The system stores read positions per user per group within a single device, enabling unread count badges. The implementation uses monotonic timestamps to track the last read message position for each conversation. This foundational feature enables UI indicators showing unread message counts per conversation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conversation Pinning&lt;/strong&gt; - &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/442&#34;&gt;PR #442&lt;/a&gt; adds persistent conversation pinning through a &lt;code&gt;pin_order&lt;/code&gt; field in the &lt;code&gt;accounts_groups&lt;/code&gt; junction table that links accounts to groups. Pinned conversations maintain their position at the top of chat lists regardless of message activity, matching user expectations from Signal and WhatsApp. The implementation uses integer ordering to allow unlimited pins with deterministic sorting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deterministic Commit Resolution (MIP-03)&lt;/strong&gt; - &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/152&#34;&gt;PR #152&lt;/a&gt; (open) implements Marmot Improvement Proposal 03, solving the critical problem of commit race conditions in distributed group chats. When multiple members submit group state changes (adding/removing members, changing permissions) simultaneously, clients could diverge on commit ordering, fragmenting the group into incompatible states. MIP-03 introduces epoch snapshots and a deterministic winner selection: the commit with the earliest &lt;code&gt;created_at&lt;/code&gt; timestamp wins, with lexicographic event ID as tiebreaker. This allows all clients to converge on the same state through rollback and replay, maintaining group coherence even during network partitions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security Hardening&lt;/strong&gt; - &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/443&#34;&gt;PR #443&lt;/a&gt; prevents unnecessary copying of cryptographic secrets by using references in &lt;code&gt;resolve_group_image_path&lt;/code&gt;. This reduces the window for memory attacks where secrets could be recovered from freed heap allocations. &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/438&#34;&gt;PR #438&lt;/a&gt; enables SQLCipher database encryption through keyring parameters, protecting message history at rest. The keyring integration allows secure key storage in platform keychains rather than configuration files.&lt;/p&gt;

&lt;h3 id=&#34;nostrdb-rs-database-library-open-pr-2&#34;&gt;nostrdb-rs (Database Library) - Open PR&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Streaming Queries Implementation&lt;/strong&gt; - &lt;a href=&#34;https://github.com/damus-io/nostrdb-rs/pull/58&#34;&gt;PR #58&lt;/a&gt; (open) proposes streaming fold queries to enable zero-allocation database operations. The implementation adds &lt;code&gt;fold&lt;/code&gt;, &lt;code&gt;try_fold&lt;/code&gt;, &lt;code&gt;count&lt;/code&gt;, &lt;code&gt;any&lt;/code&gt;, &lt;code&gt;all&lt;/code&gt;, and &lt;code&gt;find_map&lt;/code&gt; methods that would process database results one at a time without materializing entire result sets into vectors. This approach would reduce memory consumption and enable early termination for common query patterns.&lt;/p&gt;

&lt;p&gt;The technical implementation exposes low-level query result callbacks (&lt;code&gt;ndb_query_visit&lt;/code&gt;) as stateful Rust visitors that map &lt;code&gt;ControlFlow&lt;/code&gt; variants to C visitor actions. Once merged, application code will read like iterator logic while running close to the database layer. For example, counting matching notes would stream through results rather than collecting them, and &lt;code&gt;find_map&lt;/code&gt; would return the first useful result without processing remaining rows.&lt;/p&gt;

&lt;p&gt;nostrdb powers Damus and Notedeck, both iOS/macOS and desktop clients respectively. The streaming queries would enable efficient patterns like pagination, conditional filtering, and existence checks. The PR changes 3 files with &#43;756 additions and -32 deletions, a substantial refactoring of the query layer. Users of nostrdb-rs-based applications would see reduced memory usage when browsing large timelines or searching through extensive event databases.&lt;/p&gt;

&lt;h3 id=&#34;nak-cli-tool-2&#34;&gt;nak (CLI Tool)&lt;/h3&gt;

&lt;p&gt;nak, fiatjaf&amp;#39;s command-line Nostr tool, merged six PRs focused on build system improvements and new functionality. &lt;a href=&#34;https://github.com/fiatjaf/nak/pull/91&#34;&gt;PR #91&lt;/a&gt; implements a Blossom mirror feature, letting nak serve as a mirror for Blossom media servers. &lt;a href=&#34;https://nostrcompass.org/en/topics/blossom/&#34;&gt;Blossom&lt;/a&gt; is a content-addressed media storage protocol that works alongside Nostr events.&lt;/p&gt;

&lt;p&gt;The remaining PRs address build system compatibility across Windows, macOS, and Linux platforms, enabling FUSE filesystem support for mounting Nostr events as local directories.&lt;/p&gt;

&lt;h3 id=&#34;damus-ios-client-open-prs-2&#34;&gt;Damus (iOS Client) - Open PRs&lt;/h3&gt;

&lt;p&gt;Damus has 11 open PRs exploring significant architectural improvements. While these haven&amp;#39;t merged yet, they signal important directions for iOS Nostr client development, particularly around privacy, synchronization efficiency, and mobile data optimization.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tor Integration&lt;/strong&gt; - &lt;a href=&#34;https://github.com/damus-io/damus/pull/3535&#34;&gt;PR #3535&lt;/a&gt; embeds the Arti Tor client directly into Damus, enabling anonymous relay connections without external dependencies. Unlike Orbot or Tor Browser approaches, embedding Arti provides seamless integration with iOS sandboxing and background execution limits. The Rust implementation brings memory safety to network anonymization, reducing attack surface compared to C Tor. Users could toggle Tor mode per-relay or globally, with the client handling circuit management transparently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Negentropy Sync Protocol&lt;/strong&gt; - &lt;a href=&#34;https://github.com/damus-io/damus/pull/3536&#34;&gt;PR #3536&lt;/a&gt; implements Negentropy, a set reconciliation protocol that radically improves synchronization efficiency. Instead of downloading all events since last connection, Negentropy exchanges compact fingerprints (Merkle trees) to identify exactly which events differ between client and relay. For users following hundreds of pubkeys, this reduces sync bandwidth from megabytes to kilobytes. The implementation integrates with RelayPool and SubscriptionManager, enabling automatic efficient sync across all connected relays.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Low Data Mode&lt;/strong&gt; - &lt;a href=&#34;https://github.com/damus-io/damus/pull/3549&#34;&gt;PR #3549&lt;/a&gt; adds cellular data conservation features responding to user feedback about bandwidth consumption. The mode disables image auto-loading, video prefetching, and reduces subscription limits. Users on metered connections can browse text content without fear of exceeding data caps. The implementation respects iOS low data mode settings and provides granular controls for different media types.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Database Optimizations&lt;/strong&gt; - &lt;a href=&#34;https://github.com/damus-io/damus/pull/3548&#34;&gt;PR #3548&lt;/a&gt; reworks nostrdb snapshot storage for faster queries and reduced disk usage. The optimization changes how database snapshots persist to disk, improving both read performance and write amplification. This addresses battery drain complaints from users with large event databases.&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;That&amp;#39;s it for this week. Building something? Have news to share? Want us to cover your project? Reach out via NIP-17 DM or find us on Nostr.&lt;/p&gt;
 &lt;/blockquote&gt;
    </content>
    <updated>2026-01-21T16:03:21Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsdyktv6cu5w9lrx8hcgs9xsg7tjsuyyszjmwpkgs6k2pkc3yv5qnczypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqkq55uv</id>
    
      <title type="html">Nostr Compass Podcast #5 This edition covers Bitchat&amp;#39;s ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsdyktv6cu5w9lrx8hcgs9xsg7tjsuyyszjmwpkgs6k2pkc3yv5qnczypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqkq55uv" />
    <content type="html">
      Nostr Compass Podcast #5 &lt;br/&gt;&lt;br/&gt;This edition covers Bitchat&amp;#39;s professional security audit by Cure53, the same firm that audited Signal and NIP-44, with 17&#43; PRs already merged addressing critical findings. We explore NIP-71&amp;#39;s addressable video events and the post-quantum cryptography proposal for future-proofing Nostr. Plus our NIP deep dive explains NIP-51 bookmark lists and NIP-65 relay metadata.&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://blossom.primal.net/a184e517cdb2a9dc6c6a5d3784b93ed65f97e5c8c8fd5b6e7a2a4386d0700f4d.mp3&#34;&gt;https://blossom.primal.net/a184e517cdb2a9dc6c6a5d3784b93ed65f97e5c8c8fd5b6e7a2a4386d0700f4d.mp3&lt;/a&gt; &lt;br/&gt;&lt;br/&gt;#podcast &lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/naddr1qqgrjepjxuurgepkvvekgcmrxpnxzq3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqp65wd7svcx&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;naddr1qq…svcx&lt;/a&gt;&lt;/span&gt; &lt;/div&gt; &lt;p&gt;This week we cover Bitchat&amp;#39;s security audit by Cure53, which found 12&#43; security issues including uncleared Diffie-Hellman secrets and signature verification gaps. The team responded with 17&#43; pull requests fixing forward secrecy, thread safety, and memory exhaustion vulnerabilities. NIP-71 merges bringing addressable video events with update-in-place metadata. A post-quantum cryptography NIP proposes ML-DSA-44 and Falcon-512 signatures with ML-KEM key agreement to protect against future quantum attacks. We also discuss the BOLT12 offers debate and the Audio Track NIP for standardizing music and podcast events. Our NIP deep dive covers NIP-51 bookmark lists and NIP-65 relay metadata, explaining how both use replaceable events for organizing content and connections. Amethyst v1.05.0 ships bookmark support, voice notes, Web of Trust scores, Quartz database migration, and an early desktop release. Nostur v1.25.3 improves NIP-17 DMs with reactions, replies, and NIP-46 remote signer support.&lt;/p&gt;

&lt;p&gt;00:00 - Introduction to Nostr Compass Episode 5
01:01 - BitChat Security Audit Insights: Cure53 findings and 17&#43; PRs fixing DH secret clearing, signature verification, and thread safety
04:42 - NIP-71 Addressable Video Event: kinds 34235/34236 with updateable metadata via d tags
06:12 - Open PRs: Post-Quantum Cryptography proposal with ML-DSA-44, Falcon-512, and ML-KEM for quantum-resistant signing
18:25 - NIP-51 and NIP-65: Enhancing Usability through bookmark lists and relay metadata for organizing content and connections
22:30 - How to Handle Bolt 12 Offers for NIP-47 Nostr Wallet Connect: Community decision to create dedicated NIP for BOLT12 offers
26:03 - Audio Track NIP: Standardizing music (32100) and podcast (32101) events for interoperability across Wavlake, Zapstr, and Stemstr
42:16 - Amethyst Version 1.05 Release Highlights: Bookmarks, voice notes, Web of Trust scores, Quartz migration, desktop release
44:13 - Nostur v1.25.3: NIP-17 DM improvements with reactions and replies
45:11 - NIP-46 Remote Signer Support: Nostur and Primal iOS add bunker support for off-device key management
46:52 - Code and Documentation Changes: Citrine SQL injection fix, rust-nostr NIP-62 expansion, NDK subscription tracking, Damus iOS 17 crash fix
53:04 - Conclusion and Future Developments&lt;/p&gt;
 &lt;/blockquote&gt;
    </content>
    <updated>2026-01-20T18:41:51Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsr4tfjkl5wh78h4jcguknyxftf0k7756srmfs2z7z2h7rupt05psszypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqskskh2</id>
    
      <title type="html">Yes, here: ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsr4tfjkl5wh78h4jcguknyxftf0k7756srmfs2z7z2h7rupt05psszypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqskskh2" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsva0n5tegjjjtjxzlvjgv72g5u368hfj2gd849c2hurh6w8lme34gpzamhxue69uhhyetvv9ujuurjd9kkzmpwdejhgtcn55rvy&#39;&gt;nevent1q…5rvy&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;Yes, here:&lt;br/&gt;&lt;a href=&#34;https://castr.me/npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923/rss.xml&#34;&gt;https://castr.me/npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923/rss.xml&lt;/a&gt;
    </content>
    <updated>2026-01-16T09:15:10Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqspdvjyjvrzymp2g8722sml7a9gd5ffqruj6japuv84vdkercvughszypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqrd2lrg</id>
    
      <title type="html">Nostr Compass #5 is out. Bitchat completed a professional ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqspdvjyjvrzymp2g8722sml7a9gd5ffqruj6japuv84vdkercvughszypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqrd2lrg" />
    <content type="html">
      Nostr Compass #5 is out. &lt;br/&gt;Bitchat completed a professional security audit by Cure53, the same firm that reviewed Signal and NIP-44, with 17&#43; PRs already merged fixing critical findings. NIP-71 brings addressable video events to the protocol. Amethyst ships bookmarks, voice notes, and an early desktop release, while a new post-quantum cryptography NIP opens discussion on future-proofing Nostr. &lt;br/&gt;Read more at nostrcompass.org. &lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/naddr1qqgrqdpjvgmngvenvsenyen9x9nryq3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqp65wptkphk&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;naddr1qq…kphk&lt;/a&gt;&lt;/span&gt; &lt;/div&gt; &lt;p&gt;Welcome back to Nostr Compass, your weekly guide to Nostr.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This week:&lt;/strong&gt; Bitchat undergoes a professional security audit by Cure53, the same firm that audited Signal and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt;, with 17&#43; PRs already merged fixing critical findings. &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-71/&#34;&gt;NIP-71&lt;/a&gt; is merged, bringing addressable video events to the protocol. A post-quantum cryptography NIP opens discussion on future-proofing Nostr against quantum attacks. Amethyst v1.05.0 ships bookmark lists, voice notes, and an early desktop release, while Nostur v1.25.3 improves &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; DMs with reactions and replies. In library news, rust-nostr expands &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-62/&#34;&gt;NIP-62&lt;/a&gt; support across SQLite and LMDB backends, and NDK fixes a subscription tracking bug.&lt;/p&gt;

&lt;h2 id=&#34;news-35&#34;&gt;News&lt;/h2&gt;

&lt;h3 id=&#34;bitchat-completes-cure53-security-audit-2&#34;&gt;Bitchat Completes Cure53 Security Audit&lt;/h3&gt;

&lt;p&gt;Bitchat, the iOS encrypted messenger combining Nostr with Cashu, has undergone a professional security audit by Cure53, one of the most respected security firms in the industry. Cure53 previously audited Signal, Mullvad VPN, and notably the &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; encryption specification that underpins modern Nostr private messaging.&lt;/p&gt;

&lt;p&gt;The audit found 12&#43; security issues (BCH-01-002 through BCH-01-013). The Bitchat team responded with 17&#43; pull requests. Key fixes include:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Noise Protocol DH Secret Clearing&lt;/strong&gt; - &lt;a href=&#34;https://github.com/permissionlesstech/bitchat/pull/928&#34;&gt;PR #928&lt;/a&gt; fixes six locations where Diffie-Hellman shared secrets were not being zeroed after key agreement, restoring forward secrecy guarantees. When secrets persist in memory longer than necessary, a memory dump or cold boot attack could compromise past communications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Signature Verification&lt;/strong&gt; - Multiple PRs harden cryptographic verification paths, ensuring message authenticity checks cannot be bypassed through malformed inputs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thread Safety&lt;/strong&gt; - &lt;a href=&#34;https://github.com/permissionlesstech/bitchat/pull/929&#34;&gt;PR #929&lt;/a&gt; adds barrier synchronization to read receipt queues in NostrTransport, preventing race conditions that could cause data corruption or crashes under high message volumes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Memory Safety&lt;/strong&gt; - &lt;a href=&#34;https://github.com/permissionlesstech/bitchat/pull/920&#34;&gt;PR #920&lt;/a&gt; optimizes the message deduplicator for better performance with high message throughput while avoiding memory exhaustion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input Validation&lt;/strong&gt; - &lt;a href=&#34;https://github.com/permissionlesstech/bitchat/pull/919&#34;&gt;PR #919&lt;/a&gt; hardens hex string parsing to prevent crashes from malformed input, a common attack vector for denial-of-service.&lt;/p&gt;

&lt;p&gt;Bitchat handles Cashu ecash, making professional security review essential. The audit follows last year&amp;#39;s &lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot&lt;/a&gt; Protocol audit and the NIP-44 audit that verified the encryption layer.&lt;/p&gt;

&lt;h2 id=&#34;nip-updates-50&#34;&gt;NIP Updates&lt;/h2&gt;

&lt;p&gt;Recent changes to the &lt;a href=&#34;https://github.com/nostr-protocol/nips&#34;&gt;NIPs repository&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Merged:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-71/&#34;&gt;NIP-71&lt;/a&gt;&lt;/strong&gt; - Addressable Video Events (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1669&#34;&gt;#1669&lt;/a&gt;) introduces kinds 34235 (horizontal video) and 34236 (vertical video) as addressable events. A required &lt;code&gt;d&lt;/code&gt; tag provides unique identifiers, so video metadata can be updated without republishing the entire event. An optional &lt;code&gt;origin&lt;/code&gt; tag tracks import sources. Already implemented in Amethyst and nostrvine.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Open PRs:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Post-Quantum Cryptography&lt;/strong&gt; - &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2185&#34;&gt;PR #2185&lt;/a&gt; proposes adding quantum-resistant cryptographic algorithms to Nostr. The spec introduces ML-DSA-44 and Falcon-512 for digital signatures, targeting &amp;#34;super-high value events&amp;#34; like applications and authorities rather than individual users. While &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt;&amp;#39;s symmetric encryption (ChaCha20) is quantum-resistant, its key exchange uses secp256k1 ECDH which is vulnerable to Shor&amp;#39;s algorithm. The proposal includes ML-KEM for key agreement to address this gap. This is an early-stage proposal opening discussion on crypto-agility for Nostr&amp;#39;s long-term security.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BOLT12 for NIP-47&lt;/strong&gt; - After 137 comments and extensive discussion, the community decided that BOLT12 offers deserve their own specification rather than extending &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-47/&#34;&gt;NIP-47&lt;/a&gt;. BOLT12 offers provide significant upgrades over BOLT11 invoices including reusability, better privacy through blinded paths, and optional payer information. The new NIP will define methods like &lt;code&gt;make_offer&lt;/code&gt;, &lt;code&gt;pay_offer&lt;/code&gt;, and &lt;code&gt;list_offers&lt;/code&gt; for Nostr Wallet Connect implementations.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audio Track NIP&lt;/strong&gt; - &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1043&#34;&gt;PR #1043&lt;/a&gt; proposes kinds 32100 for music tracks and 32101 for podcast episodes, giving audio content the same first-class treatment that NIP-71 provides for video. Currently, audio platforms like Wavlake, Zapstr, and Stemstr each use proprietary event formats, fragmenting the ecosystem. A common standard would enable interoperability so users could discover and play audio from any compatible client.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NIP-A3 Universal Payment Targets&lt;/strong&gt; - &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2119&#34;&gt;PR #2119&lt;/a&gt; proposes kind 10133 events using RFC-8905 &lt;code&gt;payto:&lt;/code&gt; URIs to expose payment options across multiple networks. Rather than creating separate event kinds for Bitcoin, Lightning, Cashu, or traditional payment rails, this abstraction lets clients parse standardized tags and invoke native payment handlers. The approach is future-proof since new payment methods just need a &lt;code&gt;payto:&lt;/code&gt; URI scheme.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;nip-deep-dive-nip-51-and-nip-65-2&#34;&gt;NIP Deep Dive: NIP-51 and NIP-65&lt;/h2&gt;

&lt;p&gt;This week we cover two NIPs that store user preferences: NIP-51 for organizing content, and NIP-65 for organizing relay connections. Both use replaceable events, meaning each new publication overwrites the previous version.&lt;/p&gt;

&lt;h3 id=&#34;nip-51-https-nostrcompass-org-en-topics-nip-51-lists-2&#34;&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-51/&#34;&gt;NIP-51&lt;/a&gt;: Lists&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/51.md&#34;&gt;NIP-51&lt;/a&gt; defines multiple list types for organizing references to events, users, hashtags, and other content. Amethyst v1.05.0 adds bookmark support, making this a good time to understand how lists work.&lt;/p&gt;

&lt;p&gt;The spec defines several list kinds, each serving a different purpose. Kind 10000 is your mute list for hiding users, threads, or words. Kind 10001 pins events to feature on your profile. Kind 30003 stores bookmarks, which is what Amethyst now supports. Other kinds handle follow sets (30000), curated article collections (30004), hashtag interests (30015), and custom emoji sets (30030).&lt;/p&gt;

&lt;p&gt;Lists reference content through tags. A bookmark list uses &lt;code&gt;e&lt;/code&gt; tags for specific events and &lt;code&gt;a&lt;/code&gt; tags for addressable content like articles:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;ae3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1736784000,
  &amp;#34;kind&amp;#34;: 30003,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;d&amp;#34;, &amp;#34;saved-articles&amp;#34;],
    [&amp;#34;e&amp;#34;, &amp;#34;abc123def456...&amp;#34;, &amp;#34;wss://relay.example&amp;#34;],
    [&amp;#34;a&amp;#34;, &amp;#34;30023:author-pubkey:article-id&amp;#34;, &amp;#34;wss://relay.example&amp;#34;]
  ],
  &amp;#34;content&amp;#34;: &amp;#34;&amp;lt;encrypted-private-bookmarks&amp;gt;&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;908a15e46fb4d8675bab026fc230a0e3542bfade63da02d542fb78b2a8513fcd0092619a2c8c1221e581946e0191f2af505dfdf8657a414dbca329186f009262&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The &lt;code&gt;d&lt;/code&gt; tag provides a unique identifier, so you can maintain multiple bookmark sets like &amp;#34;saved-articles&amp;#34;, &amp;#34;read-later&amp;#34;, or &amp;#34;favorites&amp;#34; under the same kind.&lt;/p&gt;

&lt;p&gt;Lists support both public and private items. Public items appear in the tags array, visible to anyone who fetches the event. Private items go in the &lt;code&gt;content&lt;/code&gt; field, encrypted using &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt; to yourself. This dual structure lets you keep public bookmarks while attaching private notes, or maintain a mute list without revealing who you&amp;#39;ve muted. To encrypt to yourself, use NIP-44 with your own pubkey as recipient.&lt;/p&gt;

&lt;p&gt;The 10000-series kinds are replaceable, meaning relays keep only one event per pubkey. The 30000-series are parameterized replaceable, allowing one event per pubkey and &lt;code&gt;d&lt;/code&gt; tag combination. In both cases, updating a list means publishing a complete replacement; you cannot send incremental changes. Clients should preserve unknown tags when modifying lists to avoid overwriting data added by other applications.&lt;/p&gt;

&lt;h3 id=&#34;nip-65-https-nostrcompass-org-en-topics-nip-65-relay-list-metadata-2&#34;&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-65/&#34;&gt;NIP-65&lt;/a&gt;: Relay List Metadata&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/65.md&#34;&gt;NIP-65&lt;/a&gt; defines kind 10002 events that advertise which relays a user prefers for reading and writing. This helps other users and clients find your content.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;bd2217a96b5835b59f9a6a42d8d8a36f8c9b7d4e5f0a1b2c3d4e5f6a7b8c9d0e1&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1736784000,
  &amp;#34;kind&amp;#34;: 10002,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;r&amp;#34;, &amp;#34;wss://relay.damus.io&amp;#34;, &amp;#34;read&amp;#34;],
    [&amp;#34;r&amp;#34;, &amp;#34;wss://nos.lol&amp;#34;],
    [&amp;#34;r&amp;#34;, &amp;#34;wss://relay.nostr.band&amp;#34;, &amp;#34;write&amp;#34;]
  ],
  &amp;#34;content&amp;#34;: &amp;#34;&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;f1c2d3e4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Each &lt;code&gt;r&lt;/code&gt; tag contains a relay URL and an optional marker. A &lt;code&gt;write&lt;/code&gt; marker designates your outbox: relays where you publish your content. A &lt;code&gt;read&lt;/code&gt; marker designates your inbox: relays where you check for mentions, replies, and tags. Omitting the marker indicates both.&lt;/p&gt;

&lt;p&gt;When Alice wants to find Bob&amp;#39;s posts, her client fetches Bob&amp;#39;s kind 10002, extracts his write relays (his outbox), and subscribes there. When Alice replies to Bob, her client publishes to his read relays (his inbox) so he&amp;#39;ll see the mention. This relay-aware routing is the &amp;#34;outbox model,&amp;#34; and it distributes users across many relays rather than concentrating everyone on a few central servers.&lt;/p&gt;

&lt;p&gt;NIP-65 handles public content routing, but private messages use a separate list. &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; defines kind 10050 for DM inbox relays, using &lt;code&gt;relay&lt;/code&gt; tags instead of &lt;code&gt;r&lt;/code&gt; tags. When sending someone a private message, clients look for the recipient&amp;#39;s kind 10050 event and publish the encrypted gift-wrapped message there. This separation keeps DM routing distinct from public content routing, and lets users specify different relays for private versus public communication.&lt;/p&gt;

&lt;p&gt;The outbox model improves censorship resistance since no single relay needs to store or serve everyone&amp;#39;s content. Clients maintain connections to relays listed in their followed users&amp;#39; NIP-65 events, dynamically connecting to new relays as they discover new accounts. NIP-65 complements the relay hints found in other NIPs. When you tag someone with &lt;code&gt;[&amp;#34;p&amp;#34;, &amp;#34;pubkey&amp;#34;, &amp;#34;wss://hint.relay&amp;#34;]&lt;/code&gt;, the hint tells clients where to look for that specific reference. NIP-65 provides the authoritative, user-controlled list, while hints offer shortcuts embedded in individual events.&lt;/p&gt;

&lt;p&gt;For best results, keep your relay list current since stale entries make you harder to find. The spec recommends two to four relays per category. Listing too many relays burdens every client that wants to fetch your content, slowing down their experience and increasing network load. Clients cache NIP-65 events and refresh them periodically to stay current as users update their preferences.&lt;/p&gt;

&lt;h2 id=&#34;releases-41&#34;&gt;Releases&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Amethyst v1.05.0&lt;/strong&gt; - The popular Android client &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/releases&#34;&gt;ships a major update&lt;/a&gt; with several headline features. &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-51/&#34;&gt;NIP-51&lt;/a&gt; kind 30003 bookmark lists let users save posts for later reference, syncing across compatible clients. Voice notes now work in DMs and regular posts with waveform visualization, media server selection, and upload progress indicators. &lt;a href=&#34;https://nostrcompass.org/en/topics/web-of-trust/&#34;&gt;Web of Trust&lt;/a&gt; scores are now visible in the interface, helping users understand how the algorithm evaluates accounts relative to their social graph. The &lt;a href=&#34;https://nostrcompass.org/en/topics/quartz/&#34;&gt;Quartz&lt;/a&gt; database migration improves query performance as part of the OpenSats-funded Kotlin Multiplatform work. An early desktop release brings Amethyst to Windows, macOS, and Linux via Compose Multiplatform, sharing the same codebase as the Android app. New user onboarding flows smooth the experience for first-time Nostr users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nostur v1.25.3&lt;/strong&gt; - The iOS and macOS client &lt;a href=&#34;https://github.com/nostur-com/nostur-ios-public/releases&#34;&gt;focuses on private messaging&lt;/a&gt; with &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; improvements. DM conversations now support reactions and replies, bringing the interactivity of public posts into encrypted messages. The conversation view has been reworked with better threading so multi-message exchanges are easier to follow, and timestamps show &amp;#34;time ago&amp;#34; in the DM list for quick scanning. Desktop users get multi-column layouts for viewing multiple feeds or conversations side by side. &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; remote signer support allows users to keep their private keys in dedicated signer apps like Amber or nsec.app. Additional fixes restore DM functionality on iOS 15 and iOS 16, resolve notification delays, and add the ability to configure which relays receive published DMs.&lt;/p&gt;

&lt;h2 id=&#34;notable-code-and-documentation-changes-5&#34;&gt;Notable code and documentation changes&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;These are open pull requests and early-stage work, perfect for getting feedback before they merge. If something catches your eye, consider reviewing or commenting!&lt;/em&gt;&lt;/p&gt;

&lt;h3 id=&#34;citrine-android-relay-2&#34;&gt;Citrine (Android Relay)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/greenart7c3/Citrine/pull/89&#34;&gt;PR #89&lt;/a&gt; fixes a SQL injection vulnerability in the Android personal relay app. The issue allowed malformed event data to execute arbitrary database queries, a serious flaw for any app that stores and processes untrusted input. The fix properly sanitizes all database operations using parameterized queries. No release has been tagged yet, so users will need to wait for the next version or build from source. &lt;a href=&#34;https://github.com/greenart7c3/Citrine/pull/90&#34;&gt;PR #90&lt;/a&gt; optimizes ContentProvider query performance with database-level filtering and pagination, reducing latency when external apps like Amethyst access Citrine&amp;#39;s event database through Android&amp;#39;s inter-process communication layer.&lt;/p&gt;

&lt;h3 id=&#34;rust-nostr-library-2&#34;&gt;rust-nostr (Library)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-62/&#34;&gt;NIP-62&lt;/a&gt; (Vanish Requests) support is expanding across rust-nostr&amp;#39;s database backends. &lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1180&#34;&gt;PR #1180&lt;/a&gt;, merged two weeks ago, added NIP-62 support to SQLite, handling &lt;code&gt;ALL_RELAYS&lt;/code&gt; vanish requests since the database layer doesn&amp;#39;t know specific relay URLs. &lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1210&#34;&gt;PR #1210&lt;/a&gt; extends this to the LMDB backend, ensuring vanish requests are persisted to disk and survive relay restarts. An IndexedDB implementation for browser environments is also in progress. Together, these changes give developers consistent NIP-62 support across SQLite, LMDB, and soon browser storage.&lt;/p&gt;

&lt;h3 id=&#34;ndk-nostr-development-kit-2&#34;&gt;NDK (Nostr Development Kit)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-dev-kit/ndk/pull/375&#34;&gt;PR #375&lt;/a&gt; fixes a bug in the seenEvents tracking system. The issue caused certain subscription patterns to incorrectly mark events as already seen, leading to missed content when users opened new subscriptions or reconnected to relays. The fix ensures events are tracked accurately across subscription lifecycles, which is particularly important for applications that dynamically subscribe and unsubscribe based on user navigation. NDK bumped to beta.70 with this fix included.&lt;/p&gt;

&lt;h3 id=&#34;damus-ios-2&#34;&gt;Damus (iOS)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/damus-io/damus/pull/3515&#34;&gt;PR #3515&lt;/a&gt; fixes a startup crash affecting iOS 17 users. The issue stemmed from an arithmetic overflow in &lt;code&gt;NdbUseLock&lt;/code&gt;, a fallback class used because Swift Mutexes aren&amp;#39;t available on iOS 17. The fix replaces the previous synchronization approach with &lt;code&gt;NSLock&lt;/code&gt;, which is available on iOS 17 and handles the remaining race conditions properly. iOS 18&#43; users weren&amp;#39;t affected since they have access to the native Swift Mutex implementation.&lt;/p&gt;

&lt;p&gt;Separately, a batch of longform article improvements landed via &lt;a href=&#34;https://github.com/damus-io/damus/pull/3509&#34;&gt;PR #3509&lt;/a&gt;. Reading progress bars track your position through articles, estimated read times appear on previews, and sepia mode with adjustable line height settings provide more comfortable reading. Focus mode auto-hides the navigation chrome when scrolling down and restores it on tap, reducing visual clutter for distraction-free reading. Several fixes address image display in markdown content and ensure articles open at the top rather than midway through.&lt;/p&gt;

&lt;h3 id=&#34;zap-stream-live-streaming-2&#34;&gt;Zap.stream (Live Streaming)&lt;/h3&gt;

&lt;p&gt;YouTube and Kick chat integration bridges messages from external streaming platforms into Nostr. Streamers who multicast to YouTube, Kick, and Zap.stream can now see all chat messages in a unified view, with messages from each platform appearing alongside native Nostr comments. This removes a major friction point for creators who want to use Nostr for streaming but can&amp;#39;t abandon audiences on established platforms. The integration displays which platform each message originated from and handles the authentication flow for connecting external accounts.&lt;/p&gt;

&lt;h3 id=&#34;chachi-nip-29-groups-2&#34;&gt;Chachi (NIP-29 Groups)&lt;/h3&gt;

&lt;p&gt;The &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-29/&#34;&gt;NIP-29&lt;/a&gt; group chat client shipped six merged PRs this week. A security update addresses &lt;a href=&#34;https://github.com/purrgrammer/chachi/pull/89&#34;&gt;CVE-2026-22029&lt;/a&gt;, an XSS vulnerability in react-router that could enable open redirect attacks; the fix updates to react-router-dom 6.30.0. &lt;a href=&#34;https://github.com/purrgrammer/chachi/pull/92&#34;&gt;PR #92&lt;/a&gt; adds paginated message loading for group chats, so long conversations load incrementally rather than all at once. &lt;a href=&#34;https://github.com/purrgrammer/chachi/pull/91&#34;&gt;PR #91&lt;/a&gt; fixes several NIP-29 bugs including a race condition that caused blank group names on initial load and undefined participant lists that crashed member views. Translation coverage now spans all 31 supported locales with 1060 keys each.&lt;/p&gt;

&lt;h3 id=&#34;0xchat-messaging-2&#34;&gt;0xchat (Messaging)&lt;/h3&gt;

&lt;p&gt;The Telegram-style messaging client improved &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-55/&#34;&gt;NIP-55&lt;/a&gt; compliance by properly saving signer package names when using external signing apps, fixing issues where the app would lose track of which signer to use after restarts. NIP-17 reply handling now correctly includes the &lt;code&gt;e&lt;/code&gt; tag for threading, ensuring replies appear in the right conversation context across clients. Performance optimizations address scroll lag in message lists, a common pain point when loading long chat histories. Draft auto-save prevents message loss if you navigate away mid-composition, and file storage options now include default FileDropServer and BlossomServer endpoints.&lt;/p&gt;

&lt;h3 id=&#34;primal-ios-2&#34;&gt;Primal (iOS)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; remote signer support lands on iOS via &lt;a href=&#34;https://github.com/PrimalHQ/primal-ios-app/pull/184&#34;&gt;PR #184&lt;/a&gt;, completing the cross-platform rollout that started with Android several weeks ago. Users can now keep their private keys in dedicated bunker services like nsec.app or self-hosted nsecBunker instances, connecting over Nostr relays to sign events without exposing keys to the client app. This separation improves security posture for users who want to use Primal&amp;#39;s features while maintaining stricter key management practices. The implementation includes QR code scanning for bunker connection URIs and handles the NIP-46 request/response flow over encrypted relay messages.&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;That&amp;#39;s it for this week. Building something? Have news to share? Want us to cover your project? Reach out via NIP-17 DM or find us on Nostr.&lt;/p&gt;
 &lt;/blockquote&gt;
    </content>
    <updated>2026-01-14T16:02:38Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsy0etmjvd28kc5knfm0pv0fszy886ffwwumfvqdesxk25ald78cnszypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agql6xjpj</id>
    
      <title type="html">Nostr Compass Podcast #4 This week we cover Primal Android&amp;#39;s ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsy0etmjvd28kc5knfm0pv0fszy886ffwwumfvqdesxk25ald78cnszypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agql6xjpj" />
    <content type="html">
      Nostr Compass Podcast #4 &lt;br/&gt;&lt;br/&gt;This week we cover Primal Android&amp;#39;s transformation into a signing hub for other apps. We look at Marmot&amp;#39;s 18 security fixes after their audit and Nostria 2.0&amp;#39;s music and streaming features. Plus our NIP deep dive breaks down NIP-04 vs NIP-44 encryption&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://blossom.primal.net/bca37ae7299e057071afb80c79fd811cbecadcf966af356d68b007d9d4481969.mp3&#34;&gt;https://blossom.primal.net/bca37ae7299e057071afb80c79fd811cbecadcf966af356d68b007d9d4481969.mp3&lt;/a&gt;  &lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/naddr1qqgxxvp5vvcxgdpnx93rqvphxvuxxq3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqp65w3t2jcw&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;naddr1qq…2jcw&lt;/a&gt;&lt;/span&gt; &lt;/div&gt; &lt;p&gt;This week we cover Primal Android&amp;#39;s transformation into a signing hub with both NIP-46 remote signing and NIP-55 local signer support, letting other apps request signatures without touching private keys. The Marmot team addressed findings from a security audit with 18 merged PRs hardening their MLS-based encrypted messaging. Nostria 2.0 ships cross-platform with native music support, live streaming with Game API integration, and remote signer QR code connections. We also cover Nostrability&amp;#39;s new relay hints tracker documenting client interoperability. Our NIP deep dive breaks down Nostr&amp;#39;s encryption standards, explaining why NIP-04 has security flaws and how NIP-44 fixes them with ChaCha20-Poly1305 authenticated encryption.&lt;/p&gt;

&lt;p&gt;00:00 - Intro to Episode 4
00:49 - Primal Android 2.6.18: NIP-46 remote signing and NIP-55 local signer support for other Android apps
10:18 - Marmot Protocol security hardening: 18 PRs addressing audit findings including hash verification and pagination fixes
13:53 - Nostrability relay hints tracker: documenting client support for hint construction and consumption
18:11 - Nostria 2.0: music streaming with zap payments, live video with Game API, profile discovery, and remote signer QR codes
26:34 - NIP Updates: NIP-55 return field fix, NIP-50 query expression extensions proposal
32:27 - NIP Deep Dive: NIP-04 vs NIP-44 encryption, from AES-CBC flaws to ChaCha20-Poly1305 authenticated encryption
41:56 - Releases: Citrine v1.0, Applesauce v5.0, Mostro v0.15.6, Aegis v0.3.5&lt;/p&gt;
 &lt;/blockquote&gt;
    </content>
    <updated>2026-01-13T09:12:48Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsv8chg7t36eqnc9au54l52uftls2dmch90ul37350vears92ncykqzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqa9g94f</id>
    
      <title type="html">Podcast #3 is just released. #nevent1q…wzx2</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsv8chg7t36eqnc9au54l52uftls2dmch90ul37350vears92ncykqzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqa9g94f" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqstvnal08982rf0wf6avz3v92vcpsjlrnwrkp8fpsmwze5m3hm65jsppemhxue69uhkummn9ekx7mp04qjkzj&#39;&gt;nevent1q…jkzj&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;Podcast #3 is just released.&lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nevent1qqswjrn58veusfmc8d4khye34pxmstgj0cnr6lcpvcv5g57g3gw96acpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhsygrht920wv2pzfyf5j3fa35jku3cdltqhn8tqvydggcsr65hn3t6sqpsgqqqqqqsg5wzx2&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;nevent1q…wzx2&lt;/a&gt;&lt;/span&gt; &lt;/div&gt; Nostr Compass Podcast #3&lt;br/&gt;&lt;br/&gt;The third episode of the Nostr Compass Podcast is here. This special episode celebrates Nostr&#39;s fifth anniversary with a deep retrospective tracing the protocol&#39;s evolution through every December since 2020.&lt;br/&gt;&lt;br/&gt;We start with HODL invoice escrows in Shopstr, then journey through five years of December milestones: from fiatjaf&#39;s first client release in December 2020, through the Hacker News moment in 2021, Jack Dorsey&#39;s pivotal 14 BTC donation in 2022, the NIP-44 encryption audit in 2023, to 2024 and 2025&#39;s ecosystem expansion with NDK&#39;s 162x cache speedup and NIP-55 signer proliferation.&lt;br/&gt;&lt;br/&gt;Plus: Amethyst&#39;s desktop module takes shape, voice messaging arrives, local relays and offline functionality, data resilience patterns, NIP updates, ZapStore improvements, npub.cash, and more.&lt;br/&gt;&lt;br/&gt;Whether you&#39;ve been here since the Branle days or just discovered Nostr, this episode puts five years of protocol development into perspective.&lt;br/&gt;&lt;br/&gt;**Listen to the Podcast:**&lt;br/&gt;&lt;video controls width=&#34;100%&#34; class=&#34;max-h-[90vh] bg-neutral-300 dark:bg-zinc-700&#34;&gt;&lt;source src=&#34;https://blossom.primal.net/b2fe0827d48e466c7dec3b3583cd36278fd36c6a8f92f2b7bd7514917d5ae8b5.ogg&#34;&gt;&lt;/video&gt; &lt;br/&gt;&lt;br/&gt;**Read the Newsletter:** &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/naddr1qqgxxetyxvex2deexf3nwvtpxp3rvqghwaehxw309aex2mrp0yh8qunfd4skctnwv46z7q3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqp65w0dv4vr&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;naddr1qq…v4vr&lt;/a&gt;&lt;/span&gt;&lt;br/&gt; &lt;/blockquote&gt;
    </content>
    <updated>2026-01-12T09:16:17Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqswjrn58veusfmc8d4khye34pxmstgj0cnr6lcpvcv5g57g3gw96aczypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq25gq7j</id>
    
      <title type="html">Nostr Compass Podcast #3 The third episode of the Nostr Compass ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqswjrn58veusfmc8d4khye34pxmstgj0cnr6lcpvcv5g57g3gw96aczypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq25gq7j" />
    <content type="html">
      Nostr Compass Podcast #3&lt;br/&gt;&lt;br/&gt;The third episode of the Nostr Compass Podcast is here. This special episode celebrates Nostr&amp;#39;s fifth anniversary with a deep retrospective tracing the protocol&amp;#39;s evolution through every December since 2020.&lt;br/&gt;&lt;br/&gt;We start with HODL invoice escrows in Shopstr, then journey through five years of December milestones: from fiatjaf&amp;#39;s first client release in December 2020, through the Hacker News moment in 2021, Jack Dorsey&amp;#39;s pivotal 14 BTC donation in 2022, the NIP-44 encryption audit in 2023, to 2024 and 2025&amp;#39;s ecosystem expansion with NDK&amp;#39;s 162x cache speedup and NIP-55 signer proliferation.&lt;br/&gt;&lt;br/&gt;Plus: Amethyst&amp;#39;s desktop module takes shape, voice messaging arrives, local relays and offline functionality, data resilience patterns, NIP updates, ZapStore improvements, npub.cash, and more.&lt;br/&gt;&lt;br/&gt;Whether you&amp;#39;ve been here since the Branle days or just discovered Nostr, this episode puts five years of protocol development into perspective.&lt;br/&gt;&lt;br/&gt;**Listen to the Podcast:**&lt;br/&gt;&lt;video controls width=&#34;100%&#34; class=&#34;max-h-[90vh] bg-neutral-300 dark:bg-zinc-700&#34;&gt;&lt;source src=&#34;https://blossom.primal.net/b2fe0827d48e466c7dec3b3583cd36278fd36c6a8f92f2b7bd7514917d5ae8b5.ogg&#34;&gt;&lt;/video&gt; &lt;br/&gt;&lt;br/&gt;**Read the Newsletter:** &lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/naddr1qqgxxetyxvex2deexf3nwvtpxp3rvqghwaehxw309aex2mrp0yh8qunfd4skctnwv46z7q3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqp65w0dv4vr&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;naddr1qq…v4vr&lt;/a&gt;&lt;/span&gt;&lt;br/&gt; &lt;/div&gt; &lt;p&gt;Welcome back to Nostr Compass, your weekly guide to the Nostr protocol ecosystem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This week:&lt;/strong&gt; As 2025 closes, we look back at five years of December milestones in Nostr&amp;#39;s evolution. From fiatjaf&amp;#39;s first client release in December 2020, through Jack Dorsey&amp;#39;s pivotal 14 BTC donation in December 2022, to this month&amp;#39;s NIP-55 signer proliferation and NDK&amp;#39;s 162x cache speedup, December has consistently marked turning points for the protocol. This special issue traces the technical history through each December, documenting the protocol&amp;#39;s growth from two experimental relays to 2,500&#43; nodes across 50 countries. Plus: Amethyst&amp;#39;s desktop module takes shape via Quartz, Notedeck gains messaging, Citrine hosts web apps, and NIP-54 fixes internationalization for non-Latin scripts.&lt;/p&gt;

&lt;h2 id=&#34;december-recap-five-years-of-nostr-decembers-2&#34;&gt;December Recap: Five Years of Nostr Decembers&lt;/h2&gt;

&lt;p&gt;Nostr turns five this year. fiatjaf initiated the protocol on November 7, 2020, and every December since has marked a distinct phase in its evolution: from proof-of-concept to global movement to production ecosystem. This is a technical retrospective of December 2020 through December 2025, the formative years that established Nostr&amp;#39;s foundation and catalyzed its breakout moment.&lt;/p&gt;

&lt;h3 id=&#34;december-2020-genesis-2&#34;&gt;December 2020: Genesis&lt;/h3&gt;

&lt;p&gt;The first full month of Nostr&amp;#39;s existence saw fiatjaf release &lt;a href=&#34;https://github.com/fiatjaf/branle&#34;&gt;Branle&lt;/a&gt;, the protocol&amp;#39;s first client, built with Quasar (Vue.js) and absurd-sql for local storage. fiatjaf had already established the core architecture: users identified by secp256k1 public keys, all posts cryptographically signed, relays serving as dumb storage that don&amp;#39;t communicate with each other. One or two experimental relays served a handful of early adopters coordinating in the Telegram group &lt;a href=&#34;https://t.me/nostr_protocol&#34;&gt;@nostr_protocol&lt;/a&gt;, which had launched November 16. The &lt;a href=&#34;https://fiatjaf.com/nostr.html&#34;&gt;original documentation&lt;/a&gt; described &amp;#34;the simplest open protocol that is able to create a censorship-resistant global social network,&amp;#34; a premise that would take two more years to prove.&lt;/p&gt;

&lt;h3 id=&#34;december-2021-early-development-2&#34;&gt;December 2021: Early Development&lt;/h3&gt;

&lt;p&gt;On December 31, 2021, Nostr hit the &lt;a href=&#34;https://news.ycombinator.com/item?id=29749061&#34;&gt;Hacker News front page&lt;/a&gt; with 110 points and 138 comments, submitted by Cameri. This marked the protocol&amp;#39;s first significant exposure to the broader developer community. The network ran on approximately seven relays with fewer than 1,000 users. Branle received updates including private key import (December 31) and multi-relay support. A command-line client, noscl, provided terminal-based interaction. The protocol specifications existed in fiatjaf&amp;#39;s documentation, though the formal &lt;a href=&#34;https://github.com/nostr-protocol/nips&#34;&gt;NIPs repository&lt;/a&gt; wouldn&amp;#39;t be created until May 2022. The protocol was, as fiatjaf described it, &amp;#34;a work in progress.&amp;#34;&lt;/p&gt;

&lt;h3 id=&#34;december-2022-the-tipping-point-2&#34;&gt;December 2022: The Tipping Point&lt;/h3&gt;

&lt;p&gt;December 2022 transformed Nostr from a niche experiment into a mainstream movement. The catalyst came on December 15, when Jack Dorsey donated &lt;a href=&#34;https://www.coindesk.com/tech/2022/12/15/jack-dorsey-gives-decentralized-social-network-nostr-14-btc-in-funding&#34;&gt;14.17171699 BTC&lt;/a&gt; (~$245,000-$250,000) to fiatjaf after discovering the protocol and declaring it &amp;#34;100 percent what we wanted from Bluesky, but it wasn&amp;#39;t developed from a company.&amp;#34; On December 16, fiatjaf announced splitting funds with Damus developer William Casarin (jb55), and Dorsey verified his Nostr account (npub: &lt;code&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1sg6plzptd64u62a878hep2kev88swjh3tw00gjsfl8f237lmu63q0uf63m&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;jack&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1sg6…f63m&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;&lt;/code&gt;). The funding legitimized the project overnight.&lt;/p&gt;

&lt;p&gt;The same week, Twitter&amp;#39;s chaos accelerated adoption. December 14-15 saw suspensions of prominent journalists from the New York Times, CNN, and Washington Post. On December 18, Twitter &lt;a href=&#34;https://techcrunch.com/2022/12/18/twitter-wont-let-you-post-your-facebook-instagram-and-mastodon-handles/&#34;&gt;announced bans&lt;/a&gt; on accounts promoting Nostr, Mastodon, and other platforms. The policy was reversed the following day after backlash. The exodus drove users to explore alternatives.&lt;/p&gt;

&lt;p&gt;Protocol development surged. On December 16, &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-19/&#34;&gt;NIP-19&lt;/a&gt; was merged (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/57&#34;&gt;#57&lt;/a&gt;), introducing bech32-encoded identifiers (npub, nsec, note, nprofile, nevent) that made keys human-readable and distinguishable. The NIPs repository logged 36&#43; commits that month, including NIP-40 and NIP-07 updates. Clients proliferated: Damus filled its TestFlight beta within hours, Astral forked Branle for profile creation, Snort launched as a &amp;#34;fast, censorship-resistant&amp;#34; web client, and Vitor Pamplona began Amethyst development. Alby v1.22.1 &amp;#34;Kemble&amp;#39;s Cascade of Stars&amp;#34; shipped December 22 with NIP-19 support. By December 7, Nostr had approximately 800 users with profiles; when Damus hit the App Store on January 31, 2023, the floodgates opened, driving growth to 315,000&#43; users by June 2023.&lt;/p&gt;

&lt;h3 id=&#34;december-2023-ecosystem-maturation-2&#34;&gt;December 2023: Ecosystem Maturation&lt;/h3&gt;

&lt;p&gt;December 2023 marked a critical inflection point for Nostr protocol security. On December 20, &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/746&#34;&gt;NIP-44 revision 3 was merged&lt;/a&gt; following an independent Cure53 security audit (NOS-01) that identified 10 issues in the TypeScript, Go, and Rust implementations, including timing attacks and forward secrecy concerns. The updated spec replaced the flawed &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-04/&#34;&gt;NIP-04&lt;/a&gt; encryption with ChaCha20 and HMAC-SHA256, establishing the cryptographic foundation that now underpins &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; private DMs and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-59/&#34;&gt;NIP-59&lt;/a&gt; gift wrapping. The same week, &lt;a href=&#34;https://opensats.org/blog/nostr-grants-december-2023&#34;&gt;OpenSats announced their fourth wave of grants&lt;/a&gt; on December 21, funding seven projects including Lume, noStrudel, ZapThreads, and an independent NIP-44 audit. This followed the &lt;a href=&#34;https://opensats.org/blog/nostr-grants-july-2023&#34;&gt;first wave in July 2023&lt;/a&gt; that had funded Damus, Coracle, Iris, and others, bringing total Nostr Fund allocation to approximately $3.4 million across 39 grants.&lt;/p&gt;

&lt;p&gt;The month also exposed sustainability tensions in the ecosystem. On December 28, William Casarin (jb55) &lt;a href=&#34;https://stacker.news/items/368863&#34;&gt;posted on Stacker News&lt;/a&gt; that 2024 would &amp;#34;likely be the last year of Damus,&amp;#34; citing that &amp;#34;nostr clients don&amp;#39;t make money&amp;#34; after Apple&amp;#39;s restrictions on in-app zaps severely limited revenue potential. The Damus team had previously rejected VC funding. Meanwhile, &lt;a href=&#34;https://github.com/getAlby/nostr-wallet-connect/releases/tag/0.4.1&#34;&gt;Nostr Wallet Connect v0.4.1&lt;/a&gt; shipped on December 26, extending &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-47/&#34;&gt;NIP-47&lt;/a&gt; with &lt;code&gt;pay_keysend&lt;/code&gt;, &lt;code&gt;make_invoice&lt;/code&gt;, &lt;code&gt;lookup_invoice&lt;/code&gt;, &lt;code&gt;list_transactions&lt;/code&gt;, &lt;code&gt;get_balance&lt;/code&gt;, and &lt;code&gt;get_info&lt;/code&gt; methods, laying groundwork for the wallet integrations that would become standard across clients.&lt;/p&gt;

&lt;h3 id=&#34;december-2024-protocol-advancement-2&#34;&gt;December 2024: Protocol Advancement&lt;/h3&gt;

&lt;p&gt;December 2024 opened with the &lt;a href=&#34;https://damus.io/notedeck/&#34;&gt;Notedeck Alpha launch&lt;/a&gt; on November 30, the Damus team&amp;#39;s Rust-based desktop client featuring a multi-column interface with multiple account support. Built for Linux, macOS, and Windows (Android planned for 2025), Notedeck initially shipped to Damus Purple subscribers and represented a strategic expansion beyond iOS. Two weeks later, &lt;a href=&#34;https://opensats.org/blog/9th-wave-of-nostr-grants&#34;&gt;OpenSats announced their ninth wave of grants&lt;/a&gt; on December 16, funding AlgoRelay (the first algorithmic relay for personalized feeds), Pokey (Android app with Bluetooth mesh for restricted internet), Nostr Safebox (&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-60/&#34;&gt;NIP-60&lt;/a&gt; Cashu token storage), and LumiLumi (lightweight accessible web client), pushing total Nostr Fund allocation to approximately $9 million, a 67% year-over-year increase.&lt;/p&gt;

&lt;p&gt;The month saw significant client maturation across the ecosystem. &lt;a href=&#34;https://github.com/mikedilger/gossip/releases/tag/v0.13.0&#34;&gt;Gossip 0.13.0&lt;/a&gt; landed on December 23 with File Metadata (&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-92/&#34;&gt;NIP-92&lt;/a&gt;/&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-94/&#34;&gt;NIP-94&lt;/a&gt;) support, Blossom integration, and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-50/&#34;&gt;NIP-50&lt;/a&gt; relay search. &lt;a href=&#34;https://github.com/coracle-social/coracle/releases/tag/0.5.0&#34;&gt;Coracle 0.5.0&lt;/a&gt; shipped December 12 with reworked onboarding and nostr-editor integration. Protocol development remained active with 30 pull requests submitted between December 9-22 (10 merged), including &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; rewrites to use only NIP-44 encryption and continued work on &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-104/&#34;&gt;NIP-104&lt;/a&gt; for Signal-level double ratchet encryption. Network statistics showed 224,000&#43; daily trusted pubkey events, 4x year-over-year growth in new profiles with contact lists, and a 50% increase in public writing events.&lt;/p&gt;

&lt;h3 id=&#34;december-2025-ecosystem-expansion-2&#34;&gt;December 2025: Ecosystem Expansion&lt;/h3&gt;

&lt;p&gt;December 2025 brought continued protocol maturation and ecosystem expansion. On December 21, &lt;a href=&#34;https://opensats.org/blog/fourteenth-wave-of-nostr-grants&#34;&gt;OpenSats announced their fourteenth wave of Nostr grants&lt;/a&gt;, funding three projects: YakiHonne (a multi-platform client with creator portal for long-form content and Cashu/Nutzaps payment integration), Quartz (Vitor Pamplona&amp;#39;s Kotlin Multiplatform library that powers Amethyst and will enable an iOS version), and Nostr Feedz (RSS-to-Nostr bidirectional integration by PlebOne). Grant renewals went to Dart NDK and Mattn&amp;#39;s nostr-relay.&lt;/p&gt;

&lt;p&gt;Protocol evolution continued with &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-be/&#34;&gt;NIP-BE&lt;/a&gt; (Bluetooth Low Energy messaging, &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1979&#34;&gt;#1979&lt;/a&gt;) merged in November, enabling offline device synchronization. &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-a4/&#34;&gt;NIP-A4&lt;/a&gt; (Public Messages, kind 24, &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1988&#34;&gt;#1988&lt;/a&gt;) landed later in the month, defining notification-screen messages that use &lt;code&gt;q&lt;/code&gt; tags to avoid threading complications. &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-29/&#34;&gt;NIP-29&lt;/a&gt; received major clarification (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2106&#34;&gt;#2106&lt;/a&gt;), introducing the &lt;code&gt;hidden&lt;/code&gt; tag for truly private, undiscoverable groups. The &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-55/&#34;&gt;NIP-55&lt;/a&gt; spec also saw refinement (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2166&#34;&gt;#2166&lt;/a&gt;), addressing a common implementation mistake where developers called &lt;code&gt;get_public_key&lt;/code&gt; from background processes.&lt;/p&gt;

&lt;p&gt;On the client side, &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2025-12-24-newsletter/#news&#34;&gt;Primal Android became a full NIP-55 signer&lt;/a&gt; through eight merged PRs implementing &lt;code&gt;LocalSignerContentProvider&lt;/code&gt;, joining Amber and Aegis as Android signing options. The &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2025-12-24-newsletter/#notable-code-and-documentation-changes&#34;&gt;NDK library achieved 162x faster cache queries&lt;/a&gt; (from ~3,690ms to ~22ms) by eliminating duplicate writes and unnecessary LRU cache lookups (&lt;a href=&#34;https://github.com/nostr-dev-kit/ndk/pull/371&#34;&gt;PR #371&lt;/a&gt;, &lt;a href=&#34;https://github.com/nostr-dev-kit/ndk/pull/372&#34;&gt;PR #372&lt;/a&gt;). Shopstr introduced &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2025-12-24-newsletter/#news&#34;&gt;Zapsnags&lt;/a&gt; for flash sales via zaps. White Noise shipped &lt;a href=&#34;https://nostrcompass.org/en/topics/mip-05/&#34;&gt;MIP-05&lt;/a&gt; privacy-preserving push notifications. See &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2025-12-17-newsletter/&#34;&gt;Newsletter #1&lt;/a&gt; and &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2025-12-24-newsletter/&#34;&gt;Newsletter #2&lt;/a&gt; for complete coverage.&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;Five years ago, fiatjaf released Branle to a handful of users across two experimental relays. Today, the protocol supports 140&#43; clients, 2,500&#43; relays across 50 countries, and a growing web of trust linking hundreds of thousands of keypairs. December&amp;#39;s pattern of major releases continued this month with Bluetooth messaging, Android signer proliferation, and infrastructure grants signaling sustained investment in cross-platform tooling.&lt;/p&gt;

&lt;h2 id=&#34;news-38&#34;&gt;News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Amethyst Desktop Takes Shape&lt;/strong&gt; - The Quartz grant from OpenSats&amp;#39; fourteenth wave is already producing results. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/1625&#34;&gt;PR #1625&lt;/a&gt; creates a full &lt;code&gt;:desktopApp&lt;/code&gt; module for Amethyst using Compose Multiplatform, with login and global feed screens functional on Desktop JVM. The architecture converts the &lt;code&gt;:commons&lt;/code&gt; module to Kotlin Multiplatform with a clean source set structure (&lt;code&gt;commonMain&lt;/code&gt;, &lt;code&gt;jvmAndroid&lt;/code&gt;, &lt;code&gt;androidMain&lt;/code&gt;, &lt;code&gt;jvmMain&lt;/code&gt;), enabling shared UI components between Android and desktop while leaving platform-specific decisions to each target. This lays the foundation for the eventual iOS version via the same Kotlin Multiplatform approach.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Amethyst Voice Replies&lt;/strong&gt; - A Christmas delivery from davotoula: &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/1622&#34;&gt;PR #1622&lt;/a&gt; adds dedicated voice reply screens with waveform visualization, re-record support, media server selection, and upload progress indicators. Users can now reply to both root voice messages and voice replies with audio.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Notedeck Adds Messaging&lt;/strong&gt; - Notedeck, the Damus desktop client, gained a messages feature in &lt;a href=&#34;https://github.com/damus-io/notedeck/pull/1223&#34;&gt;PR #1223&lt;/a&gt;, expanding beyond timeline browsing into direct communication.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Citrine Hosts Web Apps&lt;/strong&gt; - Citrine can now &lt;a href=&#34;https://github.com/greenart7c3/Citrine/pull/81&#34;&gt;host web applications&lt;/a&gt;, turning your phone into a local-first Nostr web server. A separate &lt;a href=&#34;https://github.com/greenart7c3/Citrine/pull/85&#34;&gt;PR #85&lt;/a&gt; adds automatic reconnection and event broadcasting when network connectivity returns, with comprehensive test coverage across Android API levels.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nostrability Developer Toolkit Registry&lt;/strong&gt; - The &lt;a href=&#34;https://github.com/nostrability/nostrability/issues/264&#34;&gt;Developer Kits &amp;amp; Tooling&lt;/a&gt; tracker maintains a curated registry of SDKs, libraries, and developer tools across languages (TypeScript, Rust, Python, Go, Dart, Swift, and more). If you&amp;#39;re new to Nostr development, this is a useful starting point for finding the right toolkit for your stack.&lt;/p&gt;

&lt;h2 id=&#34;nip-updates-53&#34;&gt;NIP Updates&lt;/h2&gt;

&lt;p&gt;Recent changes to the &lt;a href=&#34;https://github.com/nostr-protocol/nips&#34;&gt;NIPs repository&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-54/&#34;&gt;NIP-54&lt;/a&gt;&lt;/strong&gt; - Critical internationalization fix for wiki d-tag normalization (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2177&#34;&gt;#2177&lt;/a&gt;). Previous rules converted all non-ASCII characters to &lt;code&gt;-&lt;/code&gt;, breaking support for Japanese, Chinese, Arabic, Cyrillic, and other scripts. The updated spec preserves UTF-8 letters, applies lowercase only to characters with case variants, and includes comprehensive examples: &lt;code&gt;&amp;#34;ウィキペディア&amp;#34;&lt;/code&gt; stays &lt;code&gt;&amp;#34;ウィキペディア&amp;#34;&lt;/code&gt;, &lt;code&gt;&amp;#34;Москва&amp;#34;&lt;/code&gt; becomes &lt;code&gt;&amp;#34;москва&amp;#34;&lt;/code&gt;, and mixed scripts like &lt;code&gt;&amp;#34;日本語 Article&amp;#34;&lt;/code&gt; normalize to &lt;code&gt;&amp;#34;日本語-article&amp;#34;&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;releases-44&#34;&gt;Releases&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Zapstore 1.0-rc1&lt;/strong&gt; - The Nostr-based permissionless app store ships the &lt;a href=&#34;https://github.com/zapstore/zapstore/releases/tag/1.0-rc1&#34;&gt;first release candidate&lt;/a&gt; of its new architecture, featuring a complete UI refresh, rewritten package manager with improved error handling, App Stacks for curated discovery, redesigned profile screens, background update checking, and infinite scrolling in release lists.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;KeyChat v1.38.1&lt;/strong&gt; - The MLS-based encrypted messaging app &lt;a href=&#34;https://github.com/keychat-io/keychat-app/releases/tag/v1.38.1%2B6489&#34;&gt;adds UnifiedPush support&lt;/a&gt; for Android and Linux push notifications, plus biometric authentication for privacy operations. Available for Android, Windows, macOS, and Linux.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Alby Go v2.0.0&lt;/strong&gt; - The mobile Lightning wallet companion &lt;a href=&#34;https://github.com/getAlby/go/releases/tag/v2.0.0&#34;&gt;ships a visual redesign&lt;/a&gt; with new logo, updated color palette, redesigned address book, and improved amount input keyboard. BTC Map is now accessible from the home screen, and transaction descriptions appear in notifications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;nak v0.17.4&lt;/strong&gt; - fiatjaf&amp;#39;s command-line Nostr tool &lt;a href=&#34;https://github.com/fiatjaf/nak/releases/tag/v0.17.4&#34;&gt;released&lt;/a&gt;, following v0.17.3&amp;#39;s LMDB Linux restriction fix from last week.&lt;/p&gt;

&lt;h2 id=&#34;notable-code-and-documentation-changes-8&#34;&gt;Notable code and documentation changes&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Open pull requests and early-stage work worth watching.&lt;/em&gt;&lt;/p&gt;

&lt;h3 id=&#34;damus-ios-5&#34;&gt;Damus (iOS)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/damus-io/damus/pull/3477&#34;&gt;NIP-19 relay hints&lt;/a&gt; implements relay hint consumption for event fetching. When users open nevent, nprofile, or naddr links, Damus now extracts relay hints from the bech32 TLV data and connects to ephemeral relays to fetch content not in the user&amp;#39;s relay pool. The implementation includes ref-counted cleanup to prevent race conditions during concurrent lookups. &lt;a href=&#34;https://github.com/damus-io/damus/pull/3474&#34;&gt;Image URL detection&lt;/a&gt; automatically converts pasted image URLs into preview thumbnails in the composer, with a carousel position badge for multiple images. &lt;a href=&#34;https://github.com/damus-io/damus/pull/3473&#34;&gt;npub paste conversion&lt;/a&gt; transforms pasted npub/nprofile strings into mention links with async profile resolution.&lt;/p&gt;

&lt;h3 id=&#34;amethyst-android-2&#34;&gt;Amethyst (Android)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/1627&#34;&gt;Payment targets&lt;/a&gt; adds an event interface for NIP-57 zap splits, allowing posts to specify multiple recipients who share incoming zaps (useful for collaborations, revenue sharing, or tipping both content creators and the tools they use). &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/1624&#34;&gt;Quartz feature parity documentation&lt;/a&gt; adds a detailed table tracking which features are implemented across Android, Desktop JVM, and iOS targets, noting that iOS is missing core cryptography (&lt;code&gt;Secp256k1Instance&lt;/code&gt;), JSON serialization, and data structures.&lt;/p&gt;

&lt;h3 id=&#34;notedeck-desktop-2&#34;&gt;Notedeck (Desktop)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/damus-io/notedeck/pull/1226&#34;&gt;Timeline filter rebuild&lt;/a&gt; fixes a bug where unfollowed accounts kept appearing in feeds. Timeline filters were built once from the contact list and never updated; the fix adds &lt;code&gt;contact_list_timestamp&lt;/code&gt; tracking and an &lt;code&gt;invalidate()&lt;/code&gt; method to trigger rebuilds when follow state changes.&lt;/p&gt;

&lt;h3 id=&#34;citrine-android-relay-5&#34;&gt;Citrine (Android Relay)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/greenart7c3/Citrine/pull/86&#34;&gt;ContentProvider API&lt;/a&gt; exposes the local relay&amp;#39;s event database to other Android apps via &lt;code&gt;ContentResolver&lt;/code&gt;. Unlike the WebSocket interface (which requires apps to maintain a persistent connection and speak the Nostr relay protocol), ContentProvider offers direct synchronous database access through Android&amp;#39;s native IPC mechanism. External apps can query events by ID, pubkey, kind, or date range, insert new events with validation, and delete events without managing socket connections.&lt;/p&gt;

&lt;h3 id=&#34;rust-nostr-library-5&#34;&gt;rust-nostr (Library)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1183&#34;&gt;NIP-40 relay-level support&lt;/a&gt; adds expiration handling at the relay builder level. Expired events are now rejected before storage and filtered out before sending to clients, eliminating the need for each database implementation to handle expiration checks independently.&lt;/p&gt;

&lt;h3 id=&#34;nak-cli-2&#34;&gt;nak (CLI)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/fiatjaf/nak/pull/91&#34;&gt;Blossom mirror&lt;/a&gt; implements blob mirroring functionality for the command-line tool.&lt;/p&gt;

&lt;h3 id=&#34;mostro-p2p-trading-2&#34;&gt;Mostro (P2P Trading)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/559&#34;&gt;Dev fee audit events&lt;/a&gt; adds transparent audit trails for development fund payments through kind 8383 Nostr events. The implementation publishes non-blocking audit events after successful fee payments, including order details and payment hashes while excluding buyer/seller pubkeys for privacy.&lt;/p&gt;

&lt;h3 id=&#34;mdk-marmot-development-kit-2&#34;&gt;MDK (Marmot Development Kit)&lt;/h3&gt;

&lt;p&gt;Three security audit fixes landed: &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/40&#34;&gt;Author verification&lt;/a&gt; enforces that rumor pubkeys match MLS sender credentials, preventing impersonation attacks. &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/41&#34;&gt;KeyPackage identity binding&lt;/a&gt; verifies credential identity matches event signers. &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/42&#34;&gt;Admin update validation&lt;/a&gt; prevents empty admin sets and non-member admin assignments.&lt;/p&gt;

&lt;h3 id=&#34;shopstr-marketplace-2&#34;&gt;Shopstr (Marketplace)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/shopstr-eng/shopstr/pull/217&#34;&gt;HODL invoice escrow&lt;/a&gt; implements a trust-minimized payment system for physical goods. The architecture uses Alby&amp;#39;s &lt;code&gt;makeHoldInvoice&lt;/code&gt; to lock buyer funds in their own wallet, with settlement triggered only after merchant inventory verification. The handshake protocol flows through &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; encrypted DMs: buyer sends order request, merchant responds with HODL invoice, buyer pays (funds locked), merchant confirms stock and shipping, then settlement releases funds. Multi-merchant cart support splits payments across vendors.&lt;/p&gt;

&lt;h3 id=&#34;jumble-web-client-2&#34;&gt;Jumble (Web Client)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/CodyTseng/jumble/pull/713&#34;&gt;Per-relay discovery mode&lt;/a&gt; adds a toggle to hide posts from followed users on specific relays, enabling language-based discovery feeds (e.g., nostr.band/lang/*). The feature filters out posts where the author pubkey appears in the user&amp;#39;s follow list, persisting toggle state per relay URL in localStorage.&lt;/p&gt;

&lt;h3 id=&#34;white-noise-encrypted-messaging-2&#34;&gt;White Noise (Encrypted Messaging)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/937&#34;&gt;Media upload retry&lt;/a&gt; adds retry options for failed uploads. &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/927&#34;&gt;Profile edit warnings&lt;/a&gt; alert users about profile changes. On the backend, &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/422&#34;&gt;whitenoise-rs&lt;/a&gt; fixes a race condition in AccountGroup creation.&lt;/p&gt;

&lt;h3 id=&#34;npub-cash-lightning-address-service-2&#34;&gt;npub.cash (Lightning Address Service)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/cashubtc/npubcash-server/pull/40&#34;&gt;v3 rewrite&lt;/a&gt; migrates to Bun for the monorepo and server, adds SQLite support, drops v1 compatibility, implements LUD-21, and adds realtime mint quote updates.&lt;/p&gt;

&lt;h3 id=&#34;nostr-java-library-2&#34;&gt;nostr-java (Library)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/tcheeric/nostr-java/releases/tag/v1.1.1&#34;&gt;v1.1.1&lt;/a&gt; ships WebSocket handling refactors and improved test robustness across &lt;a href=&#34;https://github.com/tcheeric/nostr-java/pull/499&#34;&gt;two PRs&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&#34;nips-repository-2&#34;&gt;NIPs Repository&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2180&#34;&gt;NIP-54 Djot migration&lt;/a&gt; proposes a separate change to the wiki spec: switching the content format from Asciidoc to Djot, a lightweight markup language with cleaner syntax. The PR introduces reference-style links for wikilinks, making cross-references between wiki articles more readable in source form. &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2179&#34;&gt;NIP-XX Quorum&lt;/a&gt; introduces threshold multi-signature governance for Nostr groups using FROST (Flexible Round-Optimized Schnorr Threshold signatures). A Quorum is an nsec shared among members through a T-of-N scheme where members can represent themselves or delegate to a council of representatives. When the council changes, the old nsec becomes obsolete and a new one is distributed—the final act of any council is signing the governance transition event. The spec defines membership (public or private), elections and polls (popular votes, votes of no confidence), optional natural-language &amp;#34;laws,&amp;#34; and crucially, quorum ontologies where quorums can be members of other quorums, enabling hierarchical structures like localities joining regional bodies. Use cases span source code development, company boards, HOAs, and moderated communities.&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;That&amp;#39;s it for this week and this year. Building something? Have news to share? Want us to cover your project? &amp;lt;a href=&amp;#34;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Nostr Compass&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1wav…2923&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;&amp;#34;&amp;gt;Reach out via NIP-17 DM&amp;lt;/a&amp;gt; or find us on Nostr.&lt;/p&gt;
 &lt;/blockquote&gt;
    </content>
    <updated>2026-01-12T09:12:22Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsp478dfc3gqlpug3k43wmuz52ptfssdntmlk8s8j9qz0hvgwaly8qzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq2w20yj</id>
    
      <title type="html">Nostr Compass #4 is out! This week @nprofile…vhrm Android ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsp478dfc3gqlpug3k43wmuz52ptfssdntmlk8s8j9qz0hvgwaly8qzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq2w20yj" />
    <content type="html">
      Nostr Compass #4 is out! This week &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqs9xtvrphl7p8qnua0gk9zusft33lqjkqqr7cwkr6g8wusu0lle8jcq9vhrm&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;primal&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…vhrm&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; Android transforms into a full signing hub with NIP-46 remote and NIP-55 local signer support, letting other apps request signatures securely. The Marmot Protocol team &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqs8t4ehcdrjgugzn3zgw6enp53gg2y2gfmekkg69m2d4gwxcpl04acpzamhxue69uhhyetvv9ujuurjd9kkzmpwdejhgtcppemhxue69uhkummn9ekx7mp0w3radp&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;White Noise&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…radp&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; merged 18 PRs hardening their MLS-based encrypted messaging after a security audit. Our deep dive explains NIP-04 vs NIP-44: why legacy encryption has critical flaws and how the modern replacement fixes them with authenticated encryption and proper key derivation. Plus: &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqsts0n0s20fk0s087ydcd7zj20ajv2t90m680zr6f0x5gp6w0p8wkqpzdmhxue69uhhqatjwpkx2urpvuhx2ue00d7ql8&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Citrine&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…7ql8&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; v1.0, Applesauce v5.0, AI agent supervision in TENEX, and notable work across &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqsraldwhvwcjgltmxwfu7kw8dqef2692yhzheuurd7k3kfy8cxjdqgpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhszxthwden5te0wajkccm0d4jjumn0wd68ytnhd9hx2tcpzemhxue69uhk2er9dchxummnw3ezumrpdejz7n4mh2x&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;damus&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…mh2x&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;, &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqs24yz8xftq8kkdf7q5yzf4v7tn2ek78v0zp2y427mj3sa7f34ggjcpzamhxue69uhhv6t5daezumn0wd68yvfwvdhk6tcpzpmhxue69uhkummnw3ezumt0d5hszrnhwden5te0dehhxtnvdakz769wywf&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;amethyst&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…wywf&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;, Bitchat, and more.&lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/naddr1qqgrwwrxxaskvvfjxgcn2v35vf3kgqghwaehxw309aex2mrp0yh8qunfd4skctnwv46z7q3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqp65wk8x5ja&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;naddr1qq…x5ja&lt;/a&gt;&lt;/span&gt; &lt;/div&gt; 
&lt;h1 id=&#34;nostr-compass-4-2&#34;&gt;Nostr Compass #4&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;January 7, 2026&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Welcome back to Nostr Compass, your weekly guide to the Nostr protocol ecosystem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This week:&lt;/strong&gt; Primal Android ships &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; remote signing and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-55/&#34;&gt;NIP-55&lt;/a&gt; local signer support, making it a full-fledged signing hub for other Android apps. The &lt;a href=&#34;https://nostrcompass.org/en/topics/marmot/&#34;&gt;Marmot Protocol&lt;/a&gt; team addressed findings from a security audit with 18 merged PRs hardening &lt;a href=&#34;https://nostrcompass.org/en/topics/mls/&#34;&gt;MLS&lt;/a&gt;-based encrypted messaging. Citrine hits v1.0 and Applesauce ships v5.0 across its entire library suite. TENEX builds out AI agent supervision on Nostr, and Jumble adds smart relay pooling. A NIP-55 spec fix clarifies &lt;code&gt;nip44_encrypt&lt;/code&gt; return fields, and a &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-50/&#34;&gt;NIP-50&lt;/a&gt; PR proposes query expression extensions for advanced search. In our deep dive, we explain &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-04/&#34;&gt;NIP-04&lt;/a&gt; and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt;: why the legacy encryption has security flaws and how the modern replacement fixes them.&lt;/p&gt;

&lt;h2 id=&#34;news-41&#34;&gt;News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Primal Android Becomes a Full Signing Hub&lt;/strong&gt; - &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/releases/tag/2.6.18&#34;&gt;Version 2.6.18&lt;/a&gt; adds both &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; remote signing and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-55/&#34;&gt;NIP-55&lt;/a&gt; local signing, turning Primal into a complete signer for other Nostr apps. Remote signing via NIP-46 lets users connect to bunker services over Nostr relays, keeping keys off their device entirely. Local signing via NIP-55 exposes Primal as an Android content provider, so apps like Amethyst or Citrine can request signatures without ever touching the private key. &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/pull/839&#34;&gt;Several follow-up PRs&lt;/a&gt; fixed compatibility issues with the NIP-55 spec&amp;#39;s hex pubkey requirement, and improved parsing of malformed &lt;code&gt;nostrconnect://&lt;/code&gt; URIs. The release also includes media pre-caching for smoother scrolling, improved thread load times, and avatar pre-caching.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Marmot Protocol Hardens Security After Audit&lt;/strong&gt; - The &lt;a href=&#34;https://github.com/marmot-protocol/mdk&#34;&gt;Marmot Development Kit&lt;/a&gt; (mdk), which implements &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-104/&#34;&gt;NIP-104&lt;/a&gt; MLS-based end-to-end encrypted messaging, received extensive security fixes this week. Eighteen merged pull requests addressed audit findings including: &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/97&#34;&gt;hash verification for encrypted group images&lt;/a&gt; to prevent storage-level blob substitution attacks, &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/110&#34;&gt;pagination for pending welcomes&lt;/a&gt; to prevent memory exhaustion, &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/112&#34;&gt;MLS Group ID leakage in error messages&lt;/a&gt;, and &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/98&#34;&gt;base64 encoding enforcement&lt;/a&gt; for key packages. The &lt;a href=&#34;https://github.com/marmot-protocol/marmot/pull/20&#34;&gt;Marmot spec itself was updated&lt;/a&gt; with MIP-04 v2 versioning and security improvements. Active PRs continue addressing nonce reuse, secret zeroization, and cache pollution vectors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nostrability Tracks Relay Hint Support&lt;/strong&gt; - A new &lt;a href=&#34;https://github.com/nostrability/nostrability/issues/270&#34;&gt;relay hints compatibility tracker&lt;/a&gt; documents how clients construct and consume relay hints across the ecosystem. The tracker reveals that while most clients now construct hints per &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-10/&#34;&gt;NIP-10&lt;/a&gt; and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-19/&#34;&gt;NIP-19&lt;/a&gt;, consumption varies widely: some clients include hints in outgoing events but don&amp;#39;t use incoming hints for fetching. Six clients earned &amp;#34;Full&amp;#34; tier status for complete implementation. The tracker is useful for developers checking interoperability and for users wondering why some clients find content others can&amp;#39;t.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nostria 2.0 Ships Cross-Platform Feature Overhaul&lt;/strong&gt; - The &lt;a href=&#34;https://nostria.app&#34;&gt;Nostria&lt;/a&gt; client &lt;a href=&#34;https://njump.me/nevent1qqs9z4l8z82zphszjlmrjkr8whpvupnlaxc7xk5gfg9syzj0thygtzgpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhszxthwden5te0wfjkccte9enrw73wd9hsz9nhwden5te0wfjkccte9ec8y6tdv9kzumn9wsq3gamnwvaz7tmjv4kxz7fwv3sk6atn9e5k7qgkwaehxw309aex2mrp0yhxgctdw4eju6t09uq32amnwvaz7tmwdaejumr0dshsqgzxsnsv7pfqqd7rw4fvr0jnkpqmwzfqq3znlc4pqunagxrkl84u66y7fq9&#34;&gt;released version 2.0&lt;/a&gt; on December 30 with significant additions across iOS (TestFlight), Android (Play Store), Web, and Windows. The release adds native music support with playlist creation, track uploading, zap-based artist payments, and a WinAmp-style player with functional equalizer. Live streaming gets Game API integration showing rich metadata during gameplay streams. A new Summary feature generates hourly, daily, or weekly activity digests as compressed timeline views. The Discover section offers curated lists for finding content and profiles. Media publishing is simplified with automatic short-form post generation for cross-client discoverability. Remote signer connections now work via QR code scanning without manual configuration. Profile discovery addresses a common Nostr pain point: when users move between relays without bringing their metadata, Nostria locates their profile and republishes it to their current relays. Premium subscribers gain YouTube channel integration, private Memos, analytics dashboards, and automatic following list backups with merge/restore options.&lt;/p&gt;

&lt;h2 id=&#34;nip-updates-56&#34;&gt;NIP Updates&lt;/h2&gt;

&lt;p&gt;Recent changes to the &lt;a href=&#34;https://github.com/nostr-protocol/nips&#34;&gt;NIPs repository&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Merged:&lt;/strong&gt;
- &lt;strong&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-55/&#34;&gt;NIP-55&lt;/a&gt;&lt;/strong&gt; - Fixed the return field for &lt;code&gt;nip44_encrypt&lt;/code&gt; method (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2184&#34;&gt;#2184&lt;/a&gt;). Android signers must now return the encrypted payload in the &lt;code&gt;signature&lt;/code&gt; field (matching &lt;code&gt;nip44_decrypt&lt;/code&gt;) rather than a separate field. This aligns the spec with existing implementations in Amber and Primal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open PRs:&lt;/strong&gt;
- &lt;strong&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-50/&#34;&gt;NIP-50&lt;/a&gt;&lt;/strong&gt; - Query Expression Extensions (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2182&#34;&gt;#2182&lt;/a&gt;) proposes extending NIP-50 search with structured query expressions. The PR adds operators like &lt;code&gt;kind:1&lt;/code&gt;, &lt;code&gt;author:npub1...&lt;/code&gt;, and boolean combinations (&lt;code&gt;AND&lt;/code&gt;, &lt;code&gt;OR&lt;/code&gt;, &lt;code&gt;NOT&lt;/code&gt;), enabling more precise search queries beyond simple text matching. This would let clients build advanced search interfaces while maintaining backward compatibility with basic search strings.&lt;/p&gt;

&lt;h2 id=&#34;nip-deep-dive-nip-04-and-nip-44-2&#34;&gt;NIP Deep Dive: NIP-04 and NIP-44&lt;/h2&gt;

&lt;p&gt;This week we cover Nostr&amp;#39;s encryption standards: the legacy NIP-04 that you&amp;#39;ll still encounter, and its modern replacement NIP-44 that fixes critical security flaws.&lt;/p&gt;

&lt;h3 id=&#34;nip-04-https-nostrcompass-org-en-topics-nip-04-encrypted-direct-messages-legacy-2&#34;&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-04/&#34;&gt;NIP-04&lt;/a&gt;: Encrypted Direct Messages (Legacy)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/04.md&#34;&gt;NIP-04&lt;/a&gt; was Nostr&amp;#39;s first attempt at encrypted messaging, using kind 4 events. While simple to implement, it has known security weaknesses and is deprecated in favor of NIP-44.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt; NIP-04 uses ECDH (Elliptic Curve Diffie-Hellman) to derive a shared secret between sender and recipient, then encrypts with AES-256-CBC.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;&amp;lt;event-id&amp;gt;&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;&amp;lt;sender-pubkey&amp;gt;&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1736200000,
  &amp;#34;kind&amp;#34;: 4,
  &amp;#34;tags&amp;#34;: [[&amp;#34;p&amp;#34;, &amp;#34;&amp;lt;recipient-pubkey&amp;gt;&amp;#34;]],
  &amp;#34;content&amp;#34;: &amp;#34;base64-ciphertext?iv=base64-iv&amp;#34;,
  &amp;#34;sig&amp;#34;: &amp;#34;&amp;lt;signature&amp;gt;&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The encryption flow:
1. Compute shared point: &lt;code&gt;shared = ECDH(sender_privkey, recipient_pubkey)&lt;/code&gt;
2. Derive key: &lt;code&gt;key = SHA256(shared_x_coordinate)&lt;/code&gt;
3. Generate random 16-byte IV
4. Encrypt: &lt;code&gt;ciphertext = AES-256-CBC(key, iv, plaintext)&lt;/code&gt;
5. Format content: &lt;code&gt;base64(ciphertext)?iv=base64(iv)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security problems:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No authentication:&lt;/strong&gt; AES-CBC provides confidentiality but not integrity. An attacker who controls a relay could modify ciphertext bits, causing predictable changes to plaintext (bit-flipping attacks).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IV in the clear:&lt;/strong&gt; The initialization vector is transmitted alongside ciphertext, and CBC mode with predictable IVs enables chosen-plaintext attacks.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No padding validation:&lt;/strong&gt; Implementations vary in how they handle PKCS#7 padding, potentially enabling padding oracle attacks.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Metadata exposure:&lt;/strong&gt; The sender pubkey, recipient pubkey, and timestamp are all visible to relays.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key reuse:&lt;/strong&gt; The same shared secret is used for all messages between two parties, forever.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why it still exists:&lt;/strong&gt; Many older clients and relays only support NIP-04. You&amp;#39;ll encounter it when interacting with legacy systems. Signers like Amber and apps like Primal still implement &lt;code&gt;nip04_encrypt&lt;/code&gt;/&lt;code&gt;nip04_decrypt&lt;/code&gt; for backward compatibility.&lt;/p&gt;

&lt;h3 id=&#34;nip-44-https-nostrcompass-org-en-topics-nip-44-versioned-encryption-2&#34;&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-44/&#34;&gt;NIP-44&lt;/a&gt;: Versioned Encryption&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/44.md&#34;&gt;NIP-44&lt;/a&gt; is the modern encryption standard, designed to fix NIP-04&amp;#39;s well-known flaws. A Cure53 security audit of NIP-44 implementations identified 10 issues (including timing attacks and forward secrecy concerns) that were addressed before the spec was finalized. It uses ChaCha20-Poly1305 with proper key derivation and authenticated encryption.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key improvements over NIP-04:&lt;/strong&gt;&lt;/p&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&#34;left&#34;&gt;Aspect&lt;/th&gt;
&lt;th align=&#34;left&#34;&gt;NIP-04&lt;/th&gt;
&lt;th align=&#34;left&#34;&gt;NIP-44&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;Cipher&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;AES-256-CBC&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;XChaCha20-Poly1305&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;Authentication&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;None&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;Poly1305 MAC&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;Key derivation&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;SHA256(shared_x)&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;HKDF with salt&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;Nonce&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;16-byte IV, reused pattern&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;24-byte random nonce&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;Padding&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;PKCS#7 (leaks length)&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;Padded to power of 2&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;Versioning&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;None&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;Version byte prefix&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Encryption flow:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Conversation key:&lt;/strong&gt; Derive a stable key for each sender-recipient pair:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;shared_x = ECDH(sender_privkey, recipient_pubkey).x
conversation_key = HKDF-SHA256(
 ikm = shared_x,
 salt = &amp;#34;nip44-v2&amp;#34;,
 info = &amp;#34;&amp;#34;
)
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Message keys:&lt;/strong&gt; For each message, generate a random 32-byte nonce and derive encryption/authentication keys:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;keys = HKDF-SHA256(
 ikm = conversation_key,
 salt = nonce,
 info = &amp;#34;nip44-v2&amp;#34;
)
chacha_key = keys[0:32]
chacha_nonce = keys[32:44]
hmac_key = keys[44:76]
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pad plaintext:&lt;/strong&gt; Pad to the next power of 2 (minimum 32 bytes) to hide message length:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;padded = [length_u16_be] &#43; [plaintext] &#43; [zeros to next power of 2]
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Encrypt and authenticate:&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ciphertext = XChaCha20(chacha_key, chacha_nonce, padded)
mac = HMAC-SHA256(hmac_key, nonce &#43; ciphertext)
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Format payload:&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;payload = [version=0x02] &#43; [nonce] &#43; [ciphertext] &#43; [mac]
content = base64(payload)
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Version byte:&lt;/strong&gt; The first byte (&lt;code&gt;0x02&lt;/code&gt;) indicates the encryption version. This allows future upgrades without breaking existing messages. Version &lt;code&gt;0x01&lt;/code&gt; was an earlier draft that was never widely deployed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Decryption:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Decode base64, check version byte is &lt;code&gt;0x02&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Extract nonce (bytes 1-32), ciphertext, and MAC (last 32 bytes)&lt;/li&gt;
&lt;li&gt;Derive conversation key using recipient&amp;#39;s private key and sender&amp;#39;s public key&lt;/li&gt;
&lt;li&gt;Derive message keys from conversation key and nonce&lt;/li&gt;
&lt;li&gt;Verify MAC before decrypting (reject if invalid)&lt;/li&gt;
&lt;li&gt;Decrypt ciphertext, extract length prefix, return unpadded plaintext&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Security properties:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Authenticated encryption:&lt;/strong&gt; Poly1305 MAC ensures any tampering is detected before decryption&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Forward secrecy (partial):&lt;/strong&gt; Each message uses a unique nonce, so compromising one message doesn&amp;#39;t reveal others. However, compromising a private key still reveals all past messages (no ratcheting).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Length hiding:&lt;/strong&gt; Power-of-2 padding obscures exact message length&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Timing attack resistance:&lt;/strong&gt; Constant-time comparison for MAC verification&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Usage in practice:&lt;/strong&gt; NIP-44 is the encryption layer for:
- &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; private direct messages (inside gift wrap)
- &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; remote signer communication
- &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-59/&#34;&gt;NIP-59&lt;/a&gt; seal encryption
- &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-104/&#34;&gt;Marmot Protocol&lt;/a&gt; group messages, where NIP-44 wraps MLS-encrypted content using a key derived from the MLS exporter secret
- Any application needing secure point-to-point encryption&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Migration guidance:&lt;/strong&gt; New applications should use NIP-44 exclusively. For backward compatibility, check if a contact&amp;#39;s client supports NIP-44 (via &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-89/&#34;&gt;NIP-89&lt;/a&gt; app metadata or relay support) before falling back to NIP-04. When receiving messages, attempt NIP-44 decryption first, then fall back to NIP-04 for legacy content.&lt;/p&gt;

&lt;h2 id=&#34;releases-47&#34;&gt;Releases&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Primal Android v2.6.18&lt;/strong&gt; - &lt;a href=&#34;https://github.com/PrimalHQ/primal-android-app/releases/tag/2.6.18&#34;&gt;Full release&lt;/a&gt; adds &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; remote signing and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-55/&#34;&gt;NIP-55&lt;/a&gt; local signing, turning Primal into a signing hub for other Android apps. Performance improvements include media pre-caching, avatar pre-caching, and faster thread loading. Bug fixes address self-mentions in bios, media gallery crashes, and stream title fallbacks. On iOS, Primal uses background audio playback to keep the app alive for receiving NIP-46 signing requests; users can change the sound or mute it entirely in settings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mostro v0.15.6&lt;/strong&gt; - The &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-69/&#34;&gt;NIP-69&lt;/a&gt; P2P Bitcoin trading bot&amp;#39;s &lt;a href=&#34;https://github.com/MostroP2P/mostro/releases/tag/v0.15.6&#34;&gt;latest release&lt;/a&gt; completes the development fund implementation with Phase 4 audit events. Dev fee payments are now tracked via kind 38383 Nostr events published after each successful payment, enabling third-party verification and analytics. Amount calculations were fixed for buyer/seller messages, and premium logic was aligned with the lnp2pbot reference implementation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Aegis v0.3.5&lt;/strong&gt; - The cross-platform signer &lt;a href=&#34;https://github.com/ZharlieW/Aegis/releases/tag/v0.3.5&#34;&gt;adds dark mode&lt;/a&gt;, improved app icon display, and cleaner UI layouts. Bug fixes address iOS iCloud Private Relay conflicts and event parsing issues. The release also improves how event JSON is passed to the Rust signing function.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Citrine v1.0.0&lt;/strong&gt; - The Android relay app &lt;a href=&#34;https://github.com/greenart7c3/Citrine/releases/tag/v1.0.0&#34;&gt;reaches 1.0&lt;/a&gt;. Citrine lets you run a personal Nostr relay directly on your Android device, useful for local caching, backup, or as a NIP-55 companion. This release adds a crash report handler, improves database query efficiency, and updates translations via Crowdin.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Applesauce v5.0.0&lt;/strong&gt; - hzrd149&amp;#39;s TypeScript library suite &lt;a href=&#34;https://github.com/hzrd149/applesauce/releases&#34;&gt;ships a major version&lt;/a&gt; with breaking changes focused on correctness and simplicity. The core package now &lt;a href=&#34;https://github.com/hzrd149/applesauce/releases/tag/applesauce-core%405.0.0&#34;&gt;verifies event signatures by default&lt;/a&gt; and renames coordinate methods to use clearer &amp;#34;address&amp;#34; terminology (&lt;code&gt;parseCoordinate&lt;/code&gt; → &lt;code&gt;parseReplaceableAddress&lt;/code&gt;). The relay package &lt;a href=&#34;https://github.com/hzrd149/applesauce/releases/tag/applesauce-relay%405.0.0&#34;&gt;lowers default retries from 10 to 3&lt;/a&gt; and ignores unreachable relays by default, plus adds &lt;code&gt;createUnifiedEventLoader&lt;/code&gt; for simpler event fetching. The wallet package gains &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-87/&#34;&gt;NIP-87&lt;/a&gt; &lt;a href=&#34;https://github.com/hzrd149/applesauce/releases/tag/applesauce-wallet%405.0.0&#34;&gt;Cashu mint discovery&lt;/a&gt;. Direct &lt;code&gt;nostr-tools&lt;/code&gt; dependencies were removed across packages, reducing bundle size and version conflicts.&lt;/p&gt;

&lt;h2 id=&#34;notable-code-and-documentation-changes-11&#34;&gt;Notable code and documentation changes&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;These are open pull requests and early-stage work, perfect for getting feedback before they merge. If something catches your eye, consider reviewing or commenting!&lt;/em&gt;&lt;/p&gt;

&lt;h3 id=&#34;damus-ios-8&#34;&gt;Damus (iOS)&lt;/h3&gt;

&lt;p&gt;A series of PRs improve the longform article experience. &lt;a href=&#34;https://github.com/damus-io/damus/pull/3496&#34;&gt;Reading UX improvements&lt;/a&gt; add a progress bar, estimated read time, sepia mode, adjustable line height, and focus mode that hides navigation while scrolling. &lt;a href=&#34;https://github.com/damus-io/damus/pull/3489&#34;&gt;Image fixes&lt;/a&gt; ensure images in markdown content display with proper aspect ratios by preprocessing standalone images as block-level elements. &lt;a href=&#34;https://github.com/damus-io/damus/pull/3497&#34;&gt;Longform preview cards&lt;/a&gt; replace inline &lt;code&gt;@naddr1...&lt;/code&gt; text with rich preview cards showing article title and metadata. A new &lt;a href=&#34;https://github.com/damus-io/damus/pull/3508&#34;&gt;relay integration test suite&lt;/a&gt; adds 137 network-related tests including &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-01/&#34;&gt;NIP-01&lt;/a&gt; protocol verification and behavior under degraded network conditions (3G simulation).&lt;/p&gt;

&lt;h3 id=&#34;bitchat-encrypted-messaging-2&#34;&gt;Bitchat (Encrypted Messaging)&lt;/h3&gt;

&lt;p&gt;Security hardening in the iOS Nostr&#43;Cashu messenger. &lt;a href=&#34;https://github.com/permissionlesstech/bitchat/pull/928&#34;&gt;Noise protocol DH secret clearing&lt;/a&gt; fixes six locations where shared secrets weren&amp;#39;t being zeroed after Diffie-Hellman key agreement, restoring forward secrecy guarantees. &lt;a href=&#34;https://github.com/permissionlesstech/bitchat/pull/929&#34;&gt;Thread safety for read receipt queues&lt;/a&gt; adds barrier synchronization to prevent race conditions in NostrTransport. &lt;a href=&#34;https://github.com/permissionlesstech/bitchat/pull/920&#34;&gt;Message deduplicator optimization&lt;/a&gt; improves performance with high message volumes, and &lt;a href=&#34;https://github.com/permissionlesstech/bitchat/pull/919&#34;&gt;hex string parsing hardening&lt;/a&gt; prevents crashes from malformed input.&lt;/p&gt;

&lt;h3 id=&#34;frostr-threshold-signing-2&#34;&gt;Frostr (Threshold Signing)&lt;/h3&gt;

&lt;p&gt;The &lt;a href=&#34;https://nostrcompass.org/en/topics/frost/&#34;&gt;FROST&lt;/a&gt;-based threshold signing protocol &lt;a href=&#34;https://github.com/FROSTR-ORG/igloo-desktop/pull/62&#34;&gt;added QR code display&lt;/a&gt; for group credentials and share credentials during onboarding and in the signer interface. This enables easier setup when distributing key shares across multiple devices, letting users scan credentials instead of manually copying long strings.&lt;/p&gt;

&lt;h3 id=&#34;marmot-mdk-library-2&#34;&gt;Marmot mdk (Library)&lt;/h3&gt;

&lt;p&gt;Beyond the security fixes mentioned above, active PRs address remaining audit findings: &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/109&#34;&gt;Secret&amp;lt;T&amp;gt; type for zeroization&lt;/a&gt; introduces a wrapper type that automatically zeros sensitive data on drop, &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/111&#34;&gt;messages query pagination&lt;/a&gt; prevents memory exhaustion when loading chat history, and &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/102&#34;&gt;encrypted storage&lt;/a&gt; adds at-rest encryption for the SQLite database storing group state and messages.&lt;/p&gt;

&lt;h3 id=&#34;amethyst-android-5&#34;&gt;Amethyst (Android)&lt;/h3&gt;

&lt;p&gt;A busy week of stability fixes across the Android client. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/commit/2c42796&#34;&gt;Lenient JSON parsing&lt;/a&gt; prevents crashes from malformed events by making Kotlin Serialization more forgiving. Event validation now &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/commit/40f9622&#34;&gt;checks kind field size&lt;/a&gt; before processing to avoid exceptions from oversized values. The trust score UI got a smaller icon to reduce visual interference, and &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/commit/69c53ac&#34;&gt;improved error logging&lt;/a&gt; helps diagnose relay connection issues. Translation updates arrived via Crowdin, and several SonarQube warnings were addressed.&lt;/p&gt;

&lt;h3 id=&#34;tenex-ai-agents-2&#34;&gt;TENEX (AI Agents)&lt;/h3&gt;

&lt;p&gt;The Nostr-native AI agent framework saw 81 commits this week building out autonomous capabilities. New &lt;a href=&#34;https://github.com/tenex-chat/tenex/pull/48&#34;&gt;agent supervision system&lt;/a&gt; implements behavioral heuristics to monitor agent actions and intervene when needed. &lt;a href=&#34;https://github.com/tenex-chat/tenex/commit/b244c10&#34;&gt;Delegation transparency&lt;/a&gt; adds user intervention logging to delegation transcripts, so users can audit what agents did on their behalf. The &lt;a href=&#34;https://github.com/tenex-chat/tenex/pull/47&#34;&gt;LLM provider registry&lt;/a&gt; was modularized for easier integration of different AI backends. Cross-project conversation support lets agents maintain context across multiple Nostr-based projects.&lt;/p&gt;

&lt;h3 id=&#34;jumble-web-client-5&#34;&gt;Jumble (Web Client)&lt;/h3&gt;

&lt;p&gt;The relay-focused web client added several user experience improvements. &lt;a href=&#34;https://github.com/CodyTseng/jumble/commit/695f2fe&#34;&gt;Smart relay pool&lt;/a&gt; intelligently manages connections based on usage patterns. &lt;a href=&#34;https://github.com/CodyTseng/jumble/commit/917fcd9&#34;&gt;Live feed toggle&lt;/a&gt; lets users switch between real-time streaming and manual refresh. &lt;a href=&#34;https://github.com/CodyTseng/jumble/commit/d1b3a8c&#34;&gt;Auto-show new notes&lt;/a&gt; at top surfaces fresh content without requiring page reload. &lt;a href=&#34;https://github.com/CodyTseng/jumble/commit/fd9f41c&#34;&gt;Persistent cache&lt;/a&gt; for following feed and notifications improves load times on return visits. Users can now &lt;a href=&#34;https://github.com/CodyTseng/jumble/commit/53a67d8&#34;&gt;change default relays&lt;/a&gt; through settings.&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;That&amp;#39;s it for this week. Building something? Have news to share? Want us to cover your project? Reach out via NIP-17 DM or find us on Nostr.&lt;/p&gt;
 &lt;/blockquote&gt;
    </content>
    <updated>2026-01-07T15:48:53Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs25e86ju7rzyax2rk2equw0swm3s3dqgt54aaqyw7p8wr33v07qkszypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqsu3tkq</id>
    
      <title type="html">Nostr Compass now has a podcast edition. Each week we record a ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs25e86ju7rzyax2rk2equw0swm3s3dqgt54aaqyw7p8wr33v07qkszypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqsu3tkq" />
    <content type="html">
      Nostr Compass now has a podcast edition. Each week we record a panel discussion walking through the newsletter with developers and contributors from the ecosystem. Subscribe via RSS to get new episodes in your podcast app of choice.&lt;br/&gt;&lt;br/&gt;RSS: &lt;a href=&#34;https://castr.me/npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923/rss.xml&#34;&gt;https://castr.me/npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923/rss.xml&lt;/a&gt;&lt;br/&gt;&lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nevent1qqspj9w0dwwweg0vutg9l8ypzku7acautu9ugrqccjat5w8th9xht2sppemhxue69uhkummn9ekx7mp0qgs8wk257uc5zyjgnf9znmrf9dersm7kp0xwkqcg6s33q84f08zh4qqrqsqqqqqpa9ytf3&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;nevent1q…ytf3&lt;/a&gt;&lt;/span&gt; &lt;/div&gt; Nostr Compass Podcast #2&lt;br/&gt;&lt;br/&gt;Primal Android joins Amber and Aegis as a full NIP-55 signer, Shopstr introduces Zapsnags for flash sales via Lightning, and Mostro adds an opt-in development fund. Plus: NDK cache queries got 162x faster, we break down NIP-02 (follow lists) and NIP-10 (reply threading), and the panel explores multi-agent AI systems on Nostr.&lt;br/&gt; &lt;a href=&#34;https://blossom.primal.net/e99e56f8375773124281450b78eb79c5f4c68ba34c5172fa964681ec2ab09efc.mp3&#34;&gt;https://blossom.primal.net/e99e56f8375773124281450b78eb79c5f4c68ba34c5172fa964681ec2ab09efc.mp3&lt;/a&gt; &lt;br/&gt;&lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqsfydhe43fphchwpf20rnllmukl0ayc9h6wd6ue9pnawv77hnu4kdgpzamhxue69uhhyetvv9ujuurjd9kkzmpwdejhgtcpr9mhxue69uhhyetvv9ujuumwdae8gtnnda3kjctv9uq3qamnwvaz7tmwduh8xarj9e3hytc4uhx75&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;jgmontoya&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…hx75&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqszv6q4uryjzr06xfxxew34wwc5hmjfmfpqn229d72gfegsdn2q3fgpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhszythwden5te0dehhxarj9emkjmn99uq35amnwvaz7tms09exzmtfvshxv6tpw34xze3wvdhk6tc4uevew&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;hzrd149&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…evew&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqsqqqqqqqr99ezjae52qyv8lvyv3x2fdj6xedgar2sgq0gx8t8dhfcpr9mhxue69uhhqun9d45h2mfwwpexjmtpdshxuet59uqjyamn8ghj7mn0wd68y6np944kzunf9458gars9e5x2em4wfhjucm0d5hszrnhwden5te0dehhxtnvdakz7q5ymvj&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;negrunch&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…ymvj&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqsyvrp9u6p0mfur9dfdru3d853tx9mdjuhkphxuxgfwmryja7zsvhqpz9mhxue69uhkummnw3ezuamfdejj7qghwaehxw309amxjar0wghxummnw3erztnrdakj7qgswaehxw309ahx7um5wghx6mmd9ud62lxp&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;VitorPamplona&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…2lxp&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqst0mtgkp3du662ztj3l4fgts0purksu5fgek5n4vgmg9gt2hkn9lqppemhxue69uhkummn9ekx7mp0qythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qythwumn8ghj7un9d3shjtnp0faxzmt09ehx2ap06fen87&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Max&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…en87&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;/blockquote&gt;
    </content>
    <updated>2026-01-05T21:01:26Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqspj9w0dwwweg0vutg9l8ypzku7acautu9ugrqccjat5w8th9xht2szypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqklcytk</id>
    
      <title type="html">Nostr Compass Podcast #2 Primal Android joins Amber and Aegis as ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqspj9w0dwwweg0vutg9l8ypzku7acautu9ugrqccjat5w8th9xht2szypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqklcytk" />
    <content type="html">
      Nostr Compass Podcast #2&lt;br/&gt;&lt;br/&gt;Primal Android joins Amber and Aegis as a full NIP-55 signer, Shopstr introduces Zapsnags for flash sales via Lightning, and Mostro adds an opt-in development fund. Plus: NDK cache queries got 162x faster, we break down NIP-02 (follow lists) and NIP-10 (reply threading), and the panel explores multi-agent AI systems on Nostr.&lt;br/&gt; &lt;a href=&#34;https://blossom.primal.net/e99e56f8375773124281450b78eb79c5f4c68ba34c5172fa964681ec2ab09efc.mp3&#34;&gt;https://blossom.primal.net/e99e56f8375773124281450b78eb79c5f4c68ba34c5172fa964681ec2ab09efc.mp3&lt;/a&gt; &lt;br/&gt;&lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqsfydhe43fphchwpf20rnllmukl0ayc9h6wd6ue9pnawv77hnu4kdgpzamhxue69uhhyetvv9ujuurjd9kkzmpwdejhgtcpr9mhxue69uhhyetvv9ujuumwdae8gtnnda3kjctv9uq3qamnwvaz7tmwduh8xarj9e3hytc4uhx75&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;jgmontoya&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…hx75&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqszv6q4uryjzr06xfxxew34wwc5hmjfmfpqn229d72gfegsdn2q3fgpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhszythwden5te0dehhxarj9emkjmn99uq35amnwvaz7tms09exzmtfvshxv6tpw34xze3wvdhk6tc4uevew&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;hzrd149&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…evew&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqsqqqqqqqr99ezjae52qyv8lvyv3x2fdj6xedgar2sgq0gx8t8dhfcpr9mhxue69uhhqun9d45h2mfwwpexjmtpdshxuet59uqjyamn8ghj7mn0wd68y6np944kzunf9458gars9e5x2em4wfhjucm0d5hszrnhwden5te0dehhxtnvdakz7q5ymvj&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;negrunch&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…ymvj&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqsyvrp9u6p0mfur9dfdru3d853tx9mdjuhkphxuxgfwmryja7zsvhqpz9mhxue69uhkummnw3ezuamfdejj7qghwaehxw309amxjar0wghxummnw3erztnrdakj7qgswaehxw309ahx7um5wghx6mmd9ud62lxp&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;VitorPamplona&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…2lxp&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqst0mtgkp3du662ztj3l4fgts0purksu5fgek5n4vgmg9gt2hkn9lqppemhxue69uhkummn9ekx7mp0qythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qythwumn8ghj7un9d3shjtnp0faxzmt09ehx2ap06fen87&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Max&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…en87&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;
    </content>
    <updated>2026-01-05T20:57:46Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs0t3cej42wdxgm60q63l9pjqpgf0mh09xevr2lsdvcym58me42v0szypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqy949r9</id>
    
      <title type="html">Nostr Compass #3 is out: &amp;#34;Five Years of Nostr Decembers&amp;#34; ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs0t3cej42wdxgm60q63l9pjqpgf0mh09xevr2lsdvcym58me42v0szypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqy949r9" />
    <content type="html">
      Nostr Compass #3 is out: &amp;#34;Five Years of Nostr Decembers&amp;#34;&lt;br/&gt;&lt;br/&gt;A technical retrospective tracing December milestones from 2020&amp;#39;s genesis through Jack&amp;#39;s 14 BTC donation to this month&amp;#39;s NIP-55 signer expansion and NDK&amp;#39;s 162x speedup.&lt;br/&gt;&lt;br/&gt;Plus: Amethyst desktop module, Notedeck messaging, Citrine web hosting, NIP-54 internationalization fixes. &lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/naddr1qqgxxetyxvex2deexf3nwvtpxp3rvq3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqp65w67xjeh&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;naddr1qq…xjeh&lt;/a&gt;&lt;/span&gt; &lt;/div&gt; &lt;p&gt;Welcome back to Nostr Compass, your weekly guide to the Nostr protocol ecosystem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This week:&lt;/strong&gt; As 2025 closes, we look back at five years of December milestones in Nostr&amp;#39;s evolution. From fiatjaf&amp;#39;s first client release in December 2020, through Jack Dorsey&amp;#39;s pivotal 14 BTC donation in December 2022, to this month&amp;#39;s NIP-55 signer proliferation and NDK&amp;#39;s 162x cache speedup, December has consistently marked turning points for the protocol. This special issue traces the technical history through each December, documenting the protocol&amp;#39;s growth from two experimental relays to 2,500&#43; nodes across 50 countries. Plus: Amethyst&amp;#39;s desktop module takes shape via Quartz, Notedeck gains messaging, Citrine hosts web apps, and NIP-54 fixes internationalization for non-Latin scripts.&lt;/p&gt;

&lt;h2 id=&#34;december-recap-five-years-of-nostr-decembers-5&#34;&gt;December Recap: Five Years of Nostr Decembers&lt;/h2&gt;

&lt;p&gt;Nostr turns five this year. fiatjaf initiated the protocol on November 7, 2020, and every December since has marked a distinct phase in its evolution: from proof-of-concept to global movement to production ecosystem. This is a technical retrospective of December 2020 through December 2025, the formative years that established Nostr&amp;#39;s foundation and catalyzed its breakout moment.&lt;/p&gt;

&lt;h3 id=&#34;december-2020-genesis-5&#34;&gt;December 2020: Genesis&lt;/h3&gt;

&lt;p&gt;The first full month of Nostr&amp;#39;s existence saw fiatjaf release &lt;a href=&#34;https://github.com/fiatjaf/branle&#34;&gt;Branle&lt;/a&gt;, the protocol&amp;#39;s first client, built with Quasar (Vue.js) and absurd-sql for local storage. fiatjaf had already established the core architecture: users identified by secp256k1 public keys, all posts cryptographically signed, relays serving as dumb storage that don&amp;#39;t communicate with each other. One or two experimental relays served a handful of early adopters coordinating in the Telegram group &lt;a href=&#34;https://t.me/nostr_protocol&#34;&gt;@nostr_protocol&lt;/a&gt;, which had launched November 16. The &lt;a href=&#34;https://fiatjaf.com/nostr.html&#34;&gt;original documentation&lt;/a&gt; described &amp;#34;the simplest open protocol that is able to create a censorship-resistant global social network,&amp;#34; a premise that would take two more years to prove.&lt;/p&gt;

&lt;h3 id=&#34;december-2021-early-development-5&#34;&gt;December 2021: Early Development&lt;/h3&gt;

&lt;p&gt;On December 31, 2021, Nostr hit the &lt;a href=&#34;https://news.ycombinator.com/item?id=29749061&#34;&gt;Hacker News front page&lt;/a&gt; with 110 points and 138 comments, submitted by Cameri. This marked the protocol&amp;#39;s first significant exposure to the broader developer community. The network ran on approximately seven relays with fewer than 1,000 users. Branle received updates including private key import (December 31) and multi-relay support. A command-line client, noscl, provided terminal-based interaction. The protocol specifications existed in fiatjaf&amp;#39;s documentation, though the formal &lt;a href=&#34;https://github.com/nostr-protocol/nips&#34;&gt;NIPs repository&lt;/a&gt; wouldn&amp;#39;t be created until May 2022. The protocol was, as fiatjaf described it, &amp;#34;a work in progress.&amp;#34;&lt;/p&gt;

&lt;h3 id=&#34;december-2022-the-tipping-point-5&#34;&gt;December 2022: The Tipping Point&lt;/h3&gt;

&lt;p&gt;December 2022 transformed Nostr from a niche experiment into a mainstream movement. The catalyst came on December 15, when Jack Dorsey donated &lt;a href=&#34;https://www.coindesk.com/tech/2022/12/15/jack-dorsey-gives-decentralized-social-network-nostr-14-btc-in-funding&#34;&gt;14.17171699 BTC&lt;/a&gt; (~$245,000-$250,000) to fiatjaf after discovering the protocol and declaring it &amp;#34;100 percent what we wanted from Bluesky, but it wasn&amp;#39;t developed from a company.&amp;#34; On December 16, fiatjaf announced splitting funds with Damus developer William Casarin (jb55), and Dorsey verified his Nostr account (npub: &lt;code&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1sg6plzptd64u62a878hep2kev88swjh3tw00gjsfl8f237lmu63q0uf63m&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;jack&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1sg6…f63m&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;&lt;/code&gt;). The funding legitimized the project overnight.&lt;/p&gt;

&lt;p&gt;The same week, Twitter&amp;#39;s chaos accelerated adoption. December 14-15 saw suspensions of prominent journalists from the New York Times, CNN, and Washington Post. On December 18, Twitter &lt;a href=&#34;https://techcrunch.com/2022/12/18/twitter-wont-let-you-post-your-facebook-instagram-and-mastodon-handles/&#34;&gt;announced bans&lt;/a&gt; on accounts promoting Nostr, Mastodon, and other platforms. The policy was reversed the following day after backlash. The exodus drove users to explore alternatives.&lt;/p&gt;

&lt;p&gt;Protocol development surged. On December 16, &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-19/&#34;&gt;NIP-19&lt;/a&gt; was merged (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/57&#34;&gt;#57&lt;/a&gt;), introducing bech32-encoded identifiers (npub, nsec, note, nprofile, nevent) that made keys human-readable and distinguishable. The NIPs repository logged 36&#43; commits that month, including NIP-40 and NIP-07 updates. Clients proliferated: Damus filled its TestFlight beta within hours, Astral forked Branle for profile creation, Snort launched as a &amp;#34;fast, censorship-resistant&amp;#34; web client, and Vitor Pamplona began Amethyst development. Alby v1.22.1 &amp;#34;Kemble&amp;#39;s Cascade of Stars&amp;#34; shipped December 22 with NIP-19 support. By December 7, Nostr had approximately 800 users with profiles; when Damus hit the App Store on January 31, 2023, the floodgates opened, driving growth to 315,000&#43; users by June 2023.&lt;/p&gt;

&lt;h3 id=&#34;december-2023-ecosystem-maturation-5&#34;&gt;December 2023: Ecosystem Maturation&lt;/h3&gt;

&lt;p&gt;December 2023 marked a critical inflection point for Nostr protocol security. On December 20, &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/746&#34;&gt;NIP-44 revision 3 was merged&lt;/a&gt; following an independent Cure53 security audit (NOS-01) that identified 10 issues in the TypeScript, Go, and Rust implementations, including timing attacks and forward secrecy concerns. The updated spec replaced the flawed &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-04/&#34;&gt;NIP-04&lt;/a&gt; encryption with ChaCha20 and HMAC-SHA256, establishing the cryptographic foundation that now underpins &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; private DMs and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-59/&#34;&gt;NIP-59&lt;/a&gt; gift wrapping. The same week, &lt;a href=&#34;https://opensats.org/blog/nostr-grants-december-2023&#34;&gt;OpenSats announced their fourth wave of grants&lt;/a&gt; on December 21, funding seven projects including Lume, noStrudel, ZapThreads, and an independent NIP-44 audit. This followed the &lt;a href=&#34;https://opensats.org/blog/nostr-grants-july-2023&#34;&gt;first wave in July 2023&lt;/a&gt; that had funded Damus, Coracle, Iris, and others, bringing total Nostr Fund allocation to approximately $3.4 million across 39 grants.&lt;/p&gt;

&lt;p&gt;The month also exposed sustainability tensions in the ecosystem. On December 28, William Casarin (jb55) &lt;a href=&#34;https://stacker.news/items/368863&#34;&gt;posted on Stacker News&lt;/a&gt; that 2024 would &amp;#34;likely be the last year of Damus,&amp;#34; citing that &amp;#34;nostr clients don&amp;#39;t make money&amp;#34; after Apple&amp;#39;s restrictions on in-app zaps severely limited revenue potential. The Damus team had previously rejected VC funding. Meanwhile, &lt;a href=&#34;https://github.com/getAlby/nostr-wallet-connect/releases/tag/0.4.1&#34;&gt;Nostr Wallet Connect v0.4.1&lt;/a&gt; shipped on December 26, extending &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-47/&#34;&gt;NIP-47&lt;/a&gt; with &lt;code&gt;pay_keysend&lt;/code&gt;, &lt;code&gt;make_invoice&lt;/code&gt;, &lt;code&gt;lookup_invoice&lt;/code&gt;, &lt;code&gt;list_transactions&lt;/code&gt;, &lt;code&gt;get_balance&lt;/code&gt;, and &lt;code&gt;get_info&lt;/code&gt; methods, laying groundwork for the wallet integrations that would become standard across clients.&lt;/p&gt;

&lt;h3 id=&#34;december-2024-protocol-advancement-5&#34;&gt;December 2024: Protocol Advancement&lt;/h3&gt;

&lt;p&gt;December 2024 opened with the &lt;a href=&#34;https://damus.io/notedeck/&#34;&gt;Notedeck Alpha launch&lt;/a&gt; on November 30, the Damus team&amp;#39;s Rust-based desktop client featuring a multi-column interface with multiple account support. Built for Linux, macOS, and Windows (Android planned for 2025), Notedeck initially shipped to Damus Purple subscribers and represented a strategic expansion beyond iOS. Two weeks later, &lt;a href=&#34;https://opensats.org/blog/9th-wave-of-nostr-grants&#34;&gt;OpenSats announced their ninth wave of grants&lt;/a&gt; on December 16, funding AlgoRelay (the first algorithmic relay for personalized feeds), Pokey (Android app with Bluetooth mesh for restricted internet), Nostr Safebox (&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-60/&#34;&gt;NIP-60&lt;/a&gt; Cashu token storage), and LumiLumi (lightweight accessible web client), pushing total Nostr Fund allocation to approximately $9 million, a 67% year-over-year increase.&lt;/p&gt;

&lt;p&gt;The month saw significant client maturation across the ecosystem. &lt;a href=&#34;https://github.com/mikedilger/gossip/releases/tag/v0.13.0&#34;&gt;Gossip 0.13.0&lt;/a&gt; landed on December 23 with File Metadata (&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-92/&#34;&gt;NIP-92&lt;/a&gt;/&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-94/&#34;&gt;NIP-94&lt;/a&gt;) support, Blossom integration, and &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-50/&#34;&gt;NIP-50&lt;/a&gt; relay search. &lt;a href=&#34;https://github.com/coracle-social/coracle/releases/tag/0.5.0&#34;&gt;Coracle 0.5.0&lt;/a&gt; shipped December 12 with reworked onboarding and nostr-editor integration. Protocol development remained active with 30 pull requests submitted between December 9-22 (10 merged), including &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-46/&#34;&gt;NIP-46&lt;/a&gt; rewrites to use only NIP-44 encryption and continued work on &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-104/&#34;&gt;NIP-104&lt;/a&gt; for Signal-level double ratchet encryption. Network statistics showed 224,000&#43; daily trusted pubkey events, 4x year-over-year growth in new profiles with contact lists, and a 50% increase in public writing events.&lt;/p&gt;

&lt;h3 id=&#34;december-2025-ecosystem-expansion-5&#34;&gt;December 2025: Ecosystem Expansion&lt;/h3&gt;

&lt;p&gt;December 2025 brought continued protocol maturation and ecosystem expansion. On December 21, &lt;a href=&#34;https://opensats.org/blog/fourteenth-wave-of-nostr-grants&#34;&gt;OpenSats announced their fourteenth wave of Nostr grants&lt;/a&gt;, funding three projects: YakiHonne (a multi-platform client with creator portal for long-form content and Cashu/Nutzaps payment integration), Quartz (Vitor Pamplona&amp;#39;s Kotlin Multiplatform library that powers Amethyst and will enable an iOS version), and Nostr Feedz (RSS-to-Nostr bidirectional integration by PlebOne). Grant renewals went to Dart NDK and Mattn&amp;#39;s nostr-relay.&lt;/p&gt;

&lt;p&gt;Protocol evolution continued with &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-be/&#34;&gt;NIP-BE&lt;/a&gt; (Bluetooth Low Energy messaging, &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1979&#34;&gt;#1979&lt;/a&gt;) merged in November, enabling offline device synchronization. &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-a4/&#34;&gt;NIP-A4&lt;/a&gt; (Public Messages, kind 24, &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1988&#34;&gt;#1988&lt;/a&gt;) landed later in the month, defining notification-screen messages that use &lt;code&gt;q&lt;/code&gt; tags to avoid threading complications. &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-29/&#34;&gt;NIP-29&lt;/a&gt; received major clarification (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2106&#34;&gt;#2106&lt;/a&gt;), introducing the &lt;code&gt;hidden&lt;/code&gt; tag for truly private, undiscoverable groups. The &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-55/&#34;&gt;NIP-55&lt;/a&gt; spec also saw refinement (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2166&#34;&gt;#2166&lt;/a&gt;), addressing a common implementation mistake where developers called &lt;code&gt;get_public_key&lt;/code&gt; from background processes.&lt;/p&gt;

&lt;p&gt;On the client side, &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2025-12-24-newsletter/#news&#34;&gt;Primal Android became a full NIP-55 signer&lt;/a&gt; through eight merged PRs implementing &lt;code&gt;LocalSignerContentProvider&lt;/code&gt;, joining Amber and Aegis as Android signing options. The &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2025-12-24-newsletter/#notable-code-and-documentation-changes&#34;&gt;NDK library achieved 162x faster cache queries&lt;/a&gt; (from ~3,690ms to ~22ms) by eliminating duplicate writes and unnecessary LRU cache lookups (&lt;a href=&#34;https://github.com/nostr-dev-kit/ndk/pull/371&#34;&gt;PR #371&lt;/a&gt;, &lt;a href=&#34;https://github.com/nostr-dev-kit/ndk/pull/372&#34;&gt;PR #372&lt;/a&gt;). Shopstr introduced &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2025-12-24-newsletter/#news&#34;&gt;Zapsnags&lt;/a&gt; for flash sales via zaps. White Noise shipped &lt;a href=&#34;https://nostrcompass.org/en/topics/mip-05/&#34;&gt;MIP-05&lt;/a&gt; privacy-preserving push notifications. See &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2025-12-17-newsletter/&#34;&gt;Newsletter #1&lt;/a&gt; and &lt;a href=&#34;https://nostrcompass.org/en/newsletters/2025-12-24-newsletter/&#34;&gt;Newsletter #2&lt;/a&gt; for complete coverage.&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;Five years ago, fiatjaf released Branle to a handful of users across two experimental relays. Today, the protocol supports 140&#43; clients, 2,500&#43; relays across 50 countries, and a growing web of trust linking hundreds of thousands of keypairs. December&amp;#39;s pattern of major releases continued this month with Bluetooth messaging, Android signer proliferation, and infrastructure grants signaling sustained investment in cross-platform tooling.&lt;/p&gt;

&lt;h2 id=&#34;news-44&#34;&gt;News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Amethyst Desktop Takes Shape&lt;/strong&gt; - The Quartz grant from OpenSats&amp;#39; fourteenth wave is already producing results. &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/1625&#34;&gt;PR #1625&lt;/a&gt; creates a full &lt;code&gt;:desktopApp&lt;/code&gt; module for Amethyst using Compose Multiplatform, with login and global feed screens functional on Desktop JVM. The architecture converts the &lt;code&gt;:commons&lt;/code&gt; module to Kotlin Multiplatform with a clean source set structure (&lt;code&gt;commonMain&lt;/code&gt;, &lt;code&gt;jvmAndroid&lt;/code&gt;, &lt;code&gt;androidMain&lt;/code&gt;, &lt;code&gt;jvmMain&lt;/code&gt;), enabling shared UI components between Android and desktop while leaving platform-specific decisions to each target. This lays the foundation for the eventual iOS version via the same Kotlin Multiplatform approach.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Amethyst Voice Replies&lt;/strong&gt; - A Christmas delivery from davotoula: &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/1622&#34;&gt;PR #1622&lt;/a&gt; adds dedicated voice reply screens with waveform visualization, re-record support, media server selection, and upload progress indicators. Users can now reply to both root voice messages and voice replies with audio.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Notedeck Adds Messaging&lt;/strong&gt; - Notedeck, the Damus desktop client, gained a messages feature in &lt;a href=&#34;https://github.com/damus-io/notedeck/pull/1223&#34;&gt;PR #1223&lt;/a&gt;, expanding beyond timeline browsing into direct communication.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Citrine Hosts Web Apps&lt;/strong&gt; - Citrine can now &lt;a href=&#34;https://github.com/greenart7c3/Citrine/pull/81&#34;&gt;host web applications&lt;/a&gt;, turning your phone into a local-first Nostr web server. A separate &lt;a href=&#34;https://github.com/greenart7c3/Citrine/pull/85&#34;&gt;PR #85&lt;/a&gt; adds automatic reconnection and event broadcasting when network connectivity returns, with comprehensive test coverage across Android API levels.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nostrability Developer Toolkit Registry&lt;/strong&gt; - The &lt;a href=&#34;https://github.com/nostrability/nostrability/issues/264&#34;&gt;Developer Kits &amp;amp; Tooling&lt;/a&gt; tracker maintains a curated registry of SDKs, libraries, and developer tools across languages (TypeScript, Rust, Python, Go, Dart, Swift, and more). If you&amp;#39;re new to Nostr development, this is a useful starting point for finding the right toolkit for your stack.&lt;/p&gt;

&lt;h2 id=&#34;nip-updates-59&#34;&gt;NIP Updates&lt;/h2&gt;

&lt;p&gt;Recent changes to the &lt;a href=&#34;https://github.com/nostr-protocol/nips&#34;&gt;NIPs repository&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/nip-54/&#34;&gt;NIP-54&lt;/a&gt;&lt;/strong&gt; - Critical internationalization fix for wiki d-tag normalization (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2177&#34;&gt;#2177&lt;/a&gt;). Previous rules converted all non-ASCII characters to &lt;code&gt;-&lt;/code&gt;, breaking support for Japanese, Chinese, Arabic, Cyrillic, and other scripts. The updated spec preserves UTF-8 letters, applies lowercase only to characters with case variants, and includes comprehensive examples: &lt;code&gt;&amp;#34;ウィキペディア&amp;#34;&lt;/code&gt; stays &lt;code&gt;&amp;#34;ウィキペディア&amp;#34;&lt;/code&gt;, &lt;code&gt;&amp;#34;Москва&amp;#34;&lt;/code&gt; becomes &lt;code&gt;&amp;#34;москва&amp;#34;&lt;/code&gt;, and mixed scripts like &lt;code&gt;&amp;#34;日本語 Article&amp;#34;&lt;/code&gt; normalize to &lt;code&gt;&amp;#34;日本語-article&amp;#34;&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;releases-50&#34;&gt;Releases&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Zapstore 1.0-rc1&lt;/strong&gt; - The Nostr-based permissionless app store ships the &lt;a href=&#34;https://github.com/zapstore/zapstore/releases/tag/1.0-rc1&#34;&gt;first release candidate&lt;/a&gt; of its new architecture, featuring a complete UI refresh, rewritten package manager with improved error handling, App Stacks for curated discovery, redesigned profile screens, background update checking, and infinite scrolling in release lists.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;KeyChat v1.38.1&lt;/strong&gt; - The MLS-based encrypted messaging app &lt;a href=&#34;https://github.com/keychat-io/keychat-app/releases/tag/v1.38.1%2B6489&#34;&gt;adds UnifiedPush support&lt;/a&gt; for Android and Linux push notifications, plus biometric authentication for privacy operations. Available for Android, Windows, macOS, and Linux.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Alby Go v2.0.0&lt;/strong&gt; - The mobile Lightning wallet companion &lt;a href=&#34;https://github.com/getAlby/go/releases/tag/v2.0.0&#34;&gt;ships a visual redesign&lt;/a&gt; with new logo, updated color palette, redesigned address book, and improved amount input keyboard. BTC Map is now accessible from the home screen, and transaction descriptions appear in notifications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;nak v0.17.4&lt;/strong&gt; - fiatjaf&amp;#39;s command-line Nostr tool &lt;a href=&#34;https://github.com/fiatjaf/nak/releases/tag/v0.17.4&#34;&gt;released&lt;/a&gt;, following v0.17.3&amp;#39;s LMDB Linux restriction fix from last week.&lt;/p&gt;

&lt;h2 id=&#34;notable-code-and-documentation-changes-14&#34;&gt;Notable code and documentation changes&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Open pull requests and early-stage work worth watching.&lt;/em&gt;&lt;/p&gt;

&lt;h3 id=&#34;damus-ios-11&#34;&gt;Damus (iOS)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/damus-io/damus/pull/3477&#34;&gt;NIP-19 relay hints&lt;/a&gt; implements relay hint consumption for event fetching. When users open nevent, nprofile, or naddr links, Damus now extracts relay hints from the bech32 TLV data and connects to ephemeral relays to fetch content not in the user&amp;#39;s relay pool. The implementation includes ref-counted cleanup to prevent race conditions during concurrent lookups. &lt;a href=&#34;https://github.com/damus-io/damus/pull/3474&#34;&gt;Image URL detection&lt;/a&gt; automatically converts pasted image URLs into preview thumbnails in the composer, with a carousel position badge for multiple images. &lt;a href=&#34;https://github.com/damus-io/damus/pull/3473&#34;&gt;npub paste conversion&lt;/a&gt; transforms pasted npub/nprofile strings into mention links with async profile resolution.&lt;/p&gt;

&lt;h3 id=&#34;amethyst-android-8&#34;&gt;Amethyst (Android)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/1627&#34;&gt;Payment targets&lt;/a&gt; adds an event interface for NIP-57 zap splits, allowing posts to specify multiple recipients who share incoming zaps (useful for collaborations, revenue sharing, or tipping both content creators and the tools they use). &lt;a href=&#34;https://github.com/vitorpamplona/amethyst/pull/1624&#34;&gt;Quartz feature parity documentation&lt;/a&gt; adds a detailed table tracking which features are implemented across Android, Desktop JVM, and iOS targets, noting that iOS is missing core cryptography (&lt;code&gt;Secp256k1Instance&lt;/code&gt;), JSON serialization, and data structures.&lt;/p&gt;

&lt;h3 id=&#34;notedeck-desktop-5&#34;&gt;Notedeck (Desktop)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/damus-io/notedeck/pull/1226&#34;&gt;Timeline filter rebuild&lt;/a&gt; fixes a bug where unfollowed accounts kept appearing in feeds. Timeline filters were built once from the contact list and never updated; the fix adds &lt;code&gt;contact_list_timestamp&lt;/code&gt; tracking and an &lt;code&gt;invalidate()&lt;/code&gt; method to trigger rebuilds when follow state changes.&lt;/p&gt;

&lt;h3 id=&#34;citrine-android-relay-8&#34;&gt;Citrine (Android Relay)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/greenart7c3/Citrine/pull/86&#34;&gt;ContentProvider API&lt;/a&gt; exposes the local relay&amp;#39;s event database to other Android apps via &lt;code&gt;ContentResolver&lt;/code&gt;. Unlike the WebSocket interface (which requires apps to maintain a persistent connection and speak the Nostr relay protocol), ContentProvider offers direct synchronous database access through Android&amp;#39;s native IPC mechanism. External apps can query events by ID, pubkey, kind, or date range, insert new events with validation, and delete events without managing socket connections.&lt;/p&gt;

&lt;h3 id=&#34;rust-nostr-library-8&#34;&gt;rust-nostr (Library)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1183&#34;&gt;NIP-40 relay-level support&lt;/a&gt; adds expiration handling at the relay builder level. Expired events are now rejected before storage and filtered out before sending to clients, eliminating the need for each database implementation to handle expiration checks independently.&lt;/p&gt;

&lt;h3 id=&#34;nak-cli-5&#34;&gt;nak (CLI)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/fiatjaf/nak/pull/91&#34;&gt;Blossom mirror&lt;/a&gt; implements blob mirroring functionality for the command-line tool.&lt;/p&gt;

&lt;h3 id=&#34;mostro-p2p-trading-5&#34;&gt;Mostro (P2P Trading)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/559&#34;&gt;Dev fee audit events&lt;/a&gt; adds transparent audit trails for development fund payments through kind 8383 Nostr events. The implementation publishes non-blocking audit events after successful fee payments, including order details and payment hashes while excluding buyer/seller pubkeys for privacy.&lt;/p&gt;

&lt;h3 id=&#34;mdk-marmot-development-kit-5&#34;&gt;MDK (Marmot Development Kit)&lt;/h3&gt;

&lt;p&gt;Three security audit fixes landed: &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/40&#34;&gt;Author verification&lt;/a&gt; enforces that rumor pubkeys match MLS sender credentials, preventing impersonation attacks. &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/41&#34;&gt;KeyPackage identity binding&lt;/a&gt; verifies credential identity matches event signers. &lt;a href=&#34;https://github.com/marmot-protocol/mdk/pull/42&#34;&gt;Admin update validation&lt;/a&gt; prevents empty admin sets and non-member admin assignments.&lt;/p&gt;

&lt;h3 id=&#34;shopstr-marketplace-5&#34;&gt;Shopstr (Marketplace)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/shopstr-eng/shopstr/pull/217&#34;&gt;HODL invoice escrow&lt;/a&gt; implements a trust-minimized payment system for physical goods. The architecture uses Alby&amp;#39;s &lt;code&gt;makeHoldInvoice&lt;/code&gt; to lock buyer funds in their own wallet, with settlement triggered only after merchant inventory verification. The handshake protocol flows through &lt;a href=&#34;https://nostrcompass.org/en/topics/nip-17/&#34;&gt;NIP-17&lt;/a&gt; encrypted DMs: buyer sends order request, merchant responds with HODL invoice, buyer pays (funds locked), merchant confirms stock and shipping, then settlement releases funds. Multi-merchant cart support splits payments across vendors.&lt;/p&gt;

&lt;h3 id=&#34;jumble-web-client-8&#34;&gt;Jumble (Web Client)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/CodyTseng/jumble/pull/713&#34;&gt;Per-relay discovery mode&lt;/a&gt; adds a toggle to hide posts from followed users on specific relays, enabling language-based discovery feeds (e.g., nostr.band/lang/*). The feature filters out posts where the author pubkey appears in the user&amp;#39;s follow list, persisting toggle state per relay URL in localStorage.&lt;/p&gt;

&lt;h3 id=&#34;white-noise-encrypted-messaging-5&#34;&gt;White Noise (Encrypted Messaging)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/937&#34;&gt;Media upload retry&lt;/a&gt; adds retry options for failed uploads. &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/927&#34;&gt;Profile edit warnings&lt;/a&gt; alert users about profile changes. On the backend, &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise-rs/pull/422&#34;&gt;whitenoise-rs&lt;/a&gt; fixes a race condition in AccountGroup creation.&lt;/p&gt;

&lt;h3 id=&#34;npub-cash-lightning-address-service-5&#34;&gt;npub.cash (Lightning Address Service)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/cashubtc/npubcash-server/pull/40&#34;&gt;v3 rewrite&lt;/a&gt; migrates to Bun for the monorepo and server, adds SQLite support, drops v1 compatibility, implements LUD-21, and adds realtime mint quote updates.&lt;/p&gt;

&lt;h3 id=&#34;nostr-java-library-5&#34;&gt;nostr-java (Library)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/tcheeric/nostr-java/releases/tag/v1.1.1&#34;&gt;v1.1.1&lt;/a&gt; ships WebSocket handling refactors and improved test robustness across &lt;a href=&#34;https://github.com/tcheeric/nostr-java/pull/499&#34;&gt;two PRs&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&#34;nips-repository-5&#34;&gt;NIPs Repository&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2180&#34;&gt;NIP-54 Djot migration&lt;/a&gt; proposes a separate change to the wiki spec: switching the content format from Asciidoc to Djot, a lightweight markup language with cleaner syntax. The PR introduces reference-style links for wikilinks, making cross-references between wiki articles more readable in source form. &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2179&#34;&gt;NIP-XX Quorum&lt;/a&gt; introduces threshold multi-signature governance for Nostr groups using FROST (Flexible Round-Optimized Schnorr Threshold signatures). A Quorum is an nsec shared among members through a T-of-N scheme where members can represent themselves or delegate to a council of representatives. When the council changes, the old nsec becomes obsolete and a new one is distributed—the final act of any council is signing the governance transition event. The spec defines membership (public or private), elections and polls (popular votes, votes of no confidence), optional natural-language &amp;#34;laws,&amp;#34; and crucially, quorum ontologies where quorums can be members of other quorums, enabling hierarchical structures like localities joining regional bodies. Use cases span source code development, company boards, HOAs, and moderated communities.&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;That&amp;#39;s it for this week and this year. Building something? Have news to share? Want us to cover your project? &amp;lt;a href=&amp;#34;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Nostr Compass&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;npub1wav…2923&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;&amp;#34;&amp;gt;Reach out via NIP-17 DM&amp;lt;/a&amp;gt; or find us on Nostr.&lt;/p&gt;
 &lt;/blockquote&gt;
    </content>
    <updated>2025-12-31T18:11:50Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsfkmzewakwz7elgqvkma324zwhl5fdaszryy29ez3rmder6yw9htgzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq7lrzxq</id>
    
      <title type="html">**Nostr Compass Podcast is live.** Protocol updates and client ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsfkmzewakwz7elgqvkma324zwhl5fdaszryy29ez3rmder6yw9htgzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq7lrzxq" />
    <content type="html">
      **Nostr Compass Podcast is live.**&lt;br/&gt;&lt;br/&gt;Protocol updates and client releases, explained by the builders.&lt;br/&gt;&lt;br/&gt;Fully Nostr native: hosted on Blossom, published via &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqszaqx80w9eg8uf39l527h8znumq0jcxdav2h0kdgwy08e3p87wfrgpzpmhxue69uhkummnw3ezumt0d5hszrnhwden5te0dehhxtnvdakz7qgawaehxw309ahx7um5wghxy6t5vdhkjmn9wgh8xmmrd9skctcke6zfw&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Castr.Me&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…6zfw&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;. Works in any podcast client.&lt;br/&gt;&lt;br/&gt;Subscribe wherever you listen:&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://castr.me/npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923/rss.xml&#34;&gt;https://castr.me/npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923/rss.xml&lt;/a&gt;&lt;br/&gt;&lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nevent1qqs820luxaj3ytkdtraqc97vcjsnfz3emar3x9ajfh7waz9glk9tmpcppemhxue69uhkummn9ekx7mp0qgs8wk257uc5zyjgnf9znmrf9dersm7kp0xwkqcg6s33q84f08zh4qqrqsqqqqqpq6z2ea&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;nevent1q…z2ea&lt;/a&gt;&lt;/span&gt; &lt;/div&gt; Nostr Compass Podcast #1&lt;br/&gt;&lt;br/&gt;The builders mentioned in Nostr Compass #1 sat down to talk through what shipped.&lt;br/&gt;&lt;br/&gt;NIP-BE brings Bluetooth mesh networking to Nostr. MIP-05 tackles private push notifications. Amethyst, WhiteNoise, Damus, and Notedeck all dropped security and UX improvements.&lt;br/&gt;&lt;br/&gt;Hear the devs explain why it matters.&lt;br/&gt;&lt;br/&gt;&lt;video controls width=&#34;100%&#34; class=&#34;max-h-[90vh] bg-neutral-300 dark:bg-zinc-700&#34;&gt;&lt;source src=&#34;https://blossom.primal.net/24df160d686899425b1c03abff256817bc2e5bf4f491c61285cc7842a5aecee7.ogg&#34;&gt;&lt;/video&gt;  &lt;/blockquote&gt;
    </content>
    <updated>2025-12-30T12:13:11Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsp20ucqaskz94rwj6yqljz89088y803f7npkw0xwv5xmmfk6l74nqzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq6fvxf6</id>
    
      <title type="html">Show notes and timestamps: #naddr1qq…ufqz</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsp20ucqaskz94rwj6yqljz89088y803f7npkw0xwv5xmmfk6l74nqzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq6fvxf6" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs820luxaj3ytkdtraqc97vcjsnfz3emar3x9ajfh7waz9glk9tmpcppemhxue69uhkummn9ekx7mp03000ar&#39;&gt;nevent1q…00ar&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;Show notes and timestamps:&lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/naddr1qqgrqve3vsux2wfnx9jk2epkve3xyqgwwaehxw309ahx7uewd3hkctczypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqqcyqqq823cujufqz&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;naddr1qq…ufqz&lt;/a&gt;&lt;/span&gt; &lt;/div&gt; &lt;p&gt;The first episode of the Nostr Compass podcast review. The builders mentioned in the newsletter sit down to walk through the latest protocol developments, client releases, and infrastructure improvements shaping the Nostr ecosystem.&lt;/p&gt;

&lt;p&gt;This episode covers NIP-BE bringing Bluetooth mesh networking to Nostr, the Marmot Protocol solving private push notifications, BUD-10 Blossom for decentralized file storage, and Shopster pushing e-commerce forward. Plus updates from Amethyst, Damus, Notedeck, White Noise, Coracle, Zeus, and more.&lt;/p&gt;

&lt;p&gt;Whether you&amp;#39;re building on Nostr or just want to understand what&amp;#39;s happening under the hood, this is your guided tour through newsletter #1.&lt;/p&gt;

&lt;p&gt;📰 Read the newsletter: Nostr Compass #1
&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/naddr1qqgxzctyxqmrgcfsvgcnjwpjvyurqqgwwaehxw309ahx7uewd3hkctczypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqqcyqqq823cw52ftj&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;naddr1qq…2ftj&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

&lt;hr&gt;

&lt;h3 id=&#34;getting-started-2&#34;&gt;Getting Started&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;00:00&lt;/code&gt; Introduction to Nostr Compass&lt;br&gt;
&lt;code&gt;01:17&lt;/code&gt; What is Nostr?&lt;/p&gt;

&lt;h3 id=&#34;protocol-updates-2&#34;&gt;Protocol Updates&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;03:06&lt;/code&gt; NIP-BE - Bluetooth Low Energy Support&lt;br&gt;
&lt;code&gt;08:38&lt;/code&gt; Marmot Protocol - Privacy-Preserving Push Notifications&lt;br&gt;
&lt;code&gt;10:47&lt;/code&gt; BUD-10 Blossom - Decentralized File Storage&lt;br&gt;
&lt;code&gt;13:37&lt;/code&gt; Shopster - E-commerce on Nostr&lt;br&gt;
&lt;code&gt;18:33&lt;/code&gt; Paywall and Premium Content Standards&lt;/p&gt;

&lt;h3 id=&#34;nip-deep-dives-2&#34;&gt;NIP Deep Dives&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;23:44&lt;/code&gt; NIP-24&lt;br&gt;
&lt;code&gt;24:03&lt;/code&gt; NIP-69&lt;br&gt;
&lt;code&gt;24:54&lt;/code&gt; NIP-59&lt;br&gt;
&lt;code&gt;26:44&lt;/code&gt; NIP-51&lt;/p&gt;

&lt;h3 id=&#34;client-relay-updates-2&#34;&gt;Client &amp;amp; Relay Updates&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;28:16&lt;/code&gt; Client and Relay Infrastructure Overview&lt;br&gt;
&lt;code&gt;34:01&lt;/code&gt; Amber v4&lt;br&gt;
&lt;code&gt;34:39&lt;/code&gt; Coracle v0.6.28&lt;br&gt;
&lt;code&gt;36:36&lt;/code&gt; Flotilla - Development and Challenges&lt;br&gt;
&lt;code&gt;38:06&lt;/code&gt; Damus and Notedeck&lt;br&gt;
&lt;code&gt;39:33&lt;/code&gt; Nostr Army Knife&lt;br&gt;
&lt;code&gt;40:04&lt;/code&gt; White Noise&lt;br&gt;
&lt;code&gt;40:49&lt;/code&gt; Amethyst v1.04.2&lt;br&gt;
&lt;code&gt;43:09&lt;/code&gt; Quartz - Multiplatform Migrations&lt;br&gt;
&lt;code&gt;44:14&lt;/code&gt; Mostro v15.5&lt;br&gt;
&lt;code&gt;44:36&lt;/code&gt; NosFlare v8.9.26&lt;br&gt;
&lt;code&gt;45:01&lt;/code&gt; NosCall v0.4.1&lt;br&gt;
&lt;code&gt;45:26&lt;/code&gt; Gitplaza v0.25&lt;br&gt;
&lt;code&gt;47:03&lt;/code&gt; Primal Android&lt;br&gt;
&lt;code&gt;47:40&lt;/code&gt; ZEUS Nostr Wallet Connect&lt;br&gt;
&lt;code&gt;48:01&lt;/code&gt; Zeus Wallet Innovations&lt;/p&gt;

&lt;h3 id=&#34;for-builders-2&#34;&gt;For Builders&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;50:16&lt;/code&gt; Developer Best Practices - Security and Reliability&lt;br&gt;
&lt;code&gt;55:07&lt;/code&gt; Understanding NIP-1 - The Basic Protocol&lt;br&gt;
&lt;code&gt;01:09:31&lt;/code&gt; NIP-19 - Bech32 Encoded Identifiers&lt;/p&gt;

&lt;p&gt;&lt;code&gt;01:16:01&lt;/code&gt; Outro&lt;/p&gt;
 &lt;/blockquote&gt;
    </content>
    <updated>2025-12-30T11:26:38Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs820luxaj3ytkdtraqc97vcjsnfz3emar3x9ajfh7waz9glk9tmpczypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq644x72</id>
    
      <title type="html">Nostr Compass Podcast #1 The builders mentioned in Nostr Compass ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs820luxaj3ytkdtraqc97vcjsnfz3emar3x9ajfh7waz9glk9tmpczypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq644x72" />
    <content type="html">
      Nostr Compass Podcast #1&lt;br/&gt;&lt;br/&gt;The builders mentioned in Nostr Compass #1 sat down to talk through what shipped.&lt;br/&gt;&lt;br/&gt;NIP-BE brings Bluetooth mesh networking to Nostr. MIP-05 tackles private push notifications. Amethyst, WhiteNoise, Damus, and Notedeck all dropped security and UX improvements.&lt;br/&gt;&lt;br/&gt;Hear the devs explain why it matters.&lt;br/&gt;&lt;br/&gt;&lt;video controls width=&#34;100%&#34; class=&#34;max-h-[90vh] bg-neutral-300 dark:bg-zinc-700&#34;&gt;&lt;source src=&#34;https://blossom.primal.net/24df160d686899425b1c03abff256817bc2e5bf4f491c61285cc7842a5aecee7.ogg&#34;&gt;&lt;/video&gt; 
    </content>
    <updated>2025-12-30T11:26:06Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsde8s2whj54t6vs5ejqem7n5tax0k5d4x93tfn6rs4jgzeshgvm2czypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq5ra6qk</id>
    
      <title type="html">New logo for Nostr Compass! ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsde8s2whj54t6vs5ejqem7n5tax0k5d4x93tfn6rs4jgzeshgvm2czypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agq5ra6qk" />
    <content type="html">
      New logo for Nostr Compass!&lt;br/&gt;&lt;br/&gt; &lt;img src=&#34;https://cdn.nostrcheck.me/775954f7314112489a4a29ec692b72386fd60bcceb0308d423101ea979c57a80/832f2353a811e7c3ef378b28b6de62c486a9be6e69b940f61b61332472735955.webp&#34;&gt; &lt;br/&gt;&lt;br/&gt;Thanks &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqs9c5x6zv55073m736eawtc67zdky4645wrukm22a2ppt4k233ekjcpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhsz9mhwden5te0wfjkccte9ec8y6tdv9kzumn9wshsz9mhwden5te0wfjkccte9ehx7um5wghxyctwvshsaaktem&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;vladimirkrstic&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…ktem&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt;
    </content>
    <updated>2025-12-26T17:19:12Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqswtke0uxcwuy5t9sgecy3dtrkj06ncpfkt98cv3mzzavk764wf5zczypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqle78kx</id>
    
      <title type="html"># Nostr Compass is now available in 10 languages! Nostr Compass ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqswtke0uxcwuy5t9sgecy3dtrkj06ncpfkt98cv3mzzavk764wf5zczypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqle78kx" />
    <content type="html">
      # Nostr Compass is now available in 10 languages!&lt;br/&gt;&lt;br/&gt;Nostr Compass has been translated into 9 new languages, available on the website: Chinese, Dutch, French, German, Italian, Japanese, Korean, Portuguese, and Spanish.&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://nostrcompass.org&#34;&gt;https://nostrcompass.org&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;**We need your help!** If you&amp;#39;re a native speaker of any of these languages, we&amp;#39;d love for you to review the translations and help us improve them. Found a typo or a better way to phrase something? PRs are welcome!&lt;br/&gt;&lt;br/&gt;Check out the repo: &lt;a href=&#34;https://github.com/andotherstuff/nostr-compass&#34;&gt;https://github.com/andotherstuff/nostr-compass&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Thank you for helping make Nostr more accessible to everyone around the world!
    </content>
    <updated>2025-12-26T10:56:56Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs04p6y2dayxe99xmjv2dnxpppcwy3w5p7h2z7x2w5qzatd3h6tjpqzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqz9x9ha</id>
    
      <title type="html">Nostr Compass now has a Topics section. ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs04p6y2dayxe99xmjv2dnxpppcwy3w5p7h2z7x2w5qzatd3h6tjpqzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqz9x9ha" />
    <content type="html">
      Nostr Compass now has a Topics section.&lt;br/&gt;&lt;a href=&#34;https://nostrcompass.org/en/topics/&#34;&gt;https://nostrcompass.org/en/topics/&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;When reading about Nostr development, you&amp;#39;ll often encounter references to NIPs, protocol specs, and technical concepts without much context. Our new topics section solves this, each topic page provides a clear explanation, links to primary sources, and references to our newsletter coverage where you can see how it&amp;#39;s being used in practice.&lt;br/&gt;&lt;br/&gt;We&amp;#39;ve launched with 25 topics covering core NIPs (like NIP-01, NIP-02, NIP-17, NIP-55), the Blossom media protocol, and Marmot&amp;#39;s encrypted messaging specs. As we cover more in our weekly newsletters, the topics section will grow alongside.&lt;br/&gt;&lt;br/&gt;Whether you&amp;#39;re building a client, trying to understand how zaps work, or figuring out what NIP-46 remote signing actually does, this is your reference.
    </content>
    <updated>2025-12-25T12:25:00Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs8qe6swhy0vktgq0gute9xhp7fgxyv6khnuaqx2tvw8wt33v29etgzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqe85qej</id>
    
      <title type="html">Nostr Compass #2 is out. This week covers three NIP-55 signer ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs8qe6swhy0vktgq0gute9xhp7fgxyv6khnuaqx2tvw8wt33v29etgzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqe85qej" />
    <content type="html">
      Nostr Compass #2 is out. This week covers three NIP-55 signer updates including Primal Android joining as a full local signer, Shopstr&amp;#39;s new Zapsnags flash sale feature, and Mostro&amp;#39;s development fund. Four NIP changes landed with Public Messages (kind 24) and major group privacy improvements in NIP-29. On the library side, NDK cache queries got 162x faster and Tenex introduced RAL architecture for AI agent delegation.&lt;br/&gt;&lt;br/&gt;The deep dive explains NIP-02 and NIP-10, the foundational specs for follow lists and reply threading that make social timelines and conversations work. Essential reading if you&amp;#39;re building anything that displays feeds or handles replies.&lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting  &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/naddr1qqgrgdrx8pjngcfnx5enscnrv4jxyq3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqp65wucr7vf&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;naddr1qq…r7vf&lt;/a&gt;&lt;/span&gt; &lt;/div&gt; &lt;p&gt;Welcome back to Nostr Compass, your weekly guide to the Nostr protocol ecosystem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This week:&lt;/strong&gt; Three NIP-55 signer implementations see updates: Amber adds performance caching, Aegis gains &lt;code&gt;nostrsigner:&lt;/code&gt; URI support, and Primal Android joins them as a full local signer. Shopstr introduces &amp;#34;Zapsnags&amp;#34; for flash sales via zaps. Mostro adds a development fund. Four NIP updates land including Public Messages (kind 24) and group privacy improvements. NDK cache queries speed up 162x, Applesauce adds reactions and NIP-60 wallet support, and Tenex introduces RAL architecture for AI agent delegation. In our deep dive, we explain NIP-02 (follow lists) and NIP-10 (reply threading), foundational specs for building social timelines and conversations.&lt;/p&gt;

&lt;h2 id=&#34;news-47&#34;&gt;News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Primal Android Becomes a NIP-55 Signer&lt;/strong&gt; - Building on last week&amp;#39;s &lt;a href=&#34;/en/newsletters/2025-12-17-newsletter/#primal-android&#34;&gt;Nostr Connect support&lt;/a&gt;, Primal has implemented full local signing capabilities through eight merged pull requests. The implementation includes a complete &lt;code&gt;LocalSignerContentProvider&lt;/code&gt; that exposes signing operations to other Android apps via Android&amp;#39;s content provider interface, following the &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/55.md&#34;&gt;NIP-55&lt;/a&gt; specification. The architecture separates concerns cleanly: &lt;code&gt;SignerActivity&lt;/code&gt; handles user-facing approval flows, &lt;code&gt;LocalSignerService&lt;/code&gt; manages background operations, and a new permissions system lets users control which apps can request signatures. This makes Primal a viable alternative to Amber for Android users who want to keep their keys in one app while using others for different Nostr experiences.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Shopstr Zapsnags: Flash Sales via Lightning&lt;/strong&gt; - The Nostr-native marketplace introduced &lt;a href=&#34;https://github.com/shopstr-eng/shopstr/pull/211&#34;&gt;&amp;#34;Zapsnags&amp;#34;&lt;/a&gt;, a flash sale feature that lets buyers purchase items directly from their social feed with a single zap. The implementation filters kind 1 notes tagged with &lt;code&gt;#shopstr-zapsnag&lt;/code&gt; and renders them as product cards with a &amp;#34;Zap to Buy&amp;#34; button instead of the standard cart flow. When a buyer zaps, the system generates a payment request using NIP-57, polls for the kind 9735 zap receipt to confirm payment, then encrypts shipping information using NIP-17 gift wrapping before sending it privately to the seller. The feature stores buyer details locally for repeat purchases and includes a merchant dashboard for creating flash sale listings. It&amp;#39;s a clever combination of social, payment, and privacy primitives that demonstrates how Nostr&amp;#39;s composable design enables novel commerce patterns.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mostro Introduces Development Fund&lt;/strong&gt; - The P2P Bitcoin trading bot &lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/555&#34;&gt;implemented configurable development fees&lt;/a&gt; to support sustainable maintenance. Operators can set &lt;code&gt;dev_fee_percentage&lt;/code&gt; between 10-100% of the Mostro trading fee (defaulting to 30%), which automatically routes to a development fund on each successful trade. The implementation adds three database columns (&lt;code&gt;dev_fee&lt;/code&gt;, &lt;code&gt;dev_fee_paid&lt;/code&gt;, &lt;code&gt;dev_fee_payment_hash&lt;/code&gt;) to track contributions and validates the percentage at daemon startup. Technical documentation in &lt;a href=&#34;https://github.com/MostroP2P/mostro/blob/main/docs/DEV_FEE.md&#34;&gt;&lt;code&gt;docs/DEV_FEE.md&lt;/code&gt;&lt;/a&gt; explains the system. This opt-in model lets operators support ongoing development while maintaining full transparency about fee allocation.&lt;/p&gt;

&lt;h2 id=&#34;nip-updates-62&#34;&gt;NIP Updates&lt;/h2&gt;

&lt;p&gt;Recent changes to the &lt;a href=&#34;https://github.com/nostr-protocol/nips&#34;&gt;NIPs repository&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;New NIPs:&lt;/strong&gt;
- &lt;strong&gt;Public Messages (kind 24)&lt;/strong&gt; - A new kind for notification-screen messages designed for broad client support (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1988&#34;&gt;#1988&lt;/a&gt;). Unlike threaded conversations, these messages have no concept of chat history or message chains. They use &lt;code&gt;q&lt;/code&gt; tags (quotations) rather than &lt;code&gt;e&lt;/code&gt; tags to avoid threading complications, making them ideal for simple public notifications that appear in a recipient&amp;#39;s notification feed without creating conversation state.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Significant Changes:&lt;/strong&gt;
- &lt;strong&gt;NIP-29&lt;/strong&gt; - Major clarification of group semantics (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2106&#34;&gt;#2106&lt;/a&gt;). The &lt;code&gt;closed&lt;/code&gt; tag now means &amp;#34;unable to write&amp;#34; (read-only for non-members), decoupled from join mechanics. A new &lt;code&gt;hidden&lt;/code&gt; tag prevents relays from serving metadata or member events to non-members, enabling truly private groups that are undiscoverable without out-of-band invitation. The &lt;code&gt;private&lt;/code&gt; tag controls message visibility while still allowing public metadata for discovery.
- &lt;strong&gt;NIP-51&lt;/strong&gt; - Added kind 30006 for curated picture sets (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2170&#34;&gt;#2170&lt;/a&gt;), following the pattern of 30004 (articles) and 30005 (videos). Already implemented in Nostria.
- &lt;strong&gt;NIP-55&lt;/strong&gt; - Clarified connection initiation for Android signers (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2166&#34;&gt;#2166&lt;/a&gt;). Developers implementing multi-user sessions were misusing &lt;code&gt;get_public_key&lt;/code&gt; by calling it from background processes. The updated spec recommends calling it only once during initial connection, preventing a common implementation footgun.&lt;/p&gt;

&lt;h2 id=&#34;nip-deep-dive-nip-02-and-nip-10-2&#34;&gt;NIP Deep Dive: NIP-02 and NIP-10&lt;/h2&gt;

&lt;p&gt;This week we cover two NIPs essential for social functionality: how clients know who you follow and how conversations are threaded.&lt;/p&gt;

&lt;h3 id=&#34;nip-02-follow-list-2&#34;&gt;NIP-02: Follow List&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/02.md&#34;&gt;NIP-02&lt;/a&gt; defines kind 3 events, which store your follow list. This simple mechanism powers the social graph that makes timelines possible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structure:&lt;/strong&gt; A kind 3 event contains &lt;code&gt;p&lt;/code&gt; tags listing followed pubkeys:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;d7a8f...&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;a3b9c...&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1734912000,
  &amp;#34;kind&amp;#34;: 3,
  &amp;#34;content&amp;#34;: &amp;#34;&amp;#34;,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;p&amp;#34;, &amp;#34;91cf9..af5f&amp;#34;, &amp;#34;wss://alicerelay.example.com&amp;#34;, &amp;#34;alice&amp;#34;],
    [&amp;#34;p&amp;#34;, &amp;#34;14aeb..8dad&amp;#34;, &amp;#34;wss://bobrelay.example.com&amp;#34;, &amp;#34;bob&amp;#34;],
    [&amp;#34;p&amp;#34;, &amp;#34;612ae..982b&amp;#34;, &amp;#34;&amp;#34;, &amp;#34;&amp;#34;]
  ],
  &amp;#34;sig&amp;#34;: &amp;#34;e4f8a...&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Each &lt;code&gt;p&lt;/code&gt; tag has four positions: the tag name, the followed pubkey (hex), an optional relay URL hint, and an optional &amp;#34;petname&amp;#34; (a local nickname). The relay hint tells other clients where to find that user&amp;#39;s events. The petname lets you assign memorable names to contacts without relying on their self-declared display names.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Replaceable behavior:&lt;/strong&gt; Kind 3 falls in the replaceable range (0, 3, 10000-19999), so relays keep only the latest version per pubkey. When you follow someone new, your client publishes a complete new kind 3 containing all your follows plus the new one. This means follow lists must be complete each time; you can&amp;#39;t publish incremental updates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Building timelines:&lt;/strong&gt; To construct a home feed, clients fetch the user&amp;#39;s kind 3, extract all &lt;code&gt;p&lt;/code&gt; tag pubkeys, then subscribe to kind 1 events from those authors:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[&amp;#34;REQ&amp;#34;, &amp;#34;home&amp;#34;, {&amp;#34;kinds&amp;#34;: [1], &amp;#34;authors&amp;#34;: [&amp;#34;91cf9...&amp;#34;, &amp;#34;14aeb...&amp;#34;, &amp;#34;612ae...&amp;#34;], &amp;#34;limit&amp;#34;: 50}]
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The relay returns matching notes, and the client renders them. The relay hints in kind 3 help clients know which relays to query for each followed user.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Petnames and identity:&lt;/strong&gt; The petname field enables a decentralized naming scheme. Rather than trusting whatever name a user claims in their profile, you can assign your own label. A client might display &amp;#34;alice (My Sister)&amp;#34; where &amp;#34;alice&amp;#34; comes from her kind 0 profile and &amp;#34;My Sister&amp;#34; is your petname. This provides context that global usernames cannot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Practical considerations:&lt;/strong&gt; Because kind 3 events are replaceable and must be complete, clients should preserve unknown tags when updating. If another client added tags your client doesn&amp;#39;t understand, blindly overwriting would lose that data. Append new follows rather than rebuilding from scratch.&lt;/p&gt;

&lt;h3 id=&#34;nip-10-text-note-threading-2&#34;&gt;NIP-10: Text Note Threading&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/10.md&#34;&gt;NIP-10&lt;/a&gt; specifies how kind 1 notes reference each other to form reply threads. Understanding this is essential for building conversation views.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The problem:&lt;/strong&gt; When someone replies to a note, clients need to know: What is this a reply to? What&amp;#39;s the root of the conversation? Who should be notified? NIP-10 answers these questions through &lt;code&gt;e&lt;/code&gt; tags (event references) and &lt;code&gt;p&lt;/code&gt; tags (pubkey mentions).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Marked tags (preferred):&lt;/strong&gt; Modern clients use explicit markers in &lt;code&gt;e&lt;/code&gt; tags:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;f9c2e...&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;a3b9c...&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1734912345,
  &amp;#34;kind&amp;#34;: 1,
  &amp;#34;content&amp;#34;: &amp;#34;Great point! I agree.&amp;#34;,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;e&amp;#34;, &amp;#34;abc123...&amp;#34;, &amp;#34;wss://relay.example.com&amp;#34;, &amp;#34;root&amp;#34;],
    [&amp;#34;e&amp;#34;, &amp;#34;def456...&amp;#34;, &amp;#34;wss://relay.example.com&amp;#34;, &amp;#34;reply&amp;#34;],
    [&amp;#34;p&amp;#34;, &amp;#34;91cf9...&amp;#34;],
    [&amp;#34;p&amp;#34;, &amp;#34;14aeb...&amp;#34;]
  ],
  &amp;#34;sig&amp;#34;: &amp;#34;b7d3f...&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The &lt;code&gt;root&lt;/code&gt; marker points to the original note that started the thread. The &lt;code&gt;reply&lt;/code&gt; marker points to the specific note being answered. If replying directly to the root, use only &lt;code&gt;root&lt;/code&gt; (no &lt;code&gt;reply&lt;/code&gt; tag needed). The distinction matters for rendering: the &lt;code&gt;reply&lt;/code&gt; determines indentation in a thread view, while &lt;code&gt;root&lt;/code&gt; groups all replies together.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Threading rules:&lt;/strong&gt;
- Direct reply to root: One &lt;code&gt;e&lt;/code&gt; tag with &lt;code&gt;root&lt;/code&gt; marker
- Reply to a reply: Two &lt;code&gt;e&lt;/code&gt; tags, one &lt;code&gt;root&lt;/code&gt; and one &lt;code&gt;reply&lt;/code&gt;
- The &lt;code&gt;root&lt;/code&gt; stays constant throughout the thread; &lt;code&gt;reply&lt;/code&gt; changes based on what you&amp;#39;re responding to&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pubkey tags for notifications:&lt;/strong&gt; Include &lt;code&gt;p&lt;/code&gt; tags for everyone who should be notified. At minimum, tag the author of the note you&amp;#39;re replying to. Convention is to also include all &lt;code&gt;p&lt;/code&gt; tags from the parent event (so everyone in the conversation stays in the loop), plus any users you @mention in your content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Relay hints:&lt;/strong&gt; The third position in &lt;code&gt;e&lt;/code&gt; and &lt;code&gt;p&lt;/code&gt; tags can contain a relay URL where that event or user&amp;#39;s content might be found. This helps clients fetch the referenced content even if they&amp;#39;re not connected to the original relay.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deprecated positional tags:&lt;/strong&gt; Early Nostr implementations inferred meaning from tag position rather than markers: first &lt;code&gt;e&lt;/code&gt; tag was root, last was reply, middle ones were mentions. This approach is deprecated because it creates ambiguity. If you see &lt;code&gt;e&lt;/code&gt; tags without markers, they&amp;#39;re likely from older clients. Modern implementations should always use explicit markers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Building thread views:&lt;/strong&gt; To display a thread, fetch the root event, then query for all events with an &lt;code&gt;e&lt;/code&gt; tag referencing that root:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[&amp;#34;REQ&amp;#34;, &amp;#34;thread&amp;#34;, {&amp;#34;kinds&amp;#34;: [1], &amp;#34;#e&amp;#34;: [&amp;#34;&amp;lt;root-event-id&amp;gt;&amp;#34;]}]
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Sort results by &lt;code&gt;created_at&lt;/code&gt; and use &lt;code&gt;reply&lt;/code&gt; markers to build the tree structure. Events whose &lt;code&gt;reply&lt;/code&gt; points to the root are top-level replies; events whose &lt;code&gt;reply&lt;/code&gt; points to another reply are nested responses.&lt;/p&gt;

&lt;h2 id=&#34;releases-53&#34;&gt;Releases&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Zeus v0.12.0&lt;/strong&gt; - Building on last week&amp;#39;s &lt;a href=&#34;/en/newsletters/2025-12-17-newsletter/#zeus&#34;&gt;NWC parallel payments support&lt;/a&gt;, the Lightning wallet&amp;#39;s &lt;a href=&#34;https://github.com/ZeusLN/zeus/releases/tag/v0.12.0&#34;&gt;major release&lt;/a&gt; ships a complete Nostr Wallet Connect service with custom relay support and budget tracking. A &lt;a href=&#34;https://github.com/ZeusLN/zeus/pull/3455&#34;&gt;budget reload fix&lt;/a&gt; ensures connections use current limits. &lt;a href=&#34;https://github.com/ZeusLN/zeus/pull/3460&#34;&gt;Lightning address copying&lt;/a&gt; no longer includes the &lt;code&gt;lightning:&lt;/code&gt; prefix, fixing paste issues in Nostr profile fields.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Amber v4.0.6&lt;/strong&gt; - The Android signer &lt;a href=&#34;https://github.com/greenart7c3/Amber/releases/tag/v4.0.6&#34;&gt;adds performance caching&lt;/a&gt; to signing operations and improves error handling when decrypting malformed content. Connection reliability improved with retry logic for relay connect events, and several crash fixes address edge cases around invalid &lt;code&gt;nostrconnect://&lt;/code&gt; URIs and permission screen interactions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;nak v0.17.3&lt;/strong&gt; - The command-line Nostr tool&amp;#39;s &lt;a href=&#34;https://github.com/fiatjaf/nak/releases/tag/v0.17.3&#34;&gt;latest release&lt;/a&gt; restricts LMDB builds to Linux, fixing cross-platform compilation issues.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Aegis v0.3.4&lt;/strong&gt; - The cross-platform Nostr signer &lt;a href=&#34;https://github.com/ZharlieW/Aegis/releases/tag/v0.3.4&#34;&gt;adds support&lt;/a&gt; for the &lt;code&gt;nostrsigner:&lt;/code&gt; URI scheme defined in NIP-55, matching Amber&amp;#39;s connection flow. Local relay data can now be imported and exported for backup, and the release includes bug fixes for relay socket errors and UI improvements to the local relay interface.&lt;/p&gt;

&lt;h2 id=&#34;notable-code-and-documentation-changes-17&#34;&gt;Notable code and documentation changes&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;These are open pull requests and early-stage work, perfect for getting feedback before they merge. If something catches your eye, consider reviewing or commenting!&lt;/em&gt;&lt;/p&gt;

&lt;h3 id=&#34;damus-ios-14&#34;&gt;Damus (iOS)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/damus-io/damus/pull/3469&#34;&gt;Mute list persistence&lt;/a&gt; fixes an issue where mute lists were wiped on cold start. The fix adds guards to prevent accidental overwrites during app initialization. &lt;a href=&#34;https://github.com/damus-io/damus/pull/3457&#34;&gt;Profile stream timing&lt;/a&gt; eliminates a ~1 second delay before cached profiles appeared. Previously, views waited for subscription tasks to restart; now &lt;code&gt;streamProfile()&lt;/code&gt; immediately yields cached data from NostrDB, removing the window where abbreviated pubkeys and placeholder images showed.&lt;/p&gt;

&lt;h3 id=&#34;white-noise-encrypted-messaging-8&#34;&gt;White Noise (Encrypted Messaging)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/919&#34;&gt;Real-time message streaming&lt;/a&gt; replaces the previous polling mechanism with a stream-based architecture. The new &lt;code&gt;ChatStreamNotifier&lt;/code&gt; consumes the Rust SDK&amp;#39;s message stream directly, maintaining chronological order and handling incremental updates efficiently. Testing showed significant improvement in responsiveness. A &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/921&#34;&gt;chat list API&lt;/a&gt; adds &lt;code&gt;get_chat_list&lt;/code&gt; for retrieving conversation summaries, and a &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/905&#34;&gt;stable sort fix&lt;/a&gt; prevents message reordering loops by using &lt;code&gt;createdAt&lt;/code&gt; with message ID as tiebreaker.&lt;/p&gt;

&lt;h3 id=&#34;ndk-library-2&#34;&gt;NDK (Library)&lt;/h3&gt;

&lt;p&gt;Two pull requests delivered dramatic cache performance improvements. &lt;a href=&#34;https://github.com/nostr-dev-kit/ndk/pull/371&#34;&gt;PR #371&lt;/a&gt; fixed a bug where events read from SQLite cache were immediately written back, causing 100% duplicate writes on app boot. The fix adds a &lt;code&gt;fromCache&lt;/code&gt; guard and implements O(1) duplicate checking via an in-memory Set. For small result sets (&amp;lt;100 events), direct JSON transfer replaces binary encoding overhead. &lt;a href=&#34;https://github.com/nostr-dev-kit/ndk/pull/372&#34;&gt;PR #372&lt;/a&gt; removed unnecessary &lt;code&gt;seenEvent&lt;/code&gt; calls for cached events. The LRU cache lookup cost 0.24-0.64ms per event; for 5,700 cached events, this added ~1.4 seconds of overhead. Result: cache queries dropped from ~3,690ms to ~22ms (162x faster).&lt;/p&gt;

&lt;h3 id=&#34;rust-nostr-library-11&#34;&gt;rust-nostr (Library)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1176&#34;&gt;Multi-filter REQ support&lt;/a&gt; was restored after being removed in a previous refactor. The SDK again accepts &lt;code&gt;Vec&amp;lt;Filter&amp;gt;&lt;/code&gt; for subscription requests, enabling efficient queries that combine multiple filter conditions with OR logic. &lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1156&#34;&gt;Relay provenance&lt;/a&gt; was added to &lt;code&gt;stream_events*&lt;/code&gt; methods, so each streamed event now includes the &lt;code&gt;RelayUrl&lt;/code&gt; it came from and a &lt;code&gt;Result&lt;/code&gt; indicating success or failure, useful for tracking relay reliability and debugging connection issues. A &lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1179&#34;&gt;security fix&lt;/a&gt; removed the &lt;code&gt;url-fork&lt;/code&gt; dependency following RUSTSEC-2024-0421, eliminating a known vulnerability.&lt;/p&gt;

&lt;h3 id=&#34;applesauce-library-2&#34;&gt;Applesauce (Library)&lt;/h3&gt;

&lt;p&gt;The TypeScript library powering &lt;a href=&#34;https://github.com/hzrd149/nostrudel&#34;&gt;noStrudel&lt;/a&gt; saw significant development this week. New models include a &lt;a href=&#34;https://github.com/hzrd149/applesauce&#34;&gt;reactions system&lt;/a&gt; and user groups casting. Wallet functionality expanded with NIP-60 support, a send tab, and improved token recovery tools. A new &lt;code&gt;user.directMessageRelays$&lt;/code&gt; property exposes DM relay configuration. All actions were refactored to use async interfaces (removing async generators), and bug fixes addressed encrypted content restoration and time-based event filter edge cases.&lt;/p&gt;

&lt;h3 id=&#34;tenex-ai-agents-5&#34;&gt;Tenex (AI Agents)&lt;/h3&gt;

&lt;p&gt;The &lt;a href=&#34;https://github.com/tenex-chat/tenex&#34;&gt;multi-agent coordination system&lt;/a&gt; built on Nostr introduced RAL (Request-Action-Lifecycle) architecture in &lt;a href=&#34;https://github.com/pablof7z/tenex/pull/38&#34;&gt;five merged PRs&lt;/a&gt;. RAL enables agents to pause when delegating tasks and resume when results arrive, with conversation-scoped state persistence. Delegation tools (&lt;code&gt;delegate&lt;/code&gt;, &lt;code&gt;ask&lt;/code&gt;, &lt;code&gt;delegate_followup&lt;/code&gt;, &lt;code&gt;delegate_external&lt;/code&gt;) now publish Nostr events and return stop signals instead of blocking. The refactor includes AI SDK v6 migration, VCR testing infrastructure for deterministic LLM interaction recording, and multimodal image support.&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;That&amp;#39;s it for this week. Building something? Have news to share? Want us to cover your project? Reach out via NIP-17 DM or find us on Nostr.&lt;/p&gt;
 &lt;/blockquote&gt;
    </content>
    <updated>2025-12-24T17:07:10Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs8cuv2sw3f3ag7lfuxfqstnwwx2fe47ukcwq4aqmkcu5u9z48n83gzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqakrct3</id>
    
      <title type="html">Nostr Compass #2 is out. This week covers three NIP-55 signer ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs8cuv2sw3f3ag7lfuxfqstnwwx2fe47ukcwq4aqmkcu5u9z48n83gzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqakrct3" />
    <content type="html">
      Nostr Compass #2 is out. This week covers three NIP-55 signer updates including Primal Android joining as a full local signer, Shopstr&amp;#39;s new Zapsnags flash sale feature, and Mostro&amp;#39;s development fund. Four NIP changes landed with Public Messages (kind 24) and major group privacy improvements in NIP-29. On the library side, NDK cache queries got 162x faster and Tenex introduced RAL architecture for AI agent delegation.&lt;br/&gt;&lt;br/&gt;The deep dive explains NIP-02 and NIP-10, the foundational specs for follow lists and reply threading that make social timelines and conversations work. Essential reading if you&amp;#39;re building anything that displays feeds or handles replies.&lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting  &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/naddr1qqgrgdrx8pjngcfnx5enscnrv4jxyq3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqp65wucr7vf&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;naddr1qq…r7vf&lt;/a&gt;&lt;/span&gt; &lt;/div&gt; &lt;p&gt;Welcome back to Nostr Compass, your weekly guide to the Nostr protocol ecosystem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This week:&lt;/strong&gt; Three NIP-55 signer implementations see updates: Amber adds performance caching, Aegis gains &lt;code&gt;nostrsigner:&lt;/code&gt; URI support, and Primal Android joins them as a full local signer. Shopstr introduces &amp;#34;Zapsnags&amp;#34; for flash sales via zaps. Mostro adds a development fund. Four NIP updates land including Public Messages (kind 24) and group privacy improvements. NDK cache queries speed up 162x, Applesauce adds reactions and NIP-60 wallet support, and Tenex introduces RAL architecture for AI agent delegation. In our deep dive, we explain NIP-02 (follow lists) and NIP-10 (reply threading), foundational specs for building social timelines and conversations.&lt;/p&gt;

&lt;h2 id=&#34;news-50&#34;&gt;News&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Primal Android Becomes a NIP-55 Signer&lt;/strong&gt; - Building on last week&amp;#39;s &lt;a href=&#34;/en/newsletters/2025-12-17-newsletter/#primal-android&#34;&gt;Nostr Connect support&lt;/a&gt;, Primal has implemented full local signing capabilities through eight merged pull requests. The implementation includes a complete &lt;code&gt;LocalSignerContentProvider&lt;/code&gt; that exposes signing operations to other Android apps via Android&amp;#39;s content provider interface, following the &lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/55.md&#34;&gt;NIP-55&lt;/a&gt; specification. The architecture separates concerns cleanly: &lt;code&gt;SignerActivity&lt;/code&gt; handles user-facing approval flows, &lt;code&gt;LocalSignerService&lt;/code&gt; manages background operations, and a new permissions system lets users control which apps can request signatures. This makes Primal a viable alternative to Amber for Android users who want to keep their keys in one app while using others for different Nostr experiences.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Shopstr Zapsnags: Flash Sales via Lightning&lt;/strong&gt; - The Nostr-native marketplace introduced &lt;a href=&#34;https://github.com/shopstr-eng/shopstr/pull/211&#34;&gt;&amp;#34;Zapsnags&amp;#34;&lt;/a&gt;, a flash sale feature that lets buyers purchase items directly from their social feed with a single zap. The implementation filters kind 1 notes tagged with &lt;code&gt;#shopstr-zapsnag&lt;/code&gt; and renders them as product cards with a &amp;#34;Zap to Buy&amp;#34; button instead of the standard cart flow. When a buyer zaps, the system generates a payment request using NIP-57, polls for the kind 9735 zap receipt to confirm payment, then encrypts shipping information using NIP-17 gift wrapping before sending it privately to the seller. The feature stores buyer details locally for repeat purchases and includes a merchant dashboard for creating flash sale listings. It&amp;#39;s a clever combination of social, payment, and privacy primitives that demonstrates how Nostr&amp;#39;s composable design enables novel commerce patterns.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mostro Introduces Development Fund&lt;/strong&gt; - The P2P Bitcoin trading bot &lt;a href=&#34;https://github.com/MostroP2P/mostro/pull/555&#34;&gt;implemented configurable development fees&lt;/a&gt; to support sustainable maintenance. Operators can set &lt;code&gt;dev_fee_percentage&lt;/code&gt; between 10-100% of the Mostro trading fee (defaulting to 30%), which automatically routes to a development fund on each successful trade. The implementation adds three database columns (&lt;code&gt;dev_fee&lt;/code&gt;, &lt;code&gt;dev_fee_paid&lt;/code&gt;, &lt;code&gt;dev_fee_payment_hash&lt;/code&gt;) to track contributions and validates the percentage at daemon startup. Technical documentation in &lt;a href=&#34;https://github.com/MostroP2P/mostro/blob/main/docs/DEV_FEE.md&#34;&gt;&lt;code&gt;docs/DEV_FEE.md&lt;/code&gt;&lt;/a&gt; explains the system. This opt-in model lets operators support ongoing development while maintaining full transparency about fee allocation.&lt;/p&gt;

&lt;h2 id=&#34;nip-updates-65&#34;&gt;NIP Updates&lt;/h2&gt;

&lt;p&gt;Recent changes to the &lt;a href=&#34;https://github.com/nostr-protocol/nips&#34;&gt;NIPs repository&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;New NIPs:&lt;/strong&gt;
- &lt;strong&gt;Public Messages (kind 24)&lt;/strong&gt; - A new kind for notification-screen messages designed for broad client support (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/1988&#34;&gt;#1988&lt;/a&gt;). Unlike threaded conversations, these messages have no concept of chat history or message chains. They use &lt;code&gt;q&lt;/code&gt; tags (quotations) rather than &lt;code&gt;e&lt;/code&gt; tags to avoid threading complications, making them ideal for simple public notifications that appear in a recipient&amp;#39;s notification feed without creating conversation state.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Significant Changes:&lt;/strong&gt;
- &lt;strong&gt;NIP-29&lt;/strong&gt; - Major clarification of group semantics (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2106&#34;&gt;#2106&lt;/a&gt;). The &lt;code&gt;closed&lt;/code&gt; tag now means &amp;#34;unable to write&amp;#34; (read-only for non-members), decoupled from join mechanics. A new &lt;code&gt;hidden&lt;/code&gt; tag prevents relays from serving metadata or member events to non-members, enabling truly private groups that are undiscoverable without out-of-band invitation. The &lt;code&gt;private&lt;/code&gt; tag controls message visibility while still allowing public metadata for discovery.
- &lt;strong&gt;NIP-51&lt;/strong&gt; - Added kind 30006 for curated picture sets (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2170&#34;&gt;#2170&lt;/a&gt;), following the pattern of 30004 (articles) and 30005 (videos). Already implemented in Nostria.
- &lt;strong&gt;NIP-55&lt;/strong&gt; - Clarified connection initiation for Android signers (&lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/2166&#34;&gt;#2166&lt;/a&gt;). Developers implementing multi-user sessions were misusing &lt;code&gt;get_public_key&lt;/code&gt; by calling it from background processes. The updated spec recommends calling it only once during initial connection, preventing a common implementation footgun.&lt;/p&gt;

&lt;h2 id=&#34;nip-deep-dive-nip-02-and-nip-10-5&#34;&gt;NIP Deep Dive: NIP-02 and NIP-10&lt;/h2&gt;

&lt;p&gt;This week we cover two NIPs essential for social functionality: how clients know who you follow and how conversations are threaded.&lt;/p&gt;

&lt;h3 id=&#34;nip-02-follow-list-5&#34;&gt;NIP-02: Follow List&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/02.md&#34;&gt;NIP-02&lt;/a&gt; defines kind 3 events, which store your follow list. This simple mechanism powers the social graph that makes timelines possible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structure:&lt;/strong&gt; A kind 3 event contains &lt;code&gt;p&lt;/code&gt; tags listing followed pubkeys:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;d7a8f...&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;a3b9c...&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1734912000,
  &amp;#34;kind&amp;#34;: 3,
  &amp;#34;content&amp;#34;: &amp;#34;&amp;#34;,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;p&amp;#34;, &amp;#34;91cf9..af5f&amp;#34;, &amp;#34;wss://alicerelay.example.com&amp;#34;, &amp;#34;alice&amp;#34;],
    [&amp;#34;p&amp;#34;, &amp;#34;14aeb..8dad&amp;#34;, &amp;#34;wss://bobrelay.example.com&amp;#34;, &amp;#34;bob&amp;#34;],
    [&amp;#34;p&amp;#34;, &amp;#34;612ae..982b&amp;#34;, &amp;#34;&amp;#34;, &amp;#34;&amp;#34;]
  ],
  &amp;#34;sig&amp;#34;: &amp;#34;e4f8a...&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Each &lt;code&gt;p&lt;/code&gt; tag has four positions: the tag name, the followed pubkey (hex), an optional relay URL hint, and an optional &amp;#34;petname&amp;#34; (a local nickname). The relay hint tells other clients where to find that user&amp;#39;s events. The petname lets you assign memorable names to contacts without relying on their self-declared display names.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Replaceable behavior:&lt;/strong&gt; Kind 3 falls in the replaceable range (0, 3, 10000-19999), so relays keep only the latest version per pubkey. When you follow someone new, your client publishes a complete new kind 3 containing all your follows plus the new one. This means follow lists must be complete each time; you can&amp;#39;t publish incremental updates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Building timelines:&lt;/strong&gt; To construct a home feed, clients fetch the user&amp;#39;s kind 3, extract all &lt;code&gt;p&lt;/code&gt; tag pubkeys, then subscribe to kind 1 events from those authors:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[&amp;#34;REQ&amp;#34;, &amp;#34;home&amp;#34;, {&amp;#34;kinds&amp;#34;: [1], &amp;#34;authors&amp;#34;: [&amp;#34;91cf9...&amp;#34;, &amp;#34;14aeb...&amp;#34;, &amp;#34;612ae...&amp;#34;], &amp;#34;limit&amp;#34;: 50}]
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The relay returns matching notes, and the client renders them. The relay hints in kind 3 help clients know which relays to query for each followed user.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Petnames and identity:&lt;/strong&gt; The petname field enables a decentralized naming scheme. Rather than trusting whatever name a user claims in their profile, you can assign your own label. A client might display &amp;#34;alice (My Sister)&amp;#34; where &amp;#34;alice&amp;#34; comes from her kind 0 profile and &amp;#34;My Sister&amp;#34; is your petname. This provides context that global usernames cannot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Practical considerations:&lt;/strong&gt; Because kind 3 events are replaceable and must be complete, clients should preserve unknown tags when updating. If another client added tags your client doesn&amp;#39;t understand, blindly overwriting would lose that data. Append new follows rather than rebuilding from scratch.&lt;/p&gt;

&lt;h3 id=&#34;nip-10-text-note-threading-5&#34;&gt;NIP-10: Text Note Threading&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/nostr-protocol/nips/blob/master/10.md&#34;&gt;NIP-10&lt;/a&gt; specifies how kind 1 notes reference each other to form reply threads. Understanding this is essential for building conversation views.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The problem:&lt;/strong&gt; When someone replies to a note, clients need to know: What is this a reply to? What&amp;#39;s the root of the conversation? Who should be notified? NIP-10 answers these questions through &lt;code&gt;e&lt;/code&gt; tags (event references) and &lt;code&gt;p&lt;/code&gt; tags (pubkey mentions).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Marked tags (preferred):&lt;/strong&gt; Modern clients use explicit markers in &lt;code&gt;e&lt;/code&gt; tags:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &amp;#34;id&amp;#34;: &amp;#34;f9c2e...&amp;#34;,
  &amp;#34;pubkey&amp;#34;: &amp;#34;a3b9c...&amp;#34;,
  &amp;#34;created_at&amp;#34;: 1734912345,
  &amp;#34;kind&amp;#34;: 1,
  &amp;#34;content&amp;#34;: &amp;#34;Great point! I agree.&amp;#34;,
  &amp;#34;tags&amp;#34;: [
    [&amp;#34;e&amp;#34;, &amp;#34;abc123...&amp;#34;, &amp;#34;wss://relay.example.com&amp;#34;, &amp;#34;root&amp;#34;],
    [&amp;#34;e&amp;#34;, &amp;#34;def456...&amp;#34;, &amp;#34;wss://relay.example.com&amp;#34;, &amp;#34;reply&amp;#34;],
    [&amp;#34;p&amp;#34;, &amp;#34;91cf9...&amp;#34;],
    [&amp;#34;p&amp;#34;, &amp;#34;14aeb...&amp;#34;]
  ],
  &amp;#34;sig&amp;#34;: &amp;#34;b7d3f...&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The &lt;code&gt;root&lt;/code&gt; marker points to the original note that started the thread. The &lt;code&gt;reply&lt;/code&gt; marker points to the specific note being answered. If replying directly to the root, use only &lt;code&gt;root&lt;/code&gt; (no &lt;code&gt;reply&lt;/code&gt; tag needed). The distinction matters for rendering: the &lt;code&gt;reply&lt;/code&gt; determines indentation in a thread view, while &lt;code&gt;root&lt;/code&gt; groups all replies together.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Threading rules:&lt;/strong&gt;
- Direct reply to root: One &lt;code&gt;e&lt;/code&gt; tag with &lt;code&gt;root&lt;/code&gt; marker
- Reply to a reply: Two &lt;code&gt;e&lt;/code&gt; tags, one &lt;code&gt;root&lt;/code&gt; and one &lt;code&gt;reply&lt;/code&gt;
- The &lt;code&gt;root&lt;/code&gt; stays constant throughout the thread; &lt;code&gt;reply&lt;/code&gt; changes based on what you&amp;#39;re responding to&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pubkey tags for notifications:&lt;/strong&gt; Include &lt;code&gt;p&lt;/code&gt; tags for everyone who should be notified. At minimum, tag the author of the note you&amp;#39;re replying to. Convention is to also include all &lt;code&gt;p&lt;/code&gt; tags from the parent event (so everyone in the conversation stays in the loop), plus any users you @mention in your content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Relay hints:&lt;/strong&gt; The third position in &lt;code&gt;e&lt;/code&gt; and &lt;code&gt;p&lt;/code&gt; tags can contain a relay URL where that event or user&amp;#39;s content might be found. This helps clients fetch the referenced content even if they&amp;#39;re not connected to the original relay.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deprecated positional tags:&lt;/strong&gt; Early Nostr implementations inferred meaning from tag position rather than markers: first &lt;code&gt;e&lt;/code&gt; tag was root, last was reply, middle ones were mentions. This approach is deprecated because it creates ambiguity. If you see &lt;code&gt;e&lt;/code&gt; tags without markers, they&amp;#39;re likely from older clients. Modern implementations should always use explicit markers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Building thread views:&lt;/strong&gt; To display a thread, fetch the root event, then query for all events with an &lt;code&gt;e&lt;/code&gt; tag referencing that root:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[&amp;#34;REQ&amp;#34;, &amp;#34;thread&amp;#34;, {&amp;#34;kinds&amp;#34;: [1], &amp;#34;#e&amp;#34;: [&amp;#34;&amp;lt;root-event-id&amp;gt;&amp;#34;]}]
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Sort results by &lt;code&gt;created_at&lt;/code&gt; and use &lt;code&gt;reply&lt;/code&gt; markers to build the tree structure. Events whose &lt;code&gt;reply&lt;/code&gt; points to the root are top-level replies; events whose &lt;code&gt;reply&lt;/code&gt; points to another reply are nested responses.&lt;/p&gt;

&lt;h2 id=&#34;releases-56&#34;&gt;Releases&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Zeus v0.12.0&lt;/strong&gt; - Building on last week&amp;#39;s &lt;a href=&#34;/en/newsletters/2025-12-17-newsletter/#zeus&#34;&gt;NWC parallel payments support&lt;/a&gt;, the Lightning wallet&amp;#39;s &lt;a href=&#34;https://github.com/ZeusLN/zeus/releases/tag/v0.12.0&#34;&gt;major release&lt;/a&gt; ships a complete Nostr Wallet Connect service with custom relay support and budget tracking. A &lt;a href=&#34;https://github.com/ZeusLN/zeus/pull/3455&#34;&gt;budget reload fix&lt;/a&gt; ensures connections use current limits. &lt;a href=&#34;https://github.com/ZeusLN/zeus/pull/3460&#34;&gt;Lightning address copying&lt;/a&gt; no longer includes the &lt;code&gt;lightning:&lt;/code&gt; prefix, fixing paste issues in Nostr profile fields.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Amber v4.0.6&lt;/strong&gt; - The Android signer &lt;a href=&#34;https://github.com/greenart7c3/Amber/releases/tag/v4.0.6&#34;&gt;adds performance caching&lt;/a&gt; to signing operations and improves error handling when decrypting malformed content. Connection reliability improved with retry logic for relay connect events, and several crash fixes address edge cases around invalid &lt;code&gt;nostrconnect://&lt;/code&gt; URIs and permission screen interactions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;nak v0.17.3&lt;/strong&gt; - The command-line Nostr tool&amp;#39;s &lt;a href=&#34;https://github.com/fiatjaf/nak/releases/tag/v0.17.3&#34;&gt;latest release&lt;/a&gt; restricts LMDB builds to Linux, fixing cross-platform compilation issues.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Aegis v0.3.4&lt;/strong&gt; - The cross-platform Nostr signer &lt;a href=&#34;https://github.com/ZharlieW/Aegis/releases/tag/v0.3.4&#34;&gt;adds support&lt;/a&gt; for the &lt;code&gt;nostrsigner:&lt;/code&gt; URI scheme defined in NIP-55, matching Amber&amp;#39;s connection flow. Local relay data can now be imported and exported for backup, and the release includes bug fixes for relay socket errors and UI improvements to the local relay interface.&lt;/p&gt;

&lt;h2 id=&#34;notable-code-and-documentation-changes-20&#34;&gt;Notable code and documentation changes&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;These are open pull requests and early-stage work, perfect for getting feedback before they merge. If something catches your eye, consider reviewing or commenting!&lt;/em&gt;&lt;/p&gt;

&lt;h3 id=&#34;damus-ios-17&#34;&gt;Damus (iOS)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/damus-io/damus/pull/3469&#34;&gt;Mute list persistence&lt;/a&gt; fixes an issue where mute lists were wiped on cold start. The fix adds guards to prevent accidental overwrites during app initialization. &lt;a href=&#34;https://github.com/damus-io/damus/pull/3457&#34;&gt;Profile stream timing&lt;/a&gt; eliminates a ~1 second delay before cached profiles appeared. Previously, views waited for subscription tasks to restart; now &lt;code&gt;streamProfile()&lt;/code&gt; immediately yields cached data from NostrDB, removing the window where abbreviated pubkeys and placeholder images showed.&lt;/p&gt;

&lt;h3 id=&#34;white-noise-encrypted-messaging-11&#34;&gt;White Noise (Encrypted Messaging)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/919&#34;&gt;Real-time message streaming&lt;/a&gt; replaces the previous polling mechanism with a stream-based architecture. The new &lt;code&gt;ChatStreamNotifier&lt;/code&gt; consumes the Rust SDK&amp;#39;s message stream directly, maintaining chronological order and handling incremental updates efficiently. Testing showed significant improvement in responsiveness. A &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/921&#34;&gt;chat list API&lt;/a&gt; adds &lt;code&gt;get_chat_list&lt;/code&gt; for retrieving conversation summaries, and a &lt;a href=&#34;https://github.com/marmot-protocol/whitenoise/pull/905&#34;&gt;stable sort fix&lt;/a&gt; prevents message reordering loops by using &lt;code&gt;createdAt&lt;/code&gt; with message ID as tiebreaker.&lt;/p&gt;

&lt;h3 id=&#34;ndk-library-5&#34;&gt;NDK (Library)&lt;/h3&gt;

&lt;p&gt;Two pull requests delivered dramatic cache performance improvements. &lt;a href=&#34;https://github.com/nostr-dev-kit/ndk/pull/371&#34;&gt;PR #371&lt;/a&gt; fixed a bug where events read from SQLite cache were immediately written back, causing 100% duplicate writes on app boot. The fix adds a &lt;code&gt;fromCache&lt;/code&gt; guard and implements O(1) duplicate checking via an in-memory Set. For small result sets (&amp;lt;100 events), direct JSON transfer replaces binary encoding overhead. &lt;a href=&#34;https://github.com/nostr-dev-kit/ndk/pull/372&#34;&gt;PR #372&lt;/a&gt; removed unnecessary &lt;code&gt;seenEvent&lt;/code&gt; calls for cached events. The LRU cache lookup cost 0.24-0.64ms per event; for 5,700 cached events, this added ~1.4 seconds of overhead. Result: cache queries dropped from ~3,690ms to ~22ms (162x faster).&lt;/p&gt;

&lt;h3 id=&#34;rust-nostr-library-14&#34;&gt;rust-nostr (Library)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1176&#34;&gt;Multi-filter REQ support&lt;/a&gt; was restored after being removed in a previous refactor. The SDK again accepts &lt;code&gt;Vec&amp;lt;Filter&amp;gt;&lt;/code&gt; for subscription requests, enabling efficient queries that combine multiple filter conditions with OR logic. &lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1156&#34;&gt;Relay provenance&lt;/a&gt; was added to &lt;code&gt;stream_events*&lt;/code&gt; methods, so each streamed event now includes the &lt;code&gt;RelayUrl&lt;/code&gt; it came from and a &lt;code&gt;Result&lt;/code&gt; indicating success or failure, useful for tracking relay reliability and debugging connection issues. A &lt;a href=&#34;https://github.com/rust-nostr/nostr/pull/1179&#34;&gt;security fix&lt;/a&gt; removed the &lt;code&gt;url-fork&lt;/code&gt; dependency following RUSTSEC-2024-0421, eliminating a known vulnerability.&lt;/p&gt;

&lt;h3 id=&#34;applesauce-library-5&#34;&gt;Applesauce (Library)&lt;/h3&gt;

&lt;p&gt;The TypeScript library powering &lt;a href=&#34;https://github.com/hzrd149/nostrudel&#34;&gt;noStrudel&lt;/a&gt; saw significant development this week. New models include a &lt;a href=&#34;https://github.com/hzrd149/applesauce&#34;&gt;reactions system&lt;/a&gt; and user groups casting. Wallet functionality expanded with NIP-60 support, a send tab, and improved token recovery tools. A new &lt;code&gt;user.directMessageRelays$&lt;/code&gt; property exposes DM relay configuration. All actions were refactored to use async interfaces (removing async generators), and bug fixes addressed encrypted content restoration and time-based event filter edge cases.&lt;/p&gt;

&lt;h3 id=&#34;tenex-ai-agents-8&#34;&gt;Tenex (AI Agents)&lt;/h3&gt;

&lt;p&gt;The &lt;a href=&#34;https://github.com/tenex-chat/tenex&#34;&gt;multi-agent coordination system&lt;/a&gt; built on Nostr introduced RAL (Request-Action-Lifecycle) architecture in &lt;a href=&#34;https://github.com/pablof7z/tenex/pull/38&#34;&gt;five merged PRs&lt;/a&gt;. RAL enables agents to pause when delegating tasks and resume when results arrive, with conversation-scoped state persistence. Delegation tools (&lt;code&gt;delegate&lt;/code&gt;, &lt;code&gt;ask&lt;/code&gt;, &lt;code&gt;delegate_followup&lt;/code&gt;, &lt;code&gt;delegate_external&lt;/code&gt;) now publish Nostr events and return stop signals instead of blocking. The refactor includes AI SDK v6 migration, VCR testing infrastructure for deterministic LLM interaction recording, and multimodal image support.&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;That&amp;#39;s it for this week. Building something? Have news to share? Want us to cover your project? Reach out via NIP-17 DM or find us on Nostr.&lt;/p&gt;
 &lt;/blockquote&gt;
    </content>
    <updated>2025-12-24T17:06:54Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsw4s05yjc3gcdn94fw5l2uf2csp2up0l6e2zsgqftr3xwf9puf9uszypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqjrcw78</id>
    
      <title type="html">Thanks, the receiving email isn&amp;#39;t yet set up...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsw4s05yjc3gcdn94fw5l2uf2csp2up0l6e2zsgqftr3xwf9puf9uszypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqjrcw78" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsdnnkgya2kq9l7kag7w03kvxn0tf9nxtcr4v297cqcw82nt0wrrlgpzamhxue69uhhyetvv9ujuurjd9kkzmpwdejhgtcjldaec&#39;&gt;nevent1q…daec&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;Thanks, the receiving email isn&amp;#39;t yet set up...
    </content>
    <updated>2025-12-17T20:00:47Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsyp5cjxc630hyscnq2pez78xyjl6yh4lrw7hhqmcxqr32rqts530czypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqgxhf4v</id>
    
      <title type="html">Yes please! either here on nostr or in a GitHub issue/PR.</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsyp5cjxc630hyscnq2pez78xyjl6yh4lrw7hhqmcxqr32rqts530czypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqgxhf4v" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs0wxufyhnsfpzkyayu626s69wevsvp2lqe02l40r58c75wn3rremcpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhs3uky47&#39;&gt;nevent1q…ky47&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;Yes please!&lt;br/&gt;either here on nostr or in a GitHub issue/PR.
    </content>
    <updated>2025-12-17T20:00:12Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqszd23rzn67l6tfk4r7y0fcc8mdr2gr3qmg6csyhhccstmyyvqufqqzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqpa4ezg</id>
    
      <title type="html">**Introducing Nostr Compass** We&amp;#39;re launching Nostr Compass, ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqszd23rzn67l6tfk4r7y0fcc8mdr2gr3qmg6csyhhccstmyyvqufqqzypm4j48hx9q3yjy6fg57c6ftwguxl4sten4sxzx5yvgpa2tec4agqpa4ezg" />
    <content type="html">
      **Introducing Nostr Compass**&lt;br/&gt;&lt;br/&gt;We&amp;#39;re launching Nostr Compass, a weekly technical newsletter for the Nostr protocol ecosystem.&lt;br/&gt;&lt;br/&gt;Think &lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Person&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/nprofile1qqstmwt26vdvdtcj83mg832hwhhzzwx6p78sz83ejn2k5fe8pe5j2agpzamhxue69uhhyetvv9ujuurjd9kkzmpwdejhgtcpzdmhxue69uhhqatjwpkx2urpvuhx2ue0qy28wumn8ghj7un9d3shjctzd3jjummjvuhsyxkqja&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;&lt;span&gt;Bitcoin Optech&lt;/span&gt; (&lt;span class=&#34;italic&#34;&gt;nprofile…kqja&lt;/span&gt;)&lt;/a&gt;&lt;/span&gt; but for Nostr.&lt;br/&gt;&lt;br/&gt;Each week we&amp;#39;ll cover:&lt;br/&gt;- NIP proposals and protocol changes&lt;br/&gt;- Client and relay updates&lt;br/&gt;- Notable code developments&lt;br/&gt;- Implementation best practices&lt;br/&gt;&lt;br/&gt;We&amp;#39;re also producing a podcast featuring conversations with Nostr developers.&lt;br/&gt;&lt;br/&gt;Our goal is simple: keep builders informed with technical accuracy, neutrality, and depth.&lt;br/&gt;&lt;br/&gt;Newsletter #1 is live now.&lt;br/&gt;&lt;br/&gt;Subscribe to the email list at nostrcompass.org and follow us on Nostr!
    </content>
    <updated>2025-12-17T16:41:11Z</updated>
  </entry>

</feed>