Skip to main content
Use cases

What you can build with Zaris

One distributed store covers the patterns you would otherwise assemble from a cache, a coordinator, a counter service and a message bus — all embeddable, all secured the same way.

Patterns

Built for the hard parts of distributed .NET

Distributed cache

A fast, replicated cache for .NET — as IDistributedCache / HybridCache or the native client. TTLs, bulk ops, and eviction under a memory ceiling.

await cache.PutAsync("user:42", dto, ttl: TimeSpan.FromMinutes(10));

Session & state store

Keep web session and workflow state off sticky nodes. Survives a node loss via replication; scales with your app tier.

await store.PutAsync($"session:{id}", state);

Distributed locks & leader election

Coordinate work across processes with leases and locks, and elect a leader — without ZooKeeper, etcd or Consul.

await using var lease = await store.Locks.AcquireAsync("job:nightly");

Counters & leaderboards

Atomic counters for rate metrics, quotas, and real-time leaderboards — increment on the hot path, read anywhere.

await store.Counters.AddAsync("views:home", 1);

Rate limiting & quotas

Enforce per-user or per-tenant limits across every instance with atomic counters and TTL windows.

var n = await store.Counters.AddAsync($"rl:{user}", 1); // TTL window

React to changes (watch)

Subscribe to keys or prefixes and get a live change feed — build caches that invalidate themselves and event-driven flows.

await foreach (var e in store.Watch.WatchPrefixAsync("orders:")) { … }
Why one store

Fewer moving parts, more shipped

One dependency, not five

Cache, coordination, counters and pub-sub from one embeddable family — no coordinator, cache and message bus to run separately.

Dev in-process, prod clustered

Prototype embedded with zero servers, then point the same code at a real cluster.

Secure and observable

TLS, tokens and RBAC per store, with a built-in console and OTLP metrics.

Pick a pattern and ship it

Start embedded in minutes, then scale to a secured cluster when you are ready — same code, same connection string.