Skip to content

Introduction

One TypeScript API for Qdrant, pgvector, Pinecone, Supabase, Upstash Vector, Cloudflare Vectorize, and Redis. Write a filter once and each adapter compiles it to the provider's native syntax.

VecStore SDK gives you one TypeScript API for seven vector databases. You write one metadata filter, and each adapter compiles it to the provider's native syntax.

Vector databases agree on the verbs (upsert, query, fetch, delete) and disagree on the rest. Pinecone filters use MongoDB-style operators, Qdrant uses must and should clauses, pgvector uses SQL, Upstash uses a SQL-like string, Redis uses its own query language, and Vectorize joins every clause with AND and has no OR at all. Qdrant accepts only UUID point ids, and Vectorize caps an id at 64 bytes. Pinecone and Vectorize have native namespaces and the others do not. Redis searches a metadata field only when the index schema declares it. Supabase reaches Postgres over HTTP, where no vector operator exists. Each SDK throws its own error classes.

VecStore SDK hides those differences behind a small adapter API:

  • A filter type with builders (eq, gt, isIn, and, or, not) that compiles to each provider.
  • Four record verbs and three index verbs with the same signatures on every provider.
  • Namespaces on every provider. The adapter emulates them where the provider lacks them.
  • Errors as a discriminated union that you match on. The SDK never throws them.
  • A raw property that returns the native client you passed in.

Embedding is out of scope. Generate vectors with your model provider and pass the numbers in.

Providers

VecStore SDK supports seven providers. Every verb and every filter builder works on all of them, except where Vectorize has no equivalent. The badges show what each adapter does differently.

Next steps

On this page