Skip to main content
Graph stores capture entities and relationships in knowledge graphs. They enable Cognee to understand structure and navigate connections between concepts, providing powerful reasoning capabilities.
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 graph store options:
  • Kuzu — Local file-based graph database (default)
  • Kuzu-remote — Kuzu with HTTP API access
  • Neo4j — Production-ready graph database (self-hosted or Docker)
  • Neo4j Aura — Neo4j’s fully managed cloud service
  • Neptune — Amazon Neptune cloud graph database
  • Neptune Analytics — Amazon Neptune Analytics hybrid solution
  • Memgraph — In-memory graph database (community adapter)
Local vs. cloud storage: By default Cognee stores its graph in a local Kuzu file. To persist data in the cloud, switch to a remote provider such as Neo4j Aura, Neptune, or a self-hosted Neo4j instance on a remote server.

Configuration

Set these environment variables in your .env file:
  • GRAPH_DATABASE_PROVIDER — The graph store provider (kuzu, kuzu-remote, neo4j, neptune, neptune_analytics)
  • GRAPH_DATABASE_URL — Database URL or connection string
  • GRAPH_DATABASE_USERNAME — Database username (optional)
  • GRAPH_DATABASE_PASSWORD — Database password (optional)
  • GRAPH_DATABASE_NAME — Database name (optional)

Setup Guides

Kuzu is file-based and requires no network setup. It’s perfect for local development and single-user scenarios.
GRAPH_DATABASE_PROVIDER="kuzu"
# Optional: override location
# SYSTEM_ROOT_DIRECTORY=/absolute/path/.cognee_system
# The graph file will default to <SYSTEM_ROOT_DIRECTORY>/databases/cognee_graph_kuzu
Installation: Kuzu is included by default with Cognee. No additional installation required.Data Location: The graph is stored on disk. Path defaults under the Cognee system directory and is created automatically.
Concurrency Limitation: Kuzu uses file-based locking and is not suitable for concurrent use from different agents or processes. For multi-agent scenarios, use Neo4j instead.
Use Kuzu with an HTTP API when you need remote access or want to run Kuzu as a service.
GRAPH_DATABASE_PROVIDER="kuzu-remote"
GRAPH_DATABASE_URL="http://localhost:8000"
GRAPH_DATABASE_USERNAME="<optional>"
GRAPH_DATABASE_PASSWORD="<optional>"
Installation: Requires a running Kuzu service exposing an HTTP API.
Neo4j is recommended for production environments where you need a powerful, dedicated graph database. Data is stored on the Neo4j server (local or remote), not on the Cognee host machine.
GRAPH_DATABASE_PROVIDER="neo4j"
GRAPH_DATABASE_URL="bolt://localhost:7687"
GRAPH_DATABASE_NAME="neo4j"
GRAPH_DATABASE_USERNAME="neo4j"
GRAPH_DATABASE_PASSWORD="pleaseletmein"
Installation: Install Neo4j extras:
pip install "cognee[neo4j]"
Docker Setup: Start the bundled Neo4j service with APOC + GDS plugins:
docker compose --profile neo4j up -d
Neo4j Aura is Neo4j’s fully managed cloud service. Graph data is stored in Neo4j’s cloud infrastructure — nothing is stored locally on your machine.There are two ways to use Neo4j Aura with Cognee:Option 1 — Connect to an existing Aura instanceCreate a free or paid Aura instance at console.neo4j.io, then point Cognee at it using the neo4j+s:// connection URI provided in your Aura console:
GRAPH_DATABASE_PROVIDER="neo4j"
GRAPH_DATABASE_URL="neo4j+s://<your-instance-id>.databases.neo4j.io"
GRAPH_DATABASE_NAME="neo4j"
GRAPH_DATABASE_USERNAME="neo4j"
GRAPH_DATABASE_PASSWORD="<your-aura-password>"
Option 2 — Auto-provisioned Aura instances per dataset (multi-user mode)Cognee’s Neo4jAuraDevDatasetDatabaseHandler can automatically create and delete a dedicated Neo4j Aura instance for each Cognee dataset. This requires Neo4j Aura API credentials (OAuth):
GRAPH_DATABASE_PROVIDER="neo4j"
GRAPH_DATASET_DATABASE_HANDLER="neo4j_aura_dev"
NEO4J_CLIENT_ID=<your_oauth_client_id>
NEO4J_CLIENT_SECRET=<your_oauth_client_secret>
NEO4J_TENANT_ID=<your_aura_tenant_id>
NEO4J_ENCRYPTION_KEY=<key_for_encrypting_stored_credentials>
See the Neo4j Aura Dataset Database Handler page for full details on Option 2.Installation: Install Neo4j extras:
pip install "cognee[neo4j]"
Use Amazon Neptune for cloud-based graph storage.
GRAPH_DATABASE_PROVIDER="neptune"
GRAPH_DATABASE_URL="neptune://<GRAPH_ID>"
# AWS credentials via environment or default SDK chain
Installation: Install Neptune extras:
pip install "cognee[neptune]"
Note: AWS credentials should be configured via environment variables or AWS SDK.
Use Amazon Neptune Analytics as a hybrid vector + graph backend.
GRAPH_DATABASE_PROVIDER="neptune_analytics"
GRAPH_DATABASE_URL="neptune-graph://<GRAPH_ID>"
# AWS credentials via environment or default SDK chain
Installation: Install Neptune extras:
pip install "cognee[neptune]"
Note: This is the same as the vector store configuration. Neptune Analytics serves both purposes.

