Gutenberg Times: WordPress 6.9 Source of Truth

Welcome to the Source of Truth for WordPress 6.9!

Before you dive headfirst into all the big and small changes and pick your favorites, make sure to read these preliminary thoughts about this post and how to use it. If you have questions, leave a comment or email me at pauli@gutenbergtimes.com.

Changelog

Any changes will be cataloged here as the release goes on.

Important note/guidelines

Please do not copy and paste what is in this post since this will be shared with many people. This should be used to inspire your own content and to ensure that you have the best information about this release. If you do copy and paste, keep in mind that others might do the same, opening the door for some awkwardness around duplicated content out on the web.

  • Each item has been tagged using best guesses with different high-level labels so that you can more readily see at a glance who is likely to be most impacted.
  • Each item has a high-level description, visuals (if relevant), and key resources if you would like to learn more.

Overview

Note: As always, what’s shared here is being actively pursued but doesn’t necessarily mean each will make it into the final release of WordPress 6.9.

WordPress 6.9 introduces several new features and performance enhancements.

Key new features include:

  • Collaborative Feedback and Content Control: Block-level Notes facilitate team feedback, allowed blocks UI, Abilities API, visual drag and drop, binding blocks to external controls.
  • New Blocks: Discover Accordion, Terms Query, Math, and Time to Read blocks.
  • Typography Enhancements: Benefit from new text-fitting typography.
  • Dashboard-wide Command Palette: The Command Palette will help users streamline their workflow across WordPress Admin pages.

Performance improvements include:

  • Optimized Loading: On-demand block-style loading and faster emoji detection.
  • Efficient Scheduling: Optimized cron execution.

Furthermore, WordPress 6.9 lays the groundwork for future AI integration with the new Abilities API, which enables secure automation through machine-readable WordPress capabilities.

WordPress 6.9 is set to be released on December 2, 2025.

Of note, this release includes Gutenberg plugin versions 20.5 – 21.9.

Important links:

Assets

In this Google Drive folder you can view all assets in this document.

Tags

To make this document easier to navigate based on specific audiences, the following tags are used liberally:

  • [end user]: end user focus.
  • [theme author]: block or classic theme author.
  • [plugin author]: plugin author, whether block or otherwise.
  • [developer]: catch-all term for more technical folks.
  • [site admin]: this includes a “builder” type.
  • [enterprise]: specific items that would be of interest to or particularly impact enterprise-level folks
  • [all]: broad impact to every kind of WordPress user.

Command Palette everywhere [all]

A couple of years ago the Command Palette was first released for the Site Editor. It provides content creators and administrators with a quick search and command execution tool. Invoked by Ctrl+K or Cmd+K. It is now available from any admin screen and helps streamline content creation as well as administering a WordPress site. It provides shortcuts to places otherwise only available by navigating multiple menu levels deep.

Command Palette now available from the dashboard

Technically, this change extracts navigation commands from `@wordpress/edit-site` to `@wordpress/core-commands`, making them universally accessible. This architectural shift sets the foundation for admin-wide command integration in WordPress 6.9 and beyond, potentially reducing the need for repetitive clicking through admin menus.

  • For developers the new useCommands hook was introduced. (71603)

Block editor updates

Notes

Asynchronous collaboration comes to WordPress via the new Notes feature and rings in the 3rd Phase of Gutenberg. Site owners, Editors and Authors can collaborate by leaving comment directly on the post or page, attached to the blocks in the editor. The notes are threaded, resolveable, and can be reopened as well. Add an access notes from the Block toolbar and via the sidebar. Post authors will receive email notification when notes are added to the content.

Collaborative Notes in WordPress 6.9

Notes are by default enabled for Posts and Pages. They can be enabled also for other content post types via the `register_post_type` function.

PHP

register_post_type( 'book', array(
	'label' => 'Books',
	'public' => true,
	'show_in_rest' => true,
	'supports' => array(
		'title',
		'editor' => array( 'notes' => true ),
		'author',
	),
) );

More details on handling Notes programmatically can be found in the Dev Note: Notes feature in WordPress 6.9

Visual Drag & Drop 🐉 💧

