Skip to main content
Executable capability ledger

Feature coverage, without hiding the gates.

Follow implementation across every language, then separate code completeness from interoperability evidence and release readiness.

38tracked capabilities
34complete implementations
4interop evidence complete
4release-supported
Evidence snapshot

Reviewed 2026-07-26

android
a5edacccee3d
ios
693a50ad0a0e
relay
a8e968c27d3f
nips
db5fe3de8c5d

Showing 38 of 38 capabilities

identity

2
identity.local

Import, public-key derivation, retained authority, redaction, and explicit erasure

rust-core
implementation · completeinterop · completerelease · supported
Rust
complete
Kotlin
complete
Android
complete
Swift
complete
TypeScript
complete
Evidence and required tests
Evidence
  • Android crypto identity
  • iOS Keypair and Keychain
  • NIP-01 keys
Required tests
  • valid and invalid key import
  • caller buffer ownership
  • redaction
  • idempotent erasure
  • use after erasure
  • concurrent access
identity.external-signer

Host, hardware, browser-extension, or remote signing and ECDH capabilities

shared-boundary
implementation · partialinterop · pendingrelease · gated
Rust
complete
Kotlin
partial
Android
partial
Swift
partial
TypeScript
partial
Evidence and required tests
Evidence
  • Android and iOS local key owners
  • browser external signer use cases
Required tests
  • sign-only capability
  • ECDH-only capability
  • cancellation
  • provider rejection
  • no private-key export

nostr

3
nostr.nip01.receive

Bounded signed-event parsing, exact raw tags, ID recomputation, signature verification, and canonical JSON

rust-core
implementation · completeinterop · completerelease · supported
Rust
complete
Kotlin
complete
Android
complete
Swift
complete
TypeScript
complete
Evidence and required tests
Evidence
  • NIP-01
  • Softrelay signed-event validation
  • shared signed-event fixture
Required tests
  • valid external fixture
  • unknown and trailing tag fields
  • tampered ID
  • tampered signature
  • kind and timestamp bounds
  • event size bound
nostr.nip01.author

Explicit event drafts and signing without hidden clocks or tag normalization

rust-core
implementation · completeinterop · completerelease · supported
Rust
complete
Kotlin
complete
Android
complete
Swift
complete
TypeScript
complete
Evidence and required tests
Evidence
  • NIP-01
  • Android signedEvent
  • iOS signedEvent
Required tests
  • explicit timestamp
  • exact raw tags
  • deterministic event ID
  • signature verification
  • oversized draft rejection
  • complex language example
nostr.nip19

Bech32 keys, event identifiers, profiles, and relay hints used by Softchat

rust-core
implementation · completeinterop · pendingrelease · gated
Rust
complete
Kotlin
complete
Android
complete
Swift
complete
TypeScript
complete
Evidence and required tests
Evidence
  • NIP-19
  • Android identifiers
  • iOS identifiers
Required tests
  • official vectors
  • round trips
  • mixed-case rejection
  • unknown TLV retention policy
  • resource bounds

crypto

1
crypto.nip44-v2

NIP-44 v2 encryption and authenticated decryption with a bounded Softchat profile

rust-core
implementation · completeinterop · completerelease · supported
Rust
complete
Kotlin
complete
Android
complete
Swift
complete
TypeScript
complete
Evidence and required tests
Evidence
  • NIP-44
  • nostr 0.44.2
  • nip44 0.3.0
  • official vector corpus
  • independent extended-prefix fixture
  • Android NIP-44
  • iOS NIP-44
Required tests
  • official valid vectors
  • official invalid vectors
  • Unicode
  • wrong recipient
  • tampering
  • old and extended length prefixes
  • product allocation limits

messaging

12
nostr.nip59.durable

Rumor, signed seal, one-time durable gift wrap, recipient routing, and private timestamps

rust-core
implementation · completeinterop · pendingrelease · gated
Rust
complete
Kotlin
complete
Android
complete
Swift
complete
TypeScript
complete
Evidence and required tests
Evidence
  • NIP-59
  • official NIP-59 example
  • Android giftWrappedEvent
  • iOS NostrGiftWrapEvent
  • Softrelay gift-wrap routing
  • accepted private-envelope profile
Required tests
  • 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.ephemeral

