quiver
Documentation menu

Introduction

Quiver is a vector database written from scratch in Rust. It stores vectors with JSON metadata in named collections and finds their nearest neighbours, with metadata filters applied while it searches. Run it as a server with REST and gRPC APIs, or link the quiver-db crate and keep everything in your own process.

Quiver is pre-1.0. Formats and APIs can still change between releases; the changelog calls out breaking changes. Only the latest release and main get security fixes.

What you get

  • Three indexes — HNSW for approximate search over large collections, exact flat search, and an exact k-d tree for low dimensions. See indexes & metrics.
  • Five metrics — cosine, Euclidean, dot product, Manhattan and Hamming. Distances are always lower = closer.
  • Filtered search — MongoDB-style filters on metadata ($gte, $in, $or, nested fields, …), evaluated during the index traversal rather than after it. See filtering.
  • Data operations — update metadata in place (merge or replace), count and delete by filter, search by an existing point, recommend from positive and negative examples, and distance thresholds.
  • Storage — a checksummed write-ahead log with checkpoints by default, RocksDB behind a cargo feature, or memory only. See storage & durability.
  • Snapshots — SHA-256-verified .tar.gz backups of a collection, with retention, a scheduler, download, upload and restore. See snapshots & backups.
  • Access — REST on port 6900 and gRPC on 6901, with read-only and read-write API keys. Clients for Python and Rust, a terminal UI, or the crate embedded in-process.

How it is built

Quiver is a Cargo workspace of ten crates, layered so each one only depends on the ones below it:

CrateWhat it does
quiver-typespoints, metrics, collection configs, filters, errors and API keys
quiver-storagethe in-memory vector store and the storage engines: file (WAL + checkpoints), RocksDB, memory
quiver-indexthe flat, HNSW and k-d tree indexes
quiver-snapshotsnapshot archives and the snapshot directory
quiver-dbthe embeddable database: collections, search, snapshots, the scheduler
quiver-httpthe REST API, on axum
quiver-grpcthe gRPC API, on tonic
quiver-serverthe quiver server binary
quiver-clientan async Rust client for the REST API
quiver-tuithe quiver-tui terminal UI, on ratatui

The Python client lives in clients/python. Architecture follows a request through the layers.

Ready? Head to installation.