Adobe Commerce 2.4.2 release notes

Adobe Commerce 2.4.2 introduces enhancements to performance and security plus significant platform improvements. Security enhancements include expansion of support for the SameSite attribute for all cookies. B2B improvements focus on support for online payments for purchase orders. Elasticsearch 7.9.x and Redis 6.x are now supported.

This release includes over 280 new fixes to core code and 35 security enhancements. It includes the resolution of almost 290 GitHub issues by our community members. These community contributions range from minor clean-up of core code to significant enhancements in GraphQL.

All known issues identified in 2.4.1 have been fixed in this release.

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

Apply AC-3022.patch to continue offering DHL as a shipping carrier

DHL has introduced schema version 6.2 and will deprecate schema version 6.0 in the near future. Adobe Commerce 2.4.4 and earlier versions that support the DHL integration support only version 6.0. Merchants deploying these releases should apply AC-3022.patch at their earliest convenience to continue offering DHL as a shipping carrier. See the Apply a patch to continue offering DHL as shipping carrier Knowledge Base article for information about downloading and installing the patch.

Security patch available

Merchants can now install time-sensitive security fixes without applying the hundreds of functional fixes and enhancements that a full quarterly release provides (for example, 2.4.1-p1). Patch (Composer package 2.4.1-p1) is a security patch that provides fixes for vulnerabilities that have been identified in our previous quarterly release, 2.4.1. All hot fixes that were applied to the 2.4.1 release are included in this security patch. (A hot fix provides a fix to a released version that addresses a specific problem or bug.)

For general information about security patches, see Introducing the New Security Patch Release. For instructions on downloading and applying security patches (including patch 2.4.1-p1), see Quick start on-premises installation. Security patches include security bug fixes only, not the additional security enhancements that are included in the full patch.

Other release information

Although code for these features is bundled with quarterly releases , 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.


Look for the following highlights in this release.

Substantial security enhancements

This release includes over 35 security fixes and platform security improvements. All security fixes have been backported to 2.4.1-p1 and 2.3.6-p1.

Over 35 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 include:

  • All core cookies now support the SameSite attribute.

  • The application now displays messages that identify potentially malicious content in product and category description fields when the user tries to save values in these fields.

  • File system operations across Components have been standardized and hardened to prevent malicious uploads.

  • Core Content Security Policy (CSP) violations have been fixed.

Starting with the 2.3.2 release, 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 to core quality, which improve the quality of the Framework and these functional areas: Customer Account, Catalog, CMS, OMS, Import/Export, Promotions and Targeting, Cart and Checkout, B2B, and Staging and Preview.

Platform enhancements

  • Elasticsearch 7.9.x is now supported. Although we recommend running Elasticsearch 7.9.x, version 2.4.x remains compatible with Elasticsearch 7.4.x.

  • 2.4.2 has been tested with Varnish 6.4. Version 2.4.x remains compatible with Varnish 6.x.

  • Redis 6.x is now supported. Version 2.4.x remains compatible with Redis 5.x.

  • 2.4.2 is now compatible with Composer 2.x. We recommend that merchants migrate to Composer 2.x. Although you can install this release using Composer 1.x, Composer 1.x will soon reach end-of-life. For an overview of Composer 2.x features, see Composer 2.0 is now available!

The ability to configure an installation to use a split database has been deprecated in this release. Merchants who currently use split database should start planning to revert to or migrate to a single database or use an alternative approach. See the Deprecation of split database functionality in Adobe Commerce DevBlog post for an overview of this issue. See Revert from a split database to a single database for migration instructions.

Performance enhancements

This release includes code enhancements that boost API performance and Admin response time for deployments with large catalogs. Multiple scalability enhancements enable 2.4.2 to natively support complex catalogs up to 20x larger than in previous releases.


This release adds GraphQL coverage for the following features:

  • Added support for multiple wishlists. You can use GraphQL to create, delete, and rename wishlists as well as move or copy items between them.

  • Added support for returned merchandise authorizations (RMA). Shoppers can request a return. If the merchant accepts the request, the shopper can perform tasks such as adding a comment and add tracking information.

  • Added support for the following B2B features:

  • Added support for unions in GraphQL. GitHub-29425

  • Added support for comparison lists. Shoppers can create and delete comparison lists, and add and remove items to the comparison lists. In addition, shoppers that create a compare list as a guest can log in as a customer and retain their comparison lists.

  • Added the generateCustomerTokenAsAdmin mutation and updated the Customer object to support remote purchasing assistance.

  • Added localization support across stores to support tasks such as changing languages, carts, and currencies.

  • The GraphQL schema has been enhanced to optimize product data retrieval for configurable products with many variants.

  • Integer type object IDs have been deprecated in favor of uid attributes of type ID.

  • Added the staging attribute to the ProductInterface and CategoryInterface to determine if a product is staged and to view its associated campaign information.

See the GraphQL Developer Guide for details on these enhancements.


2.4.2 introduces B2B v1.3.1. This release includes support for online payments for purchase orders as well as multiple bug fixes.

Purchase orders can now be completed using online payment methods. B2B buyers are prompted to select their preferred payment method for each purchase order during the initial checkout. After the purchase order has been approved, buyers are prompted to enter payment details to convert the purchase order to a final order.

To support a complete workflow for accepting online payments, this feature also:

  • Overrides existing payment method templates during initial checkout to maintain PCI compliance.

  • Maintains compatibility with third-party, custom, and community-developed payment methods.

  • Notifies buyers by email when they need to add payment details to an approved purchase order.

  • Enables customization of emails from the Admin, which allows merchants to use templates that are consistent with their branding.

  • Introduces an Approved – Pending Payment state for purchase orders to clearly show when action is required.

  • Prevents discount codes from being added or removed at the final payment step, which ensures that the order total amount remains unchanged for approved purchase orders.

  • Allows buyers to change the payment method during the final payment step to maintain flexibility and increase conversion.

This release also includes multiple bug fixes. See B2B Release Notes.

PWA Studio

This release of PWA Studio includes:

  • Internationalization and localization. Venia now provides support for multiple languages and currencies.

  • Improved extensibility framework to support code changes through extensions.

  • Initial components for My Account related features such as Wishlist, Saved Payments, Address Book, and Order History.

  • Various performance optimizations and bug fixes.

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

Page Builder

This release includes enhancements to Page Builder content migration and Page Builder CSS customization:

  • Developers can now style content type output differently per viewport without using the !important directive.

  • Content migrated to Page Builder is no longer padded with default inline styling.

  • Page Builder no longer requires all content types to be placed within a row. The Page Builder stage is now initially blank and supports adding the following content types directly to the stage: Rows, Columns, Tabs, HTML Code, Blocks, Dynamic Blocks.

  • Predefined margins and paddings are no longer required for content types.

  • The new mobile viewport switcher and viewport scope for form field values lets users and developers perform these actions:

    • View content on different view ports when authoring.

    • Optimize minimum height field parameter on different content types for each viewport. (Only one parameter (min height) is supported out of the box. Custom development required to enable mobile optimization for other content parameters.)

    • Add field scope to custom fields and field sets (developers).

Interactive In-Product Guidance

Interactive In-Product Guidance provides merchants with usage tips and information from within the Admin on new feature announcements, walk-through guides, on-boarding information, and tool tips. Administrators must opt-in from the Admin to receive in-product guidance if this feature is not enabled. See Usage Data Collection and Admin Usage.

Adobe Stock Integration

This release includes Adobe Stock Integration v2.1.1.

New Role Resources for Media Gallery. This release provides merchants the ability to limit administrator access to only the Media gallery and to control who can perform these actions:

  • Insert media assets into content

  • Upload assets

  • Edit assets details

  • Delete assets from the Media Gallery

  • Manage folder structure.

Web-optimized images in content. Merchants can now use web-optimized image rendition in content instead of high resolution images. The original image remains unmodified in the Media Gallery, and the image rendition is dynamically generated when the image is inserted in the content.

AWS S3 support enhancements

Amazon Simple Storage Service (AWS S3) support has been enhanced to include support for:

Support for AWS S3 has been added to all modules including B2B, PageBuilder, and Adobe Stock Integration.

Functional Testing Framework (MFTF)

MFTF 3.2.1 is now available. This release introduces error tolerance in both tests and test suite generation. Additional enhancements and bug fixes are described in the Functional Testing Framework Changelog.

Order Management System (OMS)

The MCOM Connector is fully compatible with 2.4.2. Bug fixes and enhancements to the connector are described in Release notes for Connector. This release includes improvements to the OMS command-line interface, which now provides verbose information that partners and support teams can use to troubleshoot retry, queue_prune, order_sync, message process, and catalog export processes.

Vendor Developed Extensions

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

Fixed issues

We have fixed hundreds of issues in the 2.4.2 core code.

Installation, upgrade, deployment

  • Merchants can now successfully upgrade an Open Source deployment that runs MySQL 8.x to a Commerce deployment. Previously, the application threw an exception when AUTO_INCREMENT values reverted to initial values for all tables where row_id was added during upgrade.
  • The application now displays an error message that identifies the path that was used to create the patch if an error occurs when running bin/magento/setup:db:generate-patch. GitHub-27523
  • block_html, full_page, and layout caches are now disabled as expected after bin/magento/setup:upgrade execution. GitHub-28186
  • The minimum required PHP version in bootstrap.php has been updated. GitHub-30004
  • You can now execute bin/magento/setup:upgrade after installing sample data. Previously, when you tried to execute bin/magento/setup:upgrade, the application displayed this error: unable to apply data patch magento\catalogrulesampledata\setup\patch\data\installcatalogrulesampledata for module magento_catalogrulesampledata. The application also displayed this error in the system log: main.ERROR: Sample Data error: Unable to unserialize value. Error: Syntax error. GitHub-30685
  • You can now set a YouTube API key from the command line as expected. Previously, the applicationreturned this error when you tried to execute bin/magento config:sensitive:set catalog/product_video/youtube_api_key: There are no sensitive configurations to fill.
  • The application now honors the maxMessages values that are defined in queue_consumer.xml. Previously, the applicationused only the deployment configuration values. GitHub-29522
  • URL generation for a new store now works as expected when the store is created using bin/magento setup:config:import. Previously, URL rewrites were not generated in production environments. GitHub-30025
  • The application no longer displays this question when you run bin/magento setup:install to connect to existing database: Overwrite the existing configuration for db-ssl-verify?[Y/n]. GitHub-29612


  • The Add New Rating button and the Save, Delete, Reset buttons are no longer available on the Stores > Attribute > Rating page for an administrator with restricted permissions.
  • The Admin now displays data only from websites that the logged-in administrator has permissions to. Previously, the Admin displayed data from all websites in the deployment.
  • All selected websites are now stored in gws_websites regardless of the size of the website ID. Previously, website IDs were truncated, and the list of selected websites was not stored in the database. User roles were not correctly saved, and the application displayed this error when a merchant tried to change and save a role: The "X" store ID is incorrect. Verify the store ID and try again.
  • The application now displays the correct item count in Admin grids for restricted admin users. Previously, counts displayed for these grids reflected data for all countries while the grids themselves displayed data from specific countries only. (This fix corrects an issue with Customers Segments, Catalog Price Rules, Cart Price Rules, All Users, Locked Users and User Roles grids.)
  • Administrators whose permissions exclude Magento_Catalog::edit_product_design (Edit Product Design) can now create a new product by saving an existing product with a new name in the selected store view. Previously, the application displayed this error: Not allowed to edit the product's design attributes. GitHub-28106
  • The application no longer displays the Add Attribute button on pages under Stores > Attributes when an administrator lacks the appropriate permissions to create these entities. Previously, the application threw a 404 error when a website administrator who did not have the appropriate permissions tried to create an Attribute Set or Customer attribute.
  • The application no longer throws an error when you try to change backend-frontname using the ssh container after installing Adobe Commerce. GitHub-26762

