Caching
Caching is built in and tuned on every plan — there’s no add-on to buy and no plugin to install and configure. Two layers do the work: a full-page cache in front of the FrankenPHP runtime that serves rendered pages without touching PHP, and a persistent object cache behind it that backs WordPress queries and transients. This page covers how each behaves, what gets cached or bypassed, and how to purge.
The two layers
Section titled “The two layers”| Layer | Sits | Caches | Skipped for |
|---|---|---|---|
| Full-page cache | In front of the runtime | Rendered HTML responses for anonymous visitors | Logged-in users, POST requests, and non-cacheable routes |
| Object cache | Behind the runtime | Query results, transients, and other WordPress cache groups | Nothing — it’s a persistent backing store |
Full-page cache
Section titled “Full-page cache”The full-page cache holds the rendered HTML for a URL and serves it directly to anonymous visitors. A cache hit never invokes WordPress, which is why it pairs so well with FrankenPHP’s worker mode: the warm PHP process is reserved for the requests that genuinely need it — misses, logged-in traffic, and dynamic endpoints.
Cached: GET responses for anonymous visitors on cacheable routes.
Bypassed: requests from logged-in users (the platform respects WordPress login and
common auth cookies), POST/PUT/DELETE requests, wp-admin, and the typical
non-cacheable surfaces (login, cart/checkout-style routes, the REST API, and anything your
code marks no-cache via headers).
Object cache
Section titled “Object cache”The object cache is a persistent store for WordPress’s internal caching — the results
of expensive queries, transients, and cache groups that a page render touches. Without it,
WordPress recomputes those on every miss; with it, a cache miss still runs PHP but is backed
by a shared store instead of hitting the database for everything. It’s enabled and managed
for you — there’s no object-cache.php drop-in to install.
Purging the cache
Section titled “Purging the cache”You can clear cached content by site/environment, by type (page or object), or by tag, from the dashboard, over SSH, or through the API.
- Open the environment in the dashboard and go to its Cache panel.
- Choose what to purge — the full-page cache, the object cache, or both.
- Optionally narrow to a tag to purge just the related entries instead of everything.
- Confirm. The purge takes effect immediately for new requests.
Over the SSH gateway, the standard WordPress cache commands work:
# Flush the persistent object cache for this environmentssh acme-store@ssh.managed.dev "wp cache flush"
# Flush rewrite + transient statessh acme-store@ssh.managed.dev "wp transient delete --all"See WP-CLI for connecting and scoping commands to an environment.
Purge programmatically with the cache resource. The call returns a job you can tail.
curl -X POST https://api.managed.dev/v1/environments/env_01J8.../cache/purge \ -H "Authorization: Bearer mfk_live_..." \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d '{ "type": "page", "tag": "product-listing" }'This needs a cache write scope; see cache & secrets for the endpoint, parameters, and the job envelope.
TTLs and configuration
Section titled “TTLs and configuration”The cache ships with sane defaults, so most sites need no tuning. Where you do want to override behavior — adjust page-cache TTLs or mark additional routes as bypass — you set it in your environment’s managed.dev config, which inherits down from the site to each environment. See config & secrets for where config lives and how inheritance works.