Ephemeral kind 21059 wrapping with non-persistent relay behavior

rust-core
implementation · completeinterop · pendingrelease · gated
Rust
complete
Kotlin
complete
Android
complete
Swift
complete
TypeScript
complete
Evidence and required tests
Evidence
  • NIP-59
  • Android typing wrappers
  • iOS ephemeral wrappers
  • Softrelay ephemeral integration test
Required tests
  • wrap and unwrap
  • kind enforcement
  • relay non-persistence
  • recipient authorization
  • silent-notification policy
messaging.nip17.message

Private kind 14 one-to-one and group chat text with canonical reply and sender-copy behavior

rust-core
implementation · completeinterop · pendingrelease · gated
Rust
complete
Kotlin
complete
Android
complete
Swift
complete
TypeScript
complete
Evidence and required tests
Evidence
  • NIP-17
  • official NIP-17 sender and recipient copies
  • Android DirectMessage.Message
  • iOS NostrChatMessageEvent
  • accepted minimum NIP-17 text profile
Required tests
  • one-to-one send and receive
  • group recipient copies
  • sender copy
  • reply tag
  • relay-hint handling
  • unknown tags
  • released-client interoperability
messaging.subject

Softchat group subject and optional icon profile

rust-core
implementation · completeinterop · pendingrelease · gated
Rust
complete
Kotlin
complete
Android
complete
Swift
complete
TypeScript
complete
Evidence and required tests
Evidence
  • Android DirectMessage.Subject
  • iOS chat subject and image tags
  • accepted Softchat event profile
  • released Android and iOS event-shape fixtures
Required tests
  • subject text
  • custom emoji
  • icon metadata
  • empty subject
  • cross-client fixture
messaging.reply-forward

Replies and Softchat forwarding/repost metadata

rust-core
implementation · completeinterop · pendingrelease · gated
Rust
complete
Kotlin
complete
Android
complete
Swift
complete
TypeScript
complete
Evidence and required tests
Evidence
  • Android parent and ForwardFrom tags
  • iOS reply and repost tags
  • accepted Softchat event profile
  • released Android and iOS event-shape fixtures
Required tests
  • reply
  • forward
  • relay hint
  • missing optional fields
  • unknown extension fields
  • cross-client tag order
messaging.generic-repost

NIP-18 kind 16 generic repost compatibility distinct from Softchat q-tag forwarding

rust-core
implementation · completeinterop · pendingrelease · gated
Rust
complete
Kotlin
complete
Android
complete
Swift
complete
TypeScript
complete
Evidence and required tests
Evidence
  • 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
Required tests
  • embedded event
  • e p and k references
  • relay hint
  • malformed embedded event
  • unknown tags
  • iOS fixture
  • Android compatibility policy
messaging.reaction

NIP-25 text and custom-emoji reactions

rust-core
implementation · completeinterop · pendingrelease · gated
Rust
complete
Kotlin
complete
Android
complete
Swift
complete
TypeScript
complete
Evidence and required tests
Evidence
  • NIP-25
  • Android Reaction
  • iOS NostrReactionEvent
Required tests
  • Unicode emoji
  • custom emoji tag
  • e p and k references
  • invalid parent
  • released-client interoperability
messaging.delete

NIP-09 deletion requests and Softchat author/recipient rules

rust-core
implementation · completeinterop · pendingrelease · gated
Rust
complete
Kotlin
complete
Android
complete
Swift
complete
TypeScript
complete
Evidence and required tests
Evidence
  • NIP-09
  • Android EventDeletionRequest
  • iOS NostrDeletionRequestEvent
Required tests
  • author deletion
  • unauthorized deletion
  • multiple references
  • gift-wrapped deletion
  • projection behavior
messaging.edit

Softchat kind 1010 updated-content profile

rust-core
implementation · completeinterop · pendingrelease · gated
Rust
complete
Kotlin
complete
Android
complete
Swift
complete
TypeScript
complete
Evidence and required tests
Evidence
  • Android Edit
  • iOS NostrUpdatedContentEvent
  • accepted Softchat event profile
  • released Android and iOS event-shape fixtures
Required tests
  • author-only edit
  • parent reference
  • emoji retention
  • attachment retention
  • delete interaction
  • latest-edit projection
messaging.typing

