Welcome back to Nostr Compass, your weekly guide to Nostr.

This week: fips2go adds fallback mesh links and opt-in Nostr peer discovery, fips-initramfs’s September 6 catch-up explains remote opening of encrypted roots, and MintRadar makes Cashu mints easier to compare. Grain 0.8.0-rc4 turns relay health into an operator dashboard, while Marmot Protocol’s MDK makes local sends and attachment acquisition durable. White Noise Android improves private chat delivery, voice tools, and profile sharing. Project spotlights include napplet.soy, RelayKit, and Threshold Sessions. Merged work closes 0xchat security gaps and nos2x-fox PIN exposure, and adds nostream relay health events, Zap Cooking image descriptions, and Conduit Blossom uploads. Protocol work covers petnames, relay administration, payment-address proofs, Blossom directories, encrypted group moderation, and Nostr Wallet Connect budgets. The deep dives explain NIP-30 custom emoji and NIP-71 video events.

Top Stories

fips2go 0.7.0 keeps the mesh connected through bootstrap failures

fips2go is an Android client that lets selected applications reach peers and services over the FIPS encrypted mesh. Version 0.6.0 added device-local mesh names such as home.fips. The subsequent 0.6.1 release fixes bootstrap address selection on IPv6-only carriers using DNS64/NAT64; its maintainer has not tested that fix on a real DNS64 network.

The new 0.7.0 release connects to three regional bootstrap peers by default instead of relying on one. It can also retry a configured peer at Nostr-advertised endpoints when its static address changes. Optional open discovery adds at most three recent Nostr-announced peers, but remains off by default: the maintainer reports that many public test-mesh announcements no longer answer. The ARM64 build was installed over the previous version and checked on a physical Pixel; the other device architectures have narrower verification.

fips-initramfs opens encrypted roots over FIPS before boot

fips-initramfs is a Linux initramfs package that starts a FIPS mesh node before normal boot so an operator can remotely open a LUKS-encrypted root through its npub-addressed node. The user-submitted 0.1.0 release, published September 6, packages the mesh client, SSH access, and passphrase-entry scripts for systems that need unattended or remote encrypted-root startup.

The first release documents the security tradeoffs instead of hiding them: the initramfs contains the node key, the passphrase crosses SSH over FIPS, and local console passphrase entry remains available. This catch-up item came from a prior user submission; its September 6 release falls outside the current collection window.

Grain 0.8.0-rc4 turns relay health into an operator dashboard

Grain is a self-hosted Nostr relay with an integrated reference client and administration interface. Version 0.8.0-rc4 adds a live vitals panel for event volume, connections, uptime, storage, memory, and writer health, plus per-kind storage charts and reorganized access, policy, and retention controls.

The release candidate also makes its client escalate missing-event lookups from the local relay to author outbox relays, embedded relay hints, and NIP-50 search. NIP-50 standardizes relay-side search filters, while NIP-01 defines the core event and subscription rules that include identifier and author prefix matching. Grain adds those prefix matches and configurable full-text kinds to its database, while the release-candidate label makes clear that operators should test the new dashboard and database behavior before treating it as a stable line.

Marmot Protocol 0.10.4 makes local sends durable

Marmot Protocol’s MDK is an SDK for MLS-encrypted group messaging whose transport and discovery run over Nostr. Version 0.10.4 persists local sends before network completion, lowers draft and pending-message latency, prevents repeated automatic attachment downloads, and exposes retention state in chat-list previews.

The same release adds group creation to agent-control integrations and opt-in reaction consent for approval prompts. It also repairs a halted-wrapper edge case and bounds retry backoff during epoch backfill, continuing the post-0.10.0 reliability work without changing the requirement that generated bindings and native libraries move together.

MintRadar makes Cashu mints easier to compare

MintRadar is a privacy-focused Cashu dashboard that uses Nostr to discover mints and bind community reviews to signed identities. Its current source adds persistent NIP-87 mint announcements, same-operator detection from NUT-06 pubkeys, shareable comparison URLs, and Nostr naddr deep links.

NIP-87 standardizes discovery and review events for Cashu mints, while NUT-06 defines the mint information document that exposes a mint’s public keys and supported capabilities. A signed user-submitted update brought MintRadar back into the intake after it was missed in an earlier pass; the project has since accumulated substantial current-window work around those comparison and discovery paths.

Nostr WoT Oracle 0.3.1 makes trust queries restart-safe

Nostr WoT Oracle is a server that ingests public follow and mute events and answers bounded web-of-trust path queries. Versions 0.3.0 and 0.3.1 add independently persisted public mute evidence, readiness and ingestion status, revision-bound caches, deterministic replaceable-event selection, and rollback behavior that prevents unpersisted graph changes from becoming queryable.