Drag-and-drop just got smarter. Blocks now show live visual feedback as you reposition them, making layout building more intuitive and precise. You’ll see exactly where elements land before releasing, accelerating the creative process. (67470). Currently, this only works for single blocks. Drag and Drop of multiple blocks is slated for WordPress 7.0.

UI for managing allowed Blocks in Templates and Patterns. 

WordPress now makes managing allowed blocks simpler with a new UI tucked in advanced settings. Previously, developers had to edit block markup directly in code view—not user-friendly. This updates makes things easier for website admins, theme builders, and agencies enforcing specific block rules in patterns and templates. While agencies already handled this via code, the new interface offers a nicer interaction model. It’s part of WordPress’s broader mission: letting users build complex sites without touching code at all. (72191)

Hide and Show Blocks

WordPress 6.9 introduces long-awaited control to hide blocks in the editor while preserving their structure within templates. This initial implementation provides content creators and designers with the ability to manage blocks that are not always displayed, such as seasonal content or conditional elements.

Instead of deleting and recreating blocks, users can now simply toggle their visibility, retaining all settings. This foundational feature paves the way for more sophisticated conditional display options in future releases, potentially including role-based or time-based visibility controls. (71203)

Additional CSS control moved.

Theme builders might go searching for the Additional CSS controls. They were moved into the ellipsis menu in the header of the Styles page in either side of the screen (71550)

Copy Styles keyboard shortcut

A new keyboard shortcut helps with pasting styles from one block to another and can speed up content creation workflows: cmd/ctrl + options/alt + v (69196)

Block Style Variations in Style Book

To make the Stylebook even more comprehensive, it now surfaces block styles for core blocks as well as custom blocks. This makes it possible to change block style variations site-wide in one screen (70448).

The Starter Patterns modal for all post types. 

With WordPress 6.9, contributors addressed a limitation in the starter pattern modal, which previously appeared exclusively when creating pages. This restriction is now removed from the `StartPageOptions` component, enabling the modal to display across all post types where patterns exist. The fix resolves a regression introduced in earlier pulls, expanding design flexibility for WordPress content creators working with diverse content structures.(69753)

Why iframe the Post Editor?

The process to restructure how the WordPress post editor works started a few years ago. WordPress 6.9 begins transitioning the editor into this isolated iframe, with full completion coming in WordPress 7.0. Think of an iframe like a sandbox—a separate container within a webpage. Currently, the editor runs in the same space as WordPress’s admin interface, causing styling conflicts. This separation prevents admin styles from interfering with content editing, making the editor preview match what readers actually see. Plugin developers need to update older blocks to work with this new setup or they’ll stop functioning properly.

The Dev note Preparing the Post Editor for Full iframe Integration has more details. And in the comments many immediate questions have been answered.

Relevant bug fixes for backward compatibility checks

Certain bugs have been around for a while and developers often have found work arounds. Now that those bugs are fixed, it might be possible that the work around don’t work any more and it’s feasible to remove it.

  • Comments Pagination: Remove unwanted bottom margin from links. (70360)
  • Remove screencast.com embed block variation. (70480)
  • Tag Cloud: Remove unnecessary full-width padding. (69725)
  • HTML Block: Remove space below textarea. (70055)
  • Fix : Calendar block: Colors do not change between global styles and theme.json. (70184)
  • Image Block: Preserve line breaks in media caption. (70476)
  • Search Block: Move search setting to inspector. (70144)

New Blocks

WordPress 6.9 brings six new blocks to WordPress editor: an Accordion block and its nested InnerBlocks, a Time-to-read block that also can show the word count of a post or page, the Term Query block, and the Math block to display mathematical formulas in science and essay posts. Comment handling also became easier with two more blocks, Comment Count and Comment Link.

Accordion Block

The Accordion Block has been long awaited and it is now available to all WordPress users. It’s a nested structure using Accordion Block, Accordion Item, Accordion Heading and Accordion Panel blocks.

An Accordion block has multiple Accordion Items, each comprising of a Accordion Heading + Icon and an Accordion Panel with the content.

