WordPress Playground now connects with the internet by default

Have you ever tried to install 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 in WordPress Playground, only to discover it couldn’t connect to an external 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.? That “gotcha” moment happened because networking was disabled by default. A recent update changes this, giving WordPress network access by default, making your Playground instance behave much more like a typical WordPress environment.

Why was networking disabled by default?

Previously, networking was turned off by default as a performance optimization. While this helped the environment load quickly, it often created a frustrating experience for users when they expected their plugins and themes to connect to the outside world.

WordPress Add plugin page with the default settings previously displaying a message to enable the network access before adding plugin from the repo
Previous Add Plugin page with the default Playground settings

Now you can jump straight into a new Playground and install your favorite plugins from the directory, or preview plugins that are requesting data from external APIs, without extra configuration.

WordPress Add plugin page with the default settings loading the plugins from WordPress plugin repository
“Add Plugin” page with the default Playground settings

Keeping the first load fast

A fresh WordPress site makes about five separate requests to api.wordpress.org on the first visit to the admin dashboard (/wp-admin) to check for updates. In a browser-based environment like Playground, these sequential requests could make the dashboard feel slow to load.

To solve this, Playground implemented a pre-fetching mechanism and now initiates these update checks in the background, parallel to the environment’s booting up. By the time the user navigates to /wp-admin. The necessary data is ready, and the dashboard loads quickly.

How to manage network access

While networking is on by default for a more intuitive experience, you still have complete control. You can disable it at any time in a few different ways.

  • URLURL A specific web address of a website or web page on the Internet, such as a website’s URL www.wordpress.org Parameters: For quick access, you can use the ?networking=no query parameter to the URL.
  • Blueprints: When using Blueprints, you can specify your preference with {"features": { "networking": false }}.
  • Settings 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.: You can easily toggle network access on and off using the checkbox in the Playground settings.
Playground Setting panel displaying the option to allow network access checked
Playground Settings Panel


For more technical details, see the pull requests:

Share Your Feedback

This change makes Playground more intuitive and closer to a regular WordPress experience. Please share your feedback with us on the Making WordPress Slack or report any issues you find on GitHub.

Props to @zieladam for review.

X-post: The Incident Response Team is looking for new members

X-comment from +make.wordpress.org/community: Comment on The Incident Response Team is looking for new members

Playground Meeting Summary: June 13, 2025

The Playground team held its first meeting in a while on Friday, June 13, 2025, at 15:00 UTC. The discussion covered recent developments, contributor updates, and an open floor for questions.

Announcements

Several recent updates and resources for WordPress Playground were shared:

  • Workshops: Two recent workshops from WordCampWordCamp WordCamps are casual, locally-organized conferences covering everything related to WordPress. They're one of the places where the WordPress community comes together to teach one another what they’ve learned throughout the year and share the joy. Learn more. Europe were highlighted:
  • Recent Developments: A June 2025 “What’s new for developers?” post detailed several Playground enhancements:
    • Direct support for data URLs in the blueprint-url query parameter.
    • The 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. environment now includes the Intl extension.
    • A new SQLite driver has been integrated, with more details in this post.
    • The CLICLI Command Line Interface. Terminal (Bash) in Mac, Command Prompt in Windows, or WP-CLI for WordPress. now supports mounting the current working directory.
    • Dynamic mounting of symlinked directories is now supported.
  • Major Update: A significant recent update also included 64-bit integer support, the exif extension, a Blueprint bundle format, and numerous stability improvements.

Contributor Updates

Team members shared their current focus:

  • @zieladam is concentrating on Blueprints v2, including the specification and an all-in-one-php-blueprints.phar runner that can work on any PHP web host. The next steps involve improving Playground CLI compatibility with native PHP.
  • @fellyph is in his first week of contributing and has been triaging issues. He is also looking into requests for contributor badges, documentation updates, a potential landing page for new users, and has submitted a fix for the mobile view.
  • @karthickmurugan noted he has been unable to contribute recently due to other project work but hopes to schedule time for contributions soon.

Open Floor

@janwoostendorp shared his positive experience with the WordCamp Europe workshops and has started writing automated tests for his Default Featured ImageFeatured image A featured image is the main image used on your blog archive page and is pulled when the post or page is shared on social media. The image can be used to display in widget areas on your site or in a summary list of posts. 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. He raised a performance question, noting that his tests take about 12 seconds to run in a CI environment, with roughly 8 seconds spent downloading a theme.

