Nostr Compass #33
- Top Stories
- Amethyst 1.13.1 follows its Nostr apps launch with authenticated group and Blossom access
- Code Call 0.2.68 adds a worker-folder browser after 0.2.66 introduced catch-up
- GitWorkshop coordinates maintainers and keeps repository sync independent
- Mosaico 0.1.2 lets coding agents share status over Nostr
- Nostrology maps relay-list concentration from published NIP-65 events
- Tagged Releases
- Kairos 0.1.1 adds reminders and a local Astraea instruction
- Bray 2.3.0 gives its CLI general gift wrapping and a local Blossom test surface
- Buzz Desktop 0.5.0 tightens invitations, search, and relay identity updates
- Shosho 1.0.0 expands its live-streaming marketplace
- Mafrend v1.0 previews place-based Nostr chat on Android
- Hanami 0.1.0 gives Blossom servers a signer-mediated Android path
- Cordn launches its Nostr-identity group chat on Android
- Nostur 1.30.1 fixes threads and duplicate posts after 1.30.0 expands sharing
- Formstr Drive 0.0.2 pairs Nostr file metadata with Blossom blobs
- NoorNote 1.3.1
- algia 0.0.133
- swift-nostr 0.7.0
- lawallet-nwc 2.0.0
- MDK 0.9.10
- pakstr 0.3.1
- Ditto 2.34.2
- Earthly 0.0.9
- In Development
- Keep adds kind-scoped NIP-44 v3 signing and tightens approval policy
- Routstrd changes its default network bind after an unauthenticated exposure
- Imwald Android clarifies offline publishing status
- FIPS adds an OpenWrt access layer; a FreeBSD port remains under review
- Zap Cooking schedules posts and binds scanner requests
- Citrine turns an Android device into a manageable relay
- Wired recovers complete conversations in the browser
- Protocol and Spec Work
- NIPs: NIP-34 hosting boundary, group migration, and three live drafts
- Mill implements a draft for cloud-account key backup
- BUDs: Blossom servers may identify unknown uploads from their bytes
- NAPs: conventions replace numbered tracks as capture and filesystem contracts develop
- Marmot: the specification defines a terminal group state
- Gamma Markets: no public specification changes landed
- Concord: read and write capabilities may split inside one plane
- NWC: one wallet method can choose between BOLT11 and BOLT12
- Six Years of Nostr Julys
Welcome back to Nostr Compass, your weekly guide to Nostr.
This week: Amethyst 1.13.1 @amethyst follows version 1.13.0’s Nostr-app launch with NIP-29 host-relay authentication and authenticated Blossom-download retries. Code Call @Tom keeps remote coding sessions moving from a phone, GitWorkshop (@DanConwayDev) coordinates maintainers and repository synchronization, and Mosaico (@PABLOF7z) gives coding agents a shared Nostr awareness layer. Nostrology (@t6m4…qycp) maps how profiles divide read and write duties across their published relay lists. Android releases from Mafrend @Mafrend, Hanami @Geek, and Cordn (@mic) lead the tagged releases, while FIPS adds an OpenWrt access layer (@jcorgan) and an open PR proposes a FreeBSD port. Protocol coverage reports NIPs, BUDs, NAPs, Marmot, Gamma Markets, Concord, and NWC, while Six Years of Nostr Julys follows July changes from early domain lookup through relay-group state.
Top Stories
Amethyst 1.13.1 follows its Nostr apps launch with authenticated group and Blossom access
Amethyst 1.13.0, released July 28 for the Android and multiplatform Nostr client, opens napplets and NIP-5A nsites inside an isolated, keyless browser process. A consent-gated window.nostr bridge can sign and use selected capabilities through the active account, while per-site and per-account permission screens let users review or revoke those grants. Favorite apps can stay pinned in the bottom bar without sharing cookies, login state, or grants across accounts.
The same 1.13.0 release adds Git repository trees, issues, and pull requests alongside Concord communities, NIP-29 relay groups, Buzz group chat, wiki pages, and RSS feeds. Those surfaces let a user move between code, community, publishing, and social views under the same Nostr identity.
Payments and identity also widened in version 1.13.0. Amethyst can create and pay BOLT12 offers, automatically start remote-signer accounts, add Blossom fallback servers, and expand Web of Trust controls for badges, communities, and relay groups. The July 29 1.13.1 follow-up adds a CORD-02 dissolution seal, kind 9008 group and channel deletion, NIP-29 host-relay authentication, and authenticated BUD-01 retries for gated Blossom downloads.
Code Call 0.2.68 adds a worker-folder browser after 0.2.66 introduced catch-up
Code Call 0.2.68, an Android remote for computer-side coding sessions, replaces its special-case workspace list with a folder browser rooted at the worker directory. A user can enter nested allowed folders, select one for an OpenCode session, and return to parent folders; version 0.2.67 opens that browser when a session is spawned.
The earlier 0.2.66 release can ask a routed worker for a concise catch-up from the latest phone message. Other releases from the same week keep (@williamk⚡santiago🔑☢️) multiple sessions independent, accept replies only from the expected sender, and keep the inbox connected to every configured worker relay for background delivery. Requests and replies travel inside NIP-17 (Private Direct Messages), while locally encrypted Blossom attachments retain their original file type after decryption.
GitWorkshop coordinates maintainers and keeps repository sync independent
GitWorkshop’s July 27 signed release adds Android login through NIP-55 (Android Signer Application) to the browser-based NIP-34 (git stuff) forge. Its source repository now coordinates lead maintainers recursively, preserves each maintainer’s relay hints, and keeps repository synchronization independent from invitation acceptance. Cross-repository work-item references connect related work across repositories, while GRASP copies repository data to selected Git endpoints without coupling that transfer to invitation delivery. The developer-signed 3.1.1 update repairs Android signer intent delivery, recursive maintainer resolution, and path-preserving repository links.
Mosaico 0.1.2 lets coding agents share status over Nostr
Mosaico 0.1.2 lets coding-agent sessions in Claude Code, Codex, Goose, Hermes, OpenCode, and Grok publish short status updates over NIP-29 (Relay-based Groups). Sessions can find related active work across hosts without sharing their transcripts or context.
Named Codex profile discovery and Goose’s Top Of Mind view surface that shared status inside both harnesses (PR #618, PR #619). The release restores hosted agents’ ability to join the public awareness layer, and setup now requires an explicit relay choice (PR #626, PR #629). Mosaico remains an awareness layer, not an agent host, orchestrator, or transcript merger.
Nostrology maps relay-list concentration from published NIP-65 events
Nostrology’s relay observatory derives its dataset from each profile’s latest NIP-65 (Relay List Metadata) kind 10002 event, following the published specification. It separates read, write, and combined relay roles, charts how many relays each profile lists, and exposes the underlying counts in a sortable table. At the July 29 publication review, the page contained 34,430 distinct relay URL values and grouped 520,468 profiles at exactly one listed relay, compared with 150,657 at three and 60,710 at four.
The same Nostrology snapshot shows overlapping concentration around relay.momostr.pink at 298,859 profiles, relay.damus.io at 287,181, nos.lol at 279,468, and relay.primal.net at 225,336. Those counts measure published relay-list entries, not availability: the raw table can include malformed URLs and local addresses, while the NIP-65 specification defines routing metadata and does not test relay health. The observatory makes adoption and data-quality problems visible without treating a listed relay as a live one.
Tagged Releases
Kairos 0.1.1 adds reminders and a local Astraea instruction
Kairos 0.1.1 @LWB adds due-date reminders, an explicit local instruction to Astraea, and stricter relay and URL handling. The 0.1.0 signed release introduced the offline-first task manager, whose optional sync layer writes NIP-44 (Encrypted Payloads)-encrypted records to user-selected relays. Kairos uses deterministic task coordinates and encrypted tombstones with NIP-09 (Event Deletion Request) deletion requests, while local-only tasks never leave the device.
Bray 2.3.0 gives its CLI general gift wrapping and a local Blossom test surface
Bray 2.3.0 @TheCryptoDonkey, a Nostr SDK and command-line toolkit, can gift-wrap and unwrap arbitrary events through NIP-59 (Gift Wrap), with signing routed through NIP-46 (Nostr Connect) when a bunker holds the key. PR #75 also gives the bundled test relay NIP-42 (Authentication of clients to relays) challenges and exposes the remaining Blossom client commands. PR #77 adds an in-memory BUD-01/02 server whose signed authorization binds each upload or deletion to one blob, while PR #76 adds named event kinds, shorthand tags, and NIP-77 ID-reconciliation flags that avoid downloading events a caller already holds.
Buzz Desktop 0.5.0 tightens invitations, search, and relay identity updates
After last week’s Armada and Buzz workspace coverage, Buzz Desktop 0.5.0 @block-opensource adds use-limited invite links (PR #3141) and search filters for author, channel, and time bounds (PR #2871). PR #2862 retrieves join policies through the desktop app’s native network layer, and PR #2607 republishes an agent’s identity record after a persona rename reaches the relay. The release also updates its Nostr dependency for a NIP-44 remote-denial-of-service advisory and repairs local-storage recovery, thread positioning, relay reconnection, and Linux and Windows runtime paths.
Shosho 1.0.0 expands its live-streaming marketplace
Shosho 1.0.0 @Shosho – Live Stream on Nostr redesigns the live-streaming marketplace around creators, live sessions, clips, and products that users can find through configurable relay search. A unified notification feed now collects mentions, reactions, reposts, and zaps and supports replies without leaving the feed. Viewers can publish clips from live streams or replays, while the release also improves threaded chat, clip replies, profile loading, and network usage.
Mafrend v1.0 previews place-based Nostr chat on Android
Mafrend v1.0 is the first public Android alpha of a planned place-based Nostr chat app. Its project page labels the feature set as still in active development and describes each map location as a dedicated chat room for conversations around a place. A public release repository carries the installable Zapstore package while the main app remains private.
Hanami 0.1.0 gives Blossom servers a signer-mediated Android path
Hanami 0.1.0, an Android companion for Blossom servers, lets people sign in, upload, and download from a phone. The app uses NIP-55 (Android Signer Application) for approval-mediated signing and a native NIP-98 (HTTP Auth) handshake for the server session. Hanami locks its web shell and signing bridge to the chosen server origin, keeping credentials with the signer while the server’s existing web interface supplies the application experience. The first public release requires Android 8 or later, a reachable Hanami server, and a compatible signer app.
Cordn launches its Nostr-identity group chat on Android
Cordn, a private group-messaging client, now gives Android users Nostr identity onboarding, profile links through NIP-05 (Mapping Nostr Keys to DNS-Based Internet Identifiers), and verified links that open Cordn destinations in the app. The 0.2.1 release published July 24 introduces that native line alongside the existing web client. Messages use MLS, a group-encryption protocol, with coordinator-assisted delivery, so groups retain ordered encrypted conversations without requiring an email address or phone number.
Nostur 1.30.1 fixes threads and duplicate posts after 1.30.0 expands sharing
Nostur 1.30.1 @Nostur, a Nostr client for iPhone, iPad, and Mac, lets people work through nested reply threads without the expansion and collapse failures that disrupted the new layout. It also prevents the same draft from publishing twice, including when media-upload callbacks repeat. The release follows 1.30.0, which added disappearing direct messages and a share-sheet route for sending media into Nostr, so the app now pairs new messaging and publishing paths with fixes to their everyday thread and posting flows.
Formstr Drive 0.0.2 pairs Nostr file metadata with Blossom blobs
Formstr Drive 0.0.2 @Form*, a Nostr-native file manager, gives users in-app previews and the option to open office documents in Nostr Docs. Underneath, it stores large files as chunked Blossom blobs and deletes the remote blob when a user removes a file. A local relay keeps the app’s Nostr metadata close at hand while Blossom holds the file data, separating file organization from the large bytes themselves.
NoorNote 1.3.1
NoorNote 1.3.1 (@alp), a Nostr client for web, desktop, and Android, adds disappearing-message timers and configures working default DM relays for newly created accounts. It filters global articles without cover images and routes repost notifications into the article reader. The preceding 1.3.0 release added NIP-53 (live activities) cards, NIP-68 (Picture-first feeds) person tags, a NIP-78 (application-data) soft mute, and relay-seen status for notes.
algia 0.0.133
algia 0.0.133 (@mattn), a Go command-line client for Nostr, follows 0.0.132, which added NIP-29 (Relay-based Groups) listing, timelines, posting, reactions, deletions, and join and leave flows. The same release added NIP-42 (Authentication of clients to relays) pre-authentication for relays configured to require it. Version 0.0.133 then added local-image uploads to regular, channel, and group posting commands, attaching the resulting URLs and NIP-92 (Media Attachments) tags to each event. Image-only posts work as well, and group posts target the group’s relay media store by default while other posts use configured file servers.
swift-nostr 0.7.0
For Swift applications, swift-nostr 0.7.0, a Nostr library for Apple platforms, lets one NIP-46 remote signer drive every client feature through its signing abstraction. The release adds NIP-98 (HTTP Auth) and NIP-29 (Relay-based Groups) support, including group joining, posting, and moderation flows. It also validates NIP-44 (Encrypted Payloads, Versioned) padding against the official vectors, rejecting payloads that carry a valid MAC over noncanonical padding.
lawallet-nwc 2.0.0
[LaWallet NWC 2.0.0](https://github.com/lawalletio/lawallet-nwc nostr:@lawallet/releases/tag/v2.0.0), a Nostr-connected wallet and NIP-47 (Nostr Wallet Connect) service, adds passkey login that derives the Nostr signing key in the browser with the WebAuthn PRF extension. The server never receives that secret, and the same passkey can recover the same key on another synced device. Accounts can now link and merge multiple Nostr pubkeys, while the optional listener service relays wallet-connect events and retries webhook delivery after an unreachable endpoint.
MDK 0.9.10
MDK 0.9.10 @marmotprotocol, the Rust implementation of the Marmot protocol, retains pending sends while a transport is inactive and supervises relay-notification forwarding so inbound delivery recovers after lag, panic, or closure. PR #1159 adds durable, paginated conversation history and full reply context for local agents, and PR #1167 republishes the current signed KeyPackage event instead of generating a replacement. The release also preserves manual chat ordering, supports terminal group disbanding, and expands Web of Trust-ranked search, relay policy APIs, and language bindings.
pakstr 0.3.1
pakstr 0.3.1 lets web teams packaging a Nostr client for Android supply runtime configuration and an API proxy without rebuilding the app shell. Its same-day release series added an Amber signer bridge, NIP-44 (encrypted payloads) encryption and decryption, and corrected Android permission injection before the 0.3.x runtime-configuration work. The scaffold keeps bundled web assets local while deployment-specific settings arrive at runtime, and the proxy gives the wrapped app a controlled route for API requests alongside its ordinary relay connections.
Ditto 2.34.2
Ditto 2.34.2 @Team Soapbox, a customizable Nostr social client, renders user statuses as cards in feeds, detail pages, and quote embeds, including custom emoji, expiry, and optional link previews. Zaps with comments now appear as replies beneath the referenced post. The release also retains the optional profile globe button from 2.34.1 for owners who publish a NIP-5A (website manifest) root site, and fixes homepage navigation, live-stream search, external-link handling, and broken custom emoji.
Earthly 0.0.9
Earthly 0.0.9 @dmmh…mc87, a collaborative map editor built on Nostr, now keeps likes visible when a map entity drawer closes, reopens, or refreshes. Its NIP-57 (Lightning zaps) flow sends valid zap-request JSON so Lightning providers can publish verified receipts to publicly reachable relays, including during local development. Generated invoices remain visible across entity-surface changes, and the app shows confirmation after a verified receipt arrives.
In Development
Keep adds kind-scoped NIP-44 v3 signing and tightens approval policy
Keep merged five Android signer changes that carry NIP-44 (Encrypted Payloads) v3 encrypt and decrypt requests through both NIP-55 (Android Signer Application) transports and its NIP-46 (Nostr Connect) bunker. PRs #451, #452, and #453 keep v3 grants separate from v2, scope them by event kind, reject missing or invalid kinds, and preserve approval requests opened from notifications. PRs #454 and #455 stop treating the Basic signing policy as Auto and move the global selection into the core-owned encrypted store. The Keep maintainers merged all five changes after the latest tagged Android release.
Routstrd changes its default network bind after an unauthenticated exposure
Routstrd @routstr PR #56 changes the local Nostr inference router’s default bind address from all network interfaces to 127.0.0.1. The former default exposed unauthenticated wallet balance, history, access, send, refund, API-key, provider, client, usage, and daemon-stop endpoints to any host that could reach the port. Operators can still configure a non-local bind explicitly, but the merged change makes a fresh deployment local-only by default and has not yet appeared in a tagged release.
Imwald Android clarifies offline publishing status
Imwald Android @Silberengel, an Android Nostr client, now treats acknowledgement from a local relay as a completed publish only when every configured target is local. Its offline-publishing and outbox fix keeps remote delivery pending when a local relay has accepted the event but configured remote relays have not, so the publish report distinguishes device-local storage from relay delivery.
FIPS adds an OpenWrt access layer; a FreeBSD port remains under review
The Nostr-native Free Internetworking Peering System now lets an OpenWrt router expose an open !FIPS access network through merged PR #126. The parallel, still-open FreeBSD PR #129 proposes porting the daemon, TUN data path, .fips name resolution, service management, and native package build. The OpenWrt merge broadens access today, while the FreeBSD work would extend it to another general-purpose operating system.
A July 26 FIPS project update reported more than 300 nodes on its public UDP overlay and a broader mesh approaching 2,000 nodes. The FIPS repository spent the same week hardening concurrent network tests, rekey continuity, hop-limit behavior, firewall checks, and NAT-lab isolation. The repository work gives operators reproducible checks for those behaviors as the network grows.
Zap Cooking schedules posts and binds scanner requests
Zap Cooking @ZapCooking, a Nostr recipe-sharing and meal-planning app, can now retain a scheduled post in encrypted storage and publish it when due through a periodic relay sweep (PR #566, PR #569). That gives users a scheduled-publishing path without leaving unsigned post content exposed in the scheduler’s database.
Its fridge scanner now authenticates the exact request body with NIP-98 HTTP authentication, so membership checks rely on the key that signed the scan request instead of a pubkey supplied in its body (PR #599).
Citrine turns an Android device into a manageable relay
Citrine (@greenart7c3), an Android-hosted Nostr relay, can now send events it has stored to external relays, giving an operator a way to rebroadcast local history (PR #179). It also adds NIP-86 (Relay Management API) commands so compatible clients can administer the relay (PR #150).
Group operators can administer NIP-29 relay-based groups through Amber signing in PR #178, while PR #174 keeps Tor-backed relay configuration and lifecycle state aligned through restarts.
Wired recovers complete conversations in the browser
Wired (@doot), a browser-based Nostr client, now follows feed roots, replies, and referenced events to completion instead of stopping at fixed breadth or result limits (PR #148, PR #147, PR #146). Users can therefore recover deeper threads and feed context when the relevant events are available from their relays.
The browser also preserves relay hints on referenced events and uses them only for still-missing context, restoring conversations that configured relays do not carry (PR #145, PR #144). Incomplete retrieval is kept distinct from a completed snapshot, so a partial response does not overwrite the prior cached view.
Protocol and Spec Work
NIPs: NIP-34 hosting boundary, group migration, and three live drafts
Two specification changes merged this week. NIP-34 commit 6d2979b removes GRASP hosting instructions from the kind:1618 pull-request description, leaving hosting and fallback behavior outside the event contract. NIP-29 commit db5fe3d defines how relay-group metadata migrates to another relay and how clients distinguish a valid move from a fork that continues independently.
PR #2424 proposes mutual kind:10045 key-set declarations. The reciprocal requirement would prevent one identity from attaching another key unilaterally. PR #2421 proposes BOLT12 zap intents and payer proofs that clients can validate against the target, amount, offer, and settled payment without depending on a recipient-operated receipt server.
PR #2425 would let NIP-B0 bookmarks retain non-HTTP schemes such as nostr: alongside web URLs. That would keep native Nostr identifiers, payment requests, and other application schemes intact inside the same private or public bookmark lists that already carry web addresses.
Mill implements a draft for cloud-account key backup
Mill @OceanSlim announced an implemented cloud-account key-backup draft that combines a Google OIDC account identifier with a high-entropy passphrase to derive a disposable backup key. Its reference implementation encrypts the user’s real key as a NIP-49 (Private Key Encryption) ncryptsec, then stores it in a provisional parameterized-replaceable kind 30049 event on configured relays. The project merged the backup flow to main, but no post-v1.0.0 release includes it, and the backup flow remains disabled unless an operator supplies dedicated backupRelays. A versioned relay set remains provisional, and the draft warns that published ciphertext remains available for offline passphrase guessing. Readers should treat the design as an implemented experiment that depends on a high-entropy passphrase.
BUDs: Blossom servers may identify unknown uploads from their bytes
BUD-02 PR #110 proposes recommending server-side MIME detection when an uploader omits Content-Type or sends application/octet-stream. A Blossom server would inspect the first bytes with a maintained file-type library, preserve a specific client-supplied type, and fall back to the generic binary type when detection fails. That would keep images, audio, video, and agent-produced files renderable without making byte sniffing mandatory for every upload.
NAPs: conventions replace numbered tracks as capture and filesystem contracts develop
PR #87 removes the numbered cross-napplet protocol track and keeps runtime capabilities under named contracts while application messages converge on napplet:<archetype>/<intent> convention URIs. The merged topic-identity change separates a stable, queryless convention path from per-message payload data, and PR #90 applies that transposition rule to discovery and handler metadata.
Two NAP drafts extend the trusted shell boundary. NAP-CAPTURE PR #94 keeps microphone consent, platform permission, limits, retention, and teardown in the runtime while returning a bounded media artifact to a sandboxed napplet. NAP-FS PR #88 is the parallel virtual-filesystem proposal, with policy-bound handles instead of unrestricted host paths.
Marmot: the specification defines a terminal group state
Marmot PR #409 adds an authenticated, irreversible Disbanded state because MLS itself has no group-deletion operation. An authorized admin commit moves a group out of Active, blocks old branches, messages, and Welcomes from reviving it, and gives existing groups an explicit compatibility path before they can disband. The preceding specification issue sweep also reconciled group-state authority, convergence, key packages, acknowledgements, media rules, registry language, and 200 tracked specification issues.
Gamma Markets: no public specification changes landed
The Gamma Markets specification repository recorded no public commits or pull-request activity from July 21 through July 28. Its published order, settlement, and market-data documents remain the current baseline; this no-change entry keeps Gamma visible in the weekly specification sweep.
Concord: read and write capabilities may split inside one plane
Concord PR #12 remains an open draft for planes whose readers should not all be writers. It moves the Control Plane toward separate read and write stream capabilities and sketches restricted-write channels, invites, and rekey scopes. The write key is a spam gate in the draft, while signed inner actors and roster checks continue to carry authority.
NWC: one wallet method can choose between BOLT11 and BOLT12
NWC PR #2 proposes optional pay and receive methods for BIP-321 payment URIs. A wallet service can advertise support, choose one compatible BOLT11 invoice or BOLT12 offer from a URI, reject a mismatched Bitcoin network before payment, and report which instruction type it used. The proposal stays outside the NWC core so wallets without BIP-321 or BOLT12 support do not have to implement it.
Six Years of Nostr Julys
This July history follows recurring Nostr problems: readable identifiers, relay filtering, portable application data, privacy, and interoperability. It begins with the first NIP-05 implementation and ends with this month’s addressable-discovery merge, then examines the July changes that developed those themes.
July 2021
On July 19, 2021, nostr-tools commit 1ce00bd added a nip05.js module and raised the package to version 0.5.0. Its keyFromDomain function built a DNS TXT request for _nostrkey.<domain>, posted the binary query to one of eight rotating DNS-over-HTTPS providers, and returned the first key in the answer. A browser client could therefore translate a human-controlled domain into a public key without operating a DNS resolver or relying on one hard-coded provider.
That first approach solved lookup but not names within a domain, and its trust boundary sat in DNS plus the selected resolver. The modern NIP-05 specification moved discovery to /.well-known/nostr.json, where a domain maps local names to pubkeys and can attach relay hints. The 2021 code records the earlier design pressure: public keys were portable, but people still needed identifiers they could read, verify, and move between clients.
July 2022
On July 10, NIP-12 commit 3771186 limited generic relay queries to single-letter tags. That decision made filters such as #r, #g, and #t useful for URL references, geohashes, and hashtags without asking relays to index every arbitrary metadata key. Ten days later, the first NIP-20 web-comments draft used that query model directly: a kind 34 comment carried a normalized webpage URL in an r tag, allowing a site and independent clients to recover the same discussion from relays.
Relay policy and social feedback followed. The original NIP-22 commit let relays reject events whose created_at timestamp was implausibly old, and commit 8bef0e9 added future timestamps to the same policy. On July 30, NIP-25 commit dcbd504 defined kind 7 reactions with target e and p tags; the next commit assigned - to a negative reaction, and commit 6903ff5 made + the explicit generic like. Together, these commits specified relay timestamp rejection, tag-based retrieval, web comments, and reaction tags for clients that adopted the drafts.
July 2023
July 2023 pushed coordination beyond short notes. The NIP-37 lost-key draft explored irreversible key retirement, social recovery thresholds, and precommitted replacement keys while explicitly refusing to call the result universal key rotation. Five days later, NIP-53 introduced addressable kind 30311 live activities and kind 1311 chat messages, giving streams, stages, and live rooms a shared event model for hosts, participants, status, and conversation.
Applications also began advertising work and commerce. The first Data Vending Machine draft described kind 68001 job requests, kind 68002 results, bids, expirations, chaining, and competitive providers for tasks such as transcription, summarization, and translation. On July 13, the classified-listing draft added addressable kind 30402 offers with title, summary, price, location, and status metadata. Those drafts later became NIP-90 and NIP-99, but their July forms already separated a request or listing from the server that displayed it.
Payment routing became composable too. The July 31 NIP-57 zap-splits merge changed a single zap destination into a weighted list of recipient pubkeys and relay hints. A client could divide one zap among collaborators, omit unweighted recipients when some weights were present, and show the split before payment. The change standardized a signed-event representation for weighted zap recipients and relay hints, allowing compatible clients to present the split before payment.
July 2024
On July 4, NIP-29 commit c60ca88 added the kind:9007 relay moderation action for creating a group. Six days later, NIP-70 defined protected events: a - tag tells a relay to accept publication only from the event’s authenticated author. One change gave relays an explicit group-state transition; the other let authors prevent third parties from replaying otherwise valid signed events into relays.
On July 16, one Cashu specification commit introduced both NIP-60 wallets and NIP-61 nutzaps. NIP-60 placed wallet metadata in kind 37375, unspent proofs in encrypted kind 7375 events, and optional transaction history in kind 7376. NIP-61 paired the recipient’s kind 10019 mint and relay preferences with P2PK-locked kind 7337 nutzaps. Wallet state and bearer tokens could now move through relays, while redemption still depended on Cashu mint proofs and careful prevention of double claims.
Two late-July edits tightened deterministic state. NIP-01 commit 9c54549 required event IDs as the tie-breaker after equal created_at timestamps, so clients could sort identical result sets the same way. The NIP-09 deletion merge clarified that kind 5 requests may target event IDs or addressable coordinates and should include k tags identifying the kinds that relays should delete. Both changes narrowed places where two correct implementations could otherwise disagree.
July 2025
Ecash discovery gained its own social directory on July 16. NIP-87 commit 1afb6da defined kind 38172 Cashu-mint records, kind 38173 Fedimint records, and kind 38000 recommendations that can point to those records with relay hints. Wallets could query trusted authors’ recommendations before connecting to a mint, while the specification warned that unfiltered global discovery could steer users toward malicious operators.
One week later, a draft specified portable Nostr event records for voice messages. The first NIP-A0 commit assigned kind 1222 to a voice-message root and kind 1244 to a reply, carrying an audio URL plus media metadata. The July 27 format follow-up recommended Opus in an Ogg container and standardized a compressed waveform. Clients could exchange short audio without agreeing on one recorder, host, or waveform representation.
Private messaging and wallet connections then added protocol state for read tracking, encryption selection, and payment progress. NIP-17 commit 3d76da3 defined a replaceable kind 30016 record whose ordered seen tags let a client distinguish read messages from gaps it may have missed. On July 31, NIP-47 encryption negotiation let wallet services advertise NIP-44 v2 or legacy NIP-04, while the transaction-state commit added pending, settled, accepted, expired, and failed states. Delivery, encryption, and payment progress became explicit protocol data instead of local inference.
July 2026
This July began by connecting ordinary web addresses to relay queries. Addressable-discovery commit 2f4b093 defines a /.well-known/nostr.json?ad=<path> lookup whose answer contains a Nostr filter and relay list. A normal browser can still open the original URL as HTML, while a Nostr client can query the corresponding /.well-known/nostr.json?ad=<path> endpoint for a filter and relay list that resolve the address to a group, nsite, feed, event, or other native object. The pattern revisits 2021’s domain-to-key problem at a broader layer: one human-readable URL can now name both an identity and a query.
NIP-29 then grew from flat relay groups into structured spaces. The July 16 subgroup commit added parent and ordered-child relations; adjacent commits added invite-code suffixes, banners, ordered pin snapshots, and addressable-event pins. On July 22, the migration and fork clarification defined when metadata legitimately moves a group to another relay and when a still-active branch is an independent fork. The group identifier stayed simple while hierarchy, presentation, and relay changes became explicit state.
Two smaller edits clarified implementation boundaries. NIP-46 commit f0af204 requires a remote signer to return an error for unknown or unsupported methods instead of leaving a client to time out silently. NIP-34 commit 6d2979b removes GRASP-specific hosting directions from the pull-request event description. One gives callers a terminal response; the other keeps a portable git event from silently inheriting one server protocol.
Send a NIP-17 DM to share a project or news item through the Nostr Compass project.
Write a comment