Bug Scrub Schedule for WordPress 6.9

Itโ€™s time to get WordPress 6.9 ready for release, and help is needed to ensure itโ€™s smooth and bugbug A bug is an error or unexpected result. Performance improvements, code optimization, and are considered enhancements, not defects. After feature freeze, only bugs are dealt with, with regressions (adverse changes from the previous version) being the highest priority.-free. Whether youโ€™re an experienced contributor or joining in for the first time, everyone is welcome! ๐ŸŽ‰

Schedule Overview

Regular bug scrubs are being held twice a week with @wildworks and @welcher leading them in their individual timezones. The goal is to cover as many timezones as possible to encourage as many contributors as possible to participate in the 6.9 release. As the release date approaches and activity ramps up, the number of scrubs may be increased if necessary. These efforts will help ensure everything is on track for a smooth launch. Participation is welcome at any of these sessions, so feel free to join. Bring questions, ideas, and letโ€™s scrub some bugs together!

Continue reading โ†’

#6-9, #bug-scrub, #core, #core-test, #props

Abilities API in WordPress 6.9

WordPress 6.9 introduces the Abilities 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., a new foundational system that enables plugins, themes, and WordPress coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. to register and expose their capabilities in a standardized, machine-readable format. This API creates a unified registry of functionality that can be discovered, validated, and executed consistently across different contexts, including PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher, REST APIREST API The REST API is an acronym for the RESTful Application Program Interface (API) that uses HTTP requests to GET, PUT, POST and DELETE data. It is how the front end of an application (think โ€œphone appโ€ or โ€œwebsiteโ€) can communicate with the data store (think โ€œdatabaseโ€ or โ€œfile systemโ€) https://developer.wordpress.org/rest-api/. endpoints, and future AI-powered integrations.

The Abilities API is part of the broader AI Building Blocks for WordPress initiative, providing the groundwork for AI agents, automation tools, and developers to understand and interact with WordPress functionality in a predictable manner.

What is the Abilities API?

An ability is a self-contained unit of functionality with defined inputs, outputs, permissions, and execution logic. By registering abilities through the Abilities API, developers can:

  • Create discoverable functionality with standardized interfaces
  • Define permission checks and execution callbacks
  • Organize abilities into logical categories
  • Validate inputs and outputs
  • Automatically expose abilities through REST API endpoints

Rather than burying functionality in isolated functions or custom AJAX handlers, abilities are registered in a central registry that makes them accessible through multiple interfaces.

Core Components

The Abilities API introduces three main components to WordPress 6.9:

1. PHP API

A set of functions for registering, managing, and executing abilities:

Ability Management:

  • wp_register_ability() โ€“ Register a new ability
  • wp_unregister_ability() โ€“ Unregister an ability
  • wp_has_ability() โ€“ Check if an ability is registered
  • wp_get_ability() โ€“ Retrieve a registered ability
  • wp_get_abilities() โ€“ Retrieve all registered abilities

Ability CategoryCategory The 'category' taxonomy lets you group posts / content together that share a common bond. Categories are pre-defined and broad ranging. Management:

  • wp_register_ability_category() โ€“ Register an ability category
  • wp_unregister_ability_category() โ€“ Unregister an ability category
  • wp_has_ability_category() โ€“ Check if an ability category is registered
  • wp_get_ability_category() โ€“ Retrieve a registered ability category
  • wp_get_ability_categories() โ€“ Retrieve all registered ability categories

2. REST API Endpoints

The Abilities API automatically exposes registered abilities through REST API endpoints under the wp-abilities/v1 namespace:

  • GET /wp-abilities/v1/categories โ€“ List all ability categories
  • GET /wp-abilities/v1/categories/{slug} โ€“ Get a single ability category
  • GET /wp-abilities/v1/abilities โ€“ List all abilities
  • GET /wp-abilities/v1/abilities/{name} โ€“ Get a single ability
  • GET|POST|DELETE /wp-abilities/v1/abilities/{name}/run โ€“ Execute an ability

3. 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.

New action hooks for integrating with the Abilities API:

Actions:

  • wp_abilities_api_categories_init โ€“ Fired when the ability categories registry is initialized (register categories here)
  • wp_abilities_api_init โ€“ Fired when the abilities registry is initialized (register abilities here)
  • wp_before_execute_ability โ€“ Fired before an ability executes
  • wp_after_execute_ability โ€“ Fired after an ability finishes executing

Filters:

  • wp_register_ability_category_args โ€“ Filters ability category arguments before registration
  • wp_register_ability_args โ€“ Filters ability arguments before registration

Registering Abilities

Abilities must be registered on the wp_abilities_api_init action hook. Attempting to register abilities outside of this hook will trigger a _doing_it_wrong() notice, and the Ability registration will fail.

Basic Example

Hereโ€™s a complete example of registering an ability category and an ability:

<?php
add_action( 'wp_abilities_api_categories_init', 'my_plugin_register_ability_categories' );
/**
 * Register ability categories.
 */
function my_plugin_register_ability_categories() {
    wp_register_ability_category(
        'content-management',
        array(
            'label'       => __( 'Content Management', 'my-plugin' ),
            'description' => __( 'Abilities for managing and organizing content.', 'my-plugin' ),
        )
    );
}

add_action( 'wp_abilities_api_init', 'my_plugin_register_abilities' );
/**
 * Register abilities.
 */
