Skip to content

Client Types

Chronicle provides several types of clients, each designed for specific scenarios and use cases. All client implementations are found in ./Source/Clients at the root of the Chronicle repository. Client types include standard clients, test clients, and REST APIs.

The various client projects have the following dependency hierarchy:

XUnit.Integration

XUnit

ClientIntegration

AspNetCore

DotNET

Orleans

Connections

Infrastructure

Contracts

Api

All clients share a set of foundational building blocks, used either directly or indirectly:

The Connections project provides abstractions for managing connections to the Chronicle Kernel and maintaining their lifecycle. It also defines the ChronicleConnectionString type.

All gRPC protobuf data and service definitions are created in a code-first manner using the protobuf-net.Grpc package. These definitions are referred to as contracts.

The Infrastructure project, located at ./Source/Infrastructure, contains shared infrastructure components used by both the Kernel and the clients. It is not part of the Clients folder.

Most clients are built on top of the common .NET client, which serves as the idiomatic C# entry point to the Kernel API surface. It relies on the gRPC contracts for communication. The goal is to provide a C#-friendly API that is intuitive and easy to use. For more details, see the .NET client documentation.

The Integration/Client project hosts the shared .NET integration specifications and can run them against either an in-process kernel or an out-of-process Chronicle container.

The ASP.NET Core client enables seamless integration with Chronicle in ASP.NET Core applications. It provides extension methods for WebApplicationBuilder to simplify configuration and setup.

For unit-level testing, the XUnit project provides helpers that allow you to write tests without depending on infrastructure.

The XUnit.Integration project focuses on full-stack testing with all infrastructure in place. It provides test setup for both in-process and out-of-process scenarios.

The Orleans project enables deeper integration with Microsoft Orleans, allowing you to leverage Orleans features alongside Chronicle. For example, it provides an AggregateRoot implementation as a Grain, turning aggregates into actors.

The API project contains all REST endpoints used by the Workbench. For more information, see the API documentation.