React Native DevTools is the built-in debugger for Expo SDK 57 / React Native 0.86 - a Chrome DevTools–based desktop app wired to Hermes on your running app. Use it for the element inspector, breakpoints, network traces, performance recordings, and (new in 0.86) light/dark appearance emulation without flipping device settings.
Metro serves your JS bundle; the app opens a Chrome DevTools Protocol (CDP) socket to the packager.
Pressing j (or Open DevTools in the dev menu) launches the React Native DevTools desktop app, which attaches over CDP to the Hermes runtime on the selected device/simulator.
DevTools is Hermes-only - it replaced Flipper's JS debugger, the experimental debugger, and remote Chrome debugging (removed in RN 0.79).
Since RN 0.85, multiple CDP clients can connect simultaneously (DevTools + VS Code extensions + other tooling) without kicking each other off.
DevTools is disabled in release builds - same as LogBox and the dev menu.
Network captures automatically while DevTools is open. Response previews buffer up to 100 MB on device (oldest evicted first).
Performance merges JavaScript execution, React Performance tracks, network events, and custom User Timings (performance.mark).
Not yet in core RN Network panel: WebSocket events, throttling, response mocking.
Expo caveat: SDK 57 projects may still surface an Expo Network panel for requests outside fetch / XHR / <Image> (for example some Expo Fetch paths). It lacks initiator integration and Performance-panel linkage - prefer the core Network panel when your calls are covered.
RN 0.86 adds appearance emulation without changing the device OS theme:
Open DevTools Command Palette - ⌘+Shift+P (macOS) or Ctrl+Shift+P (Windows/Linux).
Run the light/dark emulation command (Emulation.setEmulatedMedia).
Watch useColorScheme() and themed styles update on device.
The override is temporary - it resets when DevTools disconnects. For persistent in-app theme testing, use Appearance.setColorScheme() in dev builds (see Dark Mode & Color Schemes).
// debugger; is valid in .tsx sources - DevTools breaks on the live Hermes bundleexport function debugBreakpoint(value: unknown) { if (__DEV__) { // eslint-disable-next-line no-debugger debugger; console.log("debugBreakpoint", value); }}
Using chrome://inspect for RN 0.86 - Remote Chrome debugging was removed; the session does not reflect Hermes bytecode. Fix: Press j or use the dev menu Open DevTools.
Expecting DevTools in production - Debug tooling is compiled out of release builds. Fix: Reproduce on a development build or __DEV__ simulator binary.
Breakpoints never hit after a native rebuild - The CDP session dies when you reinstall the app. Fix: Use the reconnect dialog or press j again.
Inspector shows stale props - You edited state in DevTools but Fast Refresh remounted the tree. Fix: Re-select the element; prefer prop edits for quick probes, code edits for lasting changes.
Network panel empty for custom clients - Only fetch, XMLHttpRequest, and <Image> are instrumented today. Fix: Check Expo Network for uncovered stacks, or log at the networking layer until library support lands.
Light/dark emulation "does nothing" - The screen ignores useColorScheme and hardcodes colors. Fix: Branch styles from scheme tokens; emulation drives the same API as the OS toggle.
DevTools desktop app blocked by firewall - Corporate networks may block the notarized binary download. Fix: Allow the download or fall back to the browser launch flow RN provides.
How do I open React Native DevTools with Expo SDK 57?
Run npx expo start, launch your app on a simulator or device, then press j in the Metro terminal. Alternatively, open the in-app dev menu and choose Open DevTools.
Does React Native DevTools work with Hermes?
Yes - Hermes is required. DevTools speaks the Hermes debugger protocol over CDP. It is the supported replacement for Flipper's JS debugger and remote Chrome debugging.
Where is the element inspector?
It lives in the Components panel (integrated React DevTools). Use Select element, tap a view on the device, and inspect props, hooks, and owners in the right drawer.
How do I test dark mode without changing device settings?
On RN 0.86+, open the DevTools Command Palette (⌘/Ctrl+Shift+P) and run the light/dark emulation command. Components using useColorScheme() re-render accordingly until DevTools disconnects.
Why do I still see an Expo Network panel?
Expo may log additional networking stacks (beyond core fetch / XHR / <Image>) in its own panel. Use it when requests are missing from the core Network tab; prefer the core panel when coverage overlaps for initiator and Performance integration.
Can I use `debugger;` instead of clicking breakpoints?
Yes. Insert debugger; in a __DEV__ branch, save the file, and Fast Refresh delivers the statement to the device while DevTools is open - execution pauses immediately.
What keyboard shortcut opens the dev menu on simulators?
iOS Simulator: Ctrl+Cmd+Z (or Device → Shake)
Android emulator: Cmd+M (macOS) or Ctrl+M (Windows/Linux)
Does DevTools work with expo-dev-client?
Yes - development builds expose the same dev menu and CDP endpoint as Expo Go. Start with npx expo start --dev-client and press j once the client connects to Metro.
Why did DevTools disconnect?
Common causes: app closed, native rebuild installed, Metro stopped, physical device unplugged, or a JS crash. Use Reconnect DevTools in the dialog rather than leaving a stale session open.
How do I profile navigation jank?
Open the Performance panel, start recording, navigate between screens, stop recording. Inspect React Performance tracks, long tasks, and network waterfalls in one timeline.
Are WebSocket messages visible in Network?
Not yet - WebSocket capture is on the unimplemented list for core React Native DevTools. Log at the socket layer or use native proxies until support ships.
Can multiple tools attach at once?
Since RN 0.85, multiple CDP connections are supported. DevTools, some VS Code extensions, and other clients can coexist - earlier versions would drop the previous session.
Gotcha: LogBox disappeared when DevTools opened - is that a bug?
When DevTools is attached, non-fatal LogBox toasts are suppressed so the Console panel stays authoritative. Fatal syntax errors still block the app until fixed.
Does the desktop app require Chrome installed?
RN 0.83+ ships a bundled desktop binary (notarized on macOS). If download fails (firewall), RN falls back to launching in an installed Chrome/Edge browser.