simple magicDATA

SMKV / Build applications

Choose an application SDK

Applies to: current development SDK sources. Obtain a matched source bundle and server build through early-access support. These SDKs are not published to public language registries and are not installed by the server APT package.

Supported languages

Language Runtime Execution model Additional requirements
Go Go 1.22+ Concurrent Go source module
Rust Rust 1.89+ Async Tokio Path dependency
Python Python 3.10+ Synchronous, thread-safe No runtime dependencies
Node.js / TypeScript Node.js 22+ Promises, AbortSignal ESM; TypeScript declarations included
C C11, Linux/macOS Blocking OpenSSL 3+, json-c 0.16+, pthread
Java Java 21+ Blocking, thread-safe JNI bridge and C transport
C# / .NET .NET 10 Blocking, thread-safe P/Invoke and C transport
PHP 64-bit PHP 8.2+ Blocking FFI enabled and C transport

Java, .NET, and PHP require the shared libsmkv library; they are not standalone pure-language clients. Native binaries must match the application's OS and architecture. The native batch has been tested on macOS arm64; Linux is a build target but has not yet been qualified. Windows is not supported by the native batch.

Shared operations

The new clients support binary get/put/delete, typed tables, projections, atomic column updates, TTL, explicit replica reads, management-based cluster routing, and optional verified TLS/authentication. Rust, Python, and Node have bounded connection pools. Each C-based handle serializes one persistent connection; use a bounded application pool of handles for concurrency.

All clients preserve signed int64 columns. Node uses bigint; Java uses Long; .NET uses long; PHP requires 64-bit integers and a Bytes wrapper for binary columns. A missing record is an error, distinct from a successful empty value.

For puts, omitted TTL means no expiry. For column updates, omitted TTL preserves the existing expiry. Zero expires immediately. Default writes do not request a disk sync. Local sync, replica acknowledgment, and durable replica acknowledgment are separate options.

Connect safely

A direct client takes a data endpoint, normally port 7379. A cluster client takes management seeds, normally port 7381, then discovers data endpoints. Every advertised endpoint must be reachable from the application. Replica reads are explicitly requested and may be stale.

TLS and token authentication are optional and independent. Data and management security must be configured separately. Verified TLS never automatically downgrades to plaintext. See security configuration for server profiles; each SDK guide explains its client options.

Handle uncertain writes

Inspect the SDK's outcome-unknown indicator before retrying a failed mutation. A timeout or broken connection after sending starts can mean the write completed. Reconcile application state instead of blindly replaying it.

The new SDKs automatically retry only explicit WrongOwner refusals, within the operation deadline. Go additionally supports bounded transient read retries. Do not assume identical retry behavior across languages.

Initial release limits

The seven new SDKs do not yet include scans or batch operations. Use the Go SDK or operational tools for supported scans. Python and the C-based clients have no async API. Python/native DNS resolution can outlive an operation deadline; numeric endpoints avoid that limitation.

Local qualification covers cross-language records, typed rows, restart recovery, RF2 routing, replicas, TLS/authentication, and routing faults. It is not production load or long-duration failover qualification. Match your client limits to server record limits before using unusually large records.