Webpack Setup
Additional configuration for Next.js applications using Webpack instead of Turbopack.
This guide covers the configuration differences for Next.js applications using Webpack (the default bundler before Next.js 15). Complete the main manual setup first, then apply these Webpack-specific configurations.
For a complete reference of all build configuration options, see the Build Configuration documentation.
If you're using Next.js 15+ with Turbopack (the default), you don't need this guide. See the main manual setup instead.
| Feature | Turbopack | Webpack |
|---|---|---|
| Server function instrumentation | Automatic via Next.js telemetry | Build-time code injection |
| Middleware instrumentation | Automatic via Next.js telemetry | Build-time code injection |
| Source map upload | Post-compile during build | During build via plugin (default) |
| Route exclusion | Not supported | Supported via webpack.excludeServerRoutes |
| React component annotation | Not supported | Supported via webpack.reactComponentAnnotation |
| Logger tree-shaking | Not supported | Supported via webpack.treeshake.removeDebugLogging |
With Webpack, Sentry automatically instruments your server functions, middleware, and app directory components at build time. You can control this behavior:
These options are enabled by default with Webpack. Disable them if you prefer manual instrumentation or experience build issues.
Note: These options instrument Pages Router pages, API routes, and App Router components, but do NOT automatically instrument Server Actions. Server Actions require manual wrapping using withServerActionInstrumentation().
next.config.tsimport { withSentryConfig } from "@sentry/nextjs";
export default withSentryConfig(nextConfig, {
webpack: {
// Instrument Pages Router API routes and data fetching methods (default: true)
autoInstrumentServerFunctions: true,
// Instrument Next.js middleware (default: true)
autoInstrumentMiddleware: true,
// Instrument App Router components (default: true)
autoInstrumentAppDirectory: true,
// Tree-shake Sentry logger statements to reduce bundle size
treeshake: {
removeDebugLogging: true,
},
},
});
With Webpack, you can exclude specific routes from automatic instrumentation. This is useful for health check endpoints or routes that shouldn't be monitored.
This option has no effect when using Turbopack, as Turbopack relies on Next.js telemetry features instead of build-time instrumentation.
Specify routes as URL paths (not file system paths). Routes must have a leading slash and no trailing slash.
next.config.tsimport { withSentryConfig } from "@sentry/nextjs";
export default withSentryConfig(nextConfig, {
webpack: {
excludeServerRoutes: [
"/api/health",
"/api/excluded/[parameter]",
/^\/internal\//, // Regex for all /internal/* routes
],
},
});
By default, Webpack uploads source maps during the build process using the Sentry Webpack Plugin. This happens separately for each build (client, server, edge), which can increase build time.
For faster builds, you can use the post-build upload mode (available in Next.js 15.4.1+), which uploads all source maps in a single operation after all builds complete.
The Sentry Webpack Plugin runs during each webpack compilation and uploads source maps as they're generated.
next.config.tsimport { withSentryConfig } from "@sentry/nextjs";
export default withSentryConfig(nextConfig, {
org: "___ORG_SLUG___",
project: "___PROJECT_SLUG___",
authToken: process.env.SENTRY_AUTH_TOKEN,
});
Enable post-build upload for faster builds. All source maps are uploaded once after all webpack builds complete.
This option requires Next.js 15.4.1 or later. Turbopack always uses this mode.
next.config.tsimport { withSentryConfig } from "@sentry/nextjs";
export default withSentryConfig(nextConfig, {
org: "___ORG_SLUG___",
project: "___PROJECT_SLUG___",
authToken: process.env.SENTRY_AUTH_TOKEN,
// Upload after all builds complete (faster)
useRunAfterProductionCompileHook: true,
});
Pass options directly to the underlying Sentry Webpack Plugin for advanced configuration.
The unstable_sentryWebpackPluginOptions API may change in future releases.
These options only apply when useRunAfterProductionCompileHook is false (the default).
next.config.tsimport { withSentryConfig } from "@sentry/nextjs";
export default withSentryConfig(nextConfig, {
org: "___ORG_SLUG___",
project: "___PROJECT_SLUG___",
authToken: process.env.SENTRY_AUTH_TOKEN,
webpack: {
// Advanced Webpack plugin options
unstable_sentryWebpackPluginOptions: {
sourcemaps: {
assets: ["./build/**/*.js", "./build/**/*.map"],
ignore: ["node_modules/**"],
},
},
},
});
Server Actions (functions marked with "use server") are not automatically instrumented by Webpack's build-time instrumentation. You must manually wrap them for error and performance monitoring.
Wrap Server Actions with withServerActionInstrumentation() to capture errors and performance data.
app/actions.ts"use server";
import * as Sentry from "@sentry/nextjs";
export async function submitForm(formData: FormData) {
return Sentry.withServerActionInstrumentation(
"submitForm", // Action name for Sentry
{
recordResponse: true, // Include response data
},
async () => {
// Your server action logic
const result = await processForm(formData);
return { success: true, data: result };
},
);
}
With Webpack, you can enable React component name tracking. This annotates React components with data-sentry-* attributes that allow Sentry to identify which components users interacted with in Session Replay and breadcrumbs.
This feature is only available with Webpack. Turbopack does not support React component annotation.
Enable reactComponentAnnotation to track component names in your application. This is especially useful for debugging user interactions in Session Replay.
next.config.tsimport { withSentryConfig } from "@sentry/nextjs";
export default withSentryConfig(nextConfig, {
webpack: {
reactComponentAnnotation: {
enabled: true,
},
},
});
If you have components you don't want annotated (for privacy or performance reasons), you can exclude them by name.
next.config.tsimport { withSentryConfig } from "@sentry/nextjs";
export default withSentryConfig(nextConfig, {
webpack: {
reactComponentAnnotation: {
enabled: true,
ignoredComponents: ["SensitiveForm", "InternalDebugPanel"],
},
},
});
Tunneling works identically for both Webpack and Turbopack. Sentry automatically filters tunnel requests from middleware spans to prevent noise in your monitoring data.
Enable tunneling to bypass ad-blockers. Use a fixed route so you can exclude it from middleware if needed.
next.config.tsimport { withSentryConfig } from "@sentry/nextjs";
export default withSentryConfig(nextConfig, {
// Use a fixed route (recommended)
tunnelRoute: "/monitoring",
});
If you're upgrading to Turbopack:
- Remove webpack-only options -
excludeServerRoutesandunstable_sentryWebpackPluginOptionshave no effect with Turbopack - Understand source map changes - Turbopack always uses post-build upload (no plugin-based upload option)
- Test auto-instrumentation - Turbopack uses Next.js telemetry instead of build-time injection; verify your monitoring still works
next.config.ts// Before (Webpack)
export default withSentryConfig(nextConfig, {
excludeServerRoutes: ["/api/health"],
tunnelRoute: "/monitoring",
});
// After (Turbopack)
export default withSentryConfig(nextConfig, {
// excludeServerRoutes is not supported with Turbopack
tunnelRoute: "/monitoring",
});
- Logs Integrations - Connect popular logging libraries like Pino, Winston, and Bunyan
- Distributed Tracing - Trace requests across services and microservices
- AI Agent Monitoring - Monitor AI agents built with Vercel AI SDK, LangChain, and more
- Connect GitHub + Seer - Enable AI-powered root cause analysis
- Configuration Options - Explore extended SDK configuration
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would be better").