home / skills / automattic / agent-skills / wp-playground

wp-playground skill

/skills/wp-playground

This skill lets you quickly spin disposable WordPress playgrounds, mount plugins/themes, switch WP/PHP versions, and debug with Xdebug.

npx playbooks add skill automattic/agent-skills --skill wp-playground

Review the files below or copy the command above to add this skill to your agents.

Files (4)
SKILL.md
4.5 KB
---
name: wp-playground
description: "Use for WordPress Playground workflows: fast disposable WP instances in the browser or locally via @wp-playground/cli (server, run-blueprint, build-snapshot), auto-mounting plugins/themes, switching WP/PHP versions, blueprints, and debugging (Xdebug)."
compatibility: "Targets WordPress 6.9+ (PHP 7.2.24+). Playground CLI requires Node.js 20.18+; runs WP in WebAssembly with SQLite."
---

# WordPress Playground

## When to use

- Spin up a disposable WordPress to test a plugin/theme without full stack setup.
- Run or iterate on Playground Blueprints (JSON) locally.
- Build a reproducible snapshot of a site for sharing or CI.
- Switch WP/PHP versions quickly to reproduce issues.
- Debug plugin/theme code with Xdebug in an isolated Playground.

## Inputs required

- Host machine readiness: Node.js ≥ 20.18, `npm`/`npx` available.
- Project path to mount (`--auto-mount` or explicit mount mapping).
- Desired WP version/PHP version (optional; defaults to latest WP, PHP 8.3).
- Blueprint location/URL if running a blueprint.
- Port preference if 9400 conflicts.
- Whether Xdebug is needed.

## Procedure

### 0) Guardrails

- Playground instances are ephemeral and SQLite-backed; **never** point at production data.
- Confirm Node ≥ 20.18 (`node -v`) before running CLI.
- If mounting local code, ensure it is clean of secrets; Playground copies files into an in-memory FS.

### 1) Quick local spin-up (auto-mount)

```bash
cd <plugin-or-theme-root>
npx @wp-playground/cli@latest server --auto-mount
```
- Opens on http://localhost:9400 by default. Auto-detects plugin/theme and installs it.
- Add `--wp=<version>` / `--php=<version>` as needed.
- For classic full installs already present, add `--skip-wordpress-setup` and mount the whole tree.

### 2) Manual mounts or multiple mounts

- Use `--mount=/host/path:/vfs/path` (repeatable) when auto-mount is insufficient (multi-plugin, mu-plugins, custom content).
- Mount before install with `--mount-before-install` for bootstrapping installer flows.
- Reference: `references/cli-commands.md`

### 3) Run a Blueprint (no server needed)

```bash
npx @wp-playground/cli@latest run-blueprint --blueprint=<file-or-url>
```
- Use for scripted setup/CI validation. Supports remote URLs and local files.
- Allow bundled assets in local blueprints with `--blueprint-may-read-adjacent-files` when required.
- See `references/blueprints.md` for structure and common flags.

### 4) Build a snapshot for sharing

```bash
npx @wp-playground/cli@latest build-snapshot --blueprint=<file> --outfile=./site.zip
```
- Produces a ZIP you can load in Playground or attach to bug reports.

### 5) Debugging with Xdebug

- Start with `--xdebug` (or `--enable-xdebug` depending on CLI release) to expose an IDE key, then connect VS Code/PhpStorm to the host/port shown in CLI output.
- Combine with `--auto-mount` for plugin/theme debugging.
- Checklist: `references/debugging.md`

### 6) Version switching

- Use `--wp=` to pin WP (e.g., 6.9.0) and `--php=` to test compatibility.
- If feature depends on Gutenberg trunk, prefer the latest WP release plus plugin if available; Playground images track stable WP plus bundled Gutenberg.

### 7) Browser-only workflows (no CLI)

- Launch quick previews with URL fragments or query params:
  - Fragment: `https://playground.wordpress.net/#<base64-or-json-blueprint>`
  - Query: `https://playground.wordpress.net/?blueprint-url=<public-url-or-zip>`
