Fallow answers two different questions about your codebase. Static analysis answers "what is connected to what?". Runtime intelligence answers "what actually ran?". Both are necessary. Neither replaces the other.
This page explains where each layer stops, what the other layer adds, and why fallow health is where they converge.
Static analysis builds a module graph from your source. Every file, every import, every export, every re-export chain, every dynamic import() it can resolve. From that graph, Fallow derives:
Concrete examples of what static analysis flags with confidence:
export function computeTax that no file imports, directly or through a barrel.src/server/jobs/worker.ts that isn't reached from any entry point, script, or test.a.ts -> b.ts -> c.ts -> a.ts.All of that is deterministic. Every finding traces back to a path through the graph.
The graph is a model of the code, not a recording of the program. Some things live below the model:
obj[name]().if (process.env.FOO) { await import("./bar") } may or may not execute in production.Static reachability says "this could run". It does not say "this did run".
Runtime intelligence is the evidence layer. It records which code actually executed, then merges that evidence back into the same analyses you already run:
Runtime coverage is the collection mechanism. Runtime intelligence is what you get from it. The CLI surfaces everything through a single flag: fallow health --runtime-coverage ./.fallow/runtime.json. See the runtime coverage analysis page for the collection setup.
fallow health is the surface where static findings and runtime evidence merge into a single verdict.
Examples:
true branch has been observed in 60 days. Static alone would see two branches. Runtime retires the other one.Runtime evidence never overrides static findings, it refines them. A function with zero runtime hits is still only a candidate if static says it's reachable. An unreferenced export is already dead; runtime cannot make it deader.
| Question | Answered by |
|---|---|
| What is connected to what? | Static |
| What imports this file? | Static |
| What files nothing imports? | Static |
| What code changed in this PR? | Static (graph + diff) |
| What actually ran in production? | Runtime |
| Which functions are hot? | Runtime |
| Did this branch execute this month? | Runtime |
| Is this code safe to delete? | Both |
| Does this PR touch hot code? | Both |
Static intelligence is free and open source (MIT). You can run every static analysis on any project, today, with npx fallow. Runtime intelligence is the paid team layer, and runtime coverage is the collection engine that feeds it. Pricing, tiers, and what's included at each level live at fallow.tools/pricing.
Start with static. It's free and already cleans up most dead code a typical codebase accumulates. Add runtime once you care about hot-path review, runtime-weighted health, or deletion confidence backed by production evidence.