Project study / Developer Tools
Active Development
Untangled
Dependency health your whole team can understand.
A static source-code dependency analysis toolkit that turns language-specific scans into shared graphs, structural evidence, and readable reports.
01 / System portrait
Make dependency structure observable.
- 01Source
- 02Scan
- 03Dependency pairs
- 04Filter / cluster
- 05Analyze
- 06Report
02 / Problem and response
Architectural drift happens quietly.
Constraint
Architectural drift happens quietly: dependencies accumulate, modules become interconnected, and changes begin affecting areas that were never part of the original task.
Formatting, correctness, and isolated implementation checks do not explain those structural relationships to the whole team.
Approach
Untangled separates language-specific discovery from language-neutral interpretation. Scanners produce dependency pairs, then a shared pipeline filters, clusters, analyzes, and reports them.
The output is architectural evidence rather than a defect score: it helps teams see where coupling exists and decide what context matters next.
03 / Dependency pipeline
Separate discovery from interpretation.
PHP and Python implementations follow one shared specification and conformance fixture set while keeping their native source-analysis boundaries independent.
The current report surface produces dependency pairs, analysis JSON, Graphviz DOT, and self-contained interactive HTML without executing the analyzed project.
Built from an idea worth preserving.
Untangled is a re-imagining of Snakefood, created by Martin Blais. Snakefood's small, composable pipeline — scan source into dependency pairs, then filter, cluster, and render those relationships — is the architectural inspiration behind Untangled.
Untangled carries that idea into modern PHP and Python tooling while adding shared metrics, cross-language conformance, and accessible reporting.
Thank you, Martin.
04 / Structural signals
Evidence, not a score.
Closed loops
Parts that depend on each other, directly or indirectly.
Who relies on this?
How many other components depend on a unit.
What does it rely on?
How many other components a unit depends on.
I = Ce / (Ca + Ce)
How much a unit leans outward versus being relied upon.
These metrics describe architectural relationships. They require context; they are not defect scores.
05 / One model, independent implementations
Shared semantics across languages.
Different scanners normalize source relationships into the same dependency-pair and analysis contracts.
| Implementation | Current state | Boundary |
|---|---|---|
| PHP | Implemented / unreleased | Scanner, pairs, analysis, HTML, DOT |
| Python | Implemented / unpublished | AST scan, analysis, HTML, DOT |
| JavaScript / TypeScript | Planned | Native scanner not implemented |
| Git history | Planned | Trend analysis not implemented |
06 / Implementation evidence
Reports made for reading.
Untangled can emit dependency pairs, analysis JSON, Graphviz DOT, and self-contained interactive HTML reports. The report combines dependency visualization, cycle detection, coupling metrics, clustering, and plain-language explanations.
The goal is interpretability, not graph spectacle.
conformance/cases/three-cycle; the red edges represent the closed dependency loop.Read the fixture relationships
- Cart.php → Order.php
- Order.php → Cart.php and Customer.php
- Customer.php → Cart.php
- Catalog.php has no internal dependencies
07 / Current state and next work
What exists, and what follows.
Active Development
PHP v1 is feature-complete but unpublished. Python scanning, analysis, and reporting work exists but is not published. TypeScript and history analysis remain planned.
Started 2026 · Last updated October 2026
Next direction
- Publish and harden the PHP and Python v1 surfaces.
- Build a native JavaScript / TypeScript scanner against the shared specification.
- Add git-history trend analysis after the structural model is stable.
The useful boundary is between discovering relationships and deciding what those relationships mean.
Working lesson / Untangled