Adobe Stock Integration

  • Added support for reading exif_image.png or exif-image.jpeg metadata. GitHub-1449
  • The content displayed when you click the Default View bookmark for the Media Gallery is no longer filtered. Previously, the default view contained a filter that was applied from url-filter applier. GitHub-1813, GitHub-1789, GitHub-1780
  • Logic has been removed from the WYSIWYG OnInsert controller (Magento\Cms\Controller\Adminhtml\Wysiwyg\Images\OnInsert::execute()) and added to the Model\Wysiwyg\Images\PrepareImage::execute() model. GitHub-1504
  • Area emulation has been removed from the media-content:sync command (\Magento\MediaContentSynchronization\Console\Command\Synchronize::execute). GitHub-1784


  • Advanced Reporting now works as expected for multiple environments in the same domain. Previously, CSV files that were generated by Advanced Reporting failed because double quotes were escaped with backslashes rather than with another double quote as required by CSV standard RFC4180.
  • The analytics_collect_data job now runs successfully when using either the default or non-default port to connect to MySQL in env.php. Previously, analytics_collect_data threw an error when you used the non-default port.
  • CSV files that are generated by analytics_collect_data are now properly escaped. Previously, these files were not generated with the correct escaping, which prevented the generation of Inventory reports.


  • Shoppers can now use Apple Pay to successfully place an order for virtual products. Previously, the application threw this error: There are no shipping methods available for you right now. Please try again or use an alternative payment method.

  • The default PayPal Express Checkout payment method now works as expected with the Braintree Credit Card payment method. Previously, the application did not display the PayPal button when the Braintree Credit Card payment method was enabled.

Bundle products

  • The application no longer sets prices for fixed-price bundle product child items in quotes.
  • Price sorting now works as expected when bundle products include out-of-stock products. Previously, sorting price in descending order did not display products in order of decreasing price.
  • The application now automatically applies a default quantity of 1 for bundle product options when many options exist. Previously, merchants had to manually assign a default quantity to each option.
  • The order invoice create page now displays the child products for bundle products as expected. GitHub-27350
  • The application now assigns correct product prices when you re-order simple products that are part of a bundle product with a custom price. Previously, setting a custom price on a bundle product resulted in incorrect prices on attached simple products when reordered. GitHub-30343
  • Calling POST /V1/order/{orderId}/ship to ship an order that contains a bundle product now marks the order as complete as expected. Previously, the application displayed this error message: You can't create a shipment without products. GitHub-9762

Cart and checkout

  • The shipping method estimator now works as expected when custom address attributes are present on the shipping step of the checkout workflow. Previously, the application displayed this error message: {"message":"Error occurred during \"custom_attributes\" processing. A custom attribute is specified with a missing attribute code. Verify the code and try again."} GitHub-27505
  • The application now displays the You have no items in your shopping cart message in the mini cart as expected when a shopper removes the only item in their cart. Previously, cart data was not updated for checkout/cart/removeFailed when a shopper removed the single item, and the application displayed this message: 1 product requires your attention.
  • The application no longer displays the cost of shipping for an order for a non-applicable shipping method. Previously, the application displayed a price of 0 for a non-applicable shipping method in the checkout workflow.
  • A customer’s default billing address is now selected when the My billing and shipping address are the same checkbox on the checkout workflow is unselected.
  • Administrators can add a product to a shopping cart by SKU from the Admin without being redirected away from the Admin. The administrator is no longer redirected to a storefront page, and the application displays the product in the Admin Shopping Cart Items section as expected.
  • The application now displays informative error messages when you upload a CSV file that contains multiple types of errors when adding products to the cart by SKU. Previously, the application displayed a blank page and generic error message when you clicked Choose File on Manage Shopping Cart > Add to Shopping Cart by SKU.
  • Cart contents are no longer lost when a shopper switches from one store to another in a different domain.
  • Shoppers can now successfully complete an order using Check Out with Multiple Addresses when using multiple shipping methods. Previously, the application displayed this error: There has been an error processing your request. GitHub-30197
  • The application now displays the correct default country on the shipping page of the checkout workflow when the shopper changes the store view from the shopping cart.
  • The application now excludes the current session when cleaning up customer sessions after a post-logout password reset when a guest shopper is logged in. Previously, the applicationemptied the shopping cart when the shopper reset their password.
  • The application now displays the correct default country for a store view when a shopper changes the store view in the shopping cart. Previously, when the store view was changed in the cart, the default country was incorrect.
  • The sequence in which catalog permissions are configured no longer prevents administrators with the correct permissions from adding products to the cart. Previously, the application did not verify the addToCart configuration settings for the current customer group. As a result, when an administrator tried to add a product to the cart, the application threw an error.
  • Redundant calls to the /rest/V1/guest-carts/cart_id/totals-information endpoint on the cart have been removed, which has improved cart performance. Previously, when a shopper added a product to the cart and then subsequently viewed the cart, the application called the collectAddressTotals method multiple times.
  • The application no longer displays the Region field for a country in the checkout workflow when the Allow to Choose State if It is Optional for Country setting is disabled. GitHub-30747
  • The application no longer repeats a shipping address in the storefront checkout workflow when an order is re-ordered from the Admin.
  • Corrected problems with the design of AdminMediaGalleryInsertLargeImageFileSizeTest.
  • All new records in the quote table for guests are now assigned a value of 1 in the customer_is_guest field. Previously, for each new guest who added a product into cart, the record was assigned a 0 in thequote.customer_is_guest field.
  • The Submit button on the Review & Payments section of the checkout workflow has been moved to inside <form id="purchaseorder-form"...></form>, which makes implicit form submission possible without altering any JavaScript. GitHub-27925
  • The application no longer displays the Region field on the checkout workflow when the Allow to Choose State if It is Optional for Country setting is disabled. GitHub-30747
  • The application now correctly updates a cart’s item subtotal when a shopper clicks Update Shopping Cart while checking out with multiple addresses. GitHub-30408
  • The application no longer throws an exception when config.xml nodes exist for payment methods that are not currently installed. Previously, the application threw an exception during checkout. GitHub-29555
  • The application now renders product names that contain special characters correctly in the mini cart. GitHub-29075
  • The application now sets the correct discount package for table rate. Previously, the application did not apply a cart rule that set a discount on the cart when it calculated table rate. GitHub-30169

