Skip to content

Releases: Graphify-Labs/graphify

v0.8.22

Choose a tag to compare

@safishamsi safishamsi released this 27 May 23:26

What's new

  • BYOND DreamMaker support.dm/.dme files extracted via tree-sitter-dm (type definitions, proc declarations, #include edges, in-file call resolution, new /type() instantiation edges); .dmi PNG icon files parsed for icon-state nodes; .dmm map files parsed for type-path uses edges from the tile dictionary section; .dmf interface files parsed for window/elem/control-type hierarchy (#884)
  • graphify extract --mode deep — enables richer semantic extraction using an extended system prompt; flag propagated through all four LLM backends (#1030)

Install / upgrade

pip install --upgrade graphifyy

Full changelog: https://github.com/safishamsi/graphify/blob/v8/CHANGELOG.md

v0.8.21

Choose a tag to compare

@safishamsi safishamsi released this 27 May 12:00

What's new

Fixes

  • Ghost nodes on graphify update — full re-extraction now reconciles against disk state and evicts nodes from deleted files (no --changed flag needed) (#1007)
  • OpenCode --project path — skill now written to .opencode/skills/graphify/SKILL.md (was incorrectly .config/opencode/skills/) (#1040)
  • Hook rebuild loop — post-commit hook skips when only graphify-out/ files changed; GRAPHIFY_SKIP_HOOK=1 env var for one-off opt-out; rebuild log now appends instead of overwriting (#1018, #1037)
  • Deterministic output — edges sorted and PYTHONHASHSEED=0 in hooks so graphify-out/ no longer churns on re-run (#1010)
  • Search punctuationwhat calls extract? correctly finds the extract node; punctuation stripped before matching (#994, #978)
  • Builtin god-nodesString(), Number(), Boolean(), print(), len() etc. no longer accumulate spurious call edges (#916, #726)

Features

  • Amp platformgraphify amp install/uninstall installs into .amp/skills/graphify/SKILL.md (#948)
  • SystemVerilog headers.svh files now extracted alongside .v and .sv (#1042)

Upgrade

pip install --upgrade graphifyy
# or
uv add graphifyy

v0.8.20

Choose a tag to compare

@safishamsi safishamsi released this 26 May 19:35

Bug fixes & security

Ghost nodes after file deletion fully fixed

graphify update on Windows no longer leaves stale nodes after moving/deleting files. Two root causes resolved:

  • _relativize_source_files now runs on the existing graph before eviction, not after
  • deleted_paths / evict_sources now use .as_posix() for consistent forward-slash paths on all platforms
  • Symlinked scan roots now handled correctly via .resolve() in build_merge (#1007)

Security: XML DoS hardening

extract_csproj and extract_lazarus_package now pre-screen for <!DOCTYPE / <!ENTITY before parsing — blocks billion-laughs memory exhaustion on malicious project files. Zero false positives on real MSBuild/Lazarus files. extract_lpk also gains the previously missing 2 MiB size cap.

Dart node ID fix

Dart child node IDs no longer embed absolute paths — now uses _file_stem consistent with all other extractors. Existing Dart graphs should be rebuilt with graphify extract --force. (#999)

cluster-only label alignment

cluster-only now applies remap_communities_to_previous matching the behaviour of graphify update, so community labels stay stable across re-clusterings (#1028)

New features

MCP config extractor

.mcp.json, mcp.json, mcp_servers.json, claude_desktop_config.json are now extracted into the knowledge graph — captures server nodes, npm/pip package references, and env var requirements. Env values are discarded to prevent secret leakage.

Install / upgrade

pip install --upgrade graphifyy

v0.8.19

Choose a tag to compare

@safishamsi safishamsi released this 26 May 11:53

What's new

.NET project file support

.sln, .csproj, .fsproj, .vbproj, .razor, .cshtml files are now extracted into the knowledge graph. Captures NuGet package references, project-to-project dependencies, target frameworks, SDK attributes, Razor/Blazor directives (@using, @inject, @inherits, @model, @page), component references, and @code block methods. Closes #515.

Chinese query segmentation

Compound Chinese tokens like 页面路由 are now split into meaningful words using jieba when installed, with a character bigram fallback when it isn't. The original compound is preserved alongside segments so exact-match still works. Install with pip install "graphifyy[chinese]".

Bug fixes

  • Wiki TypeError on null source_fileG.nodes[n].get("source_file") or "" now handles explicit None values that .get("source_file", "") missed (#1016)
  • Nested .claude/worktrees/ indexed_is_noise_dir now skips worktrees/ directories nested inside dotted dirs like .claude/ (#1023)
  • Backup accumulationbackup_if_protected uses content-hash comparison to skip identical backups and overwrite in-place when content changes; one folder per day maximum
  • TypeScript 5.0 array-form extends_read_tsconfig_aliases normalizes extends to a list before iteration (#1017)

Also in this release

  • Devin CLI support — graphify devin install/uninstall (#1020)

Install / upgrade

pip install --upgrade graphifyy
# or
uvx graphifyy

Optional extras:

pip install "graphifyy[chinese]"   # Chinese query segmentation
pip install "graphifyy[sql]"       # SQL schema extraction
pip install "graphifyy[all]"       # Everything

0.8.18

Choose a tag to compare

@safishamsi safishamsi released this 24 May 19:42

Fixes & Features

  • Fix: Post-commit hook updates graph after delete-only commits — shrink-guard now bypassed when changed paths include explicit deletions (#1000)
  • Fix: graphify export no longer collapses to "Single community" when .graphify_analysis.json is absent — falls back to per-node community attribute in graph.json (#1001)
  • Feat: Semantic context tags on references edges for Python/JS/TS/C#/Java — parameter_type, return_type, generic_arg, attribute, field; C#/Java now split inherits/implements (#996)
    • Breaking: Java extends edges renamed to inherits — update queries filtering on relation="extends" for Java nodes
  • Feat: Constrained query expansion — Step 0 in skill extracts actual graph vocab and forces LLM to pick expansion tokens only from that set; Unicode regex fix captures Cyrillic/CJK labels (#998)
  • Docs: Ukrainian README updated to v8 with all new sections, YC badge, 31 language count (#995)

0.8.17

Choose a tag to compare

@safishamsi safishamsi released this 23 May 22:38

Fixes

  • Case-sensitive call resolution — Go, Rust, and Elixir resolvers previously lowercased both the label index and the callee name, causing Authorize to match authorize and produce phantom edges. Ruby, C#, Java, Kotlin, Scala use the same generic resolver which now uses a case-sensitive dict. PHP retains a separate case-insensitive dict since PHP function/class names are genuinely case-insensitive (#993)
  • Cross-language phantom calls edges — INFERRED calls edges whose source and target nodes belong to different language families (py/js/go/rs/jvm/c/cpp/rb/php/cs/swift/lua) are now dropped at graph-build time. The skill prompt also now explicitly forbids emitting cross-language call edges (#991)

v0.8.16

Choose a tag to compare

@safishamsi safishamsi released this 22 May 18:02

What's Changed

  • Fix: CJK/Unicode labels no longer silently stripped during dedup — _norm() and _norm_label() now use Unicode-aware [\W_]+ regex with casefold() and NFKC normalization; previously 道具処理クラス and any non-ASCII label collapsed to empty string and got falsely merged (#937)
  • Fix: .ets (ArkTS/HarmonyOS) files now recognized as code and extracted via the TypeScript parser (#926)
  • Fix: graphify now exits non-zero when all semantic-extraction chunks fail — previously a silent empty graph was written with exit code 0, masking backend failures (#889)
  • Feat: graphify install --project installs the skill into the current repository (.claude/skills/, .agents/skills/, etc.) instead of the user home directory; per-platform subcommands support the same flag (#931)
  • Docs: Uzbek (uz-UZ) README translation (#982)

Install / Upgrade

```bash
uv tool install graphifyy # fresh install
uv tool upgrade graphifyy # upgrade
pip install --upgrade graphifyy # pip
```

Full changelog: https://github.com/safishamsi/graphify/blob/v8/CHANGELOG.md

0.8.14

Choose a tag to compare

@safishamsi safishamsi released this 20 May 17:14

What's fixed

  • Wiki crash on stale node IDsto_wiki() no longer crashes with TypeError when community node IDs are stale after dedup or re-extract. Stale IDs are silently dropped with a stderr warning; raises a clear error only if every ID is stale (#936)
  • .gitignore fallback — when no .graphifyignore exists, .gitignore patterns are now honoured. .graphifyignore still takes precedence when both are present (#945)
  • --exclude flag — new CLI flag to pass extra gitignore-style exclusion patterns at runtime without modifying .graphifyignore (#947)
  • .worktrees/ skipped — git worktree sibling checkouts inside .worktrees/ are no longer indexed as duplicate source (#947)
  • NAT64 SSRF false-positive fixed — hosts like arxiv.org on IPv6-only networks that resolve via RFC 6052 NAT64 (64:ff9b::/96) were incorrectly blocked as reserved IPs

Upgrade

uv tool upgrade graphifyy
# or
pip install --upgrade graphifyy

0.8.13

Choose a tag to compare

@safishamsi safishamsi released this 18 May 19:52

What's fixed

  • Node ID collisions across same-named files in different directories — SQL extractor and Python import resolver now use directory-qualified stems (dir_file_entity) instead of bare filename stems, preventing silent node merging on repos with duplicate filenames
  • Absolute source_file paths from semantic subagents no longer stored in graph — build_from_json, build, and build_merge now accept a root param and relativize paths at build time, fixing broken MCP traversal on mixed corpora (#932)
  • Failed semantic chunks permanently freezing files — only files that appear in extraction output get semantic_hash stamped in the manifest; failed-chunk files keep an empty hash and are re-queued on the next run (#933)

What's improved

  • Stat-based mtime fastpath for file_hash — skips full SHA256 read when file size+mtime_ns are unchanged (same trade-off as make); index flushed atomically via atexit, making incremental re-runs significantly faster on large corpora
  • New CLI subcommandsgraphify cache-check, graphify merge-chunks, graphify merge-semantic expose cache and merge logic as library-callable commands for skill pipelines

Upgrade

pip install --upgrade graphifyy

v0.8.11

Choose a tag to compare

@safishamsi safishamsi released this 18 May 11:09
  • Fix: LLM empty choices / None message guard — Gemini and other providers return choices=[] on content-filtered HTTP 200 responses; now raises a clean error instead of crashing with IndexError (#924)
  • Fix: OpenCode skill removed invalid general-purpose agent reference and headless-incompatible interactive halt (#911, closes #825)
  • Fix: Codex skill now uses graphify query/explain/path even when graph artifacts are dirty in worktree (#913, closes #860)
  • Perf: precompute degrees once in surprise scoring — ~11x speedup per lookup on large graphs (#914)