Troubleshoot and debug Blueprints
Blueprint errors usually point to one of three places:
- The Blueprint JSON is invalid.
- Playground could not fetch the Blueprint or one of its resources.
- A Blueprint step ran, but WordPress, PHP, WP-CLI, or a plugin failed.
Start with the exact error name shown by Playground, then use the matching section below.
Quick checklist
- Paste the Blueprint into the Blueprints editor to validate the JSON schema.
- If the Blueprint is loaded from a URL, open that URL directly in a private browser window and confirm it downloads valid JSON or a Blueprint ZIP bundle.
- If a step fails, note the step number in
BlueprintStepExecutionError. The failed step is usually the item at that position after Blueprint shorthands have been expanded. - Open browser developer tools and check the Console and Network tabs for download, CORS, PHP, or plugin activation details.
- For plugin/theme activation failures, check the Playground Logs panel or the browser console for PHP warnings and fatal errors.
InvalidBlueprintError
InvalidBlueprintError means the Blueprint does not match the
Blueprint data format. The error output usually
contains paths such as /steps/2/pluginData or /preferredVersions.
Unexpected property activate
activate belongs inside options, not directly on the step or inside
pluginData.
{
"step": "installPlugin",
"pluginData": {
"resource": "wordpress.org/plugins",
"slug": "woocommerce"
},
"options": {
"activate": true
}
}
Unexpected property plugins in preferredVersions
preferredVersions only accepts php and wp. Install plugins with the
top-level plugins shorthand or with an explicit installPlugin step.
{
"preferredVersions": {
"php": "8.3",
"wp": "latest"
},
"plugins": ["sqlite-database-integration"]
}
Missing slug, url, path, or files
The resource object is incomplete or uses the wrong shape. Common fixes:
- WordPress.org plugin:
{ "resource": "wordpress.org/plugins", "slug": "akismet" } - ZIP URL:
{ "resource": "url", "url": "https://example.com/plugin.zip" } - Git directory:
{ "resource": "git:directory", "url": "https://github.com/org/repo", "ref": "trunk", "refType": "branch" }
See Resources References for all supported resource shapes.
Mixed plugin install properties
Use pluginData for installPlugin. Do not provide both pluginData and
older examples or custom objects such as pluginZipFile.
The WordPress.org plugin resource also needs a separate slug:
{
"step": "installPlugin",
"pluginData": {
"resource": "wordpress.org/plugins",
"slug": "woocommerce"
}
}
Do not write "resource": "wordpress.org/plugins/woocommerce".
BlueprintFetchError
BlueprintFetchError means Playground could not load the file passed to
?blueprint-url=.
Check that the URL:
- Is public and does not require cookies, login, a temporary session, or a VPN.
- Returns HTTP 200 when opened directly.
- Serves valid JSON or a ZIP bundle with
blueprint.jsoninside it. - Sends
Access-Control-Allow-Origin: *or another header that allowshttps://playground.wordpress.net. - Uses a raw file URL, not a repository HTML page.
For GitHub, use raw.githubusercontent.com URLs instead of github.com/.../blob/....
For GitLab, use the raw file URL instead of a /-/blob/ page.
# Good
https://raw.githubusercontent.com/WordPress/blueprints/trunk/blueprints/welcome/blueprint.json
# Not a raw JSON response
https://github.com/WordPress/blueprints/blob/trunk/blueprints/welcome/blueprint.json
Temporary tunnel URLs, local development URLs, and draft release assets often fail because the browser cannot reach them or because they do not allow cross-origin requests. Move the Blueprint to a public host with CORS enabled.
Blueprint file is neither a valid JSON nor a ZIP file
This means Playground received a response, but the response was not a Blueprint. The URL may have returned an HTML page, 404 page, repository file viewer, proxy warning, login page, or corrupted ZIP.
Open the URL directly and check that:
- JSON URLs return valid Blueprint JSON.
- ZIP bundle URLs download a real ZIP archive.
- Blueprint bundles contain
blueprint.jsonat the root of the ZIP. - The response is not a small HTML or text error page.
URIError: URI malformed
URIError: URI malformed usually points to a broken encoded Blueprint fragment
in the URL, not to a failed Blueprint step. Check for invalid % escapes,
double-encoded fragments, or raw JSON pasted after #. Rebuild the link from
the original Blueprint and encode it once, or use Base64. See
Encoded Blueprint fragments.
ResourceDownloadError
ResourceDownloadError means the Blueprint loaded, but a step could not download
a resource such as a plugin ZIP, theme ZIP, WXR file, or imported site archive.
Confirm the resource URL:
- Downloads the actual file, not an HTML page, redirect warning, or expired artifact.
- Is public and does not require authentication.
- Allows cross-origin requests.
- Is the direct file URL. Some release pages and CI artifact pages are human pages, not direct downloads.
- Still exists. Temporary links and CI artifacts can expire.
For source code in a Git repository, prefer a
git:directory resource.
Use a url resource for built ZIP artifacts that are already publicly
downloadable.
BlueprintStepExecutionError
BlueprintStepExecutionError means a specific step failed after the Blueprint
started running. The message includes a step number:
BlueprintStepExecutionError: Error when executing the blueprint step #4
Use that number to inspect the matching step. If your Blueprint uses shorthands
such as plugins, login, siteOptions, or constants, Playground expands
them into steps before running the Blueprint. Use explicit steps when the
order matters.
URL query parameters such as ?plugin=..., ?theme=..., ?php=...,
?wp=..., and ?networking=yes also create an implicit Blueprint. Errors from
those URLs are still Blueprint execution errors, and the generated steps affect
the reported step number.