@cratis/chronicle

中文文档
6.62.0发布于 2026/11/10MITTypeScriptES Module构建来源已验证近 30 天下载 3491

Event sourcing for TypeScript and Node.js — the idiomatic client for Cratis Chronicle, the open-source event-sourcing database

原始使用文档
文档目录6 节
  1. Overview
  2. Installation
  3. Quick Example
  4. Decorators and TypeScript configuration
  5. Documentation
  6. The Cratis ecosystem

Chronicle TypeScript Client

Event sourcing for TypeScript and Node.js — the idiomatic client for Cratis Chronicle.

npm Build License Discord

Chronicle is an event-sourcing database and processing runtime with a first-class .NET SDK and additional TypeScript, Kotlin/Java (JVM), and Elixir clients — with a Python client coming soon — plus pluggable storage-provider implementations including MongoDB (default), PostgreSQL, SQL Server, and SQLite. This package is the TypeScript client.

Overview

@cratis/chronicle provides a clean, type-safe TypeScript API for interacting with the Chronicle Kernel. It builds on top of @cratis/chronicle.contracts (the gRPC contracts package) and exposes idiomatic TypeScript constructs including:

  • Decorators — @eventType, @eventTypeMigration, @reactor, @reducer, @seeder, @constraint, @projection, graph decorators such as @node and @edge, and model-bound decorators such as @fromEvent
  • Value objects — EventSequenceNumber, EventTypeId, EventStoreName, etc.
  • Fluent client — ChronicleClient → EventStore → EventLog → append()

Beyond appending and observing events, the client covers the full Chronicle surface:

  • Transactions — group appends into a unit of work with a single commit
  • Jobs — inspect and control long-running kernel jobs
  • Webhooks — push events to HTTP endpoints
  • Compliance / PII — classify event data and handle personally identifiable information
  • OpenTelemetry — built-in metrics and tracing instrumentation

Installation

npm install @cratis/chronicle @cratis/fundamentals reflect-metadata

Requirements:

  • Node.js 22.19 or later. The undici dependency requires it, and the package fails to import on Node.js 20.
  • The package ships ES modules only. Use it from an ES module project, or require() it on a Node.js version with require(esm) support.
  • A running Chronicle kernel. The easiest local setup is the development Docker image, published on this machine only:
docker run -d --name chronicle -p 127.0.0.1:35000:35000 cratis/chronicle:latest-development

Quick Example

import 'reflect-metadata';
import { field } from '@cratis/fundamentals';
import { ChronicleClient, ChronicleOptions, eventType } from '@cratis/chronicle';

@eventType()
class EmployeeHired {
    @field(String) firstName!: string;
    @field(String) lastName!: string;

    constructor(firstName: string, lastName: string) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}

const client = new ChronicleClient(ChronicleOptions.development());
const store = await client.getEventStore('MyStore');
const result = await store.eventLog.append('employee-123', new EmployeeHired('Jane', 'Doe'));
console.log(`Appended at sequence number ${result.sequenceNumber.value}`);
client.dispose();

Decorators and TypeScript configuration

Chronicle decorators work with both TC39 standard decorators (TypeScript 5.2+; do not enable experimentalDecorators) and legacy decorators (experimentalDecorators: true). Keep reflect-metadata imported at your entry point for Chronicle's runtime metadata storage. In standard mode, TypeScript does not emit design:type or design:paramtypes; declare event and read-model fields with @field(Type) from @cratis/fundamentals so Chronicle can generate their schemas. For arrays, provide an element type with @field(Array, { genericArguments: [ItemType] }). For a ConceptAs<string> or ConceptAs<number>, declare static readonly valueType = String, Number, Boolean, Guid, or Date on the concept class. Member-less event types and read models are valid. Unresolved standard-mode types fail on first schema read or during connection before Kernel registration; property decorators support public instance fields, not standard accessors or getters.

Read models are inferred from @projection('id', Model), @reducer('id', sequenceId, Model), or an exported model with @fromEvent(Event) or other model-bound property mappings. Their schema comes from the model type; the default identifier is its class name. See read models for preserving existing custom identifiers.

Decorated artifacts register when their modules are imported. When the entry file is TypeScript (run through a loader such as tsx), the client also scans **/*.ts files by default; compiled JavaScript scans nothing unless you set discoveryPatterns. See artifact discovery.

The client skips TLS certificate validation unless the connection string sets skipTlsValidation=false (the default stays true in this release; an explicit false requires validation). Set it for every server other than a local development kernel; the client logs a warning when it skips validation for a non-loopback host; see Connect to Chronicle.

Documentation

Read the TypeScript client documentation, starting with Get started with the TypeScript client. The Chronicle documentation explains the concepts, with TypeScript examples.

The Cratis ecosystem

This package is part of Cratis — free, MIT-licensed tools for building event-sourced and CQRS applications.

  • Chronicle — event-sourcing database and runtime. Orleans-based kernel, pluggable storage (MongoDB default; PostgreSQL, SQL Server, SQLite, in-memory), language-agnostic gRPC contracts. Docs
  • Chronicle clients — first-class .NET SDK, plus TypeScript, Kotlin/Java, and Elixir; Python coming soon (pre-alpha). AI agents connect through the Chronicle MCP server.
  • Arc — opinionated CQRS framework for ASP.NET Core with commands, queries, validation, authorization, and TypeScript proxy generation. Works without event sourcing. Docs
  • Components — React components aligned with Arc patterns. Docs
  • CLI + Workbench — inspect and diagnose Chronicle from the terminal or the browser. Docs
  • Samples — runnable event sourcing and CQRS samples for the whole stack

Everything Cratis publishes today is MIT licensed and free to use.


Part of the Cratis platform · Licensed under the MIT license

版本与发布记录

@cratis/chronicle 共发布 103 个版本,首次发布于 2026/05/11;过去 12 个月发布了 103 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
6.62.0latest2026/11/10今天
6.61.02026/11/101 天前
6.60.02026/11/101 天前
6.59.02026/11/092 天前
6.58.02026/11/055 天前
6.57.02026/11/056 天前

关于 @cratis/chronicle 的常见问题

@cratis/chronicle 是什么?

Event sourcing for TypeScript and Node.js — the idiomatic client for Cratis Chronicle, the open-source event-sourcing database

如何安装 @cratis/chronicle?

在项目目录运行 npm install @cratis/chronicle,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@cratis/fundamentals(^7.24.1)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@cratis/chronicle 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@cratis/chronicle 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@cratis/chronicle 可以商用吗?

@cratis/chronicle 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@cratis/chronicle 的下载量有多少?

根据 npm 官方下载统计,@cratis/chronicle 在 2026/10/11 – 2026/11/09 这 30 天内被下载 3,491 次,日均约 116 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@cratis/chronicle 还在维护吗?

最新版本 6.62.0 发布于 2026/11/10(今天);至今共发布 103 个版本,其中过去 12 个月发布了 103 个;首次发布于 2026/05/11。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。