Change:
It seems that with the latest update of Chrome and React DevTools, it cannot detect pages as using React on incognito. Screenshot attached below: <img width="518" alt="image" src="https://user-"Chrome version: 112.0.5615.137 (arm64) React DevTools version: 4.27.6 (4/20/2023) Every time No response No response No response No response No response No response
Thanks for reporting, looking into this. Can reproduce with the version 4.27.6 from Chrome web store, but unable to reproduce with a local build. Something weird happens in incognito mode with registering content scripts for extensions, which are downloaded from store.
Hello, I have the same bug. FYI. OS: Ubuntu 22.04.2 LTS. Chrome: version 112.0.5615.165 (official build) (64 bits). React Developer Tools: version 4.27.6 (2023-04-20). React Developer Tools description: Adds React debugging tools to the Chrome Developer Tools. Created from revision on 4/20/2023. Firefox: version 112.0.2 (64 bits). React Developer Tools: version 4.27.1 (2023-05-01). React Developer Tools description: Adds React debugging tools to the Firefox Developer Tools. Created from revision on 12/6/2022.
Hello. Having the same bug OS: MacOs Venture 13.3.1 (22E261) React Dev Tools: version 4.27.6 (4/20/2023) Chrome: Version 112.0.5615.137 (Official Build) (arm64)
Same issue OS: MacOs Venture 13.3.1 React Dev Tools: version 4.27.6 (4/20/2023) Chrome: Version 112.0.5615.137 (Official Build) (x86_64)
This is still an issue after code changes. Removed and re- devtools. Tested in incognito. OS: MacOs Venture 13.3.1 React Dev Tools: version 4.27.6 (4/20/2023) Chrome: Version 112.0.5615.137 (Official Build) (x86_64)
The version, which contains this fix is not published yet. I will do a new release this week, so you should expect it to be available in Chrome web store next week. Sorry for any inconvenience caused.

Discussion:
const ports = {}; <del> if (!IS_FIREFOX) { // equivalent logic for Firefox is in prepareInjection.js // Manifest V3 method of injecting content scripts (not yet supported in Firefox) // Note: the "world" option in registerContentScripts is only available in Chrome v102+ // It's critical since it allows us to directly run scripts on the "main" world on the page // "document_start" allows it to run before the page's scripts // so the hook can be detected by react reconciler chrome.scripting.registerContentScripts( [ { id: 'hook', matches: ['<all_urls>'], js: ['build/installHook.js'], runAt: 'document_start', world: chrome.scripting.ExecutionWorld.MAIN, }, { id: 'renderer', matches: ['<all_urls>'], js: ['build/renderer.js'], runAt: 'document_start', world: chrome.scripting.ExecutionWorld.MAIN, }, ], function () { // When the content scripts are already registered, an error will be thrown. // It happens when the service worker process is incorrectly duplicated. if (chrome.runtime.lastError) { console.error(chrome.runtime.lastError); } </del> <ins> async function dynamicallyInjectContentScripts() { const contentScriptsToInject = [ { id: 'hook', matches: ['<all_urls>'], js: ['build/installHook.js'], runAt: 'document_start', world: chrome.scripting.ExecutionWorld.MAIN, </ins> }, <del> ); </del> <ins> { id: 'renderer', matches: ['<all_urls>'], js: ['build/renderer.js'], runAt: 'document_start', world: chrome.scripting.ExecutionWorld.MAIN, }, ]; try { // For some reason dynamically injected scripts might be already registered // Registering them again will fail, which will result into // __REACT_DEVTOOLS_GLOBAL_HOOK__ hook not being injected await chrome.scripting.unregisterContentScripts({ ids: contentScriptsToInject.map(s => s.id), }); // equivalent logic for Firefox is in prepareInjection.js // Manifest V3 method of injecting content script // TODO(hoxyq): migrate Firefox to V3 manifests // Note: the "world" option in registerContentScripts is only available in Chrome v102+ // It's critical since it allows us to directly run scripts on the "main" world on the page // "document_start" allows it to run before the page's scripts // so the hook can be detected by react reconciler await chrome.scripting.registerContentScripts(contentScriptsToInject); } catch (error) { console.error(error); } } if (!IS_FIREFOX) { dynamicallyInjectContentScripts(); </ins> } chrome.runtime.onConnect.addListener(function (port) {