How Graphify Export Formats Work: HTML, GraphML, SVG, Neo4j, and FalkorDB
Graphify supports five distinct export formats—HTML, GraphML, SVG, Neo4j Cypher, and FalkorDB—each handled by dedicated exporter modules under graphify/exporters/ that transform NetworkX graph objects into visualization-ready or database-compatible outputs.
Graphify, an open-source knowledge graph builder from Graphify-Labs/graphify, converts source code into structured graph representations. Understanding how these Graphify export formats function helps you integrate graph data into visualization tools, databases, or documentation pipelines.
HTML Export (Interactive Visualization)
The HTML exporter generates self-contained interactive web pages using the Vis.js library. Located in graphify/exporters/html.py, this exporter creates browser-ready visualizations where nodes are colored by community detection results and users can filter via a search box.
The implementation leverages a lightweight template (html_template.html) that receives serialized graph data, community mappings, and optional overlays (such as learning status or member counts) as JSON. Security measures include html.escape for all user-provided strings to prevent XSS attacks, and Subresource Integrity (SRI) checks for the Vis.js library scripts.
To maintain browser responsiveness, the exporter caps visualization at 5,000 nodes via the MAX_NODES_FOR_VIZ constant. When invoked programmatically, the function signature follows:
from graphify.export import to_html
to_html(G, communities, "graphify-out/graph.html", community_labels=my_labels)
GraphML Export (Standard Exchange Format)
For interoperability with tools like Gephi and yEd, Graphify emits GraphML through the to_graphml function. The implementation resides in graphify/exporters/base.py and is re-exported through graphify/export.py at line 913.
This exporter wraps NetworkX's write_graphml with preprocessing to handle Python-specific data types. None values are replaced with empty strings to prevent NetworkX from raising ValueError, while complex attributes such as lists and dictionaries are JSON-serialized to survive round-trip serialization. Community identifiers are stored as the community node attribute.
from graphify.export import to_graphml
to_graphml(G, communities, "graphify-out/graph.graphml")
SVG Export (Static Vector Graphics)
The SVG exporter in graphify/exporters/svg.py produces scalable vector graphics suitable for embedding in Markdown, Notion pages, or GitHub READMEs. This format relies on Graphviz's dot layout engine to compute node positions and render the final graphic.
Node colors encode community membership, generating a static visualization that requires no JavaScript or external dependencies. The to_svg function is imported into graphify/export.py and exposed as part of the public API:
from graphify.export import to_svg
to_svg(G, communities, "graphify-out/graph.svg")
Neo4j Export (Cypher Statements)
To populate Neo4j graph databases, graphify/exporters/graphdb.py provides the to_cypher function that generates executable Cypher statements. Nodes export as (:Label {id:…, ...}) constructs, while relationships become (:Label)-[:TYPE]->(:Label) patterns.
Community information persists as node properties within the generated Cypher script. You can execute the output directly via neo4j-shell or paste it into the Neo4j Browser:
from graphify.export import to_cypher
to_cypher(G, communities, "graphify-out/graph.cypher")
FalkorDB Export (FalkorDB Compatibility)
Also located in graphify/exporters/graphdb.py, the to_falkordb function adapts the Neo4j Cypher syntax for FalkorDB compatibility, accounting for differing quoting rules and specific FalkorDB requirements. This allows Graphify to generate import scripts for FalkorDB, a graph database compatible with Neo4j's query language.
The CLI supports direct pushing to a running FalkorDB instance using the --falkordb-push flag, while the Python API provides standard file export:
from graphify.export import to_falkordb
to_falkordb(G, communities, "graphify-out/graph.falkordb")
Common Export Workflow
All exporters follow a unified pipeline defined in the core architecture:
- Graph Construction – The pipeline (
detect → extract → build → cluster → analyze → report) generates a NetworkXGraphobject (G) and a community mapping dictionary (communities: dict[int, list[str]]). - Invocation – Call exporters via CLI flags (
--html,--graphml,--svg,--neo4j,--falkordb) or import directly fromgraphify.export. - Output – Files write to the
graphify-out/directory with appropriate extensions. - Post-Processing – HTML and SVG embed directly into documentation, while database exports can pipe into live instances.
Summary
- HTML exports (
graphify/exporters/html.py) create interactive Vis.js visualizations with XSS protection and a 5,000-node limit. - GraphML exports (
graphify/exporters/base.py) serialize to standard XML with NetworkX, handling complex attributes via JSON andNonevalues via empty strings. - SVG exports (
graphify/exporters/svg.py) generate static graphics using Graphvizdotlayouts. - Neo4j exports (
graphify/exporters/graphdb.py) emit Cypher statements with community data stored as node properties. - FalkorDB exports (
graphify/exporters/graphdb.py) adapt Cypher syntax for FalkorDB compatibility and support direct database pushing.
Frequently Asked Questions
What is the maximum graph size for HTML export?
The HTML exporter limits interactive visualizations to 5,000 nodes via the MAX_NODES_FOR_VIZ constant in graphify/exporters/html.py. This cap ensures browser responsiveness when rendering the Vis.js visualization.
How does Graphify handle complex node attributes in GraphML?
According to the source code in graphify/exporters/base.py, the GraphML exporter JSON-serializes complex Python types (lists and dictionaries) to preserve them during export. Additionally, it replaces None values with empty strings to prevent NetworkX from raising ValueError during the write_graphml operation.
Can I export directly to a running Neo4j or FalkorDB instance?
For Neo4j, you generate Cypher scripts using to_cypher and execute them via neo4j-shell or the Neo4j Browser. For FalkorDB, the CLI provides a --falkordb-push flag that streams the export directly to a running FalkorDB instance, while the Python API generates compatible import scripts through to_falkordb.
Which export format is best for documentation?
SVG is optimal for static embedding in Markdown, README files, or Notion pages since it requires no JavaScript dependencies. HTML suits interactive documentation or dashboards where users need to explore community clusters and search through nodes dynamically.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →