A bare RN app vs a blank Expo app — the fixed cost of adopting Expo is ~36 ms and ~13 MB RAM. Then what each extra Expo module adds, and why the Hermes profiler over-attributes 100–240 ms to @expo.
We turned on inlineRequires on a large production app and the startup profile barely moved. The reason: eager aggregators — modules that require dozens of others at init time, which the transform structurally cannot defer.
What inlineRequires actually does to your bundle — before/after Metro output, why Expo keeps it off by default, why default imports defeat it on stock RN, and what rnx-kit's tree shaking really changes.
A Hermes CPU profile showed our Android app spending 2.8 seconds on module resolution alone. That one finding kicked off a full investigation into inlined requires, eager aggregators, and how Expo Router handles this by default.