Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Self-hosting & configuration

Quiver is one static binary. Every option is an environment variable with a secure default; the full list lives in .env.example and the rationale in ADR-0013.

Encryption at rest

Encryption-at-rest is on by default. The server requires a 256-bit key in QUIVER_ENCRYPTION_KEY (generate one with openssl rand -hex 32) unless you opt out with QUIVER_INSECURE=true. It seals segments, the manifest, and the WAL alike. That key is a master key that wraps a per-collection data-encryption key (envelope encryption, ADR-0010), so dropping a collection crypto-shreds it. For production, hold the master key in a file via QUIVER_MASTER_KEY_FILE rather than an environment variable.

export QUIVER_ENCRYPTION_KEY=$(openssl rand -hex 32)
quiver serve

TLS

TLS (via rustls) is required for any non-loopback bind. Provide a certificate and key; for an extra factor, set QUIVER_TLS_CLIENT_CA to require mutual TLS, so both transports demand a client certificate chaining to that CA.

Authentication & RBAC

Authentication is by API key; authorization is default-deny RBAC. A bare QUIVER_API_KEYS secret is an all-collections admin key. For least privilege, define scoped keys in quiver.toml with a role (readwriteadmin) and a collections scope — exact names or a trailing-* prefix (e.g. acme.*) for per-namespace isolation. Over-scope and cross-namespace access return 403, and listing hides collections outside the scope. See ADR-0011.

Audit logging

Set QUIVER_AUDIT_LOG to record every mutating and administrative operation, and every denial, to an append-only audit log — the acting key, the action, the resource, and the outcome, never the secret.

Running with Docker

just docker                              # build the image (infra/docker/Dockerfile)
docker run --rm -p 6333:6333 -p 6334:6334 \
  -e QUIVER_ENCRYPTION_KEY=$(openssl rand -hex 32) \
  -v quiver-data:/data quiver:dev serve

The image is multi-stage and runs as a non-root user. See infra/ for the Dockerfile and deployment scaffolding.

Replication

Run asynchronous read replicas by pointing a follower at a leader with QUIVER_LEADER_URL (and QUIVER_LEADER_API_KEY). See Replication.

Lock-free reads (experimental)

Set QUIVER_MVCC_READS=1 to serve reads of single-vector, in-memory collections from a lock-free MVCC snapshot so they no longer block on a concurrent writer’s exclusive lock (ADR-0064). It is default-off and experimental: pure-vector, filtered, and hybrid reads are served from the snapshot; the remaining work (increment 3) is a loom model and a dedicated-hardware benchmark before it becomes the default. See Concurrency.

Observability

Quiver exposes structured logs and metrics; see ADR-0014. The cockpit (quiver tui) shows live server metrics and a collection browser.