diff --git a/packages/react-devtools-core/src/standalone.js b/packages/react-devtools-core/src/standalone.js
index 6b598efa22442..72b037d1747d2 100644
--- a/packages/react-devtools-core/src/standalone.js
+++ b/packages/react-devtools-core/src/standalone.js
@@ -8,10 +8,7 @@
*/
import {createElement} from 'react';
-import {
- // $FlowFixMe Flow does not yet know about flushSync()
- flushSync,
-} from 'react-dom';
+import {flushSync} from 'react-dom';
import {createRoot} from 'react-dom/client';
import Bridge from 'react-devtools-shared/src/bridge';
import Store from 'react-devtools-shared/src/devtools/store';
diff --git a/packages/react-devtools-extensions/src/main.js b/packages/react-devtools-extensions/src/main.js
index 2d67aa2cd7bde..a0f9bcea17a29 100644
--- a/packages/react-devtools-extensions/src/main.js
+++ b/packages/react-devtools-extensions/src/main.js
@@ -1,7 +1,8 @@
/* global chrome */
import {createElement} from 'react';
-import {createRoot, flushSync} from 'react-dom';
+import {flushSync} from 'react-dom';
+import {createRoot} from 'react-dom/client';
import Bridge from 'react-devtools-shared/src/bridge';
import Store from 'react-devtools-shared/src/devtools/store';
import {getBrowserName, getBrowserTheme} from './utils';
diff --git a/packages/react-devtools-shell/src/app/Iframe/index.js b/packages/react-devtools-shell/src/app/Iframe/index.js
index d22c33f2d9efa..f4b562ee311db 100644
--- a/packages/react-devtools-shell/src/app/Iframe/index.js
+++ b/packages/react-devtools-shell/src/app/Iframe/index.js
@@ -2,7 +2,7 @@
import * as React from 'react';
import {Fragment} from 'react';
-import * as ReactDOM from 'react-dom';
+import {createPortal} from 'react-dom';
export default function Iframe() {
return (
@@ -56,7 +56,7 @@ function Frame(props) {
style={iframeStyle}
/>
- {element ? ReactDOM.createPortal(props.children, element) : null}
+ {element ? createPortal(props.children, element) : null}
);
}
diff --git a/packages/react-devtools-shell/src/app/devtools.js b/packages/react-devtools-shell/src/app/devtools.js
index a4e21c81d772f..5915275978a4b 100644
--- a/packages/react-devtools-shell/src/app/devtools.js
+++ b/packages/react-devtools-shell/src/app/devtools.js
@@ -1,8 +1,7 @@
/** @flow */
import {createElement} from 'react';
-// $FlowFixMe Flow does not yet know about createRoot()
-import {createRoot} from 'react-dom';
+import {createRoot} from 'react-dom/client';
import {
activate as activateBackend,
initialize as initializeBackend,
diff --git a/packages/react-devtools-shell/src/app/index.js b/packages/react-devtools-shell/src/app/index.js
index 89f14c8e3150d..3ec70de067152 100644
--- a/packages/react-devtools-shell/src/app/index.js
+++ b/packages/react-devtools-shell/src/app/index.js
@@ -28,6 +28,7 @@ ignoreErrors([
'Warning: Legacy context API',
'Warning: Unsafe lifecycle methods',
'Warning: %s is deprecated in StrictMode.', // findDOMNode
+ 'Warning: ReactDOM.render is no longer supported in React 18',
]);
ignoreWarnings(['Warning: componentWillReceiveProps has been renamed']);
ignoreLogs([]);
diff --git a/packages/react-devtools-shell/src/e2e/app.js b/packages/react-devtools-shell/src/e2e/app.js
index 71f33f9044873..f9d2ba1dad5c6 100644
--- a/packages/react-devtools-shell/src/e2e/app.js
+++ b/packages/react-devtools-shell/src/e2e/app.js
@@ -4,7 +4,7 @@
import * as React from 'react';
import * as ReactDOM from 'react-dom';
-import * as ReactDOMClient from 'react-dom/client';
+import {createRoot} from 'react-dom/client';
const container = document.createElement('div');
@@ -14,7 +14,7 @@ const container = document.createElement('div');
// so that it can load things other than just ToDoList.
const App = require('./apps/ListApp').default;
-const root = ReactDOMClient.createRoot(container);
+const root = createRoot(container);
root.render();
// ReactDOM Test Selector APIs used by Playwright e2e tests
diff --git a/packages/react-devtools-shell/src/e2e/devtools.js b/packages/react-devtools-shell/src/e2e/devtools.js
index 059d330e83c95..3b4ac2b99282a 100644
--- a/packages/react-devtools-shell/src/e2e/devtools.js
+++ b/packages/react-devtools-shell/src/e2e/devtools.js
@@ -1,6 +1,6 @@
import * as React from 'react';
import * as ReactDOM from 'react-dom';
-import * as ReactDOMClient from 'react-dom/client';
+import {createRoot} from 'react-dom/client';
import {
activate as activateBackend,
initialize as initializeBackend,
@@ -34,7 +34,7 @@ function init(appIframe, devtoolsContainer, appSource) {
inject(contentDocument, appSource, () => {
// $FlowFixMe Flow doesn't know about createRoot() yet.
- ReactDOMClient.createRoot(devtoolsContainer).render(
+ createRoot(devtoolsContainer).render(