Introducing Entity Pilot - Painless content staging for Drupal

After nine months of development, we're proud to announce Entity Pilot, a painless content-staging solution for Drupal.

Offering a flexible content deployment model that adapts your preferred workflow, Entity Pilot aims to solve deploying content once and for all.

Read on for details on how it works and our plans for future development.

Who is behind Entity Pilot?

Entity Pilot is the brain-child of long-term Drupal contributor Lee Rowlands (larowlan). Drawing on his six-years of experience building and developing sites with Drupal, Entity Pilot builds on real-world pain points encountered with content-deployment. Pain points from both a developer's perspective but also from the perspective of the many clients, of varied backgrounds and sizes, that he has worked with during this time.

Painless content staging for Drupal - how it works

Entity Pilot makes the most of improvements in Drupal 8's Entity Field API and the new core serializer module.

Content is grouped together into logical flights, but can be sent as individual items if you have enough capacity in your plan.

Dependencies are auto-detected and added as baggage, ensuring each flight is a distinct group of self-contained entities.

On another site, you setup your Entity Pilot account and then create a new Arrival. This presents you with the list of your flights that exist in Entity Pilot for your account. After selecting the flight for the arrival, you move to the approval stage.

The approval stage presents you with a list of content on the incoming flight. Each item can be previewed and if it matches existing content on the site (see dealing with conflicts the administrator is able to view a diff of the changes.

Finally, the desired items to import are selected and imported either immediately, or via background processing.


As a member of the Drupal security team, Lee has ensured security is baked into the system. Sending your content to a third party opens up all kinds of questions about data integrity and privacy. This is where encryption comes in. The data sent to Entity Pilot cannot be read by Entity Pilot. At all. The only information in each Flight that can be read by Entity Pilot is the account ID (termed the carrier ID) and the flight description. Before the content leaves your site it is encrypted with your personal encryption key. Entity Pilot doesn't know your key, and doesn't want to. On any of your sites where you want to import content, you simply need to add your encryption key and then it can decrypt the content sent back from Entity Pilot.

Community contributions

One of the first features required for Entity Pilot was the ability to nominate the entities to send on the flight. The existing Entity Reference field provided by core was not flexible enough, as it only allows referencing a single entity type for each field. As Entity Pilot allows sending content entities of any type, this would be unpractical - requiring one field for each entity type found in core. To address this the Dynamic Entity Reference module was developed and contributed to This module was well received and several well-respected community members have also come on board as co-maintainers, as this module has generic use-cases outside Entity Pilot.

What about Drupal 7?

A Drupal 7 backport is well underway, Dynamic Entity Reference has already been backported and work is underway to refactor the Entity Field API and serializer code to use the Drupal 7 Entity API and Rest WS modules respectively. Both of these formed the basis of the work in Drupal 8 core - and although the code between Drupal 8 and Drupal 7 varies greatly, the backport has proved promising so far.