doublethreedigital/duplicator
Duplicator is a Laravel package for duplicating Eloquent models in a single line. Clone records along with their relationships, customise which attributes and relations get copied, and keep data consistent when recreating entries, templates, or drafts without repetitive code.
composer require doublethreedigital/duplicator — Statamic addons are auto-discovered through the extra.statamic block in the package's composer.json, so no manual provider registration is normally needed on Statamic 3/4."doublethreedigital/duplicator": "4.0.1" rather than a caret range. v4.0.1 is the last release (2023-05-10) and is the version that restores PHP 8.1 support — if you're still on PHP 8.1, you must be on 4.0.1 exactly, because earlier 4.x builds required a newer PHP.php artisan vendor:publish --tag=duplicator-config (verify the tag in the package's README; tags differ between addons). Skip this if you're fine with the default "all supported collections" behavior.php artisan statamic:stache:clear and php artisan cache:clear. Statamic's Stache caches collection/tree metadata and a stale cache is the most common reason a new CP action is invisible.…) menu → look for Duplicate.Because the package is archived (last release 2023-05-10) and the only post-archival maintenance has been a PHP 8.1 compatibility fix, treat the first install as a spike: confirm it works with your pinned Statamic/PHP versions before rolling it out to a team.
Template-based content authoring. Keep one canonical "page template" per layout in a dedicated collection (or hidden from navigation). Editors duplicate it, rename, and fill in copy. This is the workflow the addon is designed for and the one that saves the most time.
Iteration on published content. Duplicate a live entry, make changes in the copy, then swap statuses. Use the duplicate as a staging draft so the live page is never edited in place. Pair this with Statamic's revisions for auditability.
Seasonal / campaign variants. Duplicate last quarter's landing page, update dates and copy, publish. Because field values (including Replicator/Grid structures) are copied, campaign pages that differ only in text are a few clicks instead of a rebuild.
Scoping the action to the right collections. Restrict duplication to collections where a shallow copy makes sense (pages, editorial entries, banners). Disable it for collections heavy in entries/assets relationships or singleton-style config, where a duplicate will silently point at the original's relations.
Structured collections. Duplicates in tree-enabled collections typically land as siblings or at the root depending on the version — after duplicating, drag the new page into position in the tree. Expect to do this manually rather than relying on inherited parentage.
Permission gating. Because the action maps to Statamic's Action API, it respects the user's create permission on the underlying collection. Use this to expose duplication to editors but not to restricted roles. Test with a non-super user before relying on it.
Complement with programmatic duplication. If you need scheduled, bulk, or API-driven duplication, don't try to trigger the CP action — write an Artisan command using Statamic's Entry API (Entry::make() plus copying data()) inside your own app code. The addon is CP-only by design.
Multisite. Verify whether a duplicate is created in the current site only or propagated to all sites. If per-site, use duplication for site-local variants; if propagated, be careful about which site's content you're editing afterwards.
composer.json (e.g. "doublethreedigital/duplicator": "4.0.1"), not a caret range, so a future Composer resolve can't surprise you. Check the addon's composer.json for a Statamic constraint that blocks a Statamic 5 upgrade before you plan one.composer install on the platform check; don't "downgrade to fix a bug" without re-checking your PHP constraint. Conversely, this release changes nothing at the PHP 8.2+/8.3 level — no API, config, or behavior changes to test against.original-1). If your project stores redirects, sitemap entries, or cross-links by slug, update them or you'll ship a duplicate that's orphaned from your navigation.entries/assets/terms fields still reference the originals. If your duplicate needs independent relations, plan to re-pick them manually.Action, the cleanest long-term path — given the package is archived — is to copy the action class into app/Actions/** and register it as your own. That gives you control over slug format, default status, and auto-populated fields without carrying an unmaintained dependency.How can I help you explore Laravel packages today?