Skip to content

feat: Add ArcadeDB backend driver#1310

Open
lvca wants to merge 2 commits intogetzep:mainfrom
ArcadeData:feat/arcadedb-backend
Open

feat: Add ArcadeDB backend driver#1310
lvca wants to merge 2 commits intogetzep:mainfrom
ArcadeData:feat/arcadedb-backend

Conversation

@lvca
Copy link

@lvca lvca commented Mar 9, 2026

Summary

Adds ArcadeDB as a new graph database backend for Graphiti, as requested in #1259.

ArcadeDB is an open-source (Apache 2.0) multi-model DBMS that natively supports graph, document, vector (HNSW), and full-text search (Lucene) — all in a single engine. ArcadeDB 26.2.1+ ships the Neo4j Bolt wire protocol, allowing the existing neo4j Python async driver to connect directly with zero additional dependencies.

What's included

  • ArcadeDBDriver — main driver using AsyncGraphDatabase (Bolt transport)
  • 11 operation implementations — full coverage of all CRUD and search operations:
    • Entity, Episode, Community, Saga node operations
    • Entity, Episodic, Community, HasEpisode, NextEpisode edge operations
    • Search operations (fulltext, similarity, BFS, rerankers)
    • Graph maintenance operations
  • ArcadeDB-specific SQL DDL for index creation (range indexes + Lucene fulltext indexes)
  • GraphProvider.ARCADEDB enum value
  • ArcadeDB branches in shared query builders (node_db_queries, edge_db_queries, graph_queries, search_filters)
  • arcadedb optional dependency in pyproject.toml (empty — reuses neo4j core dependency)

Key design decisions

Concern Approach
Transport Reuses neo4j async driver via Bolt protocol — no new dependency
Embeddings Stored as regular list properties (no db.create.setNodeVectorProperty())
Labels Stored as node property (ArcadeDB has single-type-per-vertex)
Batch deletes Direct DETACH DELETE (no Neo4j IN TRANSACTIONS syntax)
Vector search Cosine similarity computed in Python via numpy; can be optimized with ArcadeDB's native vectorNeighbors()
Fulltext search Uses CONTAINS predicates; can be enhanced with native Lucene index queries
Multi-label MATCH Label-less MATCH (node {uuid: ...}) for polymorphic queries (like FalkorDB)

Usage

from graphiti_core.driver.arcadedb_driver import ArcadeDBDriver

driver = ArcadeDBDriver(
    uri="bolt://localhost:7687",
    user="root",
    password="arcadedb",
    database="graphiti",
)
await driver.build_indices_and_constraints()
# Docker quickstart
docker run -d -p 2480:2480 -p 7687:7687 \
  -e JAVA_OPTS="-Darcadedb.server.plugins=Bolt:com.arcadedb.server.bolt.BoltPlugin" \
  arcadedata/arcadedb

Why ArcadeDB for Graphiti

With Kùzu archived after the Apple acquisition (#1132), users looking for a self-contained, local-first graph + vector + fulltext backend now have ArcadeDB as an option:

  • Graph traversal — native graph engine with O(1) traversal
  • Vector similarity — built-in HNSW vector indexes
  • Full-text search — Lucene-based fulltext indexes
  • License — Apache 2.0 (permissive)
  • Deployment — embedded or server mode, single JAR

Closes #1259

Test plan

  • Unit tests for ArcadeDB driver class (session, query execution, index ops)
  • Integration tests with ArcadeDB Docker container (arcadedata/arcadedb)
  • Verify CRUD operations for all node and edge types
  • Verify search operations (fulltext, similarity, BFS)
  • Verify index creation via SQL DDL over Bolt
  • Run make check (ruff + pyright)

🤖 Generated with Claude Code

ArcadeDB is an open-source multi-model DBMS that natively supports
graph, document, vector (HNSW), and full-text search (Lucene) in a
single engine. ArcadeDB 26.2.1+ ships the Neo4j Bolt wire protocol,
allowing the existing neo4j Python async driver to connect directly.

This adds:
- ArcadeDBDriver using AsyncGraphDatabase (Bolt transport)
- 11 operation implementations (entity/episode/community/saga nodes,
  entity/episodic/community/has-episode/next-episode edges, search,
  graph maintenance)
- ArcadeDB-specific SQL DDL for index creation (range + Lucene fulltext)
- GraphProvider.ARCADEDB enum value
- ArcadeDB branches in shared query builders (node_db_queries,
  edge_db_queries, graph_queries, search_filters)
- arcadedb optional dependency in pyproject.toml

Key design decisions:
- Reuses neo4j async driver (no new dependency needed)
- Embeddings stored as regular list properties (no vector property API)
- Labels stored as node property (single-type-per-vertex constraint)
- Batch deletes without Neo4j's IN TRANSACTIONS syntax
- Vector similarity computed in Python via numpy (can be optimized
  with ArcadeDB's native vectorNeighbors() in future iterations)
- Fulltext search via CONTAINS predicates (can be enhanced with
  native Lucene index queries in future iterations)

Closes getzep#1259

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@danielchalef
Copy link
Member

danielchalef commented Mar 9, 2026

All contributors have signed the CLA ✍️ ✅
Posted by the CLA Assistant Lite bot.

Add unit tests for ArcadeDBDriver (driver init, query execution,
sessions, health check, transactions, operations properties).
Add quickstart example following the FalkorDB pattern. Update
helpers_test.py with ArcadeDB driver discovery for integration
tests. Update README with ArcadeDB installation, configuration,
and architecture sections.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@lvca
Copy link
Author

lvca commented Mar 9, 2026

I have read the CLA Document and I hereby sign the CLA

danielchalef added a commit that referenced this pull request Mar 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] ArcadeDB backend support

2 participants