Advanced Options

Enable per-user dataset isolation for multi-tenant scenarios.
ENABLE_BACKEND_ACCESS_CONTROL="true"
This feature is available for Kuzu and other supported graph stores.

Provider Comparison

ProviderData LocationSetupPerformanceUse Case
KuzuLocal diskZero setupGoodLocal development
Kuzu-remoteRemote serverServer requiredGoodRemote access
Neo4j (self-hosted)Neo4j serverServer requiredExcellentProduction
Neo4j AuraNeo4j cloudAura account requiredExcellentManaged cloud
NeptuneAWS cloudAWS requiredExcellentCloud solution
Neptune AnalyticsAWS cloudAWS requiredExcellentHybrid cloud solution

Important Considerations

  • Local providers (Kuzu): Graph files are created automatically under SYSTEM_ROOT_DIRECTORY
  • Remote providers (Neo4j, Neptune): Require running services or cloud setup
  • Path management: Local graphs are managed automatically, no manual path configuration needed
  • Kuzu: Single-file storage with good local performance
  • Neo4j: Excellent for production workloads with proper indexing
  • Neptune: Cloud-scale performance with managed infrastructure
  • Hybrid solutions: Combine graph and vector capabilities in one system

Community-Maintained Providers

Additional graph stores are available through community-maintained adapters:
  • Memgraph — In-memory graph database (Bolt protocol)

Notes

When backend access control is enabled, Cognee can isolate graph data per dataset for supported providers such as Kuzu. This is mainly relevant for multi-user deployments where different users or workloads should not share the same graph state by default.
For local Kuzu setups, Cognee creates and manages the graph database automatically under the system directory. In most cases you do not need to manually create graph files or point Cognee at a specific path unless you are customizing SYSTEM_ROOT_DIRECTORY.
Neptune-based setups rely on AWS credentials, network access, and the appropriate IAM permissions to connect successfully. Before using Neptune or Neptune Analytics, make sure your environment can authenticate through the standard AWS SDK credential chain.
APOC is required for Neo4j type labels. Cognee uses apoc.create.addLabels to apply type-specific labels to every node. Without it, Cognee can still store nodes, but Neo4j will only show the generic __Node__ label, making entity types harder to inspect directly.The bundled Docker Compose Neo4j profile already includes APOC. For self-hosted Neo4j instances, install the APOC plugin before connecting Cognee.
The warning No nodes found in the database means the graph DB at the current path is empty. Common causes:
For Kuzu, the graph is stored on disk at:
{SYSTEM_ROOT_DIRECTORY}/databases/cognee_graph_kuzu
SYSTEM_ROOT_DIRECTORY defaults to a .cognee_system folder inside the installed Cognee package directory (typically inside your virtual environment). If this path resolves differently across sessions — for example, after reinstalling packages or using a different virtual environment — each session sees an empty graph.Pin it to an explicit absolute path in your .env:
SYSTEM_ROOT_DIRECTORY=/home/user/my-project/.cognee_system
Raw ingested files (added via add()) are stored separately under DATA_ROOT_DIRECTORY, which defaults to .data_storage in the same package directory. Set both if you want fully portable storage:
SYSTEM_ROOT_DIRECTORY=/home/user/my-project/.cognee_system
DATA_ROOT_DIRECTORY=/home/user/my-project/.data_storage
The graph persists on disk between runs — you do not need to re-run add() + cognify() every time. Calling search() or visualize_graph() in a new session will find existing data, as long as SYSTEM_ROOT_DIRECTORY points to the same location as the original ingestion run.
cognee.prune.prune_system() deletes all graph and system data. Re-run add() and cognify() to rebuild it.

Vector Stores

Configure vector databases for embedding storage

Relational Databases

Set up SQLite or Postgres for metadata storage

Overview

Return to setup configuration overview