# Global State - Hot Chocolate

> Share per-request data across all Hot Chocolate resolvers and middleware with Global State, initialized at request start and accessed via [GlobalState].

Canonical source: https://chillicream.com/docs/hotchocolate/server/global-state

Global State lets you define properties on a per-request basis and makes them available to all resolvers and middleware.

## Initializing Global State

Add Global State using the `SetProperty` method on the `OperationRequestBuilder`. This method takes a `key` and a `value` as arguments. The `key` must be a `string`, and the value can be of any type.

Using an interceptor lets you initialize Global State before the request is executed.

C#

```
public class HttpRequestInterceptor : DefaultHttpRequestInterceptor
{
    public override ValueTask OnCreateAsync(HttpContext context,
        IRequestExecutor requestExecutor, OperationRequestBuilder requestBuilder,
        CancellationToken cancellationToken)
    {
        string userId =
            context.User.FindFirst(ClaimTypes.NameIdentifier)?.Value;

        requestBuilder.SetProperty("UserId", userId);
        // requestBuilder.SetProperty("IntegerValue", int.Parse(userId));
        // requestBuilder.SetProperty("ObjectValue", new User { Id = userId });

        return base.OnCreateAsync(context, requestExecutor, requestBuilder,
            cancellationToken);
    }
}
```

[Learn more about interceptors](https://chillicream.com/docs/hotchocolate/server/interceptors)

## Accessing Global State

Access Global State in your resolvers as follows.

C#

```
public class Query
{
    public string Example1([GlobalState("UserId")] string userId)
    {
        // Omitted code for brevity
    }

    public string Example2([GlobalState("ObjectValue")] User user)
    {
        // Omitted code for brevity
    }
}
```

The `GlobalStateAttribute` accepts the `key` of the Global State `value` as an argument. An exception is thrown if no Global State value exists for the specified `key` or if the `value` cannot be coerced to the type of the argument.

Creating a custom attribute that inherits from `GlobalStateAttribute` is a good practice:

C#

```
public class UserIdAttribute : GlobalStateAttribute
{
    public UserIdAttribute() : base("UserId")
    {

    }
}

public class Query
{
    public string Example([UserId] string userId)
    {
        // Omitted code for brevity
    }
}
```

## Next Steps

- [Interceptors](https://chillicream.com/docs/hotchocolate/server/interceptors) for initializing state before request execution.
- [Dependency Injection](https://chillicream.com/docs/hotchocolate/resolvers/dependency-injection) for injecting services into resolvers.
[Edit this page on GitHub](https://github.com/ChilliCream/graphql-platform/edit/main/website/content/docs/hotchocolate/server/global-state.md)

Last updated on **June 30, 2026** by **Tobias Tengler**
