Adobe Commerce 2.4.3 Release Notes

Adobe Commerce 2.4.3 introduces enhancements to performance and security plus significant platform improvements. Security enhancements include expansion of reCAPTCHA coverage and inclusion of built-in rate limiting. Core composer dependencies and third-party libraries have been upgraded to the latest versions that are compatible with PHP 8.x.

This release includes over 370 new fixes to core code and 33 security enhancements. All known issues identified in the Adobe Commerce 2.4.2 release notes have been fixed in this release.

Quarterly releases may contain backward-incompatible changes (BIC). Adobe Commerce 2.4.3 contains minor backward-incompatible changes. To review minor backward-incompatible changes, see BIC reference. (Major backward-incompatible issues are described in BIC highlights. Not all releases introduce major BICs.)

See Adobe Commerce 2.4.2-p2 release notes for information about Adobe Commerce 2.4.2-p2.

Other release information

Although code for these features is bundled with quarterly releases of the Magento core code, several of these projects (for example, B2B, Page Builder, and Progressive Web Applications (PWA) Studio) are also released independently. Bug fixes for these projects are documented in the separate, project-specific release information that is available in the documentation for each project.

Apply MC-43048__set_rate_limits__2.4.3.patch to address issue with API rate limiting

This hotfix provides a solution for the issue where Web APIs cannot process requests that contain more than 20 items in an array. This issue affects deployments running Magento Open Source 2.4.3, Adobe Commerce 2.4.3, or Magento 2.3.7-p1. Built-in rate limiting was added to these releases to prevent denial-of-service (DoS) attacks, and the default maximum was set to 20. This patch reverts the default limit to a higher value. If you suspect that your store is experiencing a DoS attack, Adobe recommends lowering the default input limits to a lower value to restrict the number of resources that can be requested. See the Web API unable to process requests with more than 20 items in array Knowledge Base article.

Apply AC-384__Fix_Incompatible_PHP_Method__2.4.3_ce.patch to address PHP fatal error on upgrade

The following fatal error can occur during upgrade to Adobe Commerce 2.4.3:

1
PHP Fatal error: Uncaught Error: Call to undefined function Magento\Framework\Filesystem\Directory\str_contains() in [...]/magento/vendor/magento/framework/Filesystem/Directory/DenyListPathValidator.php:74

This error results from the use of the str_contains function, which is an PHP 8.x function. Adobe Commerce 2.4.3 does not support PHP 8.x. This hotfix replaces this function with a supported PHP 7.x function. See the Adobe Commerce upgrade 2.4.3, 2.3.7-p1 PHP Fatal error Hotfix Knowledge Base article.

Highlights

Look for the following highlights in this release.

Substantial security enhancements

This release includes 33 security fixes and platform security improvements. Many of these security fixes have been backported to Magento 2.4.2-p2 and Magento 2.3.7-p1.

Thirty-three security enhancements that help close remote code execution (RCE) and cross-site scripting (XSS) vulnerabilities

No confirmed attacks related to these issues have occurred to date. However, certain vulnerabilities can potentially be exploited to access customer information or take over administrator sessions. Most of these issues require that an attacker first obtains access to the Admin. As a result, we remind you to take all necessary steps to protect your Admin, including but not limited to these efforts: IP allowlisting, two-factor authentication, use of a VPN, the use of a unique location rather than /admin, and good password hygiene. See Adobe Security Bulletin for a discussion of these fixed issues.

Additional security enhancements

Security improvements for this release improve compliance with the latest security best practices, including:

  • A new Composer plugin helps prevent dependency confusion and identifies malicious packages with the same names as internal packages on the public package repository. See the Adobe Releases New Composer Plugin with Magento 2.4.3 Release blog post.

  • Rate limiting is now built in to Magento APIs to prevent denial-of-service (DoS) attacks. Web APIs now impose restrictions on the size or number of resources (the default maximum is set to 20 and can be configured to a different value based on business need) that can be requested by a client. See Rate limiting for information about configuring these restrictions.

  • ReCAPTCHA coverage has been extended to include:

    • Web APIs that have corresponding HTML pages are covered through ReCAPTCHA. (This excludes web APIs that are accessed by integrations.) ReCAPTCHA coverage protects endpoints from spam attacks. When web APIs are accessed by a third-party integration service that uses OAuth, ReCAPTCHA is disabled.

    • The Place Order storefront page and payment-related web APIs. ReCAPTCHA protection for these pages is disabled by default and can be enabled from the Admin. This coverage adds an anti-brute force mechanism to protect stores from carding attacks.

Starting with the release of Adobe Commerce 2.3.2, we will assign and publish indexed Common Vulnerabilities and Exposures (CVE) numbers with each security bug reported to us by external parties. This allows users to more easily identify unaddressed vulnerabilities in their deployment. You can learn more about CVE identifiers at CVE.

Infrastructure improvements

This release contains enhancements that improve the quality of the framework and the following functional areas:

  • Customer Account

  • Catalog

  • CMS

  • OMS

  • Import/Export

  • Promotions and Targeting

  • Cart and Checkout

  • B2B

  • Staging and Preview

PayPal Pay Later is now supported in deployments that include PayPal. This feature allows shoppers to pay for an order in bi-weekly installments instead of paying the full amount at time of purchase.

New use_application_lock indexing mode. The use_application_lock mode lets you enable re-indexing through either the use of environment variables or by configuring the app/etc/env.php file. You no longer need to manually reset the indexer after failure with this mode enabled. See Using application lock mode for reindex processes.

Platform enhancements

Magento 2.4.3 is not yet compatible with PHP 8.x, but the following platform upgrades bring us closer to future compatibility with PHP 8.x.

  • Core Composer dependencies and third-party libraries have been upgraded to the latest versions that are compatible with PHP 8.x.

  • The KnockoutJS library has been upgraded to v3.5.1 (the latest version).

  • The deprecated TinyMCE v3 library has been removed. The Magento_Tinymce3Banner module and MFTF tests related to TinyMCE v3.x have been removed from Adobe Commerce.

  • Magento 2.4.3 has been tested and confirmed to be compatible with Redis 6.0.12. (Magento 2.4.x remains compatible with Redis 5.x.)

  • Laminas library dependencies have been upgraded to PHP 8.x-compatible versions. Some redundant dependencies have been removed from the composer.json file. Adobe Commerce 2.4.3 uses Laminas 3.4.0.

Performance enhancements

This release includes enhancements that decrease indexation time for Product Price and Catalog Rule indexers. Merchants can now exclude a website from a customer group or shared catalog, which reduces the number of records for indexing and improves indexing times.

Live Search powered by Adobe Sensei delivers an intuitive search experience by using artificial intelligence and machine-learning algorithms to perform a deep analysis of aggregated visitor data. See Live Search Release Notes.

GraphQL

This release adds GraphQL support for the following features:

See the GraphQL Developer Guide for details on these enhancements.

B2B

Magento 2.4.3 introduces B2B v1.3.2. This release includes multiple bug fixes. See B2B Release Notes.

Page Builder

Page Builder is now available as a bundled extension in Magento Open Source. It is now the default content editing tool for Adobe Commerce 2.4.3 and Magento Open Source 2.4.3. It can replace the WYSIWG editor with any third-party module.

Page Builder replaces the TinyMCE editor in the following Admin areas:

  • CMS Page
  • CMS Block
  • Category Description
  • Product Description

All the content created in TinyMCE has been migrated into Page Builder as HTML.

PWA Studio

For information about enhancements and bug fixes, see PWA Studio releases. See Magento compatibility for a list of PWA Studio versions and their compatible Magento core versions.

Upgrade Compatibility Tool

The scope of the Upgrade Compatibility Tool has been expanded based on feedback from the community. Join our #upgrade-compatibility-tool Slack channel to get support from the Adobe product team and the community, as well as to help guide the future direction of the tool.

Cloud managed services updates

This release includes enhancements to our support for Amazon Simple Storage Service (AWS S3) and Amazon Aurora cloud managed services. It provides certified support for AWS ElastiCache, AWS ElasticSearch, and AWS Managed Queues (Rabbit MQ). (We have tested the functionality, performance, and integration of these services with Adobe Commerce.)

Adobe Stock Integration

This release includes Adobe Stock Integration v2.1.1.

Vendor Developed Extensions

See the following topics for updates on features and changes for this release:

Fixed issues

We have fixed hundreds of issues in the Magento 2.4.3 core code.

Installation, upgrade, deployment

  • The bin/magento setup:db:status command now returns a message indicating that everything is up-to-date after a successful upgrade. Previously, Magento displayed this error: Declarative Schema is not up to date.
  • Configuration values are now preserved on form reload when the creation of a new configurable product fails. Previously, values were lost during form reload, and Magento displayed this error: The value specified in the URL Key field would generate a URL that already exists. GitHub-32102
  • Magento no longer throws an exception when you run bin/magento setup:upgrade to upgrade from a Magento Open Source deployment with Redis to Adobe Commerce.
  • Previously created cart price rules are now displayed on the Content Staging dashboard page after a deployment is upgraded from Magento Open Source to Adobe Commerce.
  • Magento deployments running on Galera Cluster now support more customers. GitHub-31038
  • Administrators can now successfully log in to a deployment when Magento has been installed with either the —use-rewrites=0 option or with web/seo/use_rewrites set to 0 in core_config_data_table. GitHub-32100
  • Updated sortOrder load for AsyncCssPlugin. Magento now loads AsyncCssPlugin before JsFooterPlugin. GitHub-30882
  • Magento\Config\Model\Config\PathValidator now checks display path to determine if an element exists, and if it has a config path, uses the config.xml path instead for validation. GitHub-27678
  • Compiling Less files with Grunt or by server-side compilation now yields the same results. Previously. .abs- styles, which extends other .abs- styles in _extends.less, were not output properly when compiled with Grunt. This resulted in differences between production and development deployments. GitHub-7231

AdminGWS

  • Admin GWS now uses int values for the website_id SQL condition in Admin collections for administrators with custom permissions.

Adobe Stock Integration

  • Magento now displays an informative message and a link to the Admin Stores > Configuration > Advanced > System page on the Search for Adobe Stock page when API Key (Client ID) and Client Secret are not set. Previously, Magento displayed this error: We couldn't find any records and no link.

Backend

  • Administrators with restricted access (for example, who are assigned access to one website only) can no longer edit categories set to Global scope.
  • The generated System report (System > Support > System Report) is now rendered correctly. Previously, report content was misaligned.
  • Magento now turns off validation on the Price field as expected when the Dynamic price setting is enabled during bundle product creation. Previously, Magento threw a validation error when you removed a value from the Price field when the Dynamic price setting was enabled. GitHub-26214
  • Infinite redirects no longer occur when the Admin URL differs from the default website URL in deployments where Magento is configured to be accessible from two URLs.

Bundle products

  • You can now use the addProductsToCart mutation to add a bundle product with more than one checkbox option to a cart.
  • Price indexing of bundle products is now executed using temporary tables, which avoids locking database tables. Previously, Magento used physical tables, which resulted in locked tables.
  • A bundle item’s price can now be set to 0.00. Previously, when you returned to the edit page after setting the price to 0.00, the price returned to its default value. GitHub-32383
  • Order details for orders that contain bundle products now show the correct price for the bundle products if the price were changed before the order was placed.
  • Bundle product stock status is now updated based on the stock status of its child products. Previously, bundle products were shown as out-of-stock when one option was removed from the product, and the bundle product had two options with the same SKU.
  • An administrator can now change the value for a bundle product’s Shipment Type attribute after it has been moved to a different attribute group. Previously, this attribute was always saved with a Together value if it were moved to an attribute group other than the default group in the attribute set.
  • The GraphQL setGuestEmailOnCart mutation now correctly updates guest email. Previously, the quote and quote address tables were not updated.
  • Adding, removing, or updating a child product to a bundle product through REST API calls now triggers re-indexing as expected. Previously, these actions did not trigger re-indexing, and as a result, the bundle product did not change its stock status until manual re-indexing was performed.
  • Magento now displays the correct price range for bundle products with tier prices. GitHub-30284
  • Magento now displays the same total price as expected on the shopping cart page and in the shipping step of the checkout workflow after the price of a bundle option has changed.
  • You can now successfully configure a bundle product by accessing it from a customer shopping cart. Previously, the Configure Product page never completely loaded, and you could not save your settings.
  • Merchants can now assign a unique price for a bundle product on each store view of a multistore deployment. Website-specific prices are saved in the catalog_product_bundle_selection_price table. Previously, Magento did not base a bundle product’s price on website scope even when Stores > Configuration > Catalog > Catalog > Price > Catalog Price Scope was set to Website. No website-specific prices were saved in catalog_product_bundle_selection_price. GitHub-12584
  • Invoices for bundle products now display the correct quantity for the associated simple products when Dynamic Pricing is disabled. Previously, simple products associated with the bundle product had the quantity of the parent product, not the bundle product). GitHub-30802
  • The updateProductsInWishlist mutation now successfully updates items that belong to a bundle product in a wish list. Previously, instead of updating the wish list item, this mutation deleted the item and created a new one, which changed the item ID.
  • You can now set the required_options and has_options bundle attributes as expected while creating or updating a bundle product using the POST /V1/product/:sku endpoint. Previously, these custom attributes were set to 0 (zero) despite efforts to set it to 1 (one).
  • Bundle product data that was previously missing is now included in the staging process. This resolves inconsistencies in product behavior when shoppers purchased a bundle product from the product listing page versus adding it directly from a product page.

