Title: Miroir Local Sync
Author: Tommy Bordas
Published: <strong>July 23, 2026</strong>
Last modified: July 23, 2026

---

Search plugins

![](https://ps.w.org/miroir-local-sync/assets/banner-772x250.png?rev=3619915)

![](https://ps.w.org/miroir-local-sync/assets/icon.svg?rev=3619915)

# Miroir Local Sync

 By [Tommy Bordas](https://profiles.wordpress.org/tommybordas/)

[Download](https://downloads.wordpress.org/plugin/miroir-local-sync.0.5.0.zip)

 * [Details](https://wordpress.org/plugins/miroir-local-sync/#description)
 * [Reviews](https://wordpress.org/plugins/miroir-local-sync/#reviews)
 *  [Installation](https://wordpress.org/plugins/miroir-local-sync/#installation)
 * [Development](https://wordpress.org/plugins/miroir-local-sync/#developers)

 [Support](https://wordpress.org/support/plugin/miroir-local-sync/)

## 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

[⌊Dashboard: connected sites and one-click deployment shortcuts.⌉⌊Dashboard: connected
sites and one-click deployment shortcuts.⌉[

Dashboard: connected sites and one-click deployment shortcuts.

[⌊Comparison screen with per-component diff and data-loss warnings.⌉⌊Comparison 
screen with per-component diff and data-loss warnings.⌉[

Comparison screen with per-component diff and data-loss warnings.

[⌊Global settings and system status.⌉⌊Global settings and system status.⌉[

Global settings and system status.

## Installation

 1. Install and activate Miroir on the remote (production) site.
 2. Install and activate Miroir on the local site.
 3. 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 with `manage_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.

Contributors

 *   [ Tommy Bordas ](https://profiles.wordpress.org/tommybordas/)

[Translate “Miroir Local Sync” into your language.](https://translate.wordpress.org/projects/wp-plugins/miroir-local-sync)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/miroir-local-sync/),
check out the [SVN repository](https://plugins.svn.wordpress.org/miroir-local-sync/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/miroir-local-sync/)
by [RSS](https://plugins.trac.wordpress.org/log/miroir-local-sync/?limit=100&mode=stop_on_copy&format=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.

## Meta

 *  Version **0.5.0**
 *  Last updated **18 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.0 or higher **
 *  Tested up to **7.0.2**
 *  PHP version ** 8.1 or higher **
 * Tags
 * [database](https://wordpress.org/plugins/tags/database/)[deployment](https://wordpress.org/plugins/tags/deployment/)
   [migration](https://wordpress.org/plugins/tags/migration/)[staging](https://wordpress.org/plugins/tags/staging/)
   [sync](https://wordpress.org/plugins/tags/sync/)
 *  [Advanced View](https://wordpress.org/plugins/miroir-local-sync/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/miroir-local-sync/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/miroir-local-sync/reviews/)

## Contributors

 *   [ Tommy Bordas ](https://profiles.wordpress.org/tommybordas/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/miroir-local-sync/)