Asks a connected device's BEAM what modules it has loaded right now. In interactive mode (Mob's default), a module is loaded only when something calls into it — so the loaded set after a real user session is the empirical "actually used" set.
Anything shipped but never loaded is a strong strip candidate.
Combine with mix mob.audit_otp (static reachability) for the
highest-confidence strip set:
shipped ∩ statically-reachable ∩ NEVER-loaded = safe to stripWorkflow
mix mob.deploy # deploy the app
# Use the app — every flow you care about
mix mob.connect --no-iex # set up the dist tunnel
mix mob.snapshot_loaded # snapshot
mix mob.snapshot_loaded --json out.json # machine-readableWhat the report shows
- Total .beam files shipped
- Modules currently loaded
- Modules in the bundle that have never been loaded
- Per-OTP-lib breakdown (which libs have any module loaded vs not)
What this is NOT
Not a trace — it doesn't tell you which function was called or how
often. Just whether the module was touched. For per-function or
per-call-frequency data, use mix mob.trace_otp (host-side harness)
or extend Mob.Diag with :recon_trace-based on-device tracing.