{"id":376309,"date":"2026-10-11T17:01:48","date_gmt":"2026-10-11T17:01:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/migrato\/"},"modified":"2026-10-11T17:01:38","modified_gmt":"2026-10-11T17:01:38","slug":"transit-site-migration","status":"publish","type":"plugin","link":"https:\/\/kea.wordpress.org\/plugins\/transit-site-migration\/","author":20628027,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.3","requires":"5.6","requires_php":"7.4","requires_plugins":null,"header_name":"Transit - Site Migration & Backup","header_author":"devmizan","header_description":"Move or back up a whole WordPress site \u2014 database, media, plugins and themes \u2014 in a single file. Handles sites of any size.","assets_banners_color":"3d5599","last_updated":"2026-10-11 17:01:38","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/profiles.wordpress.org\/devmizan\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":64,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"devmizan","date":"2026-10-11 17:01:38","revision":3739832}},"upgrade_notice":{"1.0.0":"<p>First public release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3739868,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3739868,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3739868,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3739868,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Export: one click creates a backup of the whole site, with live progress.","2":"Import: drop a .tsmig file \u2014 server checks run before anything is changed.","3":"Import progress: database, files and final clean-up.","4":"Backups: download, re-import or delete stored backups."}},"plugin_section":[],"plugin_tags":[151,2814,4151,4155,152],"plugin_category":[59],"plugin_contributors":[236368],"plugin_business_model":[],"class_list":["post-376309","plugin","type-plugin","status-publish","hentry","plugin_tags-backup","plugin_tags-clone","plugin_tags-migrate","plugin_tags-migration","plugin_tags-restore","plugin_category-utilities-and-tools","plugin_contributors-devmizan","plugin_committers-devmizan"],"banners":{"banner":"https:\/\/ps.w.org\/transit-site-migration\/assets\/banner-772x250.png?rev=3739868","banner_2x":"https:\/\/ps.w.org\/transit-site-migration\/assets\/banner-1544x500.png?rev=3739868","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/transit-site-migration\/assets\/icon-128x128.png?rev=3739868","icon_2x":"https:\/\/ps.w.org\/transit-site-migration\/assets\/icon-256x256.png?rev=3739868","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Transit packs your complete WordPress site into a single <code>.tsmig<\/code> file and restores it on any other WordPress site: a new domain, a new host, or local \u2194 live. URLs, server paths and the database table prefix are updated automatically while the database is imported \u2014 no separate search-and-replace step.<\/p>\n\n<h4>Built for large sites<\/h4>\n\n<ul>\n<li><strong>No size limit from your host.<\/strong> Uploads are sent in chunks, so <code>upload_max_filesize<\/code> doesn't matter. Big files \u2014 a 20 GB video \u2014 are copied across as many requests as needed.<\/li>\n<li><strong>Every request stays short.<\/strong> Export and import work in steps of about 20 seconds, well below PHP and proxy timeouts.<\/li>\n<li><strong>Flat memory use.<\/strong> Files are streamed straight to disk, and the database is read with index-based pagination, however many rows a table has.<\/li>\n<li><strong>Resumes after interruptions.<\/strong> Close the page, lose the connection or hit a server timeout: the export, the upload and the import continue where they stopped. Downloads can be resumed too.<\/li>\n<li><strong>Crash-safe.<\/strong> A request that dies mid-write is rolled back and redone. Database imports run in transactions, so an interruption never duplicates rows.<\/li>\n<li><strong>WP-CLI support<\/strong> for very large sites: <code>wp transit-site-migration export<\/code> and <code>wp transit-site-migration import<\/code>.<\/li>\n<\/ul>\n\n<h4>What a backup contains<\/h4>\n\n<ul>\n<li>The database \u2014 every table with your site's prefix<\/li>\n<li>Media library (<code>wp-content\/uploads<\/code>)<\/li>\n<li>Plugins, themes and must-use plugins<\/li>\n<\/ul>\n\n<p>WordPress core, <code>wp-config.php<\/code> and transients (temporary cache data) are not included.<\/p>\n\n<h4>Import that just works<\/h4>\n\n<ul>\n<li>Site URL, <code>https<\/code>\/<code>http<\/code>, <code>www<\/code>, JSON-escaped and URL-encoded URLs, email domains and server paths are replaced.<\/li>\n<li>Serialized data (widgets, theme and plugin settings) stays valid.<\/li>\n<li>A different table prefix on the new site is handled.<\/li>\n<li>After import, plugins that were active stay active. Caching and host-specific plugins are deactivated with a clear note, and caches (including Elementor CSS and block-theme styles) are cleared.<\/li>\n<li>Server checks run before an import: PHP version, memory, disk space, folder and database permissions.<\/li>\n<\/ul>\n\n<h4>Backups page<\/h4>\n\n<p>Every backup is listed with its source site, date and size. Download it, import it again with one click (no re-upload), or delete it. The newest 5 backups are kept automatically.<\/p>\n\n<h4>Privacy<\/h4>\n\n<p>Transit does not connect to any external service and sends no data anywhere. Backups stay on your server in <code>wp-content\/transit-site-migration-backups\/<\/code>, which is protected against direct web access.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install Transit from <strong>Plugins \u2192 Add New<\/strong> and activate it \u2014 on both the old and the new site.<\/li>\n<li>On the old site, go to <strong>Transit \u2192 Export<\/strong> and click the export button. Download the file when it's done.<\/li>\n<li>On the new site, go to <strong>Transit \u2192 Import<\/strong>, drop the <code>.tsmig<\/code> file onto the page and confirm.<\/li>\n<li>When the import finishes, log in with the <strong>old site's<\/strong> username and password.<\/li>\n<\/ol>\n\n<h4>Nginx servers<\/h4>\n\n<p>Apache, LiteSpeed and IIS block direct access to the backup folder automatically. On Nginx, add this to your server block:<\/p>\n\n<pre><code>location ^~ \/wp-content\/transit-site-migration-backups\/ { deny all; }\n<\/code><\/pre>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20there%20a%20file%20size%20limit%3F\"><h3>Is there a file size limit?<\/h3><\/dt>\n<dd><p>Transit accepts backups up to 100 GB (a filter can raise this). Your server needs enough free disk space for the backup file.<\/p><\/dd>\n<dt id=\"the%20import%20overwrote%20my%20users%20%E2%80%94%20why%20can%27t%20i%20log%20in%3F\"><h3>The import overwrote my users \u2014 why can't I log in?<\/h3><\/dt>\n<dd><p>The whole database is replaced, including users. Log in with the username and password of the site you exported from.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20urls%20and%20links%3F\"><h3>What happens to URLs and links?<\/h3><\/dt>\n<dd><p>They are changed to the new site's address during the import, including links inside page builder data and serialized settings.<\/p><\/dd>\n<dt id=\"the%20export%20or%20import%20stopped.%20what%20now%3F\"><h3>The export or import stopped. What now?<\/h3><\/dt>\n<dd><p>Open the Export or Import page again. Transit continues where it left off.<\/p><\/dd>\n<dt id=\"my%20host%20has%20short%20timeouts.\"><h3>My host has short timeouts.<\/h3><\/dt>\n<dd><p>Steps take about 20 seconds by default. Lower it with the <code>transit_site_migration_step_time_budget<\/code> filter, or use WP-CLI, which has no web timeouts.<\/p><\/dd>\n<dt id=\"does%20transit%20work%20on%20wordpress%20multisite%3F\"><h3>Does Transit work on WordPress Multisite?<\/h3><\/dt>\n<dd><p>Not yet. On a Multisite network Transit is disabled and shows a notice.<\/p><\/dd>\n<dt id=\"file%20changes%20are%20disabled%20on%20my%20site%20%28disallow_file_mods%29.\"><h3>File changes are disabled on my site (DISALLOW_FILE_MODS).<\/h3><\/dt>\n<dd><p>Transit respects it: the database and media are restored, but plugin and theme files from the backup are not installed. A warning lists how many were skipped.<\/p><\/dd>\n<dt id=\"why%20is%20it%20slow%20on%20my%20windows%20computer%3F\"><h3>Why is it slow on my Windows computer?<\/h3><\/dt>\n<dd><p>Antivirus software such as Windows Defender scans every script file as it is opened, which slows down copying plugin files. Linux hosting servers are not affected.<\/p><\/dd>\n<dt id=\"can%20i%20use%20wp-cli%3F\"><h3>Can I use WP-CLI?<\/h3><\/dt>\n<dd><p>Yes:<\/p>\n\n<pre><code>wp transit-site-migration export\nwp transit-site-migration import \/path\/to\/site.tsmig\nwp transit-site-migration list\n<\/code><\/pre><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First public release.<\/li>\n<\/ul>","raw_excerpt":"Move or back up a whole WordPress site \u2014 database, media, plugins and themes \u2014 in one file. Handles sites of any size.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/376309","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=376309"}],"author":[{"embeddable":true,"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/devmizan"}],"wp:attachment":[{"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=376309"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=376309"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=376309"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=376309"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=376309"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=376309"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}