Next.js integration guide
Typical installation time: 7 minutes
Hi there! You’ve found Honeybadger’s guide to Next.js error and exception tracking. Once installed, Honeybadger will automatically report errors from your Next.js application.
The @honeybadger-io/nextjs package utilizes the packages @honeybadger-io/js,
@honeybadger-io/react and @honeybadger-io/webpack under the hood to provide
a simplified integration package for Next.js applications. You can always refer
to these packages’ documentation for more information and advanced
configuration.
Features
Section titled “Features”- App Router support (added with Next.js 13)
- Automatic reporting of uncaught exceptions (see Limitations)
- Breadcrumbs
- Source map upload to Honeybadger
- CLI command to generate Honeybadger configuration files for Next.js runtimes
Installation
Section titled “Installation”Add @honeybadger-io/nextjs and @honeybadger-io/react as dependencies.
# npmnpm add @honeybadger-io/react @honeybadger-io/nextjs --save
# yarnyarn add @honeybadger-io/react @honeybadger-io/nextjsConfiguration
Section titled “Configuration”Run the following command, which generates configuration files in your project root for each Next.js runtime:
npx honeybadger-copy-config-filesThe following files will added to your project:
honeybadger.server.config.js- Configuration file for Next.js server runtimehoneybadger.client.config.js- Configuration file for Next.js client runtimehoneybadger.edge.config.js- Configuration file for Next.js Edge runtimepages/_error.[js|tsx]- Next.js Pages Router custom error component - if pages folder existsapp/error.[js|tsx]- Next.js App Router custom error component - if app folder existsapp/global-error.[js|tsx]- Next.js App Router global error component - if app folder exists
Note: The honeybadger.edge.config.js file is necessary if you deploy your
Next.js application to Vercel and use
Vercel Edge Functions. If not, you
can safely remove this file.
Note: The script will create backups of any existing files.
In your next.config.js:
const { setupHoneybadger } = require("@honeybadger-io/nextjs");
const moduleExports = { // ... Your existing module.exports object goes here};
// Showing default valuesconst honeybadgerNextJsConfig = { // Disable source map upload (optional) disableSourceMapUpload: false,
// Hide debug messages (optional) silent: true,
// More information available at @honeybadger-io/webpack: https://github.com/honeybadger-io/honeybadger-js/tree/master/packages/webpack webpackPluginOptions: { // Required if you want to upload source maps to Honeybadger apiKey: process.env.NEXT_PUBLIC_HONEYBADGER_API_KEY,
// Required if you want to upload source maps to Honeybadger assetsUrl: process.env.NEXT_PUBLIC_HONEYBADGER_ASSETS_URL,
revision: process.env.NEXT_PUBLIC_HONEYBADGER_REVISION, endpoint: "https://api.honeybadger.io/v1/source_maps", ignoreErrors: false, retries: 3, workerCount: 5, deploy: { environment: process.env.NEXT_PUBLIC_VERCEL_ENV || process.env.VERCEL_ENV || process.env.NODE_ENV, repository: "https://url.to.git.repository", localUsername: "username", }, },};
module.exports = setupHoneybadger(moduleExports, honeybadgerNextJsConfig);Note: If you want to upload source maps to Honeybadger, ensure that
disableSourceMapUpload is set to false and that apiKey and assetsUrl
properties are set in webpackPluginOptions.
Note: The value of assetsUrl should be the URL to your domain suffixed
with _next. For example if you app is deployed on Vercel and has the domain
my-app.vercel.app, the value of assetsUrl should be
https://my-app.vercel.app/_next.
Optionally, you can use Honeybadger’s Error Boundary component to collect
additional React contextual information for errors that occur in your React
components. Simply wrap the Component prop in your _app.js file:
import { Honeybadger, HoneybadgerErrorBoundary } from "@honeybadger-io/react";
function MyApp({ Component, pageProps }) { return ( <HoneybadgerErrorBoundary honeybadger={Honeybadger}> <Component {...pageProps} /> </HoneybadgerErrorBoundary> );}
export default MyApp;You can read more about Error Boundaries in the React documentation.
Reporting errors
Section titled “Reporting errors”The above configuration will automatically report errors to Honeybadger in most cases (see Limitations), but you can also report errors manually:
import { Honeybadger } from "@honeybadger-io/react";
Honeybadger.notify(error);Identifying users
Section titled “Identifying users”Honeybadger can track which users have encountered each error. To identify the
current user in error reports, add a user identifier and/or email address with
Honeybadger.setContext:
import { Honeybadger } from "@honeybadger-io/react";
Honeybadger.setContext({ user_id: 123, user_email: "user@example.com",});Sending additional context
Section titled “Sending additional context”Sometimes additional application state may be helpful for diagnosing errors. You
can arbitrarily specify additional key/value pairs when you invoke setContext.
import { Honeybadger } from "@honeybadger-io/react";
Honeybadger.setContext({ active_organization: 55, custom_configuration: false,});Clearing context
Section titled “Clearing context”If your user logs out or if your context changes during the React component
lifetime, you can set new values as appropriate by invoking setContext again.
Additionally, if needed, you can clear the context by invoking clear:
import { Honeybadger } from "@honeybadger-io/react";
// Set the context to {}Honeybadger.clear();Advanced usage
Section titled “Advanced usage”@honeybadger-io/nextjs is built on
@honeybadger-io/js
and
@honeybadger-io/react.
See the Honeybadger JavaScript integration documentation for additional customization options, as well as the dedicated React integration guide.
Source map upload and tracking deploys
Section titled “Source map upload and tracking deploys”Honeybadger can automatically un-minify your code if you provide a source map along with your minified JavaScript files. See our Source Map Guide for details.
Fill in the values under webpackPluginOptions in your next.config.js file to
upload source maps to Honeybadger.
You can notify Honeybadger when you’ve deployed a new build. Honeybadger will
associate an error report with a specific revision number (matching the
revision field in the configuration passed to Honeybadger.configure, found
in one of your honeybadger.[server|client|edge].config.js files). Set deploy
information in your Honeybadger’s Next.js configuration under the
webpackPluginOptions.deploy key.
For more information, see @honeybadger-io/webpack documentation.
Collect User Feedback
Section titled “Collect User Feedback”When an error occurs, a form can be shown to gather feedback from your users.
Honeybadger can automatically show the form by setting the
showUserFeedbackFormOnError prop to true:
<HoneybadgerErrorBoundary honeybadger={honeybadger} showUserFeedbackFormOnError={true}> <App /></HoneybadgerErrorBoundary>Read more about this feature here.
Limitations
Section titled “Limitations”The following limitations are known to exist and will be tackled in future releases:
- Issue link: A
custom error component is used to report uncaught exceptions to Honeybadger.
This is necessary because Next.js does not provide a way to hook into the
error handler. This is not a catch-all errors solution. If you are using the
Pages Router, there are some caveats to this approach, as reported
here.
This is a limitation of Next.js, not Honeybadger’s Next.js integration. Errors
thrown in middlewares or API routes will not be reported to Honeybadger, since
when they reach the error component, the response status code is 404 and no
error information is available. Additionally, there is an open
issue about 404 being
reported with Next.js apps deployed on Vercel, when they should be reported
as 500. If you are using the App Router, these limitations do not apply,
because errors thrown in middlewares or API routes do not reach the custom
error component but are caught by the global
window.onerrorhandler. However, some other server errors (i.e. from data fetching methods) will be reported with minimal information, since Next.js will send a generic error message to this component for better security. - Issue link: Source maps for the Edge runtime are not supported yet.
Sample applications
Section titled “Sample applications”Two sample applications are available in the examples folder. Follow the README instructions to run them.