Skip to main content

Client SDKs

Angzarr provides client libraries for multiple languages, enabling polyglot teams to build event-sourced applications using their preferred language.

Client Libraries Are Optional

Any language with gRPC support can integrate with Angzarr using the proto bindings alone — the client libraries simply reduce boilerplate. If your language isn't listed below, you can generate gRPC stubs from the proto definitions and interact with Angzarr directly.

Supported Languages

Client libraries are provided for the top TIOBE languages. Additional languages (Ruby, Kotlin, TypeScript, etc.) can be added as demand materializes — the libraries are intentionally lightweight, so adding new language support is straightforward.

LanguagePackageStatus
Rustangzarr-clientProduction
Gogithub.com/benjaminabbitt/angzarr/client/goProduction
Pythonangzarr-clientProduction
Javadev.angzarr:angzarr-clientProduction
C#Angzarr.ClientProduction
C++angzarr-clientProduction

Installation

[dependencies]
angzarr-client = "0.1"

Quick Start

Connect to an aggregate coordinator and send a command:

use angzarr_client::DomainClient;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = DomainClient::connect("http://localhost:1310").await?;

let response = client.aggregate.handle(command).await?;

Ok(())
}

Client Types

All SDKs provide the same set of client types:

ClientPurpose
QueryClientQuery events from aggregates
AggregateClientSend commands to aggregates
SpeculativeClientDry-run commands without persistence
DomainClientCombined query + aggregate for a domain
ClientFull client with all capabilities

SDK Contents

Language-Specific Documentation

Each SDK has its own repository with detailed documentation:

LanguageRepository
Rustangzarr-client-rust
Goangzarr-client-go
Pythonangzarr-client-python
Javaangzarr-client-java
C#angzarr-client-csharp
C++angzarr-client-cpp