Softchat
Build Softchat clients without rebuilding the protocol.
Softchat implements validation, cryptography, private envelopes, chat projections, relay state, synchronization, and attachment transforms once in Rust, then exposes reviewed APIs for every supported language.
What the SDK is
Softchat is a protocol SDK, not an application framework. It gives an application deterministic, bounded operations for:
- local and external identities;
- NIP-01, NIP-19, NIP-44, NIP-59, NIP-17, NIP-42, NIP-77, and NIP-98;
- Softchat chat, account, and application-data events;
- relay frames, batches, delivery state, and ingestion acknowledgements;
- the deployed Noise NK transport profile and Negentropy reconciliation; and
- attachment metadata plus bounded streaming encryption and decryption.
The same authenticated raw event remains the source of identity in every language. Typed chat and account objects are projections; they never rewrite the tags that produced an event ID.
What stays in your application
Your platform continues to own WebSockets, HTTP, databases, files, background work, clocks, secure-key acquisition, notifications, and UI. Softchat consumes complete values and emits immutable results or explicit action plans. See the boundary guide before integrating a platform service.
One semantic core
Protocol rules, bounds, cryptography, and projections live in Rust.
Five developer surfaces
Rust, Kotlin, Android, Swift, and TypeScript use their normal value and lifecycle conventions.
Generated internals stay internal
Consumers import only the authored package. UniFFI, JNA, C, and raw wasm-bindgen symbols are implementation details.
Choose a language once
Code examples throughout this site share one selector. Choosing Android here
also selects Android on the relay, media, and diagnostics pages. The selected
language is stored locally and is shareable with ?lang=android.
- Rust
- Kotlin
- Android
- Swift
- TypeScript
use softchat::{LocalIdentity, NostrPublicKey};
import com.softcose.softchat.protocol.SoftchatIdentity
import com.softcose.softchat.protocol.SoftchatIdentity
The Android AAR exposes the same Kotlin API and includes its native libraries.
import SoftchatKit
import { SoftchatIdentity } from "@softcose/softchat";
Maturity
The API and packages are still pre-release. Repository-built artifacts are tested in clean consumers, but the canonical packages are not yet promised as stable registry releases. Production cutover still requires physical iOS validation, a second Android device, platform persistence adapters, package signing, and release-channel policy.
This site documents source 465574c0b14d. It describes current behavior, while
the decision register records the rules that must remain
consistent across languages.