Feature coverage, without hiding the gates.
Follow implementation across every language, then separate code completeness from interoperability evidence and release readiness.
Evidence snapshot
Reviewed 2026-07-26
- android
- a5edacccee3d
- ios
- 693a50ad0a0e
- relay
- a8e968c27d3f
- nips
- db5fe3de8c5d
Showing 38 of 38 capabilities
identity
2identity.localImport, public-key derivation, retained authority, redaction, and explicit erasure
implementation · completeinterop · completerelease · supported
- Rust
- complete
- Kotlin
- complete
- Android
- complete
- Swift
- complete
- TypeScript
- complete
Evidence and required tests
- Android crypto identity
- iOS Keypair and Keychain
- NIP-01 keys
- valid and invalid key import
- caller buffer ownership
- redaction
- idempotent erasure
- use after erasure
- concurrent access
identity.external-signerHost, hardware, browser-extension, or remote signing and ECDH capabilities
implementation · partialinterop · pendingrelease · gated
- Rust
- complete
- Kotlin
- partial
- Android
- partial
- Swift
- partial
- TypeScript
- partial
Evidence and required tests
- Android and iOS local key owners
- browser external signer use cases
- sign-only capability
- ECDH-only capability
- cancellation
- provider rejection
- no private-key export
nostr
3nostr.nip01.receiveBounded signed-event parsing, exact raw tags, ID recomputation, signature verification, and canonical JSON
implementation · completeinterop · completerelease · supported
- Rust
- complete
- Kotlin
- complete
- Android
- complete
- Swift
- complete
- TypeScript
- complete
Evidence and required tests
- NIP-01
- Softrelay signed-event validation
- shared signed-event fixture
- valid external fixture
- unknown and trailing tag fields
- tampered ID
- tampered signature
- kind and timestamp bounds
- event size bound
nostr.nip01.authorExplicit event drafts and signing without hidden clocks or tag normalization
implementation · completeinterop · completerelease · supported
- Rust
- complete
- Kotlin
- complete
- Android
- complete
- Swift
- complete
- TypeScript
- complete
Evidence and required tests
- NIP-01
- Android signedEvent
- iOS signedEvent
- explicit timestamp
- exact raw tags
- deterministic event ID
- signature verification
- oversized draft rejection
- complex language example
nostr.nip19Bech32 keys, event identifiers, profiles, and relay hints used by Softchat
implementation · completeinterop · pendingrelease · gated
- Rust
- complete
- Kotlin
- complete
- Android
- complete
- Swift
- complete
- TypeScript
- complete
Evidence and required tests
- NIP-19
- Android identifiers
- iOS identifiers
- official vectors
- round trips
- mixed-case rejection
- unknown TLV retention policy
- resource bounds
crypto
1crypto.nip44-v2NIP-44 v2 encryption and authenticated decryption with a bounded Softchat profile
implementation · completeinterop · completerelease · supported
- Rust
- complete
- Kotlin
- complete
- Android
- complete
- Swift
- complete
- TypeScript
- complete
Evidence and required tests
- NIP-44
- nostr 0.44.2
- nip44 0.3.0
- official vector corpus
- independent extended-prefix fixture
- Android NIP-44
- iOS NIP-44
- official valid vectors
- official invalid vectors
- Unicode
- wrong recipient
- tampering
- old and extended length prefixes
- product allocation limits
messaging
12nostr.nip59.durableRumor, signed seal, one-time durable gift wrap, recipient routing, and private timestamps
implementation · completeinterop · pendingrelease · gated
- Rust
- complete
- Kotlin
- complete
- Android
- complete
- Swift
- complete
- TypeScript
- complete
Evidence and required tests
- NIP-59
- official NIP-59 example
- Android giftWrappedEvent
- iOS NostrGiftWrapEvent
- Softrelay gift-wrap routing
- accepted private-envelope profile
- official example
- fresh wrapper key
- independent past timestamps
- exactly one recipient tag
- empty seal tags
- outer and seal signatures
- rumor ID
- author binding
- wrong recipient
- tampering
nostr.nip59.ephemeralEphemeral kind 21059 wrapping with non-persistent relay behavior
implementation · completeinterop · pendingrelease · gated
- Rust
- complete
- Kotlin
- complete
- Android
- complete
- Swift
- complete
- TypeScript
- complete
Evidence and required tests
- NIP-59
- Android typing wrappers
- iOS ephemeral wrappers
- Softrelay ephemeral integration test
- wrap and unwrap
- kind enforcement
- relay non-persistence
- recipient authorization
- silent-notification policy
messaging.nip17.messagePrivate kind 14 one-to-one and group chat text with canonical reply and sender-copy behavior
implementation · completeinterop · pendingrelease · gated
- Rust
- complete
- Kotlin
- complete
- Android
- complete
- Swift
- complete
- TypeScript
- complete
Evidence and required tests
- NIP-17
- official NIP-17 sender and recipient copies
- Android DirectMessage.Message
- iOS NostrChatMessageEvent
- accepted minimum NIP-17 text profile
- one-to-one send and receive
- group recipient copies
- sender copy
- reply tag
- relay-hint handling
- unknown tags
- released-client interoperability
messaging.subjectSoftchat group subject and optional icon profile
implementation · completeinterop · pendingrelease · gated
- Rust
- complete
- Kotlin
- complete
- Android
- complete
- Swift
- complete
- TypeScript
- complete
Evidence and required tests
- Android DirectMessage.Subject
- iOS chat subject and image tags
- accepted Softchat event profile
- released Android and iOS event-shape fixtures
- subject text
- custom emoji
- icon metadata
- empty subject
- cross-client fixture
messaging.reply-forwardReplies and Softchat forwarding/repost metadata
implementation · completeinterop · pendingrelease · gated
- Rust
- complete
- Kotlin
- complete
- Android
- complete
- Swift
- complete
- TypeScript
- complete
Evidence and required tests
- Android parent and ForwardFrom tags
- iOS reply and repost tags
- accepted Softchat event profile
- released Android and iOS event-shape fixtures
- reply
- forward
- relay hint
- missing optional fields
- unknown extension fields
- cross-client tag order
messaging.generic-repostNIP-18 kind 16 generic repost compatibility distinct from Softchat q-tag forwarding
implementation · completeinterop · pendingrelease · gated
- Rust
- complete
- Kotlin
- complete
- Android
- complete
- Swift
- complete
- TypeScript
- complete
Evidence and required tests
- NIP-18
- iOS NostrGenericRepostEvent
- Android uses q-tag forwarding and has no kind 16 model
- accepted receive-only Softchat event profile
- released iOS event-shape fixture
- embedded event
- e p and k references
- relay hint
- malformed embedded event
- unknown tags
- iOS fixture
- Android compatibility policy
messaging.reactionNIP-25 text and custom-emoji reactions
implementation · completeinterop · pendingrelease · gated
- Rust
- complete
- Kotlin
- complete
- Android
- complete
- Swift
- complete
- TypeScript
- complete
Evidence and required tests
- NIP-25
- Android Reaction
- iOS NostrReactionEvent
- Unicode emoji
- custom emoji tag
- e p and k references
- invalid parent
- released-client interoperability
messaging.deleteNIP-09 deletion requests and Softchat author/recipient rules
implementation · completeinterop · pendingrelease · gated
- Rust
- complete
- Kotlin
- complete
- Android
- complete
- Swift
- complete
- TypeScript
- complete
Evidence and required tests
- NIP-09
- Android EventDeletionRequest
- iOS NostrDeletionRequestEvent
- author deletion
- unauthorized deletion
- multiple references
- gift-wrapped deletion
- projection behavior
messaging.editSoftchat kind 1010 updated-content profile
implementation · completeinterop · pendingrelease · gated
- Rust
- complete
- Kotlin
- complete
- Android
- complete
- Swift
- complete
- TypeScript
- complete
Evidence and required tests
- Android Edit
- iOS NostrUpdatedContentEvent
- accepted Softchat event profile
- released Android and iOS event-shape fixtures
- author-only edit
- parent reference
- emoji retention
- attachment retention
- delete interaction
- latest-edit projection
messaging.typingSoftchat kind 21234 typing rumors in ephemeral gift wraps
implementation · completeinterop · pendingrelease · gated
- Rust
- complete
- Kotlin
- complete
- Android
- complete
- Swift
- complete
- TypeScript
- complete
Evidence and required tests
- Android IsTyping
- iOS NostrTypingEvent
- Softrelay ephemeral route
- participant tags
- ephemeral wrapper
- no persistence
- expiry at projection layer
- no alert
messaging.metadataSoftchat user metadata payload and encrypted distribution policy
implementation · completeinterop · pendingrelease · gated
- Rust
- complete
- Kotlin
- complete
- Android
- complete
- Swift
- complete
- TypeScript
- complete
Evidence and required tests
- NIP-01 metadata
- Android UserMetadata
- iOS NostrUserMetadataEvent
- accepted private metadata profile
- released Android event-shape fixture
- known fields
- unknown fields
- invalid URLs
- empty metadata
- encrypted recipient copies
- replacement ordering
messaging.follow-listNIP-02 kind 3 follow-list and local-name profile used for contacts
implementation · completeinterop · pendingrelease · gated
- Rust
- complete
- Kotlin
- complete
- Android
- complete
- Swift
- complete
- TypeScript
- complete
Evidence and required tests
- NIP-02
- iOS NostrFollowListEvent and ChatService
- Android has no kind 3 event model
- accepted private contact-backup profile
- released iOS event-shape fixture
- p-tag public key
- relay hint
- local name
- trailing empty fields
- replaceable ordering
- duplicate contacts
- iOS fixture
- Android product behavior
sync
5messaging.app-dataNIP-78 kind 30078 application data
implementation · completeinterop · pendingrelease · gated
- Rust
- complete
- Kotlin
- complete
- Android
- complete
- Swift
- complete
- TypeScript
- complete
Evidence and required tests
- NIP-78
- Android ApplicationSpecificData
- iOS customAppData
- d-tag identity
- replacement ordering
- encryption policy
- unknown payload versions
- cross-client fixture
messaging.app-data-syncSoftchat kind 30079 cross-device application-data synchronization
implementation · completeinterop · pendingrelease · gated
- Rust
- complete
- Kotlin
- complete
- Android
- complete
- Swift
- complete
- TypeScript
- complete
Evidence and required tests
- iOS appDataSync
- Softrelay app-data-sync integration test
- Android has no named kind
- accepted direct self-encrypted profile
- released iOS and Softrelay fixtures
- device authorization
- replaceable identity
- conflict ordering
- relay author scope
- Android interoperability
sync.negentropyNIP-77 set reconciliation and Softchat relay orchestration
implementation · completeinterop · pendingrelease · gated
- Rust
- complete
- Kotlin
- complete
- Android
- complete
- Swift
- complete
- TypeScript
- complete
Evidence and required tests
- NIP-77
- Android Negentropy
- iOS Negentropy
- softrelay-negentropy
- independent binary vectors
- empty and identical sets
- differences both ways
- frame limit
- NEG-ERR
- cancellation
- relay interoperability
sync.deliveryDurable outbox, per-event acknowledgement, retry, recovery, and honest delivery state
implementation · platform-ownedinterop · pendingrelease · gated
- Rust
- complete
- Kotlin
- platform-owned
- Android
- platform-owned
- Swift
- platform-owned
- TypeScript
- platform-owned
Evidence and required tests
- Android Outbox and Room
- iOS OutgoingEventQueue and GRDB
- persist before send
- crash recovery
- partial batch
- retry classification
- duplicate acknowledgement
- account switch
- offline restart
sync.persistenceAuthoritative platform persistence adapter and bounded Rust projections
implementation · platform-ownedinterop · pendingrelease · gated
- Rust
- complete
- Kotlin
- platform-owned
- Android
- platform-owned
- Swift
- platform-owned
- TypeScript
- platform-owned
Evidence and required tests
- Android Room stores
- iOS GRDB stores
- transactional batch
- idempotent ingestion
- invalid-event quarantine
- schema migration
- account isolation
- large history
wire
5relay.framesStrict client and relay messages for EVENT, REQ, CLOSE, OK, EOSE, CLOSED, NOTICE, AUTH, and COUNT
implementation · completeinterop · pendingrelease · gated
- Rust
- complete
- Kotlin
- complete
- Android
- complete
- Swift
- complete
- TypeScript
- complete
Evidence and required tests
- NIP-01
- NIP-42
- NIP-45
- Android relay messages
- iOS relay messages
- Softrelay codecs
- every frame shape
- trailing item rejection
- malformed JSON
- size bounds
- unknown command policy
- round trips
relay.filtersNIP-01 filters with exact prefix, time, limit, and generic tag semantics
implementation · completeinterop · pendingrelease · gated
- Rust
- complete
- Kotlin
- complete
- Android
- complete
- Swift
- complete
- TypeScript
- complete
Evidence and required tests
- NIP-01
- Android RelayFilter
- iOS filters
- Softrelay filters
- ids and authors
- kinds
- since and until
- limit
- generic tags
- duplicate fields
- relay conformance
relay.nip42Challenge-bound NIP-42 authentication event plans and validation
implementation · completeinterop · pendingrelease · gated
- Rust
- complete
- Kotlin
- complete
- Android
- complete
- Swift
- complete
- TypeScript
- complete
Evidence and required tests
- NIP-42
- Android auth flow
- iOS auth flow
- Softrelay mandatory auth policy
- challenge tag
- relay tag
- timestamp window
- wrong relay
- replay
- accepted and rejected OK
- production relay interoperability
relay.batch-eventsSoftchat EVENTS batch command with one acknowledgement per event
implementation · completeinterop · pendingrelease · gated
- Rust
- complete
- Kotlin
- complete
- Android
- complete
- Swift
- complete
- TypeScript
- complete
Evidence and required tests
- Android EVENTS sender
- iOS EVENTS sender
- Softrelay EVENTS handler
- accepted relay-batch profile
- empty batch
- mixed accepted and rejected
- duplicate IDs
- out-of-order OK
- partial disconnect
- retry classification
relay.sessionSubscription, query, publish, backpressure, reconnect, timeout, status, and cancellation state
implementation · completeinterop · pendingrelease · gated
- Rust
- complete
- Kotlin
- complete
- Android
- complete
- Swift
- complete
- TypeScript
- complete
Evidence and required tests
- Android RelaySession
- iOS actor NostrClient
- Softrelay integration client
- connect and auth
- subscribe and EOSE
- publish and OK
- close
- reconnect
- cancellation
- bounded queues
- slow consumer
noise
1wire.noiseDeployed wss+noise profile, handshake, negotiation, chunking, rekeying, and bounded sessions
implementation · completeinterop · pendingrelease · gated
- Rust
- complete
- Kotlin
- complete
- Android
- complete
- Swift
- complete
- TypeScript
- complete
Evidence and required tests
- Android Noise client
- iOS Noise client
- softrelay-noise
- Softrelay interoperability tests
- independent handshake vectors
- client and relay interoperability
- bad key and PSK
- bidirectional chunking
- 512 KiB bound
- nonce exhaustion
- rekey
- shutdown
media
4media.metadataSoftchat image, imeta, emoji, dimensions, hashes, and attachment-reference profile
implementation · completeinterop · pendingrelease · gated
- Rust
- complete
- Kotlin
- complete
- Android
- complete
- Swift
- complete
- TypeScript
- complete
Evidence and required tests
- NIP-94
- Android NostrFileMetadata
- iOS media attachment types
- accepted Softchat imeta profile
- released Android and iOS event-shape fixtures
- image
- video
- audio and waveform
- unknown metadata
- dimensions
- hashes
- URLs
- cross-client fixtures
media.cryptoStreaming attachment encryption, decryption, hashing, and bounded staging
implementation · completeinterop · pendingrelease · gated
- Rust
- complete
- Kotlin
- complete
- Android
- complete
- Swift
- complete
- TypeScript
- complete
Evidence and required tests
- Android attachment crypto
- iOS attachment crypto
- Softrelay file API
- independent vectors
- empty and boundary sizes
- streaming chunks
- tampering
- wrong key
- atomic destination
- cancellation
- memory bound
media.nip98NIP-98 authorization event and immutable HTTP request plan
implementation · completeinterop · pendingrelease · gated
- Rust
- complete
- Kotlin
- complete
- Android
- complete
- Swift
- complete
- TypeScript
- complete
Evidence and required tests
- NIP-98
- Android NostrFileService
- iOS NostrHTTPAuthEvent
- Softrelay HTTP auth
- method and URL
- payload hash
- timestamp
- signature
- header encoding
- redirect policy
- server interoperability
media.http-executionUploads, downloads, progress, resumability, files, and background lifecycle
implementation · platform-ownedinterop · pendingrelease · gated
- Rust
- complete
- Kotlin
- platform-owned
- Android
- platform-owned
- Swift
- platform-owned
- TypeScript
- platform-owned
Evidence and required tests
- Android Ktor Okio and WorkManager
- iOS URLSession background transfer
- browser fetch
- request-plan integration
- background relaunch
- resume
- progress
- cancellation
- temporary-file cleanup
- network policy
- large file
observability
1observability.redactedStable redacted errors, counters, state transitions, and build fingerprints
implementation · completeinterop · pendingrelease · gated
- Rust
- complete
- Kotlin
- complete
- Android
- complete
- Swift
- complete
- TypeScript
- complete
Evidence and required tests
- current stable errors
- Android logging
- iOS logging
- Softrelay metrics
- no secret plaintext or ciphertext
- stable codes
- safe byte counts
- build fingerprint
- unknown internal failure
- symbolicated native crash
distribution
4distribution.rustVersioned Rust crate with rustdoc, provenance, changelog, and compatibility policy
implementation · completeinterop · pendingrelease · gated
- Rust
- complete
- Kotlin
- not-applicable
- Android
- not-applicable
- Swift
- not-applicable
- TypeScript
- not-applicable
Evidence and required tests
- Cargo crate
- cargo doc
- cargo package
- public API docs
- minimum Rust version
- dependency audit
- consumer example
distribution.kotlinAndroid AAR and JVM artifact with Dokka, sources, ABIs, symbols, and consumer verification
implementation · completeinterop · pendingrelease · gated
- Rust
- not-applicable
- Kotlin
- complete
- Android
- complete
- Swift
- not-applicable
- TypeScript
- not-applicable
Evidence and required tests
- packed JVM consumer
- multi-ABI Android AAR
- physical Android benchmark consumer
- external JVM consumer
- Android emulator and device
- arm64 and x86_64
- 16 KiB pages
- R8 release
- Dokka
- source and native symbols
distribution.swiftXCFramework and Swift Package with DocC, symbols, checksums, and app-extension verification
implementation · completeinterop · pendingrelease · gated
- Rust
- not-applicable
- Kotlin
- not-applicable
- Android
- not-applicable
- Swift
- complete
- TypeScript
- not-applicable
Evidence and required tests
- SoftchatKit facade
- packed XCFramework and SwiftPM consumer
- external SwiftPM consumer
- device and simulator
- main app and extensions
- archive
- module stability
- DocC
- dSYM
distribution.javascriptnpm package for browser, Worker, Node ESM/CommonJS, Wasm, TypeDoc, and source maps
implementation · completeinterop · pendingrelease · gated
- Rust
- not-applicable
- Kotlin
- not-applicable
- Android
- not-applicable
- Swift
- not-applicable
- TypeScript
- complete
Evidence and required tests
- packed Node CommonJS/ESM, browser, and Worker consumers
- npm pack
- external Node consumers
- browser bundlers
- Worker
- CSP
- single Wasm instance
- TypeDoc
- source maps