Skip to content

feat: Add ArcadeDB backend driver#1310

Open
lvca wants to merge 4 commits into
getzep:mainfrom
ArcadeData:feat/arcadedb-backend
Open

feat: Add ArcadeDB backend driver#1310
lvca wants to merge 4 commits into
getzep:mainfrom
ArcadeData:feat/arcadedb-backend

Conversation

@lvca

@lvca lvca commented Mar 9, 2026

Copy link
Copy Markdown

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 <[email protected]>
@danielchalef

danielchalef commented Mar 9, 2026

Copy link
Copy Markdown
Member

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 <[email protected]>
@lvca

lvca commented Mar 9, 2026

Copy link
Copy Markdown
Author

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

danielchalef added a commit that referenced this pull request Mar 9, 2026
ehfazrezwan added a commit to ehfazrezwan/neuralscape that referenced this pull request Apr 2, 2026
feafc422 Bump the uv group across 2 directories with 2 updates (#1363)
c4e6923b Upstream Zep internal improvements (#1361)
e88c09ca @VictorECDSA has signed the CLA in getzep/graphiti#1356
91fe7e0e @majiayu000 has signed the CLA in getzep/graphiti#1351
c52786d2 @dudo has signed the CLA in getzep/graphiti#1350
d631437d @Ker102 has signed the CLA in getzep/graphiti#1339
73cff2cb @chengjon has signed the CLA in getzep/graphiti#1340
8c617639 @rhlsthrm has signed the CLA in getzep/graphiti#1335
e6424bae @pratyush618 has signed the CLA in getzep/graphiti#1332
6f05647c @bsolomon1124 has signed the CLA in getzep/graphiti#1330
10d91394 @spencer2211 has signed the CLA in getzep/graphiti#1326
1ca14686 Add hiring promotion section to README (#1323)
19e44a97 Bump mcp-server to 1.0.2 and require graphiti-core>=0.28.2 (#1317)
77b16096 Bump graphiti-core version to 0.28.2 (#1315)
7d65d5e7 Harden search filters against Cypher injection (#1312)
b10b4889 Restore README title and subtitle (#1314)
a9065fa9 Refresh README content and fix image refs (#1313)
5a334ec5 @lvca has signed the CLA in getzep/graphiti#1310
45c8040e @jawherkh has signed the CLA in getzep/graphiti#1309
9eb2c9e8 @kraft87 has signed the CLA in getzep/graphiti#1305
334c8faa @adsharma has signed the CLA in getzep/graphiti#1296
b6f9d874 @StephenBadger has signed the CLA in getzep/graphiti#1295
4b91076a feat: Add GLiNER2 hybrid LLM client (#1284)
db54ce09 chore: update Docker images to graphiti-core 0.28.1 (#1292)
edc71e8e @devmao has signed the CLA in getzep/graphiti#1289
b4ddc55a @carlos-alm has signed the CLA in getzep/graphiti#1288
aa8e81e3 @giulio-leone has signed the CLA in getzep/graphiti#1280
6fdb352f @aelhajj has signed the CLA in getzep/graphiti#1281
2099603d @avianion has signed the CLA in getzep/graphiti#1278
9eb59f7f @themavik has signed the CLA in getzep/graphiti#1214
98f5b5ff fix: replace edge name with uuid in debug log (#1261)
510bd50d @hanxiao has signed the CLA in getzep/graphiti#1257
17a8ea9e @sprotasovitsky has signed the CLA in getzep/graphiti#1254
9d509a2a @Yifan-233-max has signed the CLA in getzep/graphiti#1245
ef52a2ad chore: regenerate lockfiles to drop diskcache (#1244)
76053036 chore: bump version to 0.28.1 (#1243)
bde2f797 fix: replace diskcache with sqlite-based cache to resolve CVE (#1238)

git-subtree-dir: graphiti
git-subtree-split: feafc422c739f0da166241d4804a9830a294d366
@lvca

lvca commented Apr 8, 2026

Copy link
Copy Markdown
Author

Please let me know if there is anything I can do.

verveguy pushed a commit to verveguy/graphiti that referenced this pull request Apr 15, 2026
verveguy pushed a commit to verveguy/graphiti that referenced this pull request Apr 16, 2026
verveguy pushed a commit to verveguy/graphiti that referenced this pull request Apr 16, 2026
verveguy pushed a commit to verveguy/graphiti that referenced this pull request Apr 16, 2026
verveguy added a commit to verveguy/graphiti that referenced this pull request Apr 17, 2026
Brings in the 20 commits liminis added since this branch forked, including the
Kuzu → LadybugDB rename refactor (GraphProvider.LADYBUG, ladybug_driver.py,
ladybug/operations/) and the LadybugDriver.close() hardening for clean
file-backed teardown.

Conflicts resolved in 6 files:

- README.md: kept liminis's expanded "Graph Driver Architecture" section
  (full 11-ABC walkthrough + adding-a-driver guide), and updated the telemetry
  bullet to read "LadybugDB" instead of upstream's stale "Kuzu".

- signatures/version1/cla.json: kept upstream's six new CLA entries appended
  after PR getzep#1310.

- graphiti_core/search/search_filters.py: combined upstream's Cypher injection
  hardening (validate_node_labels) with liminis's GraphProvider.LADYBUG rename
  in both node and edge filter constructors.

- graphiti_core/search/search_utils.py: combined upstream's validate_group_ids
  call with liminis's GraphProvider.LADYBUG rename in fulltext_query.

- tests/helpers_test.py: kept liminis's three additions — DISABLE_LADYBUG
  driver registration, LADYBUG_DB env var, and LADYBUG branch in get_driver.

- tests/test_graphiti_drivers_int.py: kept liminis's six pytest.skip guards
  for LadybugDB on tests it doesn't yet support (fulltext indexing, etc.).
  Note the file rename from test_graphiti_mock.py we did earlier; resolution
  markers reflected the rename via "liminis:tests/test_graphiti_mock.py".

433 unit tests pass (~10s). Zero new failures versus liminis baseline.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
@lvca

lvca commented Jun 9, 2026

Copy link
Copy Markdown
Author

Hi guys, anew news on this?

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