Skip to content

v3.8.0: interactive codebase map (fallow viz)

Choose a tag to compare

@BartWaardenburg BartWaardenburg released this 22 Jul 15:09
v3.8.0
85f36fc

fallow viz: your codebase as an interactive map

fallow viz runs one analysis and writes a single self-contained HTML file (no server, no external assets) styled like the rest of fallow. It gives you two views over the same project:

  • Treemap of files sized by bytes, nested by directory.
  • Force-directed import graph with directory and import-community clustering.

Both views share four lenses that recolor the same map:

  • Dead code: unused files, unused exports, entry points.
  • Duplication: share of duplicated lines per file, with clone previews.
  • Boundaries: architecture zones from your boundaries config, with violating imports drawn in red.
  • Complexity hotspots: per-function cyclomatic and cognitive scores, including React context (hook counts, JSX depth).

Click any file to open a detail panel with the evidence behind each finding: unused export names, clone groups and their other locations, boundary crossings, cycle membership, importers and imports as click-through navigation, and a runnable fallow ... --trace command to verify the finding yourself.

Search, breadcrumb drill-down, keyboard shortcuts, shareable URL deep links, and dark/light themes are built in. Findings carry a hatch texture and [E]/[W] prefixes so color is never the only signal, and all motion honors prefers-reduced-motion.

fallow viz                    # opens the HTML report in your browser
fallow viz --out map.html --no-open
fallow viz --viz-format dot   # emit the import graph as Graphviz DOT
fallow viz --viz-format mermaid

It is read-only and respects --production, --config, and --no-cache like the analysis commands.

Bug fixes

  • Next.js fallback metadata exports are no longer reported as unused. App Router not-found, default, forbidden, unauthorized, and experimental global-not-found files now credit metadata, generateMetadata, viewport, and generateViewport, matching the modules Next.js reads while resolving fallback head content. Arbitrary helper and route segment config exports remain reportable. (Closes #1987.)
  • Audit and dead-code results stay accurate across deeper class hierarchies and materialized project context. Multi-hop generic inheritance and class-scoped this references now credit the correct members, nested production TypeScript configs activate alias resolution, audit snapshots invalidate when relevant install or generated-framework state changes, and GitHub Action fallback annotations safely encode workflow-command paths. Audit JSON now also attributes every styling finding as introduced or inherited and reports matching styling totals in the attribution block.

Under the hood

  • Upgraded the Rust toolchain to 1.97.1 and narrowed internal crate visibility.
  • Made fuzzing operational and repaired dependency-validation gaps in CI.
  • Routine dependency updates across the workspace and tooling.

Full Changelog: v3.7.1...v3.8.0