X-post: The Core Security Initiative

X-comment from +make.wordpress.org/security: Comment on The Core Security Initiative

Proposal: A Secrets API for WordPress 7.2

WordPress has no first-class way to store a credential. This proposal outlines a Secrets 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. for 7.2, along with WP-CLIWP-CLI WP-CLI is the Command Line Interface for WordPress, used to do administrative and development tasks in a programmatic way. The project page is http://wp-cli.org/ https://make.wordpress.org/cli/ support for it, and explains why the accompanying UIUI User interface should wait for 7.3.

Why it matters

Every 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. that needs an API key today writes it to the options table in plaintext. That is the only available path, so this isn’t a criticism of plugin authors. The consequence is that credentials end up in the same table as the site tagline, and therefore in every database dump, every backup, every staging clone, and every wp option get in a shared terminal.

Plugins have been solving this independently for years, each with its own key derivation, its own cipher choice, and its own failure modes. Site Kit encrypts its Google credentials. WooCommerce gateways handle payment keys. SMTP plugins hold mail credentials. Each one is a separate audit surface, and none of them can be reviewed once on behalf of the ecosystem.

This was survivable when the average site held a Mailchimp key and a reCAPTCHA secret. AI service integrations have made credentials both more numerous and far more expensive to lose: a leaked model-provider key is a metered spend liability. The blast radius increased while the storage mechanism stayed the same.

A second gap is that site owners and hosts increasingly need to answer basic operational questions — which credentials exist on this site, what code is using them, when were they last rotated. None of those are answerable today, because there is no object to ask about. A credential is just a row in a key-value store.

CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. has no concept of a secret; there’s nothing for either problem to attach to.

Clarifying priorities

A tightly-scoped, stable API landed in 7.2 helps push forward on requirements like those documented in the Security Audit for the Connectors screen.

No new UI in 7.2. The storage and retrieval semantics are the part that must be right the first time, because every plugin, every CLICLI Command Line Interface. Terminal (Bash) in Mac, Command Prompt in Windows, or WP-CLI for WordPress. command, and every future adminadmin (and super admin) screen inherits them. A settings screen can be designed properly in 7.3 once there’s a stable API to build against and real usage to design from. The 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. and accessors an admin screen would need are in scope now; the screen itself is not.

WP-CLI is in scope. It gives the API a first-party consumer inside the same release, which is the most reliable way to discover whether the surface is actually usable before it freezes. It also closes a real leak of its own: commands that accept credentials as arguments expose them in shell history and in the process list on shared hosts. Reading and writing through the API fixes that in the same change.

A feature pluginFeature Plugin A plugin that was created with the intention of eventually being proposed for inclusion in WordPress Core. See Features as Plugins ships before the core patchpatch A special text file that describes changes to code, by identifying the files and lines which are added, removed, and altered. It may also be referred to as a diff. A patch can be applied to a codebase for testing.. Rather than propose an API and ask people to evaluate it from a design document, I’ll publish the implementation as a plugin first. This will let contributors run the API instead of reading about it, expose the awkward parts of the surface while they’re still inexpensive to change, and give sites on 7.0 and 7.1 something usable immediately rather than waiting for December. The core patch then follows with an API surface identical to the plugin’s; nothing anyone builds against it needs rewriting.

The plugin will prove out the API before we consolidate things into core.

Proposed API

A small function set, a value object, and always-on encryption.

wp_set_secret( string $name, string $value ): bool|WP_Error
wp_get_secret( string $name, string $version = WP_Secret_Version::CURRENT ): WP_Secret|null|WP_Error
wp_delete_secret( string $name ): bool|WP_Error
wp_import_option_as_secret( string $option, string $name ): bool|WP_Error

WP_Secret::reveal(): string
WP_Secret::fingerprint(): string

At a call site:

wp_set_secret( 'my-plugin/api-key', $key_from_form );

$secret = wp_get_secret( 'my-plugin/api-key' );

if ( is_wp_error( $secret ) ) {
    // Exists, but unusable. Key material changed. Tell the user.
} elseif ( null === $secret ) {
    // Doesn't exist. Show the connect flow.
} else {
    $client = new API_Client( $secret->reveal() );
}

Supporting surface:

  • Secrets are namespaced by convention, plugin-slug/secret-name, so a future admin screen can group by owner and cross-namespace access has something to check against.
  • WP_Secret masks itself in logs, var_dump(), and error output. Getting the raw string requires an explicit ->reveal(), which makes every point of use greppable.
  • Default storage is the options API — ciphertext blobs, autoload=no, excluded from options.php and the REST settings endpoint. The same relationship the object cache has to options: the default substrate, replaceable by a drop-in.
  • Two capabilitiescapability capability is permission to perform one or more types of task. Checking if a user has a capability is performed by the current_user_can function. Each user of a WordPress site might have some permissions but not others, depending on their role. For example, users who have the Author role usually have permission to edit their own posts (the “edit_posts” capability), but not permission to edit other users’ posts (the “edit_others_posts” capability)., manage_secrets and manage_network_secrets.
  • A change hook fires on write, carrying actor, timestamp, and old and new fingerprints. Fingerprints are readable; values are not.

Design decisions most likely to draw objections follow, with rationale.

Encryption is not optional

Secrets are encrypted at rest under a master-key envelope: a per-secret data key, wrapped by a master key. There is no plaintext mode and no constant to disable encryption.

The obvious objection is data loss — a site rotates its salts or migrates hosts, key material changes, and the secrets no longer decrypt. Plaintext options never do that. With an envelope, individual secrets are encrypted under a random master key, and the site key only wraps that master key. Rotation re-wraps a single value (the master key) without touching stored secrets. A dedicated constant is the preferred key source, with a zero-config fallback derived from existing salts for sites that can’t set one. When key material really is gone, the failure is bounded and visible: Site Health reports undecryptable secrets, and the recovery path is to re-enter them. Nothing is silently corrupted.

Site Kit is the empirical case. It derives from LOGGED_IN_KEY and LOGGED_IN_SALT by default, recommends a dedicated constant, and documents that salt rotation breaks stored credentials — and it has shipped that way at enormous scale. The ecosystem’s response was to document the approach, not to reject it.

