kividb
Redis-compatible in-memory store with built-in full-text and vector search
TLDR
SYNOPSIS
kividb [options]
DESCRIPTION
kividb is the KiviDB server, a multi-threaded in-memory key-value store written in Rust. It speaks the Redis protocol (RESP2 and RESP3), so existing Redis clients, `redis-cli`, and libraries talk to it unchanged. Full-text, tag, numeric, and vector search (`FT.*`, including FLAT and HNSW) are built in rather than loaded as a module.The default listen address is `0.0.0.0:6380`, not Redis's 6379, so both can run on the same host. Persistence uses native snapshots (`dump.kdb`, via `SAVE` / `BGSAVE`) and an optional append-only file (`--aof`). With AOF enabled, recovery replays `appendonly.aof`; the file is fsynced about once a second. Vector indexes store their HNSW graph in the snapshot when you save after ingest, so a restart does not have to rebuild the graph from hashes.Worker threads shard the dataset across cores. On Linux the server uses io_uring when --io-model is `auto` or `uring` and the kernel allows it. Lua scripting (`EVAL`, `SCRIPT`, `FUNCTION`, `FCALL`) is compiled in only with `--features lua`. TLS is compiled in only with `--features tls`; a binary without that feature refuses to start if --tls-port is set, rather than serving plaintext.Replication (`--replicaof`) and Redis-style clustering (`--cluster-enabled yes`) are supported. A replica is always read-only. KiviDB does not snapshot on a Redis `save` schedule; use AOF or `BGSAVE`.Release binaries and `.deb` / `.rpm` packages are published on GitHub Releases. Docker images (`kividb/kividb`, `ghcr.io/kividbio/kividb`) listen with `--protected-mode no` by default because a container is never reached from loopback.
PARAMETERS
--port number
TCP port for plaintext Redis-protocol clients (default: 6380).--bind address
Listen address (default: 0.0.0.0). Setting it on the command line or in the config file turns protected mode off.--protected-mode yes|no
While the default user has no password and --bind was not set, accept clients from this machine only (default: yes).--configfile path
Redis-style configuration file (default: `/etc/kividb/kividb.conf`). A missing file is ignored. Command-line flags override the file.--threads n
Worker threads. `0` (default) is automatic: all cores below 4, otherwise cores minus 2.--databases n
Number of logical databases (default: 16).--dir path
Working directory for `dump.kdb`, `appendonly.aof`, backups, and `nodes.conf`. Empty uses the directory the process was started in.--aof
Enable append-only file persistence (`appendonly.aof`).--maxmemory size
Memory limit (default: 0, unlimited). Accepts a byte count or a Redis-style unit such as `512mb` or `3gb`.--maxmemory-policy policy
What happens at the memory limit (default: `noeviction`). Policies include `allkeys-lru`, `allkeys-lfu`, `allkeys-lrm`, `allkeys-random`, and the matching `volatile-*` / `volatile-ttl` forms.--loglevel level
`debug`, `verbose`, `notice` (or `info`), `warning`, or `nothing` (default: `info`).--logfile path
Append the log to this file instead of standard error.--log-format text|json
Log line format (default: `text`).--io-model auto|uring|tokio
I/O backend (default: `auto`). On Linux, `auto` uses io_uring when the kernel allows it and falls back to Tokio.--requirepass password
Password for the `default` user.--aclfile path
ACL file to load users from.--replicaof host port
Replicate from the given primary.--masterauth password
Password presented to the primary during the replica handshake.--cluster-enabled yes|no
Cluster mode. The cluster bus listens on client port plus 10000; topology is stored in `nodes.conf` (default: no).--cluster-node-timeout ms
Milliseconds without a reply before a peer is suspected to have failed (default: 15000).--tls-port port
TLS listener port. `0` disables TLS. Requires a binary built with the `tls` Cargo feature, plus --tls-cert-file and --tls-key-file.--tls-cert-file path
Server certificate (PEM).--tls-key-file path
Server private key (PEM).--tls-ca-cert-file path
CA used to verify client certificates.--tls-auth-clients yes|optional|no
Whether TLS clients must present a certificate signed by --tls-ca-cert-file (default: yes).--update-check yes|no
On a release build, ask GitHub once at startup whether a newer tag exists (default: yes). `KIVIDBNOUPDATE_CHECK=1` also turns it off.--help
Print the full flag list.--version
Print the version.
CONFIGURATION
/etc/kividb/kividb.conf
Redis-style file: one directive per line (`port 6380`, `appendonly yes`, `bind 127.0.0.1`). Comments start with `#`. Unknown directives are errors. Command-line flags win over the file. `CONFIG REWRITE` can create the file if it is missing.dump.kdb
Native snapshot written by `SAVE` / `BGSAVE` in --dir. Loaded at startup unless an AOF is present.appendonly.aof
Append-only log used when --aof / `appendonly yes` is set. When present it is the source of truth on restart.nodes.conf
Cluster topology file (default name; --cluster-config-file changes it).
CAVEATS
Protected mode is on by default. Remote clients receive `-DENIED` until you set --requirepass, --bind, or --protected-mode no. Binding to a public address without a password exposes the dataset.The default port is 6380. Point `redis-cli` and other clients at that port, or pass --port 6379.`--maxmemory 0` is unlimited. Without a limit the process can consume all RAM.Lua commands error on a default (non-`lua`) build. --tls-port on a non-`tls` build is fatal.There is no `--daemonize`. Run under a supervisor or systemd. Redis `save` intervals are ignored. `appendfsync` is always once a second.Docker's default seccomp profile often blocks io_uring, so the server falls back to Tokio unless you loosen seccomp.A release build makes one HTTPS request to GitHub at startup unless --update-check no, `update-check no` in the config file, `KIVIDBNOUPDATE_CHECK=1`, or `CI` is set.KiviDB is licensed AGPL-3.0-only. Talking to it over the network does not put client applications under the AGPL; modifying the server and offering that modified version as a network service does.
HISTORY
KiviDB is developed by KIVIDB PRIVATE LIMITED. Version 1.0 was released in October 2026, followed shortly by 1.1.0. It is written in Rust as a Redis-protocol alternative with built-in search, under the GNU Affero General Public License v3.
SEE ALSO
redis-server(1), redis-cli(1), valkey-server(1), valkey-cli(1), memcached(1)