Cache

  • The varnish6.vcl file has been updated to bypass caching of the customer page.

CAPTCHA

  • CAPTCHA now correctly validates data provided by a shopper, and CAPTCHA fields are now displayed as expected after a shopper’s multiple unsuccessful attempts to check out with PayPal Payflow Pro.
  • CAPTCHA validation no longer fails randomly on the payment page of the checkout workflow.
  • Magento now displays CAPTCHA fields as expected after you exceed the number of failed completion attempts. Previously, although Magento prompted you to attempt the CAPTCHA challenge again, it did not display the CAPTCHA fields.
  • CAPTCHA now works as expected on the checkout page. Previously, after a shopper correctly answered a CAPTCHA challenge, the loader on the checkout page never completed, and Magento displayed this error: captchaData[formId] is undefined. (This error occurred only when the shopper used the same browser from which they had previously accessed a deployment running Magento 2.3.5-p1.)
  • _.isEmpty() checks in the defaultCaptcha.js file now complete successfully. Previously, these checks did not complete, and as result, the checkout page failed to load after upgrade. GitHub-31641

Cart and checkout

  • Magento now takes into account locale-specific decimal locators when converting and updating product quantity in the cart.
  • Orders no longer omit a provided customer name with a shipping address. Previously, names were omitted because the same_as_billing flag was not saved in the database.
  • Links to gift registries now persist as expected when you edit a product in the shopping cart. Previously, these links disappeared when you clicked the Update Cart button.
  • All queue messages for consumer quoteItemCleaner now change their status to complete as expected after the deletion of several products. Previously, only one message for this consumer changed their status to complete, and the rest changed status to in progress.
  • Magento now displays the Terms and Conditions validation message in the relevant block only when a shopper clicks the Place Order button. Previously, Magento displayed this message in the Apply Discount Code block whenever a shopper changed payment method in the checkout workflow: The order wasn't placed. First, agree to the terms and conditions, then try placing your order again.
  • You are now redirected to the checkout page as expected after adding a bundle product to the cart from a Schedule Update preview and clicking the cart. GitHub-447
  • Shoppers are now redirected to the shopping cart page instead of the product page when they try to update the mini cart for an order that contains deleted items. Previously, shoppers were redirected to the product page.
  • Magento now discards changes to the billing address form on the checkout payment step if the shopper fails to click the Update button and returned to the shipping step.
  • Magento now displays an informative error message and does not update product quantity when a shopper adds an invalid product quantity and clicks the Update items and Quantities button on the Manage Shopping cart page. Previously, Magento upgraded the product quantity and did not display an error message. GitHub-459
  • Products with a customizable option (File) now include active links as expected throughout the multi-shipping checkout process. Previously, this link was missing. GitHub-31095
  • The Admin shopping cart now displays product prices in correct currencies for stores that support multiple currencies. Previously, prices were converted to the specified currency more than once — first, when products were added to the cart from the storefront, and then again when the order was subsequently rendered on the Admin.
  • Magento now empties the shopping cart as expected after an administrator completes an order from the Admin that was created by a shopper on the storefront. Previously, when the customer logged back in after the administrator completed the order, the storefront cart still contained order contents. GitHub-30262
  • Shoppers can now add a product to their cart whose Minimum Advertised Price (MAP) exceeds its regular product price.
  • Shoppers can now successfully change their billing address from the checkout workflow when checking out with multiple addresses.
  • All paid payment transactions created by guests are now saved to the database and visible in the Admin as expected. Previously, only a small subset of concurrent orders were saved in the database, and most orders were lost due to timeouts that resulted from database locks. GitHub-25862
  • Magento now correctly displays inline welcome messages that contain special characters when a guest places a product in the mini cart. Previously, Magento did not add the product to the mini cart or display the welcome message. GitHub-32250
  • The shipping page of the checkout workflow now successfully loads when in-store delivery is enabled. Previously, Magento threw a JavaScript error and the shipping checkout page did not completely render.
  • Added the itemResolvers argument to the catalog di.xml file. As a result, checkout is no longer broken if configurable and grouped product modules are disabled. GitHub-30860
  • Magento now displays the radio buttons in the Payment & Shipping Information section as expected during the Admin re-order workflow. GitHub-30257
  • Magento now correctly applies cart price rules with a cart-level fixed discount when the cart contains a bundle product with multiple options. Previously, the cart price rule was not completely applied to the order. GitHub-30952
  • The Add to cart button on the category list view now works as expected. GitHub-32232
  • You can now use POST /V1/carts/mine/items to add a custom quantity of grouped products to a cart. GitHub-26909
  • Magento no longer populates the billing address area of the checkout workflow with the shipping address. Previously, when the State/Province field for the billing address was empty, and shipping and billing addresses differed, Magento populated the billing address State/Province field with information from the shipping address. GitHub-31608

Catalog

  • Mass update of Enable Qty Increments and Qty Increments attributes now works as expected. GitHub-29544
  • You can now successfully duplicate a shared catalog that contains numeric-only SKUs. Previously, Magento threw an error when you tried to duplicate a shared catalog because the \Magento\Catalog\Model\ProductIdLocator class did not work correctly with numeric-only SKUs.
  • Magento no longer throws a JavaScript error after you enable recent products synchronization with the Admin. Previously, Magento displayed this JavaScript error: Cannot read property 'status' of undefined.
  • Custom theme layout updates are now applied as expected. Previously, custom theme layout updates were ignored.
  • The product category cache is now cleared as expected by cron during indexer_update_all_views execution. Previously, product counts on the Category page after re-indexing were incorrect.
  • Attribute values now remain unchanged when an attribute is not specified in a product update REST API request for a store view. Previously, if an attribute were not specified, Magento reset the attribute value to its default scope value.
  • The Admin products grid (Admin Catalog > Products) now displays the correct product count when products are filtered by SKU.
  • Magento now displays accurate stock status when a product is added to a CMS page when Category Permissions are enabled and prevents the display of price for the specified customer’s group. Previously, all products were shown as out-of-stock regardless of the real stock status.
  • The Advanced Pricing Customer Group Price block price input field now has a minimum width of five digits. Previously, only two symbols were visible in this field on low resolution displays.
  • Magento now successfully deletes a product media image after deleting a product. Previously, the product media image remained in the folder after successful deletion of the product.
  • Page layout now updates as expected when you create or edit a product in the Admin and then create a Schedule Design Update. GitHub-32007
  • A custom product attribute with a value of zero can now be successfully saved as blank. Previously, Magento did not update this value to blank.
  • Custom category layout update files now apply to products as expected. Previously, the update file handle (catalog_category_view_*) did not match the product handle. GitHub-27285
  • Sorting has been disabled for the Fixed Product Tax (FPT) column of the Admin products list. Previously, the Products page could not be reloaded after the FPT column had been sorted.
  • The Page Builder products widget preview now works as expected in a multi-website deployment when matching products have a different price on each website.
  • Sorting by position on product search using GET /rest/V1/products/?searchCriteria[filterGroups] now works as expected. Previously, product collection did not have a field position value for sorting. GitHub-31591
  • Admin users can now see double spaces in the Name and SKU fields in the product grid. Previously, Magento collapsed multiple spaces into a single space.
  • Products are now displayed as out-of-stock on the storefront when salable quantity on the Admin is 0. Previously, these products were listed as in stock on the storefront, and Magento displayed an active Add to cart button. GitHub-31117
  • Administrators can now add products with customizable options (File) to the Items Ordered grid from the Shopping Cart section (Customer’s Activities column) of the Admin Customer page. Previously, Magento did not add the item to the list because the value was not formatted correctly before being inserted into \Magento\Catalog\Model\Product\Type\AbstractType::_prepareOptions.
  • Magento no longer prompts shoppers to select a product option for a bundled product that has one option only.
  • Magento now displays all subcategories in layout updates (anchor and non-anchor categories) during creation of a new widget.
  • The product query no longer overwrites default values for all store views in a multi-store deployment when a product name is updated for one store view only. GitHub-31083
  • Magento updates the total page count as expected when you change the per page value of the Admin Related Products, Up-Sells, and Cross-Sells list. GitHub-31059
  • Administrators can now add products with two or more customizable options (File) to an order by SKU.
  • Magento no longer throws an error when an administrator with restricted permissions adds a Product widget to a CMS page in the Admin. Previously, Magento threw this error when the administrator clicked the Save button: We are sorry, an error has occurred while generating the content.
  • Product detail pages now open with the date customizable option populated with the date from the previous order when Use JavaScript Calendar is enabled. The custom date option value resolver now falls back to an alternative format if the value is not formatted based on the current configuration. Previously, the custom date option value was empty.
  • Magento now displays only one error in the cart when the product is out-of-stock. Previously, Magento displayed redundant messages. GitHub-27469
  • Administrators can now add a product with a customizable option (File) to an order by SKU. GitHub-30285
  • You can now save a product and price without specifying type_id. GitHub-13639
  • Group products are now available on the storefront as expected when a REST PUT /V1/products/:sku/links request is used to associate a new child product with a new group product. Previously, products were not correctly indexed after running bin/magento cron:run.
  • You can no longer create a product with a NULL SKU value. Previously, you could create a product without a SKU value through a custom importer or directly in the database, but when you tried to edit it from the Admin, Magento threw an error. GitHub-27411, GitHub-32525
  • Adding required custom options to a simple product no longer removes it from parent composite products without warning. Magento now displays an informative warning and does not save the product. Previously, Magento saved the product changes and did not display a warning. GitHub-30492

Catalog rule

  • The products query now returns the current values when a catalog price rule applies to an item. GitHub-26738
  • Temporary tables that begin with catalogrule_product__temp are now deleted as expected when re-indexing fails after a cart or catalog rule expires, is disabled, or becomes inactive. GitHub-22273
  • Time zones are now applied in the same way in \Magento\CatalogRule\Model\Indexer\IndexBuilder::reindexById and \Magento\CatalogRule\Model\Indexer\IndexBuilder::reindexByIds. GitHub-29549

CMS content

  • Large images are now resized as expected during upload when the Enable Frontend Resize configuration setting is enabled.
  • Fixed the error handling for the CMS Page save controller. Previously, when an Error object was thrown on the cms_page_prepare_save event, Magento passed this object to the addExceptionMessage function, breaking its contract because this function expects an Exception. This was resolved by adding an error message using the addErrorMessage function. GitHub-30149
  • You can now assign a new page to multiple nodes from the CMS Edit page Hierarchy tab. Previously, a unique constraint violation occurred when you tried to assign the page to a node. GitHub-363

Configurable products

  • Magento no longer duplicates product thumbnails in a product’s image gallery when you click on a product’s configurable options.
  • The configuration pop-up that Magento displays when you are editing a configurable product from a wish list now closes as expected when you click the OK button.
  • Magento now correctly generates invoices for orders that contain only one configurable product. GitHub-31143
  • Shoppers can now add configurable products to their cart from a non-default store view. Previously, when the shopper on a non-default store view tried to add a configurable product, Magento displayed this error: Could not add item to cart. Please check required options and try again. GitHub-31660

