Skip to content

feat: add FalkorDB export backend (#1175)#1176

Merged
safishamsi merged 4 commits into
Graphify-Labs:v8from
galshubeli:falkordb-backend
Jun 12, 2026
Merged

feat: add FalkorDB export backend (#1175)#1176
safishamsi merged 4 commits into
Graphify-Labs:v8from
galshubeli:falkordb-backend

Conversation

@galshubeli

Copy link
Copy Markdown

Closes #1175.

Adds FalkorDB as a sibling option to the existing Neo4j sink, selected via
graphify export falkordb (with --push for a direct push).

What

  • New push_to_falkordb() in graphify/export.py — mirrors push_to_neo4j().
  • export falkordb subcommand wired in graphify/__main__.py, parallel to neo4j:
    writes cypher.txt with no --push, pushes directly with --push.
  • falkordb optional extra in pyproject.toml (and added to the all extra).
  • Tests in tests/test_cli_export.py (cypher generation, CI-safe) and a new
    tests/test_falkordb_integration.py (real FalkorDB, auto-skips when none reachable).
  • README extras table + command reference and CHANGELOG updated.

How

FalkorDB is OpenCypher-compatible, so the MERGE/SET upsert queries are identical
to the Neo4j path — the function is a near line-for-line mirror of push_to_neo4j.
Differences are documented in the function's docstring:

  • connects with FalkorDB(host, port, username, password) (URI parsed for host/port,
    default port 6379) instead of a bolt driver, and selects a named graph via
    db.select_graph(graph_name) (default "graphify");
  • queries run via graph.query(cypher, params) — no session object;
  • auth is optional (FalkorDB runs without credentials by default), so the push path
    connects anonymously unless a password is supplied;
  • no APOC — the Neo4j path doesn't use it either, so nothing to port.

A couple of notes on scope, to keep the diff tight and reviewable:

  • graphify has no sinks/ package or --graph-backend flag today — the Neo4j sink is
    a function in export.py dispatched by the export <format> subcommand. I mirrored
    that exact pattern rather than introducing new structure.
  • I deliberately did not add a top-level --falkordb skill flag (the
    --neo4j/--neo4j-push flags live in the generated skill files under skillgen's
    drift guard). Happy to add that as a follow-up if you'd like parity there.

Test plan

  • pytest tests/test_cli_export.py tests/test_export.py — passes (no external service).
  • pytest tests/test_falkordb_integration.py against falkordb/falkordb:latest — passes
    (push + node/edge count assertions + idempotency); auto-skips with no FalkorDB.
  • Manual: indexed test fixture pushed with graphify export falkordb --push redis://localhost:6379 produces 4 nodes / 4 edges, equivalent to the Neo4j path, and
    is idempotent on re-run.

— Gal

Adds FalkorDB as a sibling option to the existing Neo4j sink, selected via
`graphify export falkordb [--push redis://localhost:6379]`.

- New push_to_falkordb() in graphify/export.py mirrors push_to_neo4j; FalkorDB
  is OpenCypher-compatible so the MERGE/SET upsert queries are identical.
- export falkordb subcommand wired in graphify/__main__.py (cypher.txt when no
  --push, direct push otherwise). Auth is optional; target graph defaults to
  "graphify".
- falkordb optional extra in pyproject.toml (and in the all extra).
- Tests: CLI cypher generation (CI-safe) + real-FalkorDB integration tests that
  skip when no instance is reachable.
- README extras table + command reference and CHANGELOG updated.
Gal Shubeli added 3 commits June 8, 2026 12:56
…/ URI

Makes the FalkorDB option a first-class sibling of Neo4j in the agent skill,
not just the export CLI:

- --falkordb / --falkordb-push shorthands documented in core.md + the shared
  exports.md reference, so they render into all modular platform skills and
  read exactly like --neo4j / --neo4j-push. (The aider/devin monoliths are
  diff-frozen vs v8 by skillgen's roundtrip guard, so they are left untouched.)
- README command reference switched to the /graphify ./raw --falkordb-push form.
- Documented URI scheme is now falkordb://localhost:6379; the scheme is only
  informational (host/port are parsed out), so redis:// or a bare host:port
  remain equivalent. Regenerated skill artifacts + expected/ snapshots.
The no-push 'graphify export falkordb' path advertised
'redis-cli -x GRAPH.QUERY graphify < cypher.txt', but FalkorDB rejects that
with 'query with more than one statement is not supported' - cypher.txt is a
multi-statement Neo4j script. The individual statements ARE valid OpenCypher
(verified by loading them one at a time), only bulk script import is unsupported.

Message + skill docs now say so and point to --push (the verified load path).
…rdb)

The --push/--user/--password export flags feed both the neo4j and falkordb
dispatch branches, so the neo4j_ prefix was misleading - a neo4j_password that
reads FALKORDB_PASSWORD made no sense. Renamed to push_uri/push_user/
push_password, and the password env lookup now reads the backend-specific var
(FALKORDB_PASSWORD for falkordb, NEO4J_PASSWORD otherwise) instead of OR-ing both.
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.

Offer: contribute FalkorDB backend alongside the existing Neo4j push

2 participants