# Cocoar.SignalARRR > Typed Bidirectional RPC Call server and client methods through shared interfaces over ASP.NET Core SignalR — with compile-time proxies, streaming, cancellation, and authorization. ## Table of Contents ### Introduction - [Getting Started](/guide/getting-started.md): Install the packages, define a [SignalARRRContract] interface, implement it in a ServerMethods class on a HARRR hub, and call it from the .NET, TypeScript and Swift clients - [Why SignalARRR?](/guide/why-signalarrr.md): The production problems plain SignalR leaves open — magic strings, untyped server-to-client calls, growing hubs, token lifecycle, file transfer, item streaming — and what SignalARRR adds for each - [SignalARRR vs. gRPC vs. REST](/guide/comparison.md): SignalARRR against gRPC and REST: when each fits, and where SignalARRR has the edge — bidirectional RPC, shared interfaces instead of .proto files, push with a response, file transfer, auth on persistent connections ### Server - [Hub Setup](/guide/server/hub-setup.md): Create a HARRR hub, register it with AddSignalARRR and MapSignalARRRHub, enable MessagePack, run several hubs, tune connection options, and use the hub lifecycle and properties - [Server Methods](/guide/server/server-methods.md): Organize hub logic in ServerMethods classes: auto-discovery, several classes per hub, why every declared interface is a public RPC surface, method naming, DI and [FromServices], server-to-client calls, custom names - [Authorization](/guide/server/authorization.md): [Authorize] at method, class and hub level; message-level token authentication with ChallengeAuthentication and the auth cache; transport-level authentication with client certificates, Negotiate and cookies; re-validation and mixed mode - [Client Manager](/guide/server/client-manager.md): ClientManager: query clients with IClientQuery, single-client calls, SendAsync / InvokeAllAsync / InvokeOneAsync, presence snapshots, groups, use from controllers and background services, ClientContext properties and custom attributes - [Contract Wire Names](/guide/server/contracts-wire-names.md): Declare the wire name of a contract interface (the ClassName|Method halves), the rules for it, versioning contracts side by side, and where wire names do not apply - [Backplane & Clustering](/guide/server/backplane.md): Multi-node clustering with the Redis-compatible or PostgreSQL backplane: choosing between them, catch-up after a subscription drop, schema and permissions, cluster subjects for cluster-wide observables, distributed operations, presence and cluster semantics ### .NET Client - [Connection Setup](/guide/dotnet-client/connection-setup.md): Create a HARRRConnection, authenticate with bearer tokens or client certificates, configure auto-reconnect, start and stop, handle errors and connection events, reach the underlying HubConnection - [Typed Methods](/guide/dotnet-client/typed-methods.md): Call server methods through GetTypedMethods() proxies: return type mapping to invoke, send and stream, generic methods, proxy caching, and what the source generator needs - [Server-to-Client Handlers](/guide/dotnet-client/server-to-client.md): Handle server-to-client calls on the .NET client: define the contract, implement it, RegisterInterface before connecting, return values, why On() is for raw SignalR only, what happens when a handler throws ### TypeScript Client - [TypeScript Client Setup](/guide/typescript-client/setup.md): The @cocoar/signalarrr npm client: install, create a connection, invoke / send / stream, error handling, MessagePack, accessTokenFactory authentication, connection events and properties, method naming - [Server Method Handlers](/guide/typescript-client/server-methods.md): Handle server-to-client calls in TypeScript with onServerMethod(): wire names, return values, throwing and async handlers, chaining, and cancellation via AbortSignal ### Swift Client - [Swift Client Setup](/guide/swift-client/setup.md): The CocoarSignalARRR Swift package for iOS, macOS, tvOS and watchOS: installation, connection and options, authentication, invoke / send / stream, events, MessagePack, reconnection policy, transports, logging - [Typed Proxies & Server Methods](/guide/swift-client/typed-proxies.md): Swift typed proxies with the @HubProxy macro, server-to-client and streaming handlers, interface registration, cancellation support, and HTTP stream references ### Item Streaming - [Server-to-Client Streaming](/guide/streaming/server-to-client.md): Stream results from server methods with IAsyncEnumerable (recommended), IObservable or ChannelReader, consume them on the .NET and TypeScript clients, and cancel a stream - [Client-to-Server Streaming](/guide/streaming/client-to-server.md): Stream items from a client to the server with StreamItemToServer and StreamCompleteToServer, handle the stream in a ServerMethods class, and deal with errors ### Advanced - [HTTP Stream References](/guide/advanced/http-streams.md): HTTP stream references: a System.IO.Stream parameter in a server-to-client or client-to-server call travels over HTTP instead of the WebSocket — how it works, the endpoints, upload slots, limitations - [Proxy Generation](/guide/advanced/proxy-generation.md): The Roslyn source generator behind typed proxies: setup, [SignalARRRContract], generated code and naming, return type classification, multi-assembly support, the DynamicProxy fallback, the ProxyCreator API - [Cancellation Propagation](/guide/advanced/cancellation.md): Server-initiated cancellation of client operations: pass a CancellationToken to a client method and cancel it remotely, AbortSignal on the TypeScript client, and the CancelTokenFromServer flow underneath ### Migration - [Migration from v4.x](/guide/migration/from-v4.md): Upgrade from 4.x to 5.0: WithHub() returns IClientQuery, the message credential for token clients, the moved namespaces, the separate Redis backplane package, removed APIs, and exception detail that no longer reaches the caller - [Migration from v2.x](/guide/migration/from-v2.md): Upgrade from 2.x to 4.x: target frameworks, source-generated proxies instead of ImpromptuInterface, the authentication model, hub-level authorization inheritance, removed APIs and new packages ### Reference - [Packages](/reference/packages.md): Every NuGet package, the npm package and the Swift package: purpose and target frameworks, which project references what, typical setups per project role, the dependency graph, and the bundled agent skill - [Client Comparison](/reference/client-comparison.md): Feature matrix of the four clients — .NET, .NET Framework, TypeScript, Swift: platforms, RPC, item streaming, server-to-client RPC, file transfer, authorization, proxies, transports, side-by-side API samples - [API Overview](/reference/api.md): The public API surface by package: server registration, HARRR, ServerMethods, ClientContext, ClientManager, IClientQuery, the backplane option builders, IClusterSubject, HARRRConnection on .NET and TypeScript, common types - [Wire Protocol](/reference/wire-protocol.md): The SignalR hub methods and message types SignalARRR uses on the wire — InvokeMessage, InvokeServerMessage, ChallengeAuthentication, CancelTokenFromServer, streaming — with the protocol flows and method name resolution, for custom clients ### Roadmap - [Feature Status](/roadmap/status.md): Implementation status of every feature across the .NET server and the .NET, TypeScript and Swift clients - [Test Coverage](/roadmap/test-coverage.md): How the three client ecosystems are tested against one shared IntegrationTestServer on real Kestrel, and what each suite covers ### Open Items - [HTTP Stream References](/roadmap/http-streams.md): Status of HTTP stream references per client: buffered and streaming downloads, uploads, and the open items - [MessagePack Protocol](/roadmap/messagepack.md): Status of the MessagePack hub protocol across the .NET, TypeScript and Swift clients ### Other - [Cocoar.SignalARRR](/skill/SKILL.header.md): Typed bidirectional RPC over ASP.NET Core SignalR with Cocoar.SignalARRR. Use when working with HARRR hubs, ServerMethods, [SignalARRRContract] interfaces, HARRRConnection on .NET, the @cocoar/signalarrr npm client or the CocoarSignalARRR Swift package, server-to-client calls, ClientManager and IClientQuery, item streaming (IAsyncEnumerable, IObservable, ChannelReader), HTTP stream references, cancellation propagation, SignalARRR authorization, the Redis or PostgreSQL backplane, or cluster subjects.