Skip to content

0.3.0

Latest

Choose a tag to compare

@phaelor phaelor released this 30 Sep 16:34
decbef0

0.3.0 — 2026-09-29

Added

  • Request and response bodies in the network log, with the panel showing
    them formatted and a cURL you can copy. Controlled by the new network
    prop on InspectorRoot: { captureBodies, maxBodyBytes, captureHeaders }.
  • Request and response headers, with Authorization, Cookie and the
    like replaced by [redacted].
  • Frozen-frame detection. A gap of 700 ms or more between frames is
    reported as an error on the timeline and costs the screen 20 points of its
    quality score.
  • New Architecture support. The native module is now a TurboModule,
    generated from a codegen spec, on both platforms. The legacy bridge keeps
    working, so react-native >= 0.72 is still supported; the New Architecture
    path needs 0.74 or newer.
  • Automatic tap capture in release builds. Production React never calls
    Profiler.onRender, which is what reported the commit a tap was waiting
    for, so every auto-captured tap used to be dropped. Import the package at
    the top of your entry file (import 'react-native-app-inspector'; in
    index.js) to get the exact measurement; otherwise a tap ends at the first
    frame presented after its work. Per-component render statistics still need
    the profiler and stay development-only.

Fixed

  • iOS request bodies are read before the upload starts. They were read after
    completion, by which point the stream was consumed, so the body was
    practically always empty.
  • Android native network capture works again on recent React Native.
    OkHttpClientProvider's private factory field was renamed when it was
    rewritten in Kotlin, so the interceptor silently fell back to the JS patch.
  • Secrets are matched by exact key instead of substring. pin no longer
    redacts shipping, and Access-Control-Allow-Credentials is left alone.
  • Secret query parameters are redacted in headers whose value is a URL
    (Location, Content-Location, Referer). A server echoing the request
    URL back leaked keys that had already been removed from the entry's url.
  • maxBodyBytes reaches the native interceptors instead of being capped at a
    hardcoded 32 KB.
  • The panel no longer uses React Native's deprecated SafeAreaView. It pads
    itself from the window insets reported by the native module, which also
    fixes the header sitting under the status bar on Android with edge-to-edge.
  • A long value in a detail row — a request URL, say — wraps in the space left
    over instead of overflowing across its label.
  • The FPS badge returns to its edge when the window is resized. After a
    rotation it could end up off-screen, taking the only way into the panel
    with it.

Internal

  • The example app runs React Native 0.87.1 with the New Architecture.
  • CI compiles the module against React Native 0.74, 0.76, 0.81 and 0.87, on
    both architectures where the version still supports the legacy one.