Install
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/aryanjasala/deploy-freeze/archive/refs/heads/main.zipDeploy Freeze
Read-only mode for migrations and deploys. Visitors still see the site, but nothing can be saved, so no edit, order or comment gets lost in the switch.
Deploy Freeze during a freeze, with countdown and blocked attempts" width="880">
When you move a site to a new server, or replace the live database with one from staging, anything saved on the old copy during the move is lost. Maintenance mode hides the whole site. Deploy Freeze keeps it online and makes it read-only until you unfreeze, or until the freeze ends on its own.
Features
- wp-admin still opens, but saves, uploads, settings and plugin changes are refused
- Block editor disables Save and Publish and says why, including for people who already have it open
- REST and XML-RPC writes get
423 Locked. Reads still work - Visitors posting comments, forms, checkouts or sign-ups get a
503withRetry-Afterand your own message - WP-Cron is held back and runs when the freeze ends
- End time, schedule, +30 minutes and +1 hour, and quick freeze from the admin bar
- Blocked attempts listed (who, when, what), and the last ten freezes kept
- Logging in always works, so an admin can always unfreeze
Install
- Download
deploy-freeze.zipfrom the latest release. - In WordPress, go to Plugins > Add New Plugin > Upload Plugin, choose the zip and activate it.
Or with WP-CLI:
wp plugin install https://github.com/aryanjasala/deploy-freeze/releases/latest/download/deploy-freeze.zip --activate
Needs WordPress 6.6+ and PHP 7.4+. To try it first, the Try in WordPress Playground badge opens a throwaway WordPress in your browser with the plugin and some demo content.
Quick look
WP-CLI is never blocked, so a deploy script can wrap the migration:
wp deploy-freeze on --minutes=30 --reason="Moving servers"
# ... migrate ...
wp deploy-freeze off
If the script dies halfway, the freeze still ends after 30 minutes.
Screenshots
![]() The block editor during a freeze |
![]() What visitors see when they send a form during a freeze |
Documentation
| Doc | What it covers |
|---|---|
| Reference | Constants, hooks, WP-CLI, what is blocked and what is stored |
| Development | Local setup, commands and tests |
| Contributing | Pull requests, required checks and PR titles |
| Releasing | How merged pull requests become releases |
| Security | Reporting a vulnerability |
| readme.txt | What WordPress.org shows, with the FAQ and changelog |
Project structure
deploy-freeze.php plugin header and PSR-4 autoloader
src/
├── Plugin.php creates the services, guards load only while frozen
├── State.php the saved freeze, its timing and messages
├── Freezer.php starts, extends and ends freezes
├── BlockedLog.php what the freeze stopped
├── History.php the last ten freezes
├── Guards/ wp-admin, REST, front-end and cron guards
├── Admin/ freeze screen, notice, admin bar
├── Editor/EditorLock.php locks the block editor through the heartbeat
└── Cli/Command.php wp deploy-freeze
assets/ editor lock and countdown scripts
tests/
├── Unit/ PHPUnit
└── e2e/ Playwright specs and the Docker site
.wordpress-org/ screenshots
docs/ reference, development, contributing, releasing
License
GPL-2.0-or-later © Aryan Jasala

