# Generated Softchat feature parity

This file is generated from `compatibility/softchat-features.json`.
Do not edit it by hand.

Reviewed: 2026-07-26

| Evidence | Revision |
| --- | --- |
| android | `a5edacccee3d62757a08dadeceeb3d29a4f4eac6` |
| ios | `693a50ad0a0eb883ffb41544703c45b53ef57845` |
| relay | `a8e968c27d3f55cdde198d17c00b3873f8aed094` |
| nips | `db5fe3de8c5d1443b634c9bbf66ecb004f337057` |

| Area | Feature | Implementation | Interop | Release | Rust | Kotlin | Android | Swift | JavaScript |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| identity | `identity.local` — Import, public-key derivation, retained authority, redaction, and explicit erasure | complete | complete | supported | complete | complete | complete | complete | complete |
| identity | `identity.external-signer` — Host, hardware, browser-extension, or remote signing and ECDH capabilities | partial | pending | gated | complete | partial | partial | partial | partial |
| nostr | `nostr.nip01.receive` — Bounded signed-event parsing, exact raw tags, ID recomputation, signature verification, and canonical JSON | complete | complete | supported | complete | complete | complete | complete | complete |
| nostr | `nostr.nip01.author` — Explicit event drafts and signing without hidden clocks or tag normalization | complete | complete | supported | complete | complete | complete | complete | complete |
| nostr | `nostr.nip19` — Bech32 keys, event identifiers, profiles, and relay hints used by Softchat | complete | pending | gated | complete | complete | complete | complete | complete |
| crypto | `crypto.nip44-v2` — NIP-44 v2 encryption and authenticated decryption with a bounded Softchat profile | complete | complete | supported | complete | complete | complete | complete | complete |
| messaging | `nostr.nip59.durable` — Rumor, signed seal, one-time durable gift wrap, recipient routing, and private timestamps | complete | pending | gated | complete | complete | complete | complete | complete |
| messaging | `nostr.nip59.ephemeral` — Ephemeral kind 21059 wrapping with non-persistent relay behavior | complete | pending | gated | complete | complete | complete | complete | complete |
| messaging | `messaging.nip17.message` — Private kind 14 one-to-one and group chat text with canonical reply and sender-copy behavior | complete | pending | gated | complete | complete | complete | complete | complete |
| messaging | `messaging.subject` — Softchat group subject and optional icon profile | complete | pending | gated | complete | complete | complete | complete | complete |
| messaging | `messaging.reply-forward` — Replies and Softchat forwarding/repost metadata | complete | pending | gated | complete | complete | complete | complete | complete |
| messaging | `messaging.generic-repost` — NIP-18 kind 16 generic repost compatibility distinct from Softchat q-tag forwarding | complete | pending | gated | complete | complete | complete | complete | complete |
| messaging | `messaging.reaction` — NIP-25 text and custom-emoji reactions | complete | pending | gated | complete | complete | complete | complete | complete |
| messaging | `messaging.delete` — NIP-09 deletion requests and Softchat author/recipient rules | complete | pending | gated | complete | complete | complete | complete | complete |
| messaging | `messaging.edit` — Softchat kind 1010 updated-content profile | complete | pending | gated | complete | complete | complete | complete | complete |
| messaging | `messaging.typing` — Softchat kind 21234 typing rumors in ephemeral gift wraps | complete | pending | gated | complete | complete | complete | complete | complete |
| messaging | `messaging.metadata` — Softchat user metadata payload and encrypted distribution policy | complete | pending | gated | complete | complete | complete | complete | complete |
| messaging | `messaging.follow-list` — NIP-02 kind 3 follow-list and local-name profile used for contacts | complete | pending | gated | complete | complete | complete | complete | complete |
| sync | `messaging.app-data` — NIP-78 kind 30078 application data | complete | pending | gated | complete | complete | complete | complete | complete |
| sync | `messaging.app-data-sync` — Softchat kind 30079 cross-device application-data synchronization | complete | pending | gated | complete | complete | complete | complete | complete |
| wire | `relay.frames` — Strict client and relay messages for EVENT, REQ, CLOSE, OK, EOSE, CLOSED, NOTICE, AUTH, and COUNT | complete | pending | gated | complete | complete | complete | complete | complete |
| wire | `relay.filters` — NIP-01 filters with exact prefix, time, limit, and generic tag semantics | complete | pending | gated | complete | complete | complete | complete | complete |
| wire | `relay.nip42` — Challenge-bound NIP-42 authentication event plans and validation | complete | pending | gated | complete | complete | complete | complete | complete |
| wire | `relay.batch-events` — Softchat EVENTS batch command with one acknowledgement per event | complete | pending | gated | complete | complete | complete | complete | complete |
| wire | `relay.session` — Subscription, query, publish, backpressure, reconnect, timeout, status, and cancellation state | complete | pending | gated | complete | complete | complete | complete | complete |
| noise | `wire.noise` — Deployed wss+noise profile, handshake, negotiation, chunking, rekeying, and bounded sessions | complete | pending | gated | complete | complete | complete | complete | complete |
| sync | `sync.negentropy` — NIP-77 set reconciliation and Softchat relay orchestration | complete | pending | gated | complete | complete | complete | complete | complete |
| sync | `sync.delivery` — Durable outbox, per-event acknowledgement, retry, recovery, and honest delivery state | platform-owned | pending | gated | complete | platform-owned | platform-owned | platform-owned | platform-owned |
| sync | `sync.persistence` — Authoritative platform persistence adapter and bounded Rust projections | platform-owned | pending | gated | complete | platform-owned | platform-owned | platform-owned | platform-owned |
| media | `media.metadata` — Softchat image, imeta, emoji, dimensions, hashes, and attachment-reference profile | complete | pending | gated | complete | complete | complete | complete | complete |
| media | `media.crypto` — Streaming attachment encryption, decryption, hashing, and bounded staging | complete | pending | gated | complete | complete | complete | complete | complete |
| media | `media.nip98` — NIP-98 authorization event and immutable HTTP request plan | complete | pending | gated | complete | complete | complete | complete | complete |
| media | `media.http-execution` — Uploads, downloads, progress, resumability, files, and background lifecycle | platform-owned | pending | gated | complete | platform-owned | platform-owned | platform-owned | platform-owned |
| observability | `observability.redacted` — Stable redacted errors, counters, state transitions, and build fingerprints | complete | pending | gated | complete | complete | complete | complete | complete |
| distribution | `distribution.rust` — Versioned Rust crate with rustdoc, provenance, changelog, and compatibility policy | complete | pending | gated | complete | not-applicable | not-applicable | not-applicable | not-applicable |
| distribution | `distribution.kotlin` — Android AAR and JVM artifact with Dokka, sources, ABIs, symbols, and consumer verification | complete | pending | gated | not-applicable | complete | complete | not-applicable | not-applicable |
| distribution | `distribution.swift` — XCFramework and Swift Package with DocC, symbols, checksums, and app-extension verification | complete | pending | gated | not-applicable | not-applicable | not-applicable | complete | not-applicable |
| distribution | `distribution.javascript` — npm package for browser, Worker, Node ESM/CommonJS, Wasm, TypeDoc, and source maps | complete | pending | gated | not-applicable | not-applicable | not-applicable | not-applicable | complete |
