Title: Page 4 – Alex Kirk

---

 * 
   ## 󠀁[npm install playground-step-library](https://alex.kirk.at/2025/09/05/npm-install-playground-step-library/)󠁿
   
 * September 5, 2025
 * I have updated [my Playground Step Library](https://github.com/akirk/playground-step-library/)(
   [which I had written about before](https://alex.kirk.at/2024/07/11/wordpress-playground-step-library/))–
   the tool that allows you to use [more advanced steps](https://github.com/akirk/playground-step-library/tree/main/docs)
   in [WordPress Playground](https://playground.wordpress.net/)–so that it can now
   also be used programmatically: It is now an npm package: [playground-step-library](https://www.npmjs.com/package/playground-step-library).
 * Behind the scenes this actually [dominoed into](https://github.com/akirk/playground-step-library/pull/5)
   migrating it to TypeScript and restructuring the code so that it now both powers
   the [Web UI](https://akirk.github.io/playground-step-library/) and the npm package.
 * Having those custom steps available now makes even more sense that the [Playground CLI](https://www.npmjs.com/package/@wp-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](https://wordpress.tv/2025/06/07/building-automated-tests-with-wordpress-playground/)
   from WordCamp Europe 2025 by my colleague [Berislav “Bero” Grigicak](https://github.com/bgrgicak/).
 * 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](https://wordpress.github.io/wordpress-playground/blueprints/steps/#).
   At the time of writing there are [36 custom steps](https://github.com/akirk/playground-step-library/tree/main/docs#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`.
 *     ```wp-block-preformatted
       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:
 *     ```wp-block-preformatted
       {  "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](https://github.com/fellyph/playwright-testing-plugin/tree/main/demos)
   by my colleague [Fellyph](https://blog.fellyph.com.br/)):
 *     ```wp-block-code
       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](https://playground.wordpress.net/?blueprint-url=data:application/json;base64,eyJzdGVwcyI6W3sic3RlcCI6InNldFNpdGVPcHRpb25zIiwib3B0aW9ucyI6eyJibG9nbmFtZSI6Ik15IFNpdGUiLCJibG9nZGVzY3JpcHRpb24iOiJBIFdvcmRQcmVzcyBzaXRlIn19LHsic3RlcCI6InJ1blBIUCIsImNvZGUiOiI8P3BocCByZXF1aXJlX29uY2UgJy93b3JkcHJlc3Mvd3AtbG9hZC5waHAnO1xuJHBhZ2VfYXJncyA9IGFycmF5KFxuJ3Bvc3RfdHlwZScgICAgPT4gJ3BhZ2UnLFxuJ3Bvc3Rfc3RhdHVzJyAgPT4gJ3B1Ymxpc2gnLFxuJ3Bvc3RfdGl0bGUnICAgPT4gJ1dlbGNvbWUnLFxuJ3Bvc3RfY29udGVudCcgPT4gJzxwPldlbGNvbWUgdG8gbXkgc2l0ZSE8L3A%2BJyxcbik7XG4kcGFnZV9pZCA9IHdwX2luc2VydF9wb3N0KCAkcGFnZV9hcmdzICk7dXBkYXRlX29wdGlvbiggJ3BhZ2Vfb25fZnJvbnQnLCAkcGFnZV9pZCApO3VwZGF0ZV9vcHRpb24oICdzaG93X29uX2Zyb250JywgJ3BhZ2UnICk7In1dfQ%3D%3D)(
   and also [view in the Step Library UI](https://akirk.github.io/playground-step-library/#eyJzdGVwcyI6W3sic3RlcCI6InNldFNpdGVOYW1lIiwidmFycyI6eyJzaXRlbmFtZSI6Ik15IFNpdGUiLCJ0YWdsaW5lIjoiQSBXb3JkUHJlc3Mgc2l0ZSJ9fSx7InN0ZXAiOiJhZGRQYWdlIiwidmFycyI6eyJwb3N0VGl0bGUiOiJXZWxjb21lIiwicG9zdENvbnRlbnQiOiI8cD5XZWxjb21lIHRvIG15IHNpdGUhPC9wPiIsImhvbWVwYWdlIjp0cnVlfX1dfQ==)).
 * Finally, in the repo there are [a number of examples](https://github.com/akirk/playground-step-library/tree/main/examples)
   that you can browse and I created a little screen recording of a few of them:
 * ![](https://alex.kirk.at/wp-content/uploads/sites/2/2025/09/playground-step-library-
   examples.gif)
 * Happy coding!
 * 
   ###### Fediverse Reactions
   
    -  [ ⌊Chuck Grimmett⌉ ](https://cagrimmett.com/likes/5407876ea4/)
 * [Code](https://alex.kirk.at/category/code/), [Playground](https://alex.kirk.at/category/wordpress/playground/)
 * 
   ## 󠀁[Can’t Follow You!](https://alex.kirk.at/2025/06/19/cant-follow-you/)󠁿
   
 * June 19, 2025
 * So, I created this little website [https://cantfollowyou.kirk.at/](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](https://letmegooglethat.com/)
   but for the Fediverse. Here is the backstory, and some details around it:
 * I attended (German-spoken) [FediCamp Graz 2025](https://graz.fedi.camp/) last
   Saturday (see [Heinz Wittenbrink’s summary in German](https://wittenbrink.net/das-erste-grazer-fedicamp/))
   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](https://alex.kirk.at/2025/04/24/wordpress-as-a-refuge-from-algorithms/).
 * 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](https://cantfollowyou.kirk.at/)(
   [source on Github](https://github.com/akirk/cantfollowyou), 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](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](https://europe.wordcamp.org/2025/session/what-youre-missing-if-you-dont-have-your-own-wordpress/);
   [slides](https://alex.kirk.at/wceu2025/), [video](https://wordpress.tv/2025/06/07/what-youre-missing-if-you-dont-have-your-own-wordpress/)):
 * [[
 * At the bottom of the page you can customize it:
 * ![](https://alex.kirk.at/wp-content/uploads/sites/2/2025/06/cantfollowyou-enter.gif)
 * 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.
 * 
   ###### Fediverse Reactions
   
    -  [ ⌊James Huff :prami_pride_pan:⌉ ](https://social.lol/@macmanx)
    -  [ ⌊Simon⌉ ](https://dewp.space/@simon)
    -  [ ⌊Peter Müller⌉ ](https://mastodon.social/@pmmueller)
    -  [ ⌊Thomas Kräftner⌉ ](https://mastodon.social/@kraftner)
    -  [ ⌊Annette Schwindt⌉ ](https://bonn.social/@annette)
    -  [ ⌊Bandar Baru⌉ ](https://mastodon.social/@bandarbaru_1)
    -  [ ⌊Aurin Azadî⌉ ](https://mastodon.de/@atarifrosch)
 *  -  [ ⌊André Menrath⌉ ](https://graz.social/@linos)
    -  [ ⌊Pauxlll Kruczynski⌉ ](https://mastodon.social/@paulkruczynski)
    -  [ ⌊Simon⌉ ](https://dewp.space/@simon)
    -  [ ⌊Peter Müller⌉ ](https://mastodon.social/@pmmueller)
    -  [ ⌊Donncha Ó Caoimh⌉ ](https://mastodon.ie/@donncha)
    -  [ ⌊Thomas Kräftner⌉ ](https://mastodon.social/@kraftner)
    -  [ ⌊Matthias Zöchling⌉ ](https://mas.to/@CSSence)
    -  [ ⌊Irene Bär⌉ ](https://freiburg.social/@irene)
    -  [ ⌊mike @here⌉ ](https://social.coop/@herebox)
 * [Fediverse](https://alex.kirk.at/category/fediverse/), [Web](https://alex.kirk.at/category/web/)

 [Previous Page](https://alex.kirk.at/page/3/?output_format=md&term_id=44051) [Next Page](https://alex.kirk.at/page/5/?output_format=md&term_id=44051)