12. Add-on and project configuration pipeline#

Volto build its configuration out of Volto's configuration defaults, add-ons configuration, and project configuration. This is called the configuration pipeline.

Volto configuration pipeline

It's applied in this particular order. Configurations can be overriden at a later stage.

12.1. All-in with add-on approach#

You can take full advantage of the configuration pipeline and do not use the project configuration at all. You can create a "policy" core product for your project, and use another for your project's theme. This way, the project itself renders as a simple boilerplate, expendable or rebuild-able at any time. You can also reuse add-ons across projects, and adjust them using another add-ons, depending on the other projects requirements.

12.2. Define your add-ons programatically#

Having the addons key in package.json is not flexibile enough in complex scenarios. You can load your add-ons programatically, outside package.json using volto.config.js like this:

module.exports = {
    addons: ['@eeacms/volto-accordion-block']

This is a scape hatch where you can define using code the add-ons that are used the current project. Take a look:

let addons = [];
if (process.env.MY_SPECIAL_ENV_VAR) { // Does not have to be RAZZLE_
  addons = ['volto-my-awesome-special-add-on'];

if (process.env.MARKER_FOR_MY_SECRET_PROJECT) { // Does not have to be RAZZLE_
  addons = [

module.exports = {
  addons: addons,

They are added to the existing ones in package.json.