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.
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 windowReact 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:")) { … }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.