=== WooCommerce ===
Contributors: automattic, woocommerce, mikejolley, jameskoster, claudiosanches, rodrigosprimo, peterfabian1000, vedjain, jamosova, obliviousharmony, konamiman, sadowski, wpmuguru, royho, barryhughes-1, claudiulodro, tiagonoronha, ryelle, levinmedia, aljullu, nerrad, joshuawold, assassinateur, haszari, mppfeiffer, nielslange, opr18, ralucastn, tjcafferkey, danielwrobert, patriciahillebrandt, albarin, dinhtungdu, imanish003, karolmanijak, sunyatasattva, alexandrelara, gigitux, danieldudzic, samueljseay, alexflorisca, opr18, tarunvijwani, pauloarromba, saadtarhi, bor0, kloon, coreymckrill, jorgeatorres, leifsinger, neosinner
Tags: online store, ecommerce, shop, shopping cart, sell online
Requires at least: 6.9
Tested up to: 7.0
Requires PHP: 7.4
Stable tag: 10.8.1
License: GPLv3
License URI: https://www.gnu.org/licenses/gpl-3.0.html

Everything you need to launch an online store in days and keep it growing for years. From your first sale to millions in revenue, Woo is with you.

== Description ==

[WooCommerce](https://woocommerce.com/woocommerce/) is the open-source ecommerce platform for WordPress.

Our core platform is free, flexible, and amplified by a global community. The freedom of open-source means you retain full ownership of your store’s content and data forever.

Whether you’re launching a business, taking brick-and-mortar retail online, or developing sites for clients, use WooCommerce for a store that powerfully blends content and commerce.

- **Create beautiful, enticing storefronts** with [themes](https://woocommerce.com/product-category/themes/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) suited to your brand and industry.
- **Increase revenue** with an optimized [shopping cart experience](https://woocommerce.com/checkout-blocks/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) that converts.
- **Customize product pages in minutes** using modular [product blocks](https://woocommerce.com/document/woocommerce-blocks/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing).
- Showcase physical and digital goods, product variations, custom configurations, instant downloads, and affiliate items.
- Sell [subscriptions](https://woocommerce.com/products/woocommerce-subscriptions/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing), [bookings](https://woocommerce.com/products/woocommerce-bookings/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing), or [memberships](https://woocommerce.com/products/woocommerce-memberships/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing), with our developer-vetted extensions.
- **Rise to the top of search results** by leveraging [WordPress’ SEO advantage](https://www.searchenginejournal.com/wordpress-best-cms-seo/).
- **Build on a platform that scales.** Get flexible ecommerce for [high-volume stores](https://woocommerce.com/high-volume-stores/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing).

= ALL THE TOOLS YOU NEED TO SELL =

Built-in tools and popular integrations help you efficiently manage your business operations. Many services are free to add with a single click via the optional [Setup Wizard](https://woocommerce.com/document/woocommerce-setup-wizard/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing).

- **Choose how you want to get paid**. Conveniently manage payments from the comfort of your store with [WooPayments](https://woocommerce.com/payments/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) (Available in the U.S., U.K., Ireland, Australia, New Zealand, Canada, Spain, France, Germany, and Italy). Securely accept credit cards, mobile wallets, bank transfers, and cash thanks to [100+ payment gateways](https://woocommerce.com/product-category/woocommerce-extensions/payment-gateways/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) – including [Stripe](https://woocommerce.com/products/stripe/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing), [PayPal](https://woocommerce.com/products/woocommerce-gateway-paypal-checkout/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing), and [Square](https://woocommerce.com/products/square/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing).
- **Configure your shipping options**. Print USPS labels right from your dashboard and even schedule a pickup with [WooCommerce Shipping](https://woocommerce.com/products/shipping/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) (U.S.-only). Connect with [well-known carriers](https://woocommerce.com/product-category/woocommerce-extensions/shipping-methods/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) such as UPS and FedEx – plus a wide variety of delivery, inventory, and fulfillment solutions for your locale.
- **Simplify sales tax**. Add [WooCommerce Tax](https://woocommerce.com/products/tax/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) or [similar integrated services](https://woocommerce.com/product-category/woocommerce-extensions/tax?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) to make automated calculations a reality.

= Grow your business, add features, and monitor your store on the go =

WooCommerce means business. Keep tabs on the performance metrics most important to you with a powerful and flexible central dashboard built into WooCommerce.

Expand your audience across marketing and social channels with [Google Ads](https://woocommerce.com/products/google-ads/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing), [HubSpot](https://woocommerce.com/products/hubspot-for-woocommerce/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing), [Mailchimp](https://woocommerce.com/products/mailchimp-for-woocommerce/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing), and [Facebook](https://woocommerce.com/products/facebook/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) integrations. You can always check out the in-dashboard [Marketing Hub](https://woocommerce.com/document/marketing-hub/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) for fresh ideas and tips to help you succeed.

Enhance store functionality with hundreds of free and paid extensions from the [WooCommerce Marketplace](https://woocommerce.com/products/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing). Our developers [vet each new extension](https://woocommerce.com/document/marketplace-overview/#section-6?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) and regularly review existing extensions to maintain Marketplace quality standards. We are actively [looking for products that help store builders create successful stores](https://woocommerce.com/document/marketplace-overview/#section-2?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing).

Manage your store from anywhere with the free WooCommerce [mobile app](https://woocommerce.com/mobile/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) (Android and iOS). Spoiler alert: Keep an ear out for the slightly addictive "cha-ching" notification sound each time you make a new sale!

= Own and control your store data – forever =

With [WooCommerce](https://woocommerce.com/woocommerce/), your data belongs to you. Always.

If you opt to share [usage data](https://woocommerce.com/usage-tracking/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) with us, you can feel confident knowing that it’s anonymized and kept secure. Choose to opt-out at any time without impacting your store.

Unlike hosted ecommerce solutions, WooCommerce store data is future-proof; you’re free to export all your content and take your site to any platform you choose. No restrictions.

= Why developers choose (and love) WooCommerce =

Developers can use [WooCommerce](https://woocommerce.com/woocommerce/) to create, customize, and scale a store to meet a client’s exact specifications, making enhancements through extensions or custom solutions.

- Leverage [hooks and filters](https://woocommerce.com/document/introduction-to-hooks-actions-and-filters/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) to modify or create functionality.
- Integrate virtually any service using a robust [REST API](https://developer.woocommerce.com/docs/getting-started-with-the-woocommerce-rest-api/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) and webhooks.
- Design and build custom content blocks with React.
- [Inspect and modify](https://developer.woocommerce.com/docs/category/extension-development/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) any aspect of the core plugin code.
- Speed up development with a lightning-fast [CLI](https://developer.woocommerce.com/docs/category/wc-cli/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing).

The core platform is tested rigorously and often, supported by a dedicated development team working across time zones. Comprehensive documentation is updated with each release, empowering you to build exactly the store required.

= Be part of our growing international community =

WooCommerce has a large, passionate community dedicated to helping merchants succeed – and it’s growing fast.

There are [WooCommerce Meetups](https://woocommerce.com/meetups/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) in locations around the world that you can attend for free and even get involved in running. These events are a great way to learn from others, share your expertise, and connect with like-minded folks.

WooCommerce also has a regular presence at WordCamps across the globe – we’d love to meet you.

= Contribute and translate =

WooCommerce is developed and supported by Automattic, the creators of WordPress.com and Jetpack. We also have hundreds of independent contributors, and there’s always room for more. Head to the [WooCommerce GitHub Repository](https://github.com/woocommerce/woocommerce?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) to find out how you can pitch in.

WooCommerce is translated into multiple languages, including Danish, Ukrainian, and Persian. Help localize WooCommerce even further by adding your locale – visit [translate.wordpress.org](https://translate.wordpress.org/projects/wp-plugins/woocommerce/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing).

= Connection to WooCommerce.com =

You can connect your store to [WooCommerce.com](https://woocommerce.com/) to manage your subscriptions on WooCommerce Marketplace and receive product updates without leaving WordPress admin. Connection also enables installation of purchased products right from WooCommerce.com and streamlines access to technical support. If you’d like to learn about what data is gathered and how it is used, please refer to our [Privacy Policy](https://automattic.com/privacy/).

== Frequently Asked Questions ==

= Where can I find WooCommerce documentation and user guides? =

For help setting up and configuring WooCommerce, please refer to [Getting Started](https://woocommerce.com/documentation/plugins/woocommerce/getting-started/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) and the [New WooCommerce Store Owner Guide](https://woocommerce.com/guides/new-store/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing).

For extending or theming WooCommerce, see our [documentation](https://github.com/woocommerce/woocommerce/tree/trunk/docs), as well as the [Plugin Developer Best Practices](https://github.com/woocommerce/woocommerce/blob/trunk/docs/extension-development/extension-development-best-practices.md).

= Where can I get help or talk to other users about WooCommerce Core? =

If you get stuck, you can ask for help in the [WooCommerce Support Forum](https://wordpress.org/support/plugin/woocommerce/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) by following [these guidelines](https://wordpress.org/support/topic/guide-to-the-woocommerce-forum/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing), reach out via the [WooCommerce Community Slack](https://woocommerce.com/community-slack/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing), or post in the [WooCommerce Community group](https://www.facebook.com/groups/advanced.woocommerce?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) on Facebook.

= Where can I get help for extensions I have purchased from the WooCommerce Marketplace? =

For assistance with paid extensions from the WooCommerce Marketplace: first, review our [self-service troubleshooting guide](https://woocommerce.com/document/woocommerce-self-service-guide/). If the problem persists, kindly log a support ticket via [our helpdesk](https://woocommerce.com/my-account/create-a-ticket/). Our dedicated Happiness Engineers aim to respond within 24 hours.

= I’m having trouble logging in to WooCommerce.com – what now? =

First, troubleshoot common login issues using this helpful [step-by-step guide](https://woocommerce.com/document/log-into-woocommerce-com-with-wordpress-com/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing). Still not working? [Get in touch with us](https://woocommerce.com/contact-us/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing).

= Will WooCommerce work with my theme? =

Yes! WooCommerce will work with any theme but may require some additional styling. If you’re looking for a theme featuring deep WooCommerce integration, we recommend [Storefront](https://woocommerce.com/storefront/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing).

= How do I update WooCommerce? =

We have a detailed guide on [How To Update WooCommerce](https://woocommerce.com/document/how-to-update-woocommerce/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing).

= My site broke – what do I do? =

Start by diagnosing the issue using our helpful [troubleshooting guide](https://woocommerce.com/documentation/get-help/troubleshooting-get-help/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing).

If you noticed the error after updating a theme or plugin, there might be compatibility issues between it and WooCommerce. If the issue appeared after updating WooCommerce, there could be a conflict between WooCommerce and an outdated theme or plugin.

In both instances, we recommend running a conflict test using [Health Check](https://woocommerce.com/document/troubleshooting-using-health-check/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) (which allows you to disable themes and plugins without affecting your visitors) or troubleshooting the issue using a [staging site](https://woocommerce.com/document/how-to-test-for-conflicts/#section-3?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing).

= Where can I report bugs? =

Report bugs on the [WooCommerce GitHub repository](https://github.com/woocommerce/woocommerce/issues?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing). You can also notify us via our support forum – be sure to search the forums to confirm that the error has not already been reported.

= Where can I request new features, themes, and extensions? =

Request new features and extensions and vote on existing suggestions on our official [feature request board](https://woocommerce.com/feature-requests/woocommerce?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing). Our Product teams regularly review requests and consider them valuable for product planning.

= WooCommerce is awesome! Can I contribute? =

Yes, you can! Join in on our [GitHub repository](https://github.com/woocommerce/woocommerce/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) and follow the [development blog](https://woocommerce.wordpress.com/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) to stay up-to-date with everything happening in the project.

= Where can I find REST API documentation? =

Extensive [WooCommerce REST API Documentation](https://developer.woocommerce.com/docs/apis/rest-api/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) is available.

= My question is not listed here. Where can I find more answers? =

Check out [Frequently Asked Questions](https://woocommerce.com/document/frequently-asked-questions/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) for more.

== Installation ==

= Minimum Requirements =

* PHP 7.4 or greater is required (PHP 8.0 or greater is recommended)
* MySQL 5.5.5 or greater, OR MariaDB version 10.1 or greater, is required
* WordPress 6.9 or greater
* (Recommended) WordPress [memory limit](https://woocommerce.com/document/increasing-the-wordpress-memory-limit/) of 256 MB or greater.
* (Recommended) [HTTPS](https://woocommerce.com/document/ssl-and-https/) support.

= Automatic installation =

Automatic installation is the easiest option -- WordPress will handle the file transfer, and you won’t need to leave your web browser. To do an automatic install of WooCommerce, log in to your WordPress dashboard, navigate to the Plugins menu, and click “Add New.”

In the search field type “WooCommerce,” then click “Search Plugins.” Once you’ve found us,  you can view details about it such as the point release, rating, and description. Most importantly of course, you can install it by! Click “Install Now,” and WordPress will take it from there.

= Manual installation =

Manual installation method requires downloading the WooCommerce plugin and uploading it to your web server via your favorite FTP application. The WordPress codex contains [instructions on how to do this here](https://wordpress.org/support/article/managing-plugins/#manual-plugin-installation).

= Updating =

Automatic updates should work smoothly, but we still recommend you back up your site.

If you encounter issues with the shop/category pages after an update, flush the permalinks by going to WordPress > Settings > Permalinks and hitting “Save.” That should return things to normal.

= Sample data =

WooCommerce comes with some sample data you can use to see how products look; import sample_products.xml via the [WordPress importer](https://wordpress.org/plugins/wordpress-importer/). You can also use the core [CSV importer](https://woocommerce.com/document/product-csv-importer-exporter/?utm_source=wp%20org%20repo%20listing&utm_content=3.6) or our [CSV Import Suite extension](https://woocommerce.com/products/product-csv-import-suite/?utm_source=wp%20org%20repo%20listing&utm_content=3.6) to import sample_products.csv

== Changelog ==

= 10.9.0-beta.2 2026-06-15 =

**WooCommerce**

* Fix - Add defensive validation to order action links in order-details.php template to handle malformed entries from third-party extensions. [#64492](https://github.com/woocommerce/woocommerce/pull/64492)
* Fix - Add global HTML translate attribute to currency so it doesn't get auto translated [#62037](https://github.com/woocommerce/woocommerce/pull/62037)
* Fix - Add install_plugins capability check to the install-jp-and-wcs-plugins inbox-note action handler so the latent installer call is unreachable to users without the `install_plugins` capability. [#64428](https://github.com/woocommerce/woocommerce/pull/64428)
* Fix - Add product type guard to VariationSelectorAttribute block to prevent fatal error when rendered for non-variable products. [#64410](https://github.com/woocommerce/woocommerce/pull/64410)
* Fix - Add stock status and product status indicators to the admin order product selector so admins can see which variations are out of stock, on backorder, or disabled. [#64426](https://github.com/woocommerce/woocommerce/pull/64426)
* Fix - Add `small` to ALLOWED_TAGS to fix price suffix stripped on variable products. [#64540](https://github.com/woocommerce/woocommerce/pull/64540)
* Fix - Adopt 2px border-radius on Woo custom inputs and buttons to align with WP 7.0 [#64417](https://github.com/woocommerce/woocommerce/pull/64417)
* Fix - Allow the v4 products endpoint to filter by multiple stock statuses. [#65155](https://github.com/woocommerce/woocommerce/pull/65155)
* Fix - Announce order note save success to screen readers when adding a note from the order admin meta box, distinguishing between private notes and customer-emailed notes (WCAG 4.1.3). [#64891](https://github.com/woocommerce/woocommerce/pull/64891)
* Fix - Avoid priming transient option caches for variable products when a persistent object cache is active, which prevents unbounded growth of the notoptions cache. [#65440](https://github.com/woocommerce/woocommerce/pull/65440)
* Fix - Catalog Sorting block: prevent 404s for non-existent JS and CSS asset files. [#64682](https://github.com/woocommerce/woocommerce/pull/64682)
* Fix - Clear store_stock push notification dedup meta when product stock recovers above its threshold so future downward crossings emit a fresh push. [#64727](https://github.com/woocommerce/woocommerce/pull/64727)
* Fix - Don't leak title, price, permalink, or image for non-public products (draft, private, password-protected, etc.) in shopper-list responses. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Fix - Drop the outdated "app version needs to be 15.7" helper text from the mobile-app modal QR view and surface the underlying Jetpack error in the magic-link failure notice so support and merchants can diagnose the problem instead of hitting a generic retry message. [#65111](https://github.com/woocommerce/woocommerce/pull/65111)
* Fix - Fix account dropdown button height mismatch with search input in Marketplace header [#64420](https://github.com/woocommerce/woocommerce/pull/64420)
* Fix - Fix Add to Cart Button not working on Products (Beta) block [#65525](https://github.com/woocommerce/woocommerce/pull/65525)
* Fix - Fix Analytics order stats for lump-sum full refunds (e.g. order status set to Refunded) so net revenue uses product net, not the full refund total. [#64106](https://github.com/woocommerce/woocommerce/pull/64106)
* Fix - Fix array to string conversion warning in wc_query_string_form_fields() when URL contains nested query string parameters. [#64010](https://github.com/woocommerce/woocommerce/pull/64010)
* Fix - Fix attribute escaping in product gallery dialog images and remove the broken loading attribute so dialog images render eagerly as intended [#64673](https://github.com/woocommerce/woocommerce/pull/64673)
* Fix - Fix a typo in the `site_not_connected` installer error code (previously emitted as `site_not_connnected`). WooCommerce.com continues to accept both spellings, so existing sites are unaffected. [#64180](https://github.com/woocommerce/woocommerce/pull/64180)
* Fix - Fix BatchProcessingController::enqueue_processor() appending duplicate entries to the wc_pending_batch_processes option. [#65543](https://github.com/woocommerce/woocommerce/pull/65543)
* Fix - Fix categories report filtering when term_id differs from term_taxonomy_id [#64548](https://github.com/woocommerce/woocommerce/pull/64548)
* Fix - Fix Customers analytics screen failing to render when a customer record contains a country value that collides with an Array index or property name. [#64633](https://github.com/woocommerce/woocommerce/pull/64633)
* Fix - Fix handling of array input types in the dual API [#64735](https://github.com/woocommerce/woocommerce/pull/64735)
* Fix - Fix highest shipping cost shown before address entry when using Local Pickup with block checkout. Also improves shipping rate selection UX with optimistic UI updates in the order totals. [#64092](https://github.com/woocommerce/woocommerce/pull/64092)
* Fix - Fix Interactivity API hydration warning on shopper-collection rows for items without product variations. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Fix - Fix JS TypeError when product excerpt metabox is removed. [#64346](https://github.com/woocommerce/woocommerce/pull/64346)
* Fix - Fix locale leak in WC_Email_New_Order::trigger(): restore_locale() was not called when the email was skipped due to already being sent, leaving the locale set for the remainder of the request. [#64859](https://github.com/woocommerce/woocommerce/pull/64859)
* Fix - Fix PHP 8.1+ deprecation notice when passing null to preg_match in WC_Eval_Math. [#64158](https://github.com/woocommerce/woocommerce/pull/64158)
* Fix - Fix PHP warning for undefined array key fixedWidth in ProductCollection Renderer when using Fixed Width + Carousel [#64432](https://github.com/woocommerce/woocommerce/pull/64432)
* Fix - Fix report transient cache key instability caused by DateTime serialization with microseconds in get_cache_key [#64430](https://github.com/woocommerce/woocommerce/pull/64430)
* Fix - Fix responsive layout issue on Status admin screen notice buttons [#65298](https://github.com/woocommerce/woocommerce/pull/65298)
* Fix - Fix tax rate labels containing percent signs (e.g. "%15 KDV" in Turkish locale) being corrupted when stored on order items. [#64154](https://github.com/woocommerce/woocommerce/pull/64154)
* Fix - Fix typo: "recieved" corrected to "received" in code comments and strings. [#64433](https://github.com/woocommerce/woocommerce/pull/64433)
* Fix - Fix Variation Selector: Attribute Name colors not being applied in the editor [#65010](https://github.com/woocommerce/woocommerce/pull/65010)
* Fix - Fix wc_customer_bought_product() returning false for unlinked guest orders when a matching user ID is supplied. [#65531](https://github.com/woocommerce/woocommerce/pull/65531)
* Fix - Fix webhook topic validator accepting `coupon.published`, `customer.published`, `customer.restored`, and `order.published` topics that have no registered hook, causing webhooks to save as Active but never deliver. The validator now derives the default-pair allowlist from the new `WC_Webhook::get_default_topic_hooks()` static, so extensions that register hooks for those pairs via `woocommerce_webhook_topic_hooks` are honored automatically. [#64505](https://github.com/woocommerce/woocommerce/pull/64505)
* Fix - Fix `cartItemScreenReaderPrice` filter output being announced by screen readers as separate fragments instead of a single sentence. [#64480](https://github.com/woocommerce/woocommerce/pull/64480)
* Fix - Fix `customer_note` query arg being silently ignored when using HPOS order storage. [#64467](https://github.com/woocommerce/woocommerce/pull/64467)
* Fix - Hide the WordPress admin footer text on the experimental All Products dashboard. [#64705](https://github.com/woocommerce/woocommerce/pull/64705)
* Fix - Honor the configured product count color for the Mini Cart badge on the frontend when using the Interactivity API. [#64411](https://github.com/woocommerce/woocommerce/pull/64411)
* Fix - Honor `#[ArrayOf]` on query and mutation return types in the GraphQL API builder [#65235](https://github.com/woocommerce/woocommerce/pull/65235)
* Fix - Improve diagnostics for failed analytics order imports. [#64588](https://github.com/woocommerce/woocommerce/pull/64588)
* Fix - Keep product dashboard snackbar notices visible above the quick edit drawer. [#65220](https://github.com/woocommerce/woocommerce/pull/65220)
* Fix - Keep Store API visual attribute term data opt-in with `__experimental_visual`. [#65432](https://github.com/woocommerce/woocommerce/pull/65432)
* Fix - Make the payment provider setup-required error message more actionable. [#64799](https://github.com/woocommerce/woocommerce/pull/64799)
* Fix - Preserve deferred transactional email object arguments when queued through Action Scheduler. [#64820](https://github.com/woocommerce/woocommerce/pull/64820)
* Fix - Preserve the 'X' check digit in ISBN-10 identifiers entered in the GTIN/UPC/EAN/ISBN product field. The server-side sanitizer, classic editor validation, and block editor input pattern previously stripped or rejected 'X', silently truncating valid ISBN-10s such as 157249042X. [#64889](https://github.com/woocommerce/woocommerce/pull/64889)
* Fix - Prevent a `_load_textdomain_just_in_time` notice from firing on every request when the GraphQL API feature is registered. [#64881](https://github.com/woocommerce/woocommerce/pull/64881)
* Fix - Prevent the Marketplace product card title focus ring from being clipped. [#64788](https://github.com/woocommerce/woocommerce/pull/64788)
* Fix - Product data and Coupon data tabs: restore a visible keyboard focus indicator. The tabs previously suppressed the WordPress core focus ring without providing a replacement, leaving keyboard users without a perceivable indicator (WCAG 2.4.7, 2.4.11, 1.4.1). [#64890](https://github.com/woocommerce/woocommerce/pull/64890)
* Fix - Product image tooltip: set aria-label via DOM attribute instead of interpolating the translated string into the HTML template, preventing broken markup when the translation contains characters such as quotes. [#64888](https://github.com/woocommerce/woocommerce/pull/64888)
* Fix - Promote the simple-product offer's price and currency to the top of the JSON-LD offer so Google Search Console accepts the structured data. [#65123](https://github.com/woocommerce/woocommerce/pull/65123)
* Fix - Re-add the analytics full refund fix tool to Status > Tools, shown only for stores with old refund data. [#64143](https://github.com/woocommerce/woocommerce/pull/64143)
* Fix - Relax MCP `outputSchema` published for REST-derived abilities so `structuredContent` validates in MCP clients (Cursor, Claude Desktop): strip `format: date-time` and `format: uri` (WooCommerce REST dates omit timezone and URI fields can be empty), and widen every declared scalar `type` to the full JSON type union plus `null` so fields whose declared type disagrees with the controller's actual response — including ones returned as arrays or objects, like `meta_data[].display_value` — still validate. [#64787](https://github.com/woocommerce/woocommerce/pull/64787)
* Fix - Remove duplicate tfoot elements in the My Account order details template. [#64358](https://github.com/woocommerce/woocommerce/pull/64358)
* Fix - Remove unnecessary gap in Product Filters block [#64599](https://github.com/woocommerce/woocommerce/pull/64599)
* Fix - Replace developer-facing "Plugin API call failed" error with merchant-friendly copy that explains the issue and suggests next steps. [#64186](https://github.com/woocommerce/woocommerce/pull/64186)
* Fix - Replace hardcoded /wp-content path with WP_CONTENT_DIR constant. [#64376](https://github.com/woocommerce/woocommerce/pull/64376)
* Fix - Set `cartPageHasSavedForLater` from the Shopper Collection block itself so the cart "Save for later" link shows when the block is auto-injected as a hooked block (which `has_block()` does not detect). [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Fix - Shopper Collection: skip rendering and asset enqueue for logged-out shoppers. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Fix - Skip scheduling and sending the customer review-request email when the order has no reviewable items (every product has reviews disabled per-product or site-wide, or every reviewable item is already reviewed for that order). [#64960](https://github.com/woocommerce/woocommerce/pull/64960)
* Fix - Stop rendering thumbnail images in inbox notes; deprecate `Note::set_image()`, `Note::get_image()`, `Note::set_layout()`, `Note::get_layout()` and the `'thumbnail'` layout value, all of which will be removed in a future release. [#64443](https://github.com/woocommerce/woocommerce/pull/64443)
* Fix - Store API: reuse the session's pending/failed order on checkout POST retry instead of creating a duplicate. Also restore session precedence for `payment_method` in the deferred-draft response so a shopper's PATCH-time selection isn't overwritten by their saved default. [#64806](https://github.com/woocommerce/woocommerce/pull/64806)
* Fix - Store fulfillment datetimes as UTC and return them from the REST API as ISO 8601 with an explicit `Z` suffix so they render correctly on non-UTC sites. [#64260](https://github.com/woocommerce/woocommerce/pull/64260)
* Fix - Update Featured Product and Featured Category block previews in the inserter so they better match the frontend [#64206](https://github.com/woocommerce/woocommerce/pull/64206)
* Fix - Validate product_query before using in WC_Product_Data_Store_CPT. [#64360](https://github.com/woocommerce/woocommerce/pull/64360)
* Fix - Push notifications: cancel the safety-net Action Scheduler action on delivery by matching schedule and cancel on a single identity-keyed args shape, so stale actions no longer fire ~60s later (and the retry path can no longer produce duplicate pushes). [#65589](https://github.com/woocommerce/woocommerce/pull/65589)
* Fix - Fix product filters not applying when Full Page Reload is enabled in the Product Collection block. [#65601](https://github.com/woocommerce/woocommerce/pull/65601)
* Add - Add a "Save for later" link beneath each cart line item that saves the item to the saved-for-later shopper list and removes it from the cart on success. The link is only shown to logged-in users and is hidden in the mini-cart. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Add - Add a configurable endpoint URL to the GraphQL settings section. [#64350](https://github.com/woocommerce/woocommerce/pull/64350)
* Add - Add a configurable maximum query depth to the GraphQL settings section. [#64325](https://github.com/woocommerce/woocommerce/pull/64325)
* Add - Add after_password_reset action hook for parity with WordPress core. [#64380](https://github.com/woocommerce/woocommerce/pull/64380)
* Add - Add a merchant-configurable maximum-rating threshold to the store_review push notification, so only reviews at or below the threshold trigger a notification. Default behaviour (notify on every approved review) is unchanged. [#64565](https://github.com/woocommerce/woocommerce/pull/64565)
* Add - Add a merchant-configurable minimum-amount threshold to the store_order push notification, so only orders at or above the threshold trigger a notification. Default behaviour (notify on every enabled order) is unchanged. [#64509](https://github.com/woocommerce/woocommerce/pull/64509)
* Add - Add a metadata mechanism to the dual code+GraphQL API [#64800](https://github.com/woocommerce/woocommerce/pull/64800)
* Add - Add a native transactional email log. Each send attempt is recorded under WooCommerce → Status → Logs (source: transactional-emails), capturing the type, related order or object, send status, and recipient (WordPress username for registered users, "guest" for unrecognised addresses). Failed sends include the error reason from wp_mail_failed. [#64491](https://github.com/woocommerce/woocommerce/pull/64491)
* Add - Add an in-app confirmation flow to the mobile-app QR login: wc-admin polls a new status endpoint while the QR is on screen, transitions to a "Signed in successfully on {device}" panel after the mobile app exchanges the token, exposes an "It wasn't you? Revoke access" button, and adds a persistent "Renew code" button alongside the countdown. The Application Password is now named with the device model and date so the merchant can identify it in Users → Profile → Application Passwords. [#65111](https://github.com/woocommerce/woocommerce/pull/65111)
* Add - Add an opt-in settings UI SDK path for WooCommerce settings pages. [#64387](https://github.com/woocommerce/woocommerce/pull/64387)
* Add - Add an order milestone celebration for the 1st, 100th, and 1000th paid orders. [#64679](https://github.com/woocommerce/woocommerce/pull/64679)
* Add - Add a number-matching approval step to the mobile-app QR login: after the merchant scans the QR, the mobile app shows a 3-digit number, and wc-admin asks the merchant to tap the matching value from a server-shuffled triple. A wrong tap (or the explicit "I don't recognise this device" cancel link) terminates the session permanently — defending against shoulder-surfed QR codes and leaked screenshots. Older mobile clients without the new capability flag receive 426 Upgrade Required so they can prompt for an app update. [#65111](https://github.com/woocommerce/woocommerce/pull/65111)
* Add - Add a setting to toggle Apollo Automatic Persisted Queries (APQ) caching on the GraphQL settings page. [#64448](https://github.com/woocommerce/woocommerce/pull/64448)
* Add - Add a setting to toggle the ObjectCache-backed parsed-query cache on the GraphQL settings page. [#64415](https://github.com/woocommerce/woocommerce/pull/64415)
* Add - Add canonical WooCommerce domain abilities for product and order management. [#64606](https://github.com/woocommerce/woocommerce/pull/64606)
* Add - Add change-summary REST endpoint and service for surfacing block email template updates. [#64484](https://github.com/woocommerce/woocommerce/pull/64484)
* Add - Add configurable parsed query cache TTL to GraphQL settings [#64488](https://github.com/woocommerce/woocommerce/pull/64488)
* Add - Add experimental inner block protocols for product filter blocks. [#64585](https://github.com/woocommerce/woocommerce/pull/64585)
* Add - Add filters for dual API debug mode and introspection, and surface status resolver failures in debug mode. [#64729](https://github.com/woocommerce/woocommerce/pull/64729)
* Add - Add granular type- and field-level authorization to the dual code+GraphQL API [#65235](https://github.com/woocommerce/woocommerce/pull/65235)
* Add - Add native variation gallery support: each variation can now have its own ordered image set, replacing the retired Additional Variation Images extension. Includes a migrator for legacy data and a runtime fallback so existing stores keep displaying their galleries. [#64524](https://github.com/woocommerce/woocommerce/pull/64524)
* Add - Add OPcache-backed caching for parsed GraphQL queries, with fallback to the WP object cache. [#64596](https://github.com/woocommerce/woocommerce/pull/64596)
* Add - Add per-user push notification preferences REST endpoint at `/wc-push-notifications/preferences`. [#64351](https://github.com/woocommerce/woocommerce/pull/64351)
* Add - Add QR code login for the WooCommerce mobile app so eligible store managers can sign in directly without a linked WordPress.com account. [#65111](https://github.com/woocommerce/woocommerce/pull/65111)
* Add - Add quick edit and bulk product actions to the experimental products app. [#64481](https://github.com/woocommerce/woocommerce/pull/64481)
* Add - Add Review drawer UI for selectively applying block email template updates. [#64497](https://github.com/woocommerce/woocommerce/pull/64497)
* Add - Add selective apply + undo REST endpoints for block email template updates. [#64497](https://github.com/woocommerce/woocommerce/pull/64497)
* Add - Add Stage 1 of the variations classic redesign: a DataViews-based Variations tab in the classic product editor, behind the product_variations_classic_redesign feature flag (default off). [#64595](https://github.com/woocommerce/woocommerce/pull/64595)
* Add - Add Stripe IPP channel check to POS order identification for email suppression. [#64029](https://github.com/woocommerce/woocommerce/pull/64029)
* Add - Add the foundation for shopper lists via new Store API endpoints under /wc/store/v1/shopper-lists. Lists are persisted per-user in usermeta. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Add - Add the logic to clear "wc_attribute_taxonomies" transient and cache when clicking on "clear transients". [#64240](https://github.com/woocommerce/woocommerce/pull/64240)
* Add - Add the store_stock push notification covering low-stock, out-of-stock, and backorder events. All three events are enabled by default and each one has its own merchant-configurable sub-flag. [#64600](https://github.com/woocommerce/woocommerce/pull/64600)
* Add - Add the `order-detail-redesign` feature flag (default off). When enabled, caps the admin Order edit screen at 1200px on wide displays. [#64669](https://github.com/woocommerce/woocommerce/pull/64669)
* Add - Add the `woocommerce/add-to-wishlist-button` block: shipped as an inner block of `woocommerce/add-to-cart-with-options` on the single-product template (block themes only). Toggles the currently configured product (parent or selected variation) in the shopper's wishlist via the shared `shopper-lists` iAPI store. Hidden for guests. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Add - Add the `woocommerce/wishlist` block: renders the shopper's wishlist via the shared `shopper-lists` Store API and iAPI store, composes the `ShopperListRenderer` shared row markup, and ships an "Add to cart" per-row action that adds the product to the cart and removes the row from the wishlist on confirmed success. The `/my-account/wishlist/` endpoint now renders this block instead of its placeholder. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Add - Add Tracks instrumentation for the block-email update flow: server-side `_available`, `_applied` (auto + selective), and `_backfill_completed` events, plus list-page `_viewed`. Also stamps the backfill-complete option on fresh installs so the divergence sweep is not permanently dormant. [#64759](https://github.com/woocommerce/woocommerce/pull/64759)
* Add - Add Tracks instrumentation to the floating header's Screen Options (gear) and Help (?) icon buttons. Fires `wcadmin_header_meta_icon_click` with `icon` and `action` (open/close) so engagement with these two icons can be measured. [#65131](https://github.com/woocommerce/woocommerce/pull/65131)
* Add - Add WC REST API v4 product filters for stock quantity ranges. [#65117](https://github.com/woocommerce/woocommerce/pull/65117)
* Add - Add WooCommerce 11.0 removal notices for the deprecated product editor feature, extension APIs, and public PHP classes. [#65333](https://github.com/woocommerce/woocommerce/pull/65333)
* Add - Add `can_be_refunded` field to v4 order and line item REST API responses. [#64162](https://github.com/woocommerce/woocommerce/pull/64162)
* Add - Add `get_entry_count()` to `FeedInterface` so product feed consumers can report the number of rows actually written to the feed (distinct from the number of products iterated by `ProductWalker`). [#64394](https://github.com/woocommerce/woocommerce/pull/64394)
* Add - Allow the shipping zones REST API endpoint to be extended [#64246](https://github.com/woocommerce/woocommerce/pull/64246)
* Add - Auto-inject the Shopper Collection block on the cart page when the shopper lists feature is enabled. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Add - Customer Review Request: render one row per line item on the Review Order page so customers can leave distinct reviews for each variation of a variable product they bought, and surface the variation's attribute summary on the parent product's Reviews tab. [#64984](https://github.com/woocommerce/woocommerce/pull/64984)
* Add - Filter push notifications by per-user preferences so opted-out merchants don't receive disabled notification types on their devices. [#64487](https://github.com/woocommerce/woocommerce/pull/64487)
* Add - Gate shopper lists behind a new experimental flag. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Add - Register a settings entity in the WooCommerce Blocks entities module so admin clients can read store settings via core-data. [#65127](https://github.com/woocommerce/woocommerce/pull/65127)
* Add - Send the merchant a transactional email after a successful QR mobile-app sign-in summarizing the device, OS, app version, and timestamp, with a "revoke access" link. Wrapped in a `woocommerce_qr_login_should_send_signin_email` filter so site owners can suppress the send. [#65111](https://github.com/woocommerce/woocommerce/pull/65111)
* Add - Shopper Collection: add a built-in heading inner block (defaults to "Saved for later" at H2). Editable in the block editor. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Add - Shopper Collections: add experimental wishlist support. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Add - Surface update-available indicator in the block email editor (RSM-141) [#64675](https://github.com/woocommerce/woocommerce/pull/64675)
* Add - Wire the Shopper Collection (Saved-for-later) block to the shopper-lists Store API via a private iAPI store, with server-side rendering of saved items, optimistic remove, and Move-to-cart for simple products. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Update - Add readonly variation attributes [#65255](https://github.com/woocommerce/woocommerce/pull/65255)
* Update - Add three-way diff for block email template change-summary and selective apply when the new `_wc_email_template_last_core_render` post meta is present. [#64716](https://github.com/woocommerce/woocommerce/pull/64716)
* Update - Add to Cart + Options: Variation Selector block now can use the same inner blocks as Product Filters [#64887](https://github.com/woocommerce/woocommerce/pull/64887)
* Update - Add tracking for attribute type when updating or saving product attributes [#65228](https://github.com/woocommerce/woocommerce/pull/65228)
* Update - DataViews - All Products: add quick edit panel [#64481](https://github.com/woocommerce/woocommerce/pull/64481)
* Update - Deprecate Product Editor v2 [#65333](https://github.com/woocommerce/woocommerce/pull/65333)
* Update - Don't allow adding multiple Product Filters blocks on the same page or template [#64538](https://github.com/woocommerce/woocommerce/pull/64538)
* Update - Hide the cart "Save for later" link when the user is logged out, the `cart_save_for_later` feature is disabled, or the cart page has no `woocommerce/shopper-collection` block. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Update - Move `OrderDetailRedesign` feature class to the `Internal` namespace so it can be removed without breaking backwards compatibility if the feature is not shipped. [#64669](https://github.com/woocommerce/woocommerce/pull/64669)
* Update - Refactor Product block to use isPreviewMode flag [#63270](https://github.com/woocommerce/woocommerce/pull/63270)
* Update - Remove the task list reminder bar from WooCommerce admin. The Finish setup entry in the activity panel remains as a quieter, non-obstructive alternative. The `woocommerce_task_list_reminder_bar_hidden` option is removed from the wc-admin REST options allowlist, and a one-time migration cleans it up from existing stores. `TaskList::possibly_remove_reminder_bar()` and `TaskList::REMINDER_BAR_HIDDEN_OPTION` are retained as deprecation stubs. [#64353](https://github.com/woocommerce/woocommerce/pull/64353)
* Update - Rename 'Select' attribute type to 'Text' in all user-facing strings [#64570](https://github.com/woocommerce/woocommerce/pull/64570)
* Update - Rename CartCheckoutUtils::is_overriden_by_custom_template_content() to is_overridden_by_custom_template_content(). The misspelled name is preserved as a deprecated alias for backwards compatibility. [#64461](https://github.com/woocommerce/woocommerce/pull/64461)
* Update - Replaces PanelBody with ToolsPanel in the Coming Soon block [#64768](https://github.com/woocommerce/woocommerce/pull/64768)
* Update - Require a wc_store_api Nonce header on shopper-lists item writes. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Update - Update admin modal styles to keep them more consistent [#64265](https://github.com/woocommerce/woocommerce/pull/64265)
* Update - Update product filter color handling to use block and global styles. [#64586](https://github.com/woocommerce/woocommerce/pull/64586)
* Update - Update the WooCommerce ability category description to cover extension abilities. [#64934](https://github.com/woocommerce/woocommerce/pull/64934)
* Update - Enable the push notifications feature by default. [#65572](https://github.com/woocommerce/woocommerce/pull/65572)
* Update - Add styles for the settings UI number spin control (hide the native spinner, position the +/- buttons). [#65729](https://github.com/woocommerce/woocommerce/pull/65729)
* Update - Update settings UI layout to the agreed design values: 720px container width, 16px spacing between stacked fields, and 24px between cards. [#65729](https://github.com/woocommerce/woocommerce/pull/65729)
* Dev - Add E2E tests for block email template update propagation. [#64817](https://github.com/woocommerce/woocommerce/pull/64817)
* Dev - Add embedded product variation links to the WC REST API v4 products endpoint. [#64566](https://github.com/woocommerce/woocommerce/pull/64566)
* Dev - Add extra flexibility to the authentication and authorization stages of the dual code+GraphQL API. [#64647](https://github.com/woocommerce/woocommerce/pull/64647)
* Dev - Add extra flexibility to the HTTP status code computation of the dual code+GraphQL API. [#64699](https://github.com/woocommerce/woocommerce/pull/64699)
* Dev - Add Interactivity API packages to the WordPress minimum-version dependency catalog. [#65405](https://github.com/woocommerce/woocommerce/pull/65405)
* Dev - Address CodeRabbit review feedback on the Back in Stock Notifications alpha and apply small follow-on cleanups: extract email-link action tokens into `EmailActionController` constants, remove the pre-WP-6.8 hasher compatibility shim now that WooCommerce requires WordPress 6.8, delete the in-tree sprint scratch docs (`SPRINT.md`, `CODERABBIT-TRIAGE.md`, `CODERABBIT-TRIAGE-RAW.md`) ahead of merge, and fix the assorted CR-flagged bugs (cancel-action copy-paste, split verification/unsubscribe keys, guard unreadable notifications in retention and privacy erasers, repair admin create-form option tags, correct background-processor operator precedence, rename typo filter, drop unused sprintf arg). [#64329](https://github.com/woocommerce/woocommerce/pull/64329)
* Dev - Add unit test coverage for the products and coupons GraphQL API commands. [#65194](https://github.com/woocommerce/woocommerce/pull/65194)
* Dev - Add WooPayments onboarding business details regression tests. [#65357](https://github.com/woocommerce/woocommerce/pull/65357)
* Dev - Auto-apply the current core block template render to woo_email posts classified as core_updated_uncustomized after a plugin upgrade. Batched via Action Scheduler so the upgrade request is not blocked. Posts edited by the merchant are left untouched. [#64450](https://github.com/woocommerce/woocommerce/pull/64450)
* Dev - Bump mockery/mockery dev dependency to ^1.6.10 to silence PHP 8.4 implicit-nullable deprecation warnings emitted on every request when opcache is disabled. [#64873](https://github.com/woocommerce/woocommerce/pull/64873)
* Dev - Comment: Add unit tests for the experimental GraphQL infrastructure [#64479](https://github.com/woocommerce/woocommerce/pull/64479)
* Dev - Correct @since tags on push notification preference filtering methods introduced in 10.9.0. [#65380](https://github.com/woocommerce/woocommerce/pull/65380)
* Dev - Define the `__i18n_text_domain__` identifier used by the email editor package as `"woocommerce"` in the admin and blocks webpack builds so strings continue to extract and translate under the `woocommerce` text domain. [#64356](https://github.com/woocommerce/woocommerce/pull/64356)
* Dev - Dev: swap unmaintained Suin PSR-4 sniff for Slevomat to keep PHPCS working on PHP 8.5. [#64875](https://github.com/woocommerce/woocommerce/pull/64875)
* Dev - Document new gallery_image_ids field on /wc/v3/products/<product_id>/variations endpoint (added in #64524). [#65290](https://github.com/woocommerce/woocommerce/pull/65290)
* Dev - e2e tests: Fix missing baseURL guard in restApi fixture [#65520](https://github.com/woocommerce/woocommerce/pull/65520)
* Dev - Export shared payment method icons and `getCommonIconProps` from `@woocommerce/blocks-checkout`. [#64617](https://github.com/woocommerce/woocommerce/pull/64617)
* Dev - Extract shared authorize_as_authenticated logic from the push notifications REST controllers into a new AuthorizesPushNotificationRequests trait. [#65380](https://github.com/woocommerce/woocommerce/pull/65380)
* Dev - Fix MCP provider test Abilities API registry bootstrap. [#65223](https://github.com/woocommerce/woocommerce/pull/65223)
* Dev - Fix PHPUnit assertions for deferred email queue object round trips and Store API checkout failed-payment retries. [#65226](https://github.com/woocommerce/woocommerce/pull/65226)
* Dev - Fix typos in code: linkToDescrption, unkown-status, identifer. [#64882](https://github.com/woocommerce/woocommerce/pull/64882)
* Dev - Fix typos in comments and docblocks. [#64950](https://github.com/woocommerce/woocommerce/pull/64950)
* Dev - fix unit test env setup [#65341](https://github.com/woocommerce/woocommerce/pull/65341)
* Dev - Improve payment setup fallback test coverage and translator context. [#64860](https://github.com/woocommerce/woocommerce/pull/64860)
* Dev - Monorepo: address circular dependencies surfaced by SWC TDZ. [#64797](https://github.com/woocommerce/woocommerce/pull/64797)
* Dev - Move GraphQL infrastructure classes used by autogenerated code out of the `Internal` namespace into `Api\Infrastructure` [#65151](https://github.com/woocommerce/woocommerce/pull/65151)
* Dev - Move TypeScript type-checking from the build to a new `lint:lang:types` script. Builds now emit types and JS without type-checking. [#65168](https://github.com/woocommerce/woocommerce/pull/65168)
* Dev - Pass ShopperList and ShopperListItem objects directly to their Store API schemas instead of round-tripping through to_array(); no JSON response shape change. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Dev - Product Collection E2E: close the global inserter before choosing a collection so hover previews do not block the placeholder controls. [#65393](https://github.com/woocommerce/woocommerce/pull/65393)
* Dev - Reduce variability in payment gateway is_available implementations. [#64386](https://github.com/woocommerce/woocommerce/pull/64386)
* Dev - Refresh PHPStan baseline to reflect changes from PR 64406. [#64543](https://github.com/woocommerce/woocommerce/pull/64543)
* Dev - Remove Legacy REST API settings section, admin notices, auto-install logic, and UI nudges from WooCommerce core. The Legacy REST API extension continues to work if manually installed. [#64076](https://github.com/woocommerce/woocommerce/pull/64076)
* Dev - Remove the stale experimental iAPI runtime feature flag and custom runtime build path. [#65404](https://github.com/woocommerce/woocommerce/pull/65404)
* Dev - Remove the unused settings editor package and related feature flag paths. [#65316](https://github.com/woocommerce/woocommerce/pull/65316)
* Dev - Saved for Later: split standalone block from the Shopper Collection variation; shared shopper-lists REST + iAPI domain remains reusable for future list-type blocks. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Dev - Saved for Later tests: reset the LegacyProxy `is_cart()` mock in a `finally` block so it can't leak into later tests sharing the same process. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Dev - Shopper lists: extract the shared row markup (image, name, price, remove badge, variation overlay) into a `ShopperListRenderer` helper and a `_shopper-lists/item` SCSS partial. Saved for Later now composes the helper; the same scaffold is what the upcoming Wishlist block will reuse. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Dev - Surface an "Update available" indicator on the email list page that links into the editor with a deep-link review parameter so merchants can see which transactional emails have customizations diverging from the current core template. [#64547](https://github.com/woocommerce/woocommerce/pull/64547)
* Dev - Switch `Taxonomy` type imports in product collection taxonomy controls from `@wordpress/core-data/src/entity-types` to the package's public root export. [#65386](https://github.com/woocommerce/woocommerce/pull/65386)
* Dev - Trap `wp_safe_redirect()` in `EmailActionControllerTests` so PHPUnit no longer silently halts mid-suite on the Back in Stock Notifications redirect tests. [#65207](https://github.com/woocommerce/woocommerce/pull/65207)
* Dev - Updates internal references to REST API documentation. [#64720](https://github.com/woocommerce/woocommerce/pull/64720)
* Dev - Use %i placeholder for table name in set_customer_first_order() SQL query. [#64435](https://github.com/woocommerce/woocommerce/pull/64435)
* Dev - Wire verification and confirmation emails for the Back in Stock Notifications alpha: dispatch the verify email when double opt-in is required on signup, dispatch the confirmation email on successful verification, add a rate-limited frontend resend endpoint, fix the admin Resend verification button to actually send, and apply standard UTM parameters to all notification email links. [#64348](https://github.com/woocommerce/woocommerce/pull/64348)
* Dev - Add a smoke test for the settings UI feature flag off state. [#65575](https://github.com/woocommerce/woocommerce/pull/65575)
* Dev - Add NOX onboarding critical-flow documentation and E2E coverage. [#65582](https://github.com/woocommerce/woocommerce/pull/65582)
* Dev - Move an inline comment to its own line in wc_customer_bought_product() to satisfy PHPCS (no functional change). [#65590](https://github.com/woocommerce/woocommerce/pull/65590)
* Dev - Surface Settings UI fallback through wc_doing_it_wrong. [#65587](https://github.com/woocommerce/woocommerce/pull/65587)
* Tweak - Add a new standalone wc-admin page at /mobile-app-login for merchants who already have the Woo mobile app installed and want to sign in via QR code scan. [#65111](https://github.com/woocommerce/woocommerce/pull/65111)
* Tweak - Address security review findings on the Task 7 QR login flow: add a database-backed atomic claim to /qr-login-scan to prevent two concurrent scans from both writing a fresh challenge (the loser's session_id was silently orphaned), bind /qr-login-session-status grant delivery to proof of token knowledge via a required token_hash parameter, and clear the plaintext token from React state once the scan is in. [#65111](https://github.com/woocommerce/woocommerce/pull/65111)
* Tweak - Align embedded admin notice padding with WordPress 7.0. [#64809](https://github.com/woocommerce/woocommerce/pull/64809)
* Tweak - Align order preview action button border, radius, and height with WordPress 7.0 secondary button style. [#64354](https://github.com/woocommerce/woocommerce/pull/64354)
* Tweak - Align Settings UI SDK embed styling with the settings card design. [#65567](https://github.com/woocommerce/woocommerce/pull/65567)
* Tweak - Align Woo admin primary text (#2c3338 → #1e1e1e / $gray-900) and placeholder text (#646970 → #757575 / $gray-700) colors with WordPress 7.0 admin gray scale, using SCSS tokens. [#64280](https://github.com/woocommerce/woocommerce/pull/64280)
* Tweak - Always show the QR direct login as the primary path in the mobile app modal, with the WordPress.com magic link available as a secondary CTA when the user has a linked WordPress.com account. [#65111](https://github.com/woocommerce/woocommerce/pull/65111)
* Tweak - Defer focus ring widths to WordPress's --wp-admin-border-width-focus variable so Woo's keyboard focus indicators adopt the density-responsive behavior (2px default, 1.5px retina) that WP core ships. [#64249](https://github.com/woocommerce/woocommerce/pull/64249)
* Tweak - Expose the wc-visual attribute type through WooCommerce feature settings instead of the wc-admin beta feature list. [#65169](https://github.com/woocommerce/woocommerce/pull/65169)
* Tweak - Fix misspelled words in data-stores.md ("hydates" → "hydrates") and style-guide.md ("understable" → "understandable"). [#64230](https://github.com/woocommerce/woocommerce/pull/64230)
* Tweak - Improve the error shown on the QR mobile-app login screen when application passwords are disabled: drop the "ask a site administrator" copy (the merchant hitting this flow is already an admin or shop manager) and replace it with an inline link to the WordPress application-passwords documentation so they can figure out which constant or plugin disabled them. [#65111](https://github.com/woocommerce/woocommerce/pull/65111)
* Tweak - Left-align the QR number-match cancel row and the modal FAQ paragraph so they match the rest of the "Sign into the app" step content. [#65111](https://github.com/woocommerce/woocommerce/pull/65111)
* Tweak - Link the meta box border-radius bridge CSS to its upstream Trac ticket so future maintainers know when to remove it. [#64454](https://github.com/woocommerce/woocommerce/pull/64454)
* Tweak - Log mailer failures from the QR sign-in notification email via `wc_get_logger()` instead of swallowing the exception silently, so a misconfigured mailer is observable rather than invisible. The exchange response is still never blocked by mail delivery. [#65111](https://github.com/woocommerce/woocommerce/pull/65111)
* Tweak - Move logic to init chips colors to the Chips inner block [#64887](https://github.com/woocommerce/woocommerce/pull/64887)
* Tweak - Order notes meta box: clarify note visibility (visibility label, dynamic CTA, customer-note header, email template link, customer-note delete confirmation) and modernize bubble styling for WP admin alignment. [#64476](https://github.com/woocommerce/woocommerce/pull/64476)
* Tweak - Polish the floating WC Admin header across Home and Settings: store icon for View store / Preview store, even icon spacing, fix the user-options click race, align title typography / colour / padding to WordPress design tokens, and remove a bunch of one-off overrides that were drifting from the rest of the wp-admin chrome. [#64885](https://github.com/woocommerce/woocommerce/pull/64885)
* Tweak - Polish the QR number-match cancel control: replace the single red link with a row that pairs descriptive text ("I don't recognise this device") with a secondary "Cancel login" button, and re-center the tile row so it visually aligns with the heading on both modal and standalone surfaces. [#65111](https://github.com/woocommerce/woocommerce/pull/65111)
* Tweak - Prevent widows in store alerts message body copy with text-wrap: pretty. [#64453](https://github.com/woocommerce/woocommerce/pull/64453)
* Tweak - Promote the post-sign-in confirmation to a third step in the mobile-app modal flow. Once the QR code is exchanged the modal advances past the magic-link section and FAQ to a dedicated "Signed in successfully" step with a larger heading, the device summary, and a primary "Revoke access" button that opens a confirmation dialog before deleting the Application Password. [#65111](https://github.com/woocommerce/woocommerce/pull/65111)
* Tweak - Refresh the floating WC Admin header to consolidate Screen options, Help, Activity, and Finish setup into a single icon-only tab group, removing the duplicate page title that previously appeared on top of wp-admin's own H1 on classic admin screens. [#64643](https://github.com/woocommerce/woocommerce/pull/64643)
* Tweak - Remove Facebook for WooCommerce from the onboarding wizard plugin rotation. [#64562](https://github.com/woocommerce/woocommerce/pull/64562)
* Tweak - Remove the disabled product editor template system feature flag. [#65387](https://github.com/woocommerce/woocommerce/pull/65387)
* Tweak - Remove the disabled product pre-publish modal feature flag. [#65383](https://github.com/woocommerce/woocommerce/pull/65383)
* Tweak - Remove the obsolete 'Product reviews have moved!' notice from the Comments screen. [#65110](https://github.com/woocommerce/woocommerce/pull/65110)
* Tweak - Reorder Product Data tabs to put Variations above Attributes when the product variations classic redesign feature is enabled. [#65108](https://github.com/woocommerce/woocommerce/pull/65108)
* Tweak - Replace hardcoded admin blue colors with WP admin theme color CSS custom properties so Woo inherits the active color scheme [#64196](https://github.com/woocommerce/woocommerce/pull/64196)
* Tweak - Shopper Collection: declare the atomic product-image, product-price and product-button stylesheets as style dependencies so their CSS is enqueued on the frontend whenever the block renders, instead of relying on duplicated/missing rules. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Tweak - Shopper Collection: drop the redundant editor stylesheet and rely on the frontend one for both the editor and the frontend. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Tweak - Shopper Collection: hide the empty-state message until items have appeared in the list during the current page session. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Tweak - Shopper Collection: own the grid layout (custom `columnCount` attribute + `.columns-N` class) and ship Product-Collection-equivalent responsive behavior. Items now reflow to fewer columns on narrow viewports instead of shrinking uniformly. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Tweak - Shopper Collection: surface mutation errors via the store-notices banner instead of an in-list error row, and disable the affected row's controls while the request is in flight. [#65263](https://github.com/woocommerce/woocommerce/pull/65263)
* Tweak - Show a clearer, actionable message when a plugin install fails during the upgrader step. [#64397](https://github.com/woocommerce/woocommerce/pull/64397)
* Tweak - Show parent gallery extras alongside single-image variations in the Product Gallery block. [#65465](https://github.com/woocommerce/woocommerce/pull/65465)
* Tweak - Tokenize hardcoded grays across Woo admin React client. Remove redundant onboarding checkbox and text input border overrides (inherit Gutenberg's WP 7.0 defaults for unchecked, checked, and focused states), darken marketplace promo text for improved readability, and tokenize remaining scattered gray hexes. [#64276](https://github.com/woocommerce/woocommerce/pull/64276)
* Tweak - Update destructive action link color on API Keys and Webhooks settings pages to match WordPress 7.0's updated error red. [#64203](https://github.com/woocommerce/woocommerce/pull/64203)
* Tweak - Update destructive action link color on Shipping Zone, Shipping Class, Shipping Method, and Shipping Provider list tables to match WordPress 7.0's updated destructive red. [#64204](https://github.com/woocommerce/woocommerce/pull/64204)
* Tweak - Update the useQRLoginToken admin hook to handle the capability-based permission errors surfaced by the mobile-app QR login endpoint. [#65111](https://github.com/woocommerce/woocommerce/pull/65111)
* Tweak - Use the NOTICE log level (instead of INFO) for transactional email entries with status `disabled` or `skipped`, so admins can distinguish "normal but significant" non-send outcomes from routine successful sends. [#64859](https://github.com/woocommerce/woocommerce/pull/64859)
* Performance - Enhance the efficiency and reliability of stock reservation processes during checkout. [#64475](https://github.com/woocommerce/woocommerce/pull/64475)
* Performance - Improve order edit page performance by resolving milestone easter egg orders with a bounded HPOS ID query instead of hydrating order objects. [#65258](https://github.com/woocommerce/woocommerce/pull/65258)
* Performance - Optimized the order and customer save workflows during checkout using StoreAPI. [#64392](https://github.com/woocommerce/woocommerce/pull/64392)
* Performance - Optimize slow SQL and high CPU usage by DB in product filter utility. [#65119](https://github.com/woocommerce/woocommerce/pull/65119)
* Performance - Reduce database queries when listing product categories or brands via REST, and when rendering the Product Categories List block with images, by priming thumbnail attachment caches. [#65320](https://github.com/woocommerce/woocommerce/pull/65320)
* Performance - Reduce database queries when listing product variations and products via the REST API by priming attachment post caches before iterating over images. [#65271](https://github.com/woocommerce/woocommerce/pull/65271)
* Performance - Reduced the frequency of wc_get_product and wc_get_order calls during checkout to improve performance. [#64418](https://github.com/woocommerce/woocommerce/pull/64418)
* Performance - Reduced the number of SQL queries on the shop, cart, and checkout pages in the store, as well as on the products page in the admin area, by adding missing cache priming. [#65276](https://github.com/woocommerce/woocommerce/pull/65276)
* Performance - Review and optimize the SQL queries used in product filters to improve performance. [#65141](https://github.com/woocommerce/woocommerce/pull/65141)
* Performance - Updated order line item product caching to leverage the product object caching feature. [#65508](https://github.com/woocommerce/woocommerce/pull/65508)
* Enhancement - Add ariaLabel to attribute, status, and taxonomy product filter items for improved screen reader accessibility [#64693](https://github.com/woocommerce/woocommerce/pull/64693)
* Enhancement - Better UX when WooCommerce mobile-app sign-in is unavailable because application passwords are disabled. wc-admin now probes a new `/qr-login-availability` REST endpoint up-front and renders a permanently-disabled card (with a "Why am I seeing this?" expander listing typical causes) instead of optimistically mounting the QR component, spinning, and only then showing a generic error. The structural `application_passwords_unavailable` ERROR-state suppresses the "Try again" retry button since retrying cannot change the site's AP configuration. [#65111](https://github.com/woocommerce/woocommerce/pull/65111)
* Enhancement - Email Logger: add a private order note for every transactional email send or failure tied to a WC_Order, making the event visible directly on the order admin page. [#65247](https://github.com/woocommerce/woocommerce/pull/65247)
* Enhancement - Migrate the Catalog Sorting block to use Interactivity API [#62854](https://github.com/woocommerce/woocommerce/pull/62854)
* Enhancement - Store API: defer checkout draft order creation to place-order time, eliminating orphaned `wc-checkout-draft` rows from page views and form interactions. Adds `woocommerce_store_api_checkout_update_draft` action for PATCH-time observation and `woocommerce_store_api_checkout_order_created` action when the order is first materialised. [#64155](https://github.com/woocommerce/woocommerce/pull/64155)
* Enhancement - Track transactional email outcomes: log when emails are disabled (is_enabled() false) or skipped (no recipient) in addition to the existing send-attempt logging. Adds a defensive instanceof guard in WC_Email_New_Order::trigger() before updating order meta on a successful send. [#64859](https://github.com/woocommerce/woocommerce/pull/64859)
* Enhancement - Use the customer's first name (billing first name, falling back to WordPress first name, then username) in the greeting of the new account and reset password emails. [#65270](https://github.com/woocommerce/woocommerce/pull/65270)


[See changelog for all versions](https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/changelog.txt).