What replaced Remote JS Debugging and Flipper in React Native, and why was the old Chrome remote debugger unreliable?
answer
- which engine ran the code?
- debugger-ui page in desktop Chrome
- no JSI outside the device
- deprecated 0.73, removed 0.79
- CDP straight to Hermes
basics
~20 sReact Native DevTools, the default since 0.76. Remote JS Debugging ran the app's JavaScript in desktop Chrome instead of on the device, so behaviour differed and New Architecture modules broke; it was removed in 0.79. Flipper's integration left new projects in 0.74.
solid answer
~40 sReact Native DevTools replaced both. Remote JS Debugging moved the app's JavaScript off the device: the bundle ran inside a web page in desktop Chrome (`localhost:8081/debugger-ui`) and native calls were relayed to the phone. You were debugging a different engine with different timing, synchronous native calls couldn't work, and it was incompatible with New Architecture native modules, which need JSI in the same process. It was deprecated in 0.73 and removed in 0.79, which also broke react-native-debugger. Flipper's integration was deprecated in 0.73 and dropped from new projects in 0.74. DevTools instead speaks the Chrome DevTools Protocol to Hermes on the device, so you debug the code that actually ships. 0.83 added its Network panel, and 0.87 removed standalone `react-devtools` over WebSocket.
go deeper
Know the current tool is React Native DevTools and that Chrome remote debugging and Flipper are gone; don't suggest either as today's workflow.
Explain where the code ran under remote debugging, why that changed behaviour, and why JSI-based New Architecture modules could not work there. Place the key releases: 0.73, 0.74, 0.76, 0.79.
Be ready to migrate an old codebase: strip Flipper setup, replace react-native-debugger workflows, move logging habits to the Console panel, and explain the change to a team still on old habits.
Treat it as a case of debugging fidelity: a tool that runs code somewhere other than production hides bugs, and dropping it was worth the migration cost for the team.
## The short answer **React Native DevTools** replaced both. It became the default debugger in **React Native 0.76**. **Remote JS Debugging** was deprecated in **0.73** and removed in **0.79**; React Native's **Flipper** integration was deprecated in 0.73 and removed from new projects in **0.74**. What interviewers want to hear is *why*: the old remote debugger did not debug the program the user runs. ## How Remote JS Debugging worked, and why it misled Remote JS Debugging was the long-standing default for apps on JavaScriptCore. Turning it on did this: 1. The app stopped running its JavaScript on the device. 2. Desktop Chrome opened a page served by the dev server, `http://localhost:8081/debugger-ui`, and the app's bundle ran **inside that web page**, in Chrome's own JavaScript engine. 3. The app on the device became a shell: every call between JavaScript and native modules was relayed between Chrome and the device. That model had structural problems: - **A different engine.** Code ran in desktop Chrome, not in Hermes or the device's JavaScriptCore. Language features, performance and timing differed, so a bug could vanish or appear only while debugging. The React Native team's own wording is that it "could lead to inconsistent app behaviour while debugging". - **No synchronous native calls.** With JavaScript on a laptop and native code on a phone, nothing that needs a synchronous answer from native code could work properly. - **Incompatible with the New Architecture.** Turbo Modules and Fabric are reached through **JSI**, a C++ interface living in the same process as the JavaScript engine. Code running in Chrome has no JSI to call, so New Architecture native modules could not work under it. In 0.73 it was removed from the Dev Menu and could only be switched on through the `NativeDevSettings` API. In 0.79 it was removed altogether, which also ended compatibility with the community **react-native-debugger** app, since it was built on Remote JS Debugging. ## Flipper's exit **Flipper** was a desktop debugging platform with plugins for layout, network and logs, enabled by default in React Native **0.62**. Over time its native integration added dependencies and setup to every project. The removal went in two steps: - **0.73**: React Native deprecated the bootstrap code that wired up Flipper's core plugins. - **0.74**: new projects stopped including Flipper's native libraries and setup code, giving fewer dependencies and quicker local setup; existing apps could keep it by skipping those lines of the upgrade diff. - **After 0.74**: using Flipper for React Native layout, network and other React Native plugin features is unsupported. Flipper itself still exists as a standalone native debugging tool and can be added to an app manually. Nothing in the current template sets it up. ## What React Native DevTools does differently | | Remote JS Debugging | Flipper plugins | React Native DevTools | |---|---|---|---| | Where JavaScript runs | Desktop Chrome | On the device | On the device, in Hermes | | Connection | Custom relay through the dev server | Flipper's desktop plugin system | Chrome DevTools Protocol via the dev server | | New Architecture | Incompatible | Integration removed in 0.74 | Built for it | | Network inspection | Via Chrome, for code running in Chrome | Network plugin | Network panel, since 0.83 | DevTools attaches to the **real runtime**: Hermes speaks CDP, and the dev server's inspector proxy relays that to the Chrome DevTools-based frontend. Breakpoints, the console and the component tree reflect exactly what runs on the device. It also gathered the other tools into one place: React's Components and Profiler panels are built in, Metro's `console.log` forwarding was removed in 0.77 in favour of the Console panel, and 0.83 added Network and Performance panels plus a desktop app. ## Later clean-up worth knowing | Release | Change | |---|---| | 0.84 | The in-app Element Inspector lost its Perf and Network tabs; `XHRInterceptor` and `WebSocketInterceptor` were deprecated in favour of CDP's Network domain | | 0.85 | Several CDP clients (DevTools, an editor, an AI agent) can connect at the same time | | 0.87 | Connecting the standalone `react-devtools` package over WebSocket was removed; use DevTools' Components panel | ## Third-party tools after the switch - **Redux DevTools and similar**: the 0.79 notes point to Expo DevTools Plugins or the standalone versions of those tools, not react-native-debugger. - **Editor debugging**: VS Code can attach as a CDP client, and since 0.85 it can do so alongside DevTools. - **Native code**: still Xcode and Android Studio; DevTools does not replace them.
- A team relied on react-native-debugger for Redux DevTools. What do they use after React Native 0.79?react-native-debugger was built on Remote JS Debugging, so it stopped working when that was removed in 0.79. The release notes point to Expo DevTools Plugins or the standalone version of the tool, while React Native DevTools covers the console, breakpoints, network and component tree. Since 0.85 several CDP clients can connect at once, so an editor debugger can run alongside DevTools.
- Is Flipper forbidden in a React Native 0.87 app?No. React Native removed its own Flipper integration, not Flipper itself. Flipper can still be added by hand as a standalone native debugging tool, but its React Native plugins for layout and network inspection are unsupported and the template no longer wires anything up. For JavaScript and React concerns, React Native DevTools is the supported tool.
saying these in an interview costs you the question
- Remote debugging ran the same Hermes engine, only displayed in Chrome.
- Flipper is still wired into every new React Native project.
- React Native DevTools is Flipper under a new name.
- You can re-enable Chrome remote debugging from the Dev Menu in 0.87.
- In 0.87, connect standalone react-devtools to inspect the component tree.