Title: Query API
Published: July 15, 2026
Last modified: July 16, 2026

---

# Query API

## In this article

 * [Available options](https://developer.wordpress.org/playground/developers/apis/query-api/?output_format=md#available-options)
 * [Loading PHP.wasm extensions](https://developer.wordpress.org/playground/developers/apis/query-api/?output_format=md#loading-php-wasm-extensions)
 * [GitHub Export Options](https://developer.wordpress.org/playground/developers/apis/query-api/?output_format=md#github-export-options)

[ Back to top](https://developer.wordpress.org/playground/developers/apis/query-api/?output_format=md#wp--skip-link--target)

WordPress Playground exposes a simple API that you can use to configure the Playground
in the browser.

It works by passing configuration options as query parameters to the Playground 
URL. For example, to install the pendant theme, you would use the following URL:

    ```language-text
    https://playground.wordpress.net/?theme=pendant
    ```

You can go ahead and try it out. The Playground will automatically install the theme
and log you in as an admin. You may even embed this URL in your website using an`
<iframe>` tag:

    ```html
    <iframe src="https://playground.wordpress.net/?theme=pendant"></iframe>
    ```

## 󠀁[Available options](https://developer.wordpress.org/playground/developers/apis/query-api/?output_format=md#available-options)󠁿

  |  Option |  Default Value |  Description |  
   |  `php` |  `8.5` |  Loads the specified PHP version. Accepts `7.4`, `8.0`, `8.1`, `8.2`, `8.3`, `8.4`, `8.5`, `latest`, or `next`. Use `next` to preview the next PHP version from the php-src development branch; it is currently supported by the web runtime only. |  
 |  `php-extension` |   |  Loads a custom PHP.wasm extension manifest before PHP starts. Accepts absolute, root-relative, or page-relative HTTP(S) URLs. Can be used multiple times. |  
 |  `wp` |  `latest` |  Loads the specified WordPress version. Accepts the last three major WordPress versions. As of June 1, 2024, that’s `6.3`, `6.4`, or `6.5`. You can also use the generic values `latest`, `nightly`, or `beta`. |  
 |  `blueprint-url` |   |  The URL of the Blueprint that will be used to configure this Playground instance. |  
 |  `networking` |  `yes` |  Enables or disables the networking support for Playground. Accepts `yes` or `no`. |  
 |  `plugin` |   |  Installs the specified plugin. Use the plugin name from the WordPress Plugins Directory URL. For example, if the URL is `https://wordpress.org/plugins/wp-lazy-loading/\`, the plugin name would be`wp-lazy-loading`. You can pre-install multiple plugins by saying`plugin=coblocks&plugin=wp-lazy-loading&…`. Installing a plugin automatically logs the user in as an admin. More than one plugin could be installed, just repeating the`plugin` attribute on the URL. |  
 |  `theme` |   |  Installs the specified theme. Use the theme name from the WordPress Themes Directory URL. For example, if the URL is `https://wordpress.org/themes/disco/\`, the theme name would be`disco`. Installing a theme automatically logs the user in as an admin. Multiples themes could be installed just repeating the`theme` attribute on the URL. |  
 |  `url` |  `/wp-admin/` |  Load the specified initial WordPress page in this Playground instance. |  
 |  `mode` |  `browser-full-screen` |  Determines how the WordPress instance is displayed. Either wrapped in a browser UI or full width as a seamless experience. Accepts `browser-full-screen`, or `seamless`. |  
 |  `lazy` |   |  Defer loading the Playground assets until someone clicks on the “Run” button. Does not accept any values. If `lazy` is added as a URL parameter, loading will be deferred. |  
 |  `login` |  `yes` |  Log the user in as an admin. Accepts `yes` or `no`. |  
 |  `multisite` |  `no` |  Enables the WordPress multisite mode. Accepts `yes` or `no`. |  
 |  `import-site` |   |  Imports site files and database from a ZIP file specified by a URL. |  
 |  `import-wxr` |   |  Imports site content from a WXR file specified by a URL. It uses the WordPress Importer plugin, so the default admin user must be logged in. |  
 |  `site-slug` |   |  Selects which site to load from browser storage. If the specified site does not exist, Playground creates a new browser-saved site with the specified slug unless temporary storage is requested. |  
 |  `storage` |   |  Controls the storage lifecycle. Use `storage=temp` to create a genuinely temporary Playground that is discarded when the page is refreshed or closed. Without it, Playground may autosave the new Playground when browser storage and saving are available. |  
 |  `language` |  `en_US` |  Sets the locale for the WordPress instance. This must be used in combination with `networking=yes` otherwise WordPress won’t be able to download translations. |  
 |  `core-pr` |   |  Installs a specific https://github.com/WordPress/wordpress-develop core PR. Accepts the PR number. For example, `core-pr=6883`. |  
 |  `gutenberg-pr` |   |  Installs a specific https://github.com/WordPress/gutenberg PR. Accepts the PR number. For example, `gutenberg-pr=65337`. |  
 |  `gutenberg-branch` |   |  Installs a specific branch from https://github.com/WordPress/gutenberg. Accepts the branch name. For example, `gutenberg-branch=trunk`. |  
 |  `page-title` |   |  Customizes the browser tab title. Useful for identifying different Playground instances when working with multiple tabs. The parameter is preserved when navigating between sites. |  
 |  `can-save` |   |  Controls whether the Playground shell offers automatic browser saving. Use `can-save=no` to start a temporary Playground and hide the Dock save status/persistence prompt. |  
 |  `mcp-port` |  `7999` |  Sets the WebSocket port used by the MCP bridge to communicate with the MCP server. For example, `mcp-port=8080`. |  
 |  `overlay` |   |  Opens a Playground tool on page load. Supports `new` for the Dock’s **New** pane. For example, `?overlay=new`. `blueprints` is kept as a compatibility alias that opens the same **New** pane, so `?overlay=blueprints` still works. The parameter is removed from the URL when the pane is closed. |

For example, the following code embeds a Playground with a preinstalled Gutenberg
plugin and opens the post editor:

    ```html
    <iframe src="https://playground.wordpress.net/?plugin=gutenberg&url=/wp-admin/post-new.php&mode=seamless"> </iframe>
    ```

## 󠀁[Loading PHP.wasm extensions](https://developer.wordpress.org/playground/developers/apis/query-api/?output_format=md#loading-php-wasm-extensions)󠁿

Use `php-extension` to load an external PHP.wasm extension manifest before PHP
 
starts. This is useful for demos that need native extension performance, such as
the SQLite Database Integration plugin’s `wp_mysql_parser` extension. You do not
need custom JavaScript for this — the Query API turns each parameter into a runtime
extension request before Playground boots.

    ```language-text
    https://playground.wordpress.net/?php=8.5&php-extension=https://wordpress.github.io/sqlite-database-integration/wp_mysql_parser-wasm-extension/latest/manifest.json
    ```

Use `/latest/manifest.json` for a quick demo. Use a pinned manifest from the
 extension
release page when you need a stable URL for tests or documentation.

You can repeat `php-extension` to load multiple manifests:

    ```language-text
    https://playground.wordpress.net/?php-extension=https://example.com/one/manifest.json&php-extension=https://example.com/two/manifest.json
    ```

The parameter accepts absolute, root-relative, and page-relative manifest URLs:

    ```language-text
    ?php-extension=https://cdn.example.com/wp_mysql_parser/manifest.json
    ?php-extension=/extensions/wp_mysql_parser/manifest.json
    ?php-extension=./extensions/wp_mysql_parser/manifest.json
    ```

Relative values are resolved against the current Playground page URL. The
 manifest
URL must use HTTP(S) once resolved. `file:` URLs are rejected in the browser. For
local CLI workflows, use the [`--php-extension` flag](https://developer.wordpress.org/playground/developers/local-development/wp-playground-cli#loading-phpwasm-extensions)
instead.

**CORS policy**

To import files from a URL, such as a site zip package or PHP extension
 manifest
and `.so` artifact, they must be served with the `Access-Control-Allow-Origin` header
set. For reference, see: [Cross-Origin Resource Sharing (CORS)](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#the_http_response_headers).

## 󠀁[GitHub Export Options](https://developer.wordpress.org/playground/developers/apis/query-api/?output_format=md#github-export-options)󠁿

The following additional query parameters may be used to pre-configure the GitHub
export form:

 * `gh-ensure-auth`: If set to `yes`, Playground will display a modal to ensure 
   the
    user is authenticated with GitHub before proceeding.
 * `ghexport-repo-url`: The URL of the GitHub repository to export to.
 * `ghexport-pr-action`: The action to take when exporting (create or update).
 * `ghexport-playground-root`: The root directory in the Playground to export from.
 * `ghexport-repo-root`: The root directory in the repository to export to.
 * `ghexport-content-type`: The content type of the export (plugin, theme, wp-content,
   custom-paths).
 * `ghexport-plugin`: Plugin path. When the content type is `plugin`, pre-select
   the plugin to export.
 * `ghexport-theme`: Theme directory name. When the content type is `theme`, pre-
   select the theme to export.
 * `ghexport-path`: A path relative to `ghexport-playground-root`. Can be provided
   multiple times. When the
    content type is `custom-paths`, it pre-populates the
   list of paths to export.
 * `ghexport-commit-message`: The commit message to use when exporting.
 * `ghexport-allow-include-zip`: Whether to offer an option to include a zip file
   in the GitHub
    export (yes, no). Optional. Defaults to `yes`.

First published

July 15, 2026

Last updated

July 16, 2026

Edit article

[ Improve it on GitHub: Query API ](https://raw.githubusercontent.com/WordPress/wordpress-playground/trunk/packages/docs/site/docs/developers/06-apis/query-api/01-index.md)

Changelog

[ See list of changes: Query API ](https://developer.wordpress.org/playground/developers/apis/query-api/?output_format=md#)

[  Previous: APIs overview](https://developer.wordpress.org/playground/developers/apis/)

[  Next: Sites API](https://developer.wordpress.org/playground/developers/apis/sites-api/)