API reference
Use this site for workflows, boundaries, failure behavior, and lifecycle. Use the generated reference for exact signatures and every exported symbol. The generated pages are built from the same source revision as this guide.
Rust
rustdoc for the softchat crate
Android
Dokka for the authored Android/Kotlin API
Swift
Verification status; generated DocC is temporarily deferred
TypeScript
TypeDoc for @softcose/softchat
The /kotlin/ route is the generated symbol output for the Kotlin declarations
shipped in the Android AAR. Android-specific threading, Rust-owned SQLite,
packaging, files, lifecycle, and device performance guidance remains visible
in the Android tab throughout the cookbook.
Verified workflows
The repository smoke/package suites compile and execute the authored surfaces, including complex multi-family workflows:
- Rust protocol workflow
- Android protocol workflow
- Android packed-AAR device harness
- Swift workflow source (verification deferred)
- TypeScript/Wasm workflow
The site uses shortened recipes for clarity. The Android selector always renders the complete callable Kotlin recipe together with any Android integration note, so no navigation to a separate language tab is required. These checked-in consumers are executable evidence that generated internals are not required.
Operation-to-guide matrix
- Rust
- Android
- Swift
- TypeScript
| Family | Operation | Public symbols |
|---|---|---|
| Identity | Import, public key, and erase · measured Import, retain, and explicitly end one local account authority. | LocalIdentity::from_secret_bytesLocalIdentity::public_key |
| Nostr values and cryptography | NIP-19 identifiers Parse and encode bounded NIP-19 display identifiers. | Nip19Identifier::parseNip19Identifier::encode |
| Nostr values and cryptography | Author and verify a NIP-01 event · measured Create, sign, parse, and verify exact NIP-01 events. | NostrEventDraft::newLocalIdentity::sign_eventSignedNostrEvent::from_json |
| Nostr values and cryptography | NIP-44 encrypt and decrypt · measured Encrypt and authenticate NIP-44 v2 messages. | LocalIdentity::encrypt_utf8LocalIdentity::decrypt_utf8Nip44EncryptedMessage |
| Private messaging | Create a NIP-17 message · measured Create a minimal private kind-14 message rumor. | LocalIdentity::create_nip17_text_message |
| Private messaging | Wrap recipient and sender copies · measured Create an independent NIP-59 copy for one recipient. | LocalIdentity::gift_wrap |
| Private messaging | Unwrap and classify · measured Authenticate all NIP-59 layers and classify the rumor. | LocalIdentity::unwrap_gift_wrapNip17TextMessage::from_rumor |
| Chat and account data | Messages, replies, and forwards Create and classify complete Softchat kind-14 messages. | LocalIdentity::create_chat_messageclassify_chat_message |
| Chat and account data | Subjects Create and classify canonical group subject updates. | LocalIdentity::create_subjectclassify_subject |
| Chat and account data | Reactions Create and classify private reactions. | LocalIdentity::create_reactionclassify_reaction |
| Chat and account data | Deletions Create and authorize private deletion requests. | LocalIdentity::create_deletionclassify_deletion |
| Chat and account data | Edits Create and project author-bound text and emoji edits. | LocalIdentity::create_editclassify_edit |
| Chat and account data | Typing indicators Create and classify ephemeral typing rumors. | LocalIdentity::create_typingclassify_typing |
| Chat and account data | Generic repost compatibility Classify receive-only NIP-18 generic reposts. | classify_generic_repost |
| Chat and account data | User metadata and contacts Create private metadata and author-copy contact backups. | LocalIdentity::create_user_metadataLocalIdentity::create_follow_list |
| Chat and account data | Application data and sync Create direct NIP-78 data and private kind-30079 sync data. | LocalIdentity::create_application_dataLocalIdentity::create_app_data_sync |
| Relay and persistence | Frames, filters, authentication, and batches Validate relay frames, filters, authentication, and EVENTS batches. | parse_client_relay_frameparse_relay_response_frameRelayFilter |
| Relay and persistence | Relay session lifecycle Drive a serialized transport-independent relay state machine. | RelaySessionRelaySession::confirm_sentOutboundRelayFrame |
| Relay and persistence | Publishing and delivery Persist intent and queue bounded event batches for tracked delivery. | RelaySession::publishclassify_delivery_acknowledgement |
| Relay and persistence | Transactional ingestion Commit received verified events before acknowledging ingestion. | RelaySession::confirm_ingestedvalidate_ingestion_result |
| Relay and persistence | Recovery Inspect diagnostics, rebuild from durable host intent, and cancel safely. | RelaySession::snapshotRelaySession::cancel |
| Noise and synchronization | Noise handshake and transport Authenticate the deployed Noise NK relay profile and transport frames. | NoiseClientHandshakeNoiseTransport |
| Noise and synchronization | Negentropy reconciliation Reconcile bounded immutable event snapshots with NIP-77. | NegentropyClient |
| Media and HTTP | Attachment metadata Parse and preserve bounded Softchat imeta metadata. | parse_attachment_metadataAttachmentMetadata |
| Media and HTTP | Stream encryption · measured Stream attachment encryption into private staging. | AttachmentEncryptionStream |
| Media and HTTP | Stream decryption and final authentication Stream attachment decryption with final authentication. | AttachmentDecryptionStream |
| Media and HTTP | NIP-98 request plans Plan exact-request NIP-98 authorization without executing HTTP. | create_nip98_authorizationHttpAuthorizationPlan |
| Android account runtime | Open an account · measured Import one local authority and open its identity-derived Rust SQLite account. | AccountRuntimeHandle::openAccountRuntimeHandle::public_keyAccountRuntimeHandle::close_account |
| Android account runtime | Conversations and drafts · measured Create, query, observe, archive, pin, read, and draft complete conversations. | AccountRuntimeHandle::get_or_create_conversationAccountRuntimeHandle::conversation_pageAccountRuntimeHandle::save_conversation_draft |
| Android account runtime | Messages and commands · measured Query effective messages and execute atomic send, reply, forward, subject, reaction, edit, deletion, and typing use cases. | AccountRuntimeHandle::send_messageAccountRuntimeHandle::message_pageAccountRuntimeHandle::edit_messageAccountRuntimeHandle::delete_messageAccountRuntimeHandle::delete_messages |
| Android account runtime | Profile and follows · measured Observe effective private metadata and update profile fields or the complete follow list without lossy replacement. | AccountRuntimeHandle::profileAccountRuntimeHandle::profilesAccountRuntimeHandle::update_profileAccountRuntimeHandle::followAccountRuntimeHandle::unfollowAccountRuntimeHandle::replace_follows |
| Android account runtime | Exact event details Load exact authenticated protocol truth and Rust-owned relationship state for detail and debugging UI. | AccountRuntimeHandle::list_event_nodesAccountRuntimeHandle::event_json |
| Android account runtime | Account settings Read and merge versioned cross-device product settings through explicit unchanged, clear, and set states. | AccountRuntimeHandle::account_settingsAccountRuntimeHandle::apply_account_settings_patch |
| Android account runtime | Relay catalog Own the durable relay catalog, one active selection, discovery reconciliation, and failover order. | AccountRuntimeHandle::relay_catalogAccountRuntimeHandle::add_account_relayAccountRuntimeHandle::set_account_active_relay |
| Android account runtime | Route an incoming account event Verify one signed NIP-59 outer wrapper and select the exact retained account before decryption or ingestion. | route_nip59_envelopeNip59EnvelopeRoute |
| Android account runtime | Transport, ingestion, and synchronization Run one Rust-owned relay, delivery, ingestion, Noise, and synchronization state machine through either the managed native socket or correlated host actions. | ManagedAccountTransportAccountRuntimeHandle::start_account_transportAccountRuntimeHandle::apply_account_transport_resultAccountRuntimeHandle::reset_account_sync |
| Android account runtime | Durable media Persist media intent and dependencies before Android executes bounded file and HTTP effects. | AccountRuntimeHandle::prepare_media_messageAccountRuntimeHandle::cancel_pending_media_messageAccountRuntimeHandle::prepare_media_downloadAccountRuntimeHandle::prepare_conversation_icon_downloadAccountRuntimeHandle::media_operations_by_idsAccountRuntimeHandle::recoverable_media_operationsAccountRuntimeHandle::restart_media_downloadAccountRuntimeHandle::claim_media_operationAccountRuntimeHandle::complete_media_operation |
| Android account runtime | Durable public asset replacement Persist a profile-picture, profile-banner, or conversation-icon replacement and its upload dependency before Android starts file or HTTP work. | AccountRuntimeHandle::prepare_asset_replacementAccountRuntimeHandle::pending_asset_replacementAccountRuntimeHandle::recover_pending_asset_replacements |
| Android account runtime | Delivery operations Inspect, retry, and safely cancel recipient-complete durable outgoing operations. | AccountRuntimeHandle::operationAccountRuntimeHandle::operation_pageAccountRuntimeHandle::retry_operation |
| Android account runtime | Push registration Create the released private FCM or APNs token registration profile and durable delivery intent. | AccountRuntimeHandle::register_push_token |
| Android account runtime | Local contacts and resources Store bounded account-local address-book labels, stickers, and link-preview cache values in the one Rust database. | AccountRuntimeHandle::put_local_contactAccountRuntimeHandle::replace_stickersAccountRuntimeHandle::put_link_preview |
| Android account runtime | Import a retired signed outbox Recover a bounded batch of already signed pending events from retired platform storage without importing its schema or projections. | AccountRuntimeHandle::recover_signed_outbox_batch |
| Android account runtime | Diagnostics and recovery Observe the durable revision and bounded redacted account health for explicit support and recovery flows. | AccountRuntimeHandle::account_diagnostics |
| Android account runtime | Structured account logging · measured Feed existing Android support and log-viewer UI with optional structured SDK state without synchronous callbacks from Rust. | AccountRuntimeHandle::set_log_levelAccountRuntimeHandle::drain_log_events |
| Errors and diagnostics | Stable errors and retry policy Handle stable redacted failures without generated-binding leakage. | SoftchatError |
| Errors and diagnostics | Build fingerprint and diagnostics Identify the loaded artifact and inspect redacted counters. | build_fingerprintdiagnostics_snapshot |
| Family | Operation | Public symbols |
|---|---|---|
| Identity | Import, public key, and erase · measured Import, retain, and explicitly end one local account authority. | SoftchatAccount.openSoftchatAccount.publicKeySoftchatAccount.close |
| Nostr values and cryptography | NIP-19 identifiers Parse and encode bounded NIP-19 display identifiers. | Nip19Identifier.parseNip19Identifier.encodePublicKey.encodeNpub |
| Nostr values and cryptography | Author and verify a NIP-01 event · measured Create, sign, parse, and verify exact NIP-01 events. | NostrEventDraftSoftchatIdentity.signSignedNostrEvent.parse |
| Nostr values and cryptography | NIP-44 encrypt and decrypt · measured Encrypt and authenticate NIP-44 v2 messages. | SoftchatIdentity.encryptSoftchatIdentity.decryptNip44EncryptedMessage |
| Private messaging | Create a NIP-17 message · measured Create a minimal private kind-14 message rumor. | SoftchatIdentity.createNip17TextMessage |
| Private messaging | Wrap recipient and sender copies · measured Create an independent NIP-59 copy for one recipient. | SoftchatIdentity.giftWrap |
| Private messaging | Unwrap and classify · measured Authenticate all NIP-59 layers and classify the rumor. | SoftchatIdentity.unwrapGiftWrapNip17TextMessage.fromRumor |
| Chat and account data | Messages, replies, and forwards Create and classify complete Softchat kind-14 messages. | SoftchatIdentity.createChatMessageSoftchatEvents.chatMessage |
| Chat and account data | Subjects Create and classify canonical group subject updates. | SoftchatIdentity.createSubjectSoftchatEvents.subject |
| Chat and account data | Reactions Create and classify private reactions. | SoftchatIdentity.createReactionSoftchatEvents.reaction |
| Chat and account data | Deletions Create and authorize private deletion requests. | SoftchatIdentity.createDeletionSoftchatEvents.deletion |
| Chat and account data | Edits Create and project author-bound text and emoji edits. | SoftchatIdentity.createEditSoftchatEvents.edit |
| Chat and account data | Typing indicators Create and classify ephemeral typing rumors. | SoftchatIdentity.createTypingSoftchatEvents.typing |
| Chat and account data | Generic repost compatibility Classify receive-only NIP-18 generic reposts. | SoftchatEvents.genericRepost |
| Chat and account data | User metadata and contacts Create private metadata and author-copy contact backups. | SoftchatIdentity.createUserMetadataSoftchatIdentity.createFollowList |
| Chat and account data | Application data and sync Create direct NIP-78 data and private kind-30079 sync data. | SoftchatIdentity.createApplicationDataSoftchatIdentity.createAppDataSync |
| Relay and persistence | Frames, filters, authentication, and batches Validate relay frames, filters, authentication, and EVENTS batches. | RelaySession.subscribeRelaySession.receiveSoftchatIdentity.createNip42Authentication |
| Relay and persistence | Relay session lifecycle Drive a serialized transport-independent relay state machine. | RelaySessionRelaySession.confirmSentOutboundRelayFrame |
| Relay and persistence | Publishing and delivery Persist intent and queue bounded event batches for tracked delivery. | AccountOutgoing.enqueueSignedAccountDelivery.claimAccountDelivery.applyResultsclassifyDeliveryAcknowledgement |
| Relay and persistence | Transactional ingestion Commit received verified events before acknowledging ingestion. | AccountIncoming.ingestRelaySession.confirmIngested |
| Relay and persistence | Recovery Inspect diagnostics, rebuild from durable host intent, and cancel safely. | AccountDelivery.claimAccountDelivery.releaseRelaySession.transportLost |
| Noise and synchronization | Noise handshake and transport Authenticate the deployed Noise NK relay profile and transport frames. | NoiseClientHandshakeNoiseTransport |
| Noise and synchronization | Negentropy reconciliation Reconcile bounded immutable event snapshots with NIP-77. | AccountSynchronization.observeAccountSynchronization.resetAccountTransport.startAccountTransport.apply |
| Media and HTTP | Attachment metadata Parse and preserve bounded Softchat imeta metadata. | AttachmentMetadata.parse |
| Media and HTTP | Stream encryption · measured Stream attachment encryption into private staging. | AttachmentEncryptionStream |
| Media and HTTP | Stream decryption and final authentication Stream attachment decryption with final authentication. | AttachmentDecryptionStream |
| Media and HTTP | NIP-98 request plans Plan exact-request NIP-98 authorization without executing HTTP. | SoftchatIdentity.createNip98AuthorizationHttpAuthorizationPlan |
| Android account runtime | Open an account · measured Import one local authority and open its identity-derived Rust SQLite account. | SoftchatAccount.openSoftchatAccount.publicKeySoftchatAccount.close |
| Android account runtime | Conversations and drafts · measured Create, query, observe, archive, pin, read, and draft complete conversations. | AccountConversations.getOrCreateAccountConversations.observeAccountConversations.saveDraft |
| Android account runtime | Messages and commands · measured Query effective messages and execute atomic send, reply, forward, subject, reaction, edit, deletion, and typing use cases. | AccountMessages.sendAccountMessages.observeAccountMessages.editAccountMessages.deleteAccountMessages.deleteMany |
| Android account runtime | Profile and follows · measured Observe effective private metadata and update profile fields or the complete follow list without lossy replacement. | AccountProfiles.observeAccountProfiles.observeManyAccountProfiles.updateAccountProfiles.followAccountProfiles.unfollowAccountProfiles.replaceFollows |
| Android account runtime | Exact event details Load exact authenticated protocol truth and Rust-owned relationship state for detail and debugging UI. | AccountEvents.getAccountEvents.observeAccountEvents.relatedToAccountEvents.canonicalJson |
| Android account runtime | Account settings Read and merge versioned cross-device product settings through explicit unchanged, clear, and set states. | AccountSettingsService.observeAccountSettingsService.apply |
| Android account runtime | Relay catalog Own the durable relay catalog, one active selection, discovery reconciliation, and failover order. | AccountRelays.observeAccountRelays.addAccountRelays.setActive |
| Android account runtime | Route an incoming account event Verify one signed NIP-59 outer wrapper and select the exact retained account before decryption or ingestion. | Softchat.routeIncomingEventIncomingRoute |
| Android account runtime | Transport, ingestion, and synchronization Run one Rust-owned relay, delivery, ingestion, Noise, and synchronization state machine through either the managed native socket or correlated host actions. | SoftchatAccount.startManagedTransportManagedAccountTransport.stateManagedAccountTransport.flushManagedAccountTransport.forceResyncAccountTransport.startAccountTransport.apply |
| Android account runtime | Durable media Persist media intent and dependencies before Android executes bounded file and HTTP effects. | AccountMedia.prepareMessageAccountMedia.cancelPendingMessageAccountMedia.prepareDownloadAccountMedia.prepareConversationIconDownloadAccountMedia.operationsByIdAccountMedia.observeOperationsByIdAccountMedia.recoverablePageAccountMedia.restartDownloadAccountMedia.claimAccountMedia.complete |
| Android account runtime | Durable public asset replacement Persist a profile-picture, profile-banner, or conversation-icon replacement and its upload dependency before Android starts file or HTTP work. | AccountMedia.prepareProfilePictureAccountMedia.prepareProfileBannerAccountMedia.prepareConversationIconAccountMedia.pendingAssetReplacementAccountMedia.recoverReadyAssetReplacements |
| Android account runtime | Delivery operations Inspect, retry, and safely cancel recipient-complete durable outgoing operations. | AccountOperations.observeAccountOperations.retryAccountOperations.cancel |
| Android account runtime | Push registration Create the released private FCM or APNs token registration profile and durable delivery intent. | AccountPush.register |
| Android account runtime | Local contacts and resources Store bounded account-local address-book labels, stickers, and link-preview cache values in the one Rust database. | AccountContacts.putAccountResources.replaceStickersAccountResources.putLinkPreview |
| Android account runtime | Import a retired signed outbox Recover a bounded batch of already signed pending events from retired platform storage without importing its schema or projections. | AccountRecovery.importSignedOutboxBatch |
| Android account runtime | Diagnostics and recovery Observe the durable revision and bounded redacted account health for explicit support and recovery flows. | AccountSupport.observeDiagnosticsAccountSupport.observeRevisionSoftchatAccount.refresh |
| Android account runtime | Structured account logging · measured Feed existing Android support and log-viewer UI with optional structured SDK state without synchronous callbacks from Rust. | SoftchatLoggingSoftchatLogSinkSoftchatLogBatchSoftchatLogEventAccountSupport.setLogLevel |
| Errors and diagnostics | Stable errors and retry policy Handle stable redacted failures without generated-binding leakage. | SoftchatExceptionSoftchatErrorCode |
| Errors and diagnostics | Build fingerprint and diagnostics Identify the loaded artifact and inspect redacted counters. | Softchat.buildFingerprintSoftchat.diagnosticsSnapshot |
| Family | Operation | Public symbols |
|---|---|---|
| Identity | Import, public key, and erase · measured Import, retain, and explicitly end one local account authority. | SoftchatIdentity.init(secretKey:)SoftchatIdentity.publicKeySoftchatIdentity.erase |
| Nostr values and cryptography | NIP-19 identifiers Parse and encode bounded NIP-19 display identifiers. | Nip19Identifier.init(encoded:)Nip19Identifier.encoded() |
| Nostr values and cryptography | Author and verify a NIP-01 event · measured Create, sign, parse, and verify exact NIP-01 events. | NostrEventDraft.initSoftchatIdentity.signSignedNostrEvent.init(json:) |
| Nostr values and cryptography | NIP-44 encrypt and decrypt · measured Encrypt and authenticate NIP-44 v2 messages. | SoftchatIdentity.encryptSoftchatIdentity.decryptNip44EncryptedMessage |
| Private messaging | Create a NIP-17 message · measured Create a minimal private kind-14 message rumor. | SoftchatIdentity.createNip17TextMessage |
| Private messaging | Wrap recipient and sender copies · measured Create an independent NIP-59 copy for one recipient. | SoftchatIdentity.giftWrap |
| Private messaging | Unwrap and classify · measured Authenticate all NIP-59 layers and classify the rumor. | SoftchatIdentity.unwrapGiftWrapNip17TextMessage.init(rumor:) |
| Chat and account data | Messages, replies, and forwards Create and classify complete Softchat kind-14 messages. | SoftchatIdentity.createChatMessageSoftchatEvents.chatMessage |
| Chat and account data | Subjects Create and classify canonical group subject updates. | SoftchatIdentity.createSubjectSoftchatEvents.subject |
| Chat and account data | Reactions Create and classify private reactions. | SoftchatIdentity.createReactionSoftchatEvents.reaction |
| Chat and account data | Deletions Create and authorize private deletion requests. | SoftchatIdentity.createDeletionSoftchatEvents.deletion |
| Chat and account data | Edits Create and project author-bound text and emoji edits. | SoftchatIdentity.createEditSoftchatEvents.edit |
| Chat and account data | Typing indicators Create and classify ephemeral typing rumors. | SoftchatIdentity.createTypingSoftchatEvents.typing |
| Chat and account data | Generic repost compatibility Classify receive-only NIP-18 generic reposts. | SoftchatEvents.genericRepost |
| Chat and account data | User metadata and contacts Create private metadata and author-copy contact backups. | SoftchatIdentity.createUserMetadataSoftchatIdentity.createFollowList |
| Chat and account data | Application data and sync Create direct NIP-78 data and private kind-30079 sync data. | SoftchatIdentity.createApplicationDataSoftchatIdentity.createAppDataSync |
| Relay and persistence | Frames, filters, authentication, and batches Validate relay frames, filters, authentication, and EVENTS batches. | RelaySession.subscribeRelaySession.receiveSoftchatIdentity.createNip42Authentication |
| Relay and persistence | Relay session lifecycle Drive a serialized transport-independent relay state machine. | RelaySessionRelaySession.confirmSentOutboundRelayFrame |
| Relay and persistence | Publishing and delivery Persist intent and queue bounded event batches for tracked delivery. | RelaySession.publishRelaySession.receiveclassifyDeliveryAcknowledgement |
| Relay and persistence | Transactional ingestion Commit received verified events before acknowledging ingestion. | RelaySession.confirmIngestedvalidateIngestionResult |
| Relay and persistence | Recovery Inspect diagnostics, rebuild from durable host intent, and cancel safely. | RelaySession.snapshotRelaySession.cancel |
| Noise and synchronization | Noise handshake and transport Authenticate the deployed Noise NK relay profile and transport frames. | NoiseClientHandshakeNoiseTransport |
| Noise and synchronization | Negentropy reconciliation Reconcile bounded immutable event snapshots with NIP-77. | NegentropyClient |
| Media and HTTP | Attachment metadata Parse and preserve bounded Softchat imeta metadata. | AttachmentMetadata.init(tagValues:) |
| Media and HTTP | Stream encryption · measured Stream attachment encryption into private staging. | AttachmentEncryptionStream |
| Media and HTTP | Stream decryption and final authentication Stream attachment decryption with final authentication. | AttachmentDecryptionStream |
| Media and HTTP | NIP-98 request plans Plan exact-request NIP-98 authorization without executing HTTP. | SoftchatIdentity.createNip98AuthorizationHttpAuthorizationPlan |
| Errors and diagnostics | Stable errors and retry policy Handle stable redacted failures without generated-binding leakage. | SoftchatError |
| Errors and diagnostics | Build fingerprint and diagnostics Identify the loaded artifact and inspect redacted counters. | softchatBuildFingerprintsoftchatDiagnosticsSnapshot |
| Family | Operation | Public symbols |
|---|---|---|
| Identity | Import, public key, and erase · measured Import, retain, and explicitly end one local account authority. | SoftchatIdentity.importSoftchatIdentity.publicKeySoftchatIdentity.erase |
| Nostr values and cryptography | NIP-19 identifiers Parse and encode bounded NIP-19 display identifiers. | Nip19Identifier.parseNip19Identifier.stringify |
| Nostr values and cryptography | Author and verify a NIP-01 event · measured Create, sign, parse, and verify exact NIP-01 events. | NostrEventDraft.createSoftchatIdentity.signSignedNostrEvent.parse |
| Nostr values and cryptography | NIP-44 encrypt and decrypt · measured Encrypt and authenticate NIP-44 v2 messages. | SoftchatIdentity.encryptSoftchatIdentity.decryptNip44EncryptedMessage |
| Private messaging | Create a NIP-17 message · measured Create a minimal private kind-14 message rumor. | SoftchatIdentity.createNip17TextMessage |
| Private messaging | Wrap recipient and sender copies · measured Create an independent NIP-59 copy for one recipient. | SoftchatIdentity.giftWrap |
| Private messaging | Unwrap and classify · measured Authenticate all NIP-59 layers and classify the rumor. | SoftchatIdentity.unwrapGiftWrapNip17TextMessage.fromRumor |
| Chat and account data | Messages, replies, and forwards Create and classify complete Softchat kind-14 messages. | SoftchatIdentity.createChatMessageSoftchatEvents.chatMessage |
| Chat and account data | Subjects Create and classify canonical group subject updates. | SoftchatIdentity.createSubjectSoftchatEvents.subject |
| Chat and account data | Reactions Create and classify private reactions. | SoftchatIdentity.createReactionSoftchatEvents.reaction |
| Chat and account data | Deletions Create and authorize private deletion requests. | SoftchatIdentity.createDeletionSoftchatEvents.deletion |
| Chat and account data | Edits Create and project author-bound text and emoji edits. | SoftchatIdentity.createEditSoftchatEvents.edit |
| Chat and account data | Typing indicators Create and classify ephemeral typing rumors. | SoftchatIdentity.createTypingSoftchatEvents.typing |
| Chat and account data | Generic repost compatibility Classify receive-only NIP-18 generic reposts. | SoftchatEvents.genericRepost |
| Chat and account data | User metadata and contacts Create private metadata and author-copy contact backups. | SoftchatIdentity.createUserMetadataSoftchatIdentity.createFollowList |
| Chat and account data | Application data and sync Create direct NIP-78 data and private kind-30079 sync data. | SoftchatIdentity.createApplicationDataSoftchatIdentity.createAppDataSync |
| Relay and persistence | Frames, filters, authentication, and batches Validate relay frames, filters, authentication, and EVENTS batches. | RelaySession.subscribeRelaySession.receiveSoftchatIdentity.createNip42Authentication |
| Relay and persistence | Relay session lifecycle Drive a serialized transport-independent relay state machine. | RelaySessionRelaySession.confirmSentOutboundRelayFrame |
| Relay and persistence | Publishing and delivery Persist intent and queue bounded event batches for tracked delivery. | RelaySession.publishRelaySession.receiveclassifyDeliveryAcknowledgement |
| Relay and persistence | Transactional ingestion Commit received verified events before acknowledging ingestion. | RelaySession.confirmIngestedvalidateIngestionResult |
| Relay and persistence | Recovery Inspect diagnostics, rebuild from durable host intent, and cancel safely. | RelaySession.snapshotRelaySession.cancelRelaySession.close |
| Noise and synchronization | Noise handshake and transport Authenticate the deployed Noise NK relay profile and transport frames. | NoiseClientHandshakeNoiseTransport |
| Noise and synchronization | Negentropy reconciliation Reconcile bounded immutable event snapshots with NIP-77. | NegentropyClient |
| Media and HTTP | Attachment metadata Parse and preserve bounded Softchat imeta metadata. | AttachmentMetadata.parse |
| Media and HTTP | Stream encryption · measured Stream attachment encryption into private staging. | AttachmentEncryptionStream |
| Media and HTTP | Stream decryption and final authentication Stream attachment decryption with final authentication. | AttachmentDecryptionStream |
| Media and HTTP | NIP-98 request plans Plan exact-request NIP-98 authorization without executing HTTP. | SoftchatIdentity.createNip98AuthorizationHttpAuthorizationPlan |
| Errors and diagnostics | Stable errors and retry policy Handle stable redacted failures without generated-binding leakage. | SoftchatErrorSoftchatErrorCode |
| Errors and diagnostics | Build fingerprint and diagnostics Identify the loaded artifact and inspect redacted counters. | buildFingerprintdiagnosticsSnapshot |
The assembled capability matrix records implementation, interoperability evidence, and release status independently for every target.
Performance reports
Contextual cards appear only beside operations present in the accepted benchmark corpus. They show median duration, p95 duration, equivalent single-thread calls per second, payload throughput where meaningful, allocations where available, comparison with the frozen old library where available, environment, and confidence.
Use the performance analysis to find relative median gaps, inspect p95 amplification, and see which evidence gates remain. The standalone audit reports preserve the exact records:
- Rust audit
- Historical internal JVM audit
- Android device audit
- Swift audit
- TypeScript/Wasm audit
- Methodology and interpretation
These are descriptive results for the recorded runner or device. They are not universal latency guarantees.