A fast, lightweight, self-hosted drop-in for Redis. Great as an app cache or session store.
Drop-in replacement for Redis. Works with redis-cli, go-redis, ioredis, and every Redis client library. RESP2 protocol with pipelining support.
Small, clean Go codebase. Easy to understand, easy to extend. One goroutine per connection with a single-threaded store.
AOF persistence with configurable sync strategies. Graceful shutdown. Lazy + active expiration. Memory limits with safety checks.
Single-node and reliable today. Foundation for distributed sharding, clustering, and replication tomorrow.
Pull the public image from GitHub Container Registry:
docker pull ghcr.io/itsmunim/kivo:latest
docker run -p 6379:6379 ghcr.io/itsmunim/kivo:latest
Connect with any Redis client:
redis-cli -p 6379 PING
# PONG
A 1-replica StatefulSet with an attached PVC โ the AOF survives pod restarts. One command:
kubectl apply -f https://raw.githubusercontent.com/itsmunim/kivo/main/k8s/kivo-deploy.yaml
k8s/kivo-deploy.yaml, set storageClassName to detachable network storage (AWS EBS gp2, GCE PD standard, Azure Disk managed-csi, Longhorn...), then apply your copy.
kivo ships with an embedded web console. Browse every key with its type and TTL, and run any supported Redis command live in a browser terminal โ no redis-cli, no client library, nothing to install. Start kivo and it is there at http://localhost:3001.
kivo is an open source, self-hosted in-memory data store written in Go that speaks the Redis protocol. Point any Redis client at it and it works like a lightweight Redis server.
For the v1 command surface โ strings, lists, sets, hashes, sorted sets, keys, expiration, and connection commands โ yes. Clients such as redis-cli, go-redis, and ioredis connect without code changes.
Yes. kivo supports AOF (append-only file) persistence with configurable sync strategies โ always, everysec, or no. Data is replayed on startup, and graceful shutdown flushes buffered writes to disk.
Yes. A public image is published to GitHub Container Registry (ghcr.io/itsmunim/kivo), and a ready-made StatefulSet manifest with a PVC-backed AOF is provided under k8s/ in the repository.
If your use case fits the single-node, Redis-compatible surface โ an app cache, session store, rate limiter, task queue, or leaderboard โ feel free to use it for MVPs or production workloads. It's MIT licensed. See the benchmarks below: on identical hardware kivo runs on par with Redis standalone, and ahead on several operations โ so you can rely on it with peace of mind as a single node.
GET SET MGET MSET INCR DECR APPEND STRLEN
LPUSH RPUSH LPOP RPOP LRANGE LLEN LINDEX LREM LTRIM
SADD SREM SMEMBERS SISMEMBER SCARD SPOP SUNION SINTER SDIFF
HSET HGET HGETALL HDEL HLEN HEXISTS HKEYS HVALS HMGET
ZADD ZREM ZRANGE ZREVRANGE ZRANGEBYSCORE ZCARD ZSCORE ZINCRBY ZCOUNT
KEYS FLUSHDB DBSIZE TYPE EXPIRE TTL PING ECHO
redis-benchmark, 100,000 requests, 50 parallel clients. Both measured on the same machine (Apple M1 Pro) โ kivo vs real Redis 8.10.1, back to back with identical commands. Full raw output in BENCHMARKS.md.
| Command | kivo (ops/sec) | Redis (ops/sec) | verdict |
|---|---|---|---|
PING | 83,701 | 81,638 | kivo +3% |
SET | 83,217 | 78,526 | kivo +6% |
GET | 84,703 | 84,934 | parity |
INCR | 84,207 | 76,393 | kivo +10% |
LPUSH | 77,386 | 78,304 | parity |
RPUSH | 83,362 | 76,463 | kivo +9% |
LPOP | 81,416 | 78,297 | kivo +4% |
RPOP | 84,345 | 81,218 | kivo +4% |
SADD | 83,820 | 84,865 | parity |
HSET | 84,118 | 88,549 | Redis +5% |
SET pipelined ร16 | 1,123,595 | 787,402 | kivo +43% |
GET pipelined ร16 | 1,226,994 | 956,938 | kivo +28% |
LPUSH went from 4,196 to 77,386 ops/sec (18x) after moving lists to a ring-buffer deque.