A large protocol and tooling release: ten new NIPs, a new NostrConnect library for remote signing, a spec-compliance fix to NIP-44 encryption, and expanded test coverage.
Added
- NIP-13 Proof of Work — difficulty, commitment-aware validation, and cooperative mining.
- NIP-21
nostr:URIs — bidirectional conversion for NIP-19 entities (nsec rejected). - NIP-23 Long-form content — kind 30023 articles / 30024 drafts with
naddraddressing. - NIP-27 Content references — parse
nostr:mentions and map them top/q/atags. - NIP-45 Event counts (
COUNT) at the connection, pool, and client levels. - NIP-46 Nostr Connect — a new
NostrConnectlibrary: theRemoteSigneractor,bunker://andnostrconnect://flows,auth_urlchallenges, and typed commands. - NIP-49 Private key encryption —
EncryptedPrivateKey(ncryptsec) via scrypt + XChaCha20-Poly1305. - NIP-50 Search — a
searchfield onFilter. - NIP-51 Lists — standard lists (mute/pin/bookmarks) and parameterized sets, with NIP-44-encrypted private items.
- NIP-56 Reporting (kind 1984).
NostrSigningprotocol unifying localEventSignerand remoteRemoteSigner;NostrClientaccepts either for signing, publishing, and NIP-42 auth.
Fixed
- NIP-44 encryption is now spec-compliant and interoperable — it previously used the AEAD ChaCha20 keystream (block counter 1) and a floating-point padding calculation, so payloads did not match other Nostr clients. Now bare ChaCha20 at counter 0 with the spec's integer padding, validated against the official vectors. Payloads from earlier releases will not decrypt, but they never interoperated.
- Relay hardening: graceful WebSocket close-code fallback, and observable NIP-42 auth-responder failures.
Changed
ClientMessage,RelayMessage, andNostrErrorgain new cases — additive, but a source break for exhaustive switches.
Requirements
Swift 6.3+ · iOS 17 / macOS 14 / tvOS 17 / watchOS 10 / visionOS 1
See the full changelog.