TimeWarp.State
12.0.0-beta.8
Prefix Reserved
See the version list below for details.
dotnet add package TimeWarp.State --version 12.0.0-beta.8
NuGet\Install-Package TimeWarp.State -Version 12.0.0-beta.8
<PackageReference Include="TimeWarp.State" Version="12.0.0-beta.8" />
<PackageVersion Include="TimeWarp.State" Version="12.0.0-beta.8" />
<PackageReference Include="TimeWarp.State" />
paket add TimeWarp.State --version 12.0.0-beta.8
#r "nuget: TimeWarp.State, 12.0.0-beta.8"
#:package TimeWarp.State@12.0.0-beta.8
#addin nuget:?package=TimeWarp.State&version=12.0.0-beta.8&prerelease
#tool nuget:?package=TimeWarp.State&version=12.0.0-beta.8&prerelease
<img src="https://raw.githubusercontent.com/TimeWarpEngineering/timewarpengineering.github.io/refs/heads/master/images/LogoNoMarginNoShadow.svg" alt="logo" height="120" style="float: right" />
TimeWarp.State
TimeWarp.State (previously known as Blazor-State) is a fully asynchronous state management library for Blazor applications, leveraging the res pipeline to implement the Flux pattern. It handles both Reducers and Effects consistently using async Handlers, simplifying the management of asynchronous operations throughout your app.
By utilizing the TimeWarp.Mediator pipeline, TimeWarp.State enables a flexible, middleware-driven architecture for managing state, similar to the request-processing pipeline in ASP.NET. This approach allows developers to inject custom behaviors, such as logging, validation, and caching, directly into the state management flow.
Hosts consume TimeWarp.Mediator 14-beta via generated AddGeneratedMediator<ClientPipeline>() / named pipelines — not MediatR and not reflection AddMediator().
In addition to the core library, we offer TimeWarp.State.Plus (routing, persistence, action tracking) and TimeWarp.State.Telemetry (OpenTelemetry action spans for the Aspire dashboard or any OTel backend). The persistence sample shows session storage and local storage with [PersistentState]. The render control sample shows ShouldRender, parameter checks, and RegisterRenderTrigger.
Give a Star! ⭐
If you find this project useful, please give it a star. Thanks!
Getting Started
I recommend the tutorial for a step-by-step guide to building a Blazor app with TimeWarp.State.
See full documentation.
<img src="https://raw.githubusercontent.com/TimeWarpEngineering/timewarp-state/refs/heads/master/documentation/images/time-warp-state-one-way-flow.drawio.svg" alt="logo" height="400" style="" />
Installation
dotnet add package TimeWarp.State
dotnet add package TimeWarp.State.Plus
dotnet add package TimeWarp.State.Telemetry
Check out the latest NuGet packages on the TimeWarp Enterprises NuGet page.
JavaScript dispatch
JavaScript can dispatch actions with timeWarpState.DispatchRequest(name, request). It is opt-in: allow each action explicitly, everything else is rejected.
builder.Services.AddJavaScriptDispatch(b => b.Allow<CounterState.IncrementCountActionSet.Action>());
See Enable JavaScript interop.
Action catalog
Mark user-facing actions with [CatalogAction] to enumerate and execute them at runtime, for example from a Ctrl-K command palette or as agent tools:
public static class AddPasskeyActionSet
{
[CatalogAction(Description = "Add a passkey to the signed-in account.", Permissions = ["credentials.write"])]
public sealed class Action : IAction
{
public Action(string label) { Label = label; }
public string Label { get; }
}
}
builder.Services.AddActionCatalog(typeof(AssemblyMarker).Assembly);
ActionCatalogEntry entry = actionCatalog.Find("Credentials.AddPasskey")!;
await entry.Execute(store, ["Laptop"]);
The source generator emits a per-assembly registry with name, description, permissions, visibility, parameters and input schema, plus a reflection-free Execute. It is opt-in: unmarked actions are never cataloged. Permissions are opaque ids that the consumer enforces; [TrackAction] (busy indicator) is unrelated. See Action catalog.
Releases
View the Release Notes for detailed information on each release.
Unlicense
This project is licensed under the Unlicense.
Contributing
Your contributions are welcome! Before starting any work, please open a discussion.
Help with the documentation is also greatly appreciated.
Contact
If you have an issue and don't receive a timely response, feel free to reach out on our Discord server.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- AnyClone (>= 1.1.6)
- JetBrains.Annotations (>= 2026.2.0)
- Microsoft.AspNetCore.Components.Web (>= 10.0.12)
- Microsoft.CodeAnalysis.CSharp (>= 4.14.0)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.12)
- TimeWarp.Mediator.Contracts (>= 14.0.0-beta.1)
- TypeSupport (>= 1.2.0)
NuGet packages (4)
Showing the top 4 NuGet packages that depend on TimeWarp.State:
| Package | Downloads |
|---|---|
|
TimeWarp.State.Plus
TimeWarp.State.Plus extends TimeWarp.State and TimeWarp.State.Blazor with routing, persistence, and action tracking. |
|
|
TimeWarp.State.Policies
Policies for TimeWarp State management library |
|
|
TimeWarp.State.Blazor
Blazor components, JavaScript interop, and render subscriptions for TimeWarp.State. |
|
|
TimeWarp.State.Telemetry
OpenTelemetry instrumentation for the TimeWarp.State mediator pipeline: action spans, timing, and opt-in AOT-safe state snapshots. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 12.0.0-beta.15 | 127 | 10/16/2026 |
| 12.0.0-beta.14 | 75 | 10/16/2026 |
| 12.0.0-beta.13 | 215 | 10/13/2026 |
| 12.0.0-beta.12 | 64 | 10/12/2026 |
| 12.0.0-beta.11 | 64 | 10/12/2026 |
| 12.0.0-beta.10 | 176 | 10/9/2026 |
| 12.0.0-beta.9 | 112 | 10/9/2026 |
| 12.0.0-beta.8 | 168 | 10/5/2026 |
| 12.0.0-beta.7 | 92 | 10/1/2026 |
| 12.0.0-beta.6 | 108 | 9/30/2026 |
| 12.0.0-beta.5 | 78 | 9/24/2026 |
| 12.0.0-beta.3 | 197 | 9/17/2026 |
| 12.0.0-beta.1 | 2,307 | 8/20/2025 |
| 11.0.3 | 17,464 | 6/20/2025 |
| 11.0.2 | 282 | 6/20/2025 |
| 11.0.1 | 260 | 6/20/2025 |
| 11.0.0 | 4,289 | 12/10/2024 |
| 11.0.0-beta.96 | 126 | 12/5/2024 |
| 11.0.0-beta.95 | 140 | 12/3/2024 |
| 11.0.0-beta.94 | 149 | 12/3/2024 |