dotnet-realtime

Installation
SKILL.md

.NET real-time - ASP.NET Core SignalR

SignalR is server-push over a persistent connection: the server can call methods on connected clients (and they on it) without the client polling. The transport negotiates down a ladder - WebSockets first, then Server-Sent Events, then long-polling. Reach for it for chat, notifications, live dashboards, presence, and collaborative editing - anything where the server has something to say now and a client is connected to hear it. Baseline is .NET 8 / C# 12.

The defining trait, and the thing that sets every rule below: a SignalR message is connection-scoped and best-effort. The server holds no durable copy; a client that is offline, mid-reconnect, or on another server simply misses it. That is the opposite of dotnet-messaging, where the broker persists the message and redelivers until acknowledged. If a notification must arrive, the durable guarantee lives in the broker, and SignalR is only the last hop - see the seam below. This skill does not cover broker-backed messaging (dotnet-messaging), request/response HTTP (dotnet-minimal-api, dotnet-web-backend), or in-process reactive streams (Rx / System.Reactive).

The seam with messaging: broker delivers, SignalR pushes

The common architecture is not 'SignalR instead of a broker' - it is both. A durable integration event arrives on the bus, a consumer handles it inside its transaction, and then it pushes a notification to the relevant browsers. The consumer is dotnet-messaging / dotnet-hosted-services; the push is here. The bridge is IHubContext - the supported way to send from outside a hub, where no Clients property exists:

public sealed class OrderPlacedConsumer(IHubContext<OrdersHub, IOrdersClient> hub)
{
    // runs inside the durable consumer; the broker already guaranteed delivery to us
    public Task Handle(OrderPlaced placed) =>
        hub.Clients.Group($"customer-{placed.CustomerId}")
           .OrderConfirmed(placed.OrderId, placed.PlacedAt);
}
Installs
8
GitHub Stars
1
First Seen
Jun 26, 2026
dotnet-realtime — envoydev/claude-stack