Nostr Compass #24
Amethyst v1.11.0はリマインダー付きの完全なNIP-52カレンダー実装、オンチェーンBitcoinのzapスプリット、Marmotグループの返信サポートを搭載してリリースされました。White Noise v2026.5.22はNotification Service Extension経由でのiOSプッシュ通知を、ブロックUXおよびメンバー追加ボタンとともに提供します。Vector v0.4.0はvector-coreの全面書き直し、ブリッジ対応のワンクリックTor、NIP-46リモート署名者、完全negentropyによるMLSグループ同期、AIエージェント向け21ツールのMCPサーバーを搭載しました。Applesauce v6.1.0はNIP-51ルックアップリレーリスト(kind 10086)と完全なNIP-34 gitキャストファクトリセットを導入しました。MDKは統一されたUniFFIサーフェスを通じてiOSとAndroidにNIP-40の消えるメッセージを追加し、Mostro v0.17.4はPhase 3のスラッシュされたボンドの勝者への支払いによりアンチ乱用ボンドループを閉じました。NotedeckはギフトラップとスレッドバックフィルのためのNIP-77 negentropy調停の完全実装をマージし、Cordnは単一障害点の可用性依存を厳密なエポック順序とよりシンプルな運用モデルと引き換えにするコーディネーター仲介型MLSメッセンジャーとして登場し、deepmarksと呼ばれるNIP-B0参照実装がキュレーター収益化型のブックマーククライアントを提供し、Formstrチームは参加者の自己削除、プライベートイベント、繰り返し、分散型アポイントメントスケジューリングをカバーする4つの調整されたカレンダーNIP提案を公開しました。
トップストーリー
Amethyst v1.11.0: カレンダー、オンチェーンzapスプリット、Marmot返信
Vitor PamplonaによってメンテナンスされているAndroid向けNostrクライアントAmethystがv1.11.0をリリースしました。PR #2994は専用UIとリマインダーシステムを備えたNIP-52カレンダーイベント実装を追加し、カレンダーイベントは汎用のkind-30023ロングフォームビューとは別に、独自のタイムラインカテゴリでレンダリングされるようになりました。PR #3018はオンチェーンBitcoin zapをスプリットサポートで拡張し、既存のzap-splitタグに従って単一のBitcoinトランザクションを複数の受信者に分配するので、オンチェーン支払いはLightningスプリットと同じように動作します。PR #2974は各決済済みzapとブロック確認ステータスを表示するページネーション付きのオンチェーントランザクション履歴画面を追加します。
グループメッセージングは1対1チャットと同等の機能を得ました: PR #2995はMarmot/MLSグループメッセージへの返信サポートを追加し、暗号化グループ内のスレッドがパブリックノートと同じ親参照UIでレンダリングされるようになりました。PR #2984はLNURLプロバイダーが受信者の表明されたlud16と一致するかチェックすることでNIP-57 zap受領書の検証を強化し、第三者のLNURLが実際には届かなかった支払いに対する受領書を発行できるという偽造クラスを封じました。PR #2968はNIP-92 imetaタグの浮動小数点次元を受け付け、iPhone Retinaディスプレイなどのデバイスから小数のピクセル密度値を公開するクライアントとAmethystを整合させます。このリリースでは、下記のプロトコルセクションで扱う新しいリプレイス可能イベントベースのマルチレールチップジャーであるPayment Targetsも配線されました。
White Noise v2026.5.22: iOSプッシュ、ブロックUX、メンバー追加
MarmotプロトコルグループメッセンジャーのWhite Noiseが、iOSプッシュ通知を目玉機能としてv2026.5.22をリリースしました。PR #673はNotification Service Extension (NSE) を実装し、Extensionプロセス内でMLSメッセージを復号してシステム通知として表示するので、iPhoneユーザーはメッセージを受信するためにアプリをフォアグラウンドにする必要がなくなりました。Androidのプッシュトークン配管は同じバックエンドパイプラインを経由し、プラットフォームごとのNSEが暗号文をブローカーから遠ざけます。
PR #676は確認フローと連絡先リストフィルタリングを備えた完全なブロック・ブロック解除UXを追加します。PR #679はグループ情報画面に長らく要望されていた「メンバー追加」ボタンを追加し、グループ管理者が共有リンクに頼らざるを得なかったUXギャップを閉じます。PR #688は専用のiOS通知設定画面を導入し、PR #687はメディアとメッセージ向けに長押し共有を配線しました。
MDKがプラットフォーム横断でNIP-40の消えるメッセージを追加
White Noise iOS、White Noise Android、および将来のあらゆるMarmotクライアントによって使用される共有Rustコアである Marmot Development Kitが、消えるメッセージ検証とNIP-40有効期限処理をUniFFIブリッジ経由で公開するPR #306をマージしました。このPRは3部作の第2弾です。iOSとAndroidは有効期限ロジックの単一のRust実装を共有するようになりました。タイミングルールは、UniFFIを介して両プラットフォームで消費される単一の監査済みコードパスに存在します。PR #307は保存されるwelcome失敗理由の長さを制限し、永続化前にサニタイズします。これは先週リリースされたwelcomeイベント処理を補完する別途の強化パスです。
MLSにおける消えるメッセージは単なるUIアフォーダンスではありません。有効期限タグは暗号化されたメッセージエンベロープとともに公開されるので、メッセージを一度も開かなかった受信者でも、受信クライアントのキャッシュコピーとともに、基礎となる暗号文がリレーレイヤーで期限切れとなります。MDKが検証パスを所有することで、クライアント間で動作の一貫性が保たれます: 準拠したMarmot実装はいずれも同じ有効期限セマンティクスを強制するので、あるクライアントが有効期限を尊重する一方で別のクライアントが永久にキャッシュするというポータビリティの危険はなくなります。
Mostro v0.17.4: Phase 3がスラッシュされたボンドのループを閉じる
Nostr上に構築されたピアツーピアBitcoin取引所プロトコルMostroが、v0.17.4でアンチ乱用ボンドロールアウトのPhase 3をリリースしました。PR #738は、スラッシュされたボンドの支払いフローを実装し、敗者の没収された担保を紛争勝者に支払います。PR #743はPhase 3.5を追加し、スラッシュされたsatsが決済されたことを勝者に知らせる明示的な支払い確認メッセージを、紛争解決と同じNostrセッションで到着する確認イベントとともに提供します。先週取り上げたPhase 2は管理者アクションとしてスラッシングを導入しました。Phase 3はペナルティを脅かすことと実際に強制することの差です。
PR #746は、以前はレガシー紛争で解決を停止していたエッジケースであるsolver行のない紛争をデーモンが最終化できるようにします。PR #748はYadioの/exrates/BTCレスポンスのnullレートを許容するので、Yadioの短期障害がMostroの法定通貨換算パスを壊すことがなくなります。PR #745はマルチソース価格プロバイダーの仕様を文書化し、Yadioを単一障害点として除去するための基礎工事です。MostroモバイルクライアントはPR #596で対応するPhase 3の請求パスを配線しました。
Applesauce v6.1.0: ルックアップリレーとNIP-34 gitキャスト
Coracle、noStrudel、Pablo F7zのスタックを支えるモジュラーNostrツールキットApplesauceが、パッケージ全体でv6.1.0をリリースしました。このリリースは第一級のNIP-51ルックアップリレーリストサポートを追加します: kind 10086イベントによりユーザーは「私を見つけたい場合はこれらのリレーに問い合わせてください」と信号を送ることができ、NIP-65 outboxリストと並ぶ発見プリミティブとなります。applesauce-core上に構築されたアプリケーションは、リアクティブなUser.lookupRelays$ observableと、applesauce-relay内の対応するローダーを取得します。
NIP-34 gitキャストファクトリがapplesauce-factoryに到着し、あらゆるApplesauceで構築されたクライアントにリポジトリアナウンス (kind 30617)、パッチ (kind 1617)、issue (kind 1621) を公開するための1行パスを提供します。User.favoriteGitRepos$、User.gitAuthors$、User.graspServers$のリアクティブプロパティにより、アプリケーションはユーザーがフォローしているリポジトリ、リポジトリメンテナー、設定されたGRASPサーバーを同じUserオブジェクトから直接リストできます。このリリースは、PR #73でオフラインのリレーを静かにドロップしていたプールの手動メソッドも修正しています。
NotedeckがギフトラップとスレッドバックフィルのNIP-77 negentropyをマージ
DamusのネイティブマルチカラムデスクトップクライアントNotedeckは5月25日、共有outboxパスに完全なNIP-77 negentropy調停を配線するPR #1459をマージしました。このPRはNIP-77のクライアントとリレーのフレーム、リレーローカルのnegentropyセッション、およびローカルセット調停と欠落イベントのフェッチを駆動するoutbox完全履歴トラッカーを追加します。メッセージのギフトラップはnegentropy調停を得るので、プライベートメッセージのエンベロープは選択されたアカウントの読み取りリレーから復元できます。スレッドビューはライブサブスクリプションの返信制限で頭打ちにならなくなりました。Dave PNSはDaveローカルのnegentropy実装を共有outboxパスに置き換えつつ、既存の境界付き履歴動作を保持します。
ライブサブスクリプションとnegentropyは別々のフィルタを使用するようになりました。フローは、リレーが既に持っているものを調停するために、より広範なnegentropyフィルタを発行しながら、小さなライブリクエストを維持できます。このPRはホームまたはプロフィールタイムラインで広範なnegentropy同期を意図的に有効にせず、それはコールドスタートコストの特性を変更してしまうためです。テストカバレッジは、調停、ギフトラップ配信、スレッドバックフィル、Dave PNS復元、アカウント切り替え、リレー再ターゲット、フェッチ再試行、NIP-77リレー動作に対して追加されました。
Vector v0.4.0: vector-coreの書き直し、Tor、NIP-46、完全negentropy MLS、MCPエージェントサーフェス
NIP-17 DMとMarmotグループを基盤としたプライバシー重視のクロスプラットフォームメッセンジャーVectorが、これまでで最大のリリースとしてv0.4.0をリリースしました。目玉はエンジンの全面書き直しです: Vectorのロジックはすべてvector-coreという単一の分離されたクレートに存在するようになり、デスクトップ、Android、および将来のあらゆるクライアント間で共有され、コア自体に440以上のテストがあり、アプリケーションシェルからは数千行が削ぎ落とされました。この書き直しは、GUIと同じプロトコルコードを駆動するVector CLI、ボット、SDKへの基礎工事です。
Tor統合は、ワンクリックのトラフィックルーティングと検閲回避のためのブリッジサポートを提供します。マルチアカウントサポートがアプリ内切り替えとともに実現しました。リモート署名者ログインはQRまたは貼り付けられたURIによるbunkerペアリングでNIP-46経由で到着し、ユーザーはnsecを一度も公開することなくログインできます。全員削除(delete-for-everyone) はNIP-17 DMとMarmotグループチャットの両方で動作し、Vectorはリリースノートが明示的に述べているように意図的な仕様の分岐として、エフェメラル署名キーを保持します: 「強化されたユーザープライバシー制御のための従来のNIP-17/Marmot仕様からの分岐」。保持されたエフェメラルキーは、削除が元の送信者によって承認されたことのローカル証明をVectorクライアントに提供しますが、他のVectorに接触するクライアントは、ベースラインのNIP-17/Marmotクライアントとは異なる削除検証可能性のサーフェスを見ることも意味します。
MLSグループ同期はNIP-77 negentropyによって完全に調停されるようになりました。これは今週Notedeckがギフトラップとスレッドに対して取った方向と同じです。Blossomアップローダーは複数のサーバーにわたってフェイルオーバーし、各サーバーの機能を学習し、デバイス間でサーバーリストを同期します。カスタム絵文字パックはユーザーが作成可能、共有可能で、他のNostrクライアントとクロス互換です。SQLiteメモリは約308MBから5MBに減少しました。絵文字パネルはディスクキャッシュから開き、Discord風のショートコード (:smile:) とUnicodeの使用頻度ランキングにより、正しいグリフを最初に表示します。
最も新しい追加はvector-agent、AIエージェントがVectorを駆動できるように21のツールを公開するMCP (Model Context Protocol) サーバーです: DM送信、グループ管理、ファイルアップロード、プロフィール編集。これは今週Shopstrに続いてMCPサーフェスを提供した2番目のNostrプロジェクトであり、そうした最初のメッセンジャークラスのアプリケーションです。先週取り上げたAgentNoiseと組み合わせて、エージェント制御のNostrクライアントというパターンは、単発の実験から意図的なプラットフォームの方向性へと移りつつあります。
Cordnがコーディネーター仲介型MLSメッセンジャーとして登場
Cordn (cordn.netのWebクライアント、リポジトリはCordn-msg/cordnとCordn-msg/cordn-web) は、Marmotとは異なるアーキテクチャ的アプローチを取る新しいMLSメッセンジャーです。Marmotは特権的なコーディネーターがない完全リレーベース(すべてのグループメンバーが直接リレーに書き込み、準拠したあらゆるリレーがそのトラフィックを運べる) であるのに対し、CordnはContextVMサービスとして実装されたグループごとのコーディネーターロールを導入します。コーディネーターはMLSコミットを順序付け、welcomeの配布を処理します。
Cordnの主張は、その/whyページで述べられているように、本番メッセンジャーで展開されているMLSは「調整不要ではない」ことと、「弱く順序付けられた公的配布」は強力な調整ポイントなしにグループ状態収束を「はるかに困難」にすることです。コーディネーター仲介型設計は、予測可能なエポックの進行と、より単純な同時コミット解決を提供します。参加者はエフェメラルキーを使用してコーディネーターに接続するので、コーディネーターはグループIDとコミットトラフィックのタイミングを学習しますが、どの長期公開鍵がメンバーであるかは知りません。Marmotグループを求めてリレーに問い合わせる任意の当事者は、既に同じサーフェス、すなわちグループIDによるグループアクティビティを、イベント到着から推測可能なタイミングとともに見ることができます。Cordnはまた、セルフホスティングでは「可用性の信頼が残る」ことを認めています: セルフホスト型コーディネーターは運用者層の中央集権化の懸念を回避しますが、グループの生存性に対する単一障害点を導入します。Marmotは順序付けをMLS自体に委ねる (エポックとCommitメッセージがプロトコル内で順序付けを処理する) ことでその単一ポイントを回避し、WelcomeイベントをNIP-59ギフトラップ経由で配布しますが、管理者側の規律を代償とします: 管理者は対応するWelcomeを送信する前にCommitのリレー確認を待たなければならず、リレー配信が状態遷移とレースする場合、クライアントは同時コミットを調停しなければなりません。
このコントラストは、プライベートメッセージングスタックを選ぶチームにとって引き延ばして考える価値があります。Marmotは、実装の複雑さの一部と、パス内に特権的なアクターのないリレー非依存のデプロイメントを交換します。Cordnは、単一ポイントの可用性依存と、より厳密な順序付けおよびよりシンプルな運用モデルを交換します。両プロジェクトともMLSを基盤とし、Nostrをアイデンティティとトランスポート層として使用します。意見の相違は、調整コストがどこに存在するかについてです。cordn-msgリポジトリは、コーディネーターサービスがContextVM上に実装され、MLS層がts-mls上に構築された、着実なコミット頻度を示しています。
deepmarks: キュレーター収益化型公開を持つNIP-B0ブックマーク
deepmarks-publicは、提案されているNIP-B0ブックマーク仕様 (kind 39701) の参照クライアントであり、3ボックスアーキテクチャ (キュレーター、インデクサー、ビューア) と、キュレーターへの直接NIP-57 zapで資金を調達するティアシステムを備えています。クライアントはNIP-B0、NIP-07、NIP-46、NIP-57、NIP-44、NIP-98、NIP-65、およびファイルストレージ用のBlossom BUD-01とBUD-04を実装しています。21,000-sat生涯ティアは、支払い読者をキュレーターの繰り返しzap受信者に変換します。キュレーターはブックマークイベントを公開し、インデクサーは機械可読メタデータでそれらを豊かにし、ビューアはフィードをレンダリングします。各ロールは別々のデプロイ可能なサービスです。
リリース
Amber v6.1.0 GA: 暗号化されたアカウントごとのバックアップ
Amberは今週v6.1.0-pre3からGAのv6.1.0に移行しました。PR #444はアプリケーション権限データベース用の暗号化されたバックアップと復元を提供し、PR #446はバックアップをアカウントごとに分割するので、複数のNostrアイデンティティを持つユーザーはアプリ許可の各セットを独立してバックアップおよび復元できます。先週取り上げたPSBT署名作業もGAカットに含まれています。
Citrine: リレーごとのサブスクリプションとオニオンURLリーク防止
Amethystに付属するデバイス上のパーソナルリレーCitrineは、このサイクルで2つの修正をリリースしました。PR #157は単一のグローバルサブスクリプションからリレーごとにタグ付けされたサブスクリプションに切り替え、kinds: [1]フィルタを共有する2つのソースリレーがアグリゲータ側で衝突しなくなりました。PR #162はアウトバウンドTorプロキシが無効化されているときにオニオンリレーURLをフィルタし、オニオンアドレスがクリアネットルーティングパスにリークするのを防ぎます。
Angor v0.2.27とv0.2.28: リレーの信頼性とBoltz再接続
Angorはv0.2.27とv0.2.28をリリースしました。PR #874は、複数のリレーエンドポイントを持つプロジェクトの信頼性を静かに低下させていた回帰、すなわち一度に1つのリレーしか接続されないというリレーの重複排除バグを修正します。PR #876はBoltzサブマリンスワップ監視のためのWebSocket再接続ロジックを追加するので、短期の切断がスワップを未知の状態のまま残すことはありません。
Nostrord v1.1.0: NIP-57 zapとNIP-29ロール区別
Nostrordはメッセージとプロフィール向けのNIP-57 Lightning zapサポート (PR #98) と、以前は同じようにレンダリングされて誰が昇格されたか対して誰が招待されたかを不明瞭にしていたアクティビティフィード内でのNIP-29ロール変更とメンバー追加の適切な区別 (PR #92) を備えたv1.1.0をリリースしました。
ぬるぬる v1.5.x: SQLCipher MLSキーストアとエポックキャッチアップ
NIP-44、NIP-50高度検索、NIP-55、NIP-70とともにMLSグループメッセージング (kind 443) を実装する日本語Nostrクライアントぬるぬる (nurunuru、tami1A84作) は今週5つのリリースを提供しました。PR #184はrust-engine層のMLSキーストア向けにSQLCipher暗号化を導入します。PR #187とPR #188はレガシー平文パージステップとCIガードとともに、SQLCipherをそれぞれAndroidとiOSに拡張します。PR #189とPR #191は、両プラットフォームでリプレイキャッシュとリカバリバナー付きのMLSピアエポックキャッチアップを追加するので、グループコミットで遅れているクライアントは会話を失うことなく回復できます。ぬるぬるはmarmot-protocol/mdkのmdk-core、mdk-sqlite-storage、mdk-storage-traits上に構築されたMarmotクライアントなので、SQLCipherとエポックキャッチアップの作業は、White Noiseが使用するのと同じMDKランタイム内に到達します。
Bitcredit Core v0.5.10: Nostrルート型ブロック伝播修正
Bitcredit Coreは、アイデンティティアップロードを含む会社作成フローを壊していたブロック伝播中に欠落していたNostrノードIDフィールドの修正を含むv0.5.10をリリースしました。Bitcreditは、会社と請求書伝播イベントの信頼のルートとしてNostrアイデンティティを使用するe-billプロトコルです。
未リリースの変更
Jumbleは、ユーザーが単一の署名者が完全な秘密を保持しないように、Nostrキーを複数の当事者に分割できるようにするPomegranateしきい値署名者経由のGoogleログインのためのPR #797を公開しました。これはbunkerまたはnsecインポートフローを超える意義のあるステップです: ユーザーは1つの署名者パーティが侵害されても、そのパーティが完全な秘密鍵を保持することなくアカウントを回復できます。
ShopstrはMCP (Model Context Protocol) サーバーを初期化するPR #492を公開し、PR #494がサポートするインフラストラクチャ (リレーフェッチ、パーサー、検証、エラー、重複排除、監査ロギング) を構築し、PR #472がMCPリレーマネージャーのリレー許可リストを追加します。これによりShopstrは、AIエージェントが構造化されたツールとしてNIP-99リスティングを閲覧し操作できるように、自身をMCPサーバーとして公開する最初のNostrマーケットプレイスとなりました。
Shamir秘密分散ボルトのKeydexは、カスタムkind 1337-1345を713-721範囲に移動する重要な移行をPR #226で公開し、Shamir共有上のAEADを追加するPR #239と、GF256算術に移行するPR #234を並行して公開しました。kind範囲の移行は、KeydexをNIPsリポジトリがカスタムkindを割り当てる方法に合わせ、自己主張範囲から離れます。
Mill (nostr-mill) は、OceanSlim (grain Goリレーのメンテナー) からの新しいドロップイン式Nostr署名者UIであり、npmとjsDelivrに単一スクリプトタグのWeb Componentとして提供されます。1つの<script>タグでWebアプリに、統一されたUIの背後に6つの一般的な署名者エントリポイントすべてを提供します: NIP-07ブラウザ拡張機能、NIP-46 bunker (URL貼り付けまたはユーザー指定可能なリレーによるQRペアリング、ページ内bunker統合の中では珍しい)、Android intent経由のNIP-55 Amber、PBKDF2付きAES-256-GCMでsessionStorageに保存された暗号化nsec、読み取り専用npub、およびブラウザ内キーペア生成。コンポーネントは、Shadow DOMにスコープされた29のCSSカスタムプロパティによってテーマ設定可能であり、小さなSemVerでトラックされたAPI (MILL.open、mill:connected / mill:disconnectedイベント、名前付きテーマエクスポート) を公開します。メンテナーの動機は、bunkerログインフローがNostr全体でWebアプリごとに1つずつ再実装されてきたことです。共有コンポーネントに集約することで、クライアントは署名者UXの動作方法に収束でき、オプションのフロー (上記で取り上げたWispのPomegranateベースのGoogleログインを反映するしきい値署名者経由の委任キーログインなど) を、任意のアプリがドロップインできる再利用可能なサーフェスに変えます。Millはnpm v1.5.0、単一メンテナー、アルファ段階で、grainが最初の統合予定です。
moStard、roguehashrateによるnoStrudelのMoneroファーストフォークは、今週削ぎ落とされた機能セットとMoneroテーマのアイデンティティを同じApplesauce + ワーカーリレースタックの上に重ねてv1.0.1に到達しました。今週の作業では、Zapstoreのkind 32267ソフトウェアアプリケーションイベントのレンダリング (タイムラインにアプリ名、アイコン、スクリーンショット、プラットフォーム、ライセンス、およびzapstore.dev/apps/<d-tag>へのローンチリンクを表示する埋め込みカード)、kind 20とkind 21経由のポール、メソッドごとのQRコード付きNIP-A3 Payment Targetsベースのチップ、ノート内のmarkdownレンダリング、外部GIFキーボード用のGIFピッカーサポート、およびAmber署名者ペアリング修正が実装されました。Moneroのフレーミングはチップフローにも拡張されます: moneroアドレス用のNIP-A3 paytoエントリは、lightningとbitcoinとともに同じUIで第一級ボタンを取得します。クライアントは単一メンテナー、アルファ段階ですが、5月27日の作業は、今週のプロトコル仕様アナウンスからNIP-A3を数日以内に出荷フォークに直接引き込むビルダーを示しています。
NIP更新とプロトコル仕様作業
カレンダーNIPスタック: Formstrチームからの4つの提案
Ix2 (@geralt-debugs) は5月17日に4つの調整されたNIP PRを公開しました。すべて同じ作者の下で既に出荷されているcalendar.formstr.app実装を参照しています。PR #2350は、汎用化された「参加者自己削除」イベントとしてkind 84を提案します: 任意のイベントのタグ付けされた参加者は、元のイベントをe、a、kタグで参照するkind 84を公開してオプトアウトを表明できます。リレーはkind 84の署名者が参照されたイベントのpタグに現れるかを検証してから削除を尊重しなければならず、kind 5削除は常に優先されます。このPRは以前はNIP-52カレンダーコンテキスト内でしか記述されていなかったパターンを汎用化するので、kind 84は非作者が任意の参加者イベントから離脱するための標準的な方法になります。
PR #2351はカレンダースタックの基礎です: プライベートカレンダーイベント用のNIP-52E (kinds 32678 時間ベース、32681 日別イベント、32123 プライベートカレンダーリスト、31926 ビジーリスト、1052 ギフトラップ、52 rumor) と繰り返しイベント用のNIP-52R。アーキテクチャの中核にはビューキーパターンがあります: ランダムに生成されたキーペアがNIP-44でイベントコンテンツを暗号化し、秘密の半分 (bech32エンコードされてnsec) が各参加者にギフトラップされます。署名者はパブリックなdタグのみを保持します。他のすべては暗号化されたcontent内に存在します。このようにコンテンツ暗号化をアイデンティティから切り離すことは、イベントの編集が受信者の再キー付けを必要としないことを意味します。NIP-52Rは、既存のkinds 31923と31922に、生のRFC 5545 RRULE値を使用して繰り返しを宣言するための2つのオプションタグを定義し、RRULEが存在するときにはD日インデックスがオプションになります。前方秘匿性は明示的に欠如しています: リークされたビューキーは同じdタグの下のイベントの過去および将来のすべてのバージョンを明らかにします。
PR #2352はNIP-52E上に構築され、PR説明が「中央仲介者のないCalendly/Cal.comへのドロップイン代替」と呼ぶ分散型アポイントメントスケジューリング仕様を追加します。kind 31927は暗号化された空き時間ウィンドウ付きのスケジューリングページを広告します。kind 32680はビューキー用のホスト側自己暗号化リカバリレコードです。kinds 1057と1058はギフトラップされた予約リクエストとレスポンスです。巧妙なメカニズム: 予約者はリクエストを送信する前に将来のプライベートイベントのdタグとビューキーの両方を生成するので、予約者は正しいキーで自分のカレンダーにアポイントメントをすぐに追加でき、ホストはキーをラウンドトリップして返す必要がありません。予約レスポンスは、リレーが復号せずにフィルタできるように、外側のラップに暗号化されていないstatusタグを持ちます。
参照実装はcalendar.formstr.appおよびZapstoreのCalendar Androidアプリとして既に稼働しています。PR #2351はPR #2027を優先して閉じ、年初から公開されていた以前のプライベートカレンダー提案を統合します。
Payment TargetsとSilent Payments
今週、kind:30023ロングフォーム文書でさらに2つのNIP提案が回覧されました。
Payment Targets提案 (NIP-A3 / payto) は、RFC 8905 payto: URIにマップされる1つ以上の["payto", "<type>", "<authority>"]タグを運ぶリプレイス可能なkind 10133イベントを定義します。サポートされるタイプには、bitcoin、lightning、ethereum、monero、nano、cashme、revolut、venmoが含まれます。意図は、lud16ベースのNIP-57 zapを補完する (置き換えるのではない) マルチレールチップジャーを標準化することです。Amethyst v1.11.0は最初の実装者です。マージされたPR #2953と#3009はサブスクリプションと観測のサーフェスを提供し、PR #3011はPaymentTargetsEventのUIを配線します。
異なる作者から2つの競合するSilent Payments提案がドロップされました。最初のバリアントは、パブリック加法チュエックを介してnsecからBIP-352 silent-payment scanおよびspendキーを導出するので、任意の送信者はnpubからセットアップなしでsp1q...アドレスを構築できます。作者の警告は仕様で明示的です: 「bscanとbspendはnsecとまったく同じ注意で扱わなければならない」、なぜならscanキーはnsecを明らかにするからです。2番目のバリアントは逆のアプローチを取り、Nostrアイデンティティから独立してキーを保つ標準BIP-352 silent-paymentアドレスを含むsp_addressフィールドをkind 0プロフィールメタデータに追加します。バリアント2は構造的により安全です。両方の提案は熟考されたレビュースレッドを引き付けました。erskingardner (Marmotリード) は提案を追跡するtrboumaのgistに詳細なコメントを投稿しました。彼の中心的な懸念は、バリアント1がscan秘密鍵をnsecと公的に計算可能なチュエックから導出することで、それはscanキーを保持する任意の当事者 (実際にはユーザーが委任しなければならない第三者のスキャニングサービスを含む) が、そのチュエックを引くことで完全なnsecを回復できることを意味します。リモートサービスがインバウンド支払いをスキャンできるようにする同じキーは、そのサービスがアイデンティティおよびそこから派生した資金を盗むことも可能にします。
NIP-34 git-over-Nostr側では、hzrd149がschemataに2つのパッチを公開しました。gitworkshop.dev自体は2つのissueレポートを引き付けました: 1つはNIP-46リモート署名者を使用しているときにログインセッションがページリフレッシュで失われることを指摘し、もう1つはREADMEプレビューでの区別のあるリンクスタイリングを要求しています。
Nostrの6つの5月
2026年5月最後のニュースレターは、今週のリリースから一歩下がって、Nostrの歴史上の5月を見て歩きます。各年は異なる重心を持っていました: 2021年は単一のコミット、2022年はNIPsリポジトリ自体の形成、2023年はプロトコル仕様の爆発、2024年は集約サイクル、2025年はnegentropyがマージされDamusのNotedeckがベータに昇格した月、そして2026年は本号と前3号がカバーする月です。
2021年5月
Nostrは6か月齢でした。Nostrのコードはfiatjaf/nostrにしか存在せず、月全体で正確に1つのコミットしか生成しませんでしたが、そのコミットはプロトコルで最も使われる部分の1つになりました。5月22日、fiatjafはNIP-02を再目的化して連絡先リストNIPにしました。コミットメッセージには「NIP-02を再目的化し、NIP著者表示を追加」とあり、明示的なクレジットは2月9日に公開され、fiatjafがそのアイデアをNIP-02にまとめた前日に閉じられたarcbtc (LNbitsのBen Arc) によるPR #16に対してです。arcbtcの提案は小さなものでした: 「アカウントの復元と公開鍵を推薦するために有用な」「フォロワーリストをリレーに送信する」ためのkindです。fiatjafはそれを、3つの目的を同時に果たすタグを持つ単一のkind:3イベントに一般化しました。それらはフォローリスト (ソーシャルグラフ)、petnameストア (友人向けのローカルニックネーム)、リレー推薦ソース (フォロー先が使うリレー) です。同じイベント、著者ごとにリプレイス可能で、「この人は誰をフォローしているのか」「彼らを何と呼んでいるのか」「どこで読んでいるのか」への正典的な回答となりました。次の5年間で構築されたすべてのクライアントはkind:3を読みます。同じコミットで追加された、各NIPがその著者を名指すという慣習は、すべての仕様が今バイラインを持つ理由です。
2022年5月
NIPsリポジトリがコミュニティプロジェクトになった月。5月1日、fiatjafは仕様をfiatjaf/nostrから専用のnostr-protocol/nipsリポジトリへ移行し、5月2日には正式な承認基準を追加しました。2日後、Robert C. Martin (Uncle Bob) は最初の外部プルリクエストPR #1を公開し、eとpタグのスレッディング慣習を提案しました。このPRは元々NIP-13と番号付けられ、その後proof-of-workのために場所を空けるためNIP-10に改名されました。最初の6つのNIPのうち3つはUncle Bobのものです: NIP-10 (スレッディングマーカー)、NIP-14 (Subjectタグ)、およびkind:1を正典的な短文ノートkindとして確定した5月21日のコミット。5月5日、William Casarinは最初のNIPコミットを行いました: NIP-13 Proof of Workとkind:2 recommend-relayイベント。翌日、fiatjafはNIP-07 window.nostrを公開し、20行のmarkdownが今日でも使われているブラウザ拡張機能署名者インターフェースを定義しました。David A. HardingによるNIP-05のCORS警告とNIP-01のfilter.limitは同じ週に到着しました。nostr-toolsは5月8日に最初のブラウザインポート可能なESMビルドをリリースしました。Semisolは月末にNIP-15 (End Of Stored Events)とNIP-16 (イベントkind範囲)を起草しました。これらは今でもリレーの動作を支配する文書です。
2023年5月
プロトコル仕様の爆発。その月に64のNIP PRが公開され、Nostrの次の2年間のサーフェスエリアを定義した提案のいくつかがすべて31日以内に到着し、Nostrがこれまで受けた最大の資金調達アナウンスは、Jack Dorseyの#startsmallからのOpenSats $1000万助成金として5月4日に到着し、それ以来のあらゆるNostr助成金の波を支えた資金となりました。NIP-47 (Nostr Wallet Connect) は5月2日にマージされ、Albyのwallet-connect仕様をメインプロトコルに取り込みました。2日後、Vitor Pamplonaはkind:30311ルームとkind:1311チャットメッセージを備えたNIP-53 Live Activitiesを提案しました。これは、続くすべてのNostrライブストリーミングサーフェスの基礎となりました。Pablo Fernandezは5月5日にNIP-84 Highlightsを、5月14日にNIP-89 Recommended Application Handlersを公開しました。v0l (Snort著者のKieran Babich) は5月8日にNIP-98 HTTP Authを提案しました。これはNIP-96とBlossomの両方が後に依存した認証プリミティブです。Jonathan Staabは5月15日にNIP-32 Labelsを提案し、同日NIP-30 Custom Emojiがマージされました。Arthur Francaは5月21日にNIP-96 HTTP File Storage Integrationを提案しました。2日後、VitorはNIP-57にzapスプリットを追加し、verbirichaはNIP-23にkind:30024ロングフォームドラフトを追加しました。これはHabla、YakiHonne、Highlighterでの現代的なNostrロングフォームオーサリングワークフローの基礎となる仕様です。fiatjafは5月28日にNIP-29 Simple Groupsを提案しました。これはkind:9000からkind:9020のモデレーションイベントをカバーする最初のリレー管理型グループ仕様です。月は5月31日にPaul MillerがNIP-44の対話を公開して閉じました。これはNIP-04を置き換えることを意図したXChaCha20ベースの暗号化DM設計です。クライアント側も同じくらい速く動きました: Damusは5月10日から5月15日にかけてNWC、zap poolとPending Zapsをリリースし、Snortはzap poolとL402ペイウォールされたメディアをローンチし、Amethystはその月に約30のバージョン付きリリースを、5月1日のv0.40.1から月末のv0.55.x範囲まで、v0.45.0でのzapスプリットとv0.46.0でのNIP-32ラベルを含めて出荷しました。Primal Androidリポジトリは5月16日に作成されました。rust-nostr v0.22.0はNIP-47とNIP-58を追加しました。5月1日、strfryはnegentropy統合を出荷しました。これは後にNIP-77となるDoug Hoyteのセットレコンシリエーションプロトコルの最初のリレー実装です。月はForbesが5月30日にfiatjafの長編プロフィールを発表して閉じました。これはNostrの匿名の創設者に関する最初の主要メディアのディープダイブの1つです。
2024年5月
集約サイクル。派手な提案は少なく、より多くの出荷。NIP-54 Decentralized Wikisは5月2日にkind:30818記事とケース正規化されたdタグとともにマージされました。3日後、NIP-56は、乱用レポートがコンテンツのみのカテゴリと並んでデジタル脅威 (マルウェア、フィッシング) をフラグ付けできるように拡張されました。5月6日、NIP-25リアクションは簡素化され、返信スレッド全体をeタグとして含めることを停止しました。Arthur Francaは5月12日にNIP-22 Commentを提案し、非kind:1イベント (記事、ファイル、製品) への返信が構造化された方法でスレッド化されるようにkind:1111を導入しました。5月19日、fiatjafはNIP-46を全面刷新してNIP-04を完全に放棄し、すべてのbunkerトラフィックをNIP-44暗号化に切り替えました。これはそれ以来すべてのbunker実装を形作った非推奨化の動きです。5月20日、NIP-71 Video Eventsはkind:21とkind:22とともにマージされ、NIP-10はeタグにオプションのpubkey引数を追加したので、クライアントは参照されたイベントを最初にフェッチせずにスレッド著者を解決できるようになりました。Kieran WalshのNIP-35 Torrentsは5月22日にマージされ、5月24日にNIPs READMEはCIP-01を最初にリポ外提案として参照し、「NIPは複数の提案の場の1つ」というパターンの始まりを合図しました。5月25日、クリーンアップPRは、下流実装が凍結する前にNIP-71からaes-256-gcmタグを削除しました。NIP-96は5月27日にlist filesを追加し変換要件をドロップしました。5月28日、Jonathan StaabはNIP承認基準を引き上げることを提案し、ドラフトが卒業する前に少なくとも2つの相互運用実装を要求しました。クライアント側: Damusは5月9日~10日にv1.7.2とv1.8、および完全なNIP-10マーカー処理を伴うv1.9をタグ付けし、プッシュ通知にNIP-98認証を実装し、完全なNIP-10マーカーサポートを提供しました。Amethystは5月14日にNIP-17をデフォルトのDMモードにし、NIP-65 outboxモデルのリレー管理を構築し、NIP-96サーバー選択を追加し、NIP-06 BIP-32/BIP-39キー導出を提供しました。Primal Android 0.99.2は5月10日にユーザータグ付けと外部ウォレットNWCを追加し、0.99.4が続きました。Pablo Fernandezは5月24日~31日にかけてNDK楽観的更新クラスタを実現しました。SnortはNIP-96サーバー選択を追加し、cashu-tsは暗号プリミティブを@cashu/cryptoに分離しました。
2025年5月
NIP-77 (Negentropy Syncing)が5月27日にマージされた月です。fiatjafとDoug Hoyteによる、ブルートフォースREQフィルタを対数コストの差分計算に置き換えるワイヤプロトコルの仕様です。これはstrfryが2年前にリレー側機能として出荷したのと同じnegentropyであり、今やクライアント・リレープロトコルとして正式化され、README エントリは同日到着しました。前の週、NIP-23ロングフォームは5月24日にHTML文書が<link>タグを通じてNostrエンティティと関連付けられる方法を定義しました。これは正典的なWebコピープリミティブです。NIP-25は5月22日にリアクションターゲットのリレーヒントを追加し、絵文字-to-like/dislikeの推奨をドロップし、絵文字を明確な意味の単位として扱うようにしました。NIP-52は5月14日に、クライアントが本番で出荷していたkindに焦点を当てるために簡素化されました。この削減により、1年後のFormstrカレンダー拡張機能がよりクリーンに接ぎ木されました。5月9日、Follow Packs (kind 39089キュレーションされたフォローリスト) とFavorite Relays (NIP-51の下の新しいリプレイス可能リスト) が同じ日にREADMEに入りました。Marmotプロトコルの弧はまだ始まっていませんでした: whitenoise-rsリポジトリのみが存在し (最初のコミットは2024年9月9日)、2025年5月はそのSvelte+Tauriプロトタイプフェーズであり、5月14日のコミットはプロジェクトが現在のアーキテクチャに転換する際にTauri固有のコードを削除しました。専用のMDK Rustコア (2025年9月12日)、Marmot仕様リポジトリ (2025年9月19日)、Flutter UI (2025年12月2日) はすべてその年の後半に来ました。クライアント側では、DamusのNotedeck v0.4.0が5月5日に最初のベータとしてリリースされ、全文検索、Dave AIアシスタント、NWC経由のzap、GIF、ユーザータグ付け、ミュートリストとともにアルファから卒業しました。2日後、hodlbodのFlotilla 1.0.0がNIP-29ベースのグループチャットクライアントとして公開ローンチ境界を越え、Coracle 0.6.12がそれに続きました。これは5月14日の0.6.17まで続いた6つのCoracleリリースの最初でした。5月12日のAmber v3.4.0は非推奨のAndroid AutofillとClipboardManager APIから移行し、暗号化された共有プリファレンスからDataStoreに移行しました。5月20日のPrimal Android 2.2.20はPrimal Premium用のRedeem Codeフローと再設計された画像ギャラリーを追加しました。5月21日のnak v0.14.0はCoracle、Flotilla、Notedeckリリースと同じ週にキャノニカルCLIのマイナーをカットしました。OpenSatsは5月22日にReynolds Foundationが200万ドルを提供したときに、Bitcoin財務以外の最大寄付金を受け取りました。
2026年5月
ニュースレター #21、#22、#23、および本号でカバーした月です。定義するスレッドは、MLS-on-Nostrがマルチクライアント本番に達したことです: MDK 0.8.0はMIP-05リーフインデックスプリミティブとアドレス可能キーパッケージを出荷し、その後PR #306が共有UniFFIサーフェスを通じてiOSとAndroid横断でNIP-40消えるメッセージ検証を追加しました。White Noise v2026.5.22+25は、Extensionプロセス内でMLS暗号文を復号するので、ブローカーは決して平文を見ないNotification Service Extensionを通じてiOSプッシュを出荷しました。そして2つの新しいMarmotクライアントが登場: Scramble (マルチデバイスKeyPackageスロットを持つ.NET/AvaloniaデスクトップとAndroidクライアント) とCordn (ContextVM上のグループごとのコーディネーターを使用する代替MLSアーキテクチャ)。AngorはPR #860で暗号化メッセージングをNIP-04からNIP-44に移行し、2023年5月のPaul MillerのNIP-44提案で開いた非推奨化の弧を閉じました。Formstrチームは5月17日に、参加者自己削除のPR #2350、プライベートカレンダーイベントと繰り返しのPR #2351 (NIP-52EとNIP-52R)、および分散型アポイントメントスケジューリングのPR #2352とともに、最近の記憶の中で最大の調整されたNIP提出を公開しました。すべてcalendar.formstr.appが既に参照実装を出荷している状態です。Amethyst v1.11.0はNIP-52カレンダーを第一級タイムラインカテゴリとしてレンダリングし、オンチェーンBitcoin zapをスプリット分配に拡張しました。NIP-77が2025年5月にマージされてから1年後、同じウィンドウで3つの独立した実装がnegentropy採用を出荷しました: Notedeck PR #1459はギフトラップとスレッドバックフィルのためにDamusのデスクトップクライアントに配線しました。Vector v0.4.0はワンクリックTorと21ツールMCPエージェントサーフェスと並んで、その全面vector-core書き直しの一部として完全negentropy MLS同期を使用しました。そしてCitrine v3.0.0-pre1は組み込みTorとマルチリレー集約と並んでAndroidネイティブリレーにそれを追加しました。Mostro v0.17.4はPR #738でPhase 3のスラッシュされたボンドの支払いにより、アンチ乱用ボンドループを閉じ、以前は脅かしていただけのものを強制しました。「NIP-04を置き換えるべきか」から「NIP-44を完全MLSグループ状態で置き換えるべきか」までの3年間。
Nostrで議論したい場合は、DMをお送りください。