Skip to content
Cratis
Search
Ctrl
K
Cancel
Blog
GitHub
Discord
YouTube
Select theme
Dark
Light
Auto
Cratis Stack
Chronicle
Arc
Components
AuthProxy
Screenplay
Prologue
CLI
AI
Templates
Fundamentals
Contributing
Architecture
Overview
Start here
Tutorial
Tutorial
Overview
1. Your first full-stack slice
2. Make it trustworthy
3. Relate your slices
4. Make it live
5. Decide who can do what
Scenarios
Overview
Validate a command
Return a result or an error
Provide data to a command handler
Use current state in a command
Query data across slices
Execute a command from React
Test a command
Concepts and architecture
Why Arc
CQRS without event sourcing
Vertical slices
Understanding the proxy boundary
Understanding identity and access
HTTP contract
Glossary
Backend
Backend overview
C#
Overview
Coming from MediatR and MVC
Getting Started
Quickstart
Standalone ASP.NET Core setup
Your first command and query
Hosting overview
Arc.Core
Arc.Core
Overview
Getting Started
Quickstart
Endpoint Mapping
Static Files
Authentication
Authorization
OpenAPI Specifications
Invariant Culture
ASP.NET Core
Overview
Configuration
Authorization
Microsoft Identity
FromRequest Attribute
Swagger
Validation
Without Wrappers
Invariant Culture
Configuration
Commands
Overview
Model-bound commands
Overview
Authorization
Controller-based commands
Validation
Pre-flight validation
Validation severity filtering
Command pipeline
Command operations
Overview
Implement an operation
Migrate a service-backed command
Execution and recovery reference
Response value handlers
Response examples
Command context
Command filters
Command execution scopes
Transactions (optional Chronicle integration)
Queries
Overview
Model-bound queries
Overview
Static methods
Dependency injection
Query arguments
Authorization
Return types
Paging
Observable queries
Controller-based queries
Overview
Route templates
Query arguments
Dependency injection
Return types
Paging
Observable queries
Validation
Query pipeline and result contract
Use the HTTP QUERY method
Use observable queries with cURL
Observable query hub protocol
Change streams
Read-model interception
Observable query emission guards
Query health endpoint
Authorizing commands and queries
Identity
Identity
Provider Flow
Identity Contracts
IdentityProvider Service
Development and Topologies
Tenancy
Overview
Resolving Tenant IDs
Configuration
Tenant Context Access
Database Isolation
MongoDB
Overview
Getting Started
Quickstart
Serializers
Geospatial Types
Overview
Point
LineString
Polygon
Concepts
Naming Policies
Class Mapping
Convention Packs
Observing Collections
Watching Multiple Collections
Tenancy
Entity Framework
Overview
Getting Started
Quickstart
Base DbContext
Entity Mapping
Read Only DbContexts
Automatic Database hookup
Observing DbSet
Common Column Types
Adding Columns in Migrations
Property Extensions
JSON Conversion
ConceptAs Conversion
GUID Conversion
Geospatial Types
Point Conversion
LineString Conversion
Polygon Conversion
Proxy Generation
Overview
Getting Started
Quickstart
Configuration
Overview
Basic Options
Library Mode
Emit Interfaces
Type Exclusions
Namespace Roots
Assembly-to-Package Mappings
Routing
Output Behavior
Commands
Queries
Type Mapping
Validation
Identity Details
File Index Tracking
Linting Generated Proxies
Code Analysis
Code Analysis Rules
ARC0001 - Incorrect query method signature on ReadModel
ARC0002 - Missing [Command] attribute on command-like type
ARC0003 - Handle() must be on [Command] type
ARC0004 - [Command] type must have public Handle() method
ARC0005 - Value produced by Provide is not consumed by Handle
ARC0006 - Command-scoped read model can be missing
OpenAPI
Overview
Concepts
Commands
Queries
Enums
FromRequest Attribute
Model-Bound Operations
Introspection
Overview
Commands
Queries
Identity details schema
Attribute reference
Observability
Testing
Overview
Test decisions and the pipeline
Test command operations
Specify operation failure cases
Test operations with Chronicle
Test event-sourced commands
Command Scenarios
Chronicle
Chronicle
Overview
Add event sourcing to an Arc slice
Cratis Package
Commands
Overview
Events
Setting Subject
Returning EventSourceId
Causation
Transactional commands
Concurrency
Resolving EventSourceId
Read Models
Overview
Read models in commands
Read models from other providers
When resolution fails
Validation
Aggregates
Overview
Defining an aggregate root
Aggregate roots in commands
React to an event
Reactors
Overview
Returning Commands as Side Effects
Tenancy
Compliance
Overview
PII
Subject
Code Analysis
Code Analysis Rules
ARCCHR0001 - Incorrect aggregate root event handler signature
ARCCHR0002 - Ambiguous command identity
ARCCHR0003 - Reactor must not reach the default event log
ARCCHR0004 - [EventType] repeats the type name as its id
ARCCHR0005 - Chronicle is used but not wired up
ARCCHR0006 - Reactor handler invoking ICommandPipeline.Execute does not say what replay should do
ARCCHR0007 - Command handler injects IEventLog
ARCCHR0008 - Command key marked with the data annotations Key attribute
ARCCHR0009 - Command property reads as a secret and should be marked [NotAudited]
ARCCHR0010 - Raw Guid response does not set the event source id
Generating a principal for local development
Generating a Screenplay
Kotlin and Java
Overview
Why Arc for Kotlin and Java
Coming from Spring MVC
Get started
Get started with Kotlin
Overview
Get started with Java
Commands
Command keys
Queries
Observable queries
Validation
Authentication and authorization
Tenancy
Pipeline filters
Execution scopes
Spring Data
Overview
Map JPA concepts
Map MongoDB concepts
Repositories in queries and commands
Observable storage snapshots
Read-model naming
Proxy Generation
Code Analysis
OpenAPI
Using the generated client
Observability
Testing
Chronicle
Reference
Reference
Overview
Annotations
Configuration
HTTP contract
Shared fluent validation
TypeScript proxy options matrix
Glossary
Feature parity
Troubleshooting and FAQ
Frontend
Overview
Core
Overview
Commands
Overview
Command Result
Validation
Command Contracts
Configuration
Validation And Results
Backend Integration
Validation
Overview
Rules And Fluent API
Command And Query Integration
Validation Results
Severity Filtering
Queries
Overview
Query Contracts
Configuration
Validation And Behavior
Backend Integration
Identity
Messaging
React
Overview
Getting started
Quickstart
Arc
Identity
Dialogs
Messaging
Commands
Overview
React Usage
Data Binding
Validation
Scope
Imperative Usage
CommandForm
Overview
Field Types
Overview
InputTextField
NumberField
TextAreaField
CheckboxField
RadioButtonField
RadioGroupField
RangeField
SelectField
Creating Custom Fields
Validation
Auto Server Validation
Customization
Layouts
Working with Hooks
Data Loading
Form Lifecycle
Advanced Patterns
Queries
Overview
Configuration
Core Query Usage
Paging
Observable Queries
Observable Query Diagnostics
Suspense Queries
Conditional Queries
Change Stream
Observable Query Multiplexing
Query Instance Caching
Scope
Vite Configuration
Proxy Generation
MVVM with React
Overview
MVVM Context
Using ViewModel
TSyringe
Dialogs
Browser
Messaging
Identity
Story Components
Overview
Components
Styling
Theme Support
Storybook
Operations and reference
Troubleshooting
Blog
GitHub
Discord
YouTube
Select theme
Dark
Light
Auto
Arc reference
Copy Markdown
Open
Open in ChatGPT
Open in Claude
View in Markdown
Reference sections
Section titled “Reference sections”
Annotations
Configuration
HTTP contract
Shared fluent validation
TypeScript proxy options matrix
Glossary
Feature parity