Rationale: an API that can be configured to store plaintext is an options API with a misleading name. Making encryption unconditional is what lets a plugin author make a claim to their users about how the key is stored. The alternative — encryption off unless a site opts in — protects the small number of sites that rotate salts by leaving everyone else in plaintext forever. Sites that would opt in are largely the sites already capable of running a drop-in. Sites that would not are exactly the ones the API exists for.

Availability of cryptographic APIs is not a concern: libsodium has been bundled with PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher since 7.2, and core additionally ships sodium_compat for the cases where the extension has been disabled at build time. The primitives are present on every supported configuration without a new dependency.

Retrieval returns one of three things

wp_get_secret() returns a WP_Secret on success, null when the secret does not exist, and WP_Error when it exists but could not be retrieved — wrong key, unavailable keyring, failed decryption.

Rationale: collapsing “absent” and “broken” into a single false-y value is how you get a site that erroneously re-runs its onboarding flow, or disables an integration, when the real problem is key management. Separating them is also what lets a site distinguish a missing credential from an unauthorized change to key material.

No 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. on the retrieval path

There is no filter applied to a secret on its way out of storage. No endpoint, filter, or capabilitycapability capability is permission to perform one or more types of task. Checking if a user has a capability is performed by the current_user_can function. Each user of a WordPress site might have some permissions but not others, depending on their role. For example, users who have the Author role usually have permission to edit their own posts (the “edit_posts” capability), but not permission to edit other users’ posts (the “edit_others_posts” capability). returns a secret’s value other than the API call itself.

Rationale: I expect the most pushback here — a filter on secret retrieval is, by construction, a hook that receives every credential on the site in plaintext. Any plugin could register it, making it a documented interception point. A filter that can intercept a credential is a filter that can steal one. The flexibility WordPress normally gets from filters is provided instead through explicit, replaceable providers, described next.

Two extension points, independently replaceable

A drop-in, secrets.php, exposes storage and keyring as separate extension points: where ciphertext is stored (Vault, Parameter Store, a host API) and what wraps the master key (a KMS, an HSM). Neither is ever handed a plaintext secret, and neither can turn encryption off.

Rationale: these are different concerns and sites have different constraints. Replacing only the keyring while keeping default storage is a reasonable configuration, and so is the inverse. Coupling them into one swap would force an all-or-nothing decision that most sites can’t make, and would push people back to storing credentials in options.

Two version slots, not unbounded history

CURRENT and PREVIOUS, modeled as string constants on a final class WP_Secret_Version rather than a native enum. Overwriting a secret keeps the old value recoverable, so a mistyped key is fixable. Requests already in flight won’t fail mid-rotation. Retiring the previous slot is an explicit operator action — no timers, no cron.

Rationale: named version history would keep every credential a site has ever held recoverable from a backup indefinitely. Two slots covers the real use case. Retirement is operator-driven because core has no way to know when a third-party integration has finished draining the old value; a timer would just guess wrong on a schedule. Native enums require PHP 8.1, and while 8.3 or better is the recommended version, core’s minimum remains 7.4 — so string constants on a final class are the portable equivalent.

Multisitemultisite Used to describe a WordPress installation with a network of multiple blogs, grouped by sites. This installation type has shared users tables, and creates separate database tables for each blog (wp_posts becomes wp_0_posts). See also network, blog, site is in v0

Networknetwork (versus site, blog)-level secrets are supported. Salts are network-wide, so distinct option rows would give logical separation and no cryptographic separation; instead a network root key derives per-site subkeys via sodium_crypto_kdf_derive_from_key(). Site secrets and network secrets are separate functions with separate capabilities, and there is no implicit fallback from one to the other.

Rationale: adding this later would mean introducing a second key hierarchy alongside the first, and migrating between them. The useful consequence of doing it now: rotating the key on a 500-site network re-wraps one value rather than 500.

Import, don’t migrate

No automatic sweep of the options table. wp_import_option_as_secret() lets a plugin author move one known option deliberately, on their own explicit upgrade schedule — and flags the imported secret for rotation rather than merely reporting success.

Rationale: core cannot reliably tell which options are credentials, and guessing would break sites in ways close to undebuggable. The rotation flag matters just as much: a credential that has been sitting in wp_options is already in backups, replicas, and object caches, and encrypting it now does not change that. Rotating is what actually fixes it.

Other decisions worth stating

  • Strings in, strings out. The API does not serialize. Nothing stops a plugin from json_encode()-ing something and storing the result, but core neither encourages it nor unpacks it, so a secret can never expand into an object graph on read.
  • Fail closed. If an external store or key backend is unreachable, reads and writes return an error. There is no fallback to local storage or local key wrapping.
  • Nothing plaintext enters the object cache. On shared hosting a persistent object cache is shared infrastructure. WP_Secret refuses serialization outright.
  • No export. Values are write-only. Migrations and staging pushes mean re-entry at the destination, so staging never holds production credentials. Fingerprints let an admin confirm the re-entered value matches.

What this does and does not do

The API is a hardening interface. If a secret lives in the WordPress database and a function exists to decrypt it, then any code running as WordPress can obtain that secret.

In scope: database dumps and exfiltration, backups sitting in cloud storage, SQL injection reading wp_options, careless disclosure surfaces — options.php, export files, support screenshots, screen shares, debug logs — and a compromised read-only replica.

Out of scope: code execution in the WordPress process. Nothing defends against that. Code running inside WordPress can call wp_get_secret() for the same reason it can read environment variables or wp-config.php — the secret has to be usable, so anything that is WordPress can use it. Registering a secret against a plugin slug does not prevent a different plugin from asking for it; slugs aren’t authenticated, and even a perfect allowlist wouldn’t stop code that reads the revealed value out of memory after a legitimate call. This proposal makes no claim of per-plugin isolation, and masked values are hygiene against shoulder-surfing rather than a privilege boundary.

What changes is the value of a stolen database, which is the overwhelmingly more common breach.

