Idiomatic, hand-written client libraries are available for ten languages.
Each wraps the same gRPC API, takes the same connection config (host, port,
api_key, optional TLS CA cert), and wraps the core collection, record, index,
single-collection transaction (BeginTx/CommitTx/RollbackTx), Aggregate,
Compact, Snapshot and streaming Find/Watch calls, plus the cross-collection
transaction methods (BeginXTx, StageXTx, GetXTx, CommitXTx, RollbackXTx,
XTxStatus). They do not wrap Replicate, ReplicationStatus and Promote; for
those, use the generated gRPC stubs (bundled in each SDK, built from
proto/scriva.proto) or REST where a route exists. Snapshot and Replicate are
gRPC-only (no REST route).
Unknown commit outcomes. If CommitXTx fails with XTX_OUTCOME_UNKNOWN (gRPC UNKNOWN)
or XTX_IN_PROGRESS (UNAVAILABLE), never retry the commit blindly. Call XTxStatus with the
error’s status_ref (or the idempotency key you chose at begin): COMMITTED means success,
ABORTED/EXPIRED permits a new transaction, and PENDING means poll with backoff. Choose and
keep an explicit idempotency key if a commit must be recoverable across a server restart. Inspect
the scriva.xtxErrorInfo reason, never the message text. Contract:
SDK transaction contract.
Verification status. The table below is what was actually run locally; “unverified” SDKs have the
code and (where noted) tests but could not be executed by the release verifier, so treat their
cross-collection transaction support as unverified until CI or a maintainer runs them.
SDK
XTx methods
Local verification (2026-10-20)
Python
yes
Unverified — pytest/grpcio not installed on the verifier; tests/test_xtx.py not run
Unverified — no .NET SDK available; only XTxErrorTests.cs exists, not run
Java
yes
Verified — XTxClientTest passes (ExampleTest needs a live server and was not run)
Kotlin
yes
Verified — ./gradlew test passes (8 tests)
Scala
yes
Verified — sbt test passes (7 tests)
Clojure
yes
Verified — lein test passes (7 tests, 30 assertions)
Versions. The SDKs are versioned independently of the server (currently 1.2.1, unchanged by
the XTx additions, which are additive: existing BeginTx/CommitTx/RollbackTx are unchanged). The
next SDK release should be a minor bump (1.3.0) per SemVer once the unverified SDKs are run; the
XTx methods need a server that supports BeginXTx (v1.6.0+).
PHP — not on Packagist. The srjn45/scriva package has not been submitted to
Packagist. To install it, add a VCS repository entry to your composer.json and
then run composer install:
Prefer to generate a client, or working in a language without a hand-written
SDK? The checked-in OpenAPI spec (docs/openapi/scriva.swagger.json) is
generated from the proto and describes the 29 REST-annotated operations. The five
gRPC-only RPCs (BeginTx, CommitTx, RollbackTx, Snapshot, Replicate) are not
in it; generate gRPC stubs from proto/scriva.proto to reach them. Feed the spec to
openapi-generator for any language.
See the API reference for details on the gRPC and
REST surfaces.