The 0.3.1 performance pass restores graph edges directly into numeric adjacency lists, coalesces superseded follow and mute events before publication, and batches distance-cache misses. These changes matter to clients that need explainable follow distance or mute evidence without silently serving a relationship graph from an older revision.

Nostr WoT SDK 1.0.2 compresses browser graph storage

Nostr WoT SDK is a JavaScript toolkit for crawling, storing, and querying Nostr follow graphs in applications. Version 1.0.2 adopts a graph engine that batches up to 100 authors per relay request, stores edges with compact delta encoding, reuses compatible traversals, and exposes batch distance queries.

The graph 0.3.0 storage migration upgrades IndexedDB namespaces to schema 2 and cannot be reopened by older SDK versions. Applications that need rollback should use a separate namespace or clear the upgraded graph instead of assuming the earlier client can read it.

napplet.soy publishes small sandboxed Nostr programs

napplet.soy is a web playground and creator toolkit for building, publishing, playing, inspecting, and remixing small sandboxed Nostr programs called napplets. NIP-34 defines signed Nostr events for Git repository discovery and collaboration. The soyLI 0.18.2 release follows the project’s September launch with signed listings, Blossom-hosted assets, Git and NIP-34 source references, and relay-discovered manifests.

The project source keeps network and storage access behind declared capabilities instead of giving each napplet unrestricted browser authority. Its project identity remains unresolved because the canonical site and repository do not bind a project or maintainer npub, so no identity claim is attached here.

The soyLI 0.20.0 CLI release adds bounded NIP-78 helpers for sharing reusable public tracks, puzzles, drawings, and presets, plus structured data on high scores. Writes are scoped to a napplet and player identity with consent and revision checks; linked large assets use Blossom. Website and backend features require a separate deployment, so the CLI tag alone does not prove those public features are live on the site.

RelayKit installs a self-hosted Nostr stack

RelayKit is a one-command installer for a self-hosted Nostr stack that can include relays, Blossom media, nsites, Git services, and notifications. RelayKit now packages a broader stack than the browser relay-discovery client covered in April; its current source repository documents the new operator-focused deployment surface.

Its installation site presents the services as one coordinated stack instead of requiring operators to assemble each component independently. This coverage therefore treats RelayKit as a changed project direction, not as its first appearance.

Threshold Sessions turns coding transcripts into private training data

Threshold Sessions is a command-line tool that converts AI coding sessions into normalized, redacted, and encrypted training-data epochs. Its repository supports Codex, Claude Code, Cursor, OpenCode, and pi transcripts, stores encrypted artifacts on Blossom, and publishes signed references through Nostr.

Recent Threshold Sessions source history adds timestamp randomization, provenance, extractors, and a ledger for produced epochs. The design lets a contributor preserve auditability and later data use without publishing the readable session transcript to relays.

Tagged Releases

White Noise Android 2026.9.21 improves encrypted-chat reliability and sharing

White Noise Android is a Nostr-based messenger for private Marmot-encrypted group conversations. Its September 21 release improves message delivery, voice dictation, text-to-speech, conversation navigation, account switching, and AMOLED appearance. It also adds shareable profile and invite QR cards and group actions from profiles.

Nostr Mail Client 0.16.0 adds per-recipient delivery choices

Nostr Mail Client is a web, desktop, and Android mail client that exchanges messages through Nostr relays while supporting conventional email delivery. Version 0.16.0 lets a sender choose SMTP or Nostr delivery for each recipient and strips location, capture time, and device metadata from photos and videos before upload.

The release also requires every account to establish a relay list, keeps at least one relay configured, and adds safer permanent deletion from trash. Those changes make routing and attachment privacy explicit at the point where a mixed email/Nostr message leaves the device.

Amber 6.6.5 separates backup encryption from app permissions

Amber is an Android signer that keeps Nostr private keys outside the applications requesting signatures or encryption. NIP-44 standardizes encrypted payloads between Nostr keys, while NIP-46 lets an application request signing and encryption from a remote signer over relays. Version 6.6.5 encrypts application backups with a dedicated key derived from the account key, preventing an application with remembered NIP-44 decryption permission from reading backup payloads that contain local keys or per-app NIP-46 secrets.

The migration path can still restore older identity-encrypted backups until the next publish replaces them, and the release fixes a restore prompt that disappeared after logout when backup publishing was disabled. Users receive both a tighter permission boundary and a recovery path for existing backups.

Amethyst 1.16.0 hardens Blossom signing and adds BOLT12 offers

Amethyst is an Android Nostr client with media, wallet, and signer integrations. Version 1.16.0 fixes fast Blossom read authorization so concurrent media requests share one in-flight signer operation and recheck the token cache before asking for another signature. The tagged release also restores standard padded Base64 for Blossom auth tokens.

Version 1.16.0 also supports BOLT12 offers in profile payments and the zap picker, with BOLT11 fallback when an offer is refused. Users gain an offer-based payment path while existing invoice-based payments remain available.