What it does provide:

  • Credentials are not sitting in plaintext in a table that gets dumped, cloned, and shared.
  • Access has one chokepoint, which makes it loggable and auditable for the first time.
  • Rotation and retirement are defined operations rather than an UPDATE and a hope.
  • The storage extension point lets a host or site owner move secrets out of WordPress — which is the only configuration where real per-caller enforcement becomes possible.

Prior art

Timeline

Beta 1 for 7.2 is October 20–22, which is the practical deadline for an API landing in this release. Working backward:

  • Now through mid-September: feedback on this proposal, particularly the questions below. Feature plugin published for testing.
  • Late September: patch on TracTrac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress., with the API surface matching the plugin.
  • Before 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. 1: committed, or explicitly deferred to 7.3 rather than rushed in.

I’ve volunteered for technical contributions to 7.2 and intend to do this work rather than propose it and hand it off.

Feedback wanted

Objections now, while the surface is still cheap to change. Specifically:

  1. The no-filter decision on retrieval. Providers are meant to cover what a filter would normally give you — is that substitution sufficient for the cases you’d actually need to hook?
  2. Two version slots. Is CURRENT/PREVIOUS sufficient, or is there a rotation pattern that genuinely needs more?
  3. Import, not migrate. Plugin authors: does wp_import_option_as_secret() fit how you would actually move an existing key, or does it need a different shape?
  4. WP-CLI surface. Which commands most need this, and in what order?
  5. Hosts. If you run a real secret store or a real key backend and the drop-in surface is missing something you’d need, that’s the most useful feedback available — and much easier to add before anything ships than after.

Any feedback is welcome — please share your thoughts in the comments below.

Props to @jeffpaul, who talked me into building the original proof of concept six months ago, and @whyisjake for shepherding this proposal.

#proposal

Performance Chat Summary: 25 August 2026

The full chat log is available beginning here on Slack.

WordPress Performance TracTrac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress. tickets

  • @mukesh27 shared a performance regressionregression A software bug that breaks or degrades something that previously worked. Regressions are often treated as critical bugs or blockers. Recent regressions may be given higher priorities. A "3.6 regression" would be a bug in 3.6 that worked as intended in 3.5. found in WordPress 7.1 and reported as #65929 and asked anyone with time to take a look and said any review or feedback would be greatly appreciated.
  • @westonruter shared that WCUS Contributor DayContributor Day Contributor Days are standalone days, frequently held before or after WordCamps but they can also happen at any time. They are events where people get together to work on various areas of https://make.wordpress.org/ There are many teams that people can participate in, each with a different focus. https://make.wordpress.org/support/handbook/getting-started/getting-started-at-a-contributor-day/ was formatted like a hackathon this year. His team worked on eliminating script and style concatenation in favor of prefetching scripts and styles likely to be used on the next screen. For example, the login screen prefetches the scripts and styles used on the dashboard, while the dashboard or edit posts list screen prefetches styles used in the post editor. They saw promising performance improvements, including a greater than 70% reduction in LCP when accessing the dashboard from the login screen. The PR #13084 is in progress and ready for early review and testing. He added that the biggest benefit is eliminating script and style concatenation, which is the source of many bugs. In his view, the performance benefit is a bonus.

Performance Lab 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 other performance plugins)

  • @mukesh27 asked @westonruter whether there was a plan for releasing PR #2639.
    • @westonruter re-shared that the PR for the next round of Performance Lab plugin updates is ready for review and testing: PR #2639. ZIPs are available at (comment). He noted that the release includes strict_types, so it warrants extra testing, and also includes several housekeeping changes intended to improve the release process. The PR already has approvals, but he was not sure whether smoke testing had been completed for each build. If that could be done that day, he said he would feel comfortable going ahead with the release

Open Floor

  • @westonruter shared that he is coming off a very busy summer of travel and CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. security work. He is finally back home and can start catching up. His security work will continue, but hopefully at a more managed pace. He noted that there are many PR reviews needed.
  • @mukesh27 added that there are also Core commits. @westonruter responded that commits are now cheap, while reviews are hard.

Our next chat will be held on Tuesday, September 8, 2026 at 16:00 UTC in the #core-performance channel in Slack.

#core-performance, #hosting, #performance, #performance-chat, #summary

Dev Chat Agenda – August 26, 2026

The next WordPress Developers Chat will take place on Wednesday, August 26, 2026, at 15:00 UTC in the core channel on Make WordPress Slack.

Yes, the dev chat is switching back to Wednesdays starting this week!

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 📢

Note: Dev Chat has been moved to Tuesdays at 15:00 UTC for the duration of the 7.1 release cycle.

7.1

7.2

General

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.

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.

#7-1, #7-2, #agenda, #core, #dev-chat

X-post: Help shape the Accessibility Lab plugin

X-comment from +make.wordpress.org/accessibility: Comment on Help shape the Accessibility Lab plugin

Call for WordPress 7.1.x Release Managers

WordPress 7.1.0 was released August 19, 2026. While the work of a major releasemajor release A release, identified by the first two numbers (3.6), which is the focus of a full release cycle and feature development. WordPress uses decimaling count for major release versions, so 2.8, 2.9, 3.0, and 3.1 are sequential and comparable in scope. team includes people filling many different positions, maintenance release teams generally are considerably smaller, often 1–3 people. Minor 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. managers are responsible for:

  • Triaging bugs in coordination with committers and component maintainers.
  • Drafting announcements for the release.
  • Preparing for and running release day activities.
  • Updating the documentation on minor releases so that it gets better each time.

Members of the 7.1 release cohort are encouraged to stay on as release managers for maintenance releases, but it is not required to have been on a major release squad in order to be on a minor release team.

WordPress 7.1.1 will be scheduled based upon the severityseverity The seriousness of the ticket in the eyes of the reporter. Generally, severity is a judgment of how bad a bug is, while priority is its relationship to other bugs. and quantity of bugs reported with a guesstimated release date between 1 September and 24 September. Please keep this timeline in mind when volunteering to be a release manager.

