Drupal is a registered trademark of Dries Buytaert
drupal 11.3.6 Update released for Drupal core (11.3.6)! drupal 10.6.6 Update released for Drupal core (10.6.6)! cms 2.1.0 Update released for Drupal core (2.1.0)! bootstrap 8.x-3.40 Minor update available for theme bootstrap (8.x-3.40). menu_link_attributes 8.x-1.7 Minor update available for module menu_link_attributes (8.x-1.7). editoria11y 2.2.22 Minor update available for module editoria11y (2.2.22). ai 1.2.13 Minor update available for module ai (1.2.13). ai 1.3.2 Minor update available for module ai (1.3.2). moderated_content_bulk_publish 2.0.51 Minor update available for module moderated_content_bulk_publish (2.0.51). moderated_content_bulk_publish 2.0.50 Minor update available for module moderated_content_bulk_publish (2.0.50). editoria11y 2.2.21 Minor update available for module editoria11y (2.2.21). eca 3.1.0 Minor update available for module eca (3.1.0). sophron 3.1.1 Minor update available for module sophron (3.1.1). ai 1.3.1 Minor update available for module ai (1.3.1). seven 2.0.0-beta6 New beta version released for theme seven (2.0.0-beta6). seven 1.0.1-beta1 First beta version released for theme seven (1.0.1-beta1). swiper_formatter 3.0.1 Minor update available for module swiper_formatter (3.0.1). ui_patterns 8.x-1.15 Minor update available for module ui_patterns (8.x-1.15). layout_paragraphs 3.0.0-beta1 First beta version released for module layout_paragraphs (3.0.0-beta1). raven 7.3.8 Minor update available for module raven (7.3.8).

When you import or update content with Migrate, Drupal usually writes to the default revision (what visitors see as published). On sites using workflows and content moderation, editors often save a newer draft revision that is not the default—a “forward” draft. If that draft is ahead of the live revision, a migration rerun can leave the published node correct while the draft still has outdated values for fields the migration owns, or create confusing revision history. Migrate Forward Draft provides a migrate destination plugin that, on update, captures that forward draft before the migration saves, updates the default revision from your migration, then saves a new non-default revision that carries the editor’s work forward. You can overlay selected fields from the freshly imported default onto that replayed draft so drafts stay aligned with your source where you want that.

Features

Basic functionality: A Migrate destination that is aware of “forward” (newer non-default) draft revisions and replays them after the default revision is updated by an import.

Unique behavior:

  • Forward-draft detection before the migration updates the entity.
  • Replay as a new non-default revision after the default is updated, so moderation and revision workflows stay meaningful.
  • forward_revision_overwrite_properties—choose which properties (often fields) to copy from the new default onto the replayed draft (e.g. migration-owned titles or IDs) while other draft values stay editor-owned.
  • migration_sync (default matches core)—controls setSyncing(TRUE) on the main migrate save; the forward-draft replay save does not use syncing, which matters for content moderation and custom subscribers.
  • Derivative plugins such as entity_with_forward_draft:node (and other supported entity types), similar in spirit to core entity destinations.

When and why to use it: External feeds or APIs own metadata on nodes (or similar entities) while editors enrich the same content in draft; reruns must refresh published data without stranding drafts with stale migrated values or losing editorial work.

Post-installation

There is no configuration page. After enabling the module:

  1. Open your migration configuration (YAML or exported config).
  2. Set the destination to entity_with_forward_draft:node (or the appropriate derivative for your entity type).
  3. Keep your usual destination settings for updating the default revision (e.g. overwrite_properties).
  4. Add forward_revision_overwrite_properties with property names to copy from the new default onto the replayed draft, or omit/leave empty if you only need the draft replayed without copying from default.
  5. Optionally set migration_sync to true or false so the main migrate save matches how your site’s code expects syncing to behave.

Rebuild caches if needed. Test on a copy of production data that includes real forward drafts before using in production.

Additional requirements

  • Drupal core with the Migrate module (migrate) enabled—required dependency.
  • Content moderation is not a package dependency; the module is most useful when the site uses revisions and non-default drafts. Only revisionable, fieldable entity types are targeted (same general idea as core revision-related migrate plugins).
  • Content Moderation (core) when drafts ahead of published content are part of your workflow.
  • Migrate Plus and related tools if you manage many migrations or need extra plugins—this module only changes the destination behavior.

Similar projects

Core entity:node and similar entity:* destinations update the default revision and do not implement forward-draft capture and replay. Core entity_revision and revision import patterns solve different problems. Migrate Forward Draft is aimed at reruns that refresh the published revision while keeping forward drafts coherent, with optional per-property sync from default to draft.

Supporting this module

Issue queue contributions, patches, and feedback help improve the module. There is no required commercial support channel to use it.

Community documentation

See the project README for YAML examples and detailed behavior. Add links here over time to blog posts, videos, DrupalPod demos, or external docs as the community publishes them.

An optional demo submodule may be included with sample migrations—enable only on non-production environments to try the destination in isolation.

Activity

Total releases
1
First release
Apr 2026
Latest release
23 hours ago
Release cadence
Stability
100% stable

Releases

Version Type Release date
1.0.0 Stable Apr 9, 2026