Deploying a WordPress site — syncing a database, pushing files, running a
migration — usually needs a window where the database will not change
underneath you. In practice, editors keep working, and a post, upload, or
menu change made mid-sync can be silently lost. Stillgate puts the
backend into a controlled editorial freeze during that window, while the
public frontend keeps working normally the whole time.
What a freeze does
While active, a logged-in user without the deployment_guard_bypass
capability is blocked from creating, editing, deleting, or restoring
protected content — posts, pages, custom post types, media, revisions,
taxonomies and terms, navigation menus, widgets, or the Customizer —
through classic wp-admin, the block editor, the REST API, and XML-RPC;
WP-CLI commands and WP-Cron events are blocked from the same content
changes. Scheduled posts of a protected type do not publish while the
freeze is active; they remain scheduled and publish normally, through
WordPress’s own mechanism, once it ends.
A freeze can be turned on immediately, or configured as a scheduled window
in the site’s own timezone. Whether it is active is computed from the
current time and stored configuration on every relevant request — it never
depends on a WP-Cron event firing on time.
Bypass is capability-based, not role-based
Roles with manage_options (Administrator, by default) receive the
deployment_guard_bypass capability automatically on activation — the
check is against the capability, never hardcoded to a role’s name, so a
custom role can be granted it too. A bypass holder can keep working during
a freeze, though their own changes can still be lost if a deployment
proceeds concurrently; the freeze protects everyone else’s content.
WP-CLI is not exempt. wp post update, wp term create, wp media, and equivalent commands from other plugins are blocked the same
import
way during a freeze; --user=<account with bypass> is the explicit way to
act as a specific person from the command line. Stillgate’s own wp commands keep working,
stillgate status|enable|disable|schedule
because they only change Stillgate’s own state.
Security and privacy
Stillgate makes no outbound HTTP requests, sends no data to any
external service, requires no account or license key, and collects no
telemetry. It uses no custom database table — two options, both removed on
uninstall — and its small internal activity log never stores request
payloads, message bodies, or IP addresses.
Known limitations, stated plainly
DEPLOYMENT_GUARD_FORCE constant intrue or false; any other value iswp cache flush to take effectwp_publish_post()Full architecture notes, the complete enforcement matrix, and every hook
this plugin exposes are documented in the GitHub repository.