If you are interested in volunteering to be a release manager for the 7.1.x maintenance releases, please comment on this post or message me directly no later than 28 August.

Props to @joemcgill, @annezazu, @jeffpaul for reviewing this post before publication.

#7-1, #7-1-1, #7-1-x, #maintenance

What’s new in Gutenberg 23.8? (19 August)

“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 23.8?

Gutenberg 23.8 has been released and is available for download!

Version 23.8 continues to build on recent releases, adding shareable URLs and an in-editor code diff view to visual 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., email notifications for users mentioned in a note, major List View performance improvements on large posts, and a smoother writing flow that renders a real default 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. in place of the empty-canvas appender.

Visual revisions: Shareable URLs and a code diff view

A demonstration of the URL in the revision review to demonstrate the direct link to revision feature.

Visual revisions keep getting more capable. You can now link directly to a specific revision: opening a URLURL A specific web address of a website or web page on the Internet, such as a website’s URL www.wordpress.org with a revision parameter takes you straight to that revision in the editor, and the address bar stays up to date as you move through history so sharing the exact change you’re discussing is as simple as copying the URL. Toggle the code editor to see the diff in code. (79934, 80314)

Email notifications for mentions in notes

Collaboration in the editor took another step forward: when someone @-mentions you in a note, you now receive an email letting you know, written in your own language and linking to the editor where the conversation is happening. This completes the mentions feature whose autocomplete UIUI User interface landed in a previous release. (79606)

Other notable highlights

The List View received a series of performance improvements that add up to a dramatically better experience on long posts. Opening it is faster thanks to a leaner rendering path that cuts most of its DOM nodes and skips a second render pass, expanding and collapsing sections triggers far fewer re-renders, and a freeze when selecting all blocks on large posts is gone. On a post with 1,000 paragraphs, “Select all” dropped from 16.8 seconds to 0.4 seconds. (81210, 80953, 80929, and others)

The empty canvas now renders a real default block instead of a lookalike appender, so what you see before typing is exactly what you get (81231). Along the same lines, a new block added next to an existing one now inherits its neighbor’s styling consistently, no matter how it was inserted (81250).

The experimental Playlist block became easier to work with: Audio blocks can transform into a Playlist and back, and you can select multiple audio files from the Media Library at once (80926). The Tabs block now shows each tab’s actual title in the Document Overview instead of a generic “Tab” label (81427) and supports Home and End keys for keyboard navigation (80912).

For developers, blocks can now declare their inner blocks template directly in registerBlockType() settings, applied synchronously at insertion (80027); @wordpress/element is importable in ReactReact React is a JavaScript library that makes it easy to reason about, construct, and maintain stateless and stateful user interfaces. https://reactjs.org 19 (80053); DataViews gained a time field type (80830) and configurable preview aspect ratios (79329); and @wordpress/ui now offers public Calendar and RangeCalendar components (81337).

Changelog

Features

Collaboration

  • Notes: Email users mentioned in a note. (79606)

Enhancements

  • Element: Make the package importable in React 19. (80053)
  • Interface: Let CSSCSS Cascading Style Sheets. own the ComplementaryArea width and use AnimatePresence custom for exit. (81363)
  • WidgetWidget A WordPress Widget is a small block that performs a specific function. You can add these widgets in sidebars also known as widget-ready areas on your web page. WordPress widgets were originally created to provide a simple and easy-to-use way of giving design and structure control of the WordPress theme to the user. Dashboard: Preserve widget chrome flex layout. (80570)
  • Normalize block gap values in layout. (81460)
  • Visual revisions: Add shareable urls. (79934)

Block Library

  • Block editor: Render a real default block in place of the default appender. (81231)
  • Block editor: Unify what a new sibling block inherits. (81250)
  • Blocks: Support static block templates in block type settings. (80027)
  • Feature: Tabs block: Consider using the tab title in the Document Overview instead of a generic “Tab” label. (81427)
  • Page List: Rename the Edit action to Detach and confirm it in a dialog. (80847)
  • Pass Playlist controls to track blocks. (80368)
  • Quote: Ensure paragraph placeholder appears after deleting nested blocks. (77151)
  • Table of Contents: Replace “Convert to static list” with confirmed “Detach” action. (80844)
  • Post Navigation Link: Use the ‘next’ icon. (81384)
  • Writing flow: Stop the caret on containers that do not merge with the text flow. (81456)
  • Playlist: Add track icon. (80959)

Components

  • Add allowForms prop to SandBox component. (76471)
  • DataViews: Add time field type and control. (80830)
  • DataViews: Make grid and table item preview aspect ratio configurable. (79329)
  • IconButton: Improve keyboard shortcut 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). (80402)
  • Icons: Move the inline image icon into the library. (81271)
  • SearchableChipSelect: Add form primitive to wordpress/ui. (80779)
  • UI: Add Combobox.InputGroup primitive. (80869)
  • UI: Add Calendar and RangeCalendar, moved from components private APIs. (81337)
  • UI: Derive Base UI direction from WordPress i18ni18n Internationalization, or the act of writing and preparing code to be fully translatable into other languages. Also see localization. Often written with a lowercase i so it is not confused with a lowercase L or the numeral 1. Often an acquired skill.. (80399)
  • UI: Use focus styles from base-styles. (80635)

Post Editor

  • Add opt-out for block style state controls. (80956)
  • Editor: Clarify autosave failure notice. (76470)
  • Editor: Migrate settings 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. to Tabs from wordpress/ui. (81054)
  • Notes: Display shortcut for form action buttons. (81064)
  • Visual revisions: Add a code diff view inside the editor. (80314)

Dashboard

  • Dashboard Widgets: Add icon and relevance to the widget action envelope. (81275)
  • Dashboard Widgets: Split action icons into wire and resolved forms. (81381)
  • Widget Dashboard: Host-tunable tile spacing via public custom properties. (81352)
  • Widgets: Carry a declarative icon through the widget pipeline. (80969)