The default styling is minimal and opens a lot of design possibilities for theme builders to cover all the use cases. On the Developer blog you’ll find a tutorial of the various methods for styling an Accordion block, using the example of an FAQ page (64119)(71222)(71388).

The Snippets section of the Developer Blog shows how to add Schema.org microdata for Accordion block FAQs

Term Query Block

Traditionally, creating category and tag pages has been complex and required custom queries and workarounds. The new Terms Query block offers a built-in way to display and organize categories and tags, similar to how the Query block manages posts. (70720)

There are also supporting blocks:

  • Term Template block
  • Term Name block
  • Term Count block

Together with the already existing Term Description block, this additional support for display of categories or tags is particularly useful for directory and magazine sites who provide content filters and subpages for their readers. The interface provides an `order` and `order-by` sorting in a single dropdown. All blocks have the necessary design tools for styling and the Term Count block also has a toggle to make it a link. For those working extensively with taxonomies, the ongoing hierarchy discussion outlines future enhancements to taxonomy handling in WordPress.

Time to Read Block

The Time to Read block, available in the Gutenberg plugin for a long time went through an extended accessibility review before it was added to WordPress Core.

It now has a toggle control to display a range of time rather than a fixed average reading time. It also comes with a variation to display a word count for the post or page it’s used on (71606) (71841). 

Time to Read / Word Count block WordPress 6.9

Math Block

With the Math Block content creators can now add mathematical formulas in LaTeX syntax to their post and pages. The LaTeX syntax can also be used together with the inline Math format.

Comment Count and Comment Link Blocks

Two new comment blocks help theme builders to handle comment count and comment links separately. Both blocks have been available in the Gutenberg plugin for a few years and only for the Site editor. Earlier this year, they came out of experimentation and were made available for all editor screens. So now a content creator can for instance include a links to the comment section on top of the post and be more deliberate in allowing access to comments only on certain posts.

Comment Link and Comment count in Template

Updates to existing blocks

For WordPress 6.9, contributors standardized most blocks’ Inspector settings to use the ToolsPanel component, bringing visual consistency across the editor. The shift grants users granular control over displayed settings while simplifying how developers inject additional options into existing groups. The ToolsPanel aligns Inspector controls with the Styles sidebar, already leveraging the component extensively, creating a cohesive authoring experience. (67813)

Stretchy Text for Heading and Paragraph blocks.

Both Heading and Paragraph blocks now support a new “Stretchy” variation that stretches text to the full width of its container. The transform tool appears in the sidebar, allowing users to convert text into this stretchy format.

Content creators can find these variations also in the Block inserter or via the Slash command.

Stretchy Text offers designers and content creators an additional creative tool, opening up numerous possibilities for visually appealing text, especially when paired with suitable fonts.

Developers can add support for this feature to any Custom text block via block.json. (73148)(73056) (73067)(72923)

JSON

{
	"supports":{
		"typography":{
				"fitText": true,
		}
	}
}

Button Block

Button Block now sports HTML element selection in Advanced settings, letting creators choose between semantic <a> links and true <button> elements. This tackles accessibility headaches where users mistakenly treat buttons as links, confusing screen readers. The dropdown educates users about proper usage, empowering developers and non-coders alike to build accessible interfaces without custom code (70139).

Cover Block improved video handling.

The Cover Block now supports poster images for videos, enhancing accessibility for users with slow internet or mobile devices. These images can be easily added by dragging and dropping the file onto the Poster Image control, streamlining the post creation process (70816) (71039)  (70939).

Details Block

The Formatting features are now enabled for the Details Block, similar to the Paragraph block. Users can now use special formatting like Strikethrough, Sub or Superscript, and highlighting. This also opens up the list to be extended via plugins.

Gallery Block

This next WordPress version adds the support for gallery-wide aspect ratio setting to the Gallery Block. User can now set the same aspect ratio for all images in the gallery with one click from the sidebar. (71116) (72104).

Theme developers can control the availability via theme.json. The code snippet shows an example of removing the default choice `defaultAspectRatios` and only offering two choices in the editor.

JSON