Alby Extension 3.15.0 hardens website-initiated requests

Alby Extension is a browser wallet and Nostr signer that grants websites scoped Lightning and signing capabilities. Version 3.15.0 blocks website-supplied LNURLs from local or private network addresses, requires cross-host LNURL-auth confirmation, and removes remembered approval for raw Schnorr-signing methods.

The security release also debits allowance budgets before sending concurrent payments and removes the generic WebLN request method. Integrators must use dedicated WebLN methods, while users gain clearer boundaries around network targets, authentication hosts, and site spending limits.

LaWallet NWC 2.7.1 unifies zap receipts across wallets

LaWallet NWC is an open-source Lightning wallet service that exposes accounts to applications through Nostr Wallet Connect. NIP-57 standardizes signed Lightning zap requests and settlement receipts for Nostr profiles and events. Version 2.7.0 decouples that receipt publication from wallet-specific settlement paths so every supported NWC wallet can emit zap receipts, then 2.7.1 brings receive and activity screens onto the same receipt flow as sends.

The 2.7.1 package also aligns StartOS storage and backup layout between sideload and community packages. Operators upgrading the first 2.7.0 sideload need the corrected package before relying on the database volume transition.

NoorNote 1.6.0–1.7.0 adds calendars and booking

NoorNote is a Nostr notes application with optional productivity modules and local reminders. Version 1.6.0 adds public and encrypted calendar events, month, week, and list views, Android reminders, and interactive timeline cards for shared events.

Version 1.6.1 reorganizes addons into a per-account dashboard and fixes URLs containing naddr or npub identifiers being misread as cards or mentions. These fixes make addon controls easier to find and keep Nostr identifiers intact inside ordinary links.

Version 1.7.0 lets an account share available appointment slots and receive bookings and cancellations by direct message. It also imports and exports calendar data as .ics, preserves the web NWC wallet connection after IndexedDB eviction, and avoids false mentions in links containing npubs.

Citrine 3.2.0 bounds relay-aggregator memory

Citrine is an Android Nostr relay that gives other applications a local event store and relay interface. Version 3.2.0 streams matching events in batches, caps aggregator fan-out at 200 relays, and bounds caches to prevent large queries from exhausting memory.

The release also exposes out-of-memory failures in the in-app log and lets operators hide the event graph. A phone acting as both relay and aggregator now fails more visibly and holds a defined memory boundary.

Wisp 1.2.4 routes threads through inbox relays

Wisp is a privacy-oriented Nostr client with built-in Cashu and Lightning wallet support. NIP-22 defines generic kind 1111 comments that can reply to many kinds of Nostr content. Version 1.2.4 sends thread and notification reads only to inbox relays, treats those comments as replies, and lets users withdraw their full wallet balance on chain.

Version 1.2.4 limits thread reads to inbox relays, reducing unnecessary relay exposure. Its NIP-22 handling keeps comments visible in threads, counts, and notifications.

nostr-wot-extension 0.8.3 adds scoped NWC connections

nostr-wot-extension is a browser signer and identity extension with wallet payments and local web-of-trust analysis. Version 0.8.0 restores its experimental web-of-trust API as a menu-only opt-in with local, remote, and hybrid query modes, scalable graph synchronization, mute-aware scoring, and per-account storage controls.

The release also requires confirmation before replacing a known follow list with zero or one contact, even when a saved permission or remote signer is present. That guard uses verified relay, signed-event, and synchronized graph history to make destructive follow-list changes harder to approve silently.

Version 0.8.3 creates separate Nostr Wallet Connect connections for applications using its LNbits wallet. Each can have a name, daily spending limit, and expiry, with local secret storage, budget visibility, and revocation. The project’s live test covered connection creation, revocation, and a signed get_info exchange, not a real payment; browser-store publication is separate from the source release.

pakstr 0.22.0–0.24.0 adds Android signer handoff

pakstr packages web applications with native Nostr capabilities. Last week’s issue covered its 0.21.x packaging sequence. The new 0.22.0 release adds NIP-55 signing through the NIP-46 bunker, letting an Android application hand signing requests to an external signer. Version 0.23.0 then persists the runtime API address across restarts.

Version 0.24.0 publishes the Zapstore icon; that cosmetic change is not the signer milestone. NostrAppShell entries point to the same package series, so they are covered here once.

Nail 0.2.2 makes mail attachments fail soft

Nail is a bridge and application that carries Nostr messages into email workflows. Version 0.2.2 retries a message without attachments when a relay refuses the attachment payload, adds a size ceiling to prevent bridge restarts, and changes the default bridge relay.

The application update also restores link opening and opt-in image viewing. Delivery can now degrade to the message body instead of losing the entire email when its attachment path fails.

Mostro CLI 0.16.2 removes its legacy chat transport

Mostro CLI is a terminal client for coordinating peer-to-peer Bitcoin trades through Mostro’s Nostr protocol. Version 0.16.2 removes the version-one gift-wrap dual-read and dual-write path, migrates peer chat to the current envelope, and lets a trader reach the solver through dispute chat.

The release also adds an operator command for cancelling pending orders. Deployments should update client and coordinator expectations together because the old chat transport is no longer a fallback.

Dart NDK dev.4–dev.5 adds signed app updates and hardens relay delivery

Dart NDK is a Dart client library for relay connections, signing, caching, wallet operations, and Nostr application state. NIP-82 standardizes signed application-release metadata and downloadable artifacts. Version 0.10.0-dev.4 adds NIP-82 application-update support; dev.5 makes Cashu quote recovery resumable and lets a broadcast declare the identity to which it may be attributed.

Across the dev.5 release, the library avoids anonymous connections when a broadcast requires authentication and stops waking relays for deliveries parked on a missing identity. Applications adopting this prerelease should allow for migration work in their broadcast and wallet integrations.

BitBlik 0.11.0 brings disputes into the app

BitBlik is a mobile peer-to-peer Bitcoin trading client that coordinates orders and chat over Nostr. Version 0.11.0 adds coordinator dispute chat, BOLT12 payouts where supported, Android self-updates sourced from NIP-82 release events, and wallet backup and recovery fixes.

The release also handles refunds after dispute rulings and preserves wallet state during Neko recovery. Traders can now remain inside the client for the dispute conversation instead of switching to a separate coordinator channel.

Scramble 0.7.2 changes MLS engines and offers two Android views

Scramble is a Nostr-based encrypted group-chat application. Its 0.7.0 release replaces the former MLS engine with Dark Matter, restores encryption at rest for group state, and prevents Android cloud backup of the profile database. The migration has an important limit: groups created in 0.6.x do not appear after upgrading, although the account key, contacts, relays, and signer pairing remain.

Version 0.7.2 ships Avalonia and native Android view layers with the same app ID and release certificate, so one can install over the other without clearing the new-engine account and chats. They cannot be installed side by side. The native view still lacks some device-management settings; the project’s release notes say protocol interop is tested but do not claim a real-device group conversation test for the 0.7.0 migration.

Morganite 0.0.5 makes onion Blossom media seekable

Morganite is an Android Blossom media cache for Nostr clients. Version 0.0.5 fetches blobs from Tor .onion Blossom servers with Tor-aware retries and honors HTTP Range requests on a cache miss. A player can seek into an uncached video while Morganite fills the full cache in the background instead of storing only disjoint requested slices.

Bitcredit 0.5.16 recovers stalled Nostr bill events

Bitcredit E-Bills carries bill, company, and identity chains through Nostr events. Version 0.5.16 repairs event-signature serialization compatibility after its Nostr 0.45 dependency upgrade, exposes failed resend-queue entries for inspection and requeue, and resynchronizes missing chain metadata before retrying a block publication. Those changes target both upgraded-data compatibility and messages that would otherwise remain stuck.

fips-ts 0.0.43 protects concurrent FIPS sessions

fips-ts supplies the shared TypeScript FIPS mesh runtime used by compatible clients. Its runtime 0.0.43 release preserves an authenticated identity when concurrent setup or an aliased WebRTC transport hands a session over, while rejecting a different identity. It also prevents canceled negotiations and late callbacks from replacing a working connection. This is library-level connection reliability, separate from fips2go’s client-side bootstrap and discovery changes.

Bookshelf 0.1.25 makes signed book reviews editable

Bookshelf is a Nostr-connected Android reader with community book ratings and private highlights. Version 0.1.25 lets readers revise their signed rating and written review through a durable outbox. The app displays cached ratings immediately, refreshes them online, and replaces older revisions by the newest event for the same book and author.

The release diff includes the review editor, revision cache, relay synchronization, and tests. It also normalizes pasted nostr:naddr references before searching for a book’s publication coordinates.

Cordn 0.5.0 queues encrypted messages offline

Cordn is an encrypted Nostr group-chat client. Version 0.5.0 queues text sends in a durable offline outbox, makes failed entries terminal until a successful confirmation sweep, and resumes coordinator chats in order. It also checks a signer’s NIP-44 capability before offering an encrypted action, surfacing unsupported signers instead of failing silently.

21Meetup 1.6.6 restores multi-hop trust paths

21Meetup issues Nostr-backed attendance badges for in-person events. Version 1.6.6 restores second- and third-degree trust paths by fetching contacts’ meetup records in bounded stages. Failed badge publications can be retried, and a send counts as successful only after a relay acknowledges it. Multi-day events now count as one attendance badge instead of one per day.

TWENTY ONE Companion 1.13.0 explains public Nostr RSVPs

