Knowledge-graph builder for ABAP / SAP codebases. Hard fork of
safishamsi/graphify with
first-class ABAP support backed by abaplint.
Point it at a folder of
.abapfiles (raw dumps, abapGit-exported repos, or a cloned ABAP GitHub repo) and it produces a queryable knowledge graph of classes, interfaces, methods, function modules, forms, includes, table accesses, exception flow, and rationale comments — all with cross-file resolution.
Three-pass pipeline inherited from upstream graphify:
clas:zcl_foo, fm:z_post_invoice,
method:zcl_foo::process, ddic:vbak), so calls/inheritance/interface
implementations stitch automatically across files.--mode deep). Claude reads docs, PDFs,
images, and rationale comments to add INFERRED edges and design rationale.Output:
graphiffy-abap-out/
├── graph.json canonical knowledge graph
├── graph.html interactive graph (vis.js, open in any browser)
├── GRAPH_REPORT.md god nodes, communities, surprising connections, suggested questions
└── cache/ SHA256-keyed per-file cache; re-runs only re-process changed files
For every .abap file, the pipeline captures:
| ABAP construct | Graph node | Edges out |
|---|---|---|
REPORT zfoo / PROGRAM zfoo | prog:zfoo | defines → forms, includes |
CLASS zcl_foo DEFINITION | clas:zcl_foo | inherits_from, implements_interface, defines |
INTERFACE zif_foo | intf:zif_foo | defines → methods |
METHODS process | method:zcl_foo::process | (caller side) |
FORM x (subroutine) | form:zfoo::x (program-scoped) | (caller side) |
FUNCTION z_foo (function module) | fm:z_foo | (caller side) |
INCLUDE zinc_x | include:zinc_x | includes |
SELECT … FROM <table> and INSERT/UPDATE/MODIFY/DELETE | ddic:<table> | accesses_table |
RAISING zcx_foo | exc:zcx_foo | raises_exception |
| Comment block above a definition | rationale:<file>:<row> | rationale_for |
Edge types:
inherits_from, implements_interface, defines, includescalls_form (PERFORM)calls_function_module (CALL FUNCTION 'Z_FOO')calls_method (obj->meth, cls=>meth, legacy CALL METHOD)instantiates (NEW zcl_foo( ) / CREATE OBJECT)accesses_table (Open SQL)raises_exception, rationale_for*_dynamic (PERFORM (lv_x), CALL FUNCTION (lv_x)) — flagged AMBIGUOUSEvery edge carries confidence ∈ {EXTRACTED, INFERRED, AMBIGUOUS} and a
confidence_score so the downstream report can be honest about what's solid
vs. guessed.
Prerequisites: Python 3.10+, Node.js 18+, an ABAP corpus.
# Install graphiffy-abap from a local clone (PyPI publication TBD)
git clone https://github.com/NabheetCloud/graphiffy-abap.git
cd graphiffy-abap
pip install -e .
# In the project you want to analyse, install abaplint
cd /path/to/your/abap-project
npm install @abaplint/core
# Run
graphiffy-abap .
Output lands in graphiffy-abap-out/ next to your source.
A real run on the public abap2UI5/abap2UI5
codebase produced a 2,700-node / 2,870-edge graph with 1,338 cross-file edges.
Top god nodes (degree-ranked) were exactly what an SAP engineer would
predict: CX_STATIC_CHECK, Z2UI5_CL_UTIL_EXT, LTCL_UNIT_TEST,
CL_ABAP_UNIT_ASSERT::ASSERT_EQUALS, Z2UI5_IF_AJSON.
Full validation report: worked/abap2ui5/review.md
graphiffy-abap recognises:
.abap files*.clas.abap, *.prog.abap, *.intf.abap,
*.fugr/*.abap (function-group includes)*.clas.abap is correctly typed
as a class even before the source is parsed)Other graphify file types (.md, .pdf, images, code in 25 other languages)
are still supported — drop ABAP, design docs, and screenshots into one
folder and graphiffy-abap will produce one unified graph.
Phase 1 (done). ABAP language plugin via abaplint. Programs, classes, interfaces, methods, function modules, forms, includes, calls, table references, exceptions, rationale.
Phase 2 (done). DDIC XML parsing (tables, structures, data elements, domains, search helps), CDS view DDL, AMDP method bodies, BAdI / enhancement framework awareness, SAP-aware Pass-3 LLM prompts.
Phase 3 (WIP). Live SAP system extraction via ADT REST / RFC, transport-aware incremental updates, on-prem LLM option, SAP-specific MCP server.
graphiffy-abap is a hard fork of safishamsi/graphify v5
(commit 770d7f5). The MIT license is preserved. ABAP support adds an
external Node.js dependency (abaplint) and SAP-specific extraction logic
that aren't generally useful to upstream's audience, hence the fork.
See NOTICE for full attribution.
All non-ABAP languages still work exactly as upstream — graphiffy-abap is a strict superset of graphify's language support.
MIT — see LICENSE.
3 commits
Python
96.4%
JavaScript
3.6%
Knowledge-graph builder for ABAP / SAP codebases. Hard fork of
safishamsi/graphify with
first-class ABAP support backed by abaplint.
Point it at a folder of
.abapfiles (raw dumps, abapGit-exported repos, or a cloned ABAP GitHub repo) and it produces a queryable knowledge graph of classes, interfaces, methods, function modules, forms, includes, table accesses, exception flow, and rationale comments — all with cross-file resolution.
Three-pass pipeline inherited from upstream graphify:
clas:zcl_foo, fm:z_post_invoice,
method:zcl_foo::process, ddic:vbak), so calls/inheritance/interface
implementations stitch automatically across files.--mode deep). Claude reads docs, PDFs,
images, and rationale comments to add INFERRED edges and design rationale.Output:
graphiffy-abap-out/
├── graph.json canonical knowledge graph
├── graph.html interactive graph (vis.js, open in any browser)
├── GRAPH_REPORT.md god nodes, communities, surprising connections, suggested questions
└── cache/ SHA256-keyed per-file cache; re-runs only re-process changed files
For every .abap file, the pipeline captures:
| ABAP construct | Graph node | Edges out |
|---|---|---|
REPORT zfoo / PROGRAM zfoo | prog:zfoo | defines → forms, includes |
CLASS zcl_foo DEFINITION | clas:zcl_foo | inherits_from, implements_interface, defines |
INTERFACE zif_foo | intf:zif_foo | defines → methods |
METHODS process | method:zcl_foo::process | (caller side) |
FORM x (subroutine) | form:zfoo::x (program-scoped) | (caller side) |
FUNCTION z_foo (function module) | fm:z_foo | (caller side) |
INCLUDE zinc_x | include:zinc_x | includes |
SELECT … FROM <table> and INSERT/UPDATE/MODIFY/DELETE | ddic:<table> | accesses_table |
RAISING zcx_foo | exc:zcx_foo | raises_exception |
| Comment block above a definition | rationale:<file>:<row> | rationale_for |
Edge types:
inherits_from, implements_interface, defines, includescalls_form (PERFORM)calls_function_module (CALL FUNCTION 'Z_FOO')calls_method (obj->meth, cls=>meth, legacy CALL METHOD)instantiates (NEW zcl_foo( ) / CREATE OBJECT)accesses_table (Open SQL)raises_exception, rationale_for*_dynamic (PERFORM (lv_x), CALL FUNCTION (lv_x)) — flagged AMBIGUOUSEvery edge carries confidence ∈ {EXTRACTED, INFERRED, AMBIGUOUS} and a
confidence_score so the downstream report can be honest about what's solid
vs. guessed.
Prerequisites: Python 3.10+, Node.js 18+, an ABAP corpus.
# Install graphiffy-abap from a local clone (PyPI publication TBD)
git clone https://github.com/NabheetCloud/graphiffy-abap.git
cd graphiffy-abap
pip install -e .
# In the project you want to analyse, install abaplint
cd /path/to/your/abap-project
npm install @abaplint/core
# Run
graphiffy-abap .
Output lands in graphiffy-abap-out/ next to your source.
A real run on the public abap2UI5/abap2UI5
codebase produced a 2,700-node / 2,870-edge graph with 1,338 cross-file edges.
Top god nodes (degree-ranked) were exactly what an SAP engineer would
predict: CX_STATIC_CHECK, Z2UI5_CL_UTIL_EXT, LTCL_UNIT_TEST,
CL_ABAP_UNIT_ASSERT::ASSERT_EQUALS, Z2UI5_IF_AJSON.
Full validation report: worked/abap2ui5/review.md
graphiffy-abap recognises:
.abap files*.clas.abap, *.prog.abap, *.intf.abap,
*.fugr/*.abap (function-group includes)*.clas.abap is correctly typed
as a class even before the source is parsed)Other graphify file types (.md, .pdf, images, code in 25 other languages)
are still supported — drop ABAP, design docs, and screenshots into one
folder and graphiffy-abap will produce one unified graph.
Phase 1 (done). ABAP language plugin via abaplint. Programs, classes, interfaces, methods, function modules, forms, includes, calls, table references, exceptions, rationale.
Phase 2 (done). DDIC XML parsing (tables, structures, data elements, domains, search helps), CDS view DDL, AMDP method bodies, BAdI / enhancement framework awareness, SAP-aware Pass-3 LLM prompts.
Phase 3 (WIP). Live SAP system extraction via ADT REST / RFC, transport-aware incremental updates, on-prem LLM option, SAP-specific MCP server.
graphiffy-abap is a hard fork of safishamsi/graphify v5
(commit 770d7f5). The MIT license is preserved. ABAP support adds an
external Node.js dependency (abaplint) and SAP-specific extraction logic
that aren't generally useful to upstream's audience, hence the fork.
See NOTICE for full attribution.
All non-ABAP languages still work exactly as upstream — graphiffy-abap is a strict superset of graphify's language support.
MIT — see LICENSE.
3 commits
Python
96.4%
JavaScript
3.6%