Amethyst reaches desktop, Amber repairs signing security, and Nostr applications improve private media, relay recovery, software installation, and public content controls.
Amethyst
Top Stories#
Amethyst#
Amethyst v1.18.0 brings the Android social client's shared interface to desktop, with custom feeds, wide-window decks, opt-in locks, encrypted media and Blossom uploads. Provider scores from NIP-85, trusted assertions, are indexed locally for requests, notifications and badges, with user-selected providers and thresholds.
Today's v1.19.0 release adds native Wayland support and desktop video compression using separately installed FFmpeg and ffprobe. Key-storage fixes address repeated keychain prompts and Linux keyring failures. Calendar collections and RSVPs gain rendering, and the Android login interface adds NIP-46 remote signing. Parallel opening of encrypted envelopes precedes serial indexing, while relay reconnection and feed-author relay-list handling are corrected. The relay client honors rate-limit backoff before resuming subscriptions or publications.
The trust-provider relay change treats provider relays from the user's kind 10040 list as own, trusted relays. Those connections use a direct route by default; Tor requires enabling the trusted-relays setting. The main client's NIP-42 relay authentication can disclose the user's public key to these relays.
Amber#
Amber 6.6.9 fixes three security flaws in the Android Nostr signer. Revoked permissions no longer survive a cache race, and explicit rejections override fully trusted status. Copied secrets receive a system-scheduled clipboard clear after 60 seconds, including when the process is killed; contents remain readable during that interval, and newer copied text may also be cleared. Changing “require unlocked device” preserves the old wrapping key until secret migration completes, while previously lost keys remain lost. The release repairs multi-request nostrconnect approvals and replies on the URI's specified relays. Users of 6.6.8 and earlier should update.
Keep Android#
Keep Android v1.3.0 (maintainer:
Version 1.3.1 prevents automatic signing from overriding remembered refusals, Ask permissions, expired approvals or failed permission reads. Expiry removes background approval while retaining denials. The per-app policy migration moves permissions into the core-owned store while preserving stricter decisions.
Chama#
Chama v6.4.21
Version 6.4.22 hardens replay against outsider events, checks successor relationships, rejects empty arbiter pools and derives refund timing from the signed LOCK time. Its consensus changes apply to CREATE events signed from November 1, 2026; the client protections apply immediately. The release notes retain caveats about listing-selected federations and dust payouts. Subsequent signer and recovery changes add protected-seed readers and recoverable late locks, while v6.4.24 improves large trade lists.
Zap Cooking#
The recipe and social client Zap Cooking merges safeguards for follow-list edits against incomplete, stale or unexpectedly shrinking reads. Follow actions share one guarded update path that preserves existing tags and content. Signer identity is checked before publication. Its membership authorization fix uses the public key signing the authenticated request. A route that exposed an administrative secret was removed; deployment still requires secret rotation, which a merged change alone cannot establish. Later thread and bookmark repairs preserve the real reply root and recover failed bookmark writes. Recipe tag fields no longer send keystrokes to profile or NIP-50 search services or leave the editor with unsaved changes.
Tagged Releases#
MDK#
MDK v0.13.0, the runtime for Marmot encrypted groups, adds streaming and resumable private attachments with progress and cancellation. It also sends private NIP-56 reports to the deployment operator through NIP-59 gift wraps, omitting message, group and relay identifiers. Catch-up processes oldest-first batches of up to 256 events and preserves relay CLOSED refusals. SOCKS5 routing covers relays, media and discovery services without a direct fallback.
The release guide requires bindings, headers and native artifacts to move together. Database schemas advance from 101 to 107 without a downgrade path. Host secret storage needs migration. MarmotKit and C artifacts are stable; WN Agent remains a prerelease and workspace crates are unpublished on crates.io. History arriving more than five MLS epochs late can still be undecryptable without an incomplete-history notice, and authenticated agent clients retain access to the whole API.
The release also retries profile, follow-list and relay-list saves left pending after the first acknowledgement; these background retries do not survive restart. Invitation lookup checks KeyPackage deletion and expiry on discovery relays, whose answers cannot prove the recipient still holds its private KeyPackage material. Activity-reaction targets now derive consistently from authenticated actors and individual group commits; older actorless history remains incomplete.
Later master work closes leaked relay subscriptions and pages activation replays clamped to 500 events. Epoch-gap recovery fetches a failed comparison relay's newest 256 events without certifying complete history. Self-update commits retry every missed group relay. New advisory checks cover known stale epochs and commits still owed to relays; users can acknowledge the risk, so these do not guarantee that a group cannot fork.
Storage-blocked attachment downloads retain resumable progress when free space is insufficient. Large explicit downloads use a file sink, with staging and checkpoints requiring roughly five to six times the body size in free space. Verified public-event previews gain a bounded encrypted account cache, while obsolete-only KeyPackage results become distinguishable from incomplete relay lookups. These are later source changes requiring matching host adoption; event-ID previews from completed fetches do not recheck later deletions.
The agent bridges also bound backend output to prevent oversized replies from exhausting memory, and accept the connector's actual deletion response. Previously delivered text remains delivered when an output limit stops a turn.
Myco#
Myco v0.11.0 (maintainer:
The release also races upstream DNS servers to avoid roaming-carrier timeouts blocking relay and artifact lookups. Outbox publications target every listed write relay, with slower destinations delivered in the background. Internet mesh remains off by default, and web pictures are not retained across restarts.
Unfiltered#
Unfiltered 1.0.13 (maintainer CheshireRemnant:
monostr#
monostr 0.17.0
Grocery#
Grocery 1.0.2 (maintainer Marc:
Roadstr#
Roadstr 1.1.0 reads another Roadstr client’s kinds 1315/1316 with their intended lifetimes and confirmation rules. A compact codec preserves reconstructible signed reports for an experimental MeshCore radio and relay bridge. Compatible publishing and radio transmission are off by default, with consent before sharing. Radio reports expose position, time and the signing public key to anyone in range. Tests used simulated radios; real hardware, Android BLE and public-relay publication remain unverified.
OUTKAST#
OUTKAST 1.1.3 improves article comments and quoted-post handling in its Android client. Article comments use kind 1111 with the article as root and the comment as parent, while ordinary note replies remain kind 1. Quote discovery accepts both q tags and older link-bearing e mentions; newly published quotes add q tags. Failed publication rolls back optimistic reactions.
Bookshelf#
Bookshelf 0.1.28 (organization Decent Newsroom:
Ditto#
Ditto 2.45.0
Postr#
Postr 1.1.2
Nostrautica#
Nostrautica Android 0.11.0 (maintainer Juraj:
Minibits#
Minibits v0.4.4 beta 1
NoorNote#
NoorNote v1.9.0 (maintainer: nostr: links. Website links remain distinct from verifying a site's contents; gateway access exposes a clicked request to that gateway.
Gittr#
Gittr v1.0.2 (maintainer arbadacarbaYK: gittr.space application, so users still depend on its served browser code and availability. Browser-extension signing is unavailable inside this wrapper; self-hosting remains a separate Git deployment.
Dart NDK#
Dart NDK 0.11.0 development zero (maintainer:
Cambium#
Cambium v0.9.0
Grain#
Grain v0.8.1 (maintainer: UserContext owns private authenticated connections, relay preferences and connection holds; the shared pool never authenticates. The library validates incoming IDs and signatures, checks subscription matches and serializes tag and time filters correctly. Authenticated callers must migrate to UserContext. Relay storage and serving are unchanged, and authentication still requires a challenge when the connection opens.
Nmail#
Nmail v0.18.0, an encrypted mail client, places unfamiliar senders in Requests and blocked senders in Spam. Acceptance and blocking synchronize across devices. Existing inbox senders need acceptance, with Accept all available; Spam stays silent and waiting requests avoid repeated sender alerts. Replies use the receiving identity. Private-relay management, device-lock checks before copying synchronization codes, shared themes, richer contact preservation and a Windows installer accompany mailbox restoration fixes after reset or login.
Meiso#
Meiso v1.5.0 (maintainer:
Haps#
Haps v0.1.13 (organization Sirius Business Ltd:
Sidecar#
Sidecar v1.16.0 (maintainer Daniel:
Ants#
The search interface Ants v0.7.0 (maintainer Gigi:
soyLI#
soyLI v0.27.0, a napplet publisher and player for proposed NIP-5D applications, adds keyboard bindings and forkless proposals through GRASP, a Git hosting service, with exact-revision retry checks. Its v0.26.0 release distributes signed releases to verified outbox relays after primary publication; deletion tracks attempted destinations but cannot recall unknown copies. Version 0.26.1 raises read, play and review budgets to 100 MiB while retaining a 25 MiB limit for new builds and publication. Later direct presentation metadata places author covers and clips directly on signed manifests, retiring the companion event. Frozen older jobs remain supported; this versioned Soy extension requires compatible readers and is not part of the pinned NIP-5D specification.
nostream#
The relay server nostream v3.3.0 (maintainer: REQ or COUNT. It ships the PostgreSQL negentropy reconciliation core and ordered event inventory; NIP-77 relay wire messages and capability advertising remain separate work.
Bark#
Bark v1.3.15 gives remote-signing approvals keyboard controls, explicit event and identity review, and one, five or ten minutes to decide. Background enforcement rejects expired decisions and queued requests; failed decision delivery keeps the popup open for retry. Version 1.3.17 makes NIP-07 browser signing available when the signer handshake completes, while optional diagnostics continue. It restores bridges on existing tabs after updates.
Mostro#
Mostro v0.19.3
Elisym#
Elisym's commerce 0.11.0 supports fees deducted from merchant revenue, with a signed store-profile tag declaring split-payment support and incompatible stores refused when a fee applies. Merged admin work reads orders and listings from Nostr relays. It asks for the store's secret key, requiring trust in served browser code and extensions; the local admin remains available. Hosted deployment and mainnet fee activation remain unverified. Merchant-node 0.10.0 upgrades its ledger without downgrade support.
Routstrd#
Routstrd v0.4.16
Buzz#
Buzz desktop 0.5.28
Earthly#
Earthly v0.1.21
Milk Market#
Milk Market's mobile v0.3.0
Zeus#
Zeus v13.2.3
In Development#
nosvelte#
nosvelte's event-verifier fix (maintainer akiomik:
nostter#
nostter restricts externally supplied relay hints to secure WebSocket URLs, rejecting local hostnames and non-global IP addresses. Account-selected local relays and remote-signer URLs retain their existing paths; DNS rebinding remains outside the check. The web client also reads experimental separated content-warning payloads only after the reader presses Show, checking the referenced event ID, matching author and a k tag matching the original event kind. Reactions and replies target the original event. These merged changes leave its current NIP-36 publishing format unchanged.
Coracle#
Coracle's list editor (maintainer:
Routstr Core#
Routstr Core’s current version 0.5.0 source stops logging autogenerated Nostr private keys and preserves the first-boot public identity. Provider announcements exclude localhost and literal private or link-local HTTP addresses; hostnames are not resolved for this check. The current tag includes work merged after its recorded October 7 publication date, so historical binaries and deployments remain unverified. Previously exposed logs still require operator review.
Alby Hub#
Alby Hub's invoice-authorization change
nak#
nak's merged relay command (maintainer: nak event supplies signing and publication, making scheduled NIP-66 relay monitoring possible with the same terminal tool. Observed authentication or restriction responses override advertised relay information. Write probes use an ephemeral event signed by a throwaway key; kind 10166 monitor announcements remain a separate operation.
Kehto#
Kehto's manifest verification checks current single-artifact signed manifests and artifact bytes before execution, with legacy parsing kept separate. The napplet shell also verifies recommended handlers, asks users about conflicts with saved choices and consumes an accepted invocation URL to prevent repeated delivery. Manifest verification checks publisher identity and artifact bytes; it does not establish that the application code is safe. Gamepad snapshots now follow focus and visibility. Paja/playground frames block direct native gamepad, HID and USB access before application code runs, leaving mediated access to the host. Consumers need the corresponding host packages; shell readiness is a separate capability. A later Paja admission change warns about unavailable experimental required domains but permits loading; those domains still expose no APIs or grants.
napplet SDK#
The napplet SDK implements URI-based invocation and retained delivery (maintainer:
rust-nostr#
The Rust Nostr library rust-nostr preserves partial download progress alongside terminal relay errors (maintainer:
Pensieve#
Pensieve's reconciliation safety fix (maintainer:
Continuous Premium Primal reconciliation was enabled October 12. The operator's deployment record reports both repaired binaries deployed and failure-based pausing enabled October 13. Later exclusion carry-forward reuses only original proven exclusions for the same relay and overlapping window, excluding chained carries and newly mixed IDs; its deployment was recorded that afternoon. The archive preflight and cache-stall repair was deployed October 14. A later carry-priority fix is merged but not yet deployed in its source record.
njump#
The Nostr web viewer njump restores embedded relay defaults when no override file is supplied. It also isolates concurrent Markdown renderers and response headers during timeouts, fixing races that could crash the process while rendering quoted long-form events or serving concurrent requests. These are merged server changes; live deployment remains unverified.
Nostr Components#
Nostr Components' zap-signing repair (maintainer saiy2k:
rx-nostr#
The reactive client library rx-nostr's version-four verification changes check canonical event structure, IDs and signatures consistently across JavaScript and WebAssembly. An empty request condition list matches nothing and completes; legacy sending reports failure when it has no destination. Publication observers cannot change settlement, and disposed request descendants cannot restart. Finite query segments allow backward queries to complete after all supplied segments finish. These changes are included in 4.0.0 beta 2, a prerelease with breaking API changes.
eHagaki#
The social client eHagaki adds staged outbox delivery (maintainer Lokuyow:
Formstr#
Formstr's submission-result fix
Auditable Voting#
Auditable Voting adds optional private-worker ballot batching (maintainer:
MintRadar#
MintRadar adds opt-in gift-wrapped alerts (maintainer:
Nostr Docs#
Nostr Docs' local-relay migration routes the collaborative Markdown editor's reads and writes through a Web Worker with an IndexedDB event cache and retry outbox. Document titles and tags survive reloads, and successive metadata edits receive increasing timestamps so two edits in one second remain distinct. Existing encryption-key storage stays intact. The network-pool fallback lacks worker outbox durability, and accepting a queued publication does not establish relay acceptance.
Pakstr#
Pakstr's native local signer lets its Android application shell create a Nostr account on the device. The key stays in the native layer, encrypted with an Android Keystore-protected wrapping key. Signing results are verified before returning to the web application. The shell supports NIP-07 browser signing and encrypted requests. Signer selection opens lazily when needed and coordinates concurrent requests.
Nostr WoT SDK#
The web-of-trust library Nostr WoT SDK extends authentication consent (maintainer Leon Acosta:
NosTube#
NosTube v0.2.49 (maintainer flox1an:
diVine#
diVine 1.0.24 (maintainer:
The short-video client's routing changes consult recipients' inbox relays for text and video chat messages and preserve uncertain delivery outcomes. Sender-copy handling lets users' own group messages appear on their other devices; previously discarded copies require reimporting the account. Cancelled partial group sends retain “Not sent to everyone” records; cancellation is terminal and those records cannot retry. Group creation and recognition of new peer-started rooms remain behind an off-by-default flag.
Subsequent main-branch changes keep interrupted database-restore copies outside the temporary cache and preserve scheduled posts, queued reports, profile edits and removed-chat records during rebuilding. Send deadlines include relay reconnection, reducing the abandoned-send retry threshold from 160 to 137 seconds. Indexer inbox lookups use a separate bounded pool to avoid waiting behind feed reads, and follow controls preserve the chosen action if the contact list changes before confirmation. These later merges leave less time for relay acknowledgement during slow reconnects; database repairs cannot restore previously lost data. Later opt-in recording copies let Android and iOS gallery backup preserve newly recorded clips. Copies without signed provenance are warned and cannot be reimported; this is off by default and needs additional storage.
Conduit#
The commerce applications in Conduit gain a shared durable inbox
Bitcredit#
Bitcredit's persistence encryption
New Projects#
Submarine#
Submarine 0.1.0 (maintainer Russell:
cl-marmot#
cl-marmot adds a Common Lisp implementation of MLS group chat over Nostr. October 9 code adds competing-commit convergence and encrypted Blossom attachments, with author-reported interoperability tests against MDK’s wn command-line client. The implementation is unaudited, and account keys and message logs lack encryption at rest. Timed convergence windows, replay beyond the rollback horizon and disbanding remain unimplemented; the inspected harness uses disposable local relays.
nalgorithm Android#
nalgorithm's Android release builds a preference-ranked Nostr feed and a background audio digest that can be played offline. Users choose hosted, Lightning-priced inference or own-key inference requested from the phone; these are separate routes. Login supports Amber through remote signing. Follow-up releases repair own-key ranking and follow-list discovery, then preserve likes from working relays when another relay fails and improve digest recovery. Version 1.0.3 reorders model setup and reports missing connection-test inputs.
Protocol and Spec Work#
Authenticated napplet endpoints#
In the NAP specifications for napplet applications, NAP-INC endpoint identifiers, merged October 9, replace bare handler names with authenticated identifiers. Equal names from different publishers no longer identify the same peer. The runtime still mediates communication, and root or snapshot manifests need no named d coordinate.
Handler recommendations in invocation links#
The invocation-link recommendation, also merged October 9, allows an optional #naddr handler recommendation. A shell can offer discovery and installation, with ordinary resolution as a fallback. Saved preferences and shell policy take precedence. A recommended handler therefore supplies a discovery hint without replacing the user's existing choice or transferring installation authority to the link's sender.
Delivery acceptance and application work#
The intent advertisement and delivery changes derive roles and intents from the same verified manifest, using publisher-safe identifiers. Delivery acceptance no longer depends on the source application staying alive. An ok: true response accepts responsibility for delivery; it does not mean the destination's application work has finished. Retry and restart behavior remains runtime policy under this merged specification change.
Cyberspace action chains#
Cyberspace's revised chain rules make a fork invalidate a signed action chain from its spawn and require clients to confirm the live head before signing another action. The Nostr-backed world adds 140 signed synthetic chains with normative verdicts for implementations. Copy-credit rules use q references to the original object and notify its author for public remixes; sealed copies omit that notification. These are merged project specifications, with deployed verifier coverage unverified.
Relay persistence acknowledgements#
The open persistence proposal introduces persisted acknowledgements, PROOF queries and optional signed kind 1797 relay attestations. A signature makes a storage claim attributable to a relay; it does not prove continued retention. Queries also disclose which events interest the client.
Shared pins for Marmot groups#
Marmot's open pinning proposal defines authenticated shared state for up to 64 message references, with member and administrator permissions. Effective changes require an MLS Commit and epoch transition, and every resulting member leaf must support the feature. Pins do not copy message bodies or extend retention, so unavailable targets remain unresolved. The supplied fixtures assume authenticated state; they do not demonstrate cryptographic processing or convergence across clients.
NIP Deep Dive: NIP-36 and NIP-38#
Content warnings before display#
NIP-36, sensitive content, lets authors add a content-warning tag to an event, optionally including a reason. A client may hide the content until the reader chooses to reveal it. The specification leaves the interface to clients and permits supplemental label tags. Adding a warning does not change who can read the event. In a public post, relays and other clients still receive its content.
Amethyst's warning-tag parser recognizes the tag and treats a missing or blank reason as unspecified. Coracle's composer writes the reason into the tag; its content view respects the reader's sensitive-content setting and offers a reveal action. noStrudel's note view applies its own warning preference and expanded state before showing the warning interface.
NIP-36 does not encrypt events or require concealment. An absent warning says nothing about the content; clients decide how warnings affect previews and reveal controls.
Profile status and expiration#
NIP-38, user statuses, uses addressable kind 30315 events. The author, kind and d tag identify a status coordinate; general and music have defined meanings. A newer event replaces the previous status at that coordinate, while a different d value remains separate. Empty content clears a status. The specification also permits references to URLs, profiles, events and addresses.
This signed NIP-38 event shows an expired general status. The author's original spelling is preserved.
{
"kind": 30315,
"id": "8848719ae347e705afbbdbfa3a9f5dcca5dd31c4f39182503bf84de5e362bcf4",
"pubkey": "f13fdeecd852acebaa77dbc18806a051eaa7ea2214c157a3495982d7535a77f3",
"created_at": 1791983702,
"tags": [
[
"d",
"general"
],
[
"expiration",
"1791984600"
]
],
"content": "I'm listening 📩 on 3 ralys",
"sig": "b5c98a578773f0199cb833d4b916aac115f2b13474a61e81fdca7316b848d397d7d8ad86d299abee4721f404b7b8a1af26e8c53143457ad14d2fb933b21daf85"
}
Damus's status model handles general and music statuses with expiration. Nostria's status service ignores empty or expired values and publishes music statuses using track duration; its normal subscriptions request only general and music types. Amethyst preserves the d identifier when clearing a status. Custom types therefore need agreement beyond the shared wire structure.
Statuses are public author statements. They do not prove online presence or that somebody listened to a track. Publishing music or availability can disclose habits, and optional expiration limits stale display without promising deletion. NIP-38 remains a draft, optional specification, as does NIP-36. Clients can implement either independently, with their display settings determining what readers see.
Nostr Compass
Nostr Compass is a technical resource for the Nostr protocol, helping developers, relay operators, and builders stay current on protocol evolution. We publish weekly newsletters covering NIP proposals, client updates, relay developments, and notable code changes. Our podcast features conversations with the developers building Nostr. The topic index documents key concepts with links to primary sources. Podcast: https://podcast.nostrcompass.org
_@nostrcompass.org
Nostr Compass is a technical resource for the Nostr protocol, helping developers, relay operators, and builders stay current on protocol evolution. We publish weekly newsletters covering NIP proposals, client updates, relay developments, and notable code changes. Our podcast features conversations with the developers building Nostr. The topic index documents key concepts with links to primary sources. Podcast: https://podcast.nostrcompass.org