TWENTY ONE Companion combines Nostr rooms and articles with meetup listings. Version 1.13.0 saves pinned rooms and articles to relays, showing a pin as local until a relay confirms it. Eligible meetup RSVPs are signed public Nostr events; the app warns that third-party relays may retain them even after a user declines. A contact-list preview now refuses to publish if the list changed after review.

Armada 0.61.0 adds media privacy and member controls

Armada is a Nostr-based encrypted community client. Version 0.61.0 adds an opt-in image proxy list so a sender’s media host need not learn a reader’s address. Staff can kick, ban, or unban a member from a profile card, and a private-channel key granted with a role now applies without a separate invite. The proxy is off by default; operators choose and rotate their own servers.

Ditto 2.40.0 brings Top 8 rankings to Nostr profiles

Ditto is a social client on Nostr. Version 2.40.0 lets a user rank eight favorite people on their profile. Reordering stays local until Save, then the ranked list appears on the profile and its update can appear as a card in followers’ feeds. That turns a profile preference into a shared social-graph signal with an explicit publish step.

XM Arcade 1.1.3 binds mini-app approval to one run

XM Arcade runs small games and mini-apps within a Nostr group context. Version 1.1.3 binds a post approval to an opaque run token, the request, app, account, group, and channel. Expired or replayed approvals no longer authorize another mini-app run. The update also persists trusted group-key epoch state across restart.

Zzub 0.0.15–0.0.16 expands mobile project boards

Zzub is a Nostr-based project and code-review client. Its 0.0.15 release adds status columns, sorting and filtering, threaded comments, named assignees, and approve or request-changes actions to its phone boards. A built-in Git client opens source and files-changed diffs from a pull-request card, bringing the existing desktop review flow onto the phone.

Version 0.0.16 restores the full announced Projects list after the previous device-local scoping hid it. The release adds an @mention selector to card comments, shows mentions as chips, and gives the project screen Tasks and Reviews tabs spanning all its repositories while keeping per-repository boards available. It also adds repository and status filters and lifts the comment box above Android navigation.

Table Mesh 0.1.0 brings Nostr game discovery to offline board games

Table Mesh 0.1.0 is a first Android release for playing board games across nearby phones over Bluetooth and local Wi-Fi. It includes Mensch ärgere Dich nicht and solo bots. A Nostr kind-7529 catalog distributes additional sandboxed game modules through Blossom, with downloaded bytes checked against their announced hashes.

The app listing describes the Bluetooth mesh as tested in simulation and emulators, not yet at real multi-phone tables. The table session itself runs locally without an internet connection or account; Nostr does not carry its moves.

In Development

0xchat merges fixes for signing, message-authentication, and redirect flaws

0xchat’s merged security PR addresses four audit findings in its Nostr and Cashu application code. It limits Cashu P2PK witness signing to keys actually authorized by a lock, rejects unsealed gift-wrap contents except MLS Welcome events, accepts infrastructure host-map configuration only from the trusted server key, and requires consent before an embedded web page can call NIP-07 signing or read relay settings.

The PR’s test record reports static analysis and runtime checks for the gift-wrap path. This is source-level progress, not a claim that an updated app has been released or independently tested on a device.

nos2x-fox closes a PIN exposure path

nos2x-fox is a Firefox extension that offers Nostr signing to websites. A merged access-control fix stops a website from asking the extension background for the cached PIN that derives its private-key encryption key. The page bridge now forwards only allowed request types, and the background rejects privileged requests unless they originate from an extension page.

A separate merged injection change makes the NIP-07 window.nostr interface appear at document start and removes a web-accessible script URL that exposed a stable extension identifier. It raises the Firefox minimum to version 128. Both fixes are merged source work; a new extension-store release has not been verified.

nostream publishes relay health events

nostream is a Nostr relay implementation that also runs a relay monitor. Its merged NIP-66 work publishes signed relay-discovery and monitor-announcement events after a probe, giving other clients a way to find the monitor’s measurements through Nostr. NIP-66 defines relay-discovery and monitor events so relay status can be shared in a common format.

The relay also merged an opt-in trust-distance rule for adaptive proof of work: an operator can lower the posting difficulty for keys near its web-of-trust graph while unknown keys retain the full requirement. No threshold is configured by default, so existing relays keep their previous admission behavior.

nostter ties remote signing to the active session

nostter is a web Nostr client for reading and publishing through relays. Its NIP-46 connection lifecycle now belongs to the authenticated session’s signer, so a failed login or session reset can dispose of the remote connection instead of leaving a module-global signer behind. NIP-46 lets a client ask a separate signer to approve cryptographic operations over Nostr.

The client also accepts images from the operating system’s share menu, passing them to its normal composer and upload path. That makes sharing a photo into a Nostr post possible without first saving and selecting it inside the client.

Zap Cooking publishes image descriptions and blocks secret-key searches

