Install
Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/kamilskicki/safemigrate/releases/download/v1.0.0/safe-migrate-1.0.0.zipReliable WordPress migrations and restores with preflight diagnostics, checkpointed execution, snapshot-backed rollback, and aligned admin, REST, and WP-CLI workflows.
What It Does
- Runs preflight checks before export or restore
- Builds export artifacts with manifests, checksums, SQL segments, and file chunks
- Validates and previews restores before destructive execution
- Creates a mandatory snapshot before destructive restore and supports rollback/resume
- Pulls packages from a remote Safe Migrate source via one-time transfer tokens
- Exports support bundles with checkpoints, logs, and compatibility context
Project Layout
safe-migrate.php: WordPress plugin bootstrapsrc/: plugin runtime codeassets/: admin UI assetstests/: PHPUnit coveragescripts/build-release.ps1: builds the distributable plugin ZIPscripts/run-e2e.ps1: runs the Docker e2e helper against the local dev environment
Local Development
Requirements:
- PHP 8.2+
- Composer
- A local WordPress environment
Install dependencies:
composer install
Run automated checks:
composer lint
composer test
composer ci
Docker Validation Flow
The repository includes helper scripts for a paired local Docker environment.
Typical workflow:
$env:SAFE_MIGRATE_COMPOSE_DIR='D:\path\to\your\wordpress-environment'
.\scripts\sync-local-env.ps1
.\scripts\run-e2e.ps1
.\scripts\run-e2e.ps1 -Destructive
.\scripts\run-e2e.ps1 -Destructive -RollbackAfter
If the target WordPress stack contains unrelated plugins that break WP-CLI, run Safe Migrate smoke checks with those plugins skipped so failures can be attributed correctly.
Release Packaging
Build the plugin ZIP:
.\scripts\build-release.ps1
The release archive is written into dist/ and includes only plugin runtime files needed for distribution.
Documentation
License
GPL-2.0-or-later. See LICENSE.
Releases
1 release. Each count is every asset in that release; expand a row for the breakdown.