Every release, newest first. Where something exists because the previous approach was wrong, it says so rather than describing it as an improvement.
Offline licensing, and a co-activation guard that actually works.
Every shipped zip is now generated from one source by a build script, sharing a single version number so a download can never disagree with the catalogue.
Moved every declaration into includes/bootstrap.php so the co-activation guard can return before anything is declared. A guard written in the main plugin file cannot work: PHP binds a file's top-level functions when it compiles the file, whether or not an early return runs.
Each build installs into its own plugin folder, so two can sit on disk together while only one runs. Sharing one folder would have meant WordPress overwriting one build with the next, which makes the guard unreachable in the field.
Added a capability layer so limits sit on real data paths rather than hidden buttons. The batch is truncated in the installer and retention is enforced in SQL, rather than filtered out of the display.
A request for a report outside the retention window is refused rather than served, and surplus reports are deleted rather than hidden.
Added the Ed25519 offline licence verifier for product MPIPRO, with a licence screen under Plugins and a priority-zero gate on the export route so it dies before the export handler runs.
The mpip_max_batch_size filter is clamped, so it can lower the cap and never raise it.
First release: batch installation with a preflight that refuses rather than repairs.
Multi-ZIP drag-and-drop installation, up to twenty-five archives in one pass, each with its own operation and outcome.
Twelve named checks before anything is written: ZIP validity, unsafe and parent-directory paths, symbolic links, entry count, uncompressed size, one top-level folder, valid folder name, a real plugin header, the main file directly inside that folder, and the declared PHP and WordPress minimums against what is actually running.
Optional activation and explicit replacement control, both off by default — the opposite of most batch tools, and deliberate.
Permanent database-backed batch reports with a per-plugin outcome for every archive, holding filename, plugin name, version, operation and any WordPress error message.
Excel-safe CSV downloads, plus controls to delete a single report or clear the whole history.
Want it running on your sites? See the plans or read the documentation first.