Use and contribute cognee-community packages
Community-maintained plugins live in a separate monorepo:
https://github.com/topoteretes/cognee-community. Everything installable is
under packages/; experimental/ holds demos (n8n nodes, dlt demos,
bauplan, tower) that are not published packages. Each package publishes to
PyPI as cognee-community-<family>-<kind>-<name> and imports as the same
name with underscores.
Package families
| Family |
Packages |
| Vector adapters |
azureaisearch, milvus, moss, opengauss, opensearch, pinecone, qdrant, redis, singlestore, turbopuffer, valkey, weaviate |
| Graph adapters |
arcadedb, memgraph, networkx, pggraph, spanner, turbopuffer, turingdb |
| Hybrid (graph+vector in one DB) |
arcadedb, duckdb, falkordb, helixdb |
| Connectors (data sources) |
confluence, gmail, google-drive, notion, slack |
| Tasks / pipelines / retrievers |
codify_tasks, codify_pipeline, code_retriever, exa_tasks, scrapegraph_tasks |
| Observability |
keywordsai (MONITORING_TOOL=keywordsai + KEYWORDSAI_API_KEY) |
Using a database adapter
Install, then import the package's register module before cognee touches
any engine — registration is what makes the provider name valid:
uv pip install cognee-community-vector-adapter-qdrant
import cognee
from cognee import config
from cognee_community_vector_adapter_qdrant import register # noqa: F401
config.set_vector_db_config({
"vector_db_provider": "qdrant",
"vector_db_url": "http://localhost:6333",
"vector_db_key": "...",
"vector_dataset_database_handler": "qdrant", # only if the adapter ships one
})
The register.py calls use_vector_adapter(name, AdapterClass) /
use_graph_adapter(...). Setting VECTOR_DB_PROVIDER/GRAPH_DATABASE_PROVIDER
to a community name without the register import raises "Unsupported
vector database provider". Hybrid adapters (e.g. falkordb) register as both
graph and vector — set both configs to the same provider name.
Multi-tenancy caveat: with ENABLE_BACKEND_ACCESS_CONTROL=true (the
default), both backends must have a dataset-database handler or cognee raises
EnvironmentError. Community adapters that ship one (registered via
use_dataset_database_handler in their register.py): qdrant, moss,
singlestore, turbopuffer (vector + graph), falkordb, arcadedb, helixdb. All
other community adapters need ENABLE_BACKEND_ACCESS_CONTROL=false.
Using a connector
Connectors expose a dlt source you hand straight to remember(); they
reuse core's DLT ingestion path, so snapshot sync and forget-on-delete work
with no core changes:
from cognee_community_connector_slack import slack_export_source
await cognee.remember(
slack_export_source("/path/to/slack-export"),
dataset_name="team-slack-export", # use a dedicated dataset
max_rows_per_table=0,
)
Same shape for gmail ("ask my inbox"), notion, confluence, and google-drive
(incremental, forget-on-delete). Each package README documents its
credentials; always give a connector its own dataset.
Verifying an install
Every package has examples/example.py (run uv run python examples/example.py
from the package dir) and a tests/ directory. An LLM API key is still
required (LLM_API_KEY, OpenAI by default).
Contributing a package
- Branch from
main — unlike the core repo, cognee-community does not
use a dev branch.
- Follow the existing structure: package dir under
packages/<family>/<name>/
with pyproject.toml, a README.md (install + usage), examples/example.py,
and tests/ that go beyond the example.
- New DB adapters implement
VectorDBInterface / GraphDBInterface from
core, expose a register.py, and should run the shared conformance tests
in packages/shared/contract_suite/ (vector_contract.py / graph_contract.py).
- Add a handler via
use_dataset_database_handler(...) if the backend can
isolate per user+dataset — that's what makes it work with access control on.
- Name it
cognee-community-<family>-<kind>-<name> and add it to the tables
in the repo README. Lint config is the repo-root ruff.toml.
1---2name: cognee-community3description: Use when the user needs something that ships outside cognee core — community database adapters (Qdrant, Milvus, Weaviate, Redis, Pinecone, FalkorDB, Memgraph, DuckDB, NetworkX, …), data-source connectors (Slack, Gmail, Notion, Confluence, Google Drive), custom tasks/pipelines/retrievers (Exa, ScrapeGraph, codify), Keywords AI observability — or wants to contribute a package to the cognee-community repo.4---5
6# Use and contribute cognee-community packages
7
8Community-maintained plugins live in a separate monorepo:
9https://github.com/topoteretes/cognee-community. Everything installable is
10under `packages/`; `experimental/` holds demos (n8n nodes, dlt demos,
11bauplan, tower) that are not published packages. Each package publishes to
12PyPI as `cognee-community-<family>-<kind>-<name>` and imports as the same
13name with underscores.
14
15## Package families
16
17| Family | Packages |
18|---|---|
19| Vector adapters | azureaisearch, milvus, moss, opengauss, opensearch, pinecone, qdrant, redis, singlestore, turbopuffer, valkey, weaviate |
20| Graph adapters | arcadedb, memgraph, networkx, pggraph, spanner, turbopuffer, turingdb |
21| Hybrid (graph+vector in one DB) | arcadedb, duckdb, falkordb, helixdb |
22| Connectors (data sources) | confluence, gmail, google-drive, notion, slack |
23| Tasks / pipelines / retrievers | codify_tasks, codify_pipeline, code_retriever, exa_tasks, scrapegraph_tasks |
24| Observability | keywordsai (`MONITORING_TOOL=keywordsai` + `KEYWORDSAI_API_KEY`) |
25
26## Using a database adapter
27
28Install, then **import the package's `register` module before cognee touches
29any engine** — registration is what makes the provider name valid:
30
31```python
32uv pip install cognee-community-vector-adapter-qdrant
33```
34
35```python
36import cognee
37from cognee import config
38from cognee_community_vector_adapter_qdrant import register # noqa: F401
39
40config.set_vector_db_config({
41 "vector_db_provider": "qdrant",
42 "vector_db_url": "http://localhost:6333",
43 "vector_db_key": "...",
44 "vector_dataset_database_handler": "qdrant", # only if the adapter ships one
45})
46```
47
48The `register.py` calls `use_vector_adapter(name, AdapterClass)` /
49`use_graph_adapter(...)`. Setting `VECTOR_DB_PROVIDER`/`GRAPH_DATABASE_PROVIDER`
50to a community name **without** the register import raises "Unsupported
51vector database provider". Hybrid adapters (e.g. falkordb) register as both
52graph and vector — set both configs to the same provider name.
53
54**Multi-tenancy caveat**: with `ENABLE_BACKEND_ACCESS_CONTROL=true` (the
55default), both backends must have a dataset-database handler or cognee raises
56`EnvironmentError`. Community adapters that ship one (registered via
57`use_dataset_database_handler` in their `register.py`): qdrant, moss,
58singlestore, turbopuffer (vector + graph), falkordb, arcadedb, helixdb. All
59other community adapters need `ENABLE_BACKEND_ACCESS_CONTROL=false`.
60
61## Using a connector
62
63Connectors expose a `dlt` source you hand straight to `remember()`; they
64reuse core's DLT ingestion path, so snapshot sync and forget-on-delete work
65with no core changes:
66
67```python
68from cognee_community_connector_slack import slack_export_source
69
70await cognee.remember(
71 slack_export_source("/path/to/slack-export"),
72 dataset_name="team-slack-export", # use a dedicated dataset
73 max_rows_per_table=0,
74)
75```
76
77Same shape for gmail ("ask my inbox"), notion, confluence, and google-drive
78(incremental, forget-on-delete). Each package README documents its
79credentials; always give a connector its own dataset.
80
81## Verifying an install
82
83Every package has `examples/example.py` (run `uv run python examples/example.py`
84from the package dir) and a `tests/` directory. An LLM API key is still
85required (`LLM_API_KEY`, OpenAI by default).
86
87## Contributing a package
88
89- **Branch from `main`** — unlike the core repo, cognee-community does not
90 use a `dev` branch.
91- Follow the existing structure: package dir under `packages/<family>/<name>/`
92 with `pyproject.toml`, a `README.md` (install + usage), `examples/example.py`,
93 and `tests/` that go beyond the example.
94- New DB adapters implement `VectorDBInterface` / `GraphDBInterface` from
95 core, expose a `register.py`, and should run the shared conformance tests
96 in `packages/shared/contract_suite/` (vector_contract.py / graph_contract.py).
97- Add a handler via `use_dataset_database_handler(...)` if the backend can
98 isolate per user+dataset — that's what makes it work with access control on.
99- Name it `cognee-community-<family>-<kind>-<name>` and add it to the tables
100 in the repo README. Lint config is the repo-root `ruff.toml`.