Skip to content

How Archora compares to madge / dependency-cruiser

madge and dependency-cruiser are the two best-known JavaScript dependency tools. Archora shares the underlying primitive — parse imports, build a graph — but optimises for a different workflow.

Side by side

madgedependency-cruiserArchora
Primary useVisualise / list dependencies, find cyclesEnforce architectural rules in CIDiagnose what to fix first and verify the fix
OutputTree, list, image (graphviz)Lint-style violations, dot graphRepair queue with reason/action/verify, HTML brief, fix-plan JSON
UICLI onlyCLI onlyDesktop app + CLI + reports
Cycle detectionYesYes (rule-based)Yes + suggested breakpoint, severity, type-only auto-fix candidate
Layer / boundary rulesNoYes (forbidden/allowed)Yes (.archora.json contracts/layerOverrides) with live preview
Hot zones / risk scoreNoNoYes (fan-in/out + cycles + churn)
Generated code policyNoSome via excludesDedicated analysis.generated (exclude / classify) with priority adjustment
Bundle awarenessNoSomeYes (heavy chunks, duplicates, hot solos)
Git history (churn / coupling)NoNoYes (per-module churn, temporal coupling)
FrameworksJS/TSJS/TSTS/JS + Vue + Svelte + RSC directives
Where the data livesLocalLocalLocal — source code never leaves your machine
CI exit codesLimitedYesYes (--fail-on grade:D, cycles:0, new-cycles:0, signals:high, …)
Reports for reviewImage / JSONJSON / HTMLHTML brief + fix-plan JSON + JUnit + Markdown
Diff against baselineNoLimitedYes (archora diff --base scan.json)

When to pick which

  • Quick visual / "do I have cycles?" — madge is the cheapest answer.
  • Lint-style architectural assertions in CI — dependency-cruiser's rule DSL is mature and works well as a pure linter.
  • Repair workflow on a real codebase — Archora, because the question stops being "are there cycles?" and starts being "which one matters, why, where, and how do I verify the fix?". The Architecture Workspace, the fix-plan JSON, generated code policy and the diff baseline are built around that workflow.

You can also stack them: keep dependency-cruiser as a strict linter and use Archora as the diagnosis surface and PR brief.

Local-first

Both madge and dependency-cruiser are local-first by default. Archora keeps that property explicit:

  • The desktop app and the CLI run entirely on your machine. No network calls during scan, parse, analyse, report.
  • No telemetry. No project metadata leaves the process.
  • The cache (.archora/) is local files only.

If you bring Archora into a regulated environment, that property is the one you can point at.