How WordPress Playground cut PHP.wasm binary sizes by 122 MB

Every PHPPHP PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used open source general-purpose scripting language that is especially suited for web development and can be embedded into HTML. https://www.php.net/manual/en/preface.php version WordPress Playground supports ships as a WebAssembly binary. Across all builds and versions, those binaries totaled 888 MB. Two compiler flag changes reduced that to 766 MB, a 122 MB saving (13.7%) without removing a single feature.

What changed?

Playground compiles PHP to WebAssembly using Emscripten. The compiler flag MAIN_MODULE controls which symbols get exported for dynamic linking. Previously, Playground used MAIN_MODULE=1, which exports everything, including thousands of symbols that no extension ever calls.

Switching to MAIN_MODULE=2 tells Emscripten to export only the symbols extensions actually use, similar to tree-shaking in JavaScriptJavaScript JavaScript or JS is an object-oriented computer programming language commonly used to create interactive effects within web browsers. WordPress makes extensive use of JS for a better user experience. While PHP is executed on the server, JS executes within a userโ€™s browser. https://www.javascript.com bundlers. The compiler drops everything else.

The challenge: keeping extensions alive

Flipping a compiler flag sounds simple, but MAIN_MODULE=2 aggressively eliminates code that the main module considers โ€œdead.โ€ Playground loads extensions like Intl, Xdebug, Memcached, and Redis as dynamic .so modules, and those modules depend on specific symbols from the main PHP binary. Remove the wrong symbol, and the extension crashes on load.

PR #3244 first mapped the approach: scanning each compiled extension wasm-dis to extract which symbols it references. The build system then feeds those symbols back to the linker as explicit exports, keeping every extension working while eliminating thousands of unused ones.

Three extensions required direct fixes. Xdebug required a __c_longjmp WebAssembly tag injection. Memcached called recv and setsockopt through libmemcached internals, so the build added C shim wrappers. Intl alone needed over 5,000 export symbols, including libc++ functions.

Why two build types?

PHP is synchronous. Browsers are not. Playground solves this mismatch with two compilation strategies, and each one produces a separate set of binaries:

  • Asyncify transforms compiled code at build time so it can pause and resume execution. This approach works in every browser but adds overhead to the binary. Learn more about Asyncify.
  • JSPI (JavaScript Promise Integration) takes a different approach. It lets WebAssembly call async browser APIs directly, without transforming the compiled code. JSPI produces smaller binaries but currently requires V8-based browsers (Chrome, Edge). Learn more about JSPI.

Playground ships both variants for each PHP version, so the MAIN_MODULE=2 optimization is applied to both:

  • PR #3332 targeted JSPI builds.
  • PR #3335 completed the same change for Asyncify builds.

The numbers

MetricBeforeAfterSaved
Total binary size888 MB766 MB122 MB (13.7%)
.wasm files680 MB571 MB109 MB (16%)
JS glue code22.7 MB8.2 MB14.5 MB (63%)

Per-version .wasm sizes dropped consistently across all supported PHP versions:

PHP VersionBefore (avg)After (avg)Reduction
7.4~20 MB~17 MB17-19%
8.2~25 MB~21 MB15-17%
8.4~27 MB~23 MB14-16%
8.5~28 MB~24 MB14-15%

The two PRs combined removed 554,793 lines of JavaScript glue code across all builds.

Why smaller binaries matter

Faster downloads and CI. 122 MB fewer bytes to transfer during repository clones, CI pipelines, and deployments. That adds up across all contributors and all automated runs.

Faster WebAssembly instantiation. Smaller .wasm files compile faster in the browser. Compilation cost scales roughly with binary size, so 16% smaller binaries translate directly to faster WordPress startup.

Lower memory usage. Fewer exported symbols produce a smaller function table. The runtime allocates less memory before PHP even starts.

Faster JavaScript parsing. 63% less JS glue code means the browser parses and evaluates significantly less JavaScript before handing control to PHP.

What this means for php-wasm packages

Version-specific packages like @php-wasm/web-8.4 and @php-wasm/node-8.4 ship lighter binaries. No APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways. changes โ€” this is purely a build optimization. Existing code that depends on these packages works unchanged.

What comes next

The next step is to benchmark the runtime impact by measuring instantiation time, time-to-first-PHP-response, and memory usage across builds. Those numbers will confirm how the smaller binaries translate to real-world performance gains.

Props to @mho22 for implementing both PRs and reviewing the post, @brandonpayton for reviewing, and @adamziel for the architectural direction. See the full details in PR #3332 and PR #3335.

Playground Meetings Summaries โ€“ February 2026

This post covers the two Playground meetings held in February 2026. These are bi-weekly chats where contributors to WordPress Playground gather to discuss updates, ongoing work, and plans for current and future releases. All are welcome to join.

