=== Transit - Site Migration & Backup ===
Contributors: devmizan
Tags: migration, backup, clone, migrate, restore
Requires at least: 5.6
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 1.0.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Move or back up a whole WordPress site — database, media, plugins and themes — in one file. Handles sites of any size.

== Description ==

Transit packs your complete WordPress site into a single `.tsmig` file and restores it on any other WordPress site: a new domain, a new host, or local ↔ live. URLs, server paths and the database table prefix are updated automatically while the database is imported — no separate search-and-replace step.

= Built for large sites =

* **No size limit from your host.** Uploads are sent in chunks, so `upload_max_filesize` doesn't matter. Big files — a 20 GB video — are copied across as many requests as needed.
* **Every request stays short.** Export and import work in steps of about 20 seconds, well below PHP and proxy timeouts.
* **Flat memory use.** Files are streamed straight to disk, and the database is read with index-based pagination, however many rows a table has.
* **Resumes after interruptions.** 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.
* **Crash-safe.** A request that dies mid-write is rolled back and redone. Database imports run in transactions, so an interruption never duplicates rows.
* **WP-CLI support** for very large sites: `wp transit-site-migration export` and `wp transit-site-migration import`.

= What a backup contains =

* The database — every table with your site's prefix
* Media library (`wp-content/uploads`)
* Plugins, themes and must-use plugins

WordPress core, `wp-config.php` and transients (temporary cache data) are not included.

= Import that just works =

* Site URL, `https`/`http`, `www`, JSON-escaped and URL-encoded URLs, email domains and server paths are replaced.
* Serialized data (widgets, theme and plugin settings) stays valid.
* A different table prefix on the new site is handled.
* 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.
* Server checks run before an import: PHP version, memory, disk space, folder and database permissions.

= Backups page =

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.

= Privacy =

Transit does not connect to any external service and sends no data anywhere. Backups stay on your server in `wp-content/transit-site-migration-backups/`, which is protected against direct web access.

== Installation ==

1. Install Transit from **Plugins → Add New** and activate it — on both the old and the new site.
2. On the old site, go to **Transit → Export** and click the export button. Download the file when it's done.
3. On the new site, go to **Transit → Import**, drop the `.tsmig` file onto the page and confirm.
4. When the import finishes, log in with the **old site's** username and password.

= Nginx servers =

Apache, LiteSpeed and IIS block direct access to the backup folder automatically. On Nginx, add this to your server block:

`location ^~ /wp-content/transit-site-migration-backups/ { deny all; }`

== Frequently Asked Questions ==

= Is there a file size limit? =

Transit accepts backups up to 100 GB (a filter can raise this). Your server needs enough free disk space for the backup file.

= The import overwrote my users — why can't I log in? =

The whole database is replaced, including users. Log in with the username and password of the site you exported from.

= What happens to URLs and links? =

They are changed to the new site's address during the import, including links inside page builder data and serialized settings.

= The export or import stopped. What now? =

Open the Export or Import page again. Transit continues where it left off.

= My host has short timeouts. =

Steps take about 20 seconds by default. Lower it with the `transit_site_migration_step_time_budget` filter, or use WP-CLI, which has no web timeouts.

= Does Transit work on WordPress Multisite? =

Not yet. On a Multisite network Transit is disabled and shows a notice.

= File changes are disabled on my site (DISALLOW_FILE_MODS). =

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.

= Why is it slow on my Windows computer? =

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.

= Can I use WP-CLI? =

Yes:

`wp transit-site-migration export`
`wp transit-site-migration import /path/to/site.tsmig`
`wp transit-site-migration list`

== Screenshots ==

1. Export: one click creates a backup of the whole site, with live progress.
2. Import: drop a .tsmig file — 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.

== Changelog ==

= 1.0.0 =
* First public release.

== Upgrade Notice ==

= 1.0.0 =
First public release.
