WP Manifestindependent plugin directory
manifest / updates / update-airlock

Update Airlock

WordPress plugin: flags risky code changes in plugin and theme updates, snapshots, checks the site, rolls back.

★ 0stars

Install

Download source zip No release zip yet

This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/perezamadorluisenrique-gif/update-airlock/archive/refs/heads/main.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

Free WordPress plugin: reads the code changes in each plugin and theme update, snapshots the old copy, checks the site afterward and rolls back when a check fails. It is not a malware scanner; it shows what changed and helps you decide.

  • Inspector: line diff of added code, about 30 rules (execution, deserialization, obfuscation, persistence, new outbound hosts, privilege changes, JS) and provenance signals (author, links, changelog).
  • Holds: a High-rated automatic update is held; a High-rated manual update asks for confirmation first.
  • Safety net: snapshot before install, loopback checks after, automatic rollback, email.
  • Screens under Tools > Update Airlock, update-row badges, dashboard widget, Site Health, CSV/JSON export.

wordpress.org listing text: readme.txt. Requires WordPress 6.6 and PHP 7.4.

Develop

composer install
vendor/bin/phpcs            # WordPress + PHPCompatibilityWP 7.4-
vendor/bin/phpunit          # rules and differ
bash bin/build.sh           # build/update-airlock + build/update-airlock.zip (from .distignore)
RISKY_CALLS="..." bash bin/gate.sh build/update-airlock updlock $PWD/build/update-airlock.zip
bash bin/e2e.sh             # throwaway WordPress on SQLite; WP_VERSION=6.6 for the oldest

bin/e2e.sh needs php with pdo_sqlite and zip, git, curl, and Node with Playwright (NODE_PATH to the global install) for the screen walkthrough; SKIP_UI=1 skips it.