feat: add FalkorDB export backend (#1175)#1176
Merged
Merged
Conversation
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.
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.
safishamsi
added a commit
that referenced
this pull request
Jun 12, 2026
rbelem
pushed a commit
to rbelem/graphify
that referenced
this pull request
Jun 12, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #1175.
Adds FalkorDB as a sibling option to the existing Neo4j sink, selected via
graphify export falkordb(with--pushfor a direct push).What
push_to_falkordb()ingraphify/export.py— mirrorspush_to_neo4j().export falkordbsubcommand wired ingraphify/__main__.py, parallel toneo4j:writes
cypher.txtwith no--push, pushes directly with--push.falkordboptional extra inpyproject.toml(and added to theallextra).tests/test_cli_export.py(cypher generation, CI-safe) and a newtests/test_falkordb_integration.py(real FalkorDB, auto-skips when none reachable).How
FalkorDB is OpenCypher-compatible, so the
MERGE/SETupsert queries are identicalto the Neo4j path — the function is a near line-for-line mirror of
push_to_neo4j.Differences are documented in the function's docstring:
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");graph.query(cypher, params)— no session object;connects anonymously unless a password is supplied;
A couple of notes on scope, to keep the diff tight and reviewable:
sinks/package or--graph-backendflag today — the Neo4j sink isa function in
export.pydispatched by theexport <format>subcommand. I mirroredthat exact pattern rather than introducing new structure.
--falkordbskill flag (the--neo4j/--neo4j-pushflags live in the generated skill files under skillgen'sdrift 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.pyagainstfalkordb/falkordb:latest— passes(push + node/edge count assertions + idempotency); auto-skips with no FalkorDB.
graphify export falkordb --push redis://localhost:6379produces 4 nodes / 4 edges, equivalent to the Neo4j path, andis idempotent on re-run.
— Gal