Hi there! 👋 I’m Adam from Wrocław, Poland – a WordPress core committer at Automattic and the creator of WordPress Playground.
Here's few noteworthy things I've worked on.
WordPress Playground is WordPress in a single click. It runs directly in your web browser – there are no tedious setup steps, webhosts account, or technical talk. Just click, and it's there.
Official Playground site on WordPress.org
I prototyped Playground in a week in 2022 and been leading the project since then. Initially I just wanted to write an interactive tutorial without maintaining a hosted WordPress, but Playground became much bigger than.
Playground is truly groundbreaking. It's a renaissance of a new generation of interactive, single-click WordPress tools. There are interactive tutorials, QA (Quality Assurance) workflows, “try before you buy” previewers for plugins, collaboration tools, contribution workflows and so much more. It's also an innovation incubator where we explore Blueprints, live synchronization, native PHP XML parsers, and more.
I wrote and spoke about Playground on a few occasions:
- https://web.dev/articles/wordpress-playground
- WordCamp EU 2024
- WordCamp EU 2023
- State of the Word 2023
- State of the Word 2022
Here's a few more resources:
- WordPress Playground Demo
- GitHub repository
- Awesome WordPress Playground
- Playground for Markdown <-> Blocks conversion
Official Playground site on WordPress.org
I've built many data processing libraries for PHP and TypeScript. I was surprised to learn there were no libraries for parsing, say, XML or HTML in PHP. Well, there were some, but I needed one the was small, optimized, had no dependencies, and would work for 100% of WordPress users. Well 🤷 Now we have those and more:
- WP_HTML_Tag_Processor
- WP_XML_Processor – Streaming XML parser (based on WP_HTML_Processor).
- ZipStreamReader and ZipStreamWriter – Streaming ZIP parser and encoder.
- AsyncHttpClient – A streaming, non-blocking, concurrent, HTTPS-enabled, progress-monitoring HTTP client that works with barebones PHP 7.0 without any extensions.
All three could be piped together (with minimal glue for WP_XML_Processor) using native PHP resource variables ($fp
).
- MySQL -> SQLite translator – to run WordPress on SQLite
- WordPress -> ZIP exporter – streams all files and a database dump into ZIP archive and then directly to the response.
@php-wasm/stream-compression
– Streaming ZIP compression and decompression- nextZipEntry() – extracts the next file from a zip archive
- encodeZip() – compresses File objects into a zip archive (stream of bytes)
- decodeRemoteZip() – lists ZIP files in a remote archive, filters them, and then downloads just the subset of bytes we need to get those files
- TLS 1.2 protocol – PHP emits and accepts raw HTTPS bytes, and this enables TypeScript to act as a server and handle the outgoing traffic.
- TCP -> fetch() proxy – Stream-translates raw TCP bytes into a fetch() request and stream-encodes the response bytes. Supports HTTPS.
- Inbound TCP -> WebSockets proxy and outbound WebSockets -> TCP proxy – to connect a local WebAssembly Playground running in Node.js to the internet.
- PHP SAPI for WebAssembly – it takes request details from JavaScript and returns response bytes. It has basic support for piping streams to and from JavaScript. Works best with TypeScript PHPRequestHandler and PHPProcessManager.