diff --git a/docs/en/Community-Articles/2026-10-02-State-Without-a-Circuit:-TempData-and-Session-in-Blazor-.NET-11-Static-SSR/images/feedback.gif b/docs/en/Community-Articles/2026-10-02-State-Without-a-Circuit:-TempData-and-Session-in-Blazor-.NET-11-Static-SSR/images/feedback.gif
new file mode 100644
index 0000000000..d2fdb30065
Binary files /dev/null and b/docs/en/Community-Articles/2026-10-02-State-Without-a-Circuit:-TempData-and-Session-in-Blazor-.NET-11-Static-SSR/images/feedback.gif differ
diff --git a/docs/en/Community-Articles/2026-10-02-State-Without-a-Circuit:-TempData-and-Session-in-Blazor-.NET-11-Static-SSR/images/onboarding.gif b/docs/en/Community-Articles/2026-10-02-State-Without-a-Circuit:-TempData-and-Session-in-Blazor-.NET-11-Static-SSR/images/onboarding.gif
new file mode 100644
index 0000000000..7742adad1e
Binary files /dev/null and b/docs/en/Community-Articles/2026-10-02-State-Without-a-Circuit:-TempData-and-Session-in-Blazor-.NET-11-Static-SSR/images/onboarding.gif differ
diff --git a/docs/en/Community-Articles/2026-10-02-State-Without-a-Circuit:-TempData-and-Session-in-Blazor-.NET-11-Static-SSR/images/prg-session-flow.svg b/docs/en/Community-Articles/2026-10-02-State-Without-a-Circuit:-TempData-and-Session-in-Blazor-.NET-11-Static-SSR/images/prg-session-flow.svg
new file mode 100644
index 0000000000..223a2859fa
--- /dev/null
+++ b/docs/en/Community-Articles/2026-10-02-State-Without-a-Circuit:-TempData-and-Session-in-Blazor-.NET-11-Static-SSR/images/prg-session-flow.svg
@@ -0,0 +1,86 @@
+
diff --git a/docs/en/Community-Articles/2026-10-02-State-Without-a-Circuit:-TempData-and-Session-in-Blazor-.NET-11-Static-SSR/post.md b/docs/en/Community-Articles/2026-10-02-State-Without-a-Circuit:-TempData-and-Session-in-Blazor-.NET-11-Static-SSR/post.md
new file mode 100644
index 0000000000..46dea83c45
--- /dev/null
+++ b/docs/en/Community-Articles/2026-10-02-State-Without-a-Circuit:-TempData-and-Session-in-Blazor-.NET-11-Static-SSR/post.md
@@ -0,0 +1,474 @@
+# State Without a Circuit: TempData and Session in Blazor .NET 11 Static SSR
+
+> **.NET 11 RC1.** The attributes and defaults in this article come from the ASP.NET Core 11 release notes and the Blazor server state-management docs: `[SupplyParameterFromTempData]`, `[SupplyParameterFromSession]`, cookie TempData, and cookie-backed session. They apply to **static server-side rendering only**. Interactive Server and WebAssembly leave the property at its CLR default. The browser matrix at the end is the contract to check on the sample, [StaticSsrState](https://github.com/sumeyyeKurtulus/StaticSsrState). It is not a record of a browser run.
+
+A static SSR page is one HTTP request. The component is created, rendered, and thrown away. Nothing you stored in a field is there for the next click. That is a good trade when you do not want a SignalR circuit per user, and it is a problem the moment a form needs to say "Saved." after a redirect, or a three-step wizard needs to remember step one.
+
+.NET 11 gives Blazor static SSR the two stores MVC and Razor Pages have used for years, wired as component parameters:
+
+- `[SupplyParameterFromTempData]` — read-once flash state. The Post-Redirect-Get message.
+- `[SupplyParameterFromSession]` — state that must survive several requests. The wizard draft or the cart.
+
+Both are declarative in the same way as `[SupplyParameterFromQuery]` and `[SupplyParameterFromForm]`. You stop injecting `IHttpContextAccessor` and hand-serializing a session key for every property.
+
+Six rules cover the choice. The sections after them are the code, the limits, and how to confirm each rule in the browser.
+
+- **TempData is the flash.** It is written on the POST and read on the next GET. The attribute's first read uses `ITempData.Get()`, which schedules deletion. Copy the value into a display field and clear the parameter before the request ends, because the framework writes the property back at the end of the request.
+- **Session is the multi-request store.** Values stay until the idle timeout (20 minutes by default; each access resets it), until you assign `null`, or until the session cookie disappears.
+- **Static SSR only.** On an interactive render mode the same property is never supplied.
+- **Different boxes.** TempData's default store is an encrypted cookie, `.AspNetCore.Components.TempData`. Session puts the payload in a server-side cache and sends only `.AspNetCore.Session`.
+- **The URL is still the shareable store.** A copied link does not carry TempData or Session. Bookmarkable view state belongs in the query string.
+- **One provider for TempData.** The cookie provider is the default. Switching to session storage removes the cookie size cap and requires session affinity. Cookie-backed TempData cannot be saved after the response starts streaming.
+
+## Where this state should live
+
+Pick the store from the lifetime you actually need. The rest of the article is the two middle rows.
+
+| Store | Lifetime | Shareable link | Survives F5 | New tab | Static SSR | What you operate |
+| ---------------------------------------------------- | ------------------------------------------ | ---------------------------- | -------------------------------- | ------------------------ | ----------------------------------- | ----------------------------------------------------------------------------- |
+| TempData | Next read, then removed | No | No, once the GET has consumed it | No | Yes | Encrypted cookie, or the session store if you switch provider |
+| Session | Idle timeout, reset on access | No | Yes | Yes, same session cookie | Yes | Server cache plus a session cookie; session affinity required |
+| URL query | As long as the URL is kept | Yes | Yes | Yes | Yes | Nothing on the server |
+| Database | Until you delete the row | Only if the id is in the URL | Yes | Yes | Yes | Your database |
+| Interactive Server, WASM, `PersistentComponentState` | Circuit, prerender handoff, or the browser | No | Depends on the mode | No | The page no longer has to be static | A circuit or a client runtime |
+
+A success banner after save is TempData. A wizard or a cart that must not show up in the address bar is Session. A filtered list someone should send to a colleague is the query string and that is the subject of [QuickGrid in .NET 11: Sorting and Paging That Live in the URL](https://abp.io/community/articles/quickgrid-in-.net-11-sorting-and-paging-that-live-in-the-url-hypzmikw#gsc.tab=0). An order that must still exist after the browser is closed is a database row.
+
+
+
+## What a static SSR request actually keeps
+
+Blazor Server holds component fields in a SignalR circuit. WebAssembly holds them in the browser. Static SSR holds them nowhere. The next request starts from the parameters the framework can rebuild: route, query, form, TempData, session.
+
+Circuit persistence, `[PersistentState]`, and auto-pause are interactive-server features. They resume a circuit. They do not implement Post-Redirect-Get on a page that has no circuit. The section [When static SSR is the wrong tool](#when-static-ssr-is-the-wrong-tool) comes back to them.
+
+### TempData
+
+TempData is the bag you fill on the POST so the redirect target can show a message once. `AddRazorComponents()` registers it. You do not call `AddSession` for the default cookie provider.
+
+The full API is a cascading `ITempData`:
+
+```csharp
+[CascadingParameter]
+public ITempData? TempData { get; set; }
+```
+
+`Get` reads a key and schedules it for deletion. `Peek` reads it and leaves it. `Keep()` retains every key for the following request. `Keep(key)` retains one. Keys are case-insensitive. Those methods are how you keep a message alive across an intermediate redirect. The attribute does not expose them — the TempData attribute work left `Peek` and `Keep` on `ITempData` on purpose.
+
+For a single value, `[SupplyParameterFromTempData]` is the shortcut. The key defaults to the property name. Set `Name` when the key should be stable across a rename, or when two properties would otherwise collide:
+
+```csharp
+[SupplyParameterFromTempData]
+public string? Message { get; set; }
+
+[SupplyParameterFromTempData(Name = "flash_message")]
+public string? FlashMessage { get; set; }
+```
+
+Two components in the same render tree cannot register the same key. The supplier throws `InvalidOperationException`. Mixing `TempData["flash_message"]` and the attribute for that same key in one request is unsupported; the value that wins depends on order.
+
+The first time the attribute reads a key it calls `Get()`, so the key is marked for deletion. Later reads in the same request return the property's current value, so your submit handler can overwrite it. At the end of the request the supplier writes every bound property back into TempData. That write-back is why a flash you leave sitting in the property can be saved again. The feedback sample below copies the string into a display field and assigns `null` before the response completes.
+
+The supported types are a closed list: `string`, `int`, `bool`, `Guid`, `DateTime`, int-backed enums, the nullable forms of those, `T[]`, `List`, `HashSet`, `Collection`, `Dictionary`, and `object[]`. A custom class is not on that list.
+
+A read-side mismatch is the case that becomes `null`. If the stored value's type is not assignable to the property, or deserialization fails, the attribute supplies `null` and writes a log entry. An unsupported non-null value fails later, when the response is persisted, after the component has rendered.
+
+The default provider stores that JSON in an encrypted cookie. Data Protection does the encryption. The docs' defaults are:
+
+| Setting | Default |
+| ------------ | --------------------------------- |
+| Name | `.AspNetCore.Components.TempData` |
+| HttpOnly | `true` |
+| SameSite | `Lax` |
+| SecurePolicy | `SameAsRequest` |
+
+On a production HTTPS site, set `CookieSecurePolicy.Always`. Override the cookie on the Razor components options:
+
+```csharp
+builder.Services.AddRazorComponents(options =>
+{
+ options.TempDataCookie.Name = ".AspNetCore.Components.TempData";
+ options.TempDataCookie.HttpOnly = true;
+ options.TempDataCookie.SameSite = SameSiteMode.Lax;
+ options.TempDataCookie.SecurePolicy = CookieSecurePolicy.Always;
+});
+```
+
+Browsers limit a single cookie to about 4 KB. The provider chunks large values with `ChunkingCookieManager`. Past that, call `AddSessionStorageTempDataValueProvider()`. Only one provider is active. Session-backed TempData then needs `AddSession`, `UseSession`, and session affinity. Cookie-backed TempData cannot be saved after the response has started streaming. A page that streams and still needs TempData has to use the session provider.
+
+### Session
+
+Session is the store you read on several requests and never want in the query string: the onboarding draft, the cart id, the step index. Unlike TempData, a read does not delete it.
+
+It is not registered by `AddRazorComponents()` alone:
+
+```csharp
+builder.Services.AddDistributedMemoryCache();
+
+builder.Services.AddSession(options =>
+{
+ options.IdleTimeout = TimeSpan.FromMinutes(20);
+ options.Cookie.HttpOnly = true;
+ options.Cookie.IsEssential = true;
+ options.Cookie.SameSite = SameSiteMode.Lax;
+});
+
+builder.Services.AddRazorComponents();
+
+var app = builder.Build();
+
+app.UseSession();
+app.MapRazorComponents();
+```
+
+`UseSession()` has to run before the component endpoint. `UseAntiforgery()` is optional in .NET 11 and is no longer in the Blazor template. The defaults you are overriding, or accepting, are:
+
+| Setting | Default |
+| ------------ | -------------------------------- |
+| Cookie name | `.AspNetCore.Session` |
+| Path | `/` |
+| HttpOnly | `true` |
+| SameSite | `Lax` |
+| SecurePolicy | `None` |
+| IsEssential | `false` |
+| IdleTimeout | 20 minutes, reset on each access |
+| IOTimeout | 1 minute |
+
+`IsEssential` defaults to `false`, so cookie-consent middleware can drop the cookie and the wizard silently restarts. The sample sets it to `true` because the draft is required for the flow. Idle timeout applies to the session contents, not to the cookie's `Expires`. `SecurePolicy` defaults to `None` because apps often mix HTTP and HTTPS in development, and some browsers refuse to overwrite a `Secure` cookie from an insecure URL. That rationale belongs to this cookie, not to TempData.
+
+`[SupplyParameterFromSession]` reads the key on the way in and writes the property back before the response is sent. Allowed values are the same closed list as TempData: `string`, `int`, `bool`, `Guid`, `DateTime`, int-backed enums, their nullables, `T[]`, `List`, `HashSet`, `Collection`, `Dictionary`, and `object[]`. A custom class is not on that list. `[SupplyParameterFromSession] OnboardingDraft? Draft` threw `InvalidOperationException`: the type is not supported for session storage. The sample stores `string?` and `int?` instead. A duplicate key across components throws `InvalidOperationException`. Keys are compared case-insensitively.
+
+```csharp
+[SupplyParameterFromSession(Name = "onboarding_name")]
+public string? Name { get; set; }
+
+[SupplyParameterFromSession(Name = "onboarding_step")]
+public int? Step { get; set; }
+```
+
+`AddDistributedMemoryCache()` is process-local. Session requires session affinity in a load-balanced deployment, including when the cache is in memory. A second instance does not see the first instance's memory.
+
+Streaming SSR has two separate rules. If the page subscribes with `[SupplyParameterFromSession]`, or the session-storage TempData provider is active, the session cookie is issued before streaming starts, even when the handler writes nothing. Pages that do not touch session are unchanged. Cookie-backed TempData cannot be saved once streaming has started, so a streaming page that needs TempData uses `AddSessionStorageTempDataValueProvider()` and takes on the same affinity requirement.
+
+### What the attributes leave alone
+
+During interactive SSR and interactive client rendering the value is not supplied. The property stays at its default: `null` for `string?`, `null` for `int?`. A page marked `@rendermode InteractiveServer` that expects the wizard to appear will render the empty state.
+
+They also do not replace antiforgery. `EditForm` with a `FormName` emits the token. A plain `