New to configuration?See the Setup Configuration Overview for the complete workflow:install extras → create
.env → choose providers → handle pruning.Supported Providers
Cognee supports multiple vector store options through built-in providers and community-maintained adapters:Configuration
Environment Variables
Environment Variables
Community adapters must still be installed and registered in your application startup code before Cognee can use their provider value.
- Local Path
- Postgres
- Turso
- Neptune
- ChromaDB
- Community Adapters
- Turbopuffer
Use this shape for LanceDB.
Setup Guides
LanceDB (Default)
LanceDB (Default)
LanceDB is file-based and requires no additional setup. It’s perfect for local development and single-user scenarios.Installation: LanceDB is included by default with Cognee. No additional installation required.Data Location: Vectors are stored in a local directory. Defaults under the Cognee system path if
VECTOR_DB_URL is empty.PGVector
PGVector
PGVector stores vectors inside your Postgres database using the pgvector extension.Installation: Install the Postgres extras:Docker Setup: Use the built-in Postgres with pgvector:Note: If using your own Postgres, ensure
CREATE EXTENSION IF NOT EXISTS vector; is available in the target database.For Neon Postgres, run that extension statement once in the Neon database where Cognee stores vectors. Neon still uses the regular Cognee pgvector provider; configure the relational DB_* values and DATABASE_CONNECT_ARGS as described in Relational Databases, then set VECTOR_DB_PROVIDER="pgvector".When backend access control is enabled, configure the explicit VECTOR_DB_HOST, VECTOR_DB_PORT, VECTOR_DB_NAME, VECTOR_DB_USERNAME, and VECTOR_DB_PASSWORD values instead of relying on the relational DB fallback.Turso (libSQL)
Turso (libSQL)
Turso stores vectors in libSQL. The same adapter works either embedded (a local Remote Turso cloud:Installation: Install the Turso extra:This pulls in
.turso.db file) or against a remote Turso cloud database.Embedded (local file):libsql-experimental. If the extra is missing, selecting VECTOR_DB_PROVIDER="turso" raises an ImportError at engine creation with the install hint.URL detection: A libsql://, http(s)://, or ws(s):// URL connects to a remote libSQL server (using VECTOR_DB_KEY as the auth token). Any other value is treated as a local embedded file path.Multi-user mode: Setting VECTOR_DB_PROVIDER="turso" automatically selects the turso dataset database handler (you do not need to set VECTOR_DATASET_DATABASE_HANDLER yourself). With ENABLE_BACKEND_ACCESS_CONTROL=True, each dataset gets its own embedded libSQL file named {dataset_id}.turso.db under <SYSTEM_ROOT_DIRECTORY>/databases/{user_id}/. Deleting a dataset evicts its cached engine and removes that file.Qdrant
Qdrant
Qdrant requires a running instance of the Qdrant server.Installation: Since Qdrant is a community adapter, you have to install the community package:Configuration: To make sure Cognee uses Qdrant, you have to register it beforehand with the following line:For more details on setting up Qdrant, visit the more detailed description of this adapter.Docker Setup: Start the Qdrant service:Access: Default port is 6333 for the database, and you can access the Qdrant dashboard at “localhost:6333/dashboard”.
Redis
Redis
Redis can be used as a vector store through the Redis Search module, providing fast vector similarity search capabilities.Installation: Since Redis is a community adapter, you have to install the community package:Configuration: To make sure Cognee uses Redis, you have to register it beforehand with the following line:You can also configure Redis programmatically:For more details on setting up Redis, visit the more detailed description of this adapter.Docker Setup: Start a Redis instance with Search module enabled:Or use Redis Cloud with the Search module enabled: Redis CloudConnection URL Examples:
- Local:
redis://localhost:6379 - With authentication:
redis://user:password@localhost:6379 - With SSL:
rediss://localhost:6380
ChromaDB
ChromaDB
ChromaDB support is optional and may not be installed in your Cognee environment by default.Installation: Install ChromaDB support before configuring If you are using ChromaDB through a community adapter package instead of a Cognee extra, install that adapter package and call its
VECTOR_DB_PROVIDER=chromadb:register() function before running Cognee vector operations.Docker Setup: Start a ChromaDB server:FalkorDB
FalkorDB
FalkorDB can serve as both graph and vector store, providing a hybrid solution.Installation: Since FalkorDB is a community adapter, you have to install the community package:Configuration: To make sure Cognee uses FalkorDB, you have to register it beforehand with the following line:For more details on setting up FalkorDB, visit the more detailed description of this adapter.Docker Setup: Start the FalkorDB service:Access: Default ports are 6379 (DB) and 3000 (UI).
Neptune Analytics
Neptune Analytics
Use Amazon Neptune Analytics as a hybrid vector + graph backend.Installation: Install Neptune extras:Note: URL must start with
neptune-graph:// and AWS credentials should be configured via environment variables or AWS SDK.Important Considerations
Dimension Consistency
Dimension Consistency
Ensure
EMBEDDING_DIMENSIONS matches your vector store collection/table schemas:- PGVector column size
- LanceDB Vector size
- ChromaDB collection schema
PGVector table layout (where embeddings are stored)
PGVector table layout (where embeddings are stored)
PGVector does not use a single
embeddings table. Cognee creates one table per indexed field, named {DataPointType}_{field} — for example DocumentChunk_text, Entity_name, EntityType_name, and TextSummary_text. Each of these collection tables has exactly three columns:When PGVector shares the relational Postgres database, these collection tables live in the same schema as the snake_case relational metadata and provenance tables (
data, datasets, dataset_data, nodes, and edges). If you configure PGVector with separate VECTOR_DB_* settings, the collection tables live in that vector database instead. When using the Postgres graph store, graph data is stored in graph_node and graph_edge.Cognee distinguishes vector collections by their PascalCase first letter. Text content is stored in the JSON payload and in TEXT columns; there are no fixed-width varchar(255) columns (the relational provenance nodes.label / nodes.type columns were migrated from varchar(255) to TEXT).Provider Comparison
Provider Comparison
Troubleshooting
Too many open files on macOS
Too many open files on macOS
This issue is most commonly reported with LanceDB-backed search workloads.Because the exception often appears inside LanceDB internals, it may not be obvious that the underlying issue is subprocess and file-descriptor exhaustion rather than a LanceDB data problem.If this happens:And raise the shell limit before starting Cognee:This is especially relevant for audit-style or multi-dataset search runs where Cognee fans queries out across several datasets in parallel.
VECTOR_DB_SUBPROCESS_ENABLED defaults to true. In high-fanout searches — for example, many queries across many datasets — this can create a large number of OS subprocesses. On macOS, that can quickly hit the default file descriptor limit (ulimit -n, often 256) and surface as:Subprocess concurrency and per-call failures
Subprocess concurrency and per-call failures
When
VECTOR_DB_SUBPROCESS_ENABLED is true, concurrent async RPCs to the LanceDB subprocess run in parallel rather than serializing behind a single session lock. Each request carries its own id and is routed back to its own waiter, so concurrent add and search operations no longer queue behind one another.SUBPROCESS_WORKER_MAX_INFLIGHT (default 16) bounds how many async operations a worker runs at once, keeping the worker’s memory footprint predictable. The value must be > 0; a zero or negative value fails worker initialization with a ValueError rather than silently degrading. Raise it for higher concurrency (for example, SUBPROCESS_WORKER_MAX_INFLIGHT=64), or set a large value to effectively remove the cap.A per-call timeout or cancellation now resolves only that individual call and leaves the subprocess session running for other in-flight and future calls. The session is torn down only on genuine session-ending events (worker crash, shutdown, or respawn), which propagate a SubprocessTransportError to any calls still pending. Synchronous calls (such as the Kuzu graph backend) are unaffected and continue to run serially.Community-Maintained Providers
Additional vector stores are available through community-maintained adapters:- Qdrant — Vector search engine with cloud and self-hosted options
- Redis — Fast vector similarity search
- FalkorDB — Hybrid vector and graph store
- Pinecone — Managed vector database (requires separate install + registration)
- Turbopuffer — High-performance vector database
- Milvus, Weaviate, and more — See all community adapters
Notes
- Embedding Integration: Vector stores use your embedding engine from the Embeddings section
- Dimension Matching: Keep
EMBEDDING_DIMENSIONSconsistent between embedding provider and vector store - Performance: Local providers (LanceDB) are simpler but cloud providers offer better scalability
Embedding Providers
Configure embedding providers for vector generation
Graph Stores
Set up graph databases for knowledge graphs
Overview
Return to setup configuration overview