Skip to content
Nick Diego

WordPress Studio, Blueprints, and Product Marketing

I’ve spent the past few years in WordPress developer relations, helping others learn, build, and grow with the platform. That experience has led me to a new chapter on the Product Marketing team at WordPress.com, where I’ll be focusing on how we support and connect with developers and builders.

WordPress Studio has been a big part of my day-to-day, and I'll continue working on it—alongside other projects like Telex—now through a product marketing lens. It’s a slight shift in perspective, but one that gives me the chance to think more about how developers discover and use the tools we build.

That said, the latest release, Studio 1.6.0, introduced Blueprints, a feature I’ve been especially excited about. Blueprints make creating new local sites much faster. Instead of setting up a WordPress development environment from scratch, you can define a reusable “recipe” that installs your favorite plugins, activates a theme, applies site settings, and more.

If you’ve used WordPress Playground before, you’ll be familiar with how this works. Studio is powered by Playground CLI under the hood, so you can use the same Blueprints in both environments.

Here’s the Blueprint I’ve been using for most of my own projects, including this site:

{
  "$schema": "https://playground.wordpress.net/blueprint-schema.json",
  "landingPage": "/wp-admin/",
  "login": true,
  "preferredVersions": {
    "php": "8.3",
    "wp": "latest"
  },
  "plugins": [
    "block-visibility",
    "icon-block",
    "social-sharing-block",
    "gutenberg"
  ],
  "steps": [
    {
      "step": "defineWpConfigConsts",
      "consts": {
        "WP_DEBUG": true,
        "WP_DEBUG_DISPLAY": false,
        "WP_DEBUG_LOG": true,
        "WP_DEVELOPMENT_MODE": true
      },
      "method": "rewrite-wp-config"
    },
    {
      "step": "installPlugin",
      "options": {
        "activate": false
      },
      "pluginData": {
        "resource": "wordpress.org/plugins",
        "slug": "plugin-check"
      }
    },
    {
      "step": "installPlugin",
      "options": {
        "activate": true,
        "targetFolderName": "better-code-blocks"
      },
      "pluginData": {
        "resource": "git:directory",
        "url": "https://github.com/ndiego/better-code-blocks.git",
        "ref": "HEAD",
        "path": "/"
      }
    },
    {
      "step": "installPlugin",
      "options": {
        "activate": true,
        "targetFolderName": "enable-linked-groups"
      },
      "pluginData": {
        "resource": "git:directory",
        "url": "https://github.com/ndiego/enable-linked-groups.git",
        "ref": "HEAD",
        "path": "/"
      }
    },
    {
      "step": "installPlugin",
      "options": {
        "activate": true,
        "targetFolderName": "enable-button-icons"
      },
      "pluginData": {
        "resource": "git:directory",
        "url": "https://github.com/ndiego/enable-button-icons.git",
        "ref": "HEAD",
        "path": "/"
      }
    },
    {
      "step": "installPlugin",
      "options": {
        "activate": true,
        "targetFolderName": "base-blocks"
      },
      "pluginData": {
        "resource": "git:directory",
        "url": "https://github.com/ndiego/base-blocks.git",
        "ref": "HEAD",
        "path": "/"
      }
    },
    {
      "step": "installTheme",
      "options": {
        "activate": true,
        "targetFolderName": "base"
      },
      "themeData": {
        "resource": "git:directory",
        "url": "https://github.com/ndiego/base.git",
        "ref": "HEAD",
        "path": "/"
      }
    },
    {
      "step": "runPHP",
      "code": "<?php require_once '/wordpress/wp-load.php'; $wp_rewrite->set_permalink_structure( '/%postname%/' ); include_once( ABSPATH . 'wp-admin/includes/plugin.php' ); deactivate_plugins( 'hello.php', 'hello-dolly', 'akismet/akismet.php' ); include_once( ABSPATH . 'wp-admin/includes/file.php' ); delete_plugins( [ 'hello.php', 'hello-dolly', 'akismet/akismet.php' ] );"
    },
    {
      "step": "updateUserMeta",
      "meta": {
        "admin_color": "modern",
        "show_welcome_panel": 0
      },
      "userId": 1
    }
  ]
}

It’s lightweight and does exactly what I need. It sets up a development-friendly environment with my favorite plugins and my custom base theme. You can preview the Blueprint in Playground and download it to use in Studio.

Blueprints are flexible and portable. Since they’re just JSON files, they’re easy to version control and share with others. Drop one into Studio, and it will recreate the same setup every time—great for demos, testing, or scaffolding new projects. I’ve been using them across a few different workflows, and it’s been fun to see how others within Automattic have adopted them during prerelease testing of Studio 1.6.0.

If you've been working with Blueprints and have one you'd like to share, I've started a GitHub Discussion for that purpose. Feel free to add your favorites there or reach out at @nickmdiego.

For a bit more about Studio, this week I chatted with Brian Coords on his podcast Webmasters.fm.