PHPackages                             justinholtweb/craft-transport - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. justinholtweb/craft-transport

ActiveCraft-plugin[Utility &amp; Helpers](/categories/utility)

justinholtweb/craft-transport
=============================

Safely migrate content between Craft CMS environments with automatic dependency resolution, field-level conflict review, and snapshot-based rollback.

00PHP

Since Jun 27Pushed todayCompare

[ Source](https://github.com/justinholtweb/craft-transport)[ Packagist](https://packagist.org/packages/justinholtweb/craft-transport)[ RSS](/packages/justinholtweb-craft-transport/feed)WikiDiscussions main Synced today

READMEChangelog (2)DependenciesVersions (1)Used By (0)

Transport
=========

[](#transport)

Safely migrate content between Craft CMS 5 environments — with automatic dependency resolution, field-level conflict review, asset transfer, multi-site support, and snapshot-based rollback.

Transport exports the content you choose into a portable, inspectable `.zip` package and imports it into another environment, resolving every reference by UID so nothing breaks when IDs differ between sites.

Features
--------

[](#features)

- **Portable packages** — a `.zip` of JSON (`manifest.json` + per-type element files) plus bundled asset files. Human-readable and version-independent.
- **UID-based identity** — references (relations, authors, parents, Matrix/Hyper links) are stored as UIDs and resolved to local IDs on import. No fragile ID mapping.
- **Automatic dependency ordering** — a topological sort imports each element after the elements it depends on (structure parents, authors, relations), with cycle detection.
- **Field-level diff &amp; selective merge** — review each changed field side by side and accept or reject it individually before importing.
- **Asset file transfer** — bundles real files from any volume and recreates them in the target.
- **Multi-site** — per-site title/slug/enabled/field values, with optional site mapping.
- **Snapshot-based rollback** — every import is snapshotted first; roll it back with one click. Rollbacks are themselves reversible.
- **CLI** — script exports, imports, history, and rollbacks.
- **Extensible** — register handlers for custom element and field types. Built-in conditional support for Commerce, Verbb Hyper, Neo, and Super Table.

Requirements
------------

[](#requirements)

- Craft CMS 5.3+
- PHP 8.2+
- `ext-zip`

Installation
------------

[](#installation)

```
composer require justinholtweb/craft-transport
php craft plugin/install transport
```

Exporting
---------

[](#exporting)

**Control panel:** *Transport → Export*. Choose the site, the element types to include, optionally a section, and whether to bundle asset files. Submit to download the package.

**CLI:**

```
craft transport/export --types=entries,categories,assets --site=default --output=content.zip
craft transport/export --section=blog --output=blog.zip
craft transport/export --all --output=everything.zip
```

Importing
---------

[](#importing)

**Control panel:** *Transport → Import* runs a four-step wizard:

1. **Upload** the package.
2. **Configure** — review every element with its action (Add / Update / Unchanged) and select which to import. Pre-flight validation flags missing sections, entry types, groups, or volumes.
3. **Preview** — see field-level changes (current vs. incoming) and uncheck any field to keep the target's current value. Optionally run as a dry run or in the background.
4. **Run** — import and review the results.

**CLI:**

```
craft transport/import content.zip --dry-run   # simulate, report what would change
craft transport/import content.zip             # import
```

History &amp; rollback
----------------------

[](#history--rollback)

*Transport → History* lists every import and export. Open an import to see its details and error log. Completed imports can be **rolled back** with one click — Transport restores updated elements to their prior state and deletes elements the import created. Rollbacks are snapshot-protected, so they can be undone too.

```
craft transport/history
craft transport/rollback 42
```

Settings
--------

[](#settings)

- **Temp path** — where packages are staged (`@storage/transport` by default).
- **Max package size** — upload limit for import.
- **Include asset files** — bundle files by default, or export metadata only.
- **Snapshot retention** — how long / how many import snapshots to keep.
- **Log level** — verbosity of `storage/logs/transport.log`.

What Transport does not do
--------------------------

[](#what-transport-does-not-do)

Transport moves **content**, not **schema**. Sections, fields, entry types, volumes, and global sets are managed by Craft's Project Config. Transport's pre-flight validation checks that the required schema already exists in the target before importing.

Orders and other transactional Commerce data are intentionally excluded.

Extending
---------

[](#extending)

See [docs/EXTENDING.md](docs/EXTENDING.md) for registering custom element and field handlers via `EVENT_REGISTER_ELEMENT_HANDLERS` and `EVENT_REGISTER_FIELD_HANDLERS`.

Troubleshooting
---------------

[](#troubleshooting)

- **"Missing section / entry type / group / volume"** — the target is missing schema the package needs. Deploy your Project Config first, then import.
- **A field didn't import** — unsupported field types are skipped with a warning in `storage/logs/transport.log` rather than failing the whole import.
- **An import went wrong** — roll it back from *Transport → History*.

License
-------

[](#license)

Proprietary (Craft License). A valid license must be purchased through the Craft Plugin Store for each production install.

###  Health Score

20

—

LowBetter than 13% of packages

Maintenance65

Regular maintenance activity

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity11

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/035cb655c55af0e9e5b96754b80fd9703e195c32dbdfc49ae9a43ab9cf8db560?d=identicon)[justinholtweb](/maintainers/justinholtweb)

---

Top Contributors

[![justinholtweb](https://avatars.githubusercontent.com/u/295903?v=4)](https://github.com/justinholtweb "justinholtweb (5 commits)")

### Embed Badge

![Health badge](/badges/justinholtweb-craft-transport/health.svg)

```
[![Health](https://phpackages.com/badges/justinholtweb-craft-transport/health.svg)](https://phpackages.com/packages/justinholtweb-craft-transport)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
