Description
Miroir keeps a local WordPress environment and one or more remote sites in sync, with an interface designed for non-technical users.
The same plugin embeds two roles: an orchestrator on the local site and an agent on each remote site. They communicate over the WordPress REST API (authenticated with Application Passwords) and, optionally, SFTP.
Features:
- Push (local to production) and Pull (production to local) of the database.
- Safe search-replace that handles PHP-serialized data, escaped JSON (Gutenberg blocks) and
wp_options. - Automatic snapshot and rollback before a database import.
- Comparison screen with a per-component diff and data-loss warnings.
- File deployment of specific themes and plugins.
- Editorial content merge by post type (GUID-matched, no deletion; WooCommerce excluded).
- One-click deployment shortcuts.
- REST (chunked) and SFTP transport.
Screenshots



Installation
- Install and activate Miroir on the remote (production) site.
- Install and activate Miroir on the local site.
- On the local site, open Miroir, add the remote URL and approve the connection.
FAQ
-
Does this replace a backup plugin?
-
No. Miroir is a development and deployment tool, complementary to a general backup solution.
-
Is WooCommerce supported?
-
Yes for full database sync. Per-type content merge intentionally excludes WooCommerce products and orders.
-
Will a push delete data on the target?
-
A full database push replaces the target database, so rows that exist only on the
target are removed. The comparison screen warns about this before you confirm, and
a snapshot is taken so a rollback is possible. Content merge (by post type) and file
deployment are additive and never delete. -
What if my host has no SSH/SFTP?
-
Everything works over the REST API (chunked transfer). SFTP is optional and only
speeds up file transfers on hosts that provide SSH. -
Are my credentials safe?
-
Yes. Application Passwords and SFTP secrets are encrypted at rest (AES-256-GCM) and
never logged in clear text. The agent only answers users withmanage_options. -
Will large sites time out?
-
The database search-replace is resumable (processed in time-bounded chunks), file
transfers are chunked, and native mysqldump/mysql are used when available.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Miroir Local Sync” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “Miroir Local Sync” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
0.5.0
- Internationalization: all source strings are now in English (the WordPress.org standard), so the plugin can be translated on translate.wordpress.org and the directory page reads consistently with the code.
- Bundled French translation (fr_FR) in /languages: the admin interface and the activity log display in French on French sites out of the box.
- Loads the bundled text domain on init (load_plugin_textdomain) so translations work on WordPress 6.0–6.6; 6.7+ auto-loads them.
- Included a translation template (miroir-local-sync.pot) for further locales.
0.4.11
- Progress transients: the literal prefix sumotori_sync_prog_ is now visible at every set_transient() call site (no more dynamic keys), so all options/transients are verifiably prefixed.
- Renamed the JS localized object MiroirSync to sumotori_sync_cfg (consistent unique prefix).
- Hardened storage confinement: chunk writes (Agent) and downloads (Transport) now refuse any path outside the protected storage folder under wp_upload_dir() (uploads/miroir-local-sync-{key}/). No data is ever written inside the plugin folder.
0.4.10
- Removed ini_set(‘display_errors’) from the AJAX guard (no error-reporting changes in production code).
- Progress transient key is now force-prefixed with sumotori_sync_ in the push/pull setters.
0.4.9
- Storage folder in uploads now uses the plugin slug prefix (miroir-local-sync-).
0.4.8
- Portability: use WP_PLUGIN_DIR and get_theme_root() instead of hardcoded WP_CONTENT_DIR paths. Correct readme contributor.
0.4.7
- Renamed to Miroir Local Sync (slug miroir-local-sync) for a distinctive, descriptive name.
0.4.6
- Text domain aligned to the plugin slug (miroir). Plugin Check fixes: escaped CTA button attribute, translators comment, composer.json kept in the package.
0.4.5
- Security hardening: search-replace unserialize restricted to stdClass (no object injection); transfer chunks now capped (size guard against disk-fill); manual connection validates the URL like the auto flow.
- i18n: Push/Pull button label no longer hardcoded after an operation.
0.4.4
- After synchronizing a component, its row status flips from “modifié” to “à jour” (kept visible until the next refresh).
0.4.3
- The site “⋯” menu now closes on outside click or Escape.
- Removed the per-component “Détails” button (the (i) panel covers it).
0.4.2
- Comparer: clickable (i) on each component reveals file/size details below the row; “N components up to date” collapsible to find any already-synced component.
- Per-component detail now includes total size (LOCAL/PROD files + size).
0.4.1
- Per-component “Synchroniser” button on the Comparer page: push a single plugin/theme to prod in delta, with a live per-phase spinner.
- Component versions shown per side (LOCAL vX · PROD vY); file-count detail moved to an (i) tooltip to keep rows clean.
- Consistent “Synchroniser” terminology across components and database.
- Manifest hardening: version “0” handled, null-safe count/size reads.
0.4.0
- Delta deployment: one-click shortcuts now send only changed files (hash diff vs the remote), ~90% less data on the wire.
- Comparer page redesigned into per-category cards — including in the sync and expanding the detail are now decoupled (inspect without checking).
- Local and remote analysis run in parallel (~2x faster), with live per-phase progress.
- Lightweight component signature (version + size + file count) for an instant overview; exact per-file hashing kept for drill-down and deployment.
- Dashboard redesigned: centered layout, compact collapsible “add a site” tile, denser sections.
- Fixes: shortcut edit/delete (id casing), Comparer scope now actually filters, raised memory limit for heavy operations.
0.3.0
- Editorial content merge by post type.
- One-click deployment shortcuts.
- Per-component file deployment and one-click agent update.
0.2.0
- File synchronization, SFTP transport, per-component diff, AJAX progress.
0.1.0
- Initial connection flow, database push/pull, search-replace engine.