Zap Cooking is a Nostr recipe and long-form publishing site. Its NIP-92 image-description work lets authors write alternative text for images in notes, replies, recipes, articles, and products, then carries that text in imeta tags that other clients can render. NIP-92 standardizes media metadata attached to Nostr events, including image descriptions.

The site’s search fix now opens pasted nostr: identifiers directly and rejects secret-key input before it becomes a relay search. That matters because NIP-50 sends search terms to relays; accidentally pasting an nsec into the old search field could disclose the private key to those relays. NIP-50 defines relay-side search filters for Nostr content.

Divine Mobile reconnects idle relay subscriptions

Divine Mobile is a short-video client that publishes and reads Nostr events. A merged relay fix reconnects after an idle timeout or remote closure, including subscriptions that only receive data and never send another request to trigger recovery. That restores a path used by direct-message inboxes and moderation labels after a connection drops.

A separate profile-verification fix waits for all queried relays before concluding that a profile has no linked accounts. The previous early empty answer could hide a valid identity event from a slower relay, so users see valid identity events from slower relays on a first profile view.

Conduit uploads product images through Blossom

Conduit is a Nostr-based marketplace with merchant publishing tools. Its merged image-upload work lets merchants add product images from desktop or mobile through a configured Blossom server while keeping product publication separately signed. Blossom is a media-storage protocol that uses Nostr identities to authorize uploads and let applications retrieve files.

The upload path authorizes only the prepared image hash and selected server with a short-lived signed event, then checks the returned result. That gives a merchant an in-app media workflow without silently changing the signed server preference that governs where images go.

Buzz adds authenticated relay moderation controls

Buzz includes a Nostr relay and community administration tools. Its merged relay-admin routes let authorized operators list active bans and timeouts and lift them through a signed HTTP request. NIP-98 defines Nostr-event authorization for HTTP calls, allowing the relay to verify who made the administrative request.

The unban and untimeout operations write their audit record in the same database transaction as the restriction change. Operators can therefore inspect and reverse a live moderation decision without a successful reversal losing its audit trail.

ContextVM SDK shortens publish waits and repairs streams

ContextVM SDK is a TypeScript toolkit for applications that exchange signed requests and streams over Nostr relays. Its relay-pool change sends an event to every connected relay but, by default, finishes the caller’s wait after the first positive acknowledgement; applications that need all acknowledgements can still request that mode. One slow relay no longer determines the normal publish wait.

The SDK also repaired per-sender stream sequencing so client-started streams no longer reuse a sequence number for an accept and a control frame. The PR notes that tool-side consumption of those streamed chunks remains unwired, so this is a transport milestone, not a claim that every streaming application path is complete.

Mostro preserves an order’s original creation time

Mostro is a peer-to-peer Bitcoin exchange coordinator that publishes orders over Nostr. Its merged kind 38383 change adds a stable created_at tag from the order record, allowing clients to sort or age an order by when it was opened instead of by its latest status revision. NIP-69 defines the Nostr order format used by interoperable trading clients.

This is the implementation counterpart to the proposed NIP-69 clarification below. Older clients can ignore the additive tag, while clients that read it can avoid making a returned or repaired order look newly created.

Amethyst’s merged DECK-0003 work reads and renders Simple Nostr Objects, a JSON 3D-mesh format carried in Nostr events. It supports kind 11333 avatars, kind 3330 shards, and opening encrypted kind 33330 region bags from a location hint. CLI commands parse and verify objects or calculate the bounded search needed to open a bag. The PR reports 15 passing conformance sections against reference implementations.

The bag-search implementation is still a development milestone, not a device-verified release. Its card compiles and its state machine has unit tests, but it has not been exercised on a phone; the reachable real bags checked by the maintainer lack the hint needed to offer a search button. A synthetic bag is needed to exercise that user path.

Amethyst broadens MLS interoperability and repairs desktop group rendering

Amethyst’s Quartz library now lets callers choose an MLS group ID and omit Marmot-only required capabilities when interoperating with other MLS stacks. Separate merged changes allow extensions supported by every group member, carry authenticated application-message data, and set an optional key-package lifetime. The Marmot defaults remain unchanged; these are shared-library capabilities, not a claim that every client UI exposes them.

A later desktop render fix uses shared dialogs and prevents blank group messages after the display-layer split. These merged PRs are development progress, not a tagged Amethyst release.

nostter gates signing and private reads on real capabilities

Continuing the session-owned NIP-46 work above, nostter’s merged signer migration checks for an actual signer before offering write actions instead of treating every logged-in session as writable. Private bookmarks now require NIP-04 or NIP-44 decryption capability, and remote-signer settings require NIP-44 support. A read-only or anonymous account can still use non-writing profile actions.

The npub display change and subsequent authentication-state refactors continue that same migration. These are merged application changes, but no new tagged release is claimed here.

Pensieve makes archive reconciliation bounded and durable

