Features

Everything RevenProx does

Summary

RevenProx delivers Server-Sent Events to 10M+ concurrent clients across a brokerless NNG mesh — with UUID topic routing for targeted delivery, cached webhook JWT authentication with a circuit breaker, gossip-based state sync (bloom filters, merkle trees, vector clocks), and a low-memory Zig runtime that ships as a single static binary. MIT-licensed and self-hostable.

Scale & topology

Built for 10M+ connections

Architected to hold 10M+ concurrent SSE streams across 100+ instances. Capacity is a function of how many nodes you run, so you scale out by adding instances to the mesh rather than pushing one node to its limit.

Brokerless NNG mesh

Instances peer directly over NNG (nanomsg-next-gen) — there is no central message broker. Any instance can accept a publish and route it to subscribers anywhere, removing the classic pub/sub scaling ceiling.

Horizontal by construction

Adding throughput means adding nodes. There is no shared coordinator to over-provision, and no single point that must grow to match your busiest topic.

State & routing

UUID topic routing

Every stream is a UUID topic. Clients subscribe by topic, publishers publish by topic, and the mesh delivers each event only to the instances holding matching subscribers — targeted fan-out over an effectively unlimited namespace.

Gossip state sync

Bloom filters summarize which topics an instance serves, merkle trees reconcile only the parts of state that differ, and vector clocks order updates without a global clock — so instances mostly confirm they already agree.

No wasted fan-out

Bloom-filter summaries let instances skip forwarding events that would land nowhere, keeping mesh traffic proportional to real subscriptions instead of flooding every node.

Security & resilience

Webhook JWT verification

Clients present a JWT that RevenProx validates via a webhook to your own auth service — your identity logic stays yours, and the proxy simply enforces it on connect.

Verification caching

Results are cached so a burst of reconnects for an already-seen token does not translate into a burst of calls to your auth service.

Circuit breaker

If the auth upstream degrades, the breaker trips and stops hammering it — protecting a struggling dependency from a thundering herd instead of amplifying the outage.

Runtime & operations

Low, predictable memory

Written in Zig with no garbage collector and manual memory layout, per-connection overhead is small and predictable — the property that actually governs cost when connections are mostly idle.

Single static binary

Builds to one static binary with Zig (for example, zig build -Doptimize=ReleaseSafe). No runtime to install, no interpreter to ship — just the binary and a config file.

Self-hosted & MIT

Runs entirely on your own infrastructure with no vendor control plane. Docker and Kubernetes deployment guides are provided, and the whole thing is open source under the MIT license.

Topology

How the pieces connect

A peer-to-peer mesh with no coordinator, kept consistent by gossip.

rp-1rp-2rp-3rp-4rp-5rp-6bloom filters · merkle trees · vector clocks — no coordinator

Every instance peers directly. State stays consistent with bloom filters, merkle trees, and vector clocks.

Read the architectureSource on GitHub →