Meeting 1 โ€“ February 13, 2026

Facilitator: Fellyph Cintra

Announcements

Three posts worth highlighting from the past weeks:

  • wp-env now runs WordPress with Playground runtime โ€” WordPress Playground is now available in wp-env as an alternative to Docker.
  • Whatโ€™s new for developers? (February 2026) โ€” A roundup of developer-focused updates from the beginning of the year, including several Playground highlights.
  • WordPress Studio 1.7.0 received substantial CLICLI Command Line Interface. Terminal (Bash) in Mac, Command Prompt in Windows, or WP-CLI for WordPress. updates โ€” nearly every feature is now controllable from the command line, improving compatibility with AI-assisted development tools such as Claude Code and Cursor.

Documentation

Three documentation pull requests landed since the last meeting:

  • #3188 โ€” Refreshes screenshots and rewrites content for the web instance page to reflect the latest UIUI UI is an acronym for User Interface - the layout of the page the user interacts with. Think โ€˜how are they doing thatโ€™ and less about what they are doing..
  • #3242 โ€” Updates the โ€œHost Your Own Playgroundโ€ self-hosting page with current instructions and improved clarity.
  • #3103 โ€” Adds a new beginner-friendly โ€œPlayground for Everyoneโ€ guide explaining what WordPress Playground is and how anyone can use it.

Translations

New translations were added for Bengali and Japanese. Thank you to @noruzzaman and @shimomura tomoki for their contributions.

  • #3177 โ€” Updates translations.md for multiple languages.
  • #3249, #3230, #3229, #3231 โ€” Bengali translations for several guides and documentation pages.
  • #3228 โ€” Japanese translations for developer architecture, PHPPHP PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used open source general-purpose scripting language that is especially suited for web development and can be embedded into HTML. https://www.php.net/manual/en/preface.php, and browser-concepts pages.

Other notable changes

  • Website โ€” A new URLURL A specific web address of a website or web page on the Internet, such as a websiteโ€™s URL www.wordpress.org route enables deep-linking directly to the Blueprint Gallery overlay using the ?overlay=blueprints parameter.
  • CLI โ€” A new --phpmyadmin flag spins up a phpMyAdmin instance for inspecting and managing the SQLite database from the command line.
  • Blueprints โ€” Removed an unnecessary dependency on @php-wasm/web from the blueprints package, reducing bundle size and decoupling the two packages.
  • Safari โ€” Multiple improvements shipped following community feedback shared on X.

In total, 32 pull requests were merged since the last meeting.

Updates from contributors

  • Fellyph Cintra โ€” Researching the migrationMigration Moving the code, database and media files for a website site from one server to another. Most typically done when changing hosting companies. of Playground documentation to the .org Handbook, documenting the process of integrating Playground with code agents, and submitting a new skill for blockBlock Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. pattern creation to the WordPress repository.
  • Brandon Payton โ€” Continuing work on making multi-worker mode non-experimental in the Playground CLI, with expanded test coverage now running on Windows, macOS, and Linux.
  • Jan Jakes (@janjakes) โ€” Added phpMyAdmin support to the Playground CLI. Try it with npx @wp-playground/cli@latest server --phpmyadmin. An overview post on the SQLite side is also coming soon.
  • Adam Zieliล„ski โ€” Working on importing WordPress sites between hosts, which will enable moving sites between Playground instances and hosted environments.

Open floor

Fellyph shared a demo of WordPress Playground used together with Claude Code and the DevTools MCP server, highlighting how Claude Code decides whether to fix code directly or use the Site Editor to fulfill requests. The team is curious to hear from the community: are you using Playground with code agents, and what has your experience been like?

If you are interested in contributing to the documentation migration to the .org Handbook, reach out to Fellyph directly via SlackSlack Slack is a Collaborative Group Chat Platform https://slack.com/. The WordPress community has its own Slack Channel at https://make.wordpress.org/chat/ DM.


Meeting 2 โ€“ February 27, 2026

Facilitator: Fellyph Cintra

Announcements

The team is currently investigating stability issues affecting WordPress Playground with WordPress 7.0 BetaBeta A pre-release of software that is given out to a large group of users to trial under real conditions. Beta versions have gone through alpha testing in-house and are generally fairly close in look, feel and function to the final product; however, design changes often occur as part of the process. and GutenbergGutenberg The Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses โ€˜blocksโ€™ to add richness rather than shortcodes, custom HTML etc. https://wordpress.org/gutenberg/ v22.6.0. Two related pull requests are in progress:

  • #3312 โ€” Avoids cross-origin policy errors in the editor.
  • #3301 โ€” Fixes a blank /wp-admin page caused by responses crossing the Comlink worker boundary.