Pensieve’s archive receipt work waits for actual durable event markers before declaring a reconciliation attempt complete, retaining unresolved IDs across recovery. The sealing change separates periodic archive durability from optional Parquet publication, and the bounded inventory scans sealed segments with explicit limits and a persisted cursor.

These are merged library increments, not an enabled relay repair worker: runtime scheduling, peer-authenticated IPC, deployment, and production canary remain separate gates.

MDK reduces repeated replay work for parked encrypted messages

MDK’s merged replay fix addresses work repeated after a publish confirmation, publish failure, or group join when messages remain parked because they cannot yet be decrypted. The previous path classified each row’s lineage again and rewound group state for each row and retained anchor. The new deferred-sweep ingest path skips redundant classification and shares a group-scoped cache of historical contexts, invalidating it when canonical state changes.

The PR’s regression tests compare the one-row and eight-row parked-message cases. Its engine suite reports 681 passing tests and five skipped. This is merged library work after MDK 0.10.4, not part of that tagged release or a measured end-user latency claim.

Protocol and Spec Work

NIP-02 clarifies petnames in follow lists

NIP-02 (Follow List) standardizes the kind 3 event that records whom an account follows and can attach a local petname to each followed key. The merged petname clarification allows display-safe characters while preserving the field as a user’s local label, not a globally verified name.

NIP-86 adds clear and list methods for relay management

NIP-86 (Relay Management API) standardizes authenticated administrative calls for banning, allowing, inspecting, and configuring a relay. PR #2477, merged September 23, adds methods for clearing pubkeys or events from both allow and ban lists and for listing roles, allowed events, and disallowed kinds, including behavior already present in the khatru relay framework and the go-nostr library.

NIP-69 proposes a stable creation time for trading orders

NIP-69 (Peer-to-Peer Trading) standardizes addressable order events that let multiple trading applications share buy and sell liquidity. PR #2476 proposes an optional creation-time tag that stays fixed across status updates, so a returned or republished order retains its original age even when a newer event records a status change.

NIP-A3 proposes proof of payment-address ownership

NIP-A3 (Payment Targets) lets an account publish portable payment addresses for multiple networks in one replaceable event. PR #2475 proposes an optional signature made by the payment address’s own key, giving compatible address types a proof that binds the destination to the Nostr author while treating missing proofs as neutral.

BUD-16 proposes deterministic directory manifests

BUD-16 is an open Blossom proposal for grouping content-addressed blobs into named directory trees with reproducible manifest hashes. The draft defines deterministic MessagePack encoding, named links, metadata, optional encryption keys, and .bdir path resolution while leaving servers to store ordinary blobs.

Marmot adds encrypted group polls

Marmot Protocol defines interoperable application events inside MLS-encrypted groups carried over Nostr. NIP-88 defines poll questions and signed response events. Merged MIP work recognizes those polls inside a group while keeping relay selection bound to authenticated group routing and explicitly stating that they are not anonymous or election-grade.

Marmot merges group reports and admin deletion

Marmot group moderation defines encrypted report, dismissal, and administrator-deletion events that converge under the group’s authenticated state. The proposal covered last week has now merged, fixing a status transition that lets implementations align report review and message removal against the accepted specification.

NWC-13 proposes connection budget queries

Nostr Wallet Connect lets an application request narrowly scoped wallet operations through encrypted Nostr events. NWC-13 proposes a separate get_budget permission and response so an application can inspect used, total, and renewal allowance without receiving permission to read the wallet’s balance.

NIP Deep Dive: Custom Emoji and Video Events

NIP-30: Custom Emoji

NIP-30 (Custom Emoji) standardizes how a signed event maps readable :shortcodes: to image URLs, with an optional address that points to a reusable emoji set. The specification permits letters, numbers, hyphens, and underscore (_) characters in a shortcode and applies the mapping to profiles, short text notes, comments, reactions, and live activities. NIP-51 defines public and private list formats, including the kind 30030 parameterized replaceable events that hold named emoji sets.

Clients should preserve the literal shortcode when an image fails to load, reject malformed mappings, and treat every image host as an external network request that can observe the viewer’s address and timing. Amethyst’s Android implementation parses the optional set address and enforces the allowed shortcode characters. Wisp’s mobile client implementation builds emoji sets and removes duplicate shortcodes from rendered content. Nostria’s web client implementation normalizes separators before validating shortcodes, which shows why producers should test common clients before depending on punctuation permitted by the specification.

NIP-01 defines the canonical serialization, event ID, and signature rules used to authenticate Nostr events. The following kind 30030 emoji-set event was recovered from wss://nos.lol and wss://relay.primal.net during review and passed those ID rules plus BIP-340 signature verification. Its d tag supplies the replaceable set identifier, and its emoji tag maps :liberlandflag: to the hosted image.

