
RosalindDB · Apache 2.0
RosalindDB stores FAISS IVFFlat shards on any S3-compatible object store and serves nearest-neighbour search out of a byte-budgeted in-process cache. The always-on footprint is small; heavy work runs on queue-driven workers that scale to zero.
Quickstart
Requirements: Docker and curl. No signup. The Control Plane comes up on http://localhost:8080 as the single public origin; MinIO, Postgres, Redis, and the workers all run privately on the compose network.
Full REST contract — every endpoint, every error code — is in the docs.
git clone https://github.com/rosalinddb/rosalinddb.git cd rosalinddb docker compose up
curl -X POST http://localhost:8080/v1/datasets \
-H 'Content-Type: application/json' \
-d '{"name": "products", "dimension": 4}'curl -X POST http://localhost:8080/v1/datasets/products/vectors \
-H 'Content-Type: application/x-ndjson' \
--data-binary $'{"id":"a","values":[0.1,0.2,0.3,0.4],"metadata":{"category":"books"}}
{"id":"b","values":[0.5,0.5,0.5,0.5],"metadata":{"category":"movies"}}
'curl -X POST http://localhost:8080/v1/query \
-H 'Content-Type: application/json' \
-d '{"dataset":"products","vector":[0.1,0.2,0.3,0.4],"top_k":2,"filter":{"category":"books"}}'MCP server
Your coding agent manages datasets, ingests vectors, and runs similarity search as tool calls — no API client, no glue code. Pick your client below and you're wired up in one step.
Add it from the command line — Claude Code writes the config for you:
claude mcp add rosalinddb \ --env ROSALINDDB_API_URL=http://localhost:8080 \ -- npx -y @rosalinddb/mcp
Or add it by hand to .mcp.json in your project root (the project-scoped, git-shareable config):
{
"mcpServers": {
"rosalinddb": {
"command": "npx",
"args": ["-y", "@rosalinddb/mcp"],
"env": {
"ROSALINDDB_API_URL": "http://localhost:8080"
}
}
}
}Then — run /mcp inside Claude Code to confirm the rosalinddb tools loaded. The eight RosalindDB tools become available to the assistant.
ROSALINDDB_API_URL is your API base URL — http://localhost:8080 against a local docker compose up stack, or the public URL of your self-hosted instance. No API key is needed in OSS-default mode (RB_REQUIRE_AUTH=false) — the snippet above is the whole config. If your backend has auth turned on, also set ROSALINDDB_API_KEY to an rb_live_… key created via POST /auth/keys.
Is this for you
Built for
Not built for
Features
A focused vector database, not a platform you have to learn. Everything below ships from the same image.
01
FAISS IVFFlat shards on S3-compatible object storage.
02
Flat AND-of-equals, strict type-and-value match. No coercion, no ranges, no OR in v1.
03
Subsequent ingests add() to the trained shard. No full rebuild per batch.
04
NDJSON and Parquet via presigned PUT, with a rejected-records report and continue / abort modes.
05
Opt-in via RB_REQUIRE_AUTH=true. Quotas via RB_ENABLE_QUOTAS=true.
06
Metrics, traces, and structured logs over OTLP to any backend you point it at.
07
Every service runs from the same Dockerfile. Per-process commands live in docker-compose.yml.
08
Redis-backed, at-least-once delivery, DLQ, reaper. The query path is isolated from auth and ingest admission.
Run modes
OSS default ships with auth and quotas off so the quickstart on this page just works. Flip RB_REQUIRE_AUTH and RB_ENABLE_QUOTAS when you put it on the public internet.
| Mode | Auth | Quotas | Use case |
|---|---|---|---|
| OSS default | off | off | Local dev. Single-tenant self-host on a private network. |
| Production self-host | on | optional | Multi-tenant self-host behind a public URL. |