The holidays came a little early for the WordPress community this December. WordPress 6.9 “Gene” is officially out, spreading a little bit more joy in the world, becoming just a bit better than it was in its previous iteration.
Well, at least I’m pretty happy about it. It’s one of my favorite times of the year, and to get a WordPress release in the mix is always a welcome gift.
If you haven’t done so already, read the WordPress 6.9 Field Guide. It includes everything you need to know about the latest release. Also watch Matt Mullenweg’s State of the Word address, which he presented as 6.9 shipped to the masses.
Because this is the final What’s new for developers? edition to drop in 2025, I want to wish you all a happy holiday season. Take some time to relax with your family, friends, and other loved ones. Enjoy a glass of eggnog, warm cider, or whatever traditions you hold. I look forward to everything that we’ll accomplish together in the coming year.
As usual, let’s jump into the latest and greatest from last month. Be sure to test any changes noted below against WordPress trunk and the latest version of the Gutenberg plugin.
Table of Contents
Highlights
The AI Experiments plugin is live

The newly launched AI Experiments plugin lets you test AI-powered features in WordPress without committing to a production setup. It ships a small framework you can use to register, toggle, and iterate on experimental AI capabilities.
The plugin:
- Provides a registry and base class for building features.
- Integrates with the WP AI Client SDK to talk to external AI providers.
- Features an example “Title Generation” experiment that suggests post titles in the editor.
- Adds admin settings to manage AI credentials and enable/disable experiments globally and per feature.
Read more about the plugin via its official announcement post on the Make AI blog.
Experimental breadcrumbs block to stabilize soon

WordPress’s experimental Breadcrumbs block received several upgrades that make site navigation clearer and more intuitive for users navigating complex content. Its usage still requires enabling via the Gutenberg Experiments admin screen, but it should be a part of the stable package early in the 7.0 release cycle.
The latest improvements include:
- Support for 404, search, and paged archives
- Homepage handling and showing the last item
- Adding archive links for posts
- Attachment handling
- Filters for the preferred taxonomy and term
- Post type archive links when not the home URL
- Paginated post content
Experimental tabs block in progress

While it’s still early in development, the Tabs block is now a part of the Gutenberg experimental blocks package, which can be enabled via the Gutenberg Experiments admin screen.
My guess is that it will need some time to simmer before being stabilized, especially since it introduces additional attributes for pseudo-classes and states on the Tabs block itself. This is something that’s only recently been standardized for the Button block.
It’s still an exciting time to begin experimenting with this block. It already supports both horizontal and vertical tabs, giving theme authors a lot of design flexibility out of the box.
Plugins
WordPress Coding Standards version 3.3.0 released
WPCS 3.3.0 includes over two dozen additions, updates, and bug fixes in its latest release. Some of the highlights include:
- Support for attributes on anonymous classes (PHP 8.0) and readonly anonymous classes (PHP 8.3). These are included as part of the security sniffs.
- Handling
exitas a function call (PHP 8.4). - The addition of sniffs for no inside bracket spacing and disallowing parentheses on attributes when no parameters are passed.
View the changelog for a complete overview of all changes.
Flash is dead, no longer supported in Core
WordPress 6.9 removes all traces of Flash, including swfupload, swfobject, and other long‑deprecated fallback scripts from the media system. Since Flash is unsupported everywhere, this change modernizes the codebase and drops legacy baggage.
Data Views and Forms updates
Several updates landed for Data Views and Forms:
- Data Views: You can add new columns from the header with “Insert Left” and “Insert Right,” making table restructuring much faster. You can also apply background colors or images to the Data Views wrapper so tables visually match the rest of your design.
- Data Forms: Use pattern-based rules (for example, regex-like constraints) to ensure form inputs follow required formats.
- Field API: Configure how date fields are formatted and parsed via the date field type.
Static and lazy routing support for the Boot package
The recently created @wordpress/boot package now supports both static and lazy routes, making route loading more efficient. It improves performance by loading routes only when needed.
This is one of the first concrete building blocks for creating a solid routing foundation as part of the overall admin redesign efforts. This change gives both Core and plugins a standardized way to declare static and lazy routes within that larger vision.
Block visibility support key changed
The internal visibility support key for blocks has been renamed from blockVisibility to visibility. This was to avoid conflicts with the original Block Visibility plugin, which the new feature is based upon.
Themes
Block insertion inside content-only containers
The contentOnly template lock now allows inserting content blocks inside defined content areas, giving theme authors more flexibility.
Because this changes block insertion logic, it needs wide testing during the WordPress 7.0 cycle to ensure compatibility across plugins and templates/patterns.
Accordion block fixes and updates
The Accordion block shipped with WordPress 6.9, which gives theme authors massive freedom with design customizations. As an aside, it’s one of my favorite 6.9 features!
A late change to the block’s CSS that addressed a design issue with Twenty Twenty-One introduced two new bugs: padding overflow with the Accordion Panel and Accordion Heading toggle specificity too high. The first issue was addressed in the 6.9 release cycle, but the second has been punted to WordPress 6.9.1.
When you have a moment, be sure to check out Styling accordions in WordPress 6.9 to learn more about the block.
Other block library updates
The HTML block got a welcome makeover. You can now edit your block’s HTML, CSS, and JavaScript separately—all inside a fullscreen modal with tabs. Want to tweak markup, drop in a quick style, or test interactive code? It’s all in one spot now, cleanly organized and conflict-free.
The Paragraph block is switching over to WordPress’s built-in text-align block support. It also supports justified alignment at the global level.
The Term Name block adds a levelOptions control, letting theme authors decide which heading levels are available in a block. Editors get a cleaner dropdown and fewer chances input the wrong heading level
You can now style pseudo-classes for the Button block—like hover and focus—using theme.json. No more digging into CSS files for simple adjustments.
The Cover block can now use embedded videos (e.g., YouTube, Vimeo, etc.) as live, looping backgrounds. It’s a low-cost way to add motion without hosting massive files on your site.
The Math block now supports the range of common design tools available with other blocks, so you can now dress up your equations with style. It will also always correctly display from left to right, even when presented in a right-to-left language environment.
Global styles handles presets at the block level
A WordPress 6.9 theme.json PR corrects an issue where block-level default presets failed if global defaults were off or slugs matched defaults. This ensures block-specific styles override global ones.
Use mixed values for border radius presets
The border radius presets UI now correctly handles mixed CSS values in the range slider, so extenders can rely on it even when using expressions like clamp(), min(), max(), or calc(). Previously, these were not parsed correctly.
To learn more about this WordPress 6.9 feature, check out Border radius size presets in WordPress 6.9.
Playground
Overview of updates in 2025
WordPress Playground has had a big year, continuing to see major advancements every month. Some big changes in 2025 include:
- Over 99% of all WordPress plugins work in Playground.
- OpCache cut response times by 42%.
- Support for XDebug, WebP and AVIF image formats, and more modern development tools added.
- The addition of a file editor, Blueprints gallery, and database management capabilities right from the browser make development even easier.
For a full overview of the progress, read WordPress Playground: 2025 Year in Review.
Dev, testing, and collaboration
In the last month, several improvements boost the development, testing, and collaboration experience with Playground:
- One-click access to Adminer and phpMyAdmin for managing its SQLite database using MySQL tools.
- Live editing of Blueprints for real-time testing of site configurations in the browser.
- PR preview buttons via GitHub Actions that create instant Playground environments for easy code testing.
- The
Intldynamic extension was added to@php-wasm/webto provide better internationalization support.
Resources
Documentation
WordPress 6.9 launched with the Abilities API, and there is an entirely new chapter in the Common APIs handbook dedicated to it. Included are new docs for:
Developer Blog
In the last month, contributors published two new articles and a code snippet here on the WordPress Developer Blog. Now’s the time to catch up:
- The importance of a good changelog
- Introducing the WordPress Abilities API
- Snippet: Schema.org microdata for Accordion block FAQs
WordPress 6.9 developer notes
Be sure to read the WordPress 6.9 Field Guide for a full overview of all the WordPress 6.9 features. Here’s a quick reference list for the individual dev notes:
- Heading Block CSS Specificity Fix in WordPress 6.9
- Ability to Hide Blocks in WordPress 6.9
- Miscellaneous Editor Changes in WordPress 6.9
- Updates to the HTML API in 6.9
- PHP 8.5 support in WordPress 6.9
- Accessibility Improvements in WordPress 6.9
- Admin menu search query changed
- Legacy Internet Explorer Code Removed
- Introducing the streaming block parser in WordPress 6.9
- URL-escaping functions can support HTTPS as the default protocol in WordPress 6.9
- More-reliable email in WordPress 6.9
- Modernizing UTF-8 support in WordPress 6.9
- WordPress 6.9 Frontend Performance Field Guide
- Consistent Cache Keys for Query Groups in WordPress 6.9
- Miscellaneous Developer-focused Changes in 6.9
- Heading Block CSS Specificity Fix in WordPress 6.9
- Changes to the Interactivity API in WordPress 6.9
- Interactivity API’s client navigation improvements in WordPress 6.9
- Preparing the Post Editor for Full iframe Integration
- Block Bindings improvements in WordPress 6.9
- Theme.json Border Radius Presets Support in WordPress 6.9
- DataViews, DataForm, et al. in WordPress 6.9
- Abilities API in WordPress 6.9
Props to @bph, @rodrigosprimo, @psykro, @fellyph, and @zieladam for contributing notes to this post and @juanmaguitar and @welcher for reviewing.
Leave a Reply