Comparison with other tools
- madge draws dependency graphs as
images, reads webpack configuration, and lists every cycle. jscycles does
none of these. It does report package cycles in monorepos, follows tsconfig
extendschains and workspace aliases, and fails rather than reporting clean when a file cannot be parsed. - dpdm prints dependency trees from
given entry files and can skip type dependencies (
-T). - eslint-plugin-import
no-cyclereports cycles inline in the editor, at a higher cost per lint run. - Nx module boundaries enforces dependency rules between projects in Nx workspaces.
Results differ between tools because their resolution rules differ. Compare them on your own repository before switching.
Performance
Section titled “Performance”Median of five runs after one warm-up, on an Apple M3 Pro (12 cores) running
macOS, analyzing each repository’s packages directory with every source
extension enabled:
| Repository | Source files | jscycles 0.2.0 | madge 8.0.0 | dpdm 3.14.0 |
|---|---|---|---|---|
| nest | 1,068 | 0.08 s | 2.04 s | 0.86 s |
| typeorm | 3,609 | 0.28 s | 2.97 s | 1.48 s |
| excalidraw | 631 | 0.11 s | 2.63 s | 0.87 s |
| ts-morph | 1,171 | 0.08 s | 1.64 s | 0.83 s |
The tools count cycles differently (see what it finds),
so their cycle counts are not comparable. Reproduce with
python3 scripts/compare_tools.py in a checkout; results depend on hardware
and file cache.