{"kind":30030,"id":"438814476db249b50067d167e50c85530e317126179546a584365c8371bdd97f","pubkey":"6e1897660c62153be7355a82a62549b09993fb12b50de73a32610725d1a5de6b","created_at":1790025651,"tags":[["d","1962f3e8-5a74-4327-b88d-4697bdd2119d"],["client","Amethyst"],["emoji","liberlandflag","https://nogues.ca/emoji/liberlandflag.png"],["title","Liberland"],["description","#Liberland"],["image","https://npub1dcvfwesvvg2nhee4t2p2vf2fkzve87cjk5x7ww3jvyrjt5d9me4szmscg7.blossom.band/a8aa38949d3d7a17e369703391de0406f50b518a1a6ca9791ebf38c94b51a0e1.jpg"]],"content":"","sig":"5f7dd5b8879311689e95cbab26edd6f65611d517d22d12d568a9de219c8a8fc6999365c83205d02ec74844b4b9944ed5419ec17ea9d8cbf4e347504cc3685304"}

Alex Gleason introduced NIP-30 in April 2023. That original proposal, reported previously in the April 29 issue, has now shipped in current clients. Subsequent specification changes include an August 2026 update that added kind 1111 comments to its supported event kinds. The design keeps emoji meaning local to each signed event or referenced set, so clients do not need a global shortcode registry.

NIP-71: Video Events

NIP-71 (Video Events) standardizes Nostr events for horizontal and short-form video, including playback metadata, alternate files, captions, chapters, participants, and imported-source provenance. The canonical specification assigns kinds 21 and 22 to immutable horizontal and portrait video posts, while kinds 34235 and 34236 use a d tag to create addressable videos whose metadata can be updated under a stable coordinate. Each imeta tag describes one playable variant with a URL and media type plus optional dimensions, hash, preview image, fallback, service, bitrate, and duration.

Clients must validate media URLs and hashes, bound downloads, handle missing variants, and make external-host requests visible to users because a video server can observe playback traffic. Amethyst’s Android implementation separates video and audio tracks and chooses a playable variant. Wisp’s mobile client implementation parses and builds regular video events with structured imeta fields. Resonote’s browser-extension implementation builds and parses all four event kinds, media variants, text tracks, segments, participants, and origin metadata.

The following kind 22 short-video event was recovered from wss://relay.damus.io and wss://nos.lol during review and passed the NIP-01 ID rules plus BIP-340 signature verification. Its imeta tag binds the MP4 URL to its MIME type, SHA-256 hash, dimensions, and duration, while the surrounding tags provide a title, publication time, accessibility text, and searchable topics.

{"kind":22,"id":"dd1fcfe7ce6db5450e362879897138ca4e639ef39654dfe3b1f669310fd9545d","pubkey":"870ce6f7aa9ee05025667245343278eccfb8e3eafc08bcab68824ad0f4cfa675","created_at":1790094714,"tags":[["title","Why Pepe moves 3x Bitcoin"],["published_at","1790094714"],["alt","Why Pepe moves 3x Bitcoin"],["imeta","url https://the-bitcoin-strategy.com/nostr-relay/pKy3my2zzMhCVNL1.mp4","m video/mp4","x 3dafddd0b1730213212bcaf96136684f15e20ee5f20a1252052a58f3a8b36652","dim 1080x1920","duration 62"],["duration","62"],["t","bitcoin"],["t","pepe"],["t","memecoin"],["t","altcoin"]],"content":"Why Pepe moves 3x Bitcoin\n\nPepe jumped about twenty percent in a single day, roughly triple Bitcoin's move. Most of the trading is not the token itself: on Binance, the volume in bets on the price was about eight times the volume in the actual token. Those bets are made with borrowed money, so every dollar tends to move the price more, in both directions.\n\nAsk Gerhard AI For Free:\nhttps://mybtcguy.com\n\n#bitcoin #pepe #memecoin #altcoin","sig":"0da305b00f4b1631b14b8fd33fcc6a2a0e54e24233dba541db3d2bce3705ac0dcf61401764b47555015e2566dcf4a8886cd3f767ea26ed2da76b3ac9bb23d680"}

The NIP-71 file history began in December 2023 when zmeyer44 moved the video-event proposal to its current number. The addressable-video update, reported previously in the January 13 issue, has now shipped across multiple current implementations; its kinds 34235 and 34236 give publishers a stable coordinate for corrected metadata and migrated hosting.

How the two specifications relate

The NIP-30 specification controls presentation metadata for a limited set of social event kinds, while NIP-71 defines media-centered events and their playback data. NIP-30 does not currently list the four NIP-71 video kinds, so clients should display custom emoji around videos through supported profiles, comments, reactions, or live activities and should not assume shortcode replacement inside a video event. That boundary gives implementers a precise interoperability rule while both specifications expand the media that a Nostr interface can render.


NIP-17 defines private direct messages whose sender and metadata are hidden inside gift-wrapped events. Send a NIP-17 DM to share a project or news item through the Nostr Compass project.