Widgets Editor

  • Add ThemeProvider for adminadmin (and super admin) color schemes. (81173)
  • CustomizerCustomizer Tool built into WordPress core that hooks into most modern themes. You can use it to preview and modify many of your site’s appearance settings. widgets: Add ThemeProvider for admin color schemes. (81174)

Global Styles

  • Migrate font size presets to the shared preset layer. (79811)
  • Migrate shadows presets to use the preset management layer. (79812)

Bug Fixes

  • 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. coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. fixes for finalize route. (81465)
  • Boot: Adjust specificity of the image reset styles so components can size their own images. (80845)
  • Fix end-to-end tests that break when shard rebalancing changes their neighbors. (81117)
  • Fix: Add missing target to the webpack dev server proxy configuration. (81141)
  • Fix: Flaky autosave shareable URL revisions end-to-end test. (81455)
  • Fix: Flaky list view paste block styles end-to-end test. (81229)
  • Fix: Flaky revisions pagination end-to-end cross-page diff assertion. (81119)
  • Interface: Increase footer breadcrumb height to prevent focus ring clipping. (81145)
  • Views: Honor all developer-defined view configuration overrides. (80832)
  • Interface: Stop the secondary sidebar animating into place on page load. (81362)
  • Site editor: Fix sidebar item hover color. (81317)
  • theme.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: Allow responsive states on block style variations. (81309)
  • Dashboard Widgets: Remove the Hello Dolly download action. (81272)
  • Decode HTMLHTML HyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. entities in Identity fields. (81269)
  • Make downloadable block item labels translatable. (81237)
  • Edit Widgets: Fix 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. toolbar button focus ring. (81176)
  • Fix template modified and date return value for file templates. (80733)

Block Editor

  • Background: Fix the legacy gradient UI where a gradient cannot be selected. (81056)
  • Block Inspector: Disable the ‘Edit original’ button when the entity ID is missing. (81288)
  • Copy: Preserve the block when its entire text is selected. (80994)
  • Disclose the nested block count of a multi selection. (80745)
  • Fix Escape from the block toolbar and stop redundant last focus dispatches. (81319)
  • Fix empty list block with anchor persisting after backspace deletion. (77000)
  • Fix overflowing block UI being covered after a block is moved. (80824)
  • Link Control: Restore the preview title underline. (81083)
  • Make the Group action wrap blocks with a group transform. (80891)
  • PanelColorSettings: Restore the missing space below the panel header. (81155)
  • Quote & List v2: Deleting empty list item should delete list block. (42503)
  • Return false from isBlockSelected when there is no client ID. (81212)
  • Style states: Fix state deselection when selecting the already selected block. (81277)
  • URLInput: Skip search requests while an IME composition is in progress. (80602)
  • Writing flow: Forward delete an empty paragraph without breaking apart the next block. (80813)