Softchat kind 21234 typing rumors in ephemeral gift wraps

rust-core
implementation · completeinterop · pendingrelease · gated
Rust
complete
Kotlin
complete
Android
complete
Swift
complete
TypeScript
complete
Evidence and required tests
Evidence
  • Android IsTyping
  • iOS NostrTypingEvent
  • Softrelay ephemeral route
Required tests
  • participant tags
  • ephemeral wrapper
  • no persistence
  • expiry at projection layer
  • no alert
messaging.metadata

Softchat user metadata payload and encrypted distribution policy

rust-core
implementation · completeinterop · pendingrelease · gated
Rust
complete
Kotlin
complete
Android
complete
Swift
complete
TypeScript
complete
Evidence and required tests
Evidence
  • NIP-01 metadata
  • Android UserMetadata
  • iOS NostrUserMetadataEvent
  • accepted private metadata profile
  • released Android event-shape fixture
Required tests
  • known fields
  • unknown fields
  • invalid URLs
  • empty metadata
  • encrypted recipient copies
  • replacement ordering
messaging.follow-list

NIP-02 kind 3 follow-list and local-name profile used for contacts

rust-core
implementation · completeinterop · pendingrelease · gated
Rust
complete
Kotlin
complete
Android
complete
Swift
complete
TypeScript
complete
Evidence and required tests
Evidence
  • NIP-02
  • iOS NostrFollowListEvent and ChatService
  • Android has no kind 3 event model
  • accepted private contact-backup profile
  • released iOS event-shape fixture
Required tests
  • p-tag public key
  • relay hint
  • local name
  • trailing empty fields
  • replaceable ordering
  • duplicate contacts
  • iOS fixture
  • Android product behavior

sync

5
messaging.app-data

NIP-78 kind 30078 application data

rust-core
implementation · completeinterop · pendingrelease · gated
Rust
complete
Kotlin
complete
Android
complete
Swift
complete
TypeScript
complete
Evidence and required tests
Evidence
  • NIP-78
  • Android ApplicationSpecificData
  • iOS customAppData
Required tests
  • d-tag identity
  • replacement ordering
  • encryption policy
  • unknown payload versions
  • cross-client fixture
messaging.app-data-sync

Softchat kind 30079 cross-device application-data synchronization

rust-core
implementation · completeinterop · pendingrelease · gated
Rust
complete
Kotlin
complete
Android
complete
Swift
complete
TypeScript
complete
Evidence and required tests
Evidence
  • iOS appDataSync
  • Softrelay app-data-sync integration test
  • Android has no named kind
  • accepted direct self-encrypted profile
  • released iOS and Softrelay fixtures
Required tests
  • device authorization
  • replaceable identity
  • conflict ordering
  • relay author scope
  • Android interoperability
sync.negentropy

NIP-77 set reconciliation and Softchat relay orchestration

rust-core
implementation · completeinterop · pendingrelease · gated
Rust
complete
Kotlin
complete
Android
complete
Swift
complete
TypeScript
complete
Evidence and required tests
Evidence
  • NIP-77
  • Android Negentropy
  • iOS Negentropy
  • softrelay-negentropy
Required tests
  • independent binary vectors
  • empty and identical sets
  • differences both ways
  • frame limit
  • NEG-ERR
  • cancellation
  • relay interoperability
sync.delivery

Durable outbox, per-event acknowledgement, retry, recovery, and honest delivery state

platform-adapter
implementation · platform-ownedinterop · pendingrelease · gated
Rust
complete
Kotlin
platform-owned
Android
platform-owned
Swift
platform-owned
TypeScript
platform-owned
Evidence and required tests
Evidence
  • Android Outbox and Room
  • iOS OutgoingEventQueue and GRDB
Required tests
  • persist before send
  • crash recovery
  • partial batch
  • retry classification
  • duplicate acknowledgement
  • account switch
  • offline restart
sync.persistence

Authoritative platform persistence adapter and bounded Rust projections

platform-adapter
implementation · platform-ownedinterop · pendingrelease · gated
Rust
complete
Kotlin
platform-owned
Android
platform-owned
Swift
platform-owned
TypeScript
platform-owned
Evidence and required tests
Evidence
  • Android Room stores
  • iOS GRDB stores