@zieladam explained that themes are not currently cached in the CI, but this will be resolved in Blueprints v2, which will implement an HTTPHTTP HTTP is an acronym for Hyper Text Transfer Protocol. HTTP is the underlying protocol used by the World Wide Web and this protocol defines how messages are formatted and transmitted, and what actions Web servers and browsers should take in response to various commands. cache for all resources, not just WordPress coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress.. This will result in a significant speed improvement once the Playground CLI is updated. As a temporary workaround for faster local development, he suggested using a local theme .zip file with a bundled reference in the blueprint.

Introducing a new SQLite driver for WordPress

The new SQLite driver is now available in the SQLite Database Integration plugin (currently behind a feature flag), and powering the WordPress Playground website today.

Following the refactoring, the new SQLite driver now matches the current driver in terms of features and surpasses it in several key areas. However, there are still some aspects that would benefit from further feedback. Thanks to its new architecture, integrating additional features is now much faster, and work is underway to enhance 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/. compatibility even further.

Architecture highlights

The new SQLite driver translates MySQL queries into SQLite statements and emulates MySQL behavior using a robust new approach, which includes:

  1. A complete, fast MySQL SQL lexer written in pure 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. with zero dependencies.
  2. A complete, version-aware MySQL SQL grammar definition, adapted from the MySQL Workbench grammar.
  3. Basic tooling to process and compress the grammar in pure PHP.
  4. An extra lightweight, universal grammar parser written in pure PHP with zero dependencies, by @zieladam
  5. An extensive test suite of 70 000 MySQL queries that we can parse successfully.
  6. new SQLite driver that translates and emulates MySQL queries on top of SQLite, using the abstract syntax tree produced by the new parser.
  7. A comprehensive MySQL information schema emulation layer on top of SQLite.
  8. An automated migrationMigration Moving the code, database and media files for a website site from one server to another. Most typically done when changing hosting companies. flow for databases created with the previous SQLite driver.
  9. New test suites, including the WordPress CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. PHPUnit test suite, with over 99% of tests already passing.

Trying the driver

⭐️ Please share your feedback and real-world test results via 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 be the repository owner. https://github.com/ issues or as comments on this post.

Running WordPress on SQLite

WordPress and its plugins have long depended on MySQL, making a seamless switch difficult without breaking compatibility. Past SQLite integrations have mostly translated MySQL SQL into SQLite-compatible queries, but fully supporting advanced features and MySQL-specific behaviors remained challenging.

The new driver still processes MySQL queries by emulating them on SQLite, sometimes through direct conversion and other times with complex transformations. What’s new is a deeper emulation: queries are now parsed into an abstract syntax tree (AST), and key MySQL information schema tables are replicated in SQLite. This approach enables more robust support for MySQL features, greatly improving WordPress compatibility with SQLite.

New features

While the initial goal of the new SQLite driver was to reach full feature parity with the current implementation, it also introduces numerous enhancements and advanced capabilities:

  • Advanced support of the MySQL syntax.
    • sub-queries.
    • UNION and UNION ALL operators.
    • SHOW and DESCRIBE statements.
    • INFORMATION_SCHEMA tables.
    •  TEMPORARY tables.
    • table administration statements (TRUNCATEANALYZECHECK OPTIMIZEREPAIR).
  • Support for 
    • STRICT_TRANS_TABLES and STRICT_ALL_TABLES SQL modes.
    • NO_BACKSLASH_ESCAPES SQL mode.
    • USE <database> statement for the main database and INFORMATION_SCHEMA.
  • Automatic migration of databases created with the current SQLite driver.

Thanks to its redesigned architecture, the new driver lays the groundwork for future support of additional MySQL features, some of which were nearly impossible to implement in the current driver.

Examples

Take a brief look at some of the new tricks that the new driver can already handle.

Create the wp_users table:

CREATE TABLE wp_users (
  ID bigint(20) unsigned NOT NULL auto_increment,
  user_login varchar(60) NOT NULL default '',
  user_pass varchar(255) NOT NULL default '',
  user_nicename varchar(50) NOT NULL default '',
  user_email varchar(100) NOT NULL default '',
  user_url varchar(100) NOT NULL default '',
  user_registered datetime NOT NULL default '0000-00-00 00:00:00',
  user_activation_key varchar(255) NOT NULL default '',
  user_status int(11) NOT NULL default '0',
  display_name varchar(250) NOT NULL default '',
  PRIMARY KEY  (ID),
  KEY user_login_key (user_login),
  KEY user_nicename (user_nicename),
  KEY user_email (user_email)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

The new driver can also execute arbitrarily complex queries using the INFORMATION_SCHEMA:

SELECT
  cols.DATA_TYPE,
  stats.INDEX_NAME,
  stats.COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS AS cols
JOIN INFORMATION_SCHEMA.STATISTICS AS stats
  ON  cols.TABLE_SCHEMA = stats.TABLE_SCHEMA
  AND cols.TABLE_NAME   = stats.TABLE_NAME
  AND cols.COLUMN_NAME  = stats.COLUMN_NAME
WHERE
  cols.TABLE_SCHEMA   = 'wp'
  AND cols.TABLE_NAME = 'wp_users'
ORDER BY INDEX_NAME ASC;
-- bigint   PRIMARY         ID
-- varchar  user_email      user_email
-- varchar  user_login_key  user_login
-- varchar  user_nicename   user_nicename

You can add a bit more advanced syntax like UNIONDISTINCT, CTEs, and function calls:

WITH
  cols AS (
    SELECT COLUMN_NAME AS column_name
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_SCHEMA = 'wp' AND TABLE_NAME = 'wp_users'
  ),
  indexes AS (
    SELECT DISTINCT INDEX_NAME AS index_name
    FROM INFORMATION_SCHEMA.STATISTICS
    WHERE TABLE_SCHEMA = 'wp' AND TABLE_NAME = 'wp_users'
  )
SELECT CONCAT(column_name, ' (column)') AS name
FROM cols
UNION ALL
SELECT CONCAT(index_name, ' (index)') AS name
FROM indexes
ORDER BY name;
-- ID (column)
-- PRIMARY (index)
-- display_name (column)
-- user_activation_key (column)
-- user_email (column)
-- user_email (index)
-- user_login (column)
-- user_login_key (index)
-- user_nicename (column)
-- user_nicename (index)
-- user_pass (column)
-- user_registered (column)
-- user_status (column)
-- user_url (column)

Finally, let’s export the table schema:

SHOW CREATE TABLE wp_users;
-- CREATE TABLE `wp_users` (
--   `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
--   `user_login` varchar(60) NOT NULL DEFAULT '',
--   `user_pass` varchar(255) NOT NULL DEFAULT '',
--   `user_nicename` varchar(50) NOT NULL DEFAULT '',
--   `user_email` varchar(100) NOT NULL DEFAULT '',
--   `user_url` varchar(100) NOT NULL DEFAULT '',
--   `user_registered` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
--   `user_activation_key` varchar(255) NOT NULL DEFAULT '',
--   `user_status` int(11) NOT NULL DEFAULT '0',
--   `display_name` varchar(250) NOT NULL DEFAULT '',
--   PRIMARY KEY (`ID`),
--   KEY `user_login_key` (`user_login`),
--   KEY `user_nicename` (`user_nicename`),
--   KEY `user_email` (`user_email`)
-- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

The definition is returned exactly as supplied, confirming faithful emulation of MySQL’s SHOW CREATE TABLE.

The above scenario was never supported by the previous driver, and implementing it would have been extremely difficult due to its basic, token-based architecture. With the new driver design, advanced use cases like this can now be supported much more naturally.

What’s next

Stabilizing the new SQLite driver in the 2.x line of the SQLite Database Integration plugin requires your feedback. Once there is enough confidence, a  3.0 of the 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 will be released where the new driver will be enabled by default (and not behind a feature flag like in 2.x). The new driver is also being continuously tested for compatibility with plugins from the WordPress Plugin Directory and expanding feature coverage.

After the 3.0 release and the new SQLite driver enabled by default, the development focus will shift to expanding MySQL functionality coverage, improving performance, and stabilizing the 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., with the future prospect of integrating the driver into WordPress Core.

Looking even further ahead, the new lexer and parser pipeline lays the foundation for supporting additional database engines within the WordPress ecosystem.

Props to for reviewing to @zieladam and @bph

X-post: Criteria for Creating or Migrating Repositories under the WordPress GitHub Organization

X-comment from +make.wordpress.org/project: Comment on Criteria for Creating or Migrating Repositories under the WordPress GitHub Organization