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
-
receiveblocks 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.