Thanks to everyone who reported issues โ€” your feedback helped with the investigation. More fixes are expected in the coming days.

Two posts were published this week:

WordPress 7.0 Beta 2 is now available for testing on WordPress Playground. If you encounter any issues, please report them on GitHubGitHub GitHub is a website that offers online implementation of git repositories that can easily be shared, copied and modified by other developers. Public repositories are free to host, private repositories require a paid subscription. GitHub introduced the concept of the โ€˜pull requestโ€™ where code changes done in branches by contributors can be reviewed and discussed before being merged by the repository owner. https://github.com/.

Project updates

22 pull requests have been merged since the last meeting. New feature work was paused to focus on WordPress 7.0 stability investigations.

CLI

  • #3288 โ€” Removes a duplicated โ€œPlayground CLI Readyโ€ log line to keep startup output clean.
  • #3238 โ€” Detects โ€œport already in useโ€ errors and returns a clear, actionable message.
  • #3150 โ€” Fixes Windows native file-locking issues in the multi-threaded CLI architecture.

PHP.wasm

  • #3287 โ€” Adds PHP function names and refactors the test suite to improve coverage and maintainability.
  • #3234 โ€” Adds a cp (copy) method to Universal PHP for file duplication via the PHP.wasm filesystem APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways..

Translations

New translations were added for Bengali and Japanese. Thank you to @noruzzaman and @shimomura tomoki for their continued contributions.

Documentation

Updates from contributors

  • Fellyph Cintra โ€” Migrating the documentation to the .org Handbook, working on the Agent Skill guide and the two CLI posts. Started testing Playground with Claude Code and Gemini HooksHooks In WordPress theme and development, hooks are functions that can be applied to an action or a Filter in WordPress. Actions are functions performed when a certain event occurs in WordPress. Filters allow you to modify certain functions. Arguments used to hook both filters and actions look the same.; a post about it is coming soon.
  • Jan Jakes (@janjakes) โ€” Improving the agentic experience and setup for Playground and SQLite integration, and investigating performance and memory consumption.
  • Yannick Decat โ€” Compiling PHP.wasm with MAIN_MODULE=2 to reduce .wasm and .js file sizes, and implementing path mappings and path skipping in Xdebug 3.5. Also experimenting with Xdebug in the browser.
  • Bero โ€” Working on an MCP server for the Playground website, including WebMCP support.
  • Adam Zieliล„ski โ€” The WordPress site migrator is working. Next steps include URL rewriting for cross-domain moves and Playground integration.

Open floor

The team discussed what tools would be most useful in an MCP server for Playground. If you have ideas, share them in the comments below or on the relevant GitHub pull requests.

The next Playground chat will be on March 10th in the #playground Slack channel. All are welcome to join.

Simplify your workflow with the new Playground CLI start command

Setting up a local WordPress environment should be as simple as running a single command. We are excited to introduce the new start command in the WordPress Playground CLICLI Command Line Interface. Terminal (Bash) in Mac, Command Prompt in Windows, or WP-CLI for WordPress., simplifying how you run your local environments.

A simpler way to start

