---
url: 'https://dxpr.com/hc/documentation/learn-dxpr-builder/advanced/multisite'
title: 'Multisite installations | DXPR'
author:
  name: docs-sync
  url: 'https://dxpr.com/users/docs-sync'
date: '2026-10-23T14:31:17+00:00'
copyright: 'Copyright DXPR. All rights reserved.'
type: article
summary: 'One codebase, several sites, one product key'
tags:
  - 'Run it in production'
image: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
published: true
og:
  site_name: DXPR
  updated_time: '2026-10-23T14:31:17+0000'
  'image:alt': 'DXPR, powered by Drupal: AI-powered Drupal for marketers.'
schema:
  '@context': 'https://schema.org'
  '@graph':
    -
      mainEntity: {  }
    -
      '@type': TechArticle
      headline: 'Multisite installations'
      description: 'One codebase, several sites, one product key'
      image:
        '@type': ImageObject
        url: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
        width: '1200'
        height: '630'
      datePublished: '2026-10-23T14:31:17+0000'
      dateModified: '2026-10-23T14:31:17+0000'
      author:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
        url: 'https://dxpr.com/'
        logo:
          '@type': ImageObject
          url: 'https://dxpr.com/themes/custom/dxpr_com/dxpr-logo-dark.svg'
          width: '1348'
          height: '501'
      publisher:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
        url: 'https://dxpr.com/'
        logo:
          '@type': ImageObject
          url: 'https://dxpr.com/themes/custom/dxpr_com/dxpr-logo-dark.svg'
          width: '1348'
          height: '501'
      mainEntityOfPage: 'https://dxpr.com/hc/documentation/learn-dxpr-builder/advanced/multisite'
      articleSection: 'Run it in production'
    -
      '@type': WebPage
      '@id': 'https://dxpr.com/hc/documentation/learn-dxpr-builder/advanced/multisite'
      description: 'One codebase, several sites, one product key'
      breadcrumb:
        '@type': BreadcrumbList
        itemListElement:
          -
            '@type': ListItem
            position: 1
            name: Home
            item: 'https://dxpr.com/'
      publisher:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
      inLanguage: en
---
[Help Center](/hc)/[Documentation](/hc/documentation) /[Learn DXPR Builder](/hc/documentation/learn-dxpr-builder) /[Manage the site](/hc/documentation/learn-dxpr-builder/manage) /[Run it in production](/hc/documentation/learn-dxpr-builder/manage/production) # Multisite installations.

One codebase, several sites, one product key

 Learn DXPR BuilderManage the siteRun it in production

   ## In this guide

 Related guides

- [Multi-site licensing](/hc/documentation/learn-dxpr-builder/licensing/multi-site)
- [Importing and exporting](/hc/documentation/learn-dxpr-builder/reusable-templates/importing-exporting)

DXPR Builder runs in a Drupal multisite installation the same way it runs on separate servers: one copy of the module code, one database per site, and one product key that all sites share. This page covers what is shared, what is per site, and how to set it up.

## Licensing across sites

One product key serves all your sites. Licensing is per editor, not per site, and the count is kept by the DXPR licence server:

- Each site sends its host name and its editors (the accounts with the `edit with dxpr builder` permission that are not excluded, plus user 1) to the licence server (`src/Service/DxprBuilderLicenseService.php`). Accounts without a valid email address are not sent.
- The server keeps one record per email address with the list of domains that address has edited on. A person who edits on three sites with the same email address counts once.
- Each site fetches the shared editor list from the server and reports the total to the status report and the User Licenses page. The list is cached for 24 hours.

Read [Multi-site licensing](/hc/documentation/learn-dxpr-builder/licensing/multi-site) for how editors are counted and released.

## What is shared and what is per site

Shared through the code base:

- The module and its submodules in `modules/contrib/dxpr_builder`.
- The editor JavaScript. With **Asset source** set to **Cloud**, the default, every site loads the same release from the DXPR CDN. When the module directory holds a local build, every site loads the files from there instead.
- Icon sets and utility classes declared by modules and themes (`*.dxpr_icon_sets.yml`, `dxpr_builder_classes` in a theme's `.info.yml`). A theme's classes appear only on sites where that theme is enabled.

Per site, because it lives in that site's database and configuration:

- `dxpr_builder.settings`: the product key or the Key entity that holds it, **Custom styles**, **Sideload Bootstrap files**, **Browser type** for media, the text filter and editor asset settings.
- The Key entity itself (`key.key.*`), when the product key is stored with the Key module.
- AI settings (**DXPR Studio** &gt; **DXPR Builder** &gt; **AI**), including which models are enabled.
- Builder profiles (`dxpr_builder.dxpr_builder_profile.*`), page templates (`dxpr_builder.page_template.*`) and user templates (`dxpr_builder.user_template.*`).
- Uploaded images in each site's files directory (`dxpr_builder_images`, `dxpr_builder_videos`, `dxpr_builder_files`).

The Bootstrap setting has two values, **None (theme provides Bootstrap)** and **Bootstrap 5**. Choose per site according to the theme that site uses.

## Setting up a new site in the multisite

1. Create the site's `sites/<name>/settings.php` and database as for any Drupal multisite site.
2. Enable the module on that site:

    ```bash
    drush --uri=https://<site-host> en dxpr_builder -y

    ```
3. Go to **DXPR Studio** &gt; **DXPR Builder** &gt; **General Settings**(`/admin/dxpr_studio/dxpr_builder/settings`) on that site. In the **License** section, paste the same product key you use on the other sites, or select a Key on this site that holds it.
4. Set **Sideload Bootstrap files** to match the site's theme.
5. Create the site's builder profiles and, if required, import templates as described below.

## Sharing templates between sites

Page templates and user templates are configuration entities, so you can move them with configuration export and import:

1. Export the source site's configuration:

    ```bash
    drush --uri=https://<source-host> config:export

    ```
2. Copy the `dxpr_builder.page_template.*.yml` and `dxpr_builder.user_template.*.yml` files into the target site's configuration sync directory.
3. Import them on the target site:

    ```bash
    drush --uri=https://<target-host> config:import --partial

    ```

User templates carry a `uid`; the exported file references the owner's user ID on the source site, so check the owner after the import.

## What's next?

- [Multi-site licensing](/hc/documentation/learn-dxpr-builder/licensing/multi-site) for editor counting and releasing licences.
- [Importing and exporting templates](/hc/documentation/learn-dxpr-builder/reusable-templates/importing-exporting)for moving individual templates through the admin interface.