Now build it into an app

The CLI proved the round trip. The same thing from your own code is the SDK: sign a user in, find another, send. Below is what exists today, honestly marked, including the parts that are not ready.

Pick a platform

Swift

A Swift Package wrapping an xcframework, for macOS and iOS. Build it from the repository with build-xcframework.sh, add the package, and call Client.signInTls.

Kotlin and Android

An .aar carrying the four Android ABIs. Build it with build-aar.sh, declare it as a dependency, and the surface mirrors Swift: signUpTls, Client.signInTls, find, send, receive.

Rust

The client crate the CLI itself uses. The most direct path if your service is already Rust, and the surface the other bindings are generated from.

The shape of it

Every binding is the same five calls. Sign up a user under your tenant, sign in to get a connected client, resolve another user to an address, send, and receive. Sessions establish themselves on first contact, and the client reconnects and drains anything queued while it was away.

let client = try Client.signInTls(config: config, serverName: "tacenta.com")

if let bob = try client.find(username: "bob") {
    try client.send(to: bob.address, message: Data("hello".utf8))
}

for message in try client.receive() {
    print(String(decoding: message.plaintext, as: UTF8.self))
}

Manage your keys

The key from signup is the first one. Mint more, list what exists, or revoke one that leaked, with the CLI:

tacenta keys create --label ci
tacenta keys list
tacenta keys revoke tct_a1b2c3

Each command prompts for your tenant's email and password rather than reading a saved API key: it manages the tenant's actual keys, a different, tenant-admin credential from the API key context and try use, and there is no tenant session yet for it to hold instead. Nothing is written to disk.

What is not ready

Said plainly, because finding out later wastes your time:

No published package yet
The Swift and Android artifacts build from source. There is no package registry entry and no hosted binary framework, so adding Tacenta means building the artifact yourself for now.
No browser support
There is no web binding. It needs a WebSocket transport, because browsers cannot open the raw TCP connection the SDK uses today.
Group messaging is not implemented
One to one only. Group messaging needs sender keys, which are specified but not built.
Calls are blocking
receive blocks until a message arrives, so it belongs on a background thread. Async versions of the bindings are not done.
Delivery is to connected devices
There is no mobile push integration yet, so a device that is not connected collects its messages when it next connects rather than being woken.

Tell us what broke

The most useful thing you can send is the point where you stopped. Not a bug report, just the step: the command that failed, the doc that said the wrong thing, or the moment you could not tell whether something had worked. Mail info@natuvea.com with the step you got to. Things that worked first time are worth hearing about too, since they tell us what not to change.