Debugging replaceRenderer API

Prerequisites

If you’re not familiar with Gatsby’s lifecycle, see the overview Gatsby Lifecycle APIs.

What is the replaceRenderer API?

The replaceRenderer API is one of Gatsby’s Server Side Rendering (SSR) extension APIs. This API is called when you run gatsby build and is used to customize how Gatsby renders your static content. It can be implemented by any Gatsby plugin or your gatsby-ssr.js file - adding support for Redux, CSS-in-JS libraries or any code that needs to change Gatsby’s default HTML output.

Why does it cause build errors?

If multiple plugins implement replaceRenderer in your project, only the last plugin implementing the API can be called - which will break your site builds.

Note that replaceRenderer is only used during the build lifecycle. It won’t cause problems as you work on your site with the develop script.

If multiple plugins implement replaceRenderer, the build script will warn you:

Note that default-site-plugin refers to your local gatsby-ssr.js file, if this file exists it will always be used in favor of gatsby-ssr.js from other plugins.

Fixing replaceRenderer build errors

If you see errors during your build, you can fix them with the following steps.

1. Identify the plugins using replaceRenderer

Your error message should list which plugins implement replaceRenderer:

In this example, your gatsby-ssr.js file and plugin-name-a are both using replaceRenderer.

2. Copy the plugins’ replaceRenderer functionality to your site’s gatsby-ssr.js file

You’ll need to override your plugins’ replaceRenderer code in your gatsby-ssr.js file. This step will be different for each project, keep reading to see an example.

Example

Initial setup

In this example project you’re using Redux and Gatsby’s Styled Components plugin.

gatsby-ssr.js (based on the using Redux example)

Note that the Styled Components plugin uses replaceRenderer, and the code in gatsby-ssr.js also uses replaceRenderer.

Fixing the replaceRenderer error

Your gatsby-config.js file will remain unchanged. However, your gatsby-ssr.js file will update to include the replaceRenderer functionality from the Styled Components plugin

Now gatsby-ssr.js implements the Styled Components and Redux functionality using one replaceRenderer instance. Run npm run build and the site will build correctly.

All the code from this example is available on GitHub.