# Next.js integration Read `rum-core.md` first. Use `@datadog/browser-rum-nextjs`, not the plain React plugin. ## Prerequisites and packages Require Next.js 15.3 or later and React 18 or later. Confirm the configured Node runtime satisfies the detected Next.js package's engine requirement. If any prerequisite fails, stop without editing and report the detected and required versions. Do not upgrade Next.js and do not fall back to a client component or CDN setup. Install together at the same exact version: ```sh npm install --save @datadog/browser-rum @datadog/browser-rum-nextjs ``` ## Initialize once Create `instrumentation-client.ts` or `.js` at the Next.js source root required by the project's layout. Put the canonical `datadogRum.init()` from `rum-core.md` at module scope with `plugins: [nextjsPlugin()]`. For an App Router application: ```ts import { datadogRum } from '@datadog/browser-rum' import { nextjsPlugin, onRouterTransitionStart } from '@datadog/browser-rum-nextjs' export { onRouterTransitionStart } datadogRum.init({ // ...canonical fields from rum-core.md... plugins: [nextjsPlugin()], }) ``` For a Pages Router-only application, omit `onRouterTransitionStart`: ```ts import { datadogRum } from '@datadog/browser-rum' import { nextjsPlugin } from '@datadog/browser-rum-nextjs' datadogRum.init({ // ...canonical fields from rum-core.md... plugins: [nextjsPlugin()], }) ``` Use `NEXT_PUBLIC_` variables for values that must be read by this client module when following an existing environment-variable convention. ## Wire the router For App Router, render `DatadogAppRouter` exactly once in the root `app/layout` body without converting the layout to a client component: ```tsx import { DatadogAppRouter } from '@datadog/browser-rum-nextjs'