Every upgrade breaks something. Find out first

Clone your live site, run the update on the copy, and find the breakage on your schedule instead of at 2am. WordPress 7.1 ships 19 August 2026.

Free plan · no card · production is only ever read

upgrade rehearsal
production read only

shop.example.com

WordPress 7.0.2PHP 8.1

Cloned, not modified. Still serving customers.

sandbox 1 fatal · 2 notices

upgrade-rehearsal.sandywp.com

WordPress 7.1-beta3PHP 8.3

  • Deprecated: dynamic property Acme_Cart::$session
  • Fatal: acme_render_grid(): Argument #2 must be int, null given

Somebody finds the bug. It may as well be you.

Most upgrades get tested one of two ways: hit update on production and hope, or lose an afternoon standing up a staging server.

09:11

A client homepage that went white

You updated at 09:02. The phone goes at 09:11, and now you are debugging with the client listening.

release day

A one-star review you can’t answer

They updated core before you did and your plugin fataled. They didn’t open a ticket. They left a review.

all week

A support queue nobody budgeted for

One deprecation, a few hundred installs. Every ticket is the same ticket, and the fix isn’t written yet.

None of that had to be a surprise

Run it first on a throwaway copy of the real site — your content, your plugins, your database. If it breaks there, it cost you a sandbox.

How the clone works

Trusted by

PublishPressPaywallProjectNewsletter GlueInfinite UploadsMetaSlider

Four moves from “should be fine” to knowing

1

Copy the site without touching it

The free SandyWP Cloner reads your database and wp-content into a fresh sandbox. Production is only ever read — never modified, never written back.

How the clone works
2

Run the upgrade where it’s cheap

Core to 7.1-beta3, PHP 8.1 to 8.3, the plugin release you’ve been avoiding. Same content, same database.

Pick a pre-release
3

Click the things that pay the bills

Checkout. The membership gate. The form that emails sales — with WP_DEBUG on and debug.log open beside it.

Read the log
4

Throw the whole thing away

Reset to a clean slate and run it again, or delete it. No staging server left running.

Test the combination your customers actually run

Not the one on your laptop. WordPress and PHP are two dropdowns at create time, and every pairing below is one click each.

WordPressPHP 8.1PHP 8.2PHP 8.3
latest newest stable Resolves to 7.0.2 today. latest on PHP 8.1 is selectable latest on PHP 8.2 is selectable latest on PHP 8.3 is selectable
7.1-beta3 pre-release Becomes 7.1 on 19 August 2026. 7.1-beta3 on PHP 8.1 is selectable 7.1-beta3 on PHP 8.2 is selectable 7.1-beta3 on PHP 8.3 is selectable
7.0.2 pinned Stays 7.0.2 whatever ships next. 7.0.2 on PHP 8.1 is selectable 7.0.2 on PHP 8.2 is selectable 7.0.2 on PHP 8.3 is selectable
7.0 7.0 on PHP 8.1 is selectable 7.0 on PHP 8.2 is selectable 7.0 on PHP 8.3 is selectable
6.9 6.9 on PHP 8.1 is selectable 6.9 on PHP 8.2 is selectable 6.9 on PHP 8.3 is selectable
6.8 6.8 on PHP 8.1 is selectable 6.8 on PHP 8.2 is selectable 6.8 on PHP 8.3 is selectable
6.7 6.7 on PHP 8.1 is selectable 6.7 on PHP 8.2 is selectable 6.7 on PHP 8.3 is selectable
6.6 oldest For the contract nobody has renegotiated. 6.6 on PHP 8.1 is selectable 6.6 on PHP 8.2 is selectable 6.6 on PHP 8.3 is selectable

PHP 8.3 is the default, and an existing sandbox moves between 8.1, 8.2 and 8.3 in a 5–10 second restart. 7.1-beta3 always provisions cold.

Ship the compatible version the day core ships, not the week after

7.1 arrives 19 August 2026 whether your plugin is ready or not. Until then it is just another option in the dropdown.

  • 7.1-beta3 at create time, the same dropdown as 6.6
  • Launch it with any WordPress.org plugin or theme preinstalled
  • Or upload your own plugin ZIP, up to 50MB
  • The release’s own “what to test” guide, section by section
Launch a 7.1 Beta sandbox
new sandbox

WordPress version

  • latest · 7.0.2
  • 7.1-beta3 pre-release
  • 7.0.2
  • 7.0 · 6.9 · 6.8 · 6.7 · 6.6

PHP

8.3

Preinstall

acme-cart

Start beta test

Provisions cold — no warm pool. Allow a little longer.

Catch the deprecation while it is still just a deprecation

The notice nobody reads on PHP 8.1 is the fatal that takes the site down on 8.3. It is already in your log — you just have nowhere safe to turn the log on.

  • WP_DEBUG, WP_DEBUG_LOG, WP_DEBUG_DISPLAY and SCRIPT_DEBUG as toggles
  • Query Monitor in one click
  • A live debug.log viewer next to the toggles
  • Memory limit 64–512MB, max execution 10–300s, seven more php.ini values