Content security Policy CSP)

  • Content Security Policy now supports the loading of base64-encoded images and fonts through data: scheme.

cron

  • Cron clean up queries have been refactored to reduce or eliminate the following performance issues: cron jobs remaining stuck in a pending state, increasingly slow MySQL queries, and an increase in CPU usage. GitHub-26507
  • cronjobs that have been in status running for more than 24 hours are now automatically changed to status error. As a result, a new instance of that job can run again and you do not need to manually change job status when a job incorrectly remains set to status running. Previously, if a cronjob were stuck in status running, Magento prevented new instances of the same job from starting, and you had to manually change job status. GitHub-8933
  • cron jobs now complete as expected and no longer throw this serialization error: [Magento\Framework\DB\Adapter\DeadlockException]SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction, query was: DELETE FROM cron_schedule WHERE (status = 'missed') AND (job_code in ('indexer_reindex_all_invalid', 'indexer_update_all_views', 'indexer_clean_all_changelogs')) AND (created_at < '2018-09-28 18:32:28’). GitHub-18409
  • indexer_update_all_views cron jobs now run as expected after a previous failure. The failed run is marked as a failure in the cron_schedule schedule, and the subsequent run does not automatically fail. Previously, the cron_schedule table filled with pending jobs, and indexer_update_all_views cron job did not run. GitHub-23054
  • cron deadlocks no longer occur as a result of cron trying to set a lock in large deployments where groups overlapped. GitHub-8933
  • cron deadlocks no longer occur on the cron_schedule table after only a few cron jobs have run. GitHub-22438

Custom customer attributes

  • The State field on the storefront Customer Account address book is now loaded as and remains a drop-down page element. The Submit button is now disabled until all page elements have been completely loaded. Previously, Magento loaded this field as a textbox before rendering it as a drop-down element, and shoppers could enter and save values in the text field, which later caused an error during checkout.
  • Magento now correctly displays custom customer address attributes on both storefront and Admin order pages. Previously, the selected option of the dropdown attribute was missing from the Address information section, and the value of the input attribute contained the attribute code. GitHub-508
  • Magento no longer throws an error when you save a customer address attribute with a file attachment in the Admin Customer address field when uploading files. This occurred due to a missing return statement in the controller action. Previously, Magento threw this error: Something went wrong while saving the file.
  • REST GET Cart API calls now return correct custom attribute values for billing and shipping addresses. Previously, custom address attributes were displayed incorrectly in the order details page in the My account storefront page and in the Admin.
  • Magento now successfully handles files that contains customer address attributes with input type file (attachment). Previously, Magento threw this error during upload of the attached file: Something went wrong while saving the file.

Customer

  • Store credit email now takes into account the selected scope and is sent from the correct email address.
  • Filtering by account creation date now produces results that comply with configured timezone settings and that capture all relevant created accounts.
  • The customer grid filter now uses a correct website option for a restricted user if the data was previously cached. Previously, the customer grid filter retrieved website parameters from cache and included incorrect data for restricted users.
  • Magento no longer throws an exception on the Admin Customers page when one website is deleted in a multi-website deployment. Previously, when an administrator tried to access the comprehensive customers list, Magento did not display all customers and displayed this error: The website with id 2 that was requested wasn't found. Verify the website and try again.
  • Administrators with permission can now re-assign customers to different websites from the customer’s Account Information tab.
  • You can now upload a file successfully when creating a customer address attribute with an input type of (File). Previously, when you tried to upload and save a file, Magento threw this error: Something went wrong while saving the file.

Customer segment

  • Magento now displays related products based on customer segments on the storefront as expected. Previously, Magento did not display this section when a related products rule was created for specific customer segments.
  • Dynamic blocks are now shown for registered customers in their shopping carts when the corresponding customer segment is applied for both guests and registered customers. Previously, Magento displayed the block only for guests.
  • Customer segments are now automatically updated after an order is placed from the Admin. Previously, after creating an Admin order, the Admin user had to manually refresh related segment data by navigating to related customer segments and click the Refresh Segment Data button.
  • Magento now displays dynamic blocks in the shopping cart for all customers in the relevant customer segments. Previously, guests did not see a block even when the customer segment included both guests and registered customers.
  • Database performance issues that result from customer segmentation rules using the Product was Ordered condition have been resolved.
  • A customer segment event observer for REST/SOAP API has been added. As a result, customer segments are now automatically updated as expected if the criteria defined in the segments are matched when orders are placed through the REST/SOAP API.
  • A customer segment events processor has been added for GraphQL requests. Previously, cart price rule discounts were not applied to the shopping cart when a customer segment was used in a cart price rule condition. GitHub-371

Directory

  • Magento no longer throws an exception when a shopper enters an invalid zip/postal code during the shipping section of the checkout workflow. GitHub-23371

Downloadable

  • Magento now displays links to downloadable products in the New Order email when the order contains both a downloadable product and a configurable product with a downloadable option. Previously, Magento displayed the link to the stand-alone downloadable product but not the link to the configurable product with a downloadable option.

Dynamic block (formerly banner)

  • Dynamic blocks are now displayed only on the specified page. Previously, Magento displayed all banners that were assigned to the widget on all pages if no dynamic blocks were specified.
  • You can now save dynamic blocks with empty content.

EAV

  • Customer address attribute date values are now saved in four-digit format instead of two-digit format.

Email

  • The password reset link on the Admin reset password page now works as expected. Previously, when a custom template was used for the reset admin password page, Magento displayed this message when an administrator clicked the link inside the email: Your password reset link has expired. This occurred because the custom email template contained the wrong variable for the user ID.
  • Sending customer email from the Admin now works properly when enabled at the store-view level. Previously, Magento did not send customer emails when email notification settings were enabled at the store-view level but not the global level.
  • Magento now sends email as expected in multi-site deployments where not all websites have enabled asynchronous email sending. Previously, if at least one website had this setting disabled, email was not sent from any website, even when enabled. Invoice, Shipment, and Credit Memo emails had similar issues. However, Order Comments, Invoice Comments, Shipment Comments, and Credit Memo Comments emails were sent successfully. GitHub-31950
  • The email message that Magento sends when you share a gift registry from the Admin now contains a valid link to the registry location. Previously, taking this link resulted in a 404 error. GitHub-504
  • Invoices and invoice PDFs now include the same prices for bundle products as expected. Previously, invoice PDFs included the incorrect price for bundle products. GitHub-12856
  • String casting has been added to the email template filter method to ensure the return value is a string. Previously, when an exception was caught while not in developer mode, Magento returned a phrase object. This in turn triggered a fatal Uncaught TypeError. GitHub-32671
  • Order confirmation emails are now sent as expected when asynchronous sending is enabled (Stores > Configuration > Sales > Sales Emails > General Settings > Asynchronous sending) on one website in a multi-site deployment. GitHub-31950
  • Magento now logs an error as expected when an exception occurs as a customer attempts to send an email from the Contact Us form. GitHub-23645

Frameworks

  • Parent classes in the Admin are now checked for docblock annotation along with the original class and inherited interfaces. Previously, because parent classes were not checked, performing any customer-related actions in the Admin that triggered an event resulted in an error. Magento logged this error in the exception log: report.CRITICAL: Method's return type must be specified using @return annotation..
  • Magento no longer throws a fatal error when the Redis server is stopped in a deployment in which Redis page caching is enabled.
  • Magento now honors the Exclude media folder from backup setting when backup is enabled with bin/magento config:set system/backup/functionality_enabled 1. Previously, the Media Folder was backed up despite this setting because the path to /magento was formed incorrectly with a double //.
  • Magento now translates all translatable strings as expected for the Admin cart page. Previously, translation load happened too late and skipped all observers that were subscribed to controller action pre-dispatch. GitHub-31849
  • Form validation on the Create New Customer Account page now works successfully when the Login as Customer enable extension setting is disabled. Previously, Magento threw a JavaScript error.
  • Using bin/magento setup:db-schema:split-sales to move database tables now works as expected. Tables are now created and populated with data correctly. Previously, because the check for table existence was incorrect, Magento threw SQLSTATE errors when you ran bin/magento setup:db-schema:split-sales.
  • Exception handling for child processes forked by ProcessManager has been improved. When an exception occurs now, the main process exits and an error message is displayed only once. Previously, multiple indexer failures were logged and multiple messages were displayed. GitHub-30622
  • Global Magento plugins (for example, webapi_rest and graphql ) are no longer triggered for a new custom Magento area type when the di.xml of this area file contains no registered plugins.
  • Exceptions that occur during initialization are no longer cached and now trigger a 500 response code.
  • Merchants can now assign or delete an image to and from a catalog event by store view. Previously, when you changed store view while editing a catalog event, the Delete Image checkbox was not active, and Magento displayed this error: Uncaught ReferenceError: toggleValueElements is not defined at HTMLInputElement.onclick. GitHub-364
  • The last handler merged into a communication.xml file no longer overrides all previously created handlers. GitHub-29528

General fixes

  • Magento now displays the correct number of stars on the My Product Reviews page and on the MyAccount page recent reviews. Previously, Magento applied review stars to only the first review and left the other reviews on the page unstarred.
  • Account links in headers now follow WCAG standards. Previously, account links in headers contained duplicated IDs, which caused WCAG validation to fail.
  • Magento now saves catalog event dates in UTC time zones. Previously, Magento saved catalog event dates in the user’s time zone.
  • Magento no longer throws system log-generated errors when a guest shopper uses an invalid address. Previously, Magento intermittently displayed this error instead of rendering the page: No such entity with addressId. GitHub-15115
  • The image resizing process no longer halts for images in unsupported format. Previously, when catalog:images:resize encountered an unsupported image format, the process stopped and Magento displayed this error: bin/magento catalog:images:resize Unsupported image format.
  • WEBP and AVIF support for logo images has been added to the Admin. GitHub-32495
  • You can no longer change the scope of the media_gallery attribute. Previously, when you changed the scope of the media_gallery attribute back to global, Magento threw an error.
  • Related products that were added as a scheduled update are no longer displayed on a storefront product page after the end date of the update. GitHub-469
  • Magento now displays an accurate, informative message when you click on Manage Items on the My Account Gift Registry page and registry products are out-of-stock. Previously, Magento threw this error: Error: Call to a member function getId() …. GitHub-490
  • You can now add a CMS page from the Add New Page page to the website root hierarchy as expected.
  • Filtering now works as expected on the list of scheduled exports when entity type is selected. Previously, the filter did not work, and Magento threw a JavaScript error. GitHub-361
  • Category images are now copied as expected from the catalog/tmp/category directory to the catalog/category directory when categories are saved using the database storage method. The image row in the media_storage_file_storage table now also has the correct directory_id. GitHub-11995
  • Merchants are now notified about invalidated caches as expected after submitting changes to the CMS hierarchy. Previously, Magento did not invalidate caches while saving CMS hierarchy.
  • Redundant AJAX requests to the cart section of the shopping cart have been reduced. Previously, Magento did not properly load the cart subtotal, which triggered cart reload again.
  • On deployments running PHP 7.4, Magento now returns a 404 error when the Generate “category/product” URL Rewrites setting is set to No, and a shopper tries to access a non-existent category path. Previously, Magento returned a 500 error stating: Trying to access array offset on value of type bool. GitHub-31984
  • You can now successfully edit a product that was created using an attribute set from which Design Group And Schedule Design Update groups had been removed. Previously, when you tried to edit a product created from that attribute set, Magento threw a fatal error. GitHub-44
  • nowdoc has replaced heredoc in the Magento_Backend store switcher. GitHub-32262
  • Administrators are now directly redirected into the requested Admin page after login. Previously, when an administrator logged in, they were redirected to the Admin dashboard (or whichever page was configured as the startup page) and had to manually navigate to their destination. GitHub-31042
  • Added Argentina, Bolivia, Chile, Ecuador, Guyana, Paraguay, Peru, Suriname, and Venezuela regions to the directory_country_region table. GitHub-31169
  • Added Albania, Denmark, Greece, Iceland, Portugal, and Sweden regions to the directory_country_region table. GitHub-31040
  • Messages are now flagged as errors in the MysqlMQ message queue when exceptions occur. GitHub-18140
  • Magento now references the correct class object when loading tax info for the Admin credit memo and invoice pages. GitHub-31197
  • Royal Mail Click & Drop integration now works as expected. Previously, Magento threw this error when you tried to activate his integration: Sorry! Something went wrong. Please try again later. GitHub-28996
  • Magento now displays an informative error message when an incorrect shipment, credit memo, or invoice ID is passed in a URL. Previously, Magento threw a fatal error. GitHub-30424
  • Recursion in the location of static files has been removed. Magento now displays a 404 page instead of a 500 error. Previously, a bug in the default NGINX configuration lead to infinite recursion. GitHub-31530
  • The name of the cms_index_noroute.xml file has been corrected to cms_noroute_index.xml. GitHub-31300
  • The .editorconfig file has been refactored to correct the automatic formatting of db_schema_whitelist.json files. GitHub-31171
  • Resizing a browser window no longer triggers duplicate binding magnifier events. GitHub-30788
  • Magento no longer throws an SQL exception when filtering Magento\Users\Model\ResourceModel\Users\Collection by user_id. GitHub-31216

Gift cards

  • Pending payment charges are now removed from a gift card as expected when a gift card is canceled. Previously, Magento threw an error when cron ran after the gift card was deleted.
  • Shoppers can now remove gift cards from an order on the Review Order page when checking out with multiple addresses. Previously, Magento did not remove the gift card from the order when the shopper selected the card and then clicked Remove.
  • Magento now displays the new price of a gift card in the shopping cart when you change the value of the gift card after adding it the cart.
  • Price range validation logic has been added to the gift card creation page. Previously, an administrator could create a card with a minimum value that exceeded the maximum value. GitHub-493
  • The addRequisitionListItemsToCart query now returns the amount of a custom gift card as expected when the request does not contain a value for allow_open_amount.

Gift message

  • The setGiftOptionsOnCart mutation now correctly creates gift messages. GitHub-388

Gift registry

  • Event date values are now the same on the storefront and Admin during gift registry creation or editing. Previously, each time you edited and saved the gift registry, Magento adjusted the Event date one day backward on both the storefront and Admin. GitHub-466
  • Magento no longer displays disabled products in gift registries. Previously, if a product were disabled after being added to a gift registry, Magento displayed this message when a shopper accessed the registry: Error: Call to a member function getId() …. GitHub-510

Gift wrapping

  • Translation of gift wrap labels for store views now works as expected.
  • Gift wrapping is now applied as expected to orders being shipped to multiple addresses.
  • Magento now removes gift wrapping charges from the shopping cart when all products have been removed.
  • Credit Memo totals are now correct when the credit memo contains gift wrap and configurable product charges. Previously, the gift wrap tax amount was not always included in the credit memo total. GitHub-34

Google Analytics

  • Magento no longer throws an error when an administrator tries to load a page on the storefront when Google Analytics is enabled. A CSP entry for connect-src has been added to allow AJAX requests to www.google-analytics.com. GitHub-30880

Google Tag Manager

  • The UI component for the billing address on the payment page of the checkout workflow now uses quote address correctly when Google Tag Manager is enabled. Previously, a JavaScript error occurred on the payment page.

GraphQL

  • The GraphQL products query now returns attribute options that are sorted in the same sort order as used on the attribute edit page.
  • The response to the { category(id: 2){ children { name children { name } } } } GraphQL request now includes a correctly sorted category tree.
  • The CartItemPrices object now contains the new GraphQL field fixed_product_taxes, which returns an array of the fixed product taxes that are applied to a cart item. Previously, fixed product taxes that were applied to a cart item were not included in the cart query.
  • Empty requests to GraphQL now throw response code 200 instead of 500. Previously, the GraphQL parser threw an exception before the query result was generated.
  • The applyRewardPointsToCart mutation now updates a cart’s grand total to accurately reflect the value of the reward points deducted. GitHub-486
  • Disabled products are no longer included in the GraphQL response when GraphQL is used to link upsell products.
  • Merchants can now use the GraphQL setShippingAddressesOnCart method to set billing and shipping addresses for a shopper’s cart when guest checkout is disabled.
  • The categoryList query no longer throws an exception when it contains multiple fragments on the CategoryTree object. GitHub-31086
  • The GraphQL product query now returns the correct customer group prices.
  • The GraphQL products query response now sorts aggregations according to product attribute position.
  • Magento no longer throws type errors during GraphQL queries when product and category URL suffixes contain null values. GitHub-30909
  • The CustomizableDateValue object now contains the type attribute. Its value is an enumeration that can be set to DATE, DATE_TIME, or TIME.
  • The dynamicBlocks query returns the contents of dynamic blocks that match the specified filters.
  • The POST V1/products/special-price-delete request now deletes only the price with a specified store_id as expected. Previously, the call removed all special prices for the specified SKU from all stores. GitHub-25907
  • Fixed an error with the country_code attribute in the createGiftRegistry mutation.
  • Fixed problems with the giftRegistryUid attribute of the updateGiftRegistryItems mutation.
  • Added an additional check to prevent the updateGiftRegistryRegistrants mutation from being used to add random people as a registrants to a gift registry.
  • The addConfigurableProductsToCart mutation now returns the correct thumbnail of the specified product. Previously, it returned the thumbnail of the parent product.
  • The products query no longer exposes a product’s special price when the special price period is set for a future date. GitHub-30210, GitHub-29631
  • The customer query response now includes the total_giftcard attribute as part of the OrderTotal object.
  • Corrected a problem that caused the products query to return erroneous info about price tiers on items that do not have tier pricing set. GitHub-32279

Image

  • You can now set the required_options and has_options bundle attributes as expected while creating or updating a bundle product using the POST /V1/product/:sku endpoint. Previously, these custom attributes were set to 0 (zero) despite efforts to set it to 1 (one).

Import/export

  • The Category IDs filter for product entities in the Export page Entity Attributes grid now works as expected.
  • Grouped product stock status now updates as expected to out-of-stock when all child products are out-of-stock. GitHub-32647
  • Configurable product stock status is now automatically updated as expected when child product stock status is updated by import. Previously, product stock status was not automatically updated when child products stock status was updated by import.
  • You can now save empty values in a scheduled export. Previously, Magento updated empty filter values after export creation or save. Both no and not specified values were represented by zero in the database, and a value of not selected was overridden with no.
  • The export process now takes into account user role scope when exporting product, stock sources, and customer entities. Previously, the export process ignored user role scope, which permitted the export of private user role export entities.
  • Magento now sets the product tax class to None if a product is imported with tax_class_name values None or 0. Previously, if product tax_class_name was None in the CSV file, Magento created a new tax class None, which duplicated the existing tax class. If product tax_class_name were 0 in the CSV file, Magento ignored that value, and product tax class did not change after import.
  • Administrators can now successfully change the name of a bundle product’s bundle_values from the Admin. Previously, Magento displayed the product as out-of-stock on the storefront after you changed the name from the Admin. Products were also merged with the same SKU into a single bundle-option section.
  • Magento now takes into account user scope when exporting customer data. Previously, when you tried to export customers, Magento exported customer data from all websites.
  • Magento now removes product relationships between up sell, cross sell, and related products during CSV file import as expected when __EMPTY__VALUE__ is specified in the CSV file.
  • Exporting custom address data for many customers (Admin System > Export) no longer routinely results in a memory error. Previously, when exporting custom address data, Magento tried to load all customer data, which resulted in memory depletion, and Magento threw a failure-to-allocate-memory error.
  • Duplicate tier prices are no longer imported during the default Magento CSV import process. Previously, validation was missing to prevent the import of duplicate tier prices, and when duplicate tier prices occurred, merchants could not save products. Merchants also saw this error when they tried to schedule a product change: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry….
  • All product images are now validated during import. Previously, Magento validated only the first image when a product had multiple images. GitHub-28236
  • You can now delete a region from a customer address as expected during import. Previously, the assigned region did not change when a customer address was imported with an empty region.
  • Products with JSON or HTML content as additional product attributes are now exported correctly to a CSV file. Previously, the CSV file contained overlapped data strings in incorrect fields.

Index

  • Process Manager now exits with an error when a child process fails. Previously, Process Manager always exited successfully if the number of functions passed to it (for example, indexer dimensions) was lower than the value of the MAGE_INDEXER_THREADS_COUNT environment variable. GitHub-30964
  • Products are now available as expected in storefront search results when linking products using a REST PUT /V1/products/:sku/links request when indexer mode is set to Update on Save.
  • The catalog price rule indexer now works as expected when the indexer mode is set to Update on Save. GitHub-370
  • Deleting a disabled category that does not include a product now has no effect on catalog search and category flat index tables. Previously, deleting an inactive category triggered a full re-index. GitHub-23297
  • Custom indexers can now use different entity column names for subscriptions. Previously, the database trigger used the column name from the indexer last set to Update by Schedule rather than the designated indexer. GitHub-21853
  • Magento no longer sends AJAX requests to reload customer data sections (Magento_Customer/js/section-config) that are unaffected by the request. GitHub-31948
  • The following indexers are no longer invalidated after you add, remove, or reorder products in a category: catalog_category_product and catalogsearch_fulltext (and their dependents). Previously, these inadvertent removals triggered full re-indexing of sites. A full re-index is now prevented under these conditions when flat catalog is not enabled.

Infrastructure

  • The Magento dependency pelago/emogrifier has been updated from version 3.1.0 to 5.0.0. This update resulted in the introduction of backwards-incompatible changes to the Magento\Email\Model\Template\Filter class. The changed code is executed during Magento email templates rendering. See BIC reference.
  • Corrected an issue with \Magento\CatalogInventory\Model\Indexer\Stock\CacheCleaner::getCategoryIdsByProductIds that prevented saving a new product.
  • The deprecated TinyMCE v3 library has been removed. The Magento_Tinymce3Banner module and MFTF tests related to TinyMCE v3.x have been removed from Adobe Commerce.
  • Magento no longer throws an Invalid header value detected error on the Contact us form when a shopper enters an email address that contains French diacritic marks (such as “é”, “è”). Magento now converts UTF-8 letters in the user name to ASCII encoding. Previously, UTF-8 letters were not converted to ASCII encoding in the unique section of the email address.
  • Magento no longer throws a PHP fatal error when a plugin is added to a parent class. GitHub-31291
  • Updated the README.md files for these modules: Magento_Msrp, Magento_MsrpConfigurableProduct, Magento_MsrpGroupedProduct, Magento_Multishipping, Magento_MysqlMq. GitHub-32577
  • phpcpd has been updated to v6.0.3 for PHP 8 compatibility.
  • colinmollenhour/php-redis-session-abstract has been updated to v1.4.4 for PHP 8 compatibility. GitHub-32709
  • Corrected an invalid combination of tabs and spaces in the phpstan.neon file. GitHub-31239
  • Removed use of obsolete property $_isScopePrivate throughout the code base. GitHub-30506
  • Page layouts are no longer hard-coded in  Magento\Widget\Block\Adminhtml\Widget\Instance\Edit\Chooser\Container. As a result, the getPageLayouts() function now returns the actual list of page layouts declared by the different modules as expected. Previously, it returned only hard-coded layouts. GitHub-31168
  • The composer.lock file has been updated to the latest version of the Magento Coding Standard. GitHub-31152
  • Added a missing dependency on the web-token/jwt-framework package to the magento/module-jwt-framework-adapter. GitHub-32578
  • Passive listeners have been added to the fotorama.js library to improve lighthouse metrics score. GitHub-31140
  • The README.md file for the Google Analytics module has been updated. GitHub-32616
  • Process Manager now handles exceptions properly in forked processes. The main process now exits, and Magento now displays an error message only once. Also, the exceptions from the forked processes are now handled when they are thrown in the main process. Previously, Magento logged multiple indexer failures and displayed multiple error messages. GitHub-30622
  • Magento no longer throws an error when a plugin is added to a parent class. (The optionsProvider parameter is now declared after getContentIdentities in Assest.php.) Previously, Magento threw this error: Error: Cannot instantiate interface Magento\Framework\Data\OptionSourceInterface. GitHub-31291
  • Executing Magento\Framework\Filesystem\Io\Ftp::ls() on an empty folder now returns an empty array as expected. Previously, Magento threw this exception: Invalid argument supplied for foreach() in vendor/magento/framework/Filesystem/Io/Ftp.php…. GitHub-31288
  • The update method for both Role and Rules has been marked as deprecated in app/code/Magento/Authorization/Model/Role.php. GitHub-30756
  • Concatenation for SameSite cookie parameters has been corrected. Previously, incorrect concatenation appended the lex suffix to value, domain, and other parameters. GitHub-26377, GitHub-32440
  • allure-framework/allure-phpunit has been upgraded to v1.3.1 throughout the code base. Previously, Magento displayed this error: Warning: Use of undefined constant GLOB_BRACE - assumed 'GLOB_BRACE' (this will throw an Error in a future version of PHP) in /var/www/html/src/vendor/allure-framework/allure-phpunit/src/Yandex/Allure/Adapter/AllureAdapter.php:74. GitHub-24635
  • Magento now displays more informative errors when errors occur running bin/magento commands in production mode. Previously, either Magento displayed no error messages or displayed messages that lacked information. GitHub-32786
  • The ArrayIterator PHP object has been updated to work as expected with PHP 7.4. GitHub-32088
  • Magento no longer throws an error when a customer tries to complete an order when no shipping carriers are available. Instead, it displays the checkout page and this message: Sorry, no quotes are available for this order at this time. Previously, Magento displayed a blank checkout page and recorded this message in the exception log: array_keys() expects parameter 1 to be array, null given. GitHub-30830
  • Magento no longer logs each cookie as a separate context. The $_COOKIE array has also been converted to a string. Previously, because each cookie was logged as a separate context, when the number of cookies exceeded 50, Magento logged this message: Unable to send the cookie. Maximum number of cookies would be exceeded. GitHub-31334

Invoice

  • When creating new invoices in the Admin, the Email Copy of checkbox now works as expected. Previously, the checkbox was ignored if the global setting to send invoice emails was enabled in Sales Emails. It is now consistent and operates the same way as the shipment and credit memo creation pages. GitHub-28511
  • bin/magento media-gallery:sync now fails as expected when processing PNG images that lack XMP information.
  • Entries in the catalog_product_entity_media_gallery table are removed as expected when related products are deleted. GitHub-17727
  • Image details can now be updated in the Media Gallery when JavaScript minification is enabled. Previously, image details were not saved, and Magento displayed this error: TypeError: Cannot read property 'call' of undefined in jquery.validate. GitHub-31633

MFTF

New features and MFTF core bug fixes are described in the Magento Functional Testing Framework Changelog.

  • The magento indexer:reindex and cache:flush commands and the AdminReindexAndFlushCache action group have been removed from tests to improve execution for the following modules: Bundle, Catalog, CatalogRule, CatalogRuleConfigurable, CatalogUrlRewrite, Downloadable, Indexer, Paypal, and Sales. GitHub-31031
  • AdminSubmitCategoriesPopupActionGroup has been added to tests to prevent test failure. GitHub-31251
  • Tests have been refactored with StorefrontCheckQuickSearchStringActionGroup and StorefrontAssertProductNameOnProductMainPageActionGroup (existing action groups). GitHub-31251

Refactored tests

The following tests have been refactored to improve execution time:

AddOutOfStockProductToCompareListTest

AdminApplyTierPriceToProductWithPercentageDiscountTest

AdminCheckingCreditMemoTotalsTest

AdminCheckDashboardWithChartsTest

AdminConfigDefaultProductLayoutFromConfigurationSettingTest

AdminCreateInvoiceTest

AdminCreateOrderAddProductCheckboxTest

AdminMassOrdersCancelCompleteAndClosedTest

AdminMassOrdersCancelProcessingAndClosedTest

AdminMassOrdersHoldOnCompleteTest

AdminMassOrdersHoldOnPendingAndProcessingTest (replacement for deprecated AdminMassOrdersHoldOnPendingAndProcessingTest)

AdminMassOrdersUpdateCancelPendingOrderTest

AdminMassProductPriceUpdateTest

AdminMassUpdateProductAttributesMissingRequiredFieldTest

AdminOrdersReleaseInUnholdStatusTest

AdminPanelIsFrozenIfStorefrontIsOpenedViaCustomerViewTest

AdminSortingByWebsitesTest

AdminUpdateSimpleProduct

AdminUpdateSimpleProductWithRegularPriceInStockEnabledFlatTest

AdminValidateShippingTrackingNumberTest

CancelOrdersInOrderSalesReportTest

ProductsQtyReturnAfterOrderCancelTest

StorefrontConfigurableProductBasicInfoTest

Action groups

Repetitive actions have been replaced with action groups in these tests:

AdminCheckConfigurableProductPriceWithDisabledChildProductTest

AdminConfigurableProductCreateTest

AdminConfigurableProductRemoveAnOptionTest

AdminCreateProductDuplicateUrlkeyTest

AdminCreateSimpleProductNegativePriceTest

AdminCreateSimpleProductZeroPriceTest

AdminCreateVirtualProductFillingRequiredFieldsOnlyTest

AdminUpdateSimpleProductWithRegularPriceInStockDisabledProductTest

AdminUpdateSimpleProductWithRegularPriceInStockNotVisibleIndividuallyTest

AdminUpdateSimpleProductWithRegularPriceInStockVisibleInCatalogOnlyTest

New action groups

AdminClearFiltersOnGridActionGroup

AdminClickAddNewPageOnPagesGridActionGroup

AdminClickInsertWidgetActionGroup

AdminClickRefundOfflineOnNewMemoPageActionGroup

AdminFillAccountInformationOnCreateOrderPageActionGroup

AdminGoToOrderStatusPageActionGroup

AdminOpenCMSPagesGridActionGroup

AdminSelectAttributeSetOnEditProductPageActionGroup

AssertAdminProductIsAssignedToCategoryActionGroup (replaces filtering Products Grid by SKU and clicking the first row (in order to decrease test execution time)

AssertLinkActionGroup

AssertStorefrontCartDiscountActionGroup

ClickPlaceOrderActionGroup

SaveCmsPageActionGroup

StorefrontAssertProductNameIsNotOnProductMainPageActionGroup

StorefrontGuestCheckoutProceedToPaymentStepActionGroup

StorefrontHoverProductOnCategoryPageActionGroup

StorefrontSelectCustomizeAndAddToTheCartButtonActionGroup

Deleted action groups

  • Removed CliIndexerReindexActionGroup (or changed value) from tests to improve execution time for the Backend, Bundle, BundleImportExport, Catalog, CatalogRule, CatalogSearch, Checkout, Downloadable, Elasticsearch, Elasticsearch6, Indexer, LayeredNavigation, LoginAsCustomer, Newsletter, Sales, SalesRule, Search, Store, Swatches, UrlRewrite, Weee, and Wishlistmodules.
  • Removed CliCacheFlushActionGroup from Catalog, CatalogUrlRewrite, Checkout, Config, ConfigurableProduct,Contact, Cookie, CurrencySymbol, Customer, Downloadable, Elasticsearch, Elasticsearch6, Fedex, Indexer, LayeredNavigation,LoginAsCustomer, Msrp, Multishipping, Sales, Swatches, Translation, UrlRewrite, Vault, Weee, and Wishlist modules.

Newsletter

  • Magento no longer sends newsletter email to a customer who has been unsubscribed from the newsletter in the time period between newsletter queue creation and the sending of the newsletter. GitHub-32116
  • Magento now honors newsletter enablement settings (Stores > Settings > Configuration > Customers > Newsletter > General Options). Previously, these settings were always retrieved from the default scope in multi-store deployments. GitHub-31188
  • The REST call GET /V1/customers/search now returns correct information for customers that are subscribed to multiple newsletters. GitHub-31168
  • Caching subscription status has been removed from the newsletter plugin. GitHub-19345

Order

  • Magento now correctly calculates an invoiced customer balance when returning store credit to a customer account for a partially invoiced order.
  • Magento now saves a modified order as expected when it saves a refunded customer balance. GitHub-393

Payment methods

  • Magento now renders payment blocks on frontend regardless of the area from which the email was sent. (The current area is now emulated as frontend before the payment block is rendered.) Previously, payment blocks were rendered in the area from which the email was sent. As a result, whether sales email was triggered from the Admin or by the REST API, URLs for assets attempted to load them from the wrong area (webapi_rest or adminhtml).
  • Magento now sends the link for a downloadable product to the email address that is specified during checkout. Previously, when a guest shopper used PayPal Express Checkout and entered different email addresses to submit the order and to check out, Magento sent the downloadable product link to the first address.
  • Magento now displays an accurate value for available store credit on the Payment Method page in deployments that support multiple currencies.
  • The payment methods list is now updated as expected when a guest shopper changes an order’s shipping address to a different country during checkout. Previously, changing billing address did not trigger an update of the possible payment methods.

PayPal

  • Shoppers can now successfully check out a PayPal Payflow Pro order with a shipping address that contains special characters. Previously, Magento declined payment for these orders.
  • Shoppers are now redirected back to the order success page after a successful payment using PayPal. Previously, shoppers were redirected to a blank page because session data was lost.

Performance

  • The performance of Admin SKU search on large catalogs has improved. Query optimizer hints now force index usage during query execution.
  • The performance of the catalog_product_alert cron process when running on large tables (several million rows) has been improved. Previously, catalog_product_alert loaded all product alerts, which caused an out-of-memory exception.
  • Magento no longer loads all CMS pages when needing only one edit page to render an Admin form. These pages now load faster. GitHub-30936
  • Numeric values in WHERE IN expressions are now cast as number, not as string, which improves query performance in some versions of MariaDB. GitHub-31135

  • The use_application_lock mode lets you enable re-indexing through either the use of environment variables or by configuring the app/etc/env.php file. You no longer need to manually reset the indexer after failure with this mode enabled. When this mode is not enabled, you must manually reset the indexer after failure. See Using application lock mode for reindex processes

Pricing

  • Magento now correctly updates the price of a product with grouped prices when a shopper updates product quantity on the storefront. GitHub-32669
  • Bundle products can now be saved when products have been assigned a tier price and Magento\Framework\Api\ExtensibleDataObjectConverter is used to convert product data. Previously, when Magento\Framework\Api\ExtensibleDataObjectConverter was used to convert product data to an array when a product was saved, Magento did not save the product and displayed this error: Notice: Undefined index: price in app/code/Magento/Catalog/Model/Product/Type/Price.php on line 382.
  • Scheduled price updates are now applied to products already in a shopper’s cart. GitHub-356
  • Tier price is now applied to a product as expected when quantity increments are enabled and decimal inventory is less than 1. Previously, minimal tier price quantity was set to 1.

Product video

  • You can now use the Add Video button (Admin Catalog > Products) to consecutively add several videos. Previously, video fields retained the details of the previous video.
  • Entering full-screen mode for a product video on a product page now works as expected on mobile devices. Previously, entering full-screen mode caused the video to pause before exiting full-screen mode.
  • The navigation arrow buttons (Next and Prev) are now visible as expected on storefront product videos.
  • Merchants can now add Vimeo videos using the Insert video button on the product page as expected. Previously, Magento displayed a 404 error. GitHub-31753

Quote

  • The /V1/guest-carts/examplecartid/items call now returns the requested store view. Previously, it returned the first store view in the store, not the requested one.
  • Invoice sending is now configurable. Previously, invoice sending was not configurable, and Magento always sent an invoice after it was created. Invoice and order emails were both sent in the scope of one observer. Separate observers now govern the sending of order email and invoice email. GitHub-27656

Reports

  • All system reports can now be viewed on and downloaded from the Magento Cloud instance. Previously, you could not download system reports for Logs, Data, Design, or Stores.
  • The Last Review date on Admin Reports > Reviews > By Products now displays the correct review date. Previously, Magento displayed the product creation date instead of the review date.

Return Merchandise Authorizations (RMA)

  • The RMA resolution attribute is no longer shown as required when the attribute field value required is set to no.
  • You can now select multiple orders for return from the Admin. Previously, Magento threw an error when you clicked Submit after selecting multiple returns and selecting Closing from the Actions dropdown menu.
  • Magento now sends email notification to customers as expected after you change the status of a return using the REST API.
  • Magento now filters records according to filter values in the Admin customer returns grid. Previously, Magento directed you to the Admin All Customers page, and clicking the Reset Filter button also redirected to this page. GitHub-436

Reviews

  • Product review rating stars are now correctly calculated in the Review Details section of the My Account page.
  • The Average Product Rating and Product Ratings sections of the product review details page now render correctly. Previously, the review ID was not set when Magento calculated the storefront rating, and the product review template was not properly rendered.
  • The Be the first to review this product link now changes as expected to a review count after an administrator approves a review.
  • Administrators can now sort product reviews on the Product Reviews section of the product edit page as expected. GitHub-30270
  • Reviews are now saved with the correct store ID after an administrator approves and saves the review from a different domain than the store. GitHub-17510

Rewards

  • Merchants can now cancel an order that was placed totally or partially using reward points after the customer that placed the order has been removed from the system.
  • Merchants can now remove reward points from cart price rules. Previously, when a merchant tried to set Reward Points to 0 when creating a cart price rule, the previous value for reward point quantity persisted.
  • Reward points for product reviews are now associated with the relevant website when multiple reviews are approved from Admin Marketing > Pending Reviews grid. Previously, reward points were not displayed on the storefront and were not linked to the relevant website in the Admin.
  • Magento now updates the payment method list when a shopper checking out with multiple addresses either checks or unchecks the Store Credit (Reward Points) option.

Sales

  • Admin users can now place orders for out-of-stock items when the Backorders are allowed setting is enabled (Stores > Configuration > Catalog > Inventory > Product Stock Options). Previously, Magento threw an error.
  • Shoppers can now find an order on the Orders and Returns page when the last name ends with a white space.
  • Invoices are now created with the correct grand total when a cart price rule assigning a 100% discount is applied to an order that is also subject to catalog product and discount taxes and that qualifies for free shipping. Previously, the order had the correct price, but the invoice did not. GitHub-30853
  • Filtering orders by date now returns accurate results. Previously, Magento did not return an order that was placed after 00:00 UTC when you filtered orders by order date.
  • The credit memo grid now displays the correct currency symbol when Website scope is used for a Price attribute in a multi-store deployment.
  • Payment methods radio buttons no longer disappear on the Payment & Shipping Information section of the checkout workflow after the Admin Create New Order page is reloaded. GitHub-32106
  • Arabic text is now displayed correctly in invoices.
  • Magento now calculates partial credit memo tax totals correctly for credit memos that are based on either an order or an invoice in stores that deploy PayPal Payment Pro as a payment gateway. Previously, for orders with multiple invoices, Magento applied the whole tax of that order for partial invoice cancellation in the credit memo.
  • Magento no longer creates random database deadlocks when sending new order emails to customers. Previously, deadlocks occurred because Magento saved the entire object and its related objects instead of updated SQL columns. Magento displayed this type of error: SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction. GitHub-31090
  • The storefront Order detail page now displays the correct shipped product quantity. Previously, product quantities were incorrect because the template for the Order Shipment page rendered Qty Shipped as an int. This has been changed to float.
  • Magento no longer emails copies of an order invoice when the Email Copy of Invoice button is unchecked. Previously, Magento sent email to Customer and Send Invoice Email Copy To. GitHub-28511
  • Magento no longer creates duplicate address entries for a customer account when creating a new order from the Admin for an existing customer. The Save in Address Book check box has been renamed to Add to Address Book and is now unchecked in the Admin by default.
  • Magento now uses the logo that has been uploaded in the Logo for HTML Print View settings when shoppers print an order from their account. Previously, Magento displayed the LUMA logo instead of the uploaded logo.
  • The pager of order items on the storefront now works as expected when item count exceeds 20. Previously, the pager took into account child products, and the total count was incorrect.
  • Magento now displays the correct currency symbols for subtotal and shipping and handling values on Order page and Credit Memo page grids. GitHub-22662
  • Administrators who use Safari can now successfully add a product to an order from the Admin. Previously, when the administrator clicked the Add selected products to order button, Magento displayed the spinning load icon, and the page hung. GitHub-30265

Sales Rule

  • Magento now applies cart price rules with Maximum Qty Discount is Applied To or Discount Qty Step (Buy X) conditions correctly when multiple cart price rules are applied to the shopping cart. Previously, if a cart price rule with Maximum Qty Discount is Applied To or Discount Qty Step (Buy X) was applied after another cart price rule, the total discount was reduced to the value configured for Maximum Qty Discount is Applied To or Discount Qty Step (Buy X) times the product price.
  • The Coupon report now accurately reflects coupon activity in deployments where a split database is implemented.
  • Cart price rules that contain the condition Category IS NOT are now applied as expected to configurable child/simple products that are not assigned to a category but whose parent products are assigned.
  • The GraphQL cart query now returns the correct grand total for the billing step of a cart when a coupon is applied to the order.
  • The category page no longer contains these duplicate HTML element IDs: modes-label, mode-list, toolbar-amount, sorter, limiter.
  • Partial word search results no longer include unexpected or irrelevant matches, and searches produce consistent results on both the storefront and Admin. Magento now uses a different analyzer without a stemmer for partial word searches. Previously, search results displayed products that did not include search keywords. (The default analyzer previously included a stemmer, and because the same analyzer was used at search time for partial word search, the search result could produce unexpected or irrelevant matches.)
  • Quick search now returns results if the search query has multiple words and the product name is configured as not searchable. Previously, if the product name was configured as not searchable, Magento threw a query exception on search queries with multiple words.
  • Search results now include the weight attribute as expected when it is configured as searchable.
  • Magento no longer throws an error when you view an empty category page with Elasticsearch enabled. Instead, it renders the page as expected and displays an informative message. Previously, an empty full-text index triggered an exception on a category page.
  • The search field autocomplete feature now works as expected if a shopper clicks outside the search field after beginning her search. Autocomplete suggestions now reappear when the shopper resumes typing. Previously, Magento did not display autocomplete suggestions and clicking in the search box did not make the search suggestions visible again (although typing additional letters did).
  • Searching for a product based on its full or partial SKU in Advanced Search now returns the expected product.
  • Layered navigation filters now display accurate product counts. Previously, product count values from Elasticsearch were not filtered by catalog permissions.
  • Elasticsearch no longer throws an error when the category URL page parameter exceeds the pagination. GitHub-23843
  • You can now add a custom Elasticsearch field mapper to Magento\Elasticsearch\Model\Adapter\FieldMapper\Product\FieldProvider\FieldName\Resolver\CompositeResolver. GitHub-24350
  • Developers can now change Elasticsearch mappings. Previously, dynamic templates sent to the Elasticsearch server in the default mappings were hard-coded, which prevented developers from indexing in Elasticsearch any extra data associated with a custom module. GitHub-24363
  • Search fields (form minisearch) now work as expected when Search Suggestions are disabled. GitHub-30584

Shipping

  • Magento now updates shipping price as expected when a shopper navigates back to the cart page after deleting a product during checkout with multiple addresses.
  • Magento now displays the correct adjusted shipping price when some items in the cart qualify for free shipping. Previously, when a subset of items in the cart qualified for free shipping, Magento did not adjust the shipping price and displayed the full shipping price to the shopper.
  • Administrators who are restricted to a specific website can now create a shipment for an order placed on the same website. Previously, Magento threw this exception when an administrator who lacked permission to the default store view tried to ship an order that was placed in a store view that the administrator had access to: Notice: Undefined offset: 1 in /app/code/Magento/Catalog/Model/Product/Attribute/Backend/GroupPrice/AbstractGroupPrice.php on line 293.
  • Magento now takes into account relevant cart price rule discounts when determining whether an order meets conditions for free DHL shipping.
  • Shipping labels now use base currency as expected instead of order currency for stores that support multiple currencies when an order is placed in a non-base currency. GitHub-31891
  • Magento now displays the correct order subtotal when a shopper returns to the cart page during checkout after navigating away from the multi-shipping page. GitHub-31889
  • Editing billing information during Admin order creation no longer changes shipping information for customers with different default shipping and billing addresses. GitHub-31786
  • Magento no longer unchecks the Append Comments checkbox when a shopper clicks Get shipping methods and rates and selects a shipping method when creating an order from the Admin. GitHub-30256
  • Shoppers can now use the Back browser button to return to the Select Shipping Method page while checking out an order with multiple addresses. Previously, Magento displayed a corrupted Select Shipping Method page. GitHub-30268
  • Product quantity now remains unchanged as expected after a shopper changes quantity on the Ship to multiple address address page and clicks the browser Back button. GitHub-31956
  • Flat rate shipping method charges no longer become zero when a cart price rule is applied during checkout. GitHub-21832
  • Magento no longer throws an error when a merchant tries to ship an order using DHL when the Create shipping label checkbox is enabled and the product name contains unicode characters. Previously, Magento displayed this error when requesting label creation: The response is in wrong format. GitHub-31032
  • You can successfully place an order from the Admin in a multi-site deployment in which United States is enabled on one website andDisable all countries is enabled as the default scope on the other website. Previously, Magento did not place the order and displayed this error: Please check the shipping address information. "regionId" is required. Enter and try again. GitHub-30577

Staging

  • The Schedule Block Update feature now works as expected in deployments implementing Fastly. Previously, Magento did not update block content because Fastly cache tags were not invalidated, and Fastly continued to serve outdated content.
  • The cart price rule staging preview is now loaded in the appropriate website when assigned to multiple website store views. Previously, the cart price rule staging preview was loaded in the default store view regardless of the assigned websites.
  • Special prices for products in the non-default store view are now set to the default value as expected after a scheduled update has ended.
  • Merchants can now successfully save a downloadable product with a linked sample from the downloadable product page after creating a future staging update with an end date. Previously, Magento did not save the product and displayed this message: The downloadable sample isn't related to the product. Verify the link and try again. GitHub-488
  • Magento no longer executes large database queries that include all product IDs during preview of a schedule update of a category. Instead, the category filter is applied to the product collection to make a temporary table for staging previews of the category. Previously, Magento inserted all products into a temporary table for the staging preview, which degraded performance.
  • The Magento_SalesRuleStaging module no longer triggers errors during upgrade from Magento 2.3.x.
  • Magento now displays catalog rule conditions with correct data when you view a schedule update. Previously, if you viewed a schedule update that was created with conditions, Magento did not display conditions or displayed conditions with incorrect data.
  • The Use default value checkbox for a product remains checked after a scheduled update is unchecked before the update.
  • Catalog price rules now apply as expected to products with undefined attribute values. Previously, discounts that were created through a catalog price rule were not applied to products with undefined attributes. GitHub-461
  • Catalog rules now work as expected in multi-website deployments with stores in different timezones. Previously, Magento applied or deactivated catalog rules on all websites at one time.
  • Tier prices are no longer removed when a schedule update is created for a specific website.
  • You can now save a product from the Downloadable Product page after creating a future staging update with an end date. Previously, Magento did not save the product and displayed this message: The downloadable link isn't related to the product. Verify the link and try again. GitHub-474

Store

  • Magento no longer treats a string of 0 as an empty value when displaying a store home page. Previously, Magento treated an integer value at the start of a request path as a store ID, which had unintended effects on SEO.
  • Plugins for \Magento\Framework\App\ActionInterface under lib/internal/Magento/Framework/App/Action/Plugin have been removed to keep with the guideline that plugins should be used to customize behavior of one module from another module. GitHub-28050
  • Magento now displays this message when you try to select Website as default when Store View is disabled during website creation: Please enable your Store View before using this Web Site as Default. Previously, the website crashed, and Magento did not display an alert.

Tax

  • Magento now takes into account hidden tax during validation of the minimum order amount.
  • Magento now displays Fixed Product Taxes (FPT) as expected when a shopper navigates back to their shopping cart and proceeds to checkout after adding bundle products to the cart. GitHub-30250
  • Magento now pre-fills the VAT Number input fields for both the billing and shipping addresses of the Address Information section of the Admin new order page with saved VAT numbers when an administrator creates an order for an existing customer. GitHub-31846
  • Magento now displays a VAT Number field on the customer registration page when customer/create_account/vat_frontend_visibility is enabled. GitHub-31326

Test

  • Test environments have been upgraded to Redis 6.0.12.
  • Removed CacheCleaner::cleanAll(); from integration tests. GitHub-31074
  • Added a test for this scenario: Admin users can edit a customer account when the customer is subscribed to a queued newsletter. GitHub-30645
  • Removed the cache:flush command from tests to improve execution time for the Catalog, CatalogUrlRewrite, and LoginAsCustomer modules. GitHub-31056
  • Redundant parameters have been removed and POST changed to GET where needed in \Magento\Logging\Model\ProcessorTest::testLoggingProcessorLogsActionShipping.

Theme

  • The customer login page no longer displays this message when the Move JS code to the bottom of the page setting (Store > Configurations > Advance > Developer > JavaScript Settings) and cookies are both enabled: The store will not work correctly in the case when cookies are disabled.
  • Account links in headers now follow WCAG standards. Previously, account links in headers contained duplicated IDs, which caused WCAG validation to fail.
  • Magento now prioritizes store configuration for a store logo image over layout configuration. Previously, the size of logo images was fixed and did not vary by store.
  • Magento now displays page elements consistently on storefront pages that use standard Magento themes. Previously, not all styles were applied in Blank theme, so not all page elements were displayed in pages using this theme. (For example, no magnifier icon was present in the My Orders page search field.)

Translation and locales

  • Brackets that are added to strings are no longer escaped when inline translation is configured. Previously, the escapeHtmlAttr method converted the brackets into HTML entity codes. GitHub-32000
  • Untranslatable phrases in the Admin are now translatable. (This pull request contributes to ongoing efforts to make all Admin strings localizable.) GitHub-11175
  • Text strings in the template that are used to manage stored payment methods (My Account > Stored Payment Methods ) are now translatable. GitHub-31211
  • Order emails sent from the Admin now use the store locale not the locale that is associated with the administrator’s account. GitHub-26521

UI

  • The Admin footer now displays the correct product version.
  • Pagination for sources is now present as expected during Admin shipment creation.
  • The product grid filter now works correctly when you use custom date attributes to filter products and the Admin user locale is en_GB.
  • Pinch-to-zoom gestures now work as expected in the product page image gallery magnifier on iOS devices.
  • Pagination of the Admin product grid search results now starts at page one for each search as expected.
  • Anomalies with the display of the shopping cart when zoomed have been resolved. Previously, display elements overlapped when this page was zoomed.
  • Alignment issues with the tabs on the Admin invitation page (Admin Marketing > Private Sales > Invitations) have been resolved. Previously, the Tab display for invitations that had been accepted by a customer were misaligned. GitHub-333
  • The order review page displayed during checkout with PayPal Express Checkout now loads successfully. Previously, the template contained the unused Update delivery method button, which was only partially hidden by the script during page rendering. GitHub-32006
  • Rating stars and review text in the Customer Reviews section of the product page are now properly spaced when lengthy rating names are present. GitHub-31890
  • Options are now displayed as expected in the Actions drop-down list on the Archive Invoices, Shipments, and Credit Memos pages.
  • Magento now displays a correct time value when the datetime component timeOnly option is set to yes. GitHub-23157
  • You can now remove a layout update after creating a new widget on Admin Content > Widgets. GitHub-29936
  • The Remove Layout Update button now works as expected on any layout you have added from Admin Content > Widgets. Previously, this button did not work on any layout other than the first selected when adding multiple layouts. GitHub-30286
  • Magento now uses the page title that is set in the layout file as the browser page title for the Customer Account Edit file. Previously, the Magento\Customer\Controller\Account\Edit controller action enforced the page title value to Account Information. GitHub-30724
  • Checkboxes that permit merchants to toggle between showing and hiding passwords have been added to these pages:
    • Customer Login
    • Customer Registration
    • Customer Edit (Change Password section)
    • Customer Set New Password GitHub-31557
  • Removed a redundant header in grid cells that appeared when an administrator added a product to a grouped product set after changing the attribute set. GitHub-30911
  • Magento now displays a DateRange filter on the Logged in area of the Customer > Login page. Previously, Magento displayed a Text filter. GitHub-30328
  • JavaScript has been removed from template files and moved into separate files to reduce rendering issues on Admin pages. Previously, Admin pages did not render properly in deployments in which minification of HTML had been enabled. Magento displayed this error: An error has happened during application run. See exception log for details. GitHub-32454
  • The dropdownDialog widget now loads only the draggable and resizable jquery-ui chunks it needs. Previously, it loaded large amounts of unnecessary code, which inflated load time and reduced performance. GitHub-32810

URL rewrites

  • Product URL rewrites for a specific website in a multi-site deployment are now generated as expected after products are assigned to a website by bulk update.
  • Magento now correctly generates the URL path for child categories when the Use Default Value checkbox for the URL key is enabled for the parent category. Previously, moving a category in the hierarchy resulted in an incorrect url_path value when using different URL keys in a multi-store view deployment. GitHub-16202
  • Magento now updates the url_path of the category that is assigned to all store scope when you move a category in the category hierarchy. Previously, moving a category in the hierarchy resulted in an incorrect url_path.
  • URL redirects that are created from the Admin using a custom URL now work successfully. Previously, GraphQL cached the response from a GraphQL urlResolver query and returned the old value after the URL rewrite update.
  • Product URL rewrites are now removed as expected when a product is removed from a website. GitHub-24184
  • Added a main_table reference to the store_id in the addStoreFilter function of the app/code/Magento/UrlRewrite/Model/ResourceModel/UrlRewriteCollection.php collection. Previously, problems occurred whenever a join is added to the collection on a table that also contains a store_id column. GitHub-31853
  • The PUT /V1/products/:sku REST endpoint now re-generates product URL rewrites as expected. Previously, the endpoint re-generated product url_key values but not URL rewrites. GitHub-30316

User

  • You can now save an effective new user role (Admin System > Permissions > User Roles) with the entire Catalog tree selected excluding Edit Product Design ( Catalog > Inventory > Products > Edit Product Design). Previously, Magento did not save product changes that were made by a user in this role and displayed this error: Not allowed to edit the product's design attributes. GitHub-31973
  • Magento now uses the correct custom email template when generating email for new administrators. Previously, Magento used the old default template, which omitted the administrator’s first and last names.
  • Magento now uses the correct email template when sending email to new users. Previously, Magento used the default template even when a custom template was selected.

VersionCMS

  • Magento now applies the correct theme to a CMS page after you change its layout. Previously, Magento changed the assigned theme to Luma after you saved your layout changes, no matter which theme was assigned to the page.
  • Administrators with restricted roles can now successfully add, update, or duplicate the pages that he has access to that are assigned to a hierarchy node. Previously, Magento threw a fatal error under these conditions.

Video

  • Videos are now available in the product gallery as expected when advanced JavaScript bundling is enabled and used. GitHub-32501
  • YouTube videos for simple products that belong to a configurable product now work as expected. Previously, images were ordered by ID instead of position. Consequently, some videos were treated like images. GitHub-29690

Visual Merchandiser

  • The performance of Admin category page loads with Visual Merchandiser has improved. Loading Admin category pages no longer generates large database queries.

Web API framework

  • The Catalog API now correctly updates a product’s custom option values by adding new values and removing old values. Previously, the API did not delete the old values.
  • POST /V1/guest-carts/:cartId/billing-address now returns address ID as an integer, not a string.

Website restriction

  • Shoppers are now redirected to the page they were trying to access before they were prompted to log in. Previously, in deployments where website restrictions were enabled and Restriction Mode were set to Private Sales: Login Only, shoppers were redirected to the store home page.

Widget

  • An administrator can now delete all of a widget’s layout updates. Previously, when a widget had multiple layout updates, an administrator could delete only the first.
  • Clicking the Add to Cart button on the product widget no longer results in a page reload. Previously, clicking the Add to Cart button on a product widget caused a current page to reload before the product was added to the cart.
  • The CMS hierarchy node link widget in TinyMCE now renders hierarchy links as expected when the Anchor Custom Text field is empty.

Wish list

  • Magento no longer resets a configurable product’s configuration settings when you click the Edit item button for the product from a wish list. GitHub-32119
  • Magento now displays the correct product price when you update a product with a customizable file option in the wish list. Previously, Magento displayed the wrong product price and did not display a link to the uploaded file.
  • The total product count in a wish list for a customer with multiple wish lists now matches the number of items in the wish list. Previously, out-of-stock products were included in the total product count.
  • Magento now removes a product from a wish list after adding it to an order. GitHub-30260
  • Shoppers can now add related products to their shopping cart from a wish list. Previously, Magento added only the configurable product, not the configurable product and its related products when a shopper clicked the Select all link of the Related Products section. GitHub-32274

Known issues

Issue: JavaScript error when reCAPTCHA is disabled. If reCAPTCHA is disabled for checkout, checkout proceeds, but Magento displays an Uncaught TypeError error in the console log. This issue will be fixed in a later release.

Issue: Content Security Policy error. The storefront displays the following error in the console log: The Content-Security-Policy directive frame-ancestors does not support the source expression unsafe-inline. Storefront performance is not affected.

Issue: Anomalies with PayPal Credit display of gift card amounts. When PayPal Credit is enabled and multiple gift card amounts are configured, if a shopper changes the amount for the value of a gift card, the storefront does not update the amount for installment payments. A fix for this issue will be included in Adobe Commerce 2.4.4 and Magento Open Source 2.4.4.

Issue: The Add to order button does not work for products added to the cart by SKU. Magento displays this error message when you click on the Add to order button after adding products to the order by SKU: An error has happened during application run. Products are not added to the cart. Workaround: Use the Add Products feature.

Issue: The GraphQL category and categoryList queries ignore Category permissions that determine whether categories in a shared catalog are hidden or exposed. The storefront currently displays all categories that have been assigned or unassigned to the shared catalog. This affects Adobe Commerce 2.4.3 deployments that implement a PWA storefront for which B2B shared catalogs have been enabled.

Community contributions

We are grateful to the wider Magento community and would like to acknowledge their contributions to this release.

The Magento Community Engineering team Magento Contributors maintains a list of top contributing individuals and partners by month, quarter, and year. From that Contributors page, you can follow links to their merged PRs on GitHub.

Partner contributions

The following table highlights contributions made by Partners. This table lists the Partner who contributed the pull request, the external pull request, and the GitHub issue number associated with it (if available).

Partner Pull Requests Related GitHub Issues
Atwix magento/magento2#31228, magento/magento2#31025, magento/magento2#30996, magento/magento2#31128, magento/magento2#31053, magento/magento2#30837, magento/magento2#31433, magento/magento2#31079, magento/magento2#31013, magento/magento2#31261, magento/magento2#31016, magento/magento2#30986, magento/magento2#31241, magento/magento2#31243, magento/magento2#31221, magento/magento2#31123, magento/magento2#31147, magento/magento2#31097, magento/magento2#31287, magento/magento2#31099, magento/magento2#31420, magento/magento2#31320, magento/magento2#30776, magento/magento2#31564, magento/magento2#31827, magento/magento2#31592, magento/magento2#31634, magento/magento2#31436, magento/magento2#31371, magento/magento2#31323, magento/magento2#31057, magento/magento2#31009, magento/magento2#31595, magento/magento2#31452, magento/magento2#31458, magento/magento2#31487, magento/magento2#31418, magento/magento2#31240, magento/magento2#31603, magento/magento2#31601, magento/magento2#31394, magento/magento2#31247, magento/magento2#31508, magento/magento2#31449, magento/magento2#31776, magento/magento2#31788, magento/magento2#29047, magento/partners-magento2ee#280, magento/magento2#32071, magento/magento2#31936, magento/magento2#31924, magento/magento2#31918, magento/magento2#31859, magento/magento2#31864, magento/magento2#31604, magento/magento2#31510, magento/magento2#31512, magento/magento2#31502, magento/magento2#31488, magento/magento2#31454, magento/magento2#31507, magento/magento2#31164, magento/magento2#31568, magento/magento2#31569, magento/magento2#31851, magento/magento2#32078, magento/magento2#31953, magento/magento2#31961, magento/magento2#30850, magento/magento2#31395, magento/magento2#31390, magento/magento2#31451, magento/magento2#32467, magento/magento2#32477, magento/magento2#32524, magento/magento2#32517, magento/magento2#32463, magento/magento2#32498, magento/magento2#32288, magento/magento2#32353, magento/magento2#32539, magento/magento2#32465, magento/magento2#32295, magento/magento2#32759, magento/magento2#31938, magento/magento2#32356, magento/magento2#30623, magento/partners-magento2ee#539, magento/partners-magento2ee#540 magento/magento2#31233, magento/magento2#31031, magento/magento2#31056, magento/magento2#31130, magento/magento2#31074, magento/magento2#30858, magento/magento2#31438, magento/magento2#31160, magento/magento2#31034, magento/magento2#31168, magento/magento2#31033, magento/magento2#31039, magento/magento2#31250, magento/magento2#31249, magento/magento2#31234, magento/magento2#31129, magento/magento2#31153, magento/magento2#31132, magento/magento2#31290, magento/magento2#31131, magento/magento2#31440, magento/magento2#31327, magento/magento2#30784, magento/magento2#31575, magento/magento2#31844, magento/magento2#31628, magento/magento2#31647, magento/magento2#31437, magento/magento2#31442, magento/magento2#31325, magento/magento2#31073, magento/magento2#31036, magento/magento2#31627, magento/magento2#31632, magento/magento2#31522, magento/magento2#31521, magento/magento2#31441, magento/magento2#31251, magento/magento2#31624, magento/magento2#31626, magento/magento2#31403, magento/magento2#31248, magento/magento2#31516, magento/magento2#31524, magento/magento2#31801, magento/magento2#28522, magento/partners-magento2ee#28586, magento/partners-magento2ee#31435, magento/partners-magento2ee#31560, magento/partners-magento2ee#31561, magento/magento2#32072, magento/magento2#31937, magento/magento2#31902, magento/magento2#31860, magento/magento2#31865, magento/magento2#31623, magento/magento2#31515, magento/magento2#31514, magento/magento2#31519, magento/magento2#31520, magento/magento2#31517, magento/magento2#31075, magento/magento2#31574, magento/magento2#31573, magento/magento2#31852, magento/magento2#32079, magento/magento2#31954, magento/magento2#31962, magento/magento2#30855, magento/magento2#30645, magento/magento2#31523, magento/magento2#32505, magento/magento2#32504, magento/magento2#32583, magento/magento2#32518, magento/magento2#32507, magento/magento2#32569, magento/magento2#32502, magento/magento2#32379, magento/magento2#32279, magento/magento2#32568, magento/magento2#32506, magento/magento2#32377, magento/magento2#4451, magento/magento2#32577, magento/magento2#29631, magento/magento2#30210, magento/partners-magento2ee#32574, magento/partners-magento2ee#32928
Blue Acorn iCi magento/magento2#31022, magento/magento2#28926, magento/magento2#30992, magento/magento2#30881, magento/magento2#30938, magento/magento2#31621 magento/magento2#30265, magento/magento2#29528, magento/magento2#30286, magento/magento2#30880, magento/magento2#29690, magento/magento2#27678
Cedcommerce magento/magento2#30410, magento/partners-magento2ee#444, magento/magento2#31736, magento/magento2#31584, magento/partners-magento2ee#449 magento/magento2#30424, magento/partners-magento2ee#31111, magento/magento2#31660, magento/partners-magento2ee#31331
Krish TechnoLabs magento/magento2#31142, magento/magento2#29991, magento/magento2#31208, magento/magento2#29804 magento/magento2#30911, magento/magento2#29936, magento/magento2#31188, magento/magento2#29365, magento/magento2#29805
EY magento/magento2#31369, magento/magento2#30615, magento/magento2#31490, magento/partners-magento2ee#445 magento/magento2#4451, magento/magento2#29302, magento/partners-magento2ee#31196
TechDivision magento/magento2#30943 magento/magento2#30936
AYKO magento/magento2#32389 magento/magento2#32088
Fast White Cat magento/magento2#31157, magento/magento2#31886 magento/magento2#30724, magento/magento2#30471
Fisheye magento/magento2#30695 magento/magento2#30788
Vaimo magento/magento2#30626 magento/magento2#30622
Ziffity magento/partners-magento2ee#451, magento/magento2#31482 magento/magento2#31557
MRM Commerce magento/magento2#32612, magento/magento2#32610 magento/magento2#32578, magento/magento2#32658
Aligent Consulting magento/magento2#30910 magento/magento2#30909

Individual contributor contributions

The following table identifies contributions from our community members. This table lists the external pull requests, the GitHub issue number associated with it (if available), and the community member who contributed the pull request.

Contributing community member Pull Requests Related GitHub Issues
dhaecker #31045  
sagar1dahiwala #31101 501
zaximus84 #31022 30265
ihor-sviziev #31151 31152
AnnaAPak #31079 31160
AnnaAPak #31013 31034
aligent-lturner #30910 30909
thomas-kl1 #30822 30830
gwharton #30868 28511
sky-hub #30953 30952
pawel-siejba #30626 30622
Chandresh22 #30477 30270
matiashidalgo #28926 29528
shawnabramson #27845 26909
engcom-Golf #31189 31090
engcom-Echo #31066 31095
vovayatsyuk #31275 31291
sergiy-v #31228 31233
korovitskyi #31261 31168
zaximus84 #30881 30880
sergiy-v #30996 31056
AnnaAPak #31016 31033
AnnaAPak #30986 31039
sergiy-v #31025 31031
zaximus84 #30992 30286
ilnytskyi #31098 31135
saphaljha #31142 30911
saphaljha #29991 29936
AnnaAPak #31147 31153
sergiy-v #31128 31130
DmitryFurs #31165 31239
AnnaAPak #31221 31234
AnnaAPak #31241 31250
AnnaAPak #31243 31249
AnnaAPak #31123 31129
Usik2203 #30837 30858
AnnaAPak #31097 31132
Usik2203 #31053 31074
vpsnak #31021 31032
mrtuvn #30634 30584
driskell #28007 8933, 18409, 22438, 23054, 25634, 26507, 26809
AnnaAPak #31287 31290
AnnaAPak #31099 31131
GovindaSharma #30410 30424
kate-kyzyma #31433 31438
AnnaAPak #31420 31440
DmitryFurs #31166 31171
Bartlomiejsz #31157 30724
elisei #31212 31211
nikolalardev #30959 31040
kandy #30990 31038
viniciusbordinhao-blueacorn #30938 29690
engcom-Golf #31368 30964
SmVladyslav #31352 30284
SmVladyslav #31422 30256
mrtuvn #31330 31445
sergiy-v #31320 31327
AnnaAPak #31436 31437
AnnaAPak #31371 31442
aleksinoleg #31334 31471
vovayatsyuk #31162 31170
srenon #31198 31197
AnnaAPak #31323 31325
AnnaAPak #31057 31073
Usik2203 #30776 30784
Nazar65 #31308 31288
AnnaAPak #31009 31036
engcom-Golf #31563 30250
engcom-Golf #31594 23843
AnnaAPak #31452 31632
sergiy-v #31564 31575
AnnaAPak #31595 31627
ihor-sviziev #31542  
engcom-Kilo #31629 31591
engcom-Echo #31501 26214
engcom-Echo #31553 22662
AnnaAPak #31240 31251
chiranjeevi-cj #31369  
AnnaAPak #31418 31441
AnnaAPak #31458 31522
AnnaAPak #31487 31521
AnnaAPak #31601 31626
AnnaAPak #31603 31624
AnnaAPak #31394 31403
vovayatsyuk #31321 31326
AnnaAPak #31247 31248
saphaljha #31208 31188
aapokiiso #30950 31042
nikunjkotecha #21857 21853
engcom-Kilo #31646 11995
mrtuvn #31793 7231
navarr #31621 27678
kate-kyzyma #31827 31844
sergiy-v #31592 31628
sergiy-v #31634 31647
mrtuvn #31754 30506
AnnaAPak #31508 31516
AnnaAPak #31449 31524
nikolalardev #31158 31169
AnnaAPak #31488 31520
AnnaAPak #31454  
AnnaAPak #31510 31515
AnnaAPak #31502 31519
AnnaAPak #31512 31514
engcom-Charlie #31485 25907
AnnaAPak #31604 31623
MellenIO #31636 31641
AnnaAPak #31507 31517
sergiy-v #31788 31801
sergiy-v #31776  
mrtuvn #30871 30882
PierW #31299 31300
larsroettig #30943 30936
edspc #30883 31530
ravi-chandra3197 #29804 29365, 29805
dineshvb #30615 29302
victorpetryk #31892 31890
engcom-Echo #31957 31891
shikhamis11 #31736 31660
SmVladyslav #32120 32119
victorpetryk #32107 32106
sergiy-v #31859 31860
sergiy-v #31864 31865
engcom-Charlie #31875 26521
achatpc #31815 31853
sergiy-v #31936 31937
sergiy-v #31924 31902
kate-kyzyma #31918  
engcom-Charlie #32095 28996
sergiy-v #32071 32072
AnnaAPak #31569 31573
AnnaAPak #31568 31574
maksymz #31804 11175, 31873
engcom-Hotel #31750 30802
dorupetruc #31205 31216
rain2o #27315 12584
engcom-Kilo #32217 27285
engcom-Kilo #32239 31950
mastiuhin-olexandr #32002 32000
engcom-Charlie #32009 30316
sergiy-v #32078 32079
engcom-Charlie #32082 23297
Den4ik #32187 31608
ihor-sviziev #32299 32313
fnogatz #32249 32262
Bartlomiejsz #31886 30471
sergiy-v #31953 31954
ihor-sviziev #31933 31948
sergiy-v #31851 31852
AnnaAPak #31451 31523
AnnaAPak #31390 30645
AnnaAPak #31395  
engcom-Charlie #31645 30492
AnnaAPak #30850 30855
ajithkumar-maragathavel #31482 31557
edenduong #30329 30328
SmVladyslav #32275 32274
engcom-Kilo #32301 32232
engcom-Kilo #32326 31849
engcom-Kilo #32363 30149
ihor-sviziev #32462 26377, 32440
gixid192 #32393 30257
gixid192 #32398 31633
engcom-Charlie #32212 30756
engcom-Charlie #32186 32116
sergiy-v #31961 31962
engcom-Charlie #32273 17727
mamsincl #32389 32088
bogutskyy #30755 30577
AntonEvers #28973 29549
zakdma #32580 27656
engcom-Kilo #32650 31956
mastiuhin-olexandr #32194 32102
quisse #27012 22273
sivaschenko #32710 32709
hostep #32639 32644
engcom-Foxtrot #32646 32647
engcom-Charlie #32254 19345
Skullsneeze #32298 32671
kate-kyzyma #32288 32379
in-session #32400 32495
mrtuvn #32434 32454
ihor-sviziev #32532 27411, 32525
kate-kyzyma #32498 32502
kate-kyzyma #32463 32507, 32569
sergiy-v #32517 32518
kate-kyzyma #32524 32583
kate-kyzyma #32477 32504
kate-kyzyma #32467 32505
charles-tychons #32448 32616
bgorski #32612 32578
bgorski #32610 32658
ProkopovVitaliy #31938 32577, 4451
mrtuvn #31080 31140
fredden #30695 30788
thomas-kl1 #30823 30860
engcom-Kilo #32730 23645
kate-kyzyma #32465 32506
ihor-sviziev #32499 32501
kate-kyzyma #32539 32568
Usik2203 #32353 32279
vlmed #32356  
martasiewierska #32802 32810
DmitryTsymbal #32759  
hostep #32145 32786
engcom-Foxtrot #32099 32100
erfanimani #31985 31984
kate-kyzyma #32295 32377
vidyli #31296 24635
engcom-Kilo #32755 24363
ihor-sviziev #32614 31777, 826
rogyar #30623 29631, 30210

System requirements

Our technology stack is built on PHP and MySQL. For more information, see System Requirements.

Installation and upgrade instructions

You can install Adobe Commerce 2.4.3 using Composer.

Migration tool kits

The Data Migration Tool helps transfer existing Magento 1.x store data to Magento 2.x. This command-line interface includes verification, progress tracking, logging, and testing functions. For installation instructions, see Install the Data Migration Tool. Consider exploring or contributing to the Magento Data Migration repository.

The Code Migration Toolkit helps transfer existing Magento 1.x store extensions and customizations to Magento 2.x. The command-line interface includes scripts for converting Magento 1.x modules and layouts.