---
title: Cross-cutting properties
editUrl: https://github.com/Cratis/Chronicle/edit/main/Documentation/events/cross-cutting-properties.mdx
description: You can add properties to all events that are appended without requiring each event type to define the fields. This is useful for metadata such as…
---

import { Tabs, TabItem } from '@astrojs/starlight/components';

You can add properties to all events that are appended without requiring each event type to define the fields. This is useful for metadata such as correlation identifiers, tenant identifiers, or system-generated values that should not be set by domain code.

To provide cross-cutting properties, implement `ICanProvideAdditionalEventInformation`:

<Tabs syncKey="chronicle-client">
<TabItem label="C#">

```csharp
using System.Text.Json.Nodes;
using Cratis.Chronicle.Events;

public class CrossCuttingAdditionalEventInformationProvider : ICanProvideAdditionalEventInformation
{
    public Task ProvideFor(JsonObject @event)
    {
        @event.Add("something", Guid.NewGuid());
        @event.Add("someTime", DateTimeOffset.UtcNow);
        return Task.CompletedTask;
    }
}
```

[View C# snippet source on GitHub](https://github.com/Cratis/Chronicle/blob/main/Documentation/client-snippets/events/cross-cutting-properties/provider.md)

</TabItem>
<TabItem label="Kotlin">

```text
Kotlin does not support this workflow yet.
```

[View Kotlin snippet source on GitHub](https://github.com/Cratis/Chronicle.Kotlin/blob/main/Documentation/client-snippets/events/cross-cutting-properties/provider.md)

</TabItem>
<TabItem label="Java">

```text
Java does not support this workflow yet.
```

[View Java snippet source on GitHub](https://github.com/Cratis/Chronicle.Kotlin/blob/main/Documentation/client-snippets-java/events/cross-cutting-properties/provider.md)

</TabItem>
<TabItem label="Elixir">

```text
Elixir does not support this workflow yet.
```

[View Elixir snippet source on GitHub](https://github.com/Cratis/Chronicle.Elixir/blob/main/Documentation/client-snippets/events/cross-cutting-properties/provider.md)

</TabItem>
<TabItem label="TypeScript">

```text
TypeScript does not support this workflow yet.
```

[View TypeScript snippet source on GitHub](https://github.com/Cratis/Chronicle.TypeScript/blob/main/Documentation/client-snippets/events/cross-cutting-properties/provider.md)

</TabItem>
</Tabs>

Chronicle will discover providers automatically and apply the additional properties during event append.
