{"id":350365,"date":"2026-08-11T23:55:18","date_gmt":"2026-08-11T23:55:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/one-site-migration\/"},"modified":"2026-08-11T23:54:48","modified_gmt":"2026-08-11T23:54:48","slug":"onecraft-site-migration","status":"publish","type":"plugin","link":"https:\/\/bal.wordpress.org\/plugins\/onecraft-site-migration\/","author":23506187,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.1.0","stable_tag":"0.1.0","tested":"7.0.4","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"Onecraft Site Migration","header_author":"One Craft","header_description":"Move one WordPress website. A simple, reliable, resumable migration tool with browser-driven export and import.","assets_banners_color":"","last_updated":"2026-08-11 23:54:48","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":30,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.0":{"tag":"0.1.0","author":"onecraftne","date":"2026-08-11 23:54:48"}},"upgrade_notice":{"0.1.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.1.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"The Migration screen: export and import cards with live progress.","2":"Diagnostics: environment checks before you start."}},"plugin_section":[],"plugin_tags":[151,2814,4151,4155,6060],"plugin_category":[59],"plugin_contributors":[266175],"plugin_business_model":[],"class_list":["post-350365","plugin","type-plugin","status-publish","hentry","plugin_tags-backup","plugin_tags-clone","plugin_tags-migrate","plugin_tags-migration","plugin_tags-move","plugin_category-utilities-and-tools","plugin_contributors-onecraftne","plugin_committers-onecraftne"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/onecraft-site-migration.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Onecraft Site Migration moves a single WordPress website from one place to another.\nOn the source site you export everything into one downloadable package; on the\ndestination you upload that package and import it. The URLs are rewritten to the\nnew domain automatically.<\/p>\n\n<p>It is built to be reliable on ordinary shared hosting, where a single PHP\nrequest cannot do all the work:<\/p>\n\n<ul>\n<li><strong>Runs in small, resumable steps.<\/strong> Long jobs are split into bounded \"ticks\"\ndriven from your browser, so they never rely on one giant request.<\/li>\n<li><strong>Streams, never loads everything into memory.<\/strong> Files and database tables are\nprocessed in chunks, so a large file or table will not exhaust memory.<\/li>\n<li><strong>Serialization-safe search &amp; replace.<\/strong> When the domain changes, PHP-serialized\noption and meta values are rewritten correctly (string lengths recomputed).<\/li>\n<li><strong>Validates before it touches the destination.<\/strong> The uploaded package's\nchecksums are verified before anything is imported.<\/li>\n<li><strong>Automatic rollback.<\/strong> The destination database is backed up before import; if\nthe database import fails, it is restored automatically.<\/li>\n<\/ul>\n\n<p>This is an original implementation. It does not use or copy any other plugin's\narchive format, code, or interface.<\/p>\n\n<h4>What is migrated<\/h4>\n\n<ul>\n<li>All of <code>wp-content<\/code> \u2014 themes, plugins, and uploaded media.<\/li>\n<li>The database \u2014 posts, pages, settings, users, and so on.<\/li>\n<\/ul>\n\n<h4>What is not migrated<\/h4>\n\n<ul>\n<li>WordPress core files (<code>wp-admin<\/code> \/ <code>wp-includes<\/code>) and <code>wp-config.php<\/code>. The\ndestination must already be a working WordPress install; the destination keeps\nits own core and database connection settings.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin ZIP under <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>, then\nactivate it (do this on both the source and destination sites).<\/li>\n<li>On the <strong>source<\/strong> site, open <strong>Migration<\/strong>, optionally enter the destination\nURL, and click <strong>Start export<\/strong>. When it finishes, download the package from\nthe Recent jobs list.<\/li>\n<li>On the <strong>destination<\/strong> site, open <strong>Migration<\/strong>, enter the <strong>source site URL<\/strong>,\nchoose the downloaded package, and click <strong>Upload &amp; import<\/strong>.<\/li>\n<li>Keep the browser tab open until the progress bar reports completion.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20the%20destination%20need%20wordpress%20already%20installed%3F\"><h3>Does the destination need WordPress already installed?<\/h3><\/dt>\n<dd><p>Yes. The package contains <code>wp-content<\/code> and the database, not WordPress core.\nInstall a fresh WordPress on the destination first, then import.<\/p><\/dd>\n<dt id=\"is%20importing%20destructive%3F\"><h3>Is importing destructive?<\/h3><\/dt>\n<dd><p>Yes. Importing overwrites the destination's database and <code>wp-content<\/code> files. Use\na fresh or disposable destination site. The database is backed up before import\nand restored automatically if the database import fails; replaced files are also\nbacked up within the job's working directory.<\/p><\/dd>\n<dt id=\"what%20if%20the%20domain%20is%20different%20on%20the%20destination%3F\"><h3>What if the domain is different on the destination?<\/h3><\/dt>\n<dd><p>That is the normal case. Enter the source site URL during import and the plugin\nrewrites the old domain to the new one across the database (serialized data\nincluded). Note that a scheme change (http \u2194 https) or a change of subdirectory\nis not rewritten in this version.<\/p><\/dd>\n<dt id=\"does%20the%20table%20prefix%20need%20to%20match%3F\"><h3>Does the table prefix need to match?<\/h3><\/dt>\n<dd><p>Yes, in this version the source and destination must use the same database table\nprefix (for example <code>wp_<\/code>).<\/p><\/dd>\n<dt id=\"where%20is%20the%20export%20package%20stored%3F\"><h3>Where is the export package stored?<\/h3><\/dt>\n<dd><p>Under <code>wp-content\/uploads\/ocsm-work\/&lt;job-id&gt;\/<\/code>. That directory is protected from\ndirect web access; download the package through the plugin's Download button,\nwhich is capability- and nonce-checked.<\/p><\/dd>\n<dt id=\"does%20it%20call%20home%20or%20send%20my%20data%20anywhere%3F\"><h3>Does it call home or send my data anywhere?<\/h3><\/dt>\n<dd><p>No. The plugin makes no external requests and includes no tracking.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release: browser-driven export and import.<\/li>\n<li>Resumable, chunked file scan, database export, and packaging (ZIP).<\/li>\n<li>Chunked, resumable, checksum-verified upload and package validation.<\/li>\n<li>File extraction to staging, streaming database import, serialization-safe URL\nreplacement, and promotion of files into place with a move-aside backup.<\/li>\n<li>Automatic pre-import database backup with rollback on failure.<\/li>\n<li>Environment diagnostics, job logging, and capability + nonce protected REST\nendpoints.<\/li>\n<\/ul>","raw_excerpt":"Move one WordPress site from A to B: export it to a portable package, then import it on the destination. Resumable and serialization-safe.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/350365","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=350365"}],"author":[{"embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/onecraftne"}],"wp:attachment":[{"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=350365"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=350365"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=350365"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=350365"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=350365"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=350365"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}