Chronicle in your language
Chronicle in your language
One event-sourcing database, idiomatic clients
Chronicle is an event-sourcing database and processing runtime with a language-agnostic gRPC/protobuf boundary. That means the event store is not tied to one runtime: the first-class .NET SDK and the TypeScript, Kotlin/Java, and Elixir clients all work against the same store, the same events, and the same projections — and a Python client is coming soon. Everything is open source and MIT licensed. Client SDK docs →
Event sourcing for .NET
Section titled “Event sourcing for .NET”The .NET SDK is the first-class Chronicle client: typed access to event stores, event logs, read models, projections, reducers, reactors, constraints, migrations, namespaces, and hosting integration — including a one-line .NET Aspire resource.
dotnet add package Cratis.ChronicleIn an ASP.NET Core application, add Cratis.Chronicle.AspNetCore instead; it brings in the core SDK and the AddCratisChronicle / UseCratisChronicle hosting integration.
- Event sourcing in .NET — the dedicated landing page
- .NET client docs · Get started
Cratis.Chronicleon NuGet- Chronicle on GitHub
Event sourcing for TypeScript and Node.js
Section titled “Event sourcing for TypeScript and Node.js”@cratis/chronicle is the idiomatic TypeScript client for Chronicle, with support for transactions, jobs, webhooks, compliance/PII, and OpenTelemetry. It builds on the @cratis/chronicle.contracts gRPC contracts package.
npm install @cratis/chronicle reflect-metadataThe client uses decorators, so your project also needs experimentalDecorators and emitDecoratorMetadata enabled and must be an ES module project. The TypeScript landing page lists the setup.
- Event sourcing in TypeScript and Node.js — the dedicated landing page
- TypeScript client docs
@cratis/chronicleon npm- Chronicle.TypeScript on GitHub
Event sourcing for Kotlin and Java
Section titled “Event sourcing for Kotlin and Java”io.cratis:chronicle is the idiomatic JVM client for Chronicle, usable from Kotlin and Java alike. It ships with a Spring Boot starter and a testing library.
dependencies { implementation("io.cratis:chronicle:<version>") // Or, in a Spring Boot application: implementation("io.cratis:chronicle-spring-boot-starter:<version>")}Replace <version> with the current release from Maven Central.
- Event sourcing in Kotlin and Java — the dedicated landing page
- Kotlin/Java client docs
io.cratis:chronicleon Maven Central- Chronicle.Kotlin on GitHub
Event sourcing for Elixir
Section titled “Event sourcing for Elixir”cratis_chronicle is the idiomatic Elixir client for Chronicle, with transactions, optimistic concurrency, webhooks, and resilient reconnection.
defp deps do [ {:cratis_chronicle, "~> <version>"} ]endUse the current version from Hex; mix hex.info cratis_chronicle prints it.
- Event sourcing in Elixir — the dedicated landing page
- Elixir client docs
cratis_chronicleon Hex- Chronicle.Elixir on GitHub
Event sourcing for Python — coming soon
Section titled “Event sourcing for Python — coming soon”A Python client for Chronicle is in development. It is pre-release and not yet published to PyPI, so there is nothing to install yet — follow the repository for progress.
- Event sourcing in Python — the coming-soon landing page
- Chronicle.Python on GitHub
Any language, one contract
Section titled “Any language, one contract”Every client speaks the same gRPC/protobuf contracts, so any language with a gRPC implementation can talk to Chronicle. If your runtime is not listed above, you can implement the contracts directly.
The clients other than .NET are released on their own schedules, and their major version numbers do not match the kernel’s. Compatibility explains how to pair a client with a kernel.