WordPress Playground Blueprint Generator

Builds a WordPress Playground blueprint and boots it in the page, so you can see the site your JSON actually produces.

One per line. A directory slug, or a URL to a zip the browser can fetch.

A directory slug, or a zip URL. Leave empty to keep the default theme.

Where the site lands once it has booted.

A WordPress export file. It is fetched by the browser, so it needs CORS headers.

Run it here Open in a new tab 1 step · PHP 8.3 · WordPress latest
blueprint.json
{
	"$schema": "https://playground.wordpress.net/blueprint-schema.json",
	"landingPage": "/wp-admin/",
	"preferredVersions": {
		"php": "8.3",
		"wp": "latest"
	},
	"features": {
		"networking": false
	},
	"steps": [
		{
			"step": "installPlugin",
			"pluginData": {
				"resource": "wordpress.org/plugins",
				"slug": "hello-dolly"
			},
			"options": {
				"activate": true
			}
		}
	],
	"login": true
}
  • Networking is off, so the site cannot reach the plugin directory from inside. Installing by slug still works: Playground fetches those itself before boot.

A blueprint tells WordPress Playground what to build before it hands you a site: which WordPress, which PHP, which plugins and theme, who to log in as. This writes that file, and boots it in the page so you can see whether it actually works.

Playground is WordPress compiled to WebAssembly, running in your browser tab. There is no server, no install, and nothing to clean up — closing the tab throws the site away. That makes it the fastest way to reproduce a bug report, show a client a theme, or check a plugin against PHP 8.3 without touching anything you care about.

The part people get wrong is not the JSON. It is that a blueprint can boot a perfectly healthy site with your plugin silently missing, because the step was spelled wrong or the zip could not be fetched. Every step here comes from the published schema, a bad slug is refused at the field, and the preview is right there to prove it worked.

How to use

  1. Put in the plugins you want — directory slugs one per line, or a URL to a zip.
  2. Pick the WordPress and PHP versions, and where the site should open.
  3. Press Run it here. WordPress boots in the page, built by your blueprint.
  4. Copy blueprint.json, or share the URL, which carries the whole blueprint inside it.

Example

A bug report that needs WooCommerce on PHP 8.1:

{
  "$schema": "https://playground.wordpress.net/blueprint-schema.json",
  "landingPage": "/wp-admin/plugins.php",
  "preferredVersions": { "php": "8.1", "wp": "latest" },
  "features": { "networking": false },
  "steps": [
    {
      "step": "installPlugin",
      "pluginData": { "resource": "wordpress.org/plugins", "slug": "woocommerce" },
      "options": { "activate": true }
    },
    { "step": "setSiteOptions", "options": { "blogname": "Bug 4821" } }
  ],
  "login": true
}

Send the URL to whoever filed the bug and they are looking at the same site you are, in about ten seconds, without installing anything.

Pitfalls

A zip has to be fetchable by the browser. Playground downloads it from the tab, so the host must send CORS headers. GitHub release assets do. A zip on your own server usually does not, and the symptom is a site that boots fine with the plugin missing.

A GitHub page is not a zip. github.com/owner/repo returns HTML. You want the release asset URL, the one ending in .zip.

Playground already ships Hello Dolly and Akismet. Installing one of those by slug gives you two copies in the plugins list, one of them inactive. Harmless, confusing the first time.

Nothing persists. There is no database to keep and no files to find afterwards. If you need the state again, keep the blueprint, not the site.

Networking is off by default, which means the site cannot reach the plugin directory from inside its own admin. Installing by slug still works, because Playground fetches those before boot. Turn networking on if you want to browse the directory inside the preview.

Versions are a preference, not a guarantee. Playground serves the builds it has; an old PHP or an exotic WordPress may quietly come back as something near it.

It is a browser tab, not a server. Expect a few seconds and several megabytes on first boot, and expect a phone to feel it.

Compatibility

The blueprint is written in your browser and the preview runs on playground.wordpress.net, which is WordPress’s own service. Nothing is sent to this site.

The blueprint travels in the URL fragment, encoded as base64. A fragment is never sent to a server, so a blueprint naming a private zip stays between you and the Playground runtime in your tab. That is also why the URL is long — the whole recipe is in it, with nothing stored anywhere.

Playground needs a current browser with WebAssembly and SharedArrayBuffer: Chrome, Edge, Firefox and Safari 16.4 or newer. The generator itself works anywhere.

Steps written here: installPlugin, installTheme, activatePlugin, activateTheme, login, setSiteOptions, defineWpConfigConsts and importWxr — all from the published blueprint schema.

Frequently asked questions

Can I use this for a plugin that is not on WordPress.org?
Yes, if the zip is reachable with CORS headers. A GitHub release asset is the usual answer. A private server generally is not, and Playground will boot without it rather than telling you.
Where does the site live?
In your browser’s memory, and nowhere else. There is no account, no server of ours involved, and closing the tab is the uninstall.
Why is the URL so long?
Because it contains the entire blueprint. That is deliberate: nothing is stored, nothing is shortened through a service that could disappear, and the link keeps working as long as Playground does.
Can I import my content?
Point the content field at a WXR export and it is imported on boot, if the file is fetchable with CORS headers. Large exports make the boot noticeably slower.
Is this the same as the WordPress Playground site?
The runtime is theirs — this writes the recipe and runs it there. What this adds is the writing: the fields, the validation that catches a bad slug before you watch it fail, and the notes about CORS and bundled plugins that the schema does not mention.

From the people who built this tool

WP Adminify

The WordPress admin, rebuilt: a dashboard worth looking at, menu and column control, a real file manager and the login page your client sees.

See WP Adminify Free version on WordPress.org

Weekly drops

New tools, when there are new tools

One email when something worth using ships. No schedule to fill, so no filler.

Your address goes nowhere else, and one click unsubscribes.