Cart price rule

  • Cart price rules are now applied as expected when order subtotals are calculated without incorporating tax. The new Subtotal (Incl. Tax) option has been added as a cart price rule condition.
  • Applying a price rule with a coupon using GraphQL now works as expected when the Fixed amount discount for whole cart action is used.


  • The application now displays all re-enabled products in the storefront as expected. Previously, when a product was disabled and then re-enabled, the application did not display the product until the Varnish page cache was cleared or the store re-indexed because the page cache was not invalidated after re-enabling a product.
  • Partial re-indexing of large catalogs now works as expected. Previously, products randomly disappeared from the storefront category page during re-indexing with the catalogsearch_fulltext partial indexer.
  • Shoppers can now re-order an invoiced order of a product with customizable options as expected. Previously, the application threw this error when a shopper tried to re-order: {"0":"The product's required option(s) weren't entered. Make sure the options are entered and try again.
  • You can now successfully set the Layout setting on the Category Design page to No layout updates. Previously, the applicationreverted to Category - FullWidth when you assigned the No layout updates value.
  • Problems with product sort order on the storefront have been resolved. Previously, when the application indexed product prices, it occasionally set a configurable product’s min_price and max_price to 0 in the catalog_product_index_price table, which affected price sort order on the storefront.
  • The application now successfully updates attributes that are labeled Product Type. Previously, because the product_type attribute was reserved in the code, the application displayed this message when you tried to update a Product Type attribute: An attribute with the same code (product_type) already exists.
  • The application no longer changes the position of an uploaded video in the Images and Videos section of the product details page when you save the product. Previously, the new image position was assigned an index value (position in the list) and if existing image positions were not aligned with their indices values, the new image was misplaced in the list.
  • The Add to Cart functionality now works as expected whenever the Add to Cart button ia available to click. Previously, if you clicked this button multiple times while waiting for a product page to load, the application threw this error: Invalid Form Key. Please refresh the page.
  • The application no longer flushes category cache when a merchant adds or removes disabled products to or from a category. Previously, the applicationflushed the cache for related categories despite product status. Categories were also unassigned when a category was saved, which led to flushing of category cache.
  • Catalog product filtering within the All store view scope now works correctly. Previously, products with a status of either Enabled or Disabled were displayed in the grid while filtering only enabled or disabled products.
  • Partial re-indexing no longer results in missed products and empty categories.
  • Re-order now works as expected when Use JavaScript Calendar is enabled (Stores > Configuration > Catalog > Date & Time Custom Options). Previously, when this setting was enabled, the application displayed this error when you tried to re-order the previously placed order from the Admin: Please specify date required option(s).
  • The application now displays the correct currency in multi-site deployments during tier price creation.
  • Product image custom attributes are now correctly escaped. The data-src attribute has the same value as src attribute, as expected. Previously, URL special symbols were escaped.
  • Updating a category through the REST API no longer disables the Use Default Value setting on the Enable Category, Include in Menu, and URL Key attributes.
  • Enabling category permissions from the Admin no longer results in a failure to cache category pages in full page cache during repeat visits to the category page. Previously, subsequent visits to the page were not served from the cache as expected, and performance was degraded.
  • Saving a category now flushes only the block cache that is related to this category. Previously, the applicationflushed the cache for all category blocks.
  • The price of a custom option with a percent price is now converted as expected into the active store’s base currency in multi-store deployments. Previously, the price of a custom option with a percent price was converted incorrectly. GitHub-26432
  • The application now recreates images successfully, and these images are visible in the Admin as expected whenever a merchant sends media gallery data using POST rest/all/V1/products. Previously, the applicationrecreated the images but deleted them when a merchant sent media gallery data via POST rest/all/V1/products if the images were deleted in pub/media but there were still records in media still contained records for these images. As a result, the merchant saw only placeholders in the Admin because the images were created and deleted during the update process.
  • Records are now deleted as expected when you unassigned an item from a website. Previously, images were duplicated when POST rest/all/V1/products was executed.
  • The /V1/categories/{categoryId}/products call now returns a list of all products that belong to the parent category as expected. Previously, if a product belonged to more than one subcategory of the parent category, the application threw this type of error: Internal Error. Details are available in the application log file. Report ID: webapi-5f8579e37db54. GitHub-30461
  • The /V1/products/attributes/:attributeCode/options REST endpoint now supports updating an existing attribute option.
  • The price of a custom option with a percent price is now converted as expected into the active store’s base currency in multi-store deployments. Previously, the price of a custom option with a percent price was converted incorrectly. GitHub-26432
  • Merchants can now successfully save a new attribute during product creation. Previously, the application did not save the attribute and redirected the merchant to the store view home page when they tried to save the attribute. GitHub-30362
  • The product grids on the Sales > Orders and Catalog > Products pages now list all relevant stores, not just the most recently created store. GitHub-29267
  • Product repository now uses store_id when available to save attribute values for an existing product. Previously, the product repository class overrode the product store ID and always assigned the default store ID. GitHub-29933

Catalog Rule

  • Catalog price rules now work as expected with custom options on product detail pages. Previously, product prices on that page did not reflect applicable catalog price rules. GitHub-22856
  • Product and catalog caches now expire as scheduled. Previously, caches expired daily because сron ran the catalogrule_apply_all task once daily, which re-indexed all catalog rules and dependent indexers, and cleared the cache for all products and categories.


Typo and grammar cleanup

  • The title of the Order Failure page has been revised for accuracy. Previously, this page was titled: We received your order!. GitHub-29416
  • Removed unnecessary spaces in app/code/Magento/Contact/view/frontend/templates/form.phtml. GitHub-29779
  • Corrected a typo in the help message for the bin/magento/setup:config:set subcommand. GitHub-28802
  • Corrected grammar in the PHPDoc for the framework/Registry.php file. GitHub-29661
  • Removed extraneous whitespace from app/code/Magento/Catalog/Helper/Product/View.php. GitHub-30601
  • Corrected a typo in a function name in app/code/Magento/Ui/view/base/web/js/form/element/ui-select.js. GitHub-29987
  • Corrected the pluralization of “item” in the mini cart and checkout order summary. GitHub-29920
  • Removed whitespace in inline elements in markup layered navigation filters. GitHub-30448
  • rl has been corrected to url in \Magento\Framework\Filter\Template\Tokenizer\Parameter. GitHub-29185

Code cleanup

  • An extraneous HTML <br> tag has been removed from the Check Data message area of the System > Import page.
  • AccessChangeQuoteControl and its unit tests have been refactored. GitHub-29672
  • Corrected the code style of the return type declaration in app/code/Magento/Captcha/CustomerData/Captcha.php. GitHub-29712
  • Corrected the position of the button list on the New Attribute page.
  • Added the correct block class for the frontend viewModel reference example for the \Magento\Framework\View\Element\Template class. GitHub-30450
  • A redundant fieldset in the Sale Rule form has been removed. GitHub-29599
  • Unnecessary code has been removed from the hierarchy/edit.phtml template.
  • Corrected PHPdoc comment in app/code/Magento/CatalogImportExport/Model/Export/Product.php. GitHub-30833
  • The docblock annotation for the PublisherInterface message has been corrected. GitHub-30190
  • Corrected arguments in the getStatusByState method. GitHub-30173
  • Corrected method description in app/code/Magento/Quote/Model/Cart/Totals/ItemConverter.php. GitHub-30125
  • Removed redundant variable assignments in the same line in multiple files. GitHub-30133
  • Changed @param string $attribute to @param AbstractAttribute|string[]|string $attribute in EntityAbstract.php. GitHub-30191
  • Invalid tags (for example, @package and @subpackage) have been removed from docblocks throughout the code base. GitHub-30061
  • Unused parameters in the construct of the AdvancedPricing class have been removed. GitHub-29531

Configurable products

  • Filtering out-of-stock configurable products by price now displays results within the correct price range.
  • A virtual product no longer changes type when its status is changed from enabled to disabled (or vice versa). Previously, the application changed a product’s type from virtual to simple when its status changed.
  • The getValue() method no longer triggers a fatal error when updating carts.
  • Configurable products that are available on multiple websites no longer show simple child products that are not assigned to the specific website. GitHub-28291
  • Storefront product pages now display tier prices without taxes as expected. GitHub-12225
  • MSRP prices for configurable products are now converted to the chosen currency correctly. Previously, the application displayed prices in the wrong currency and threw this error: Call to a member function setAppliedTaxes() on null. GitHub-26526, GitHub-29603
  • Merchants can now save a store-specific text swatch attribute option label with a value of 0 (zero). Previously, a value of 0 was replaced with the Admin label option value. GitHub-30073
  • Unused parameters in the construct of the AdvancedPricing class have been removed. GitHub-29531


  • The System Message list now accurately reflects product updates after cron has run and the application has updated products as scheduled.
  • An index based on schedule_id and status has been added to the cron_schedule table. GitHub-29601

Custom customer attributes

  • The application now displays customer attributes of type file on the Account Information page after creation. Previously, when you tried to save a new attribute of this type, the application displayed these errors: The "newAttribute" attribute value is empty. Set the attribute and try again and Validation is failed.
  • The application now correctly displays multi-line custom customer attribute values. Previously, not all data was displayed.
  • The application now alerts shoppers when they enter an invalid birth date while creating an account. Previously, the validator disregarded locale settings, and shoppers were redirected to the Create New Customer Account Page with an invalid date error.
  • Custom address attributes are now included as expected in the Payment step of the checkout workflow.
  • Custom address multi-select attributes are now correctly displayed during guest checkout and on the Admin and My Account order details page.
  • Custom address attributes are now displayed correctly in the My account area and Admin order details page.
  • You can now delete a leading zero in a custom customer attribute when Input Type is set to Text and Input Validation is set to Numeric Only.
  • The application now successfully exports customer data that includes a custom gender attribute value.
  • The application now saves custom customer attribute values for B2B users as expected. Previously, custom customer attributes created for adding or editing company users were not bound with the Add New User form, and as a result, attribute values were not saved. In addition, the custom date attribute was derived from the database as a string and was not converted to proper date format for storefront display.


  • The calendar widget for the storefront customer account page date of birth field now uses the designated store locale.
  • The application no longer saves duplicate entries of a customer address during checkout of a re-order for an existing customer from the Admin.
  • Deleting all addresses from multiple customers from the Admin now deletes all addresses from the customer address list and removes default billing and shipping addresses. Previously, the applicationdeleted the address from the customer address list but did not remove the default billing and shipping addresses.
  • The Admin customer address tab now correctly displays address count after an administrator has performed a mass deletion of addresses. Previously, the application included deleted addresses in its count.
  • The DateTime format for the Date of Birth field on the customer registration page has been corrected. Previously, the leading zero that preceded a single-digit day was missing.
  • Date format validation for the Date of Birth field now works before the shopper clicks the Create an account button. Previously, a shopper could enter a value in an invalid format, and when they clicked the Create an account button, the shopper was redirected to the Create New Customer Account Page with an invalid date error.
  • The application no longer throws a fatal error when an administrator tries to save a new customer account that contains invalid data for an attribute.
  • The application no longer throws a 400 error when a customer tries to access their shopping cart in a deployment where Magento Shipping was previously installed and the default Luma theme is currently deployed. Previously, the application did not filter out section names that were created by previously installed/enabled modules that were not supported in the Admin before sending requests to the server, which generated errors.
  • The application now displays a message as expected when a shopper creates a guest account when the Require Emails Confirmation setting is enabled and Magento\Customer\Controller\Account\CreatePost has been overridden. Previously, the application did not permit this type of customization of the user registration process, and under these conditions, a user’s email confirmation status was considered complete, the new user was automatically logged in, and no error message was shown.
  • The application now assigns a shopper to the correct customer group when the shopper places an order with a non-default customer group in a store where Enable Automatic Assignment to Customer Group is enabled. GitHub-26976
  • The Admin customers grid is now available as expected when the non-default website is deleted in a multi-site deployment when indexes are set to Update by Schedule. Previously, the application did not display the grid and threw this error: [2020-12-09 11:31:54] report.CRITICAL: The website with id 2 that was requested wasn't found. Verify the website and try again. \{"exception":"[object] (Magento\\Framework\\Exception\\NoSuchEntityException(code: 0): The website with id 2 that was requested wasn't found. Verify the website and try again. at /var/www/html/magento24ee/vendor/magento/module-store/Model/WebsiteRepository.php:110)"}


  • Error handling has been improved when retrieving lists of programs from dotdigital Engagement Cloud.

  • The value that is synced in the store name column during guest sync is now the store view name as expected. Previously, the website name was included in this column.

  • Added an array check before looping over order status automations after an order is saved.

  • Resolved issues with Composer upgrades that were the result of the dotdigital module’s dependency on magento/module-authorization.


  • The application no longer lists a downloadable product in My Download Products tab after the downloadable product has been partially refunded. GitHub-28388

Dynamic block (formerly banner)

  • The application no longer displays a dynamic block on the storefront after you have deleted the customer segment that is associated with the block.
  • The application now correctly takes into account catalog price rules when determining whether to display a dynamic block.


  • Custom attributes that use \Magento\Eav\Model\Entity\Attribute\Backend\ArrayBackend now use default values if no value is provided in the payload when a product is created by API call.


  • \Magento\Config\Model\Config\Source\Email\Template::toOptionArray no longer throws an error when setPath() is not called before toOptionArray(). GitHub-29315
  • The application now correctly converts plain text to HTML when you click Return Html Version when loading an email template.
  • Email sent to customers that contain partial invoices now includes accurate item subtotals. Previously, the subtotal in this email was the total of the ordered quantity, not the total amount of the invoiced quantity.
  • The application now sends email reminders to all relevant customers with valid email addresses. Previously, the applicationstopped sending reminder emails to customers after encountering one invalid address.
  • Sending sales email in asynchronous mode now works as expected after a product is removed from a catalog. Previously, asynchronous email sending was blocked, and the application displayed this error: main.ERROR: Cron Job sales_send_order_invoice_emails has an error: Call to a member function getData() on null. Statistics: {"sum":0,"count":1,"realmem":0,"emalloc":0,"realmem_start":73400320,"emalloc_start":37177640} [] []main.CRITICAL: Error when running a cron job {"exception":"[object] (RuntimeException(code: 0): Error when running a cron job at /var/www/html/vendor/magento/module-cron/Observer/ProcessCronQueueObserver.php:327, Error(code: 0): Call to a member function getData() on null at /var/www/html/vendor/magento/module-catalog/Helper/Image.php:502)"} []. GitHub-26878
  • The application no longer copies a customer on order confirmation email when sales_email/order_comment/enabled is disabled and sales_email/order_comment/copy_method is set to bcc. GitHub-29915


  • Customized filter groups are now applied correctly when searching on customers. Previously, the afterSearch function did not OR filters as expected. GitHub-24576
  • Images on a store’s home page are now rendered successfully. Previously, the page source HTML was corrupted because the three consecutive slashes in the image’s base64 code was misinterpreted as a comment.
  • DatePicker now works correctly when filtering orders on the Admin Orders list in stores using the Arabic locale (ar_SA - Saudi Arabia).
  • DatePicker now displays the correct date after a merchant saves a cart price rule in a deployment. GitHub-30382
  • The application now correctly represents Arabic thousands grouping and Arabic decimal separator symbols. Previously, Arabic symbols were trimmed. GitHub-26676
  • The application now deletes expired database sessions from the database session table as expected.

