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 |
codifytasks, codifypipeline, coderetriever, exatasks, scrapegraph_tasks |
| Observability |
keywordsai (MONITORINGTOOL=keywordsai + KEYWORDSAIAPI_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 usevectoradapter(name, AdapterClass) / usegraphadapter(...). Setting VECTORDBPROVIDER/GRAPHDATABASEPROVIDER 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 ENABLEBACKENDACCESSCONTROL=true (the default), both backends must have a dataset-database handler or cognee raises EnvironmentError. Community adapters that ship one (registered via usedatasetdatabasehandler in their register.py): qdrant, moss, singlestore, turbopuffer (vector + graph), falkordb, arcadedb, helixdb. All other community adapters need ENABLEBACKENDACCESS_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 (LLMAPIKEY, 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/contractsuite/ (vectorcontract.py / graph_contract.py).
- Add a handler via
usedatasetdatabase_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.