See debug mode
upgrade-rehearsal · debug.log

WordPress 7.1-beta3 · PHP 8.3 · WP_DEBUG on

[10:04:09] core updated 7.0.2 → 7.1-beta3

[10:04:09] php 8.1 → 8.3

Deprecated: Creation of dynamic property Acme_Cart::$session in /wp-content/plugins/acme-cart/class-cart.php on line 88

Deprecated: strlen(): Passing null to parameter #1 ($string) in /wp-content/themes/acme/inc/helpers.php on line 214

Fatal error: Uncaught TypeError: acme_render_grid(): Argument #2 ($columns) must be of type int, null given in /wp-content/plugins/acme-grid/render.php:142

[10:04:19] there it is — and the shop is still up.

Set the test up once, not every August

The expensive part isn’t the upgrade. It is rebuilding the state you were in before it — this theme, these twenty plugins, this database. Save it once.

  • Captures WordPress and PHP version, plugins, theme, content, settings and database
  • Launch fresh, isolated copies whenever a release lands
  • Share a public launch link, email-gated if you want the lead
  • The white-label toggle hides “Powered by SandyWP”
How templates work
templates
  • pre-7.1 baseline

    WordPress 7.0.2PHP 8.1

  • post-upgrade reference

    WordPress 7.1-beta3PHP 8.3

  • harbour co · client site

    WordPress 7.0.2PHP 8.2

Each launch is a fresh copy. The template never changes.

Eight WordPress versions times three PHP versions is a script, not an afternoon

One rehearsal is a browser tab. Twenty-four are not. The CLI and SSH come with the paid plans.

cli

Sweep the matrix from your terminal

Create, deploy to and delete the whole set from @sandywp/cli.

See the CLI

ssh & sftp

Run it the way you would on the real server

A real Bash shell with wp-cli preinstalled. Update by hand, tail debug.log while it happens.

Shell and mount access

ai & mcp

Hand the matrix to an agent

The MCP server exposes creates, PHP switching, debug toggles and the log.

Agents and MCP

Every reason the 2am call never happens

reset

A sandbox that goes wrong costs nothing

Reset to a clean slate in one click, or delete it and clone again. Nothing to decommission.

off your domain

Nobody watches you break it

The breakage sits at a throwaway URL linked from nowhere. Production keeps serving the version that works.

proof

Show the client, don’t promise them

Send the upgraded copy and a magic-login link. “It’ll be fine” becomes a URL they can click.

Who stops dreading release day

plugin & theme authors

Certify on 7.1-beta3 before the reviews arrive.

agencies

Hand the client a working copy instead of asking for trust.

in-house teams

The one site you can’t white-screen gets a rehearsal.

The rest of what’s in the box

git deployment

Deploy the branch you’re about to tag straight into wp-content, then run the new WordPress against it.

Git deployment

slack

Mention the bot with a WordPress version; it creates the sandbox and posts the link back.

SandyWP for Slack

What people ask before their first upgrade test

Will cloning touch my live site?

No. The Cloner only reads — it exports your database and copies wp-content into a separate sandbox. Nothing is written back to production.

How big a site can I clone?

Clones run in the background, chunked and resumable, straight to storage. The ceiling is your plan’s storage: 256MB Free, 5GB Plus, 15GB Pro, 30GB Max.

Can I test WordPress 7.1 before it ships?

Yes — 7.1-beta3 is a create-time option, and 7.1 final is due 19 August 2026. Beta sandboxes always provision cold, so allow a little longer.

What if the upgrade breaks the sandbox completely?

Reset it to a clean slate in one click, or delete it and clone again. Free runs 2 active sandboxes; Plus 10, Pro 25, Max 50.

How long does the sandbox live?

Accounts default to a week; pick 1 hour to 1 month or permanent at create time (2 weeks and up are paid). Guests get 7 hours. After expiry: 12 hours’ grace on Free, 7 days on paid.

Do I have to install a plugin on production?

The free Cloner is the short path — it’s on WordPress.org and only ever reads. Or run sandywp push from a local install and leave production alone entirely.

Can I change the PHP version without cloning again?

Yes — switch between 8.1, 8.2 and 8.3 in a 5–10 second restart, content and database intact. Memory limit (64–512MB) and max execution time (10–300s) are tunable too.

How do I see what actually broke?

Debug mode: WP_DEBUG and friends as toggles, Query Monitor in one click, and a live debug.log viewer. On a paid plan, SSH in and tail it yourself.

Can I automate the matrix instead of clicking it?

Yes. The CLI scripts creates, deploys and deletes; the MCP server lets an agent do the same. The CLI comes with the paid plans.

What does one upgrade test cost?

Nothing to find out: Free is $0, no card, 2 sandboxes at once. Paid starts at $7/month and adds the CLI, SSH, Git deploys and Slack.

Break it on a copy, not on your customers.

Free plan, free Cloner plugin, first rehearsal in about a minute.