Fuaran.UI.ServerDriven.AspNetCore 0.10.0

Prefix Reserved
There is a newer version of this package available.
See the version list below for details.
dotnet add package Fuaran.UI.ServerDriven.AspNetCore --version 0.10.0
                    
NuGet\Install-Package Fuaran.UI.ServerDriven.AspNetCore -Version 0.10.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Fuaran.UI.ServerDriven.AspNetCore" Version="0.10.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Fuaran.UI.ServerDriven.AspNetCore" Version="0.10.0" />
                    
Directory.Packages.props
<PackageReference Include="Fuaran.UI.ServerDriven.AspNetCore" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Fuaran.UI.ServerDriven.AspNetCore --version 0.10.0
                    
#r "nuget: Fuaran.UI.ServerDriven.AspNetCore, 0.10.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Fuaran.UI.ServerDriven.AspNetCore@0.10.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Fuaran.UI.ServerDriven.AspNetCore&version=0.10.0
                    
Install as a Cake Addin
#tool nuget:?package=Fuaran.UI.ServerDriven.AspNetCore&version=0.10.0
                    
Install as a Cake Tool

Fuaran.UI.ServerDriven.AspNetCore

Backend 1 (the v1 default) for Fuaran.UI.ServerDrivenSSE-push + POST-receive over ASP.NET. The thin transport glue around the tested server-driven core: an SSE IFuaranLiveChannel, the POST inbound parser, the connection registry, and the endpoint wiring.

Wiring

open Fuaran.UI.ServerDriven.Driver
open Fuaran.UI.ServerDriven.AspNetCore.Endpoints

// In your ASP.NET app, after building `app`:
let makeSession () =
    Driver.init
        (DriverServices.create renderFragment)   // renderFragment = Renderer.Server.Render.render sources
        update
        view
        initialModel

mapFuaranLive app (defaultConfig makeSession) |> ignore

This maps:

  • GET /live/stream — opens the SSE stream. Assigns a connId, sets the correlation cookie, builds a fresh LiveSession + SseChannel + LiveConnection, registers it, and drains the channel's frame queue to the long-lived response (FrameWire.encodeSse + flush) until the client disconnects. Last-Event-ID drives LiveConnection.Resync (reconnect replay).
  • POST /live/event — verifies the signed connId token against the request principal (ConnToken.verify; 401 on a forged / unbound cookie), guard-parses the body (Inbound.tryParseLiveEvent; 400 on a malformed body), and routes it to the registered connection (→ G1 trust boundary → driver → frames pushed back down the GET stream).

Auth floor (Phase 211). The host must layer authentication in front of /live/*. The connId is bound, not bearer: the cookie carries a signed, principal-bound token (ConnToken), so a forged / cross-principal cookie is rejected 401 rather than routed. ResolvePrincipal (default ctx.User.Identity.Name) feeds both the binding and the durability attribution (ConfigureConnection receives the resolved principal — thread it into conn.EnableDurability(store, userId = principal)). See docs/SERVER_DRIVEN.md.

Serve the generic shim (Fuaran.UI.ServerDriven's content/fuaran-live-patch.js) as a static asset and point it at the two endpoints:

<script src="/fuaran-live-patch.js"
        data-fuaran-live-stream="/live/stream"
        data-fuaran-live-send="/live/event"></script>

Why SSE+POST is the default

Both backends are freshly written against the same IFuaranLiveChannel seam, so the default is not maturity. SSE+POST wins on four durable axes: infra traversal (no Upgrade/101 handshake to be blocked by enterprise proxies), per-event HTTP governance for free (every client event is an ordinary request through the whole auth/rate-limit/audit pipeline), browser-native reconnect that maps 1:1 onto the journal via Last-Event-ID, and a smaller debuggable surface. The WebSocket backend (Fuaran.UI.ServerDriven.WebSocket) is the drop-in for measured high-frequency interaction. See fuaran-dotnet/docs/SERVER_DRIVEN.md.

Testability

The shared Inbound.tryParseLiveEvent (JSON → LiveEvent option), ConnToken (the connId authz binding), and ConnectionRegistry are pure / deterministic and unit-tested headlessly. The SSE streaming handler + the POST endpoint are thin ASP.NET glue, browser-verified via samples/server-driven.

No platform-SDK dependency — the SSE framing is self-contained (FrameWire), not referenced. Apache-2.0 licensed — see the repo LICENSE.

Product 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.39.0 28 8/27/2026
0.35.0 77 8/24/2026
0.32.0 80 8/23/2026
0.31.0 102 8/21/2026
0.30.0 82 8/21/2026
0.29.0 78 8/19/2026
0.28.0 84 8/18/2026
0.27.0 84 8/18/2026
0.26.0 85 8/18/2026
0.18.0 94 8/10/2026
0.15.0 87 8/9/2026
0.12.0 101 7/31/2026
0.11.0 99 7/30/2026
0.10.0 102 7/29/2026
0.6.0 102 7/27/2026
0.4.0 105 7/26/2026
0.3.0 111 7/24/2026