npm install playground-step-library

I have updated my Playground Step Library (which I had written about before)–the tool that allows you to use more advanced steps in WordPress Playground–so that it can now also be used programmatically: It is now an npm package: playground-step-library.

Behind the scenes this actually dominoed into migrating it to TypeScript and restructuring the code so that it now both powers the Web UI and the npm package.

Having those custom steps available now makes even more sense that the Playground CLI is production ready and you can use it for things like testing your WordPress plugin with Playwright, see this presentation Building Automated Tests with WordPress Playground from WordCamp Europe 2025 by my colleague Berislav “Bero” Grigicak.

In this example you can see a blueprint JSON that contains steps setSiteName and addPage that don’t exist in the library of steps of Playground. At the time of writing there are 36 custom steps with the goal of making it easier to do things that can be done with a blueprint already but need some complexity. See in the example below how creating a page can be done with runPHP and wp_insert_post but it’s visually easier with a step addPage.

import PlaygroundStepLibrary from 'playground-step-library';
const compiler = new PlaygroundStepLibrary();

const blueprint = {
steps: [
{
step: 'setSiteName',
sitename: 'My Site',
tagline: 'A WordPress Playground demo'
},
{
step: 'addPage',
title: 'Welcome',
content: '<p>Welcome to my site!</p>'
}
]
};

const compiledBlueprint = compiler.compile(blueprint);
console.log(compiledBlueprint);

Which turns this into a valid blueprint:

{
"steps": [
{
"step": "setSiteOptions",
"options": {
"blogname": "My Site",
"blogdescription": "A WordPress Playground demo"
}
},
{
"step": "runPHP",
"code": "\n<?php require_once '/wordpress/wp-load.php';\n$page_args = array(\n\t'post_type' => 'page',\n\t'post_status' => 'publish',\n\t'post_title' => 'Welcome',\n\t'post_content' => '<p>Welcome to my site!</p>',\n);\n$page_id = wp_insert_post( $page_args );"
}
]
}

You can then pass this blueprint to playground CLI to run it (see other demos by my colleague Fellyph):

import { runCLI, RunCLIServer } from '@wp-playground/cli';
await runCLI({
  command: 'server',
  login: true,
  blueprint: compiledBlueprint
});

You can also conveniently try it out in WordPress Playground with this link (and also view in the Step Library UI).

Finally, in the repo there are a number of examples that you can browse and I created a little screen recording of a few of them:

Happy coding!

Can’t Follow You!

So, I created this little website https://cantfollowyou.kirk.at/ as something that you can send to people who don’t realize that they are on a closed network and what it means to others. A bit like Let me Google that for you but for the Fediverse. Here is the backstory, and some details around it:

I attended (German-spoken) FediCamp Graz 2025 last Saturday (see Heinz Wittenbrink’s summary in German) where we discussed a plethora of topics around the Fediverse, barcamp-style.

One question that we discussed and that has been bugging me for a long time, is why people are quite unwilling to switch to federated, open networks.

One reason is certainly is inertia. I guess it’s a human property to stick with what you know. Also change means work.

Another reason is ignorance. You know, like “bliss.” It can be comforting to focus on the good sides of your social consumption and not deal too much with the negative sides.

Following a train of thought, I realized that maybe many people don’t realize that they can’t be followed by people who are not on their network. And don’t realize that this is a lock-in by the platform that is not necessary.

To combat this, I created a little one-page website (source on Github, open to PRs!) that is meant as something that you can take and send this URL to a person you’d like to follow who is on a closed social network.

A personalized URL https://cantfollowyou.kirk.at/insta/Alex shows the closed network and it’s alternative

It contains a table of ActivityPub equivalents of social networks (see also my WordCamp Europe 2025 presentation What you’re missing if you don’t have your own WordPress; slides, video):

At the bottom of the page you can customize it:

Probably this is not going to change the needle significantly, but I see this as a little contribution to enable raising awareness about the problem. The decentralized fediverse surely has a steeper learning curve because you need to make a choice before you start. But I think it’s worth it.