{"id":397073,"date":"2026-11-04T10:37:02","date_gmt":"2026-11-04T10:37:02","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/panelalpha-migrator\/"},"modified":"2026-11-04T10:36:24","modified_gmt":"2026-11-04T10:36:24","slug":"panelalpha-migrator","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/panelalpha-migrator\/","author":23269685,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.2","stable_tag":"1.2.2","tested":"7.1.4","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"PanelAlpha Migrator","header_author":"PanelAlpha","header_description":"A simple migration plugin for moving WordPress websites to PanelAlpha servers. Easily transfer your site files and database from your current hosting provider.","assets_banners_color":"345d50","last_updated":"2026-11-04 10:36:24","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/panelalpha.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":123,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.2":{"tag":"1.2.2","author":"damianwilusz","date":"2026-11-04 10:36:24","revision":3783671}},"upgrade_notice":{"1.2.2":"<p>Works with 1.2.1 on the other site. A migration running during the update keeps its lock.<\/p>","1.2.1":"<p>Both sites of a migration must run 1.2.1. Older versions do not work with it.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3783671,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3783671,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3783671,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3783671,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3783671,"resolution":"1","location":"assets","locale":"","width":1280,"height":512},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3783671,"resolution":"2","location":"assets","locale":"","width":1280,"height":428},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3783671,"resolution":"3","location":"assets","locale":"","width":1280,"height":813},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3783671,"resolution":"4","location":"assets","locale":"","width":1280,"height":470},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3783671,"resolution":"5","location":"assets","locale":"","width":1280,"height":780},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3783671,"resolution":"6","location":"assets","locale":"","width":1280,"height":710}},"screenshots":{"1":"On the new site: copy the address with its token.","2":"On the old site: paste the address and start the migration.","3":"Advanced Options: move to a server before the domain points at it, and leave out files you do not need.","4":"The migration in progress. Files travel in small pieces, so large sites are fine.","5":"The browser closed halfway. Click Resume Backup to continue from where it stopped.","6":"Done. The summary shows how many files and tables were copied and how long it took."}},"plugin_section":[],"plugin_tags":[2814,4151,4155,58759,10745],"plugin_category":[59],"plugin_contributors":[290672],"plugin_business_model":[],"class_list":["post-397073","plugin","type-plugin","status-publish","hentry","plugin_tags-clone","plugin_tags-migrate","plugin_tags-migration","plugin_tags-move-site","plugin_tags-transfer","plugin_category-utilities-and-tools","plugin_contributors-damianwilusz","plugin_committers-damianwilusz"],"banners":{"banner":"https:\/\/ps.w.org\/panelalpha-migrator\/assets\/banner-772x250.png?rev=3783671","banner_2x":"https:\/\/ps.w.org\/panelalpha-migrator\/assets\/banner-1544x500.png?rev=3783671","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/panelalpha-migrator\/assets\/icon-128x128.png?rev=3783671","icon_2x":"https:\/\/ps.w.org\/panelalpha-migrator\/assets\/icon-256x256.png?rev=3783671","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/panelalpha-migrator\/assets\/screenshot-1.png?rev=3783671","caption":"On the new site: copy the address with its token."},{"src":"https:\/\/ps.w.org\/panelalpha-migrator\/assets\/screenshot-2.png?rev=3783671","caption":"On the old site: paste the address and start the migration."},{"src":"https:\/\/ps.w.org\/panelalpha-migrator\/assets\/screenshot-3.png?rev=3783671","caption":"Advanced Options: move to a server before the domain points at it, and leave out files you do not need."},{"src":"https:\/\/ps.w.org\/panelalpha-migrator\/assets\/screenshot-4.png?rev=3783671","caption":"The migration in progress. Files travel in small pieces, so large sites are fine."},{"src":"https:\/\/ps.w.org\/panelalpha-migrator\/assets\/screenshot-5.png?rev=3783671","caption":"The browser closed halfway. Click Resume Backup to continue from where it stopped."},{"src":"https:\/\/ps.w.org\/panelalpha-migrator\/assets\/screenshot-6.png?rev=3783671","caption":"Done. The summary shows how many files and tables were copied and how long it took."}],"raw_content":"<!--section=description-->\n<p>Moving a WordPress site by hand means downloading files, exporting the database, uploading it all again and fixing links to the old address. PanelAlpha Migrator does this for you from the WordPress dashboard. You install it on your old site and on the new one, copy one address, paste it, and click Start Migration.<\/p>\n\n<p>Everything comes along: pages, posts, images, themes, plugins, settings and user accounts. Links that point to the old address are changed to the new one while the site is copied, even inside saved plugin settings.<\/p>\n\n<p>The plugin was made for moving sites to servers that run PanelAlpha, and PanelAlpha uses the same plugin when it moves a site for you. You can use it to move a site to any other WordPress site as well.<\/p>\n\n<h4>How to Move Your Site<\/h4>\n\n<ol>\n<li>Install and activate PanelAlpha Migrator on both sites: your old site (the source) and the new WordPress you are moving to (the destination).<\/li>\n<li>On the new site, open Migrator in the dashboard menu, click the download icon (Destination) and copy the address.<\/li>\n<li>On the old site, open Migrator, paste the address and click Start Migration.<\/li>\n<li>Keep the tab open until it says the migration is complete. Then log in to the new site with the username and password from your old site.<\/li>\n<\/ol>\n\n<h4>Large Sites Are Fine<\/h4>\n\n<p>Your site travels in small pieces, and each piece is checked when it arrives. Big sites do not hit upload size or time limits on your host. If the browser closes or the connection drops halfway, open Migrator again and continue from where it stopped. Nothing is sent twice.<\/p>\n\n<h4>Move First, Switch the Domain Later<\/h4>\n\n<p>You can copy the site to the new server while your domain still points at the old one. Enter the new server's IP address under Advanced Options (the gear icon). The new site is then ready before you change DNS.<\/p>\n\n<h4>What Gets Copied<\/h4>\n\n<ul>\n<li>Every table in the old site's database, including users and settings.<\/li>\n<li>Every file in the site folder: uploads, themes, plugins and hidden files, with their permissions and dates.<\/li>\n<\/ul>\n\n<h4>What Stays on the New Site<\/h4>\n\n<ul>\n<li><code>wp-config.php<\/code>, so the new site stays connected to its own database.<\/li>\n<li>The <code>.htaccess<\/code> file in the site folder. Copy your own redirects over by hand.<\/li>\n<li>The migrator plugin and its own token.<\/li>\n<li><p>Tables that exist only on the new site.<\/p>\n\n<p>node_modules, <code>.git<\/code> and <code>.svn<\/code> folders are never copied. You can leave out more files under Advanced Options.<\/p><\/li>\n<\/ul>\n\n<h4>Before You Start<\/h4>\n\n<p>The migration replaces the new site's content with the old site's. Each table that the old site has is deleted on the new site and created again from the old site, and files with the same path are overwritten. If the new site holds anything you want to keep, back it up first.<\/p>\n\n<p>Treat the address you copy like a password. While the plugin is active, anyone who has it can write to the new site. When you are happy with the result, deactivate and delete the plugin on both sites.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin sends data to another WordPress site, and only while a migration runs.<\/p>\n\n<ul>\n<li>What is sent: the site's files and its full database, including user accounts and settings.<\/li>\n<li>Where it is sent: the destination WordPress site whose address you paste on the Migrator page, or that PanelAlpha sets for the migration. This is a site that you or your PanelAlpha host control, usually a server managed through PanelAlpha.<\/li>\n<li>When: only while a migration started by an administrator or by PanelAlpha is running. The plugin sends nothing when no migration is running.<\/li>\n<\/ul>\n\n<p>The plugin does not send data to PanelAlpha servers otherwise. It makes no other outbound requests.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>In WordPress, open Plugins &gt; Add New Plugin, search for PanelAlpha Migrator, then click Install Now and Activate. You can also upload the plugin zip under Plugins &gt; Add New Plugin &gt; Upload Plugin.<\/li>\n<li>Do this on both sites, the old one (source) and the new one (destination).<\/li>\n<li>A Migrator item appears in the dashboard menu. Only administrators see it.<\/li>\n<li>On the new site, open Migrator, click the download icon (Destination) and copy the address.<\/li>\n<li>On the old site, open Migrator, paste the address and click Start Migration.<\/li>\n<\/ol>\n\n<p>You need an administrator login on both sites, PHP 7.4 or newer with the cURL extension, and WordPress must be able to write to <code>wp-content<\/code> on both sites.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20ftp%20or%20database%20access%3F\"><h3>Do I need FTP or database access?<\/h3><\/dt>\n<dd><p>No. Everything happens in the WordPress dashboard. You only need an administrator login on both sites.<\/p><\/dd>\n<dt id=\"will%20it%20overwrite%20what%20is%20already%20on%20the%20destination%3F\"><h3>Will it overwrite what is already on the destination?<\/h3><\/dt>\n<dd><p>Yes. Every table the source has is recreated on the destination, and files with the same path are overwritten. Tables and files that exist only on the destination are left alone. Back up the destination first if it holds anything you want to keep.<\/p><\/dd>\n<dt id=\"can%20i%20migrate%20before%20the%20domain%20points%20at%20the%20new%20server%3F\"><h3>Can I migrate before the domain points at the new server?<\/h3><\/dt>\n<dd><p>Yes. Enter the new server's IP address in Destination IP Address (Optional) and paste the address with the final domain. The plugin connects to that IP address and the migrated site gets the final domain. If the new server has no valid HTTPS certificate for the domain yet, tick the box under the IP field that says not to verify the HTTPS certificate.<\/p><\/dd>\n<dt id=\"my%20browser%20closed%20halfway.%20do%20i%20start%20again%3F\"><h3>My browser closed halfway. Do I start again?<\/h3><\/dt>\n<dd><p>No. Open Migrator on the source in the same browser and click Resume Backup under Interrupted Migration Detected. What was already sent is not sent again.<\/p><\/dd>\n<dt id=\"which%20login%20works%20on%20the%20destination%20afterwards%3F\"><h3>Which login works on the destination afterwards?<\/h3><\/dt>\n<dd><p>The source site's. The user accounts are part of the database, so they are copied with it.<\/p><\/dd>\n<dt id=\"what%20about%20my%20redirects%20in%20.htaccess%3F\"><h3>What about my redirects in .htaccess?<\/h3><\/dt>\n<dd><p>The dashboard never copies the main <code>.htaccess<\/code>, so the destination keeps its own. Copy your own lines over by hand.<\/p><\/dd>\n<dt id=\"should%20i%20keep%20the%20plugin%20installed%20afterwards%3F\"><h3>Should I keep the plugin installed afterwards?<\/h3><\/dt>\n<dd><p>No. While it is active, the destination accepts writes from anyone with its address and token. Deactivate and delete it on both sites once you are happy with the result. Deleting the plugin from the dashboard also removes its settings, its token, its temporary tables and its files in wp-content\/migrations.<\/p><\/dd>\n<dt id=\"can%20the%20destination%20be%20on%20the%20same%20server%20or%20a%20private%20network%3F\"><h3>Can the destination be on the same server or a private network?<\/h3><\/dt>\n<dd><p>By default the source refuses a destination on its own server or on a private network. If you really want this, list the host name or IP address in <code>allowed_destinations<\/code> in the one-time setup file <code>wp-content\/panelalpha-migrator-setup.php<\/code> on the source.<\/p><\/dd>\n<dt id=\"does%20a%20plugin%20update%20lose%20the%20token%3F\"><h3>Does a plugin update lose the token?<\/h3><\/dt>\n<dd><p>No. The token and the settings are stored in the WordPress database, not in the plugin folder.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>The migration lock is a plain JSON file in <code>wp-content\/migrations\/<\/code>. The plugin no longer writes PHP files to <code>wp-content<\/code>.<\/li>\n<li>The token of a migration is kept only in the WordPress database.<\/li>\n<li>The site address comes from WordPress, not from the request's Host header.<\/li>\n<li>Debug messages go to the PHP error log only when <code>WP_DEBUG<\/code> is on.<\/li>\n<li>Updated the Symfony polyfill packages.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>New name and slug: PanelAlpha Migrator, <code>panelalpha-migrator<\/code>. Requires WordPress 6.2.<\/li>\n<li>The destination receives the migration through the WordPress REST API, protected by its token. The separate receive script is removed.<\/li>\n<li>The destination keeps working during a migration: tables are imported into temporary tables and swapped in one step at the end, and PHP files move into place at the end. A failed swap is rolled back.<\/li>\n<li>The source checks that the destination answers and accepts the token before it sends anything.<\/li>\n<li>Abandoned migrations are cleaned up after 48 hours.<\/li>\n<li>The site token and the settings are now stored in the WordPress database. <code>config.php<\/code> is removed. A plugin update no longer loses the token.<\/li>\n<li>The destination keeps its own token and settings after a migration.<\/li>\n<li>New one-time setup file <code>wp-content\/panelalpha-migrator-setup.php<\/code> to preset the token and settings. It also sets <code>allowed_destinations<\/code>.<\/li>\n<li>New <code>uninstall.php<\/code>: deleting the plugin removes its options, temporary tables, backups of old tables and its files in <code>wp-content\/migrations\/<\/code>.<\/li>\n<li>Requests to the destination use the WordPress HTTP API.<\/li>\n<li>Admin texts can be translated (text domain <code>panelalpha-migrator<\/code>).<\/li>\n<li>Removed unused code and packages.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Every migration endpoint now asks for an administrator or the site's token.<\/li>\n<li>A migration reports success only after the destination has confirmed every piece.<\/li>\n<li>Destinations on the same server or on a private network are refused unless listed as allowed.<\/li>\n<li>The destination address is checked once and then pinned. The HTTPS certificate is checked.<\/li>\n<li>Files and tables are kept inside their folders. No database password is written to disk.<\/li>\n<li>Skipped files no longer stop a migration. A warning shows the count.<\/li>\n<li>One migration runs at a time. An abandoned one stops blocking after 15 minutes.<\/li>\n<li>PHP 7.4 to 8.5 supported.<\/li>\n<\/ul>\n\n<h4>1.1.4<\/h4>\n\n<ul>\n<li>Migrate to a destination with a different table prefix.<\/li>\n<li>The destination refuses any file path that leaves the WordPress folder.<\/li>\n<\/ul>\n\n<h4>1.1.0 - 1.1.3<\/h4>\n\n<ul>\n<li>Migrate to a server whose domain is not live yet, with a destination IP address.<\/li>\n<li>Support for WP Cloud and Bitnami layouts, and for binary data in the database.<\/li>\n<li>Older and unusual tables restore on strict MariaDB and MySQL servers.<\/li>\n<li>Tables restore in any order.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First version: migrate a site from the dashboard or over the API, with stop and resume.<\/li>\n<\/ul>","raw_excerpt":"Move your WordPress site to a new host in a few clicks. Pages, images, themes, plugins, settings and user accounts all come along.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/397073","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=397073"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/damianwilusz"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=397073"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=397073"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=397073"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=397073"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=397073"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=397073"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}