Drupal is a registered trademark of Dries Buytaert
Release: Paragraphs 8.x-1.22 Minor update available for module paragraphs (8.x-1.22). Module Revived: MaxLength 3.2.0 Module maxlength updated after 11 months of inactivity (3.2.0). Release: Entity meta relation 8.x-1.9 Minor update available for module entity_meta_relation (8.x-1.9). Release: DiBa Integration 1.3.0 Minor update available for module diba_integration (1.3.0). Release: DiBa Integration 1.2.9 Minor update available for module diba_integration (1.2.9). Release: OAuth Client & OpenID Connect SSO | OAuth/OIDC Login 5.0.3 Minor update available for module miniorange_oauth_client (5.0.3). Release: Analyze 1.2.1 Minor update available for module analyze (1.2.1). Release: Marketo JS Forms Integration 4.0.0 Major update available for module marketo_forms (4.0.0). Release: Restrict Login or Role Access by IP Address 9.0.0-beta1 First beta version released for module restrict_by_ip (9.0.0-beta1). Usage Milestone: Provus Mega Menu Module provus_mega_menu crossed 1,000 active installs.

This module allows you to export selected content (like nodes, blocks, or media) from one Drupal site and import it into another. It requires that the destination site already has the same content structure (content types, fields, etc.) as the source site.

Content Porter is a Drupal module used to migrate content from one Drupal project to another Drupal project using a JSON export and import process.

The module is intended for cases where content needs to be moved between Drupal sites, such as from a development site to a staging site, from staging to production, or from one project instance to another.

The Drupal.org project is named Content Migration Porter. The module provided by this project is Content Porter.

Content Porter focuses on moving the actual content data. It does not automatically create the site structure, such as content types, fields, media types, paragraph types, taxonomy vocabularies, or custom block types. The destination site should already have the required structure before importing content.

How Content Porter works

Content Porter must be installed on both the source Drupal site and the destination Drupal site.

On the source site, administrators use the export page to select the type of content they want to export. The export form provides options for supported entity types such as content, custom blocks, and media. After selecting the required type, the administrator can choose the specific items that need to be exported.

When the export is submitted, Content Porter collects the selected content and its supported related entities, then generates a JSON export file. This JSON file can then be downloaded and used on another Drupal site.

On the destination site, administrators use the import page to upload the JSON file generated by Content Porter. The module reads the JSON data and creates the content on the destination site.

Recommended migration flow

For a successful migration, the destination site should have the same structure as the source site before importing content.

If the destination site does not already have the required content types, fields, paragraph types, media types, taxonomy vocabularies, or custom block types, use the Config Entity Exporter module first to migrate the required configuration.

Recommended flow:

  1. Install Config Entity Exporter on the source and destination sites.
  2. Use Config Entity Exporter to export the required configuration from the source site.
  3. Import the configuration on the destination site.
  4. Confirm that the destination site has the same content types, fields, paragraph types, media types, taxonomy vocabularies, and custom block types.
  5. Install Content Porter on both the source and destination sites.
  6. Use Content Porter on the source site to export the selected content as JSON.
  7. Use Content Porter on the destination site to import the JSON file.

This allows configuration to be migrated first, followed by content migration.

Important requirement

The destination Drupal site should already have the same structure as the source site before importing content.

This means the following should already exist on the destination site:

  • Same content types
  • Same field machine names
  • Same field types
  • Same paragraph types, if paragraph fields are used
  • Same media types, if media fields are used
  • Same taxonomy vocabularies, if taxonomy terms are used
  • Same custom block types, if custom blocks are used

Content Porter imports the content data into the existing structure. It does not replace Drupal configuration management and it does not automatically create missing content types, fields, or other configuration on the destination site.

Export process

To export content, go to:

Administration -> Content -> Content Porter -> Export content

The export process works as follows:

  1. Select the entity type to export, such as content, custom block, or media.
  2. Select the bundle or type, such as a content type, custom block type, or media type.
  3. Select the individual items that should be exported.
  4. Submit the export form.
  5. The module generates a JSON file containing the selected content data and supported related entity data.
  6. Download the JSON file.

The exported JSON file can then be used on another Drupal site where Content Porter is installed.

Import process

To import content, go to:

Administration -> Content -> Content Porter -> Import content

The import process works as follows:

  1. Install and enable Content Porter on the destination Drupal site.
  2. Make sure the destination site has the same content types, fields, media types, paragraph types, taxonomy vocabularies, and custom block types as the source site.
  3. Upload the JSON file exported from the source site.
  4. Submit the import form.
  5. The module reads the JSON file and creates the content on the destination site.

Supported content

Content Porter is designed to support exporting and importing content and related entities such as:

  • Nodes/content
  • Custom blocks
  • Media

Support depends on the field structure available on both the source and destination sites.

Additional Requirements

This module requires Drupal 10 or Drupal 11.

Required Drupal core modules:

  • Node
  • Taxonomy
  • Media
  • File
  • Block Content

Required contributed modules:

  • Paragraphs

Recommended companion module

Config Entity Exporter is recommended when the destination site does not already have the required structure.

Use Config Entity Exporter before Content Porter if you need to move configuration such as:

  • Content types
  • Fields
  • Paragraph types
  • Media types
  • Taxonomy vocabularies
  • Custom block types
  • View modes
  • Form displays

After the required configuration is available on the destination site, use Content Porter to move the actual content.

Similar projects

Drupal core provides configuration management for exporting and importing site configuration. Content Porter is different because it focuses on selected content export and import through an administrator interface.

Migration-focused modules can be used for larger migration workflows. Content Porter is intended for simpler selected-content movement between Drupal sites that already share the same structure.

Security note

Only trusted administrators should be allowed to use Content Porter.

The import feature creates content from an uploaded JSON file. Because of this, JSON files should only be imported from trusted sources. Do not allow untrusted users to upload or import Content Porter JSON files.

Activity

Tracked releases
2
Tracked since
May 2026
Latest release
2 months ago
Releases (12 mo)
2 ▲ from 0
Maintenance
Active

Releases

Version Type Release date
1.0.0 Stable May 27, 2026
1.0.x-dev Dev May 5, 2026