Required tests
  • transactional batch
  • idempotent ingestion
  • invalid-event quarantine
  • schema migration
  • account isolation
  • large history

wire

5
relay.frames

Strict client and relay messages for EVENT, REQ, CLOSE, OK, EOSE, CLOSED, NOTICE, AUTH, and COUNT

rust-core
implementation · completeinterop · pendingrelease · gated
Rust
complete
Kotlin
complete
Android
complete
Swift
complete
TypeScript
complete
Evidence and required tests
Evidence
  • NIP-01
  • NIP-42
  • NIP-45
  • Android relay messages
  • iOS relay messages
  • Softrelay codecs
Required tests
  • every frame shape
  • trailing item rejection
  • malformed JSON
  • size bounds
  • unknown command policy
  • round trips
relay.filters

NIP-01 filters with exact prefix, time, limit, and generic tag semantics

rust-core
implementation · completeinterop · pendingrelease · gated
Rust
complete
Kotlin
complete
Android
complete
Swift
complete
TypeScript
complete
Evidence and required tests
Evidence
  • NIP-01
  • Android RelayFilter
  • iOS filters
  • Softrelay filters
Required tests
  • ids and authors
  • kinds
  • since and until
  • limit
  • generic tags
  • duplicate fields
  • relay conformance
relay.nip42

Challenge-bound NIP-42 authentication event plans and validation

rust-core
implementation · completeinterop · pendingrelease · gated
Rust
complete
Kotlin
complete
Android
complete
Swift
complete
TypeScript
complete
Evidence and required tests
Evidence
  • NIP-42
  • Android auth flow
  • iOS auth flow
  • Softrelay mandatory auth policy
Required tests
  • challenge tag
  • relay tag
  • timestamp window
  • wrong relay
  • replay
  • accepted and rejected OK
  • production relay interoperability
relay.batch-events

Softchat EVENTS batch command with one acknowledgement per event

rust-core
implementation · completeinterop · pendingrelease · gated
Rust
complete
Kotlin
complete
Android
complete
Swift
complete
TypeScript
complete
Evidence and required tests
Evidence
  • Android EVENTS sender
  • iOS EVENTS sender
  • Softrelay EVENTS handler
  • accepted relay-batch profile
Required tests
  • empty batch
  • mixed accepted and rejected
  • duplicate IDs
  • out-of-order OK
  • partial disconnect
  • retry classification
relay.session

Subscription, query, publish, backpressure, reconnect, timeout, status, and cancellation state

shared-boundary
implementation · completeinterop · pendingrelease · gated
Rust
complete
Kotlin
complete
Android
complete
Swift
complete
TypeScript
complete
Evidence and required tests
Evidence
  • Android RelaySession
  • iOS actor NostrClient
  • Softrelay integration client
Required tests
  • connect and auth
  • subscribe and EOSE
  • publish and OK
  • close
  • reconnect
  • cancellation
  • bounded queues
  • slow consumer

noise

1
wire.noise

Deployed wss+noise profile, handshake, negotiation, chunking, rekeying, and bounded sessions

rust-core
implementation · completeinterop · pendingrelease · gated
Rust
complete
Kotlin
complete
Android
complete
Swift
complete
TypeScript
complete
Evidence and required tests
Evidence
  • Android Noise client
  • iOS Noise client
  • softrelay-noise
  • Softrelay interoperability tests
Required tests
  • independent handshake vectors
  • client and relay interoperability
  • bad key and PSK
  • bidirectional chunking
  • 512 KiB bound
  • nonce exhaustion
  • rekey
  • shutdown

media

4
media.metadata

Softchat image, imeta, emoji, dimensions, hashes, and attachment-reference profile

rust-core
implementation · completeinterop · pendingrelease · gated
Rust
complete
Kotlin
complete
Android
complete
Swift
complete
TypeScript
complete
Evidence and required tests
Evidence
  • NIP-94
  • Android NostrFileMetadata
  • iOS media attachment types
  • accepted Softchat imeta profile
  • released Android and iOS event-shape fixtures
Required tests
  • image
  • video
  • audio and waveform
  • unknown metadata
  • dimensions
  • hashes
  • URLs
  • cross-client fixtures
media.crypto

Streaming attachment encryption, decryption, hashing, and bounded staging