"settings":{
        "blocks" {
            "core/gallery":{
                "dimensions":{
                    "defaultAspectRatios":false,
                    "aspectRatios": [
                        {
                             "name": "Square - 1:1",
                             "slug": "square",
                             "ratio": "1"
                        },
                        {
                             "name": "Wide - 16:9",
                             "slug": "16-9",
                             "ratio": "16/9"
                        }
                  ]
             }          
         }
    }

Heading Block CSS specificity fix

WordPress 6.9 fixes a specificity issue with the Heading block’s background padding. Previously, padding styles applied to headings with backgrounds were affecting other blocks that use heading elements, such as the Accordion Heading block. This fix ensures that background padding is only applied to actual Heading blocks.

The CSS selector for applying padding to headings with backgrounds has been made more specific. The selector now targets `.wp-block-heading.has-background` instead of just heading element tags (h1, h2, etc) with the` .has-background` class.

Dev note: Heading Block CSS Specificity Fix in WordPress 6.9

Navigation Block

The Navigation block in this WordPress release has been significantly improved. Builders can now find the create page functionality directly from the link UI dropdown and the process of creating a page is streamlined by an additional “publish immediately” checkbox. (71188)(71487)

navigation page link, add page feature.
Navigation create page and immediately publish.

Similarly the button block inside the navigation block also has the option to create a new page. It’s a slightly different approach, but it helps with streamlining site building work. (69368)

Navigation button with create page feature.

Site builders can now customize aria-labels independently of menu titles, which is great for accessibility. The text box is located under Advanced > Menu Name (66935)

Customize the name of the navigation menu

The hamburger icon now consists of individual SVG lines, opening up more styling and animation possibilities. Plus, the automatic panel expansion for Navigation options in site editing makes the workflow smoother. (71791)(56346) (69343

To improve the robustness of the Navigation, the Navigation Link Block is now creating the URL dynamically and even if the slug of the page changes the link will be automatically updated.(72422) A similar mechanism also was applied to the Navigation Submenu block.

The submenu control of the background is now much easier. A new slider control for the overlay helps with the design. (69379)

Navigation submenu overlay slider

In template part view, a new button Edit Navigation helps users to update Navigation block settings and menu items directly from this view.

Query Loop Blocks

Blocks primarily used in a Query Loop context received a few quality-of-life enhancements and accessibility controls.

content block HTML element selection.

Content Block

The Content block in WordPress 6.9 now features a `tagName` selector in its Advanced Settings. This allows theme builders to replace the default div wrapper with semantic HTML elements (like main, section, or article), improving accessibility, SEO, and content structure. This powerful tool enhances how blocks align with web standards. (70698)

Date Block supports custom dates.

The Date block has undergone significant enhancements. It now supports custom dates, and its existing Post Date and Last Modified Date variations have been updated to utilize Block Bindings. This change involved creating a new binding source, core/post-data, which exposes the publish date as date and the last modified date as modified for any given post (70585).

Query Title get Post Type label

The Query Loop block now supports a new Post Type Label variation. This feature enables users to display the post type of the current item within the block, which is especially helpful for showcasing the post type name when creating custom post type archive templates. (71167)

Query block post type labels

Query Total

The total number of query results return are displayed via the Query Total block. In WordPress 6.9, this block received color controls for styling. (69500)

RSS Block

The RSS Block is a block to display another website’s RSS feed in a post or template. This version holds two small updates: An added option to display the links in a new tab or window and to control the `rel` attributes. RSS feeds from third-party sources sometimes include HTML entities in their titles. In a bug fix, the RSS Block now displays titles correctly.

Separator Block

A small update to the Separator block opens the styling options for designers: The HTML element can now be changed from a `<hr>` to a `<div/>` tag in not only increasing the range of design option but also accessibility. (70185)

Social Icons Block

The update to the Social Icons Block enables now extenders to register custom Social Icons variations. This way, any group of Social Icons that are relevant to the site owner can be created and used in the content, for instance icons of various Podcast directories, or to add icons for payment systems not available in core.

On the WordPress Developer Block developers will find a tutorial on how to register their own social media icons. Plugin developers can now remove existing icons and register their own. (70261)

A bug fix now makes sure the social icons honor theme.json styles for typography. (70380)

JSON

"core/social-links": {
		"typography": {
			"fontSize": "var(--wp--preset--font-size--x-large)"
		}
},

Table Block

The Table block received more robust handling of Markdown table parsing, specifically retaining alignment from a Markdown table.

| A – Left | B – Centered | C – Right | D – None |

| :——- | :———-: | ——–: | ——– |

| 100 | 150 | 200 | 250 |

| 200 | 250 | 300 | 350 |

| 300 | 350 | 400 | 450 |

| 400 | 450 | 500 | 550 |

| 500 | 550 | 600 | 650 |

The above Markdown example parsed into the block editor canvas is automatically converted to the Table block.

Video Block

The Video Block can now handle multiple language tracks with the option to set one as the default track. It’s also possible to add a poster image to the video block to improve accessibility for visitors with slow internet connections (71039) (70939)(70227).

Theme.json and Global Styles

WordPress theme development reaches new enrichment with theme.json support for form element styling. Developers can now target text-based controls and select/dropdown elements through the styles.elements property, defining colors, borders, and typography directly in Global Styles.

This eliminates custom CSS dependencies, allowing search forms, comment forms, and plugin-generated forms to automatically inherit the site’s design system. (34198) (70378) (70379) Below snippet shows an example for the textInput element.

JSON

"elements": {
	"textInput": {
			"border": {
				"radius": "0",
				"style": "solid",
				"width": "1px",
				"color": "red"
			},
			"color": {
				"text": "var(--wp--preset--color--theme-2)"
			},
			"typography": {
				"fontFamily": "var(--wp--preset--font-family--inter)"
			}
		}
}

An additional resource is the tutorial on the WordPress Developer blog: How WordPress 6.9 gives forms a theme.json makeover

Border Radius presets supported

It’s now possible to define border radius presets in the `theme.json` for your theme. The user experience changes slightly with the numbers of presets: up until eight, a user can enable the border radius along a slider. For nine and more present the user uses a drop-down select menu. Users can always access custom value input through the custom button to the right of the control.

As an example you can add the following to the `settings` property of your `theme.json` file. (67544). 

JSON

{ 
"settings"{
	"border": {
		"radiusSizes": [
				{
					"name": "Small",
					"slug": "small",
					"size": "2px"
				},
				{
					"name": "Medium",
					"slug": "medium",
					"size": "4px"
				},
				{
					"name": "Large",
					"slug": "large",
					"size": "6px"
				}
			]
	}
}

Button element inherits typography

With the release of WordPress 6.9, the button element defined in the default `theme.json` can inherit typographical styles from its parent. (70676)

The full styles for the element now look like this:

JSON

{
	"styles": {
		"elements": {
			"button": {
				"typography": {
					"fontSize": "inherit",
					"fontFamily": "inherit",
					"fontStyle": "inherit",
					"fontWeight": "inherit",
					"letterSpacing": "inherit",
					"textTransform": "inherit",
					"lineHeight": "inherit",
					"textDecoration": "none"
				}
			}
	}
}

A closer look at performance optimizations

WordPress 6.9 speeds up your site through several technical improvements. Scripts load more efficiently with priority ordering and move to footers when appropriate. Stylesheets load only when needed, particularly in classic themes, while styles for hidden blocks are omitted. The inline style limit increased to 40K. A new optimization system enables previously impossible efficiency gains. Database queries, UTF-8 processing, and cron tasks all improved. The Video block also eliminates layout shifts. Overall: more efficient performance across the board.

Details are in this Dev Note: WordPress 6.9 Frontend Performance Field Guide.

New and updated APIs for Developers

Abilities API

WordPress 6.9 features the Abilities API, a new foundational system designed to standardize how plugins, themes, and the WordPress core register and expose their capabilities. This API provides a unified, machine-readable registry of functionalities, ensuring consistent discovery, validation, and execution across various contexts, including PHP, REST API endpoints, and upcoming AI integrations.

More resources:

Block Bindings API

Updates to the Block Bindings API include enabling it for a few more core blocks. The refactor of the Date block is one of those examples. (70585)

Another is enabling Image block’s caption data to be available for Synced Pattern Overrides. (72476).  

The list of supported block attributes by Block Bindings API.

The function `getFieldsList` was available via the Gutenberg plugin and has been merged into WordPress Core now. Also, the attributes UI in the Block editor is now more flexible and handles any attributes from plugin developers. [Details will be available on the DevNote.]
More details can be found in the Dev Note: Block Bindings improvements in WordPress 6.9

DataViews and DataForm

WordPress 6.9 marks substantial progress for DataViews and DataForm components. There are no user-facing updates. Plugin developers can use the components for their products and on admin pages.

The Field API now handles array, boolean, email, media, date, datetime, telephone, password, URL, and color types with comprehensive validation support.

DataViews gained sophisticated filtering with type-specific operators, infinite scroll capabilities, and improved table layouts featuring alignment and action column pinning.

DataForm received new layout options including modal panels and card designs, alongside controls matching the expanded field types.

The new DataViewsPicker component is a selection-focused variant of DataViews designed for building item picker interfaces. It extends the familiar DataViews API with selection management and action buttons, making it ideal for workflows where users need to browse and pick items from a dataset.

These enhancements collectively strengthen the block editor’s data management infrastructure, enabling developers to build more capable interfaces while maintaining consistency across WordPress’s content administration.

Dev Note: DataViews, DataForm, et al. in WordPress 6.9

Interactivity API

Updates in WordPress 6.9 the Interactivity API with standardized directive IDs using triple-dash syntax, enabling multiple directives on single elements. The deprecated data-wp-ignore directive is removed. New TypeScript helpers AsyncAction and TypeYield improve asynchronous action typing. Client-side navigation improvements include dynamic stylesheet and script module loading, support for nested router regions, new attachTo options for overlays, and enhanced getServerState and getServerContext functions for proper state management across page transitions.

The Dev Notes provide more details and code examples.

Output buffering for the rendered template

WordPress 6.9 introduces a new way for plugin developers to handle HTML output, called the “template enhancement output buffer.” It standardizes output, meaning instead of plugins creating their own temporary storage for HTML, WordPress now provides a built-in system. If a plugin developer wants to use this feature, they just need to add a special wp_template_enhancement_output_buffer filter before the template is loaded. This system is designed for making small improvements or additions to a page, not for essential parts of the website’s functionality. If a website doesn’t want to use this buffer, it can disable it by filtering wp_should_output_buffer_template_for_enhancement to be false.

For older (classic) WordPress themes, this buffer is now enabled by default. This allows them to load block styles only when needed and move them to the <head> section of the HTML, which can significantly reduce the amount of CSS on a page. Even if the page has already started loading, you can still send HTTP headers (like Server-Timing) while the output is being buffered. #64126). #43258 (PR#8412) More details are available in the Dev Note.

Blocks: Efficiently find and traverse blocks in a document.

The Block Processor class is now available in WordPress 6.9 to efficiently scan through and manipulate block structure in a lazy and streaming manner. For certain workloads this should dramatically improve the performance of processing code, and even more importantly, prevent out-of-memory crashes in the worst cases. [Core#9105] (61401).

It’s an more

Do you need to do any of the following kinds of things? Check out WP_Block_Processor!

  • Checking if a post contains a block of a given type.
  • Counting or detecting all of the kinds of blocks present in a post.
  • Modifying a block of a given kind within a post, not touching any of the other blocks.
  • Finding the “wrapper element” surrounding the inner blocks and adding a class name to it.
  • Extract sections of a document as blocks, modify it, serialize it back, and replace the original blocks with the new HTML.

Dev Note: Introducing the streaming block parser in WordPress 6.9

More Developer Notes for WordPress 6.9 release

There are a few dev notes in the publishing queue, including a list of accessibility updates. This post will be updated once available.

Related Articles

WPTavern: #193 – Roger Williams on How We Might Reimagine Sponsoring WordPress Contributions

Transcription [00:00:19] Nathan Wrigley: Welcome to the Jukebox Podcast from WP Tavern. My name is Nathan Wrigley. Jukebox is a podcast which is dedicated to…

Responses

Leave a Reply