function my_plugin_register_abilities() {
    wp_register_ability(
        'my-plugin/get-post-count',
        array(
            'label'              => __( 'Get Post Count', 'my-plugin' ),
            'description'        => __( 'Retrieves the total number of published posts.', 'my-plugin' ),
            'category'           => 'content-management',
            'input_schema'       => array(
                'type'       => 'string',
                'description' => __( 'The post type to count.', 'my-plugin' ),
                'default'     => 'post',
            ),
            'output_schema'      => array(
                'type'       => 'integer',
                'description' => __( 'The number of published posts.', 'my-plugin' ),
            ),
            'execute_callback'   => 'my_plugin_get_post_count',
            'permission_callback' => function() {
                return current_user_can( 'read' );
            },
        )
    );
}

/**
 * Execute callback for get-post-count ability.
 */
function my_plugin_get_post_count( $input ) {
    $post_type = $input ?? 'post';

    $count = wp_count_posts( $post_type );

    return (int) $count->publish;
}

More Complex Example

Hereโ€™s an example with more advanced input and output schemas, input validation, and error handling:

<?php
add_action( 'wp_abilities_api_init', 'my_plugin_register_text_analysis_ability' );
/**
 * Register a text analysis ability.
 */
function my_plugin_register_text_analysis_ability() {
    wp_register_ability(
        'my-plugin/analyze-text',
        array(
            'label'              => __( 'Analyze Text', 'my-plugin' ),
            'description'        => __( 'Performs sentiment analysis on provided text.', 'my-plugin' ),
            'category'           => 'text-processing',
            'input_schema'       => array(
                'type'       => 'object',
                'properties' => array(
                    'text' => array(
                        'type'        => 'string',
                        'description' => __( 'The text to analyze.', 'my-plugin' ),
                        'minLength'   => 1,
                        'maxLength'   => 5000,
                    ),
                    'options' => array(
                        'type'       => 'object',
                        'properties' => array(
                            'include_keywords' => array(
                                'type'        => 'boolean',
                                'description' => __( 'Whether to extract keywords.', 'my-plugin' ),
                                'default'     => false,
                            ),
                        ),
                    ),
                ),
                'required' => array( 'text' ),
            ),
            'output_schema'      => array(
                'type'       => 'object',
                'properties' => array(
                    'sentiment' => array(
                        'type'        => 'string',
                        'enum'        => array( 'positive', 'neutral', 'negative' ),
                        'description' => __( 'The detected sentiment.', 'my-plugin' ),
                    ),
                    'confidence' => array(
                        'type'        => 'number',
                        'minimum'     => 0,
                        'maximum'     => 1,
                        'description' => __( 'Confidence score for the sentiment.', 'my-plugin' ),
                    ),
                    'keywords' => array(
                        'type'        => 'array',
                        'items'       => array(
                            'type' => 'string',
                        ),
                        'description' => __( 'Extracted keywords (if requested).', 'my-plugin' ),
                    ),
                ),
            ),
            'execute_callback'   => 'my_plugin_analyze_text',
            'permission_callback' => function() {
                return current_user_can( 'edit_posts' );
            },
        )
    );
}

/**
 * Execute callback for analyze-text ability.
 * 
 * @param $input
 * @return array
 */
function my_plugin_analyze_text( $input ) {
    $text = $input['text'];
    $include_keywords = $input['options']['include_keywords'] ?? false;

    // Perform analysis (simplified example)
    $sentiment = 'neutral';
    $confidence = 0.75;

    $result = array(
        'sentiment'  => $sentiment,
        'confidence' => $confidence,
    );

    if ( $include_keywords ) {
        $result['keywords'] = array( 'example', 'keyword' );
    }

    return $result;
}

Ability Naming Conventions

Ability names should follow these practices:

  • Use namespaced names to prevent conflicts (e.g., my-plugin/my-ability)
  • Use only lowercase alphanumeric characters, dashes, and forward slashes
  • Use descriptive, action-oriented names (e.g., process-payment, generate-report)
  • The format should be namespace/ability-name

Categories

Abilities must be assigned to a category. Categories provide better discoverability and help organize related abilities. Categories must be registered before the abilities that reference them using the wp_abilities_api_categories_init hook.

JSONJSON JSON, or JavaScript Object Notation, is a minimal, readable format for structuring data. It is used primarily to transmit data between a server and web application, as an alternative to XML. Schema Validation

The Abilities API uses JSON Schema for input and output validation. WordPress implements a validator based on a subset of JSON Schema Version 4. The schemas serve two purposes:

  1. Automatic validation of data passed to and returned from abilities
  2. Self-documenting API contracts for developers

Defining schemas is mandatory when there is a value to pass or return.

Using REST API Endpoints

Developers can also enable Abilities to support the default REST API endpoints. This is possible by setting the meta.show_in_rest argument to true when registering an ability.

       wp_register_ability(
        'my-plugin/get-post-count',
        array(
            'label'              => __( 'Get Post Count', 'my-plugin' ),
            'description'        => __( 'Retrieves the total number of published posts.', 'my-plugin' ),
            'category'           => 'content-management',
            'input_schema'       => array(
                'type'       => 'string',
                'description' => __( 'The post type to count.', 'my-plugin' ),
                'default'     => 'post',
            ),
            'output_schema'      => array(
                'type'       => 'integer',
                'description' => __( 'The number of published posts.', 'my-plugin' ),
            ),
            'execute_callback'   => 'my_plugin_get_post_count',
            'permission_callback' => function() {
                return current_user_can( 'read' );
            },
            'meta'               => array(
                'show_in_rest' => true,
            )
        )
    );