The WordPress Playground CLI is a powerful tool for running WordPress in your terminal. The command server allows users to customize the Playground instance at several levels, but those customizations can be daunting for users who want to run a WordPress instance with a theme/pluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party.. With the introduction of the high-level start command (introduced in PR #3040), you can launch a local WordPress instance more intuitively.

Instead of configuring complex parameters, you can now run:

npx @wp-playground/cli start

This command automatically configures the environment with sensible defaults, so you can focus on building.

Persistence by default

The most significant update in this release is persistence (PR #3119). Previously, closing the CLI meant losing your database and file changes unless you manually configured mounts. This update is a major milestone toward simplifying the WordPress development ecosystem. By adding persistence and a high-level entry point, the Playground CLI achieves feature parity with wp-now.

Now, the start command automatically saves your siteโ€™s state in your home directory (~/.wordpress-playground/sites/). This ensures your plugins, themes, and content are preserved between sessions. You can stop your server and resume exactly where you left off.

Quick reset for a fresh start

Sometimes, you need to start over. If you want to wipe your persisted site and begin with a clean installation, use the --reset flag:

npx @wp-playground/cli start --reset

Other flags are available for the `start` command:

  • --blueprint โ€” Execute a Blueprint file to preconfigure your site with plugins, themes, settings, and content.
  • --php โ€” Choose your PHPPHP PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used open source general-purpose scripting language that is especially suited for web development and can be embedded into HTML. https://www.php.net/manual/en/preface.php version. Supported versions: 7.4, to 8.5. Defaults to 8.3.
  • --wp โ€” Set the WordPress version. Defaults to latest.
  • --port โ€” Define the port for the local server. Defaults to 9400.
  • --login โ€” Automatically log in to the WordPress dashboard on launch.

Get started

The start command is available now in the latest version of @wp-playground/cli. Whether youโ€™re testing a new plugin or building a theme, the Playground CLI provides a lightweight, zero-config environment directly in your terminal.

To learn more, check the Playground CLI documentation.

Manage your database directly from the Playground CLI

Need to inspect WordPress data, debug a query, or check if a pluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party. saved options correctly? The Playground CLICLI Command Line Interface. Terminal (Bash) in Mac, Command Prompt in Windows, or WP-CLI for WordPress. now includes a --phpmyadmin flag that launches phpMyAdmin alongside your local WordPress instance. No extra setup, no separate database server, just one command.

Where is your data?

When developing locally with Playground CLI, you often need to verify what the database actually contains. Until now, doing that required writing custom PHPPHP PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used open source general-purpose scripting language that is especially suited for web development and can be embedded into HTML. https://www.php.net/manual/en/preface.php queries or adding debug output to your code.

The --phpmyadmin flag solves this by giving you a full phpMyAdmin interface right from the CLI.

Getting started

Add --phpmyadmin to your regular CLI command:

npx @wp-playground/cli@latest server --phpmyadmin

After WordPress boots, the CLI prints the phpMyAdmin URLURL A specific web address of a website or web page on the Internet, such as a websiteโ€™s URL www.wordpress.org:

WordPress Playground CLI

PHP 8.3  WordPress latest
Extensions intl

Ready! WordPress is running on http://127.0.0.1:9400 (11 workers)

phpMyAdmin available at http://127.0.0.1:9400/phpmyadmin/index.php?route=/database/structure&db=wordpress

Open that URL in your browser, and you get full access to browse tables, run SQL queries, and inspect your WordPress data:

Image

Custom URL path

By default, phpMyAdmin serves at /phpmyadmin. Change this path to anything you prefer:

npx @wp-playground/cli@latest server --phpmyadmin=/my-db

This serves phpMyAdmin at http://127.0.0.1:9400/my-db/index.php instead.

Combine with other CLI flags

The --phpmyadmin flag works alongside all existing CLI options:

Test a plugin and inspect its database changes

npx @wp-playground/cli@latest server --phpmyadmin --auto-mount

Run this from your plugin directory. Playground mounts your plugin automatically, and phpMyAdmin lets you verify the database tables and options your plugin creates.

Pin a specific WordPress and PHP version

npx @wp-playground/cli@latest server --phpmyadmin --wp=latest --php=8.5

Useful when you need to check how your plugin handles data across different WordPress versions.

Use a Blueprint with phpMyAdmin

npx @wp-playground/cli@latest server --phpmyadmin --blueprint=my-blueprint.json

Combine Blueprints with phpMyAdmin to pre-configure your WordPress instance and then inspect the resulting database state.

Cache phpMyAdmin for faster starts

Each time you use --phpmyadmin, Playground downloads and installs phpMyAdmin into the instance. To skip the download on subsequent runs, mount a local directory to cache the files:

mkdir -p ./pma-cache
npx @wp-playground/cli@latest server --phpmyadmin --mount ./pma-cache:/tools/phpmyadmin

The first run populates ./pma-cache with the phpMyAdmin files. On every subsequent run, Playground detects the existing installation and skips the download.

Where this helps

Here are some practical scenarios where --phpmyadmin saves time:

  • Plugin development: Verify that your plugin creates the correct custom tables and stores data in the expected format.
  • Debugging options: Check wp_options directly to confirm your plugin settings saved correctly, without writing get_option() debug code.
  • Content migrationMigration Moving the code, database and media files for a website site from one server to another. Most typically done when changing hosting companies. testing: Import content via a Blueprint and verify the resulting posts, terms, and metadata in the database.
  • Learning WordPress internals: Explore how WordPress organizes its database tables โ€” see how posts relate to postmeta, how taxonomies link to terms, and how user data connects across tables.
  • SQL query testing: Run raw SQL queries against your test data before embedding them in your plugin code.

How it works under the hood

phpMyAdmin installs at /tools/phpmyadmin on the virtual filesystem โ€” outside the WordPress document root at /wordpress. The CLI uses a path alias (similar to NginxNGINX NGINX is open source software for web serving, reverse proxying, caching, load balancing, media streaming, and more. It started out as a web server designed for maximum performance and stability. In addition to its HTTP server capabilities, NGINX can also function as a proxy server for email (IMAP, POP3, and SMTP) and a reverse proxy and load balancer for HTTP, TCP, and UDP servers. https://www.nginx.com/.โ€™s alias directive) to serve it at your chosen URL path. This design keeps phpMyAdmin files separate from your WordPress installation, so they never appear in site exports or interfere with your project files.

Since Playground uses SQLite instead of MySQLMySQL MySQL is a relational database management system. A database is a structured collection of data where content, configuration and other options are stored. https://www.mysql.com, phpMyAdmin connects through a custom MySQL-on-SQLite driver that translates queries between the two dialects.

Share your feedback

The phpMyAdmin integration in the CLI came from the same effort that brought the Database panel to the Playground web interface. If you run into issues or have suggestions, share them on the Making WordPress Slack or open an issue on GitHub.

Props to @JanJakes for reviewing this post.

wp-env now runs WordPress with Playground runtime

wp-env is one of the alternatives to run a WordPress Environment; by default, it uses Docker. What if you could run a full WordPress development environment without installing Docker? With the new experimental Playground runtime for wp-env, you can.

One command. Zero Docker. Full WordPress:

npx @wordpress/env start --runtime=playground

This launches a complete WordPress environment in seconds using Node.js.

Why does this matter?

The Playground runtime offers a lightweight alternative for WordPress development. No extra software installation required; if you have Node.js, youโ€™re ready to go.

What makes the Playground runtime appealing:

  • Zero additional installation โ€“ Just Node.js, no Docker setup needed
  • Lightweight bundle โ€“ WordPress Playground runs lean with minimal resource usage
  • Fast startup โ€“ Get a running WordPress instance in seconds
  • Works everywhere Node.js runs โ€“ Linux, macOS, Windows, CI pipelines

What works in both runtimes?

The good news: most wp-env features work identically in both runtimes. Hereโ€™s the official comparison:

FeatureDockerPlayground
PluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party./theme mountingโœ…โœ…
Custom PHPPHP PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used open source general-purpose scripting language that is especially suited for web development and can be embedded into HTML. https://www.php.net/manual/en/preface.php versionsโœ…โœ…
Xdebug supportโœ…โœ…
MultisiteMultisite Multisite is a WordPress feature which allows users to create a network of sites on a single WordPress installation. Available since WordPress version 3.0, Multisite is a continuation of WPMU or WordPress Multiuser project. WordPress MultiUser project was discontinued and its features were included into WordPress core. Advanced Administration Handbook -> Create A Network.โœ…โœ… (experimental)
MySQLMySQL MySQL is a relational database management system. A database is a structured collection of data where content, configuration and other options are stored. https://www.mysql.com databaseโœ…โŒ (SQLite)
phpMyAdminโœ…โŒ (planned)
SPX profilingโœ…โŒ
Separate tests environmentโœ…โŒ
wp-env run commandโœ…โŒ

The Playground runtime uses SQLite instead of MySQL. For most WordPress development, you wonโ€™t notice the difference; your plugins and themes work the same way.

Multisite support is available but hasnโ€™t been extensively tested yet, so treat it as experimental for now.

phpMyAdmin is not yet supported in the Playground runtime. Once it becomes available in the Playground CLICLI Command Line Interface. Terminal (Bash) in Mac, Command Prompt in Windows, or WP-CLI for WordPress., wp-env will integrate it. You can already use phpMyAdmin directly with the Playground CLI:

npx @wp-playground/cli server --phpmyadmin              # serves at http://127.0.0.1:9400/phpmyadmin
npx @wp-playground/cli server --phpmyadmin=/custom-path # serves at http://127.0.0.1:9400/custom-path

What about my existing configuration?

The Playground runtime supports most existing .wp-env.json configuration files:

{
  "core": "WordPress/WordPress#6.8",
  "plugins": ["./my-plugin"],
  "themes": ["./my-theme"],
  "phpVersion": "8.2"
}

This configuration works with both runtimes. Once you start wp-env with a specific runtime, wp-env remembers your choice. Subsequent commands wp-env stop automatically use the same runtime. To switch runtimes, destroy the environment with wp-env destroy and start fresh with your preferred runtime flag.

When should you still use Docker?

The Playground runtime is experimental. Choose Docker when you need:

  • A separate test environment โ€“ Dockerโ€™s wp-env creates an isolated instance for running tests
  • The wp-env run command โ€“ Execute arbitrary commands inside the environment
  • MySQL database โ€“ Some plugins require MySQL-specific features that SQLite doesnโ€™t support
  • SPX profiling โ€“ Performance profiling with the SPX extension
  • SSHSSH Secure SHell - a protocol for securely connecting to a remote system in addition to or in place of a password. access โ€“ Shell into the environment directly

For development workflows that require deep environment access, running WP-CLIWP-CLI WP-CLI is the Command Line Interface for WordPress, used to do administrative and development tasks in a programmatic way. The project page is http://wp-cli.org/ https://make.wordpress.org/cli/ commands inside the environment, debugging PHP processes, or customizing the server stack, Docker remains the right choice.

Resources:

Share your feedback

This feature is experimental, and your feedback shapes its direction. Does it work for your workflow? Whatโ€™s missing? What breaks?

Share your experience atย #playgroundย SlackSlack Slack is a Collaborative Group Chat Platform https://slack.com/. The WordPress community has its own Slack Channel at https://make.wordpress.org/chat/ย channel.

Props to Riad Benguella(@youknowriad) for announcing and advocating this feature, and to Jan Jakeลก(@janjakes) for his work on phpMyAdmin and the Playground CLI.

X-post: AI Guidelines for WordPress

X-comment from +make.wordpress.org/ai: Comment on AI Guidelines for WordPress

WordPress Playground Team Meeting Summary: January 23, 2026

Facilitator: @fellyph

The Playground team held its weekly meeting on January 23, 2026, in theย  #playgroundย SlackSlack Slack is a Collaborative Group Chat Platform https://slack.com/. The WordPress community has its own Slack Channel at https://make.wordpress.org/chat/ channel. Hereโ€™s a summary of the discussion.

Announcements

PHPPHP PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used open source general-purpose scripting language that is especially suited for web development and can be embedded into HTML. https://www.php.net/manual/en/preface.php version support update: WordPress Playground has dropped support for PHP 7.2 and 7.3. While this change is scheduled for WordPress 7.0, Playground has implemented it early. See the Playground blog for details.

AI agent skills: @bpayton has created an Agent Skill for testing WordPress applications on Playground. An announcement post is in progress. The team encourages community testing and contributions. Additionally, Automattic has released a set of Agent Skills, including one for Playground.

Newsletter: The Playground blog now offers a newsletter subscription. Sign up via the form on the blog sidebarSidebar A sidebar in WordPress is referred to a widget-ready area used by WordPress themes to display information that is not a part of the main content. It is not always a vertical column on the side. It can be a horizontal rectangle below or above the content area, footer, header, or any where in the theme. to receive updates.

Contributors: The Playground project now has 53 members with the Playground Contributor Badge.

Translations: Thanks to @noruzzaman for submitting Bengali pages and @Bรฉryl for reviewing French translations. Contact @fellyph if you want to get involved.

Project Updates

  • Personal Playground: @akirk is developing Personal Playground, a new feature currently in review. Feedback is welcome on the PR.
  • PHP synchronous connect(): A PR simplifies connection logic for Asyncify builds by replacing asynchronous approaches with synchronous connections.
  • Node.js upgrade: The project has upgraded from Node.js 20 to 22, enabling package updates.
  • Agent documentation: The project has added a CLAUDE.md file. The team discussed renaming it to AGENTS.md for broader compatibility with tools like Gemini CLICLI Command Line Interface. Terminal (Bash) in Mac, Command Prompt in Windows, or WP-CLI for WordPress., Cursor, and Copilot. The proposed solution is to use AGENTS.md as the main file with CLAUDE.md referencing it.
  • Image optimization: @fellyph updated all PNG images in the documentation to WebP, reducing image sizes by 78%.

Updates from Contributors

  • @zieladam: Helping @akirk review and merge the โ€œMy WordPressโ€ project before February. Shipped Redis and Memcached extensions and added native DNSDNS DNS is an acronym for Domain Name System - how you assign a human readable address to a websiteโ€™s exact numeric coded location (ie. wordpress.org uses the actual IP address 198.143.164.252). resolution for the JSPI Node.js flavor of Playground.
  • @fellyph: Working on CSSCSS CSS is an acronym for cascading style sheets. This is what controls the design or look and feel of a site. improvements and CSS tokens for the Playground website. Created a PR to add translation credit footers.
  • @bph: Published two blog posts for theme developers:
  • @bpayton: Working on stabilizing the experimental multi-workers feature to remove the โ€œexperimentalโ€ flag and improve default performance.

Open Floor

The team briefly discussed CSS tokens and whether anyone has used the CSS tokens from @wordpress/theme.

The next Playground meeting is scheduled for the 13th of February 2026. Join the conversation atย #playgroundย Slackย channel.

#meeting

WordPress Playground removes support for PHP 7.2 and 7.3

WordPress Playground no longer supports PHPPHP PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used open source general-purpose scripting language that is especially suited for web development and can be embedded into HTML. https://www.php.net/manual/en/preface.php 7.2 and 7.3. The minimum PHP version is now 7.4.

Your existing Blueprints will continue to work. If a Blueprint requests PHP 7.2 or 7.3, Playground automatically upgrades it to PHP 7.4 and displays a warning. No action is required, but you should update your Blueprints when convenient.

Why now?

Three factors drove this decision:

  • WordPress CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. is moving forward. WordPress 7.0 (releasing April 2026) drops support for PHP 7.2 and 7.3. These versions now power less than 4% of WordPress sites combinedโ€”well below the 5% threshold the project uses for version support decisions.
  • These versions donโ€™t work reliably in Playground. PHP 7.2 crashes after a minute or two of use. PHP 7.3 runs noticeably slower than newer versions. These issues existed for months without user reports, confirming low adoption. ย Also, they donโ€™t seem to workย with the PROXYFS mmap implementation.ย 
  • Maintenance takes time away from improvements. Supporting older PHP versions requires workarounds that delay features everyone can useโ€”like fixing the intl extension crash.

What you need to do

For most users: nothing. Playground handles the migrationMigration Moving the code, database and media files for a website site from one server to another. Most typically done when changing hosting companies. automatically. Blueprint compilation requires PHP 7.4 or later; a warning will be displayed to remove it and update your Blueprint to load a supported version. If you are using the modular loaders, versions 7.2 and 7.3 will not receive updates.

Supported PHP versions

Playground now supports PHP 7.4 through PHP 8.5:

VersionStatus
PHP 7.4Supported (minimum)
PHP 8.0Supported
PHP 8.1Supported
PHP 8.2Supported
PHP 8.3Supported (recommended)
PHP 8.4Supported
PHP 8.5Supported

Use latest In your Blueprint, always get the most recent stable PHP version.

Timeline

This change takes effect immediately in WordPress Playground. The automatic upgrade ensures backward compatibilityโ€”your existing Blueprints wonโ€™t break.

WordPress Core follows in April 2026 with WordPress 7.0, which sets PHP 7.4 as the minimum required version.

Questions?

Reach out in the #playground channel on WordPress.org Slack or open a GitHub issue.

Playground meeting summary: January 9, 2026

This post summarizes the first Playground team meeting of 2026, held on January 9, 2026, in the ย #playgroundย SlackSlack Slack is a Collaborative Group Chat Platform https://slack.com/. The WordPress community has its own Slack Channel at https://make.wordpress.org/chat/ย channel.

Announcements

UIUI UI is an acronym for User Interface - the layout of the page the user interacts with. Think โ€˜how are they doing thatโ€™ and less about what they are doing. Updates
Three UI improvements shipped in December based on community feedback:

  • Unsaved Playground warning โ€“ alerts users before losing work
  • Launch WordPress Playground panel โ€“ new dedicated panel for launching instances
  • Quick links โ€“ fast access to frequently visited pages

Read the full post (also available in Portuguese).

PHPPHP PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used open source general-purpose scripting language that is especially suited for web development and can be embedded into HTML. https://www.php.net/manual/en/preface.php-WASM Package Split
WordPress Playground now offers individual php-wasm packages for each PHP version (7.2โ€“8.5). This modular approach allows developers to load only the PHP version they need, reducing bandwidth. Existing code remains compatible. Learn more.

Blueprints Library Preview
The internal blueprints library now includes visual previews, allowing users to see blueprint results directly from Playground before launching.

Dynamic CJS Imports
Dynamic imports for published CommonJS modules are now available.

Standalone BlockBlock Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. Demo Page
A new standalone demo page (playground-block-demo.html) brings the Playground Block pluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party.โ€™s functionality to playground.wordpress.net. Features include:

  • Multi-file project editing (PHP, JS, JSX via esbuild-wasm)
  • Real-time WordPress previews
  • URLURL A specific web address of a website or web page on the Internet, such as a websiteโ€™s URL www.wordpress.org parameter configuration for full-page and embedded views

Documentation
New translations added: Bengali (@noruzzaman), Portuguese (@Andrรฉ Ribeiro), and Japanese (@shimomura tomoki).

Community
Contributor badges awarded to @SirLouen, @Mehraz Morshed, and @Sohilbhai Ghanchivahora.

Contributor Updates

@fellyph shared progress on:

  • A PHP learning tool using php-wasm
  • Documentation updates for non-developers, including two new guides: โ€œWordPress Playground for non-developersโ€ and โ€œTesting themes and pluginsโ€
  • Video guides for runCLI and GitGit Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. Git is easy to learn and has a tiny footprint with lightning fast performance. Most modern plugin and theme development is being done with this version control system. https://git-scm.com/ Actions (PRs under review)
  • UI screenshot updates and front-end cleanups

Open Floor

The team asked: What would you like to see in Playground in 2026?

A Lighter, More Modular WordPress Playground: Understanding the php-wasm Package Split

PHPPHP PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used open source general-purpose scripting language that is especially suited for web development and can be embedded into HTML. https://www.php.net/manual/en/preface.php WASM now supports individual packages for each PHP version from 7.4 through 8.5. All old code still works, but if you want to save bandwidth, you can now use a specific PHP WASM version package.

The Architecture: Universal, Loaders, and Builds

@php-wasm/universal is the coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. package that powers both Node.js and browser environments. Hereโ€™s how it fits:

  • @php-wasm/universal: This is the โ€œbrain.โ€ It contains everything familiar to both Node.js and the browser, managing the filesystem, handling .ini entries, and defining the core PHP class.
  • @php-wasm/node / @php-wasm/web: These are the โ€œloaders.โ€ They handle the environment-specific setup (like loading the WASM file from disk in Node vs. fetching it in the browser) and pass it to the universal core.

The Challenge: Hitting the Ceiling

When you install @php-wasm/node, you get everything: the runtime tools plus WebAssembly binaries for every supported PHP version. As we expanded support from PHP 7.4 to 8.5, this bundle became so big that the WebAssembly binaries exceeded npmโ€™s 100 MB size limit.

To solve this, we split the PHP versions from the โ€œheavy liftingโ€:

  • The Tools: The main packages (@php-wasm/node and @php-wasm/web) still work as usual.
  • The Builds: We separated the binaries into dedicated packages like @php-wasm/node-8.4 or @php-wasm/web-8.5 for lightweight solutions.

With this split, you download only the PHP versions you needโ€”saving bandwidth and disk space for your applications.

Seeing it in Action

This modularity produces consistent code across Node.js and browser environments.

Classic Way (via @php-wasm/web)

Here is how you initialize PHP for the Web using the classic structure:

npm install @php-wasm/web
import { PHP } from '@php-wasm/universal';
import { loadWebRuntime } from '@php-wasm/web';

const php = new PHP(await loadWebRuntime('8.4'));

const response = await php.runStream({ code: `<?php echo "Hello World";` });
console.log(await response.stdoutText);

This approach handles Xdebug, emscriptenOptions, and other advanced features automatically.

Version-Specific Way (via @php-wasm/web-8-4)

For maximum control and minimal dependencies, use the version-specific package directly:

npm install @php-wasm/web-8-4
import { PHP, loadPHPRuntime } from "@php-wasm/universal";
import { getPHPLoaderModule } from "@php-wasm/web-8-4";

const loaderModule = await getPHPLoaderModule();
const runtimeId = await loadPHPRuntime(loaderModule);
const php = new PHP(runtimeId);

const response = await php.runStream({ code: `<?php echo "Hello World";` });
console.log(await response.stdoutText);

This approach bypasses @php-wasm/web entirely, making it perfect for lightweight applications. However, if you need Xdebug or custom emscriptenOptions, youโ€™ll need to configure them manually.

In both cases, @php-wasm/universal provides the standard PHP class that orchestrates execution, while the version-specific package provides a lighter bundle and lower disk usage.

Same Pattern for Node.js

The same approaches work for Node.jsโ€”just swap @php-wasm/web for @php-wasm/node:

import { PHP } from '@php-wasm/universal';
import { loadNodeRuntime } from '@php-wasm/node';

const php = new PHP(await loadNodeRuntime('8.4'));

Dependency & Installation Overhead

The most significant improvement is the reduction in node_modules size. The classic approach required installing every supported PHP version, whereas the version-specific approach is targeted.

MetricClassic Way (@php-wasm/web)Version-Specific Way (@php-wasm/web-8-4)Improvement
Packages Installed@php-wasm/web + 9 PHP runtimesOnly @php-wasm/web-8-4-9 packages
Disk Usage~530 MB~63 MB~88% Reduction

Note: The classic package includes runtimes for PHP 7.4, 8.0, 8.1, 8.2, 8.3, 8.4, and 8.5.

Why This Matters

The modular architecture solves the NPM size limit and improves the codebase:

  1. Faster CI/CD: Pipelines download only the PHP versions they need.
  2. Lighter applications: Version-specific packages for a minimal footprint.
  3. Better tree-shaking: Modern bundlers like Vite and ESBuild can eliminate unused code.

Getting Started

Choose your approach based on your needs:

Classic (full features):

npm install @php-wasm/web

Version-specific (minimal footprint):

npm install @php-wasm/web-8-4

Check the PHP WASM documentation for detailed setup instructions. Tell us what you think of this new alternative for working with PHP WASM, and share your feedback in theย #playgroundย SlackSlack Slack is a Collaborative Group Chat Platform https://slack.com/. The WordPress community has its own Slack Channel at https://make.wordpress.org/chat/ย channel.

Props to @akirk and @yannickdecat for reviewing the post.