General fixes

  • You can now configure a native session handler that differs from the handler that is defined in php.ini. Previously, SessionManager did not set the memcache as save_handler, but instead used the file’s session_handler. the application threw this error: main.CRITICAL: Warning: SessionHandler::read(): open(, O_RDWR) failed: No such file or directory (2) in../vendor/magento/framework/Session/SaveHandler/Native.php on line 22 {"exception":"[object] (Exception(code: 0): Warning: SessionHandler::read(): open(, O_RDWR) failed: No such file or directory (2) in ../vendor/magento/framework/Session/SaveHandler/Native.php on line 22 at ../vendor/magento/framework/App/ErrorHandler.php:61)"}. GitHub-24717
  • The following improvements have been made to the LoginAsCustomer modules:

    • Replaced the around plug-in with after

    • Removed redundant code

    • Replaced (bool)->getValue() with isSetFlag. GitHub-29689

  • Reloading all customer-data sections by wildcard (*) no longer causes requests to customer/section/load to throw a 400 error. GitHub-28154
  • The application now passes exceptions that occur when a layout is rendered in production mode to var/report. GitHub-29606
  • The application no longer redirects customers to the home page when changing store view. The \Magento\VersionsCmsUrlRewrite\Model\StoreSwitcher::switch() method now redirects shoppers to the home page only when $urlPath is not found for the second store view.
  • The application now throws an exception when a customer who does not exist requests a password reset. GitHub-26288
  • The application now displays an informative error message when an administrator tries to save a customer account that contains an invalid value for a customer attribute while uploading a file that this attribute value. Previously, the application threw a fatal error. GitHub-30295
  • The application now applies the Logo for HTML Print View configuration setting to storefront invoice PDFs as expected. GitHub-24730
  • static:: has been replaced with self:: throughout the codebase for accessing private constants. GitHub-30781
  • The application now opens the New Attribute page as expected when a merchant clicks the Create New Attribute button twice during product creation. Previously, the application displayed an empty page and threw an error. GitHub-30361
  • The application no longer displays the The coupon code has been accepted message after a coupon has been removed. GitHub-30255
  • Administrators can now assign widgets to specific categories. GitHub-30009
  • Attribute selector input[type=datetime] has been replaced with a less specific input type selector. GitHub-30064
  • The application now displays store-specific values that are associated with custom category attributes as expected. GitHub-13440
  • The application now displays a prompt asking whether the customer group should be changed when you click the Validate VAT Number button on the order creation page when the store address and shipping destination belong to different EU countries. GitHub-29652
  • The \Magento\Catalog\Model\ImageUploader class has been refactored to use the new moveFileFromTmp method. GitHub-29598
  • The application now displays a more informative error message when a merchant tries to create a product attribute with product_type and type_id codes to be more descriptive. GitHub-28479
  • Corrected validation logic for the Customer Token Lifetime (hours) and Admin Token Lifetime (hours) fields on the Admin Stores > Configurations > Services > OAuth page. GitHub-29502
  • The application now correctly parses text that contains }} in the widget content field. GitHub-12087
  • You can now remove a filter from the Product Categories page. Previously, when you tried to delete the filter, the application did not let you remove the filter and displayed this error: Something went wrong. GitHub-8538
  • Magento\Framework\MessageQueue\ConfigInterface can now be instantiated when optional module Magento_MessageQueue is disabled. Previously, the application threw this error: PHP Fatal error: Uncaught Error: Cannot instantiate interface Magento\Framework\MessageQueue\ConfigInterface in /var/www/magento2/magento2/lib/internal/Magento/Framework/ObjectManager/Factory/AbstractFactory.php:121. GitHub-26080
  • Logic that determines when the application can retrieve email value from persistent storage has been improved. Previously, the application displayed populated password fields on the checkout page when an unregistered user returned to the checkout page after first completing the email field. GitHub-26903
  • A missing aclResource attribute has been added to the Admin header AdminNotification toolbar block. Previously, the Admin notification toolbar entry was visible even when the Admin user does not have role resource permissions to see it. GitHub-29067
  • The framework/database/select where functions now handle type correctly. GitHub-29590
  • Inefficient use of array_merge in loops has been improved throughout the codebase, which has improved performance in several places, including in the static content deployment process. GitHub-30183
  • The default Admin session lifetime has been moved from the encryption module to the security module. GitHub-30859
  • The application now checks for private constants in a class and displays a warning if there are any static:: calls to them. Previously, the application threw this error: Undefined class constant.
  • The FlushCacheByTags class has been updated to use after-plug-ins instead of around-plug-ins. GitHub-29558
  • MessageValidator no longer fails on hash arrays that do not include a 0 element. GitHub-30563
  • Code in the checkout_index_index.xml file has been enhanced by the removal of sortOrder from messages, authentication, progressBar, estimation, and sidebar checkout components. GitHub-30550
  • Content in calc is now escaped, which results in correct calc values in the CSS output file. Previously, the application returned an incorrect calc value. GitHub-30542
  • The URL rewrite generator now sets the category object url_key, url_path, and store_id to default store values when saving category URL rewrites for the global scope. Previously, it saved url_key, url_path, and store_id with the values of the last processed store ID. GitHub-29585
  • \Magento\Widget\Controller\Adminhtml\Widget\Instance\Validate now recognizes a phrase result value as an error message and outputs it to the user during widget validation. GitHub-27397
  • The hard-coded list of category attributes in Magento\Catalog\Model\Category\DataProvider::getFieldsMap() has been replaced with a list of attributes that are generated from cache. GitHub-13440
  • Redundant hashing of has been removed and hashing is handled by the Varnish built-in VCL. GitHub-29988
  • Added a failure callback to the Magento_Ui file uploader. GitHub-29557
  • An acl.xml inconsistency that occurred when Magento_LoginAsCustomerAssistance was enabled but Magento_LoginAsCustomerAdminUi or Magento_LoginAsCustomerLog were disabled has been corrected. Previously, when administrator with these credentials tried to log in to the Admin, the application displayed a blank page and threw this error when : Exception #0 (LogicException): Could not create an acl object: Invalid Document Element 'resource': The attribute 'title' is required but missing. Line: 13. GitHub-30680
  • The application no longer throws an Undefined class constant error when an Interceptor is generated during plug-in creation. GitHub-28981, GitHub-29879
  • The application now correctly handles messaging and logging for asynchronous bulk operations. Previously, although products were updated, the magento_operation and queue_message_status tables were not updated correctly, and system messages were incorrect. GitHub-29718
  • A shopper is now redirected to the Set a New Password page as expected when they click Set a New Password in the Reset Password email when Require Emails Confirmation is enabled for the store. Previously, the shopper was redirected back to the Forgot Your Password button on the login page. GitHub-27954
  • Corrected array to string conversion error when saving row system configuration with default values. GitHub-30314
  • You can now set arguments for message queues. GitHub-30216
  • The base file collector now respects AppState->emulateAreaCode(). GitHub-39656
  • The new BlockByIdentifier class supports retrieving a layout block based on CMS block identifier. As a result, when a CMS block is removed from cache, the application also clears the layout block cache. GitHub-28309
  • Corrected problems with numeric argument conversion in queues. Previously, when you declared a queue with numeric type arguments in the queue_topology.xml, the argument value was cast to string. GitHub-29615

Gift cards

  • Emails that contain a gift card code are now sent only after the order has been successfully saved when the Create a gift card account when an order item is ordered configuration setting is enabled. Previously, a gift card code was re-used and sent to different customers if a gift card account were generated when items were ordered but an exception occurred after the virtual gift card was sent.
  • The application no longer duplicates gift card orders. Previously, when a shopper ordered one gift card, the application delivered two gift codes. This occurred because cron jobs called \Magento\GiftCard\Observer\GenerateGiftCardAccountsInvoice::execute(), and this method did not check whether gift card codes had already been generated during invoice creation.
  • Merchants can now unassign products from categories as expected. Previously, the application threw an error similar to this error: Could not save product "4" with position 0 to category 3.
  • Added support for symlinked root in errors pages and maintenance mode. Previously, if the root or magento/pub were symlinked into a different directory, the error processor (Magento\Framework\Error\Processor) did not generate a correct view file URL. GitHub-30296
  • Added missing order_data array to EmailSender classes. This brings these classes into alignment with Magento’s recommendation to use scalar variables instead of objects within the email templates. GitHub-29604

Google Tag Manager

  • The Google Tag Manager productClick function now works as expected. Previously, productClick was not triggered on products on listing pages, and Google Tag Manager could not capture that event.
  • Google Tag Manager configurable product options now update as expected in the datalayer after you edit a configurable product options in the cart. Previously, the data for the removeFromCart event was incorrectly rewritten when the product option was changed, and the quantity remained the same.


  • The urlResolver query now handles query parameters correctly.
  • The urlResolver query no longer returns NULL when a custom CMS node and page are specified as input. GitHub-30474
  • The category query no longer returns child categories of a parent category that has been disabled. GitHub-30468
  • The category query now returns the correct path of a category image when URL rewrites are disabled.
  • The resetPassword mutation now returns a more informative message when an error occurs. GitHub-30179
  • Cached results of the products query are invalidated as expected when product positions change. GitHub-30467
  • The products query now returns the expected results when the category_id filter is specified with the in keyword. GitHub-30349
  • The categories and categoryList queries now consider category availability based on category permissions configuration and parent category ID. GitHub-29880, GitHub-30624
  • The updateProductsInWishList mutation now properly validates wishlist items. GitHub-30467
  • Deprecated several attributes in the ProductInterface and CategoryInterface to prevent their use on the storefront. GitHub-30625

  • Prices are now hidden from products query results when the category permissions are set to hide them. GitHub-29926

  • You can now use the addProductsToWishList mutation to add a bundle product with a user-defined quantity to a wishlist.
  • The mutations that add products to a cart now honor catalog permissions. GitHub-30179
  • GraphQL response time for add to cart operations has improved.
  • The products query now returns tier price values as expected. GitHub-29168
  • Removed a redundant getMappedNums from a loop in lib/internal/Magento/Framework/GraphQl/Query/EnumLookup.php. GitHub-30031
  • The products query no longer returns an error when the queried product has a disabled related product. GitHub-28892
  • The cart query now returns prices that have been converted into the correct currency (the default display currency). Previously, the query returned the item price value in base currency, and the currency code was returned as default display currency.
  • GraphQL now honors catalog permissions. The application restricts which items are returned for a products query based on the shopper’s customer group.
  • Added the customizable_option attribute to multiple data types that implement the CartItemInterface.
  • Added attributes for the storeConfig query to return store, store group, and website information.
  • Reinstated the SelectedCustomizableOption.type attribute. In addition, the customizable_options attribute within various implementations of the CartItemInterface are now non-null.
  • The search functionality of the products query no longer returns items in which category permissions have been enabled.
  • The products query returns the correct currency for store views that have multiple currencies.
  • Labels for products query filters now return translated values, when applicable for non default store views.
  • Fixed store currency amounts on gift cards in the cart.
  • Added the ConfigurableProductOptionsSelection data type, which contains metadata corresponding to the selectable configurable options for a product. Use this object in a products query to minimize the number of media gallery items that are displayed as the shopper selects configurable product options.

