diff --git a/web/app/components/devtools/index.ts b/web/app/components/devtools/index.ts
index 54c8aa8111..029218598b 100644
--- a/web/app/components/devtools/index.ts
+++ b/web/app/components/devtools/index.ts
@@ -1,2 +1,3 @@
export { ReactScan } from './react-scan'
+export { default as ReactScanLoader } from './react-scan-loader'
export { TanStackDevtoolsWrapper } from './tanstack-devtools'
diff --git a/web/app/components/devtools/react-scan-loader.tsx b/web/app/components/devtools/react-scan-loader.tsx
new file mode 100644
index 0000000000..abd8160245
--- /dev/null
+++ b/web/app/components/devtools/react-scan-loader.tsx
@@ -0,0 +1,23 @@
+'use client'
+
+import { lazy, Suspense } from 'react'
+import { IS_DEV } from '@/config'
+
+const ReactScan = lazy(() =>
+ import('./react-scan').then(module => ({
+ default: module.ReactScan,
+ })),
+)
+
+const ReactScanLoader = () => {
+ if (!IS_DEV)
+ return null
+
+ return (
+
+
+
+ )
+}
+
+export default ReactScanLoader
diff --git a/web/app/layout.tsx b/web/app/layout.tsx
index f04b2fe39a..c4306556f3 100644
--- a/web/app/layout.tsx
+++ b/web/app/layout.tsx
@@ -8,7 +8,7 @@ import { getLocaleOnServer } from '@/i18n-config/server'
import { DatasetAttr } from '@/types/feature'
import { cn } from '@/utils/classnames'
import BrowserInitializer from './components/browser-initializer'
-import { ReactScan } from './components/devtools'
+import { ReactScanLoader } from './components/devtools'
import I18nServer from './components/i18n-server'
import SentryInitializer from './components/sentry-initializer'
import RoutePrefixHandle from './routePrefixHandle'
@@ -90,7 +90,7 @@ const LocaleLayout = async ({
className="color-scheme h-full select-auto"
{...datasetMap}
>
-
+