Block Library

  • Clarify the GIF Video variation description. (81181)
  • Fix: Tabs block: Start with empty tab labels with placeholders. (81009, 81429)
  • Media: Reword the HEIC upload error and keep it up until dismissed. (81130)
  • Navigation Overlay Close: Inherit typography and color from the overlay. (80751)
  • Playlist: Improve audio conversion and track selection. (80926)
  • Playlist: Normalize Waveform Player configuration handling. (81342)
  • Post Author Biography: Fix horizontal overflow with long unbroken text. (81018)
  • Remove the editableRoot opt-in from the paragraph block. (81184)
  • Video: Hide settings for the GIF variation. (81142)
  • Fix: Add optional chaining for empty reusable block (#81165). (81177)

Components

  • Button: Suppress UA focus ring when focused and pressed. (81113)
  • DataForm: Fix hidden fields validation. (81377)
  • DataViews: Fix array field type validation for empty values. (81378)
  • DataViews: Fix the between date 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. losing a manually typed date on blur. (81150)
  • DataViews: Pass only eligible items to a bulk action callback. (81198)
  • Scope breakpoint media queries to screen so printing does not look like a resize. (81367)
  • Theme: Omit color properties when neither provided nor inherited. (80600)
  • Admin UI: Reset the wp-admin li margin that misaligns Breadcrumbs. (81134)

Post Editor

  • Add ThemeProvider for admin color schemes. (81112)
  • DataViews: Move the rich text control into the editor package. (81430)
  • Editor: Fix document tools button focus ring. (81115)
  • Editor: Keep the canvas height stable while resizing the canvas. (81163)
  • Ensure device preview is always accurate when window is zoomed in. (81193)
  • Notes: Fix text wrapping for long usernames in collaboration sidebar. (81406)

Global Styles

  • Button: Turn on the width setting by default in theme.json. (81196)
  • Kebab-case preset slugs when converting references to custom properties. (80583)
  • Render element styles set only inside a breakpoint. (81265)
  • Report border, shadow, outline, filter and dimension changes. (81407)
  • theme.json schema: Fix block pseudo-classes and custom states. (81209)
  • theme.json schema: Responsive states belong to blocks. (81253)

Data Layer

  • Core Data: saveDirtyEntities: Improve messaging of server errors. (81151)
  • RTC: Fix mixed block selection awareness. (79836)
  • Footnotes: Guard against invalidinvalid A resolution on the bug tracker (and generally common in software development, sometimes also notabug) that indicates the ticket is not a bug, is a support request, or is generally invalid. 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. values. (81201)
  • RTC: Remove excess autosave notices (when not useful). (80539)
  • Order site identity changes predictably. (81283)

Media

  • Cover client-side big image scaling and orphaned files. (81061)
  • Media Attached to: Fix issue with the popover unexpectedly flipping, tweak wording. (81206)
  • Upload Media: Fail the item when the /finalize request fails. (80725)

Style States

  • Fix phantom pseudo element style output. (81291)
  • Render viewport state element styles in the editor. (81307)

Collaboration

  • Notes: Fix the mention notification email composition. (81187)
  • RTC: Disable custom autosave controller when RTC is disabled. (80769)

Accessibility

  • Fix: New route-based admin pages are empty when no JSJS JavaScript, a web scripting language typically executed in the browser. Often used for advanced user interfaces and behaviors.. (80628)
  • Interface: Remove incorrect aria-expanded from pin-to-toolbar button. (79874)
  • wp-build: Render the no-JS fallback in the generated page templates. (81365)

Block Editor

  • Block Mover: Add the keyboard shortcut to the buttons’ spoken description. (81380)

Components

  • Menu: Restore Modal focus return when menu items close. (81164)

Block Library

  • Tabs: Support Home and End keys for keyboard navigation. (80912)

Performance

List View

  • Fix Select all freezing on large posts. (81210)
  • List View: Collapse off-window placeholder rows into a single spacer row. (80953)
  • List View: Narrow the dependants of the memoized List View tree. (81129)
  • List View: Only subscribe to the block subtree for rows that can show images. (81076)
  • List View: Reduce per-row store subscriptions. (81136)
  • List View: Speed up opening by removing a forced style recalculation. (80929)
  • List View: Speed up opening by removing a second render pass. (80935)
  • List View: Pass only minimal required data to sub-tree branches. (81111)
  • List View: Split the context and drop dead props to cut re-renders on expand and collapse. (81159)

Documentation

  • Agents: Add a defensive data design skill and route to the copy guide. (81131)
  • Block JSON schema & PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher-only blocks: Add autoRegister support. (80173)
  • Block Library: Document security patchpatch A special text file that describes changes to code, by identifying the files and lines which are added, removed, and altered. It may also be referred to as a diff. A patch can be applied to a codebase for testing. releases. (81295)
  • Changed Build Process Link and remove unused tags. (81360)
  • CheckboxControl: Add “With Visual” Storybook story. (80849)
  • Components: Opt-in ConfirmDialog for auto-documentation. (80866)
  • Components: Use p elements for callout alerts in README documentation. (81234)
  • Docs: Add Block Actions Readme. (69408)
  • Docs: Add Block List Readme. (69432)
  • Docs: Add Block Lock Readme. (69434)
  • Docs: Add error message guidance. (81143)
  • Docs: Explain how the theme.json schema fixtures work. (81263)
  • Docs: Fix broken Figma links on the design resources page. (81166)
  • Docs: Fix broken link to the Node.js debugging guide. (81398)
  • Docs: Fix broken links to the removed JavaScriptJavaScript JavaScript or JS is an object-oriented computer programming language commonly used to create interactive effects within web browsers. WordPress makes extensive use of JS for a better user experience. While PHP is executed on the server, JS executes within a user’s browser. https://www.javascript.com build setup guide. (81232)
  • Docs: Fix typo in block file structure guide. (81348)
  • Docs: Remove breakpoint-only element style example from global styles guide. (81308)
  • Docs: Remove dependency group import guidance. (81245)
  • Docs: Use gutenberg instead of Gutenberg in package name. (81051)
  • Document editEntityRecord’s options.isCached param. (81318)
  • Fix typos in code comments and JSDoc. (81045)
  • Navigation: Complete the DocBlocks for the responsive container and overlay style helpers. (80622)
  • Storybook: Enable design system theme tool globally. (81116)
  • ToggleControl: Add “With Visual” Storybook story. (80803)
  • View Config: Add reference documentation. (81149)
  • Widget Primitives: Document actions as verbs, not links. (80974)

Code Quality

  • Block Supports: Guard against non-string attribute values to avoid fatal errors. (80501)
  • Blocks: Declare the @types/react-is devDependency. (81203)
  • Blocks: Update hpq to 1.4.0 and drop the ts-expect-error suppressions. (81199)
  • CI: Resolve Playwright through the workspace that declares it. (81137)
  • Declare missing prettier and stylelint workspace dependencies. (81065)
  • ESLint: Define dependency import rules. (81246)
  • ESLint: Drop @eslint/compat fixup for jest-dom and testing-library. (80842)
  • Ignore node_modules in schema integration test globs. (81013)
  • Jest Preset Default: Support self-referencing via exports. (80837)
  • Report Flaky Tests: Declare @types/node dependency. (80838)
  • Storybook: Move smoke-test deps into the storybook workspace. (81017)
  • Storybook: Use SelectControl in Motion tokens story. (80790)
  • Tools: Make agent setup a workspace. (81418)
  • Tools: Use native agent skill discovery. (80811)
  • Unit Tests: Reorganise the jest configuration file. (80940)
  • View config: Lowercase dynamic filter names. (81068)
  • Views: Add React to the package’s dev dependencies. (81139)
  • DataViews: Use the public @wordpress/ui Badge instead of the private one. (81236)
  • Remove unused duplicate font family preview utilities. (81194)
  • Media Editor: Render sidebar tabs via ComplementaryArea’s render prop. (81133)
  • Fix ESLint errors for ‘navigateRegionsProps’ spread. (81052)
  • Replace deprecated useResizeObserver for useScaleCanvas. (67508)

Components

  • DataViews: Remove kebabCase private import by inlining it. (81284)
  • DataViews: Vendor validated form controls:
    • ValidatedCheckboxControl (81435)
    • ValidatedNumberControl (81433)
    • ValidatedRadioControl (81434)
    • ValidatedSelectControl (81391)
  • Deprecate Animate. (80931)
  • Deprecate Surface. (80943)
  • ESLint: Remove legacy import suppressions. (81338)
  • Keycodes: Make withIgnoreIMEEvents a public 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.. (81343)
  • Migrate ItemGroup to SCSS module. (80797)
  • Migrate Spinner styles from Emotion to SCSS module. (80511)
  • New kebab-case package: Extract utility and migrate private API calls. (81294)
  • Theme: Colocate 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. tests with implementations. (81247)
  • Types: Replace remaining @ts-expect-error suppressions with proper typing. (81200)
  • UI: Upgrade React DayPicker to version 10. (81439)
  • Update Ariakit packages. (80765)
  • Update Floating UI to 2.1.9. (80761)
  • Update react-day-picker to 9.14.0. (80792)
  • Remove ValidatedTextControl private API. (80680)

Block Editor

  • Bail out of hasSelectedInnerBlock when there is no clientId. (81315)
  • Convert useBlockVisibility hook to TypeScript. (80390)
  • Format Library: Remove unused CSS rule. (77831)
  • List View: Migrate label wrapper to UI Stack and drop Badge from the anchor. (81266)
  • Simplify InspectorControlsFill rendering logic. (81286)
  • Spacing Sizes Control: Make the control label translatable independently of the input aria label. (81240)
  • URLInput: Simplify keyboard handling and fix arrow keys with a text selection. (80780)

Block Library

  • Cover: Avoid passing null as the featured imageFeatured image A featured image is the main image used on your blog archive page and is pulled when the post or page is shared on social media. The image can be used to display in widget areas on your site or in a summary list of posts. size. (81444)
  • List View: Replace expand/collapse callbacks with reducer dispatch. (81138)
  • Query: Guard non-scalar queryId to avoid fatal in enhanced pagination. (80724)

Data Layer

  • Core Data: Add missing wordpress/base-styles dependency. (81012)
  • ESLint: Replace strict configuration with bulk suppressions. (81248)

Post Editor

  • Editor: Remove sidebar tabs focus sync effect. (81020)
  • Rename blockStatesEnabled setting to blockStatesEditingEnabled. (81058)

Tools

  • AGENTS: Update development tips section. (81224)
  • Revise CODEOWNERS for package ownership (removing nerrad). (81175)
  • ESLint: Ban @ts-ignore in favour of @ts-expect-error. (81148)

Testing

  • Automated Testing: Add Storybook component documentation regressionregression A software bug that breaks or degrades something that previously worked. Regressions are often treated as critical bugs or blockers. Recent regressions may be given higher priorities. A "3.6 regression" would be a bug in 3.6 that worked as intended in 3.5. testing. (80655)
  • CI: Add job timeouts to E2E, static checks, bundle size, and create block. (80801)
  • CI: Build once and reuse the build across end-to-end tests shards. (81031)
  • CI: Cache the system packages Playwright downloads for WebKit. (80846)
  • Fix: Trunktrunk A directory in Subversion containing the latest development code in preparation for the next major release cycle. If you are running "trunk", then you are on the latest revision. end-to-end failures caused by the navigation spec leaving plain permalinks. (81238)
  • Flaky tests: Fix router navigate latest HTML. (80178)
  • Perf Tests: Merge selection event windows instead of summing durations. (81002)
  • Performance Tests: Ignore the locally generated artifacts directory. (81024)
  • Perf Tests: Avoid inflating interaction metrics with startTracing. (81264)
  • Remove content types experiment. (81340)
  • Remove the jest-puppeteer-axe package. (80775)
  • Storybook e2e: Add small, compact and icon examples to button matrix. (80793)
  • Test: Add Vitest migrationMigration Moving the code, database and media files for a website site from one server to another. Most typically done when changing hosting companies. routing guardrails. (81036)
  • Test: Add private Vitest configuration and migrate a pilot test. (81037)
  • Tests: Replace page-level selectors with locators in end-to-end specs. (81053)
  • Upgrade Playwright to v1.62. (81001)
  • Balance Playwright shards by duration. (79479)

Build Tooling

  • Allow organization or repository variable to dictate the Actions runner. (81087)
  • Build: Wrap script bundles in an IIFE to contain ‘use strict’. (79792)
  • Components: Update polymorphism types to allow all attributes when specifying as. (80705)
  • Docs: Add VS Code setup guidance. (77913)
  • ESLint: Rename root eslint.config.cjs to eslint.config.mjs. (81468)
  • Ensure static checks can run for private mirrors. (80817)
  • Flaky tests: Report as a PR comment only, stop creating issues. (81218)
  • Markdownlint: Disable the MD033 (no-inline-html) rule project-wide. (81213)
  • Monitor all setup-related composite Actions. (81192)
  • Packages: Recover July 29 npm release metadata. (81303)
  • Scripts: Prevent a UTF-8 BOM in the middle of extracted CSS. (81383)

First-time contributors

The following PRs were merged by first-time contributors:

Contributors

The following contributors merged PRs in this release:

@adamsilverstein @adrianmoldovanwp @adithyanaik @aduth @ajlende @alecgeatches @amitraj2203 @andrewserong @aslushnikov @chihsuan @mciampini @desrosj @dhasilva @dhruvik18 @dognose24 @mehtadev @linewebdigital @ellatrix @getdave @giteshsarvaiya @hbhalodia @im3dabasia @ingeniumed @itzmekhokan @joen @jorgefilipecosta @juanfra @makdia @Mamaduka @manzoorwanijk @mcsf @mirka @nerrad @ntsekouras @oandregal @pranjal4804 @priethor @rishabhwp @ramonopoly @retrofox @scruffian @shailu25 @simison @SirLouen @SteveJonesDev @wildworks @talldan @isabel_brison @williamvianas @westonruter @yogeshbhutkar @youknowriad @yvett

Props

Special thanks to @joen for review and providing assets for this post. Thanks to @mamaduka, @jorgefilipecosta, @adamsilverstein, and @dhruvang21 for reviewing the post. Thanks to @bernhard-reiter, @mcsf, @aduth, @tyxla, @jsnajdr, and @wildworks for help throughout the release process.

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

Dev Chat summary: August 18, 2026

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 @audrasjb 🔗 See the agenda post.

Announcements 📢

7.1

  • 7.1 RC3 was released on August 12th.
  • The Accessibility Improvements dev notedev note Each important change in WordPress Core is documented in a developers note, (usually called dev note). Good dev notes generally include a description of the change, the decision that led to this change, and a description of how developers are supposed to work with that change. Dev notes are published on Make/Core blog during the beta phase of WordPress release cycle. Publishing dev notes is particularly important when plugin/theme authors and WordPress developers need to be aware of those changes.In general, all dev notes are compiled into a Field Guide at the beginning of the release candidate phase. was published.
  • 7.1 RC4 was released on August 17th.
  • WordPress 7.1 Field Guide
  • As of Aug 10th, 7.1 is branched. Committers: Trunktrunk A directory in Subversion containing the latest development code in preparation for the next major release cycle. If you are running "trunk", then you are on the latest revision. is open for 7.2 and the 7.1 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". requires double sign off.
  • Learn more about WordPress 7.1 Release Day Process.

@amykamala mentioned that commit freeze is currently in effect until Wednesday post-release.

From @joedolson: “Nothing else to share from the release squad. At the moment, everything is looking like it’s in good shape for the release.” 🚀

7.2

General

Discussion 💬

From @amykamala

“Dev chat scheduling! Back to Wednesdays next week?”

ℹ️ We will indeed move back to the regular schedule starting next week: Wednesdays at 15:00 UTC.

From @jeffpaul

More a 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. thing than coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress., but it sounds like https://meta.trac.wordpress.org/ticket/1181 had some folks at WCUS discussing it this week.  So if anyone has interest or experience there, commenting with feedback on the ticketticket Created for both bug reports and feature development on the bug tracker. would be helpful.

#7-1, #7-2, #core, #dev-chat

Dev Chat Agenda – August 18, 2026

The next WordPress Developers Chat will take place on Tuesday, August 18, 2026, 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 📢

Note: Dev Chat has been moved to Tuesdays at 15:00 UTC for the duration of the 7.1 release cycle.

7.1

  • 7.1 RC3 was released on August 12th.
  • The Accessibility Improvements dev notedev note Each important change in WordPress Core is documented in a developers note, (usually called dev note). Good dev notes generally include a description of the change, the decision that led to this change, and a description of how developers are supposed to work with that change. Dev notes are published on Make/Core blog during the beta phase of WordPress release cycle. Publishing dev notes is particularly important when plugin/theme authors and WordPress developers need to be aware of those changes.In general, all dev notes are compiled into a Field Guide at the beginning of the release candidate phase. was published.
  • 7.1 RC4 was released on August 17th.
  • WordPress 7.1 Field Guide
  • As of Aug 10th, 7.1 is branched. Committers: Trunktrunk A directory in Subversion containing the latest development code in preparation for the next major release cycle. If you are running "trunk", then you are on the latest revision. is open for 7.2 and the 7.1 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". requires double sign off.
  • Learn more about WordPress 7.1 Release Day Process.

7.2

General

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.

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.

#7-1, #7-2, #agenda, #core, #dev-chat

WordPress 7.1 Release Day Process

Preparation for the WordPress 7.1 release is underway.

This post shares the release process, including the timeline and how you can help.

Release Timeline Overview

Extended Code Freeze

A mandatory code freeze will be in effect from August 17, 2026 at 14:00 UTC through the General Release on Wednesday, August 19. It begins one hour ahead of the RC4 release at 15:00 UTC, which is followed immediately by the Dry Run. Committing does not reopen once the Dry Run is complete. At the request of the CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. Committers, the freeze has been extended beyond the usual 24 hours, so everyone has time to verify the release in full before it ships.

What does this mean?

No source code for 7.1.0 (i.e., in the 7.1 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".) can be changed during the code freeze.

What happens if a critical 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. is reported during this period?

The release squad will meet with committers and maintainers to determine if the issue is a blockerblocker A bug which is so severe that it blocks a release..

  • If it is, another 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). release happens and the release process restarts,
    meaning the Dry Run repeats and the code freeze starts again.
  • If it is not, the bug is targeted for the 7.1.1 release.

The Release Party

The WordPress 7.1 release party will run in two parts.

Part one is scheduled on August 19, 2026 at 19:45 UTC in the #core Slack channel and covers the release process itself.

Part two will take place live on stage at WordCampWordCamp WordCamps are casual, locally-organized conferences covering everything related to WordPress. They're one of the places where the WordPress community comes together to teach one another what they’ve learned throughout the year and share the joy. Learn more. US in Phoenix and will also be streamed. From August 19, 2026 at 23:10 UTC, WordPress 7.1 will be published from the event. The party in the #core Slack channel continues alongside it, where the remaining release tasks are completed.

The release party walks through the steps in the Major Version Release process if you want to follow along.

Please note: releasing a major version requires more time than releasing a 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. or 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).. There are more steps in the process. If any last-minute issues need addressing, those issues will take more time, as well.