Access to all Abilities REST API endpoints requires an authenticated user. The Abilities API supports all WordPress REST API authentication methods:

  • Cookie authentication (same-origin requests)
  • Application passwords (recommended for external access)
  • Custom authentication plugins

Once enabled, itโ€™s possible to list, fetch, and execute Abilities via the REST API endpoints:

List All Abilities:

curl -u 'USERNAME:APPLICATION_PASSWORD' \
  https://example.com/wp-json/wp-abilities/v1/abilities

Get a Single Ability:

curl -u 'USERNAME:APPLICATION_PASSWORD' \
https://example.com/wp-json/wp-abilities/v1/abilities/my-plugin/get-post-count

Execute an Ability:

curl -u 'USERNAME:APPLICATION_PASSWORD' \
  -X POST https://example.com/wp-json/wp-abilities/v1/abilities/my-plugin/get-post-count/run \
  -H "Content-Type: application/json" \
  -d '{"input": {"post_type": "page"}}'

The API automatically validates the input against the abilityโ€™s input schema, checks permissions via the abilityโ€™s permission callback, executes the ability, validates the output against the abilityโ€™s output schema, and returns the result as JSON.

Checking and Retrieving Abilities

You can check if an ability exists and retrieve it programmatically:

<?php
// Check if an ability is registered
if ( wp_has_ability( 'my-plugin/get-post-count' ) ) {
    // Get the ability object
    $ability = wp_get_ability( 'my-plugin/get-post-count' );

    // Access ability properties
    echo $ability->get_label();
    echo $ability->get_description();
}

// Get all registered abilities
$all_abilities = wp_get_abilities();

foreach ( $all_abilities as $ability ) {
    echo $ability->get_name();
}

Error Handling

Abilities should handle errors gracefully by returning WP_Error objects:

<?php
function my_plugin_delete_post( $input ) {
    $post_id = $input['post_id'];

    if ( ! get_post( $post_id ) ) {
        return new WP_Error(
            'post_not_found',
            __( 'The specified post does not exist.', 'my-plugin' ),
        );
    }

    $result = wp_delete_post( $post_id, true );

    if ( ! $result ) {
        return new WP_Error(
            'deletion_failed',
            __( 'Failed to delete the post.', 'my-plugin' ),
        );
    }

    return array(
        'success' => true,
        'post_id' => $post_id,
    );
}

Backward Compatibility

The Abilities API is a new feature in WordPress 6.9 and does not affect existing WordPress functionality. Plugins and themes can adopt the API incrementally without breaking existing code.

For developers who want to support both WordPress 6.9+ and earlier versions, check if the API functions exist before using them:

<?php
if ( function_exists( 'wp_register_ability' ) ) {
    add_action( 'wp_abilities_api_init', 'my_plugin_register_abilities' );
}

Or

if ( class_exists( 'WP_Ability' ) ) {
 add_action( 'wp_abilities_api_init', 'my_plugin_register_abilities' );}

Further Resources

Props to @gziolo for pre-publish review.

#abilities-api, #6-9, #dev-notes, #dev-notes-6-9

X-post: Week in Test: November 10, 2025

X-comment from +make.wordpress.org/test: Comment on Week in Test: November 10, 2025

WordPress 6.9 Beta 4

WordPress 6.9 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. 4 is ready for download and testing!

This version of the WordPress software is still under development. Please do not install, run, or test this version of WordPress on production or mission-critical websites. Instead, itโ€™s recommended to test Beta 4 on a test server and site.

WordPress 6.9 Beta 4 can be tested using any of the following methods:

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-partyInstall and activate the WordPress Beta Tester plugin on a WordPress install. (Select the โ€œBleeding edgebleeding edge The latest revision of the software, generally in development and often unstable. Also known as trunk.โ€ channel and โ€œBeta/RCrelease candidate One of the final stages in the version release cycle, this version signals the potential to be a final release to the public. Also see alpha (beta). Onlyโ€ stream.)
Direct DownloadDownload the Beta 4 version (zip) and install it on a WordPress website.
Command LineUse this WP-CLI command: wp core update --version=6.9-beta4
WordPress PlaygroundUse the 6.9 Beta 4 WordPress Playground instance to test the software directly in your browser.ย  No setup is required โ€“ just click and go!

The scheduled final release date for WordPress 6.9 is still December 2, 2025. The full release schedule can be found here. Your help testing Beta and RC versions is vital to making this release as stable and powerful as possible. Thank you to everyone who helps with testing!

Please continue checking the Make WordPress Core blog for 6.9-related posts in the coming weeks for more information.ย 

Whatโ€™s new in WordPress 6.9? Check out the Beta 1 announcement for details and highlights.

This is an extra beta

Testing for issues is crucial to the development of any software, and testing works!

Thanks to your help testing changes to template management, some issues were identified in Beta 3. Beta 4 is in response to bugs found with the new template activation and notes features, and includes a revert of the template activation feature and modified notes notifications.

You can browse the technical details for all issues addressed since Beta 3 using these links:

The new template activation and deactivation features will be included in WordPress 7.0 instead of 6.9.

The 6.9 Release Candidaterelease candidate One of the final stages in the version release cycle, this version signals the potential to be a final release to the public. Also see alpha (beta). is still scheduled for Tuesday, November 11th, and the final release on December 2nd is still on track. As always, a successful release depends on your confirmation during testing. So please download and test!

