Cratis Arc

August 28, 2026 · View on GitHub

Arc is an open-source (MIT) opinionated CQRS application framework for ASP.NET Core with commands, queries, validation, authorization, and TypeScript proxy generation. It works without event sourcing, with optional Chronicle integration.

Arc hosts application behavior, executes command and query pipelines, exposes recognized contracts over HTTP, and generates TypeScript clients for them. Its packages also cover observable queries, validation, identity and tenancy, React integration, current-state persistence, OpenAPI, analyzers, and testing. Chronicle event sourcing and Cratis Components are optional integrations.

Arc reflects a broader Cratis conviction: application plumbing should not be the hard part. Commands, queries, validation, and authorization are written as plain, idiomatic .NET code, designed to reduce friction and boilerplate in service of productivity, quality, and reliability. Arc is part of one deliberately simple ecosystem — AI-friendly by design, with free AI skills for building with the stack.

NuGet NPM .NET Build JavaScript Build

Start here

What Arc owns

BoundaryArc provides
HostingASP.NET Core hosting plus an Arc.Core HTTP host for workers, consoles, and custom services
CommandsModel-bound and controller-based execution, validation, authorization, filters, scopes, typed results, and generated endpoints
QueriesModel-bound and controller-based reads, paging and sorting, observable updates, WebSocket or Server-Sent Events transport, and query diagnostics
ValidationData annotations, FluentValidation, concept/command/query validators, generated client rules, and optional server preflight from React forms
Identity and tenancyPluggable authentication, identity details, role-based authorization, and header, query, claim, subdomain, fixed, or development tenant resolution
Generated contractsTypeScript proxies, referenced types, validation metadata, identity details, incremental output cleanup, and package/type mapping
Frontend packagesTypeScript command/query runtimes, React hooks and forms, dialogs, observable-query composition, and optional React/MVVM integration
Persistence integrationMongoDB and Entity Framework Core current-state adapters plus optional Chronicle-backed event-sourced behavior
Evaluation and toolingOpenAPI, runtime introspection, analyzers, source generators, command scenarios, proxy-generation checks, Vite helpers, and ESLint rules

Each row is a documented capability area, not a promise of compatibility with every package, host, provider, browser, or product version.

Choose a path

Arc documentation is organized around the job you need to complete:

The canonical Arc page remains the front door; product-owned documentation and source carry the detail.

Arc does not require event sourcing

Arc.Core does not depend on Chronicle. Commands and queries can use current-state persistence or application services without an event log. Choose the persistence and integrations that fit each application boundary.

The Chronicle integration is optional and supplies event-sourced behavior when configured. Arc retains its command, query, validation, authorization, and generated-contract boundary.

Chronicle is Cratis's storage-agnostic event-sourcing database and runtime — MIT licensed and free to use; see the Chronicle documentation for its own scope and setup.

Relationship to Components

Components is a React component library aligned with Arc application patterns. See the Components documentation for its packages and setup.

Applications may use Arc without Components and remain responsible for their own frontend, accessibility, browser, and design-system verification.

Start an Arc host

Arc's .NET packages embed this product-family README. The example below uses the umbrella Cratis.Arc package to start an Arc host; when viewing this README from a specialized package page, use that package's manifest and reference documentation for its own installation scope.

Use the .NET SDK declared by Arc's current global.json. Install the host package:

dotnet add package Cratis.Arc

Create and run an Arc host:

using Cratis.Arc;

var builder = ArcApplication.CreateBuilder(args);
builder.AddCratisArc();

var app = builder.Build();
app.UseCratisArc();
await app.RunAsync();

Starting the host confirms the basic Arc setup. Continue with the Arc documentation, and use GitHub Issues when the observed behavior does not match the documentation.

Packages and repository layout

SurfaceRole
Cratis.Arc / Cratis.Arc.Core.NET hosting, command/query pipelines, validation, identity, tenancy, HTTP, introspection, and application conventions
Cratis.Arc.ProxyGenerator.BuildBuild-time TypeScript proxy generation for recognized application artifacts
Cratis.Arc.MongoDB / Cratis.Arc.EntityFrameworkCore*Optional current-state persistence and observation adapters
Cratis.Arc.ChronicleOptional event-sourced command, projection, reducer, aggregate, reactor, tenancy, and compliance integration
Cratis.Arc.OpenApi / Cratis.Arc.SwaggerOptional OpenAPI document transformation for Arc concepts and endpoints
Cratis.Arc.Testing / Cratis.Arc.Chronicle.TestingCommand-scenario and optional Chronicle event/read-model testing helpers
@cratis/arcTypeScript command, query, validation, identity, and messaging runtime used by generated proxies
@cratis/arc.reactReact hooks, forms, dialogs, identity, messaging, and query composition for Arc contracts
@cratis/arc.react.mvvmOptional React/MVVM and dependency-injection integration
@cratis/arc.vite / @cratis/eslint-plugin-arcVite metadata/query helpers and Arc-specific frontend lint rules
Source/DotNET.NET framework source
Source/JavaScriptTypeScript and React package source
DocumentationProduct-owned documentation rendered on cratis.io
TestAppsSample and integration applications used by repository checks

Package existence does not imply compatibility with every frontend, runtime, persistence provider, or product version. Check the package manifests and documentation for the versions you use.

Documentation map

Contributing

Arc is a framework-library repository. Changes to public APIs, analyzers, generated output, and package shapes can affect consumers and require the owning repository's compatibility and release review.

Repository development currently requires the SDK and toolchain versions declared by global.json and package.json. Follow the Cratis contribution guide and the framework instructions before changing public surfaces.

Before submitting documentation-only work, verify its links, anchors, and examples explicitly; current automated documentation checks are path-scoped. Source changes must pass the owning repository's applicable build, specification, TypeScript, and documentation gates.

  • .NET SDK 10.0.400+. Arc's analyzers and source generators are built against Roslyn 5.9.0, which ships with .NET SDK 10.0.400 and newer. On an older SDK band the compiler refuses to load them (CS9057), silently disabling proxy generation and the ARC*/ARCCHR* analyzers. Consuming the Cratis.Arc packages carries the same floor. Raising this floor is a minor version bump.
  • Node 23+
  • Yarn

Community and repository

PathDestination
Questions and discussionCratis Discord
Bugs and feature requestsGitHub Issues
ReleasesGitHub Releases
Documentationwww.cratis.io/arc
Blogblog.cratis.io
Security reportsPrivate security reporting
LicenseLICENSE

The Cratis ecosystem

Arc 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 (this repository) — 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
  • SupportingFundamentals, 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.

Release notes and announcements: the Cratis blog.