Integrations#
Each integration is an optional extra, so the core stays free of dependencies. The OPA, OpenFGA, SpiceDB and Cerbos authorizers need no extra at all: they use the standard library’s HTTP client.
Integration |
Kind |
Install |
Pre-filters |
|---|---|---|---|
Backend |
|
Yes, inside the SQL query |
|
Backend |
|
Yes, as a |
|
Backend |
|
Yes, inside the kNN search |
|
Backend |
|
Yes, inside the k-NN search |
|
Backend |
|
Yes, as a |
|
Backend |
|
Yes, inside the vector search, with parameterized filters |
|
Backend |
|
Yes, as the |
|
Backend |
|
Yes, inside the vector search |
|
Backend |
|
Yes, in the same KNN query |
|
Backend |
|
Yes, before the vector search ranks |
|
Authorizer |
none |
When the policy returns a filter |
|
Authorizer |
none |
Yes, through ListObjects |
|
Authorizer |
none |
Yes, through LookupResources |
|
Authorizer |
none |
Yes, from query plans |
|
Authorizer, in process |
|
No: post-filters, every candidate decided by Cedar |
|
Permission sync onto the chunks |
none (bring Google’s client) |
Through |
|
Framework, and any LangChain vector store as a backend |
|
Wrapped stores post-filter |
|
Framework, and any LlamaIndex index as a backend |
|
Wrapped indexes post-filter |
|
Framework |
|
Through any needtoknow backend |
|
Agent tool server |
|
Through any needtoknow backend |
|
OpenAI Agents SDK, Pydantic AI, CrewAI, through MCP |
none (the framework’s MCP client) |
Through any needtoknow backend |
|
Reference RAG service: verified tokens, tenants, safe errors |
none (your app’s FastAPI) |
Through any needtoknow backend |
|
Observer |
|
Choosing a store#
Every store applies the permission filter inside its own search, passes the conformance kit in CI against the real store, and keeps permission values out of query text. They differ in what is worth knowing in production:
Store |
A write is searchable |
Native |
Permission values travel as |
Keyword search |
CI tests against |
|---|---|---|---|---|---|
When |
|
Bound SQL parameters (jsonb containment) |
Full-text, |
PostgreSQL 17 with pgvector |
|
When |
No (a thread) |
A |
No |
Chroma’s in-process client |
|
When |
|
A |
BM25, |
9.5.5 |
|
When |
|
A |
BM25, |
3.9.0 |
|
When |
|
Filter objects ( |
BM25 (IDF modifier), |
1.19.2 |
|
At once (strong consistency, the default) |
|
|
BM25, |
3.0.2 |
|
When |
|
A BSON filter ( |
BM25 (Atlas Search), |
Atlas Local 8.0.30 |
|
When |
|
Filter objects ( |
BM25, |
1.39.12 |
|
When |
|
Hex-encoded TAG values |
BM25, |
8.10.2 |
|
When |
No (a thread) |
Hex-encoded list values ( |
BM25, |
LanceDB 0.40, embedded |
Keyword and vector search combine into hybrid search with RankFusion, across
stores as well as within one. Measured recall, latency and throughput at a million chunks are in
Benchmarks for pgvector, Qdrant,
Elasticsearch, OpenSearch and Weaviate.
Backends and authorizers combine freely: pgvector with OpenFGA, Chroma with OPA, a LangChain
store with permissions on the chunks. A store not listed here needs only a search method; see
Extending needtoknow.