Skip to content

wRPCFast, zero-dependency Web RPC

One router, every web transport — WebSocket, HTTP, SSE, WebTransport, WebRTC — and across Redis, NATS, RabbitMQ and Kafka. Nothing in your lockfile.

wRPC

One router, every transport ​

Every procedure on a wRPC server answers on every carrier below, with the same rooms and sessions behind it — a browser on a WebSocket or on HTTP/3, a page behind a proxy that only speaks HTTP, another browser over WebRTC, another service through Kafka. The handler never knows which; the client picks per connection, with a fallback list where it wants one, and an app can talk to several backends at once.

TransportReach for it whenCallsEvents & subscriptionsBinary streamsCompressionEncryption
WebSocketthe default — full duplex, from any browser or Node✅✅✅✅Noise
HTTP & RESTstateless calls, curl, partners, caches✅❌❌✅HPKE
Server-Sent Eventsno upgrade path — serverless, strict proxies✅✅❌✅HPKE
WebTransport exp.HTTP/3 — streams without head-of-line blocking, datagrams✅✅✅✅Noise
WebRTCbrowser to browser, no server in the data path✅✅✅✅DTLS
Worker portone connection shared by every tab✅✅✅——
Broker, stateless exp.service to service — any instance answers✅❌❌✅sealed
Broker, session exp.a long-lived conversation between services✅✅✅✅sealed

Compression and encryption are off until you turn them on; encryption here is the layer above TLS, never in place of it. The full matrix — how each transport is chosen, and which carry bytes inside a packet — is in Client › Transports.

Fast where it counts ​

wRPC's whole call path — router, validation, access check, correlation — against the frameworks that do the same job, one machine, over a WebSocket (gRPC over HTTP/2). Switch the metric: wRPC leads with calls in flight and at 10 KB, and is level with socket.io one small call at a time. Over plain HTTP, fastify answers about a tenth more requests than wRPC does, and express about a fifth fewer — Performance has that too, with raw sockets, every transport, and how to reproduce each number.

RPC frameworks, calls per secondcalls/s · higher is better
  1. wRPC — batch: true201,075
  2. wRPC — own WebSocket116,704
  3. socket.io (emitWithAck)101,455
  4. tRPC (wsLink)23,310
  5. gRPC (grpc-js, HTTP/2)20,921

Node v24.14.1 · Apple M3 Max · loopback · one run (3 October 2026) · bench/rpc-comparison.js

Released under the MIT License.