---
title: Events
---

Events are immutable facts that describe what happened in your system. Chronicle identifies events by their event type rather than the .NET CLR type, which makes the CLR type a convenient vessel for expressing intent and structure.

```mermaid
flowchart LR
    T["[EventType] record"] --> A[Append]
    A --> S["Event sequence<br/>(immutable, ordered)"]
    S --> O["Observers<br/>(projections · reducers · reactors)"]
```

```csharp
using Cratis.Chronicle.Events;

[EventType]
public record EmployeeRegistered(string FirstName, string LastName);
```

## Event Sequences and the Event Log

Events live in event sequences, which are ordered, append-only streams. Each event receives a monotonically increasing sequence number that makes it possible to replay events, resume processing, and reason about how far consumers have progressed.

Chronicle includes a specialized event sequence called the event log. It is the default sequence used throughout the system and is exposed through the `IEventLog` API.

```csharp
using Cratis.Chronicle.Events;

public class EmployeesController(IEventLog eventLog)
{
    public Task RegisterEmployee(string firstName, string lastName) =>
        eventLog.Append(Guid.NewGuid(), new EmployeeRegistered(firstName, lastName));
}
```

## Working with Events

Use these topics to append, read, and manage events:

- [Appending](/chronicle/events/appending/)
- [Appending with tags](/chronicle/events/appending-with-tags/)
- [Filtering reducers and reactors](/chronicle/events/filtering/)
- [Appending many](/chronicle/events/appending-many/)
- [Observing appends](/chronicle/events/observing-appends/)
- [Getting events](/chronicle/events/getting-events/)
- [Getting state](/chronicle/events/getting-state/)
- [Concurrency](/chronicle/events/concurrency/)
- [Cross-cutting properties](/chronicle/events/cross-cutting-properties/)
- [Revision](/chronicle/events/revision/)
- [Redaction](/chronicle/events/redaction/)