Grouped products

  • The products query now returns all expected data for grouped products. Previously, product_links was an empty array.
  • A grouped product is now listed as out-of-stock on the product edit page when all child simple products are out-of-stock.
  • The status of a grouped product now updates correctly on the product edit page when the status of its child simple products changes to out-of-stock. Previously, the inventory stock item for the parent of the grouped product did not update after its children changed stock status.


  • Images on a store’s home page are now rendered successfully. Previously, the page source HTML was corrupted because the three consecutive slashes in the image’s base64 code were misinterpreted as a comment.
  • The dependency on the fileinfo extension has been removed from the CMS module. Previously, the application threw an error when you tried to upload an image using the image uploader, which is launched when you click the Insert Image button when adding content. GitHub-24332, GitHub-16531, GitHub-29852
  • Added support for reading exif_image.png or exif-image.jpeg metadata. GitHub-1449
  • Images are now displayed by the Catalog Events Carousel widget after upload as expected. Previously, the catalog_event_status_checker cron job deleted uploaded images.
  • CMYK images colors are now rendered correctly. When the Imagick adapter now detects that an opened image has a CMYK colorspace, the colorspace is converted to SRGB. Previously, these images were rendered with inverted colors. GitHub-22375
  • Boolean values are no longer set for image_with_border.phtml. Redundant max-width and height settings have been removed from .product-image-photo. (These values are already set globally on the image through the reset styles.) GitHub-30186


  • Customer address region_id is no longer assigned a NULL value when you import customer addresses using a CSV file (entity type = "customer address" and import behavior = "add/update") from which certain field values have been deleted.
  • You can now hide product images on the storefront during import.
  • A scheduled product import process now updates products with correct data fields when the CSV file also contains incorrect entries. Previously, no entries were updated if the CSV file included incorrect entries when On Error: Continue Processing was enabled.
  • When an imported product has qty set to 0 but is_in_stock set to 1 in the CSV file, the product is not listed on the category page, and the product details page identifies it as out-of-stock. Previously, products with these values were visible on the storefront after import.
  • CSV import no longer ignores the dropdown and textarea values for additional attributes. Previously, these attribute values were not updated during import.
  • The product export CSV file now appears in the Admin list of export CSV files as expected. Previously, the application threw an error when you ran this command: bin/magento queue:consumers:start exportProcessor --single-thread --max-messages=10000.
  • The application no longer throws an error when importing CSV data that includes Bengali (Bangla) alphabet characters.
  • The application now displays an informative error message when an administrator clicks Check Data during import of a file that has been changed since export when working in Chrome. Previously, the application displayed a console error but did not tell the user how to proceed.
  • The application no longer duplicates product images when you import the same product CSV data more than once. GitHub-21885
  • The limit of 90 characters for image file names in vendor/magento/framework/File/Uploader.php has been removed. Previously, directory and file name length could not exceed 255 characters. The application imported products with images whose file name exceeded this limit, but did not import the image file. GitHub-29377
  • Coupon codes can now be successfully exported to CSV or XML. Previously, the application displayed a 404 error when you clicked Export CSV or Export XML when you tried to export coupons. GitHub-29277


  • We have improved the performance of the partial indexer. The application now clears the cache IDs that were changed for each 1000-ID batch iteration. Cache context no longer accumulate IDs. Previously, cache context accumulated cache IDs for each 1000-ID batch iteration and cleared the same set of IDs on each iteration.
  • Inconsistencies between the partial re-indexing system and the full re-indexing system have been corrected. Both indexing systems now use the same code, which works correctly. Previously, both indexing systems used different logic in regards to the shared indexers, which potentially caused indexers to be invalidated after every run of the partial re-indexing system. GitHub-29478, GitHub-29297
  • We have resolved issues with the manual indexer that had resulted in either empty category pages or reduced product count on category pages. Issues with incomplete category pages or product count occurred when:

    • the catalogsearch_fulltext and catalog_product_price partial indexers were executed on a large catalog until these indexers completed execution.

    • the partial indexer was executed on either catalog_category_product or catalog_product_category indices, and at the same time a full re-index was executed on one of those indices. These two indexing processes could conflict, which resulted in products missing from category pages.

    • bin/magento indexer:reindex inventory was executed on a large catalog. Products were missing from category pages until the catalogsearch_fulltext partial indexer completed execution.

  • An indexer has been added to the Magento_Bulk MySQL table, which has improved the performance of bulk operations.
  • Comments in database tables now accurately reflect table status after re-indexing (bin/magento indexer:reindex). Previously, table comments after re-indexing contained the same values that comments contained after a fresh installation.
  • The SELECT entity_id IN statement has been improved in deployments implementing MariaDB v.10.3.18, which has improved the performance of catalog category indexing. GitHub-25199
  • Adobe Commerce has improved cache performance by eliminating the flushing of tags multiple times per indexer instance. GitHub-29890


  • You can now use app/etc/env.php to change the message broker from MYSQL to AMQP.
  • Issues with the calculation of remainders for decimal values for product quantities have been corrected in the relevant JavaScript library. The application previously calculated decimal fractions of more than two digits incorrectly and subsequently displayed an incorrect message.
  • The \Magento\Authorization\Model\Rules::update method has been deprecated. GitHub-29128
  • The application no longer throws a fatal error when converting a date object from UTC. Previously, under certain conditions, the convertConfigTimeToUtc method threw an exception. GitHub-29525
  • DataObject has been replaced with the product model in \Magento\MediaGalleryCatalogUi\Ui\Component\Listing\Columns\Thumbnail::prepareDataSource.GitHub-1711
  • The RequireJS resolver no longer fails to detect blocked resources. Previously, the resolver did not correctly detect whether all resources on a page were loaded or handled appropriately, and the page kept loading. GitHub-28116
  • Attribute Repository code validation now respects Magento\Eav\Model\Entity\Attribute::ATTRIBUTE_CODE_MAX_LENGTH rather than a hard-coded value. GitHub-29017
  • HTML minification no longer strips triple slashes ( from HTML strings in PHTML files. Previously, triple slashes were interpreted as comments during minification, and the rest of the line was completely removed in the generated PHTML file upon deployment.
  • Merchants can now configure indexer subscriptions on the table column level rather than the table level. A new argument has been added to \Magento\Framework\Mview\View\Subscription to allow columns to be ignored for a specific view or table combination. GitHub-30243
  • Clicking the Add to Cart button before the product page JavaScript has fully initialized no longer results in duplicate form_key values. Previously, a product could be added to the cart with a cached form_key value that triggered an exception. When Add to Cart was clicked before the JavaScript had fully initialized, then the form_key value that was sent in the form data did not match the users session, and the product was not added to the cart. GitHub-13746
  • The current cURL client now respects case-insensitive header names. Previously, the Set-Cookie comparison was case-sensitive, which could cause problems with some HTTP servers. GitHub-29524
  • Updated XSD URN format in api-functional and test case XML files. GitHub-30552
  • An event prefix and event object has been added to the catalog product option value collection to improve customization of the collection loading of \Magento\Catalog\Model\ResourceModel\Product\Option\Value\Collection. GitHub-29621
  • All occurrences of array_merge have been refactored to use the format recommended in the coding standard. GitHub-30005
  • A head.additional block of type \Magento\Framework\View\Element\Text\ListText has been added to the adminhtml default layout (by magento2/module-base). GitHub-29165
  • Added missing escape URL method to the layout template module widget. GitHub-30036
  • The \Magento\Framework\Filesystem\Io\File::read() method is now compatible with \Magento\Framework\Filesystem\Io\IoInterface::read(). GitHub-27866



  • The Magento_Logging module now correctly registered new values as well as the values that preceded them. Previously, the values in the column Value Before Change displayed values of N/A regardless of whether this was the first change or the next, or when the default value was returned. GitHub-26943
  • The Admin Stores > Configuration > Advanced > System page has been updated to display the correct product name (Media Gallery). Minor redesigns to the user interface have been included. GitHub-1738
  • Links in the Used in section of Media Gallery image descriptions now display a grid that has been filtered by the selected image as expected. Previously, the displayed grid was not correctly titled, and list entries were not accurate. GitHub-1694
  • You can now successfully edit multiple images in the Media Gallery. Previously, you could not add tags to a second image after adding tags to one image. GitHub-1755
  • The Tags drop-down menu is now empty as expected after you remove tags from an image in the Media Gallery. GitHub-1703
  • Batch processing for Media Gallery synchronization queue messages is now supported. GitHub-1724
  • The application now displays a 404 page as expected when you try to open the Media Gallery when Enhanced Media Gallery is disabled. GitHub-1760
  • MediaGalleryMetadata now skips the segment reader if an exception occurs and instead parses and displays image metadata as expected. Previously, the image metadata was empty due to an exception from the exif_read_data segment reader. GitHub-1782
  • Folder name length no longer prevents an image from being uploaded to the Media Gallery. Media Gallery now sets path column as type text. GitHub-1778
  • Image uploader now displays the correct image size when a rendition is inserted from Media Gallery. GitHub-1806
  • Path verification has been added to the Mediagallery uploader plug-in. Previously, validation failed, and the application did not import products when Enable Old Media Gallery was disabled. GitHub-30649
  • Magento_Cms::media_gallery ACL subresources have been added and enforced for the new Media Gallery to support configured permissions for the following discrete operations:

    • Upload assets
    • Insert assets into content
    • Delete assets
    • Create folders
    • Delete folders. GitHub-1487
  • Long Media Gallery text strings and folder names are no longer cropped. Previously, the application displayed cropped text and images and displayed this message: We couldn't find any records. GitHub-1763, GitHub-1758
  • The application no longer displays the Add Selected button when no images are selected while editing content for a new page. GitHub-1769
  • Filters are now applied as expected on the Content > Media Gallery Category grid. GitHub-1763
  • Gallery multiply breakpoint options configuration now works as expected. Previously, breakpoint options configuration did not work properly because mediaCheck triggered the exit media query function on page load. GitHub-29933


  • Replaced repetitive actions with action groups in CheckStaticBlocksTest. GitHub-30561
  • AdminUpdateCategoryAndMakeInactiveTest and VerifyChildCategoriesShouldNotIncludeInMenuTest have been refactored to comply with MFTF best practices. GitHub-30058
  • Removed duplicated AdminOpenCMSBlocksGridActionGroup. GitHub-30896
  • Replaced AdminOpentCmsBlockActionGroup with AdminOpenCmsBlockActionGroup. GitHub-29839
  • Updated CheckCheckoutSuccessPageAsRegisterCustomerTest and CheckCheckoutSuccessPageAsGuestTest to cancel created orders after tests run. GitHub-28324
  • Removed AdminNavigateToPageGridActionGroup due to redundancy. GitHub-29838
  • An issue with StorefrontProductListWidgetWithSharedCatalogTest that caused the test to be skipped has been resolved. GitHub-322
  • Implemented ActionGroup to navigate to the checkout page. GitHub-29843
  • Implemented AdminOpenCreateNewCMSPageActionGroup to navigate to create new CMS page. GitHub-29824
  • Corrected issues with skip in MFTF tests for CMS page for Media Gallery. GitHub-30164
  • Meaningful titles and descriptions have been added to MFTF tests for the Company, CompanyCredit, CompanyPayment, CompanyShipping, and ConfigurableSharedCatalog modules. GitHub-30164

New tests

  • Added a test for enabling email to a friend in the Admin. GitHub-29145
  • Added a test for deleting a CMS block from a grid by an administrator. GitHub-30372
  • Added a test for applying a shopping cart rule to a single bundle item. GitHub-28921
  • Added tests to check whether Used In information for a Media Gallery image is displayed after the entity was deleted. GitHub-1774

New action groups


  • Admin users can now edit a customer account as expected when the customer is subscribed to a queued newsletter. GitHub-30645
  • The application now re-sends newsletter subscription confirmation if the shopper does not confirm their newsletter subscription. GitHub-28422
  • You can now edit a customer account as expected when the customer is subscribed to a queued newsletter. GitHub-30645

Payment methods

  • Payment methods are now loaded in the Admin for all websites as expected in a multi-store deployment.
  • The application no longer displays the Purchase Order number is a required field message above the coupon code field before the shopper enters any information in deployments where Purchase Order has been configured as the only available payment option.
  • The application now completes Payflow Pro payments successfully when the shopper’s name contains accented letters. Previously, payment did not complete, and the application logged this error: report.CRITICAL: String to be escaped was not valid UTF-8 or could not be converted.
  • Guest shoppers can now place PayPal orders when Automatic Assignment to Customer Group is enabled. The payment is processed on the PayPal gateway, the order is created in Magento, and the shopper sees the order thank-you page. Previously, the order was processed successfully on the PayPal gateway, but the order was not created in Adobe Commerce. The shopper was instead re-directed to the order review page, where the application displayed this error: Failed address validation: %1" error. GitHub-25399


  • Merchants can now successfully place an order from the Admin after switching from a payment method that uses a credit card to a non-credit-card payment method. Previously, when a merchant clicked the Submit Order button, the loading process started but never completed, and the order was not placed.
  • The application no longer creates duplicate orders when an order is placed with PayPal Express. Previously, when a shopper tried to pay for an order with PayPal Express but PayPal returned an error, the application still created the order. This resulted in duplicate orders on the merchant’s site. GitHub-13952
  • PayPal Settlement reports are now available at Reports > Sales > PayPal Settlement as expected. Previously, the application did not list these reports on the PayPal settlement report grid and displayed this message: We couldn't find any records.
  • Clicking the PayPal button during checkout no longer triggers a redundant web-api call. Previously, two requests were triggered, which doubled the charge for the product.


  • Magento_Csp/Model/BlockCache has been refactored to reduce both memory consumption and the generation of needlessly large cached strings. Previously, pages that included dynamically whitelisted scripts and styles often experienced from performance issues. GitHub-29964
  • We have improved the performance of scheduled exports of catalogs that include more than 100,000 products using consumers.
  • The application no longer flushes category cache when you add or save a disabled product to a category. Previously, the applicationflushed the cache for related categories despite the product status, which affected server performance.
  • Page load time for updating product quantity in the shopping cart has improved. Previously, the applicationexecuted multiple separate queries for each product in shopping cart, which increased page load time.
  • An indexer has been added to the Magento_Bulk MySQL table, which has improved the performance of bulk operations.
  • The application now caches the children IDs of configurable products. This has improved page load performance by reducing the number of database requests. GitHub-30585
  • Loading of the Admin dashboard has been improved. Previously, the application displayed tab names as a list before the page completed loading.
  • Redis cache management has been improved by the addition of expiry limits for layout caches. Previously, Redis caches reached allocated maximum memory quickly in large deployments, and the application threw errors on write operations.
  • Checkout performance has been improved by the removal of a redundant database query in app/code/Magento/Catalog/Model/CategoryLink.php. GitHub-29453
  • Magento\Framework\DB\Adapter\Pdo\Mysql->isTableExists has been refactored to improve performance. Redundant calls to SHOW TABLE STATUS to check for the existence of a table have been reduced. GitHub-29662
  • getPageLayoutsConfig is now saved in cache, which has improved config builder performance. GitHub-29546
  • Adobe Commerce performance during edit and save operations for customer segments that contain more than 3,000,000 customers has improved.


  • Shoppers can no longer place an order after their session cookie has expired when persistent cart is enabled. Instead, the application displays the login page so that the shopper can log in. Previously, the applicationplaced the order. The application did not properly validate the persistent customer when PHPSESSID had expired, and customerSession was re-created from the persistent information.
  • The application now displays the Welcome message as expected after a shopper logs into a store where persistent shopping cart is enabled. Previously, the application displayed the Not you? message after logging in.
  • The application no longer displays the Not you? text when a customer selects the Remember Me option when logging in to a deployment where persistent shopping cart is enabled.
  • The application no longer displays the contents of a customer’s cart after the customers session expires. Previously, the application displayed this error when a guest customer tried to check out when persistent shopping cart was enabled: No such entity with cartid = 0.


  • Consecutive asynchronous price updates no longer interfere with each other, and the correct status is assigned to each operation. Previously, if an asynchronous price update failed, all following asynchronous price updates would fail until the corresponding queue consumer was restarted. GitHub-27865


  • Reports > Marketing > Products in Carts now displays only the record in the allowed scope of the user who is generating the report. Previously, all data was available for all scopes.
  • The application now uses the currency specified in the role scope of the merchant generating the report when displaying product currency in the Products In Cart report.
  • The Recently Viewed and Recently Compared product features now display statistics for different stores and websites in the Admin as expected in a multi-store deployment. Previously, these features did not take into account all stores or websites.
  • Prices in Order reports now use the correct currency symbol.
  • The application now verifies the existence of a token when a user clicks the Admin dashboard Go to Advanced Report button. If the token exists, the application displays the Advanced Reporting page. If the token is not configured, the application displays an informative page in the User Guide. GitHub-25411

Return Merchandise Authorizations (RMA)

  • Selected options now apply to split line items when you split an RMA. Previously, values for Return Reason, Item Condition, and Resolution were not saved.
  • You can now delete tracking and shipping information for an RMA when JavaScript bundling is enabled.
  • Administrators with restricted access to only products in a specific website scope can now add an item to a return even when that item is no longer in their website scope.


  • The number of ratings displayed on Stores > Attribute > Rating now matches the ratings count in a multi-site deployment. GitHub-30258
  • The New Review page now loads as expected when you click the New Review button on Admin Marketing > All Reviews. Clicking on a product on this page opens the expected new review form for that product.
  • The application no longer throws this error when you try to edit an order from Admin Marketing > All Reviews: Uncaught TypeError: Event.observe is not a function. GitHub-30388


  • Reward points are now calculated as expected for taxable orders when a partial order completes.
  • Merchants can now successfully issue a partial refund for an order that was purchased with reward points and still subsequently refund the order remainder. Previously, merchants could not refund the reward points for the order remainder.
  • The application no longer displays this error when a shopper re-applies reward points after removing them: You removed the reward points from this order.
  • Reward points are now calculated correctly when a customer places an order using a non-base currency in a store that supports multiple currencies.


  • The order_created_at column of the sales_shipment_grid is now updated as expected after each update.
  • You can now successfully re-order a product with a custom options date from a store for which Use JavaScript Calendar is enabled. Previously, when you tried to re-order, the application did not add the item to the cart and displayed this error: Could not add the product with SKU "simp1" to the shopping cart: Please specify date required option(s).
  • The application no longer immediately closes an order when a shopper checks out an order that consists of a virtual product with a total cost of $0 in deployments where the zero subtotal checkout method is enabled.
  • The application no longer archives an order before processing it. Previously, multi-select action on the Admin order grid affected unselected orders.
  • The credit memo grid now displays the correct currency symbol when the Saudi Riyal (SAR) is set as the base currency.
  • The application now consistently displays shipping address information as expected on the order page during checkout.
  • The value of total_qty now matches the value of total_qty_ordered in sales invoices.
  • Asynchronous sending of sales emails now sends email for only those orders that were created after the date of the last update. Previously, the application did not filter emails by date when asynchronous sending was enabled.
  • The application now sends invoice email as expected when an order is placed from the Admin.
  • The application now clears existing order data during a session when a merchant creates a new order for a customer from the Admin.
  • You can now change the customer group for new customers that are created through an Admin order when Enable Automatic Assignment to Customer Group is enabled. You can also assign customer group based on VAT validation. Previously, when validating the VAT number, the request object did not check the assigned request group_id. By default, it used the default group_id.
  • The application no longer changes the status of a custom order status with Suspected Fraud status to Processing after a merchant creates a partial shipment using the REST API.

Sales Rule

  • Coupon codes that have been applied based on shipping method are no longer applied when a shopper changes shipping method. Previously, the application did not clear coupon codes when shoppers switched shipping methods.
  • Shoppers cannot apply a coupon code more frequently than the Uses Per Customer setting permits. Previously, if a shopper had multiple browser windows open and placed multiple orders concurrently, each order received the discount, even though the Uses Per Customer setting had a value of 1.

Search search-heading

  • Elasticsearch no longer throws an unknown modifier error when a shopper searches on a search synonym. Previously, escaper lacked an escaping slash symbol in regular expressions, which resulted in a fatal error.
  • Advanced search no longer returns the children of configurable products as individual search results when the child products were configured with visibility set to Not Visible Individually.
  • The Elasticsearch sort of product names in search results is no longer case-sensitive.
  • The search results page is now cached as expected when the set Number of top search results to cache to 0 setting is enabled in Admin Stores > Configuration > Catalog > Catalog > Catalog Search.
  • The catalog search indexer now executes without throwing an error due to the Elasticsearch field limit. Previously, the application threw this error: Limit of total fields [xxx] in index [m24dev_product_1_v10] has been exceeded.
  • The performance of catalog search has improved. Disabling Enable Search Suggestions (Stores > Configuration > Catalog > Catalog Search ) works as expected. Previously, the applicationqueried the MySQL search_query table instead of Elasticsearch for autocomplete search suggestions. GitHub-25534
  • Elasticsearch now filters product prices the same as MySQL. The field type price_* was changed from float to double in the Elasticsearch index to improve precision and correct a floating-point error.
  • A keydown event listener has been added to the Admin to activate the global search form when a forward slash is entered. GitHub-29551
  • Elasticsearch no longer throws an error but instead displays no products as expected when a string value is used to filter products by attribute with an integer or decimal backend type. Previously, the application displayed this error in exception.log: number format exception.
  • Elasticsearch no longer throws an exception when a search term contains a /. GitHub-25886, GitHub-25110

  • Search is now disabled as expected for a selected customer group from the products query when the Disallow Catalog Search By configuration setting in the general Category Permissions is enabled. GitHub-29927

  • Search results no longer include multiple quotations of the same word. GitHub-30104


  • The checkout process no longer fails when a network interruption disrupts the connection to the DHL shipping method. Instead, the application displays other available shipping methods. Previously, the checkout process stalled when the connection to DHL shipping was interrupted, and the application displayed this error: Sorry, no quotes are available for this order at this time. GitHub-29902
  • The fields that describe the UPS delivery method on Admin Stores > Configuration > Sales > Delivery Methods are now enabled as expected.
  • Shipments created through the POST /rest/V1/shipment endpoint now update orders properly. Previously, the application created a shipment, but shipment status remained in the processing state.
  • The application no longer removes simple products from the shopping cart when another product is removed from the cart before checkout with Ship to Multiple Addresses. GitHub-30259
  • The Order Review page now displays the tax amount before shipping amount as expected for orders being shipped to multiple addresses.
  • UPS shipment tracking now indicates a status of Delivered On only when a package has been delivered. GitHub-30032
  • The application now displays the correct cart subtotal for orders that contain a virtual product when the shopper navigates back to their cart from checking out with multiple addresses.
  • Merchants can now create a shipping label from the shipping page for an existing order that uses FedEx shipping when JavaScript bundling is enabled. Previously, the application threw an error when the merchant clicked the Create Shipping Label button.
  • The shipment tracking link in the shipment confirmation email sent to customers now works as expected. Previously, this link returned a 404 error.
  • The application now displays an informative error message when a shopper checks out using multiple addresses, then removes all products other than a virtual product. GitHub-25595
  • You can now create a shipping label as expected for a partial order. Previously, when you tried to create a shipping label for only one item from an order, the application added all products to the package, and validation failed. GitHub-29552
  • Validation for the shipping method is no longer bypassed when calling /V1/guest-carts/:cartId/totals-information. GitHub-25147


  • Sitemaps that are generated by cron now include correct image URLs. Previously, the generated cached image path was incorrect in multi-store deployments.


  • The Edit Home Page page now displays all scheduled updates as expected when you check for home page scheduled updates. Previously, the application displayed only one of several scheduled updates.
  • Sending 0 with the /rest/V1/products/special-price-information special price endpoint now saves the price and returns the schedule as expected.
  • Scheduled imports now run as expected when the import CSV file contains a byte order mark (BOM).
  • The application no longer removes the layout body class when a merchant schedules a category update.
  • Rescheduled product changes are now no longer erased after a cron run.
  • The application no longer throws an error when you try to schedule an update for a category. Previously, the application threw this error when you clicked Save on the Schedule New Update page: Something went wrong while saving the Magento\Catalog\Api\Data\CategoryInterface.
  • The rest/V1/products/special-price API can now be used to schedule product special prices for multiple stores. Previously, the application threw an error when a merchant scheduled a price update for multiple stores for same from and to time when a roll back is available at the new schedule’s start time.


  • The Admin and main store switcher now reflect changes made to the store sort order in the Admin. GitHub-13401
  • The application now creates correct URLs for categories and products after a store view’s top-level URL key is changed. Previously, when a store view’s category tree contained modified url_keys, if a category key did not change but the category parents’ key did, then the original code would used the category’s default store view when creating URLs. GitHub-28633

Target rules

  • Loading of product details pages has been optimized. We have added indices for database tables that optimize target rule conditions queries for many cases.
  • Target rules for related products now work when the is one of condition that is used for the Products to Display feature contains multiple conditions. Previously, when this condition contained multiple values, it was not parsed.


  • VAT validation on a guest order no longer results in the application saving the quote with an incorrect Customer Tax Class. GitHub-30018
  • Orders being shipped to multiple addresses can now be saved during checkout when FPT is configured. Previously, after completing an order for multiple addresses, the application displayed a blank page instead of the order success page.
  • Storefront product detail pages now display old and new prices with and without tax as expected. GitHub-27500, GitHub-11998


  • bin/magento dev:tests:run now launches the following tests as expected: all, unit, integration, integration-all, static, static-all, integrity, legacy, and default.
  • AdminMediaGalleryInsertLargeImageFileSizeTest has been refactored.
  • Unit tests are now compatible with PHPUnit 8. GitHub-29779
  • \Magento\TestFramework\TestCase\WebapiAbstract now contains a function that supports comparing large nested arrays of expected and actual outcomes in tests. Irrelevant keys in the outcome can now be ignored. GitHub-29498
  • AdminMediaGalleryCatalogUiEditCategoryGridPageTest no longer fails randomly. GitHub-1764
  • dev/tests/integration/testsuite/Magento/Customer/Controller/AccountTest has been improved. (assert is now based on XPath selector instead of assertStringContainsString.) GitHub-29700
  • Added test coverage for the AdminAnalytics module. GitHub-29500
  • Integration and API functional tests are now compatible with PHPUnit 9.3. GitHub-30146
  • Corrected issues with the GraphQL testRequestCacheTagsForCategoryListOnMultipleIds test. GitHub-29372
  • The currency availability test for Company credit has been automated.
  • Header values that include URLs are now parsed properly in ApiFunctional TestFramework. GitHub-26425
  • —no-tablespaces has been added to all occurrences of mysqldump, which permits integration tests to run without the PROCESS privilege (required since MySQL 5.7.31 / 8.0.21 to run mysqldump by default). GitHub-30566


  • A new --no-parent flag was added to the bin/magento setup:static-content:deploy command that prevents the parent(s) of a theme from being compiled. This new flag you can significantly improve the performance of the static content deployment process by avoiding unnecessary compilation. Note that this new flag does not work when using the compact strategy. GitHub-30184
  • Design configuration no longer generates DDL operations. Previously, when the design configuration was updated, the application generated DDL statements that could trigger MySQL errors.
  • Redundant code in the Magento_ConfigurableProduct module in the Admin theme has been removed. GitHub-29857
  • Redundant less styles navigation and unused properties in the Blank theme have been removed. GitHub-29914
  • Added collapsible navigation functionality to the Blank theme in mobile view. GitHub-30237
  • Web font loading for themes has been optimized. GitHub-29526
  • Developers can now specify font type when declaring a custom font in a theme. GitHub-29719

Translation and locales

  • The Admin Orders grid Date Picker now works as expected when the Admin locale is Arabic (ar_SA - Saudi Arabia).
  • The application no longer displays an error message when a shopper enters an Argentinian address with a valid post code when registering or adding a new address. Previously, the application displayed this error: Provided Zip/Postal Code seems to be invalid. Example: 1234. If you believe it is the right one you can ignore this notice.
  • The application no longer throws an error when a shopper enters a five-digit postal code for a Korean address.
  • zip_codes.xml has been updated to enforce eight-digits for Brazilian zip codes. GitHub-29984
  • Improved localization of remaining unlocalized phrases. GitHub-11175
  • The grid search input placeholder can now be translated. GitHub-30510
  • The application now downloads inline translations JavaScript modules only when they are enabled. GitHub-29553


  • The Create an Account button on the Create New Account page remains active when a shopper enters invalid data. Previously, this button was disabled, which prevented shoppers from re-attempting to create an account after making an error. This was a known issue in 2.4.1. GitHub-30513
  • Loading of the shipping grid on the Admin Order Edit page has been improved.
  • The application now displays the Same As Billing Address check box as expected on the order page when products have been added to the cart by SKU.
  • The CSS class that defined limited width is now applied as expected to the Start Time fields on Admin Store > Configuration > Catalog > XML Sitemap > Generation Settings. GitHub-29496
  • Corrected display issues with the Terms and Conditions checkbox label. GitHub-24060
  • The application no longer displays the CSS code for a tier price block on the product page when the tier prices are not available. GitHub-29194
  • The position of the buttons on the image view details page have been re-ordered to conform with user interface guidelines. GitHub-1783
  • Coupon code text field is now displayed in proper width in Internet Explorer/EDGE browsers.
  • The @button__border-radius variable is now defined in the lib/web/css/source/lib/variables/_buttons.less library. border-radius has a default value of 3px. Previously, border-radius was hard-coded. GitHub-28674
  • The submit search button (magnifying glass) in the mini search field is now disabled until the minimum search string length has been reached. GitHub-29704
  • The Preview Template button now works as expected in the Edit Queue page.
  • Adjusted the position of the cursor from the middle to the beginning of the Message field on My Account > Gift Registry > Share Gift Registry.
  • Display issues with the column layout on the Add Scheduled Export page have been resolved.
  • The application now preserves an attribute’s value when you move the attribute from one group to another.
  • The application now displays a calendar icon next to the Date input field as expected on the storefront Create an account page.
  • Added a font weight heavy variable to lib/web/css/source/lib/variables/_typography.less. GitHub-29778
  • Filter visibility now works with column visibility as expected in Admin grids. GitHub-30345
  • The banner that the application displays on the Admin Login as Customer page now remains at the top of the page when the user scrolls. GitHub-29354
  • UI select component options are no longer visible when this.disabled(true) is set. GitHub-29098
  • The @font-family-name__base variable is no longer used when loading the Open Sans font. GitHub-29515
  • The WAI-ARIA attribute aria-atomic="true" has been added to the error container tag. GitHub-29560
  • UI Component grids now display an accurate count of selected items. Previously, grids indicated a wrong number of selections when a search by keyword selected all grid items and the shopper subsequently deselected some items before selecting the header checkbox. GitHub-29968
  • The application no longer displays unrendered HTML on invoice and shipment overview pages. GitHub-29958
  • Clicking Options on the Admin Stores > Currency Rates now directs users to the expanded currency options section of the System configuration page. GitHub-29336
  • Improved padding of text in confirmation pop-up dialogs in Luma theme. GitHub-30452


  • The Vault module now recognizes payment method codes from the request for the payment information management service. Previously, when a shopper placed an order using a saved Braintree credit card, the application threw this error even when a valid payment method was used: The requested Payment Method is not available.


  • Address suggestions are now removed as expected when an address is modified.

  • A race condition that prevented some customers from saving their address in their account panel has been resolved.

  • Vertex address validation no longer adds the Address Edit page to the full-page cache in certain conditions.

  • Vertex-calculated tax is now considered when free shipping is configured for an amount inclusive of tax.

Web API framework

  • You can now use POST V1/invoice/:invoiceId/refund to refund an invoice that has a zero quantity of products and zero shipping charges (for example, {"items": [{"qty": 0, "orderItemId": 6, "extensionAttributes": {}}], "appendComment": false, "notify": true, "isOnline": true, "arguments": {"adjustment_negative": 0.0, "adjustment_positive": 0.99, "shipping_amount": 0}}. ) Previously, the application threw this error: You can't create a creditmemo without products. GitHub-23069
  • You can now use POST V1/categories to create or update a category. Previously, the application did not save the value if the default_sort_by value was set as an array. When the default_sort_by value was set as a string, the application threw this error: Error occurred during \"custom_attributes\" processing. Attribute \"default_sort_by\" has invalid value. The \"string\" value's type is invalid. The \"string[]\" type was expected. Verify and try again.
  • Using POST V1/invoices/:id/capture to capture payment information now works as expected. Previously, the applicationauthorized the order but captured it only on the payment gateway’s site.
  • When you use POST V1/order/:orderId/ship to create a partial shipment, the endpoint returns the correct number of shipped products.
  • Invoices created using POST V1/order/:orderID/invoice now accurately reflect partial payment by store credit. Previously, when an order was partially paid for with store credit, the invoice was created without taking the store credit into account.
  • The GET rest/all/V1/categories and GET rest/all/V1/categories?rootCategoryId=2 calls now return populated name and product_count fields as expected for all categories in the tree. Previously, the category field values were empty. The table name resolver plug-in returned an incorrect table name for fetching the count of products by category.
  • The PUT V1/categories/:id endpoint now stores the data needed to create 301 redirects for category URL keys when the save_rewrites_history custom attribute is provided. GitHub-29174, GitHub-30240


  • Shoppers can now add a product to a wishlist when the product is assigned to a custom inventory source. GitHub-3018
  • Administrators can now access the Manage Shopping Cart page from the Admin customer page after a customer has added a product to their wishlist from the storefront. Previously, the application displayed the following error when the administrator clicked the Manage Shopping Cart button: An error has occurred. See error log for details.
  • The Add to cart button on the shared wishlist page now works as expected for anonymous, guest, and users who are not logged in.
  • Shoppers can now successfully move a product from one wishlist to another.
  • The application now displays selected configurable product attribute options in the wishlist page as expected. GitHub-24091, GitHub-22503
  • Implemented ActionInterface for \Magento\Wishlist\Controller\Shared\Allcart. GitHub-29537

Known issues

Issue: The [magento_root]/index.php file has been removed, and The application now runs from /pub by default for Apache configurations. Stores that are served from subfolders will not work as expected and may display 404 errors. Workaround: Use symlinks to emulate the installation into subfolders. The following example uses two stores ( and to illustrate how to use a symlink to emulate an installation in subfolders.

  1. Create a subdirectory for

    code language-bash
    mkdir magento_root/pub/shop01
    code language-bash
    cd magento_root/pub/shop01
  2. Create symlinks for the store’s parent directories in the newly created directory:

    code language-bash
    ln -s ../media media
    code language-bash
    ln -s ../static static
    code language-bash
    ln -s ../../../pub pub
    code language-bash
    ln -s ../.htaccess .htaccess
    code language-bash
    ln -s ../health_check.php health_check.php
  3. Create an index.php file inside the new directory (magento_root/pub/shop01/index.php) and add this content:

   require realpath(__DIR__) . '/../../../app/bootstrap.php';

   switch ($_SERVER['HTTP_HOST']) {
       case '':
       case '':
           $params = $_SERVER;
           $params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE] = 'shop01';
           $params[\Magento\Store\Model\StoreManager::PARAM_RUN_TYPE] = 'website';
           $bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $params);
           $app = $bootstrap->createApplication(\Magento\Framework\App\Http::class);

           $bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER);
           /** @var \Magento\Framework\App\Http $app */
           $app = $bootstrap->createApplication(\Magento\Framework\App\Http::class);
  1. Configure your Apache server to point to the new subdirectory. Deployment configurations can vary widely. Here’s an example server configuration:
   <VirtualHost *:80>
       DocumentRoot "magento_root/pub/shop1"

