Rhino is a drop-in etcd v3 gRPC server that stores everything in a relational database or Redis. Same API your tools already speak. Simpler operations. No more Raft.
Rhino implements the etcd v3 gRPC API surface, so existing clients, tools, and Kubernetes distributions work out of the box. Under the hood, it's just SQL.
Atomic compare-and-swap with revision-based optimistic concurrency. Create, update, and delete with the guarantees you expect.
Real-time gRPC streaming of key changes with prefix matching. Supports historical replay from any revision.
Every mutation is appended with a monotonic revision. Query historical state at any point in time with full fidelity.
List keys by prefix with pagination and count support. Backed by indexed SQL queries for consistent performance.
Background compaction removes old revisions on a configurable schedule. Keep your database lean without manual intervention.
Built on Tokio and Tonic. Fully async from gRPC handler to database query. Non-blocking I/O throughout the entire stack.
Rhino sits between your etcd clients and a SQL database. It translates gRPC calls into SQL queries, handling revisions, watches, and compaction transparently. Read the full architecture doc →
Rhino's pluggable backend trait means you pick the database that fits your operational reality. Run embedded with SQLite, scale up with Postgres, use MySQL, or go in-memory with Redis.
Embed Rhino as a library, or run it as a standalone server. Either way, your etcd clients connect as if nothing changed. Full getting started guide →
use rhino::{RhinoServer, SqliteBackend}; let backend = SqliteBackend::new( "sqlite:///var/lib/rhino/state.db" ).await?; let server = RhinoServer::new(backend); server.serve("0.0.0.0:2379").await?;
# Put a key $ etcdctl put /registry/pods/default/nginx \ '{"kind":"Pod"}' OK # Read it back $ etcdctl get /registry/pods/default/nginx /registry/pods/default/nginx {"kind":"Pod"} # Watch for changes $ etcdctl watch /registry/pods/ --prefix
Replace etcd with a database you already know how to operate, back up, and scale.