rust-core
implementation · completeinterop · pendingrelease · gated
Rust
complete
Kotlin
complete
Android
complete
Swift
complete
TypeScript
complete
Evidence and required tests
Evidence
  • Android attachment crypto
  • iOS attachment crypto
  • Softrelay file API
Required tests
  • independent vectors
  • empty and boundary sizes
  • streaming chunks
  • tampering
  • wrong key
  • atomic destination
  • cancellation
  • memory bound
media.nip98

NIP-98 authorization event and immutable HTTP request plan

rust-core
implementation · completeinterop · pendingrelease · gated
Rust
complete
Kotlin
complete
Android
complete
Swift
complete
TypeScript
complete
Evidence and required tests
Evidence
  • NIP-98
  • Android NostrFileService
  • iOS NostrHTTPAuthEvent
  • Softrelay HTTP auth
Required tests
  • method and URL
  • payload hash
  • timestamp
  • signature
  • header encoding
  • redirect policy
  • server interoperability
media.http-execution

Uploads, downloads, progress, resumability, files, and background lifecycle

platform-adapter
implementation · platform-ownedinterop · pendingrelease · gated
Rust
complete
Kotlin
platform-owned
Android
platform-owned
Swift
platform-owned
TypeScript
platform-owned
Evidence and required tests
Evidence
  • Android Ktor Okio and WorkManager
  • iOS URLSession background transfer
  • browser fetch
Required tests
  • request-plan integration
  • background relaunch
  • resume
  • progress
  • cancellation
  • temporary-file cleanup
  • network policy
  • large file

observability

1
observability.redacted

Stable redacted errors, counters, state transitions, and build fingerprints

shared-boundary
implementation · completeinterop · pendingrelease · gated
Rust
complete
Kotlin
complete
Android
complete
Swift
complete
TypeScript
complete
Evidence and required tests
Evidence
  • current stable errors
  • Android logging
  • iOS logging
  • Softrelay metrics
Required tests
  • no secret plaintext or ciphertext
  • stable codes
  • safe byte counts
  • build fingerprint
  • unknown internal failure
  • symbolicated native crash

distribution

4
distribution.rust

Versioned Rust crate with rustdoc, provenance, changelog, and compatibility policy

distribution
implementation · completeinterop · pendingrelease · gated
Rust
complete
Kotlin
not-applicable
Android
not-applicable
Swift
not-applicable
TypeScript
not-applicable
Evidence and required tests
Evidence
  • Cargo crate
  • cargo doc
Required tests
  • cargo package
  • public API docs
  • minimum Rust version
  • dependency audit
  • consumer example
distribution.kotlin

Android AAR and JVM artifact with Dokka, sources, ABIs, symbols, and consumer verification

distribution
implementation · completeinterop · pendingrelease · gated
Rust
not-applicable
Kotlin
complete
Android
complete
Swift
not-applicable
TypeScript
not-applicable
Evidence and required tests
Evidence
  • packed JVM consumer
  • multi-ABI Android AAR
  • physical Android benchmark consumer
Required tests
  • external JVM consumer
  • Android emulator and device
  • arm64 and x86_64
  • 16 KiB pages
  • R8 release
  • Dokka
  • source and native symbols
distribution.swift

XCFramework and Swift Package with DocC, symbols, checksums, and app-extension verification

distribution
implementation · completeinterop · pendingrelease · gated
Rust
not-applicable
Kotlin
not-applicable
Android
not-applicable
Swift
complete
TypeScript
not-applicable
Evidence and required tests
Evidence
  • SoftchatKit facade
  • packed XCFramework and SwiftPM consumer
Required tests
  • external SwiftPM consumer
  • device and simulator
  • main app and extensions
  • archive
  • module stability
  • DocC
  • dSYM
distribution.javascript

npm package for browser, Worker, Node ESM/CommonJS, Wasm, TypeDoc, and source maps

distribution
implementation · completeinterop · pendingrelease · gated
Rust
not-applicable
Kotlin
not-applicable
Android
not-applicable
Swift
not-applicable
TypeScript
complete
Evidence and required tests
Evidence
  • packed Node CommonJS/ESM, browser, and Worker consumers
Required tests
  • npm pack
  • external Node consumers
  • browser bundlers
  • Worker
  • CSP
  • single Wasm instance
  • TypeDoc
  • source maps