- Use the live Blueprint Editor (playground.wordpress.net) to author blueprints with schema help; paste JSON and copy a shareable link.

## Verification

- Verify mounted code is active (plugin listed/active; theme selected).
- For blueprints/snapshots, re-run with `--verbosity=debug` to confirm steps executed.
- Run targeted smoke (e.g., `wp plugin list` inside Playground shell via browser terminal if exposed) or UI click-path.

## Failure modes / debugging

- **CLI exits complaining about Node**: upgrade to ≥ 20.18.
- **Mount not applied**: check path, use absolute path, add `--verbosity=debug`.
- **Blueprint cannot read local assets**: add `--blueprint-may-read-adjacent-files`.
- **Port already used**: `--port=<free-port>`.
- **Slow/locked UI**: disable `--experimental-multi-worker` if enabled; or enable it to improve throughput on CPU-bound runs.

## Escalation

- If PHP extensions or native DB access are required, Playground may be unsuitable; fall back to full WP stack or wp-env/Docker.
- For browser-only embedding or VS Code extension specifics, consult the upstream docs: https://wordpress.github.io/wordpress-playground/

Overview

This skill provides command and workflow guidance for WordPress Playground: fast, disposable WordPress instances in the browser or locally via the @wp-playground/cli. It covers auto-mounting plugins/themes, running blueprints, building snapshots, switching WP/PHP versions, and Xdebug-based debugging. Use it to iterate on code, reproduce issues, and create shareable reproducible sites quickly.

How this skill works

The skill explains how to run the Playground CLI (server, run-blueprint, build-snapshot), pass mount mappings, and select WP/PHP versions. It details auto-mount behavior, blueprint execution, snapshot creation, and Xdebug integration. It also lists guardrails, verification steps, common failure modes, and recommended flags for reproducible runs.

When to use it

  • Quickly test a plugin or theme without installing a full stack locally
  • Iterate on a Playground Blueprint or run scripted site setups in CI
  • Create a reproducible snapshot (ZIP/blueprint) for sharing or bug reports
  • Reproduce compatibility issues by switching WP and PHP versions
  • Debug plugin/theme code with Xdebug in an isolated environment

Best practices

  • Ensure host has Node.js >= 20.18 and npm/npx available before running the CLI
  • Never point Playground at production data; instances are ephemeral and SQLite-backed
  • Use --auto-mount from the plugin/theme root for fastest iteration and detection
  • Use absolute paths with --mount and --mount-before-install for complex or multi-mount setups
  • Add --verbosity=debug when a mount, blueprint, or install step fails to get detailed diagnostics

Example use cases

  • Local iteration: cd into a plugin repo and run npx @wp-playground/cli@latest server --auto-mount to preview and test changes
  • CI validation: run npx @wp-playground/cli@latest run-blueprint --blueprint=<file-or-url> to execute scripted site builds
  • Bug reproduction: build a snapshot with build-snapshot and attach the ZIP to an issue for maintainers to reproduce
  • Compatibility testing: pin --wp=6.9.0 and --php=8.0 to validate behavior across versions
  • Remote share: author a blueprint in the live editor and share the playground URL or fragment for browser-only review

FAQ

Can I mount local code into Playground?

Yes. Use --auto-mount from your project root or explicit --mount=/host/path:/vfs/path. Use --mount-before-install when mounts must exist before WordPress setup.

How do I debug with Xdebug?

Start the server with --xdebug (or --enable-xdebug) and connect your IDE to the host/port shown in the CLI output. Combine with --auto-mount to debug your plugin/theme code.

What if the CLI complains about Node?

Upgrade Node to at least 20.18 (check with node -v). The CLI requires a modern Node runtime to run correctly.

When should I not use Playground?

If you require native PHP extensions, external DB servers, or production data, use a full WP stack or Docker/wp-env instead; Playground is ephemeral and SQLite-backed.