Issue: Merchants must activate the Fastly Force TLS functionality from the Admin to enable the global HTTP to HTTPS redirect for all store pages. See the Redirect HTTP to HTTPS for all pages on Cloud (Force TLS) Knowledge Base article.

Issue: You cannot use the addConfigurableProductToCart GraphQL mutation to add a configurable product to a cart in a non-default store view in a multi-store deployment that runs Inventory. (Luma storefronts are not affected.) the application displays this error: Could not add item to cart. Please check required options and try again. Workaround: Use the addProductsToCart mutation instead. GitHub-31660

Issue: The application does not submit payment information as expected when a shopper first enters a correct code into the CAPTCHA field on the Payment page but displays this error: There has been an error processing your request. This occurs only when the shopper tries to place the order either without entering the CAPTCHA code or by entering it incorrectly. Workaround: Refresh the page.

Issue: The application creates an order in Braintree as expected when a shopper clicks Pay with Venmo, but does not create the order in the Admin. Workaround: None. See the 2.4.2 known issue: Braintree Venmo payment does not work Knowledge Base article.

B2B known issues

Issue: B2B buyers can use online payment methods to bypass the usual purchase order flow. This scenario can occur if the buyer can reduce their entire checkout total to a 0 — for example, by a promo code or gift card — and subsequently remove the code or gift card. Even under those conditions, the application still places the order for the correct amount based on the prices of the items in their assigned catalog. Workaround: Disable gift cards and coupon codes when online payment methods are enabled for purchase order approval.