How to test this release

Your help testing the WordPress 6.9 Beta 4 version is key to ensuring that the final release is the best it can be. While testing the upgrade process is essential, trying out new features is equally as important. This detailed guide will walk you through testing features in WordPress 6.9.

If you encounter an issue, please report it to the Alpha/Beta area of the support forums or directly to WordPress Trac if you are comfortable writing a reproducible bugbug A bug is an error or unexpected result. Performance improvements, code optimization, and are considered enhancements, not defects. After feature freeze, only bugs are dealt with, with regressions (adverse changes from the previous version) being the highest priority. report. You can also check your issue against a list of known bugs.

Curious about testing releases in general? Follow along with the testing initiatives in Make Core and join the #core-test channel on Making WordPress Slack.

A Beta 4 haiku

When life gives lemons:

adapt, push changes, make it

better than before.

Props to @davidbaumwald, @akshayar and @westonruter for proofreading and review.

#6-9, #development, #release

Update on Phase 3: Collaboration efforts (Nov 2025)

After last yearโ€™s update, this post seeks to summarize whatโ€™s been completed, whatโ€™s in progress, and how to follow along or contribute. This post also seeks to set expectations going forward and answer reoccurring questions at a high level. As a reminder Phase 3 is centered around fostering seamless collaboration, tying together the user experience, and streamlining the content management flows to improve the way creators and teams work together within WordPress. As work progresses, feedback is needed and welcomed to ensure broader adoption.

A design concept for real time collaboration with notes.

Real-time collaboration

Work is underway to expand the collaborative editing experiment, with the latest update highlighting key areas in progress:

  • Performant and stable synchronization.
  • Protections to make sure that the coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress.-data package retains control over which entity records are synced and how changes are merged.
  • A filterFilter Filters are one of the two types of Hooks https://codex.wordpress.org/Plugin_API/Hooks. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output. to give plugins the ability to extend a SyncProvider class. This allows plugins to provide their own sync transports and to implement user-facing sync behaviors such as awareness / presence indicators.
  • Stubs (lightweight placeholder records) that allow CRDT docs to be persisted in metaMeta Meta is a term that refers to the inside workings of a group. For us, this is the team that works on internal WordPress sites like WordCamp Central and Make WordPress., avoiding the โ€œinitialization problemโ€ as described by Kevin Jahns.
  • A Yjs-powered UndoManager that works across multiple synced entities.

WordPress VIP has developed a working implementation demonstrating these capabilities, and various contributors are working to bring functionality into Core via 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/. All of this work is being done to pave the way for possible inclusion in WordPress 7.0. For now, if you want to help test and give feedback, you can do so by using the latest Gutenberg 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 and enabling the โ€œCollaboration: add real-time editingโ€ experiment in Gutenberg > Experiments. Keep in mind that a PR is not yet merged to remove the post lock modal but, until it is, you can still test having two sessions and see changes behind the modal itself.ย 

Follow along in this dedicated GitHub issue and/or in the #feature-realtime-collaboration 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.

Async collaboration: Notes

Formerly known as 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. Comments, the Notes feature is set to debut in WordPress 6.9, bringing block-level Notes to Core after first appearing in the Gutenberg plugin as an experimental feature in October of last year. With this initial release, youโ€™ll be able to add/resolve/delete/thread notes on entire blocks but not yet on specific elements within a block. The name Notes was chosen to clearly distinguish it from WordPressโ€™s existing comment functionality, making it easier to discuss and document the feature moving forward. It also provides flexibility for future expansions beyond block-level notes, without needing another rename.ย This was truly a collaborative effort to land this feature with various folks from across the community coming together from Fueled, Multidots, Automattic, GoDaddy, and Human Made contributing as well as individuals like Adam Silverstein and Aki Hamano.

Feedback as the feature lands in Core will help shape whatโ€™s next here so please help test and open issues. For now, initial future plans include compatibility with real time collaboration, the ability to leave notes on individual items within a block rather than just at the block level, and built-in notifications.ย 

Follow along in this dedicated GitHub issue.

Adminadmin (and super admin) redesign: DataView & DataForm

Early exploration centers on defining foundational primitives with DataView and DataForm components, building blocks that separate structure from presentation to support broad reusability across admin surfaces. Work has continued on both of these components to make them strong foundations that can handle more use cases with 154 commits done by ~37 different authors just for this latest release. For WordPress 6.9, this includes access to new field types, expanded filtering options, grouping support, views persistence, and improved configuration for custom dashboards and workflows. As a reminder, both of these components have been created with extensibility at the heart of everything being built. You can view each in their respective Storybook views: DataViews and DataForm. You can also read a more granular overview of whatโ€™s landed in this iteration issue for 6.9.

For now, if you want to help test and give feedback, you can do so by using the existing Pages, Templates, and Patterns screens in theย Site Editor. For some of the more experimental aspects, you can help test by using the latest Gutenberg plugin and enabling from the Gutenberg > Experiments page the following different experiments:ย 

  • Data Views: add Quick Edit โ€“ this adds a Quick Edit panel in the Site Editor Pages experience.
  • Data Views: enable for Posts โ€“ this adds a redesigned Posts dashboard accessible through a submenu item in the Gutenberg plugin so you can still have access to your current Posts experience.ย 

Below is a demo of this last experiment that enables Data Views for Posts. It also showcases a feature of WordPress 6.9 with data views options now persisting across sessions, until you hit reset view.

