Move Content Between Environments
Transport packages the entries, assets, categories, and globals you choose into a portable .zip — then imports them into another Craft CMS site, resolving every reference by UID so nothing breaks when IDs differ.
$99 one-time license fee + $79/year for updates
Plugins & Field Types Supported
Transport handles every element and field out of the box for self-contained values, and adds dedicated handlers wherever a plugin embeds environment-local IDs — so your relations survive the trip. Handlers load only when the host plugin is installed.
Craft core
Supported & testedEntries, categories, tags, users, assets, addresses, globals
Matrix
Supported & testedNested entries serialized recursively
Relations
Supported & testedEntries, assets, categories, tags, users — IDs ↔ UIDs
Asset files
Supported & testedReal file bytes bundled and recreated in the target volume
Verbb Hyper
Supported & testedElement links made fully portable
FreeLink
Supported & testedRelations-backed link targets rewritten as UIDs
FreeNav
Supported & testedMenu-handle field values — portable as-is
Craft Commerce 5
Supported & testedProducts & variants (orders, inventory & pricing out of scope)
Google Maps
Supported & testedAddress fields; environment-specific owner keys stripped
SEOMatic
Supported & testedSEO, OG & Twitter image references made portable
Verbb Navigation
Supported & testedNodes migrate with element links, custom URLs & nesting
Formie
Supported & testedForm definitions and submissions (form resolved by handle)
Solspace Calendar
Supported & testedEvents with dates, recurrence rules & author
Neo
ExperimentalBlock-based field handler
Super Table
ExperimentalBlock-based field handler
Using a plugin that isn’t listed? Self-contained field values already work via the generic handler — and you can register your own element or field handlers without modifying Transport. See the extending guide →
How It Works
Export a portable package on one site, import it on another. Every reference is resolved by UID, so nothing breaks when IDs differ.
Export
Pick a site, the element types, optionally a section, and whether to bundle asset files. The export runs in the background; collect the .zip from History.
Configure
Review every element with its action — Add, Update, or Unchanged — and choose which to import. Pre-flight validation flags missing schema.
Preview
See field-level changes side by side. Uncheck any field to keep the target’s current value. Run a dry run first if you like.
Run
The import runs on the queue, so it can’t time out. You get a detailed report — and an email if you want one. Every import is snapshotted first, so a one-click rollback is always available.
Features
Everything you need to move content safely between Craft CMS environments.
Portable Packages
Every export is a .zip of human-readable JSON — a manifest.json plus per-type element files — with real asset files bundled alongside. Inspect it, version it, hand it off. It’s independent of any single environment.
UID-Based Identity
Relations, authors, parents, and Matrix/Hyper links are all stored as UIDs and resolved to local IDs on import. No fragile ID mapping, no broken references when the same content has different IDs on each site.
Recognizes Content You Already Have
The same page often exists on both environments with completely different UIDs — a single created independently on each, or content that predates Transport. Instead of duplicating it (or failing outright when Craft can’t make its URI unique), Transport recognizes it by its natural key — a single’s section, a slug within its section, an asset’s filename — and updates it. You see exactly what was matched before you run.
Automatic Dependency Ordering
A topological sort imports each element only after the elements it depends on — structure parents, authors, and relations — with cycle detection built in. You never have to think about import order.
Field-Level Diff & Selective Merge
Review each changed field side by side — current value vs. incoming — and accept or reject it individually before importing. Keep the target’s value on the fields you want to leave alone.
Asset File Transfer
Transport bundles the real files from any volume and recreates them in the target — not just the asset metadata. Or export metadata only when the files already live in the destination.
Multi-Site Support
Per-site title, slug, enabled status, and field values travel with the package, with optional site mapping so you can move content between sites that don’t share the same handles.
Never Times Out
Control panel exports and imports run on Craft’s queue, so the size of your content set stops being a constraint — no request timeouts, no half-finished imports, no babysitting a spinner. Queue it, walk away, and let Transport email you the report when it lands.
Reports That Tell You Everything
Every run records what happened to each element — added, updated, skipped, or failed — with the reason for every skip and failure, a breakdown per element type, and how long it took. Read it in the control panel, in your inbox, or streaming live in your terminal.
Snapshot-Based Rollback
Every import is snapshotted before it runs. If something looks wrong, roll it back with one click — updated elements return to their prior state and created elements are removed. Rollbacks are themselves reversible.
Full CLI
Script exports, imports, history, and rollbacks straight from the command line — perfect for CI pipelines and scheduled deployments. Console runs never queue: they work synchronously with a live progress bar and finish with the full report, so you can watch exactly what a deployment did.
Frequently Asked Questions
Common questions about Transport.
The $99 one-time fee gives you a single-site license for Transport, including every feature: portable .zip packages, UID-based reference resolution, automatic dependency ordering, field-level diff and selective merge, asset file transfer, multi-site support, queue-backed exports and imports with completion emails, detailed run reports, snapshot-based rollback, the full CLI, and all built-in plugin integrations. You also get one year of updates.
After the first year you can renew for $79/year to keep receiving updates and new features. If you choose not to renew, your installed version keeps working — you just won’t get updates.
No. Transport moves content, not schema. Sections, fields, entry types, volumes, and global sets are managed by Craft’s Project Config. Deploy your Project Config first, then use Transport for the content. Its pre-flight validation checks that the required schema already exists in the target before importing.
Every reference — relations, authors, structure parents, Matrix and Hyper links — is stored as a UID rather than a numeric ID. On import, Transport resolves each UID to the matching element’s local ID in the target site. That’s why content keeps working even when the same entry has a different ID on each site.
Transport works with any self-contained field out of the box, plus dedicated, tested handlers for Craft core element types, Matrix, relations, asset files, Verbb Hyper, FreeLink, FreeNav, Craft Commerce 5, Google Maps, SEOMatic, Verbb Navigation, Formie, and Solspace Calendar — with experimental handlers for Neo and Super Table. Handlers load only when the host plugin is installed. See the integrations guide for the full list and status of each.
Yes. Every import is snapshotted before it runs. From Transport → History you can roll back a completed import with one click — updated elements return to their prior state and elements the import created are deleted. Rollbacks are themselves snapshot-protected, so they can be undone too.
Yes. Transport has a full CLI for exports, imports (including dry runs), history, and rollbacks — ideal for CI pipelines and scheduled deployments. Anything the control panel can do, the CLI can do.
Products and variants are supported and tested — product type, SKU, base price, dimensions, tax and shipping categories, and custom fields. Orders, inventory levels, and catalog pricing are intentionally excluded — that data is environment-specific and shouldn’t be copied between sites.
No. Control panel exports and imports run as queue jobs rather than in the request, so the size of your content set isn’t a constraint — queue it, leave the page, and pick up the finished package or report in Transport → History. Tick “email me when it finishes” and it comes to your inbox instead. Console runs are synchronous by design, streaming live progress to the terminal so you can watch a deployment work.
Transport updates it rather than adding a second copy. Content routinely exists on two sites with unrelated UIDs — a single created independently on each, or content that predates Transport — so when a package element’s UID isn’t found, Transport matches the element that already exists by its natural key: a single’s section, a slug within its section or group, an asset’s filename in its folder, a user’s email. Matched elements are flagged in the import wizard before you run, and you can switch the behavior off for strict UID-only identity.
A detailed report of every element — added, updated, skipped, or failed — with the reason behind each skip and failure, a breakdown per element type, and how long it took. It’s stored with the run in Transport → History, printed at the end of every CLI run, and emailed to whoever started a queued run.
Transport requires Craft CMS 5.3 or later, PHP 8.2 or later, and the PHP ext-zip extension. It supports both MySQL and PostgreSQL databases.
Ready to ship content with confidence?
Get Transport for your Craft CMS project today.
$99 one-time license · $79/year for updates