Issue: Buyers are redirected to the shopping cart when trying to place an order from a purchase order using PayPal Express Checkout when In-Context Mode is disabled.

Issue: The application sometimes displays a 404 error when a buyer creates a purchase order and then navigates to the checkout page. This error occurs when a buyer has previously created a different purchase order with an online payment method before navigating to the checkout page without completing the previous purchase. The buyer can still place the purchase order. Workaround: None.

Issue: Discounts for a specific payment method persist during checkout for a purchase order even when the buyer changes their payment method during final checkout. As a result, customers may receive a discount that they are not entitled to. This occurs because a cart rule for the original payment method is still applied despite the change in payment method. Workaround: None. See the 2.4.2 B2B known issue: discount remains for online Purchase Orders after payment method is changed Knowledge Base article.

Issue: The deleteRequisitionListOutput query returns details about the deleted requisition list instead of the remaining requisition lists.

Community contributions

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

The 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).

Pull Requests
Related GitHub Issues
magento/magento2#29630, magento/magento2#29459, magento/magento2#29703, magento/magento2#29460, magento/magento2#29042, magento/magento2#29482, magento/magento2#28821, magento/partners-magento2ee#260, magento/magento2#29148, magento/magento2#29634, magento/magento2#29832, magento/magento2#29830, magento/magento2#29829, magento/magento2#29828, magento/magento2#29821, magento/magento2#29820, magento/magento2#29836, magento/magento2#29831, magento/magento2#29822, magento/magento2#28653, magento/magento2#27391, magento/magento2#29833, magento/magento2#29904, magento/partners-magento2ee#264, magento/partners-magento2ee#248, magento/partners-magento2ee#168, magento/magento2#29929, magento/magento2#29962, magento/partners-magento2ee#329, magento/magento2#29931, magento/partners-magento2ee#316, magento/magento2#29835, magento/magento2#29834, magento/magento2#30081, magento/magento2#30030, magento/magento2#29827, magento/magento2#30049, magento/magento2#30217, magento/magento2#27939, magento/partners-magento2ee#279, magento/magento2#30222, magento/partners-magento2ee#349, magento/magento2#29868, magento/partners-magento2ee#346, magento/magento2#30079, magento/magento2#30317, magento/magento2#30633, magento/magento2#30619, magento/magento2#30359, magento/magento2#30223, magento/magento2#30630, magento/magento2#29675, magento/magento2#30777, magento/magento2#30528, magento/magento2#30525, magento/magento2#30779, magento/magento2#30529, magento/magento2#30694, magento/partners-magento2ee#400, magento/partners-magento2ee#401
magento/magento2#29649, magento/magento2#29712, magento/magento2#29501, magento/magento2#29145, magento/magento2#29500, magento/magento2#28520, magento/magento2#28558, magento/magento2#29648, magento/magento2#29843, magento/magento2#29845, magento/magento2#29846, magento/magento2#29847, magento/magento2#29824, magento/magento2#29823, magento/magento2#29841, magento/magento2#29844, magento/magento2#29825, magento/magento2#29531, magento/magento2#29601, magento/magento2#29839, magento/partners-magento2ee#28551, magento/magento2#29940, magento/magento2#29982, magento/magento2#29941, magento/magento2#29842, magento/magento2#29838, magento/magento2#30103, magento/magento2#30032, magento/magento2#29848, magento/magento2#30058, magento/magento2#30031, magento/magento2#30061, magento/magento2#30561, magento/magento2#30469, magento/magento2#30468, magento/magento2#30372, magento/magento2#30683, magento/magento2#30624, magento/magento2#29168, magento/magento2#30783, magento/magento2#30916, magento/magento2#30917, magento/magento2#30782, magento/magento2#30926, magento/magento2#30625, magento/partners-magento2ee#30474, magento/partners-magento2ee#410
Blue Acorn iCi
magento/magento2#29670, magento/magento2#29669, magento/magento2#29564, magento/magento2#27494, magento/magento2#29269, magento/magento2#27609, magento/magento2#29688, magento/magento2#29081, magento/magento2#28379, magento/magento2#29722, magento/magento2#27077, magento/magento2#30318, magento/magento2#30010
magento/magento2#29672, magento/magento2#29673, magento/magento2#29679, magento/magento2#29537, magento/magento2#25595, magento/magento2#29689, magento/magento2#28154, magento/magento2#28428, magento/magento2#27397, magento/magento2#29729, magento/magento2#29558, magento/magento2#25110, magento/magento2#25886, magento/magento2#28286, magento/magento2#30009
magento/magento2#29814, magento/magento2#29751, magento/partners-magento2ee#337, magento/partners-magento2ee#328, magento/partners-magento2ee#319, magento/magento2#30118, magento/magento2#30019, magento/magento2#29998, magento/magento2#29883
magento/magento2#29718, magento/magento2#29372, magento/magento2#29927, magento/magento2#29930, magento/magento2#29926, magento/magento2#29880
Fast White Cat
magento/magento2#29413, magento/magento2#28163, magento/magento2#30320, magento/magento2#30355, magento/magento2#28157, magento/magento2#30114
magento/magento2#24060, magento/magento2#13401, magento/magento2#11175, magento/magento2#30296, magento/magento2#22503, magento/magento2#24091, magento/magento2#30073
magento/magento2#29339, magento/magento2#28676, magento/magento2#29885
magento/magento2#28633, magento/magento2#29890
magento/magento2#27602, magento/magento2#30400, magento/magento2#30391
magento/magento2#27350, magento/magento2#30361, magento/magento2#30362, magento/magento2#30255
MRM Commerce
magento/magento2#30120, magento/partners-magento2ee#175
magento/magento2#30133, magento/partners-magento2ee#26943
magento/magento2#28687, magento/magento2#28663, magento/magento2#28491
magento/magento2#8538, magento/magento2#28479, magento/magento2#28186
magento/magento2#27696, magento/magento2#25405
magento/magento2#29553, magento/magento2#25399
magento/magento2#27940, magento/partners-magento2ee#267, magento/magento2#28216
magento/magento2#29555, magento/magento2#13440
integer_net GmbH
magento/magento2#29353, magento/magento2#27896, magento/magento2#28349
magento/magento2#29194, magento/magento2#29098
Bluebird Day
magento/magento2#11998, magento/magento2#27500
Krish TechnoLabs
Born Group
magento/magento2#30109, magento/magento2#30421
Guidance Solutions
Le Site
Kensium Solutions LLC
Aligent Consulting

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
Nazar Klovanych
Shankar Konar
Hazel Joie Caquicla
Hazel Joie Caquicla
Kos Rafał
Hazel Joie Caquicla
Nazar Klovanych
Shankar Konar
Nazar Klovanych
1755, 1694
Bartłomiej Szubert
Angelo Romano
Honeymay Louiese Ignacio
Franciszek Wawrzak
Lukasz Bajsarowicz
Lukasz Bajsarowicz
Nazar Klovanych
Oleh Usik
Lukasz Bajsarowicz
Ihor Sviziev
Oleh Usik
Oleksandr Kravchuk
Will Wright
Vadim Malesh
Vadim Malesh
Andrii Beziazychnyi
Shankar Konar
Vadim Malesh
Oleh Usik
Dmitry Tsymbal
Savvas Radevic
Yan Nasonov
Rudolf Vince
Nazar Klovanych
Nazar Klovanych
Hazel Joie Caquicla
Oleh Usik
Sathish Subramanian
Russell Albin
Bartłomiej Szubert
Mateusz Krzeszowiak
Vitaliy Prokopov
Nazar Klovanych
Hazel Joie Caquicla
Wout Kramer
Eduard Chitoraga
Oleh Usik
28558, 28520
Nazar Klovanych
Hazel Joie Caquicla
Sergii Ivashchenko
Nazar Klovanych
Nazar Klovanych
Hazel Joie Caquicla
Ihor Sviziev
Oleh Usik
Alexandr Skrashuk
Vitaliy Prokopov
Lukasz Bajsarowicz
Cristian Partica
Michał Derlatka
Oleh Usik
Oleh Usik
Oleh Usik
Oleh Usik
Oleh Usik
Oleh Usik
Denys Babenko
Andrii Kasian
Hazel Joie Caquicla
Hazel Joie Caquicla
Oleh Usik
Oleh Usik
Oleh Usik
Tu Nguyen
Sergii Ivashchenko
Hazel Joie Caquicla
Shankar Konar
Oleh Usik
Tu Nguyen
Nazar Klovanych
Tu Nguyen
Tu Nguyen
Eden Duong
Eden Duong
Honeymay Louiese Ignacio
28981, 29879
Viktor Kopin
Olga Zakharchuk
Nikolaj Malevanec
Abdul Rahman Abouzaid
11998, 27500
Gaurav Agarwal
Alexander Taranovsky
Stanislav Ilnytskyi
Sergii Ivashchenko
Nazar Klovanych
Honeymay Louiese Ignacio
Oleh Usik
Porraphit Chuasuk
Vitaliy Prokopov
Eduard Chitoraga
Hazel Joie Caquicla
Ihor Sviziev
Viktor Kopin
Hazel Joie Caquicla
Lukasz Bajsarowicz
Shankar Konar
Hazel Joie Caquicla
Oleh Usik
Hazel Joie Caquicla
Pascal Brouwers
Sergii Ivashchenko
Hazel Joie Caquicla
Viktor Kopin
Janusz Janczy
Marvin Hinz
Pieter Zandbergen
Joe Hobbs
Benoît Xylo
Viktor Kopin
Hazel Joie Caquicla
Oleh Usik
Oleh Usik
Oleh Usik
Oleh Usik
Evgeny Levinsky
Vadim Malesh
Oleh Usik
Leandro F. L.
Taras Gamanov
24348, 24400
Shankar Konar
16531, 24332, 29852
Ejaz Alam
29487, 29502
Oleh Usik
Eugene Shakhsuvarov
Serhii Dzhepa
Hazel Joie Caquicla
Hazel Joie Caquicla
Marcos Trama
Lyzun Oleksandr
Tu Nguyen
Greg Harvell
28154, 28428
Daniel Beitler
Fabian Schmengler
Tymoteusz Motylewski
Alex Gusev
26762, 29612
Abdul Rahman Abouzaid
Abdul Rahman Abouzaid
Ihor Sviziev
Shankar Konar
Leandro F. L.
Oleh Usik
Davide Riccardo Caliendo
Zach Nanninga
Eden Duong
David Haecker
Yaroslav Garmash
John Carlo Octabio
Ihor Sviziev
Rafael Kassner
Sean van Zuidam
Bartosz Górski
Milind Singh
Kate Kyzyma
Damián Culotta
Anton Evers
Kate Kyzyma
Nikita Sarychev
Tu Nguyen
Alexander Menk
29174, 30240
Barny Shergold
Jonas Hünig
Tu Nguyen
Alexander Taranovsky
David Manners
Navarr Barnier
Peep van Puijenbroek
Petkovski Marjan
Oleh Usik
Timon de Groot
Nirav Patel
Dan Wallis
Sean van Zuidam
Tu Nguyen
Tu Nguyen
Gabriel Somoza
Dan Wallis
Rafael Corrêa Gomes
Bartosz Kubicki
Sudheer Singamsetti
Tu Nguyen
Wojtek Naruniec
25110, 25886, 28286
Sean van Zuidam
30063, 30066
Tu Nguyen
Pieter Cappelle
14398, 21885
Bartłomiej Szubert
Bas van Poppel
Ihor Sviziev
Ihor Sviziev
Eden Duong
Rafael Kassner
Nirav Patel
Tu Nguyen
Bartłomiej Szubert
Serhii Dzhepa
Alin Alexandru
Oleh Usik
guillaume quintard
Bartłomiej Szubert
22503, 24091
Nikolay Sumrak
Jonas Hünig
Yaroslav Bogutsky
Tu Nguyen
Sunil Patel
Oleh Usik
Pieter Hoste
29297, 29478
Johan Lindahl
Bartosz Kubicki
Ejaz Alam
Pieter Hoste
6868, 7252, 13316
Pratik Oza
Andrii Kasian
Kate Kyzyma
Stanislav Ilnytskyi
Andrii Beziazychnyi
Eduard Chitoraga
Sudheer Singamsetti
Sagar Dahiwala
Nikolaj Malevanec
Dmitry Tsymbal
Oleh Usik
Lukasz Bajsarowicz
Matei Purcaru
Vova Yatsyuk
Bartosz Kubicki
Simon Sprankel
Gabriel da Gama
Samuel Caçador
Vova Yatsyuk
30781, 197
Diego Sanabria
Evgen Mozok
Sanjay Patel
Shikha Mishra
30361, 30362
Shikha Mishra
Bartłomiej Szubert
Michael Bottens
Tu Nguyen
Saphal Jha
Andrii Kasian
Yaroslav Rogoza
Oleh Usik
Andrii Kalinich
Viktor Kopin
Thomas Klein
Oleh Usik
Oleh Usik
Oleh Usik
Ihor Svizievv
Andrii Kalinich
Viktor Kopin
Nitish Singh
Oleh Usik
Nazar Klovanych
Oleh Usik
Marush Denchev
Viktor Kopin
Andrii Kalinich
Viktor Kopin
Nikolaj Malevanec
Andrii Beziazychnyi
Alexander Turiak

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.2 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 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.