Follow along in this dedicated Admin Materials and Surfaces issue.

#gutenberg, #phase-3

Summary, Dev Chat, November 5, 2025

Startย of the meeting inย 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/., facilitated by @amykamala ๐Ÿ”— Agenda post.

Announcements ๐Ÿ“ข

WordPress 6.9ย 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.ย 3 is now available!

WordPress 6.9 Beta 3 is now available for download and testing.
Further information you can find here.

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/ 22.0 has been released!

Gutenberg 22.0 has been released and isย available for download! Thanks to @cbravobernal for writing this wonderful overview.

Forthcoming releases ๐Ÿš€

WordPress 6.9 Timeline

WordPress 6.9ย is planned forย December 2, 2025.ย Release Candidaterelease candidate One of the final stages in the version release cycle, this version signals the potential to be a final release to the public. Also see alpha (beta).ย 1 is planned forย November 11.

Bug Scrub Schedule

Regular scrubs are already underway, led by @wildworks and @welcher across time zones.
Full details are in the Bug Scrub Schedule for WordPress 6.9.

Call for Testingย 

The Test Team invitesย testing and feedbackย on the following upcomingย 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.ย editor features:

There were no discussions or topics raised during todayโ€™s Dev Chat.

#6-9, #core, #dev-chat

Whatโ€™s new in Gutenberg 22.0? (5 November)

