You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Backup, Sync & Migrate (Pro): a complete site-portability suite. A new "Backup, Sync, and Migrate" module (on by default, with a Modules-tab kill-switch) and its own admin tab. Package a whole site (database + files) into a single portable .emcp archive (or database-only / files-only) and restore it locally or from an uploaded archive. Backups and restores run in adaptive, time-bounded slices driven from the browser, so large sites finish reliably on modest and shared hosts. Restore rewrites the site address and Elementor page-data URLs to the destination with a serialization-safe search-replace, preserves your current login, and never touches wp-config.php or your salts.
Local to live migration via a thin connector. A Migrate sub-tab pushes this site to a live server with no manual upload: download the single-file EMCP Migrate Connector from the admin, install it on the destination and arm pairing, pair the two sites, then Push & Restore. The archive streams to the connector in HMAC-signed, resumable, base64-encoded packets (base64 so the payload clears the destination's firewall), and the connector runs a self-contained restore that continues past a client disconnect and never touches wp-config.php or salts.
One-way Sync, full or selective. A Sync sub-tab pushes to a paired target as Full (database + all files) or Selective (choose exact database tables and/or file areas: themes, plugins, uploads, or a specific path). A files-only sync never rewrites the live database.
Content Sync: push individual content changes to a live site. A change-driven Changes to sync list shows the pages, posts, and CPTs that changed locally since they were last synced to a paired live site, each with Sync / Discard. Syncing one item updates only that page/post on the live site (its content, custom fields, taxonomy terms, and attached media: the featured image plus every image referenced in the content and Elementor data), matched by a stable sync id, with media IDs and URLs remapped so it renders correctly. No full database import, no downtime; the rest of the live site is untouched. The whole-site full/selective sync is preserved under an Advanced disclosure.
Seven MCP tools so a connected agent can drive the whole feature: create-backup and list-backups (on by default); migrate-site, sync-to-live, and sync-content-item (destructive, disabled by default, require confirm:true); list-syncable-changes and discard-sync-change. Re-install the updated connector on any destination to receive content syncs.
Restore-tab server limits panel. An info box shows your current PHP upload limits next to the recommended values (green when you're set, amber when raising one would help) with a How to raise these link to the docs. The uploader adapts to any host regardless, so this is guidance for faster large uploads, not a requirement.
Remove the connector after migrating (zero residue). A signed Remove connector action (and a one-click button when a migration completes) asks the connector to unpair, purge staged data, deactivate itself, and delete its own files from the live site. Only the paired source can trigger it.
Configurable pairing window on the connector: a 5 / 10 / 15-minute selector (default 10) for how long the connector accepts a new pairing. Once paired, a site stays paired until you unpair or remove the connector.
Fixed
Reliable large uploads, backups, and restores on any host. The backup and restore flows are now driven from the browser in short, resumable, byte-offset slices, starting from a large chunk and automatically halving and retrying at the same offset whenever a host rejects a body, converging on each host's real single-request ceiling (mod_fcgid's hidden FcgidMaxRequestLen, nginx client_max_body_size, a WAF, or Cloudflare's 100 MB) without needing to know it. Chunks are base64-encoded so a firewall never sees SELECT/<?php/eval signatures, the browser holds only one chunk at a time (no "Out of Memory" tab crash on large backups), backup downloads stream without buffering the whole file in memory, and re-uploading a same-named file can't leave stale bytes. Large or firewalled hosts can still drop the .emcp into wp-content/emcp-backups/uploads/ via FTP and it appears in the Restore list. Live-verified byte-for-byte on a 446 MB archive over mod_fcgid.
Migration edge cases. Fixed a push that reported "Backup archive file is missing" when the archive was present (filename vs. full-path resolution); a mid-transfer HTTP 500 on long transfers (the push is now driven in short resumable slices that no host timeout can kill); a "No route was found..." error shown after a successful restore (the connector legitimately goes offline as the DB import replaces it, so the status poll now reads that as completion); and an inability to re-pair after a full migration (the connector now regenerates rewrite rules after a restore, and pairing falls back to the permalink-independent ?rest_route= form). Also resolved a "plugin does not have a valid header" notice after a Pro update by shipping the connector source as .php.txt.
Dynamic content locked whole Theme Builder templates out of the API (#112). Editing any element of a document that contained a dynamic-valued paragraph (for example a post date, category, or author rendered as a paragraph) failed with paragraph: invalid_value, because Elementor's atomic validation re-checks the whole tree on save and can't resolve an editor-authored dynamic value outside the live editor. Such a rejection now falls back to a direct, cache-clearing write of the already-validated data (exactly what the editor persists) instead of blocking the edit.
Pages created via MCP rendered empty when the Flexbox Container experiment is off (#111). On long-lived sites with Elementor's Container feature disabled, add-container and build-page stored pages that rendered empty because the container element can't instantiate. Those tools now refuse up front with a clear, actionable message, and detect-elementor-version reports supports_container plus a warning so an agent knows to enable the experiment (or use the atomic tools) first.
OAuth tokens not persisted on some sites. The token endpoint could return a token while writing no row to the tokens table (a drifted or missing schema after an upgrade), so the client authenticated once and then couldn't. Issuing a token now verifies the write, self-heals the schema and retries once, and returns a clear server error instead of an unusable token if it still fails.