How You Can Help

A key part of the release process is checking that the .zip packages work on all server configurations. If you have any less commonly used servers available for testing (IIS, in particular), that would be super helpful. Servers running older versions of PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher and MySQLMySQL MySQL is a relational database management system. A database is a structured collection of data where content, configuration and other options are stored. https://www.mysql.com will also need testing.

You can start this early by running the WordPress 7.1 RC packages, which are built using the same method as the final packages.

During the release party, you will be instructed on several ways to help test the release package.

Tips on What to Test

In particular, testing the following types of installs and updates would be much appreciated:

  • Does a new WordPress install work correctly? This includes running through the manual install process, as well as WP-CLIWP-CLI WP-CLI is the Command Line Interface for WordPress, used to do administrative and development tasks in a programmatic way. The project page is http://wp-cli.org/ https://make.wordpress.org/cli/ or one-click installers.
  • Test upgrading from various versions.
  • Remove the wp-config.php file and test a fresh install.
  • Test single site and multisitemultisite Used to describe a WordPress installation with a network of multiple blogs, grouped by sites. This installation type has shared users tables, and creates separate database tables for each blog (wp_posts becomes wp_0_posts). See also network, blog, site/networknetwork (versus site, blog) (both subdirectory and subdomain) installations.
  • Does it upgrade correctly? Are the files listed in $_old_files removed when you upgrade?
  • Does multisite upgrade properly?

Testing the following user flows on both desktop and mobile would be great to validate each function as expected:

  • Publish a post, including a variety of different blocks.
  • Comment on the post.
  • Install a new 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./theme, or upgrade an existing one.
  • Change the site language.
  • If you’re a plugin developer, or if there are complex plugins you depend upon, test that they’re working correctly.

For a more in-depth list of what features to test, make sure to check the Help Test WordPress 7.1

Props to @amykamala, @benjamin_zekavica, @westonruter, @joedolson and @wildworks for help reviewing to this post. 

#7-1, #development, #dry-run, #releases