โ€œWhatโ€™s new in 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/โ€ฆโ€ posts (labeled with the #gutenberg-new tag) are posted following every Gutenberg release on a biweekly basis, showcasing new features included in each release. As a reminder, hereโ€™s an overview of different ways to keep up with Gutenberg and the Editor.

Whatโ€™s New In
Gutenberg 22.0?

Gutenberg 22.0 has been released and is available for download!

Typically, the Gutenberg release following a WordPress point releaseMinor Release A set of releases or versions having the same minor version number may be collectively referred to as .x , for example version 5.2.x to refer to versions 5.2, 5.2.1, 5.2.3, and all other versions in the 5.2 (five dot two) branch of that software. Minor Releases often make improvements to existing features and functionality. focuses on coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. quality and bugbug A bug is an error or unexpected result. Performance improvements, code optimization, and are considered enhancements, not defects. After feature freeze, only bugs are dealt with, with regressions (adverse changes from the previous version) being the highest priority. fixes over new enhancements. As such, this will be a relatively quiet release.

  1. Real-time Collaboration: Post Meta Synchronization
  2. A new theme package
  3. Changelog

Real-time Collaboration: Post MetaMeta Meta is a term that refers to the inside workings of a group. For us, this is the team that works on internal WordPress sites like WordCamp Central and Make WordPress. Synchronization

This release introduces real-time synchronization for post meta, enhancing the collaborative editing experience with your custom post-meta or footnotes!

An example of synced footnotes.

A new theme package

A new package of design tokens, which will be the new foundation for Gutenbergโ€™s design system, is now available. This package is also a prerequisite for the new UIUI User interface components package.

Changelog

Enhancements

  • Add theme package. (72305)
  • Consistently use font-weight 499 instead of 500. (72473)
  • Label enforcement workflow: Add Iteration label to PR enforcement workflow. (72670)
  • Template activation: Update 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. icons. (72772)
  • Try using DataViewsPicker in an updated media modal. (71944)
  • Update: Label of โ€œMove to trashTrash Trash in WordPress is like the Recycle Bin on your PC or Trash in your Macintosh computer. Users with the proper permission level (administrators and editors) have the ability to delete a post, page, and/or comments. When you delete the item, it is moved to the trash folder where it will remain for 30 days.โ€ action to โ€œTrashโ€. (72596)

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. Library

  • Math Block: Use monospaced font for LaTeX input. (72557)
  • Add snackbar notices for page creation in Navigation block. (72627)
  • Breadcrumbs: Add archives support. (72478)
  • Categories Block: Add taxonomyTaxonomy A taxonomy is a way to group things together. In WordPress, some common taxonomies are category, link, tag, or post format. https://codex.wordpress.org/Taxonomies#Default_Taxonomies. css class. (72662)
  • Fit text: Update help text to clarify override of font-size. (72303)
  • Latest Comments: Add option to display full comments. (72665)

DataViews

  • Add isCollapsible to the card layout in DataForm. (72540)
  • DataForm: Set spacing for regular and card layouts. (72249)
  • Keep icon-only buttons on mobile for bulk actions. (72761)
  • Update: Hide primary action buttons on mobile. (72597)

Components

  • ComboboxControl: Display reset button only if thereโ€™s a value. (72595)
  • TabPanel: Update tab font-weight. (72455)

Collaboration

  • Notes: Update delete confirmation message. (72737)

Global Styles

  • Allow access in the post editor. (72681)

Block bindings

  • Add source label to the modal title UI. (72632)

Bug Fixes

  • Core Data: Avoid extraneous when creating a new record. (72666)
  • Fix build command for tokens package on Windows. (72605)
  • Global Styles: Fix the save panel changes. (72701)
  • Packages: Do not limit the exports of the template packages. (72694)
  • PluginSidebar: Fix auto more menu item props. (72630)
  • Template activation: Fix isActive and isCustom values. (72641)
  • Template activation: Fix undefined array key PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher warning. (72729)
  • Use default popover placement for image format popover. (72550)

Collaboration

  • Block Notes: Fix issue where box shadow is cut off when active note is the last one. (72606)
  • Ensure โ€œAdd Noteโ€ component floats next to block in unpinned mode. (72494)
  • Notes: Always open histroy sidebar if note is resolved. (72708)
  • Notes: Disable floating notes for โ€˜template-lockedโ€™ mode. (72646)
  • Notes: Fix โ€˜View notesโ€™ on mobile screens. (72546)
  • Notes: Fix PHPUnit tests. (72781)
  • Notes: Fix block toolbar indicator logic. (72736)
  • Notes: Fix strange default sidebar animation. (72710)
  • Notes: Fix the โ€˜glitchโ€™ when selecting a note with a missing block. (72516)
  • Notes: Fix the focus transfer issue when switching the sidebars. (72486)
  • Notes: Load all records. (72692)
  • Notes: Prevent 403 error for low capability users. (72767)

Block Library

  • Accordion: Update block descriptions. (72602)
  • Breadcrumbs: Fix date archives with plain permalinks. (72709)
  • Date block: Update block description. (72565)
  • Fix empty URLURL A specific web address of a website or web page on the Internet, such as a websiteโ€™s URL www.wordpress.org value from unbinding entity from inspector sidebar. (72447)
  • Fix: Force LTR direction in Math block textarea for RTL languages. (72684)
  • Image block: Add guard for null refs in setButtonStyles callback. (72715)
  • Math: Enable horizontal auto-scrolling. (72633)
  • Post Date: Fix variations for Query LoopLoop The Loop is PHP code used by WordPress to display posts. Using The Loop, WordPress processes each post to be displayed on the current page, and formats it according to how it matches specified criteria within The Loop tags. Any HTML or PHP code in the Loop will be processed on each post. https://codex.wordpress.org/The_Loop.. (72617)
  • Terms Query: Show nested terms toggle when inheriting. (72510)
  • Update: Disable font size when fit text is enabled and the opposite. (72533)

Components

  • Badge: Add max-width for text truncation. (72653)
  • Button: Ensure that icons donโ€™t shrink. (72474)
  • Fix Popover closing unexpectedly when a Menu inside it is closed. (72376)
  • Fix label markup for โ€˜FocalPointPickerโ€™. (70835)
  • Fix selection of font size presets if presets have the same size value. (71703)
  • Stop using rems. (72669)

Templates 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.

  • Template activation: Allow duplicates of โ€˜customโ€™ 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 templates to be activated. (72713)
  • Template activation: Remove the ability to deactivate registered templates. (72636)
  • Templates: Adds โ€˜typeโ€™ property to activeField as boolean in page templates. (72648)

Command Palette

  • Disable site editor navigation commands on Networknetwork (versus site, blog) Adminadmin (and super admin) โ€“ Take 2. (72698)
  • Disable site editor navigation commands on Network Admin. (72572)

Interactivity API

  • iAPI: Fix derived state closures processing on client-side navigation. (72725)

Write mode

  • Accordion: Dontโ€™ show Add button in contentOnly mode. (72704)

Icons

  • Fix irregular shape in not-found icon. (72645)

Block bindings

  • Add bindableAttributes in preview context. (72625)

Typography

  • Fit text: Remove sizing limitation when the block is selected. (72570)

REST APIREST API The REST API is an acronym for the RESTful Application Program Interface (API) that uses HTTP requests to GET, PUT, POST and DELETE data. It is how the front end of an application (think โ€œphone appโ€ or โ€œwebsiteโ€) can communicate with the data store (think โ€œdatabaseโ€ or โ€œfile systemโ€) https://developer.wordpress.org/rest-api/.

  • Notes: Fix โ€˜childrenโ€™ embedding via REST API. (72561)

Style Book

  • Fix error with display of Heading block style variations in style book. (72551)

DataViews

  • Fix password suffix alignment. (72524)

Block Transforms

  • Add metadata transformation. (72462)

Patterns

  • Fix contentOnly insertion, removal, and moving. (72416)

AccessibilityAccessibility Accessibility (commonly shortened to a11y) refers to the design of products, devices, services, or environments for people with disabilities. The concept of accessible design ensures both โ€œdirect accessโ€ (i.e. unassisted) and โ€œindirect accessโ€ meaning compatibility with a personโ€™s assistive technology (for example, computer screen readers). (https://en.wikipedia.org/wiki/Accessibility)

  • Notes: Donโ€™t collapse note on Escape if the event has been prevented. (72657)

Block Library

  • Fix focus loss from unsync and edit button in navigation link inspector sidebar. (72436)

Components

  • Button: Update font-weight to 500. (70787)

Performance

  • Donโ€™t subscribe to store unless fitText option is enabled. (72634)
  • Optimize build using shared package cache. (72667)

Block Editor

  • Perf: Avoid rich-text binding subscription if block does not have bindings. (72496)

Experiments

Collaboration

  • Real-time collaboration: Add support for syncing post meta. (72332)
  • Real-time collaboration: Ensure Yjs imports are inside experimental flag check. (72503)
  • Real-time collaboration: Implement CRDT persistence for collaborative editing. (72373)

Documentation

  • Fix incorrectly tabbed code blocks. (72745)
  • Move backportbackport A port is when code from one branch (or trunk) is merged into another branch or trunk. Some changes in WordPress point releases are the result of backporting code from trunk to the release branch. to 7.0 because it was punted to future release. (72472)
  • Theme: Add Storybook stories. (72747)
  • add: Missing JSONJSON JSON, or JavaScript Object Notation, is a minimal, readable format for structuring data. It is used primarily to transmit data between a server and web application, as an alternative to XML. Schema for blocks. (72590)

Code Quality

  • Build: Fix primitives package warning. (72456)
  • Bundled packages should expose their styles in exports. (72438)
  • Fix TS types for e2e-test-utils-playwright package. (72741)
  • Global Styles: Add UI package. (72599)
  • Global Styles: Cleanup the previous global styles private exports in block-editor. (72702)
  • Move grid experiment changelog to 7.0 folder. (72508)
  • Remove specific logger in test environments. (72457)
  • Styles Canvas: Refactor state and rendering. (72635)
  • Styles: Move global styles data logic to a dedicated package. (72464)
  • Template activation: Remove fake post type for registered templates. (72674)
  • Template activation: Rename new endpoints. (72700)
  • Template activation: Revert to old endpoint for post template picker. (72661)
  • preferences: Convert the package to TypeScript. (71915)

Block Library

  • Accordion Heading: Update description. (72777)
  • Cleanup clearBinding usage. (72439)
  • Post Date: Update logic when to show the edit control. (72631)
  • Remove broken content only settings menu items feature. (72470)

Templates API

  • Template activation: Initialise old autosave and revisionsRevisions The WordPress revisions system stores a record of each saved draft or published update. The revision system allows you to see what changes were made in each revision by dragging a slider (or using the Next/Previous buttons). The display indicates what has changed in each revision. endpoints. (72680)
  • Template activation: Remove reset action. (72679)

Collaboration

  • Notes: Remove custom โ€˜PluginMoreMenuItemโ€™ handler. (72640)
  • Notes: Render the sidebar next to the default editor sidebar. (72618)

Block Editor

  • Switch from selector to useBlockEditingMode for AllowedBlocksControl. (72728)

Block bindings

  • Remove editorUI and modal versions. (72723)

Plugin

  • Notes: Backport REST API changes in core. (72554)

Interactivity API

  • iAPI: Update deprecated usage of data-wp-on-async. (72445)

Tools

Build Tooling

  • Build: Add a step to auto-register scripts in the build tool. (72628)
  • Build: Auto register styles from packages. (72699)
  • Build: Auto-register script modules. (72541)
  • Build: Cleanup the build script. (72740)
  • Build: Fix script_debug modules and scripts. (72485)
  • Build: Generate plugin version and make the build script plugin agnostic. (72707)
  • Build: Move the build tool to a dedicated package. (72743)
  • Build: Support third-party plugin scripts properly. (72760)
  • Build: Update output folders for scripts and modules. (72482)
  • Enqueue non-minified JSJS JavaScript, a web scripting language typically executed in the browser. Often used for advanced user interfaces and behaviors. files when SCRIPT_DEBUG is enabled. (72480)
  • FIX PHPUnit failure in previous WordPress version. (72705)
  • 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/ Actions: Allow writing PRs when auto-cherry-picking. (72573)
  • Persist credentials when cherry-picking commits to a release branchbranch A directory in Subversion. WordPress uses branches to store the latest development code for each major release (3.9, 4.0, etc.). Branches are then updated with code for any minor releases of that branch. Sometimes, a major version of WordPress and its minor versions are collectively referred to as a "branch", such as "the 4.0 branch".. (72556)
  • Storybook: Fix dev script. (72487)

Testing

  • Add end to end tests for Fit Text. (72406)
  • Change bin script type-checking from inclusion to exclusion. (72675)
  • Improve output buffer for sending server-timing headerHeader The header of your site is typically the first thing people will experience. The masthead or header art located across the top of your page is part of the look and feel of your website. It can influence a visitorโ€™s opinion about your content and you/ your organizationโ€™s brand. It may also look different on different screen sizes.. (72536)
  • Notes: Improve pinned sidebar end-to-end test. (72652)
  • Update guidance around unique element IDs. (72748)
  • Upgrade Playwright to v1.56. (72751)

First-time contributors

The following PRs were merged by first-time contributors:

Contributors

The following contributors merged PRs in this release:

@adamsilverstein @aduth @cbravobernal @chriszarate @ciampo @DAreRodz @elazzabi @ellatrix @harshbhonsle @heavyweight @ItsRoy69 @jameskoster @jeryj @jorgefilipecosta @joshualip-plaudit @juanfra @levinbaria @lezama @luminuu @Mamaduka @manzoorwanijk @mikachan @mirka @ntsekouras @oandregal @ockham @priethor @ramonjd @roseg43 @ryanwelcher @sidharthpandita1 @stokesman @t-hamano @talldan @tellthemachines @Utsav-Ladani @westonruter @youknowriadhamanoย @talldanย @tellthemachinesย @theaminuliย @theminaldiwanย @Utsav-Ladaniย @yashjawaleย @youknowriad

Props @sirlouen and @priethor for peer review.

#block-editor, #core-editor, #gutenberg, #gutenberg-new

Dev Chat Agenda โ€“ November 5, 2025

The next WordPress Developers Chat will take place on Wednesday, November 5, 2025, at 15:00 UTC in theย coreย channel onย Make WordPress Slack.

The live meeting will focus on the discussion for upcoming releases, and have an open floor section.

The various curated agenda sections below refer to additional items. If you haveย ticketticket Created for both bug reports and feature development on the bug tracker.ย requests for help, please continue to post details in the comments section at the end of this agenda or bring them up during the dev chat.

Announcements ๐Ÿ“ข

WordPress 6.9ย 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.ย 3 is now available!

WordPress 6.9 Beta 3 is now available for download and testing.
Further information you can find here.

Forthcoming releases ๐Ÿš€

WordPress 6.9 Timeline

WordPress 6.9ย is planned forย December 2, 2025. Release Candidaterelease candidate One of the final stages in the version release cycle, this version signals the potential to be a final release to the public. Also see alpha (beta). 1 is planned forย November 11.

Call for Testingย 

The Test Team invitesย testing and feedbackย on the following upcomingย 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.ย editor features:

Bug Scrub Schedule

Regular scrubs are already underway, led by @wildworks and @welcher across time zones.
Full details are in the Bug Scrub Schedule for WordPress 6.9.

Discussions ๐Ÿ’ฌ

The discussion section of the agenda is for discussing important topics affecting the upcoming release or larger initiatives that impact the CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. Team. To nominate a topic for discussion, please leave a comment on this agenda with a summary of the topic, any relevant links that will help people get context for the discussion, and what kind of feedback you are looking for from others participating in the discussion.

Upload error handling for themes and plugins

@nimeshatxecurify requested feedback on #29798 and #44042. The PR adds clearer messages when 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 ZIP is uploaded via the theme uploader (and vice versa). Feedback on the approach is welcome.


No further topics have been submitted for this discussion round yet.
If you have something in mind, feel free to leave a comment below this post.

Open floor ย ๐ŸŽ™๏ธ

Any topic can be raised for discussion in the comments, as well as requests for assistance on tickets. Tickets in the milestone for the next major or maintenance release will be prioritized.

Please include details of tickets / PRs and the links in the comments, and indicate whether you intend to be available during the meeting for discussion or will be async.

#6-9, #agenda, #core, #dev-chat

X-post: Week in Test: November 3, 2025

X-comment from +make.wordpress.org/test: Comment on Week in Test: November 3, 2025

Summary, Dev Chat, October 29, 2025

Startย of the meeting inย 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/., facilitated by @amykamala ๐Ÿ”— Agenda post.

Announcements ๐Ÿ“ข

WordPress 6.9ย 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.ย 2 is now available!

WordPress 6.9 Beta 2 is now available for download and testing.
Further information you can find here.

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/ 21.9 has been released!

Gutenberg 21.9 has been released and isย available for download! This release brings new blocks and polishes existing ones, plus new DataViews enhancements and many bugfixes. Thanks to @priethor for writing this wonderful overview.

Forthcoming releases ๐Ÿš€

WordPress 6.9 Timeline

WordPress 6.9 is planned for December 2, 2025. Beta 3 is planned for November 4.

Bug Scrub Schedule

Regular scrubs are already underway, led by @wildworks and @welcher across time zones.
Full details are in the Bug Scrub Schedule for WordPress 6.9.

Call for Testingย 

The Test Team invitesย testing and feedbackย on the following upcomingย 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.ย editor features:

Open Floor ๐ŸŽ™๏ธ

@adamsilverstein asked for feedback on handling long note threads in floating mode (#72507). Two approaches have been tested so far: making threads scrollable and ensuring the active note is not cut off. The goal is to find a solution without full-document scrolling. Feedback is welcome.

Pull Requests:

  • Makes threads scrollable (PR#72547)
  • Ensures bottom of active floating note is never cut off at bottom (PR#72454)

Call for Testing โ€“ Notes

@jeffpaul noted that a Call-for-Testing post for the Notes feature is planned. Contributors interested in assisting with drafting or reviewing are invited to reach out to him directly.

#6-9, #core, #dev-chat

Gutenberg 21.9 (October 22)

โ€œWhatโ€™s new in 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/โ€ฆโ€ posts (labeled with the #gutenberg-new tagtag A directory in Subversion. WordPress uses tags to store a single snapshot of a version (3.6, 3.6.1, etc.), the common convention of tags in version control systems. (Not to be confused with post tags.)) are posted following every Gutenberg release on a biweekly basis, showcasing new features included in each release. As a reminder, hereโ€™s an overview of different ways to keep up with Gutenberg and the Editor.

Whatโ€™s New In
Gutenberg 21.9?

Gutenberg 21.9 has been released and isย available for download!

This release brings new blocks and polishes existing ones, plus new DataViews enhancements and many bugfixes.

All the blocks!

Gutenberg 21.9 ships with a handful of new tricks and treats in the form of blocks ๐ŸŽƒ . For starters, the Math 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. will allow you to add complex LaTeX formulas natively in the editor.

Whether math is your cup of tea or not, the new Breadcrumbs block has your back and will for sure become very handy in sites with nested pages.

Similarly convenient for sites rich in content, this release also introduces the new Term Count and Term Name blocks โ€“ simple yet effective for helping navigate your tagged content!


Finally, the accordion block now supports anchors and is ready to ship with WordPress 6.9, too.

Direct drag and drop

Rearranging blocks is a common action when organizing your site, and drag & drop is a very comfortable way to do so. This release improves this interaction by directly moving the block around when you drag, instead of showing a drag chip.

DataViews customization persistence

A long-standing user request, views powered by DataViews now support persistence. This means that when you customize the view settings on the patterns, templates, and pages screens within the site editor, your preferences will persist when you leave the screens and return, reverting only to defaults when you hit the โ€œReset viewโ€ button.

Continue reading โ†’

#gutenberg