Header menu logo FCQRS

Learn FCQRS: one path from zero to production

This is the beginner path. Stay inside these numbered pages on the first pass. Each stage introduces the vocabulary and reasoning it needs, builds on the previous stage, and ends with one clear next step. You do not need to open a concept page or how-to guide to complete the course.

The course builds one document application. Documents can be created and edited. Publishing requires a unique URL slug, so the application eventually adds a second aggregate and a resumable saga. The domain is intentionally small so state, events, projection progress, retries, and recovery remain visible.

0. See one complete request
        |
1. Model one decision
        |
2. Persist, project, and query
        |
3. Coordinate two owners
        |
4. Prove replay and compatibility
        |
5. Prepare the system for failure

Follow the stages in order

Stage

Question answered

What you build

0. Quickstart

What does one FCQRS request do end to end?

One command, stored event, projection, and query

1. The aggregate

Where does a business decision live?

Validated values, command, event, decide, and fold

2. Wiring and running it

How does durable state become query data?

SQLite journal, actor runtime, projection, and read-your-writes

3. Adding a saga

How do independent owners coordinate safely?

Slug aggregate and resumable publication workflow

4. Testing and evolution

How can this system change without breaking history?

Decision, replay, retry, and compatibility tests

5. Preparing for production

What must survive or become visible in production?

Storage, recovery, diagnostics, backup, and deployment checklist

Start at stage 0 even if you know CQRS. It gives the names used throughout the rest of the course. If you already ran one of the repository samples, stage 0 will be a short review.

What you need

dotnet new console -lang F# -n DocStore
cd DocStore
dotnet add package FCQRS
dotnet new console -n DocStore
cd DocStore
dotnet add package FCQRS

Run the project at any point with dotnet run. Chapter 2 creates tutorial.db, which contains the event journal and snapshots. Delete tutorial.db* only when you intentionally want to discard that history and begin again.

Every teaching block has an adjacent F# and C# tab. The executable F# is checked during the docs build. The fuller C# examples use preview discriminated unions; the stable .NET 10 C# sample uses ordinary concrete message types. The course explains the architectural model identically in both languages.

Use the other sections after the course introduces a topic

This separation is deliberate: the learning path teaches in dependency order; the other sections help you deepen or reuse something you have already encountered.

Continue to 0. Quickstart.

Type something to start searching.