This is an archived copy of the SandyWP docs. It is kept online as a fallback and may be out of date. The maintained documentation lives at docs.sandywp.com.

Blueprints

A Blueprint is a reviewable JSON build plan for WordPress. Save it once, then use it whenever you create a sandbox or bake it into a reusable Template.

Blueprints describe how to build a site. Templates preserve the finished site. Use a Blueprint when the build plan should stay editable; use a Template when launch speed and an exact snapshot matter most.

Create a Blueprint

  1. Open Blueprints from the SandyWP app navigation.
  2. Click New Blueprint.
  3. Choose Upload ZIP, From URL, or JSON.
  4. Add an optional name and description, then click Save Blueprint.

SandyWP validates the document and adapts compatible WordPress Playground instructions automatically. The list shows whether the saved Blueprint is ready or needs attention.

Import from a URL

Use the original blueprint.json URL whenever possible. If the document references sibling files such as ./theme.zip, ./content.xml, or ./data.sql, SandyWP resolves them relative to that URL. Paths written from the bundle root — /theme.zip — resolve against the blueprint.json folder too, matching WordPress Playground.

https://raw.githubusercontent.com/example/project/main/blueprint.json

The same field also accepts a URL that serves a ZIP bundle. SandyWP downloads the archive and imports it exactly as an uploaded bundle.

https://example.com/kits/brewcommerce.zip

Upload a ZIP bundle

Upload a bundle when the Blueprint and its assets belong together. Put blueprint.json at the ZIP root or inside one top-level folder; bundled resources are resolved from that manifest folder, whether they are written as ./theme.zip or /theme.zip.

Bundles may be up to 50 MiB compressed, 250 MiB expanded, and 2,000 entries. Encrypted entries, symbolic links, duplicate entries, traversal paths, and ambiguous manifests are rejected. A bundled resource path must also remain inside its ZIP.

Paste or write JSON

Paste any self-contained Blueprint document, or type one directly in the editor. A minimal Blueprint looks like this:

{
  "$schema": "https://playground.wordpress.net/blueprint-schema.json",
  "steps": [
    {
      "step": "setSiteOptions",
      "options": {
        "blogname": "My SandyWP Site"
      }
    }
  ]
}
Pasted JSON has no source URL. Relative bundled files such as ./theme.zip therefore cannot be located. Import those Blueprints from their original URL instead.

Start a sandbox from a Blueprint

  1. Open My sites and click New sandbox.
  2. Open the starting-point picker and choose a saved Blueprint.
  3. Review the stack and site name, then create the sandbox.

SandyWP provisions a normal container first and runs the compatible Blueprint steps inside it. Progress and errors appear in the same creation dialog.

Manage saved Blueprints

Click a Blueprint row to edit it. Open the menu—or right-click the row—to access the other actions:

  • Edit Blueprint updates the Blueprint document and display details.
  • Save as Template runs the Blueprint and stores the finished site as a snapshot.
  • Delete Blueprint removes the Blueprint without deleting Templates already baked from it.

Starter Blueprints

Copy one of these examples into the JSON tab, then adjust it for your project. These are intentionally small so every instruction remains easy to review.

Blank WordPress Starter · Clean install · Latest WordPress · No dependencies View JSON

A clean WordPress site with a useful title and no extra plugins or themes.

{
  "$schema": "https://playground.wordpress.net/blueprint-schema.json",
  "steps": [
    {
      "step": "setSiteOptions",
      "options": {
        "blogname": "My SandyWP Site",
        "blogdescription": "A clean WordPress sandbox"
      }
    }
  ]
}
Plugin Lab Development · Query Monitor · WP Crontrol · Debug-friendly View JSON

A practical debugging workspace with Query Monitor and WP Crontrol activated.

{
  "$schema": "https://playground.wordpress.net/blueprint-schema.json",
  "steps": [
    {
      "step": "installPlugin",
      "pluginData": {
        "resource": "wordpress.org/plugins",
        "slug": "query-monitor"
      },
      "options": {
        "activate": true
      }
    },
    {
      "step": "installPlugin",
      "pluginData": {
        "resource": "wordpress.org/plugins",
        "slug": "wp-crontrol"
      },
      "options": {
        "activate": true
      }
    },
    {
      "step": "setSiteOptions",
      "options": {
        "blogname": "Plugin Lab",
        "blogdescription": "A SandyWP plugin testing workspace"
      }
    }
  ]
}
WooCommerce Store Commerce · WooCommerce · Store foundation · Ready to configure View JSON

A fresh storefront foundation with WooCommerce installed and activated.

{
  "$schema": "https://playground.wordpress.net/blueprint-schema.json",
  "steps": [
    {
      "step": "installPlugin",
      "pluginData": {
        "resource": "wordpress.org/plugins",
        "slug": "woocommerce"
      },
      "options": {
        "activate": true
      }
    },
    {
      "step": "setSiteOptions",
      "options": {
        "blogname": "My Store",
        "blogdescription": "A WooCommerce store built on SandyWP"
      }
    }
  ]
}
Theme Preview Design · Twenty Twenty-Five · Theme activated · Design sandbox View JSON

A minimal site running the Twenty Twenty-Five theme for visual exploration.

{
  "$schema": "https://playground.wordpress.net/blueprint-schema.json",
  "steps": [
    {
      "step": "installTheme",
      "themeData": {
        "resource": "wordpress.org/themes",
        "slug": "twentytwentyfive"
      },
      "options": {
        "activate": true
      }
    },
    {
      "step": "setSiteOptions",
      "options": {
        "blogname": "Theme Preview",
        "blogdescription": "Explore a WordPress theme in SandyWP"
      }
    }
  ]
}
Classic Blog Publishing · Classic Editor · Posts homepage · Writer-friendly View JSON

A straightforward publishing setup with the familiar Classic Editor.

{
  "$schema": "https://playground.wordpress.net/blueprint-schema.json",
  "steps": [
    {
      "step": "installPlugin",
      "pluginData": {
        "resource": "wordpress.org/plugins",
        "slug": "classic-editor"
      },
      "options": {
        "activate": true
      }
    },
    {
      "step": "setSiteOptions",
      "options": {
        "blogname": "My Blog",
        "blogdescription": "Stories, notes, and ideas",
        "show_on_front": "posts"
      }
    }
  ]
}

Compatibility matrix

SandyWP validates the original recipe and reports every compatibility change before execution. An information or warning finding does not block a run; an error does.

CategoryWhat SandyWP doesExamples
Natively providedRemoves the Playground flag and records an information finding.features.networking and features.intl are removed regardless of their JSON boolean value. SandyWP containers always provide real outbound networking and PHP intl, so networking: false does not disable egress.
Automatically adaptedRewrites the instruction or resource into a SandyWP-compatible equivalent.Legacy Playground GitHub proxy URLs become direct GitHub resources; importWxr becomes a temporary-file and WP-CLI import; supported Playground-only step metadata is removed.
Ignored and reportedRemoves the field or step and shows an information or warning finding.landingPage, Blueprint login, phpExtensionBundles, progress captions, and collision policy metadata. Unsupported steps such as request and resetData are dropped, never silently executed.
Prohibited or blockingKeeps the Blueprint from running until the error is corrected.Unknown features keys, other schema errors, absolute local filesystem paths, and unresolved bundled resources in pasted JSON. Unsafe ZIP paths and archives outside the bundle limits are rejected during upload.
Known native flags are handled narrowly. SandyWP does not blanket-ignore new or misspelled features keys, so an unknown key remains a blocking schema error.

Blueprint execution can run PHP, SQL, and WP-CLI, so running or baking a Blueprint requires a paid plan.

Next steps