The shared building blocks beneath the Cratis stack — concepts, serialization, dependency injection, and type discovery for .NET and TypeScript.
The Cratis Fundamentals holds generic reusable helpers, utilities and tools that aims at solving common problems and help developers be more productive. Fundamentals offers functionality for .NET and JavaScript environments. It is not a goal to have parity, as the different environments offer different building blocks.
You should look at it as a convenience layer on top of the existing base environment you're running in.
Fundamentals underpins the rest of the Cratis stack: Chronicle (the event-sourcing database and runtime), Arc (the CQRS application framework for ASP.NET Core), and Components (the React component library) all build on it — and you can use it on its own.
Read more about how to use it in the Fundamentals documentation.
Cratis is an open community, and we are glad to help users, teams evaluating the stack, and contributors.
| Channel | Details |
|---|---|
| Discord | Join the community on Discord for questions and discussions |
| GitHub Issues | Report bugs or request features |
| Documentation | Read the docs at cratis.io |
If you want to jump into building this repository and possibly contributing, please refer to contributing.
The following are prerequisites to work with this repository.
This repository leverages Central Package Management, which means that all package versions are managed from a file at the root level called Directory.Packages.props.
In addition there are also Directory.Build.props files for setting up common settings that are applied cross cuttingly.
The package.json found at the root level defines all the workspaces. It is assumed
All developer dependencies are defined in the top level package.json. The reason for this is to be able to provide global scripts
for every package to use for easier maintenance.
The package.json found at the top level contains scripts that can then be used in a child project for this to work properly.
In a package, all you need to do is to define the scripts to use the global scripts in the `package.json´ of that project:
{
"scripts": {
"prepublish": "yarn g:build",
"clean": "yarn g:clean",
"build": "yarn g:build",
"lint": "yarn g:lint",
"lint:ci": "yarn g:lint:ci",
"test": "yarn g:test",
"ci": "yarn g:ci",
"up": "yarn g:up"
}
}This project 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
- Model-first layer (experimental) — Studio, Screenplay, Stage, Scene, Prologue
- Supporting — Fundamentals, Specifications, Synopsis, Lens, Narrator, and free AI tooling (preview); Ensemble coming soon (pre-release)
- Samples — runnable event sourcing and CQRS samples for the whole stack
Everything Cratis publishes today is MIT licensed and free to use.
Join the community on Discord.
Release notes and announcements: the Cratis blog.