Magento Open Source 2.4.0 release notes

Magento Open Source 2.4.0 introduces support for PHP 7.4, Elasticsearch 7.6.x, and MySQL 8.0. Substantial security changes include the enablement of two-factor authentication in the Admin by default.

With this release, the Authorize.Net method integration has been removed from core code. Merchants should migrate to the official extension that is available on the Commerce Marketplace.

NOTE
Braintree payment integration: Prior to 2.4.0, it was recommended that merchants install and configure the official Braintree payment integration extension from the Commerce Marketplace to replace the core integration. With this release (2.4.0), the extension is now included in the release. Merchants must follow additional steps to ensure that Braintree works properly in a 2.4.0 deployment. See Braintree for more information on how to migrate to 2.4.0.

This release includes all the improvements to core quality that were included in 2.3.5-p1, over 100 new fixes to core code, and 30 security enhancements. It includes the resolution of 226 GitHub issues by our community members. These community contributions range from minor clean-up of core code to significant enhancements in Inventory Management and GraphQL.

NOTE
Minor releases bring substantial code enhancements. Before upgrading to 2.4.0, confirm that your environment meets the minimal technical stack requirements.
NOTE
Adobe Commerce releases may 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.
NOTE
The package names of security releases are typically appended with -p1. However, we could not avoid deviating from these naming conventions with 2.3.5, which in turn has had a temporary ripple effect on the subsequent security package names. Specifically, the full-feature 2.3.5 release is 2.3.5-p1. The security release that we will release when 2.4.0 GAs will be 2.3.5-p2. We hope to return to the usual naming conventions in future releases.

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 (for example, 2.3.5-p2) provides. Patch 2.3.5.2 (Composer package 2.3.5-p2) is a security patch that provides fixes for vulnerabilities that have been identified in our previous quarterly release, 2.3.5-p1. All hot fixes that were applied to the 2.3.5 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.3.5-p2), 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, Inventory Management 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.

Highlights

Look for the following highlights in this release:

Substantial security enhancements

This release includes over 30 security fixes and platform security improvements.

Over 30 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 Security Updates Available for Magento for a discussion of these fixed issues. for a discussion of these fixed issues.

Additional security enhancements

  • Implementation of 2FA for Admin accounts, magento.com user accounts, and Cloud SSH access

    • Securing your Admin account. Two-factor authentication (2FA) is now required for the Admin. Admin users must first configure their 2FA before logging into the Admin through either the UI or a web API. 2FA is enabled by default. We strongly recommend against disabling the 2FA module. This extra step of authentication makes it harder for malicious users to log in to the Admin without authorization. See Two-factor Authentication (2FA).

    • Securing your account. Two-factor Authentication (2FA) provides an added, optional layer of security to better protect your magento.com account from unauthorized users who might want to use your account in ways you do not want. See Securing Your Account.

  • Securing Cloud SSH access. Adobe on cloud infrastructure provides multi-factor authentication (MFA) enforcement to manage authentication requirements for SSH access to Cloud environments. Multi-factor authentication for 2FA is not enabled by default on a project. Adobe highly recommends enabling this feature. Contact Support for assistance. See Enable multi-factor authentication for SSH access.

  • Template filter strict mode is now enabled by default. Components (including CMS pages and blocks) that use the template filter in legacy mode can be vulnerable to remote code execution (RCE). Enabling strict mode by default ensures that RCE attacks cannot be deliberately enabled.

  • Data rendering for UI data providers is now disabled by default. This removes an opportunity for malicious users to execute arbitrary JavaScript.

  • New \Magento\Framework\Escaper class. This class is provided for .phtml templates and the PHP classes that are responsible for generating HTML. This class contains HTML sanitization methods relevant to multiple contexts. The $escaper local variable is available inside .phtml templates and should be used instead of the deprecated $block->escape{method}. Use $escaper rather than $block as the use of $block->escape{method} has been deprecated.

  • Support for new security.txt file. This file is an industry-standard file on the server that helps security researchers report potential security issues to site administrators.

  • Enhancements to Content Security Policy (CSP) support. SecureHtmlRenderer has been added to the Framework and is available in .phtml templates to whitelist inline style and script tags. Inline scripts and styles are not permitted with default CSP configuration, which can be overridden by XML files.

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

Platform upgrades

The following platform upgrades help enhance website security and performance. Supported versions of PHP and PHPUnit, Elasticsearch, MySQL, and other dependencies are listed in technology stack requirements.

  • PHP 7.4 support introduced and PHP 7.1 and 7.2 deprecated. 2.4.0 introduces support for PHP 7.4.

  • Support for PHPUnit 9.x and deprecation of PHPUnit 6.5. PHP 7.4 requires the use of the latest PHPUnit testing framework, which is PHPUnit 9.x. Commerce Marketplace extension vendors must confirm that all new extension versions are compatible with PHP 7.4 and that all unit and integration tests have been configured to be run with PHPUnit 9.

  • Elasticsearch 7.6.x support. Elasticsearch 7.6.x is now the default catalog search engine for Adobe Commerce and Adobe Commerce. You cannot install or upgrade to version 2.4.0 without also installing Elasticsearch 7.6.x. Elasticsearch version 2.x code has been removed. Elasticsearch versions 5.x and 6.x have been deprecated and are no longer supported. See Search engine prerequisites.

  • MySQL 8.0 support. Version 2.4.x supports MySQL 8.x. (2.4.0 was tested with MySQL 8.0.20.) Merchants are encouraged to migrate their deployments to MySQL 8.x to take advantage of its improved performance, security, and reliability. Although MySQL 5.7 is still supported for Magento 2.4.x, MySQL 5.6 is no longer supported. You cannot host 2.4.x with a MySQL 5.6 database. See MySQL.

  • Removal of the MySQL catalog search engine. The MySQL search engine has been removed from 2.4.0 and replaced as the default search engine with Elasticsearch. Elasticsearch provides superior search capabilities as well as catalog performance optimizations. All merchants must have Elasticsearch to install and deploy 2.4.0. See Verify Elasticsearch is installed.

  • MariaDB 10.4 support. Support for MySQL 8.0 provides the opportunity for merchants to deploy MariaDB 10.4 with Magento Open Source. Although merchants can still use MariaDB 10.2 with 2.4.0, we recommend upgrading to MariaDB 10.4 for improved performance and reliability. MariaDB 10.0 and 10.1 are no longer supported (as a result of removing support for MySQL 5.6 in this release).

  • Migration of dependencies on Zend Framework to the Laminas project to reflect the transitioning of Zend Framework to the Linux Foundation’s Laminas Project. Zend Framework has been deprecated. See the Migration of Zend Framework to the Laminas Project DevBlog post.

  • Decomposition of Controllers allows extension developers to implement ActionInterface directly without “layer supertype” classes. See the Decomposition of Controllers DevBlog post. Enhancement started by Vinai Kopp in pull request 16268 and finalized by Lukasz Bajsarowicz in pull request 26778. GitHub-9582

  • Removal of the core integration of the Signifyd fraud protection code. This core feature is no longer supported. Merchants should migrate to the Signifyd Fraud & Chargeback Protection extension that is available on the Commerce Marketplace.

  • The core Braintree module has been removed from the code base. The Braintree Payments module now provides the same feature set. See Braintree Payments.

  • The Internet Explorer 11.x browser is no longer supported.

Infrastructure improvements

This release contains enhancements to core quality, which improve the quality of the Framework and these modules: Customer Account, Catalog, CMS, Import, Cart and Checkout, and B2B.

  • Removal of core integration of third-party payment methods. With this release, the Authorize.Net payment method integration has been removed from core code. Merchants should migrate to the official extension that is available on the Commerce Marketplace. See the Deprecation of payment integrations devblog post.

  • Support for partial-word search for Elasticsearch (new default search engine). Elasticsearch now supports the use of partial words in search terms for product names and SKUs when using quick search. This capability was supported by the MySQL search engine, which has been deprecated and replaced by Elasticsearch in this release.

  • PayPal JavaScript SDK upgrade. We’ve migrated the PayPal Express Checkout integration to the latest PayPal JavaScript SDK, an SDK that automatically collects and passes needed risk parameters to PayPal. The behavior of the PayPal Express Checkout payment method remains unchanged. However, upgrading this SDK to the latest version let merchants access the latest features and security enhancements.

  • Deprecation and removal of the Web Set Up Wizard. You must use the command line to install or upgrade 2.4.0. See Install Magento.

  • Composer update plugin. Composer plugin streamlines the upgrade process by resolving changes that must be made to the root project composer.json file before updating to a new version. This plug-in protects against overwriting customizations. See Upgrade using the composer root plugin.

  • Seller-assisted shopping. This feature allows merchants to view the storefront on behalf of their customers. Customers opt to allow storefront access to their accounts. This community-developed feature includes an original extension developed by MAGEFAN. See Seller Assisted Shopping. Features include:

    • ACL to control which administrators can log in to customer accounts can be configured on a per-website basis
    • Compatibility with multiple websites and customer account scopes
    • Orders placed on behalf of customers are logged in the storefront and Admin
    • All sessions are destroyed following administrator logout, and administrators cannot access customer passwords.

Performance improvements

  • Improvements to customer data section invalidation logic. This release introduces a new way of invalidating all customer sections data that avoids a known issue with local storage when custom sections.xml invalidations are active. (Previously, private content (local storage) was not correctly populated when you had a custom etc/frontend/sections.xml with action invalidations.) See Private content.

  • Multiple optimizations to Redis performance. The enhancements minimize the number of queries to Redis that are performed on each request. These optimizations include:

    • Decrease in the size of network data transfers between Redis and Magento

    • Reduction in Redis’ consumption of CPU cycles by improving the adapter’s ability to automatically determine what needs to be loaded

    • Reduction in race conditions on Redis write operations

    See Use Redis for the page and default cache and Configure caching.

  • Improved caching of results of SQL queries to inventory tables. These enhancements include:

    • Caching of SQL queries to the inventory_stock_sales_channel table (1 query instead of 16)

    • Caching of result of queries to the inventory_stock table (1 query instead of 16)

  • Improvement of up to 25-30% to Quick Order add-to-cart performance.

  • Merchants can now use lazy loading to load images.

Adobe Stock Integration v2.0

Ability to license stock image previews from the Media Gallery. Merchants can now find any Adobe Stock preview image in the Media Gallery, which reduces the number of steps required to license stock preview image.

This replacement for the former Media Gallery offers a new, searchable interface for media assets. Administrators can now search, filter, and sort images up to 30x faster than they could in the earlier version of this feature. Merchants can use this tool to evaluate storefront image usage. Extension developers should be aware that extensions that were developed for the Media Gallery will not work as expected with the new Media Gallery.

Inventory Management

Inventory Management enhancements for this release include support for in-store pickup and bundle product support. See Inventory Management release notes for a more detailed discussion of recent Inventory Management bug fixes.

GraphQL

GraphQL enhancements include:

  • pickupLocations query supports the Inventory In-store pickup feature
  • categories query returns a list of categories that match a specified filter. This query differs from the categoryList query in that it supports pagination.
  • reorderItems mutation allows a logged-in user to add all the products from a previous order into their cart.

See the GraphQL Developer Guide for details on this and other enhancements. See Release notes for a detailed discussion of recent GraphQL bug fixes.

PWA Studio

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

Functional Testing Framework (MFTF)

MFTF v3.0.0 includes these new features and includes support for PHP 7.4 and PHPUnit 9:

  • MFTF helpers, which can create custom actions outside of the test framework
  • schema updates for test entities
  • sub-folders in test modules
  • nested assertion syntax
  • static check that checks and reports references to deprecated test entities

This release also removes deprecated actions and upgrades scripts that were added to upgrade tests to MFTF major version requirements.

Vendor-developed extension enhancements

This release of includes extensions developed by third-party vendors. It introduces both quality and UX improvements to these extensions and an expansion of MFTF coverage.

Commerce Marketplace extension vendors should confirm that their extensions are compatible with PHP 7.4 when publishing a new version of their extension for 2.4.0.

Amazon Pay

This release includes:

  • Updates to CSP allowlists
  • Ability to do multiple authorizations for a multi-item order
  • Support for Japanese addresses

Braintree Payments

This extension replaces our core Braintree integration. It provides the same features as the Braintree core integration. See Braintree Payments.

Klarna

This release includes new on-site messaging options to help shoppers understand the available credit and financing options. It also includes improvements to:

  • refunds
  • API efficiency
  • cookies and unit tests
  • discounts
  • configuration settings now contain On-Site Messaging section for the control of the storefront display of Klarna promotional messaging

Vertex

This release of Vertex includes the following new feature and enhancements:

  • Improvements to the Admin configuration user experience
  • Replacement of installation and upgrade scripts with XML schema files and patches
  • Removal of deprecated code (ApiClient and ClientInterface)

Yotpo

Yotpo Ratings and Reviews are integrated with Page Builder.

Fixed issues

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

Installation, upgrade, deployment

  • You can now successfully remove a website along with the website’s scope-specific configuration settings in app/etc/config.php as expected. Previously, when you tried to remove the website, the operation failed, and the application displayed this error: The website with code xxx that was requested wasn't found. Verify the website and try again. Additionally, the application displayed this error on the storefront: Config files have changed. Run app:config:import or setup:upgrade command to synchronize configuration. GitHub-24061
  • Configuration settings that are disabled in index.php are no longer editable from the Admin.

Magento Open Source installation now completes successfully, and stores are created as expected, when store configuration is pre-defined in config.php.

  • \Magento\Store\App\Config\Source\RuntimeConfigSource::getEntities has been refactored to decrease the number of SHOW TABLE STATUS queries it makes. (This change reverts to the behavior this function displayed in 2.3.3.)
  • Data scripts are no longer re-run whenever you attempt to upgrade the database by running bin/magento setup:upgrade. Previously, upgrade scripts were re-run unnecessarily, which affected performance. GitHub-19469
  • The application now displays the following behaviors when your connection to Redis is interrupted. Previously, the application did not reload the current page and displayed this error: An error has happened during application run. See exception log for details.

    • Admin and storefront sessions expire
    • Admin and storefront users must log in again
    • Session data is saved to var/session/
    • No error or exceptions are logged.
  • The bin/magento setup:di:compile command no longer fails with anonymous classes. Fix submitted by Yevhen Sentiabov in pull request 26533. GitHub-26532, GitHub-21555
  • Problems with LESS compilation in Magento’s Luma theme when using an alternative LESS compiler than the one that ships with the application by default have been resolved. Fix submitted by Pieter Hoste in pull request 24003. GitHub-23619
  • You no longer need to have a writeable env.php file when switching to maintenance mode. Instead, the application sets the no-cache headers for all frontend requests in maintenance mode (Cache-Control). Previously, you could not enable maintenance mode when env.php was read-only, and the application tried to disable the FPC when switching into maintenance mode. Fix submitted by Marco K̦pcke in pull request 25790. GitHub-24229
  • db-ssl-verify no longer results in an undefined index error during a ddev setup. Fix submitted by Daniel Ruf in pull request 26763. GitHub-26762
  • Composer dependencies have been updated to implement Redis key expiry, which has improved Redis performance. Fix submitted by toxix in pull request 25488. GitHub-25487

Adobe Stock Integration

  • CSS styles have been added to the Adobe Stock image display to support highlighting the selected image. Fix submitted by Serhiy Zhovnir in pull request 25864. GitHub-761
  • Navigation through Adobe Stock preview images is no longer triggered by moving the input field cursor using arrow keys. Fix submitted by Adarsh Manickam in pull request 27138. GitHub-973
  • The application now caches messages for errors that occur when a customer tries to apply a filter to Adobe Stock images. Fix submitted by Shankar Konar in pull request 26502. GitHub-863
  • The application no longer saves a preview of an Adobe Stock image when you move the cursor to the window’s left vertical scroll bar after clicking Save Preview but not confirming the save operation. Fix submitted by Serhiy Zhovnir in pull request 27399. GitHub-1002

Backend

  • Email templates (Admin > Marketing > Communications > Email Templates) can now be previewed from the Admin when JavaScript minification is enabled. Previously, when you tried to preview an email template, the Email Preview popup window was empty. GitHub-25068
  • Administrators can now log into the Admin as expected after an administrator account with limited privileges has been created. Previously, the Admin was not accessible. Instead, users with these permissions were redirected to the storefront with a 404 error. Fix submitted by Eden Duong in pull request 25909. GitHub-25881
  • The application no longer duplicates SEO data such as URL key, meta title, meta keywords, and meta description when you duplicate a product. Fix submitted by Dasharth patel in pull request 26659. GitHub-26054
  • The application no longer throws an error when you delete an image from a page while creating it from Admin > Content > Pages > Add New Page. Previously, the application threw this error in the developer console: 500 (Internal Server Error). Fix submitted by Eden Duong in pull request 25924. GitHub-25893

Bundle products

  • The performance of the catalog_product_price re-index operation for bundle products has been improved.
  • Administrators can no longer manually enter a tax class in the Admin for a bundle product when the bundle product’s Tax Class and Dynamic Price settings are disabled for the default store view. Previously, when an administrator unchecked the Use Default Value option next to Tax Class, the application enabled the option, permitting an administrator to enter another value and save the product.
  • Bundle product prices are now calculated correctly on product pages.
  • You can now add any number of bundle products to your shopping cart without error. Previously, when you added a bundle product to your cart, then navigated to the cart, the application displayed this error: Please correct the quantity for some products.

Cache

  • The cache.xsd schema from Magento\Framework\Cache has been refactored so that a cache type without an instance attribute no longer cause exceptions when you disable a module through the Admin cache management. Previously, when you created a cache type using cache.xml without the instance argument, the application threw an exception when you tried to disable it. Fix submitted by Andrii Beziazychnyi in pull request 27307. GitHub-26224
  • health_check.php no longer fails if a database cache engine is configured in your deployment. Fix submitted by Andrii Beziazychnyi in pull request 25722. GitHub-25669

Cart and checkout

  • The application no longer throws an error during checkout when the Synchronize with Backend configuration setting is enabled. GitHub-23833
  • Radio buttons for shipping methods are now enabled as expected in the checkout workflow.
  • The order review page in the checkout workflow now loads successfully for an order being shipped to multiple addresses when Terms and conditions with the Applied Manually setting is enabled. Previously, the Review page did not pass validation, and the application displayed a 404 error.
  • The application now displays the spinning icon while prices are updated on the cart.
  • The application now displays an informative message when a product in the mini cart becomes out-of-stock before checkout. Once you’ve removed the out-of-stock item, the application displays the Proceed to Checkout button. Previously, the application did not display this button.
  • The application now displays an informative error message when you try to add a product by clicking Order by SKU when the file for upload is corrupt. Previously, the application displayed a blank page.
  • The application now applies cart price rules to only the bundle product child products that match the rule criteria. Previously, the application applied the cart price rule to all child products that belonged to the bundle product.
  • StorefrontMiniCartSection has been replaced byStorefrontMinicartSection in MFTF tests. Fix submitted by Andrii Kalinich in pull request 27955. GitHub-27897
  • Hardcoded references to the country selector component on the shipping address form have been removed. Fix submitted by Mateusz Krzeszowiak in pull request 25541. GitHub-22416
  • The application no longer underlines the Delete icon in the shopping cart when the cursor hovers over the icon when viewing the storefront in Internet Explorer. Fix submitted by divyajyothi5321 in pull request 26173. GitHub-26164
  • Changing the billing street no longer changes a customer’s shipping address when a single address has been selected for both billing and shipping address. Fix submitted by Yurii Tvardyi in pull request 26279. GitHub-26276
  • The promotion region of the mini cart is now rendered as expected. Fix submitted by Matti Vapa in pull request 25375. GitHub-25373

Cart price rule

  • Cart price rules that are based on payment methods are now applied during the checkout workflow. GitHub-24206
  • Corrected the behavior of the Datepicker page element on Admin > Marketing > Promotions > Catalog Price Rule. Fix submitted by Hitesh in pull request 26290. GitHub-26289
  • StorefrontMiniCartSection has been replaced by StorefrontMinicartSection in MFTF tests. Fix submitted by Andrii Kalinich in pull request 27955. GitHub-27897
  • The unused coupon grid in the create new cart price rule workflow has been disabled. Fix submitted by Eden Duong in pull request 24471. GitHub-24468
  • Changing the billing street no longer changes a customer’s shipping address when a single address has been selected for both the billing and shipping addresses. Fix submitted by Yurii Tvardyi in pull request 26279. GitHub-26276

Catalog

  • The application no longer throws an error when you change the name of a tiered product that is included in a scheduled update. Previously, when you tried to save the product with a new name, the application displayed this error: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '3-0-0-2.0000-0' for key 'UNQ_EBC6A54F44DFA66FA9024CAD97FED6C7', query was: INSERT INTO catalog_product_entity_tier_price (all_groups, customer_group_id, qty, value, website_id, percentage_value, row_id) VALUES (?, ?, ?, ?, ?, ?, ?)
  • Custom attribute values can now be saved as expected from the Admin.
  • The Recently View Products feature now shows products that are associated only with the current store view in multi-store deployments when Stores > Configurations > Catalog > Recently Viewed/Compared Products > Show for Current is set to store view. Previously, the application displayed recently viewed products from all websites, no matter which website the product was assigned to.
  • The application now displays product images in the mini cart without distortion. Previously, the applicationstretched the image in the mini cart to fill the entire width and height of the image container.
  • The getBasePrice function now returns a float value as expected rather than a string.
  • The product compare feature now works as expected. It now displays only products in the current user’s compare list.
  • You can now assign a default watermark to a theme. Previously, after assigning the watermark, the application threw a fatal error.
  • You can now successfully edit a configurable product with many variants (approximately 5,000) from the Admin. Previously, when you tried to edit a configurable product with many subproducts, the application displayed this error: Warning: DOMDocumentFragment::appendXML(): Entity: line 1: parser error : CData section too big found in /vendor/magento/framework/View/TemplateEngine/Xhtml/Template.php on line 60
  • Sorting on attribute sets on Admin > Catalog > Products is now based on alphabetical order as expected.
  • The Recently Viewed Products feature now works as expected in multi-store deployments.
  • The Product in Websites checkbox of the new product page is now enabled by default for restricted administrators in multi-site deployments. Previously, the checkbox for the non-default website was not preselected, and if the administrator left the checkbox unselected, the application displayed an error message.
  • addToCart events are now tracked as expected in the data layer. Previously, after changing the configurable options for a product, then clicking Add to cart, the new addToCart event was not added to the data layer.
  • The mini cart and Admin shopping cart (Admin > Customers > Manage Shopping Cart) now display correct product prices when a Catalog Price Rule is applied. Previously, the storefront shopping cart displayed the correct product price, but the mini cart and Admin shopping cart displayed the original product price.
  • Filtering on the Admin product grid website column now works as expected. Previously, filter results did not display the correct number of products, but consistently displayed the total number of products as 1.
  • Price condition uses catalog_product_entity_decimal to filter by price. However, this table contains no records for configurable, bundle dynamic, and grouped products because these products have no fixed price. The correct table to use for filtering by price is catalog_product_index_price.
  • The Admin catalog and product lists now display currency symbols in the MSRP, Cost, and Special Price columns. Fix submitted by Sergiy Vasiutynskyi in pull request 27261. GitHub-21910, GitHub-20906, GitHub-20472
  • The Add for Customer Group Price pop-up window (Admin > Catalog > Products > New Product > Advanced pricing) now closes as expected when you click the close icon. Fix submitted by Ashna-Jahan in pull request 25759. GitHub-25433
  • The sample description that is provided for a newly product’s description and title no longer contains double quotation marks. Fix submitted by Nathan Morgan in pull request 25655. GitHub-25654
  • The application no longer throws an error when you try to filter products on the Category page using an invalid price. Previously, the application logged this error in the system log. Fix submitted by Ihor Sviziev in pull request 25912. GitHub-25911
  • You can now navigate through multi-page category search results. Previously, the application created duplicate pages of search results when you tried to use the Back button to return to the first page of results. Fix submitted by Douglas Radburn in pull request 25337. GitHub-14971
  • Corrected the return type to string|null for the getSourceModel method in the Eav\Attribute.php class. Fix submitted by Mychailo in pull request 25333. GitHub-25278
  • Saving a new (duplicated) product no longer results in the duplication of the product’s images hundreds of times. Fix submitted by Jeroen in pull request 25875. GitHub-9466
  • The application no longer throws a JavaScript error when you delete a product with a custom option of type file during creation of an order from the Admin. Fix submitted by adrian-martinez-interactiv4 in pull request 24843. GitHub-24842
  • Creating a product with no image by using product_page_image_large in your layout results in a placeholder image being displayed as expected. Previously, the application threw this error: Fatal error: PHP Fatal error: Uncaught TypeError: Argument 1 passed to Magento\Catalog\Block\Product\ImageFactory::getRatio() must be of the type integer, null given. Fix submitted by Lukasz Bajsarowicz in pull request 26974. GitHub-26973
  • You can use the POST /V1/:sku/links endpoint to set product links with an empty array of products when the product has existing links. Previously, the application threw an error. Fix submitted by Sathish Subramanian in pull request 26979. GitHub-26800
  • You can now use the Actions dropdown menu from the Products grid to specify whether a product has weight when you update multiple products’ attributes from the Admin. Fix submitted by Bartomiej Szubert in pull request 26075. GitHub-6310
  • Validation logic has been added to the Products per Page on Grid Allowed Values and Products per Page on Grid Default Value fields of the store configuration page. Previously, store administrators could enter unavailable values in these fields. Fix submitted by Lukasz Bajsarowicz in pull request 27093. GitHub-27089_

Catalog widget

  • The CatalogWidget products list now works as expected with anchor categories, and products from anchor categories are now matched and displayed. Previously, when you selected a parent category that was an anchor, but that did not contain assigned products, products were not visible in the widget.
  • The application now displays all children of a selected parent category as expected. Previously, if you selected a parent category that was an anchor, but that did not contain assigned products, the application did not display all nested products.
  • The Recently Viewed Products widget now works correctly when Stores > Configuration > Catalog > Catalog > Recently Viewed/Compared > Synchronize widget products with backend storage is set to Yes.

Cleanup

  • Removed an extra closing tag from module XML. Fix submitted by Tejash Kumbhare in pull request 26339. GitHub-26338
  • Corrected misalignment of the My billing and shipping address are the same checkbox on the Review and Payments page section of the checkout workflow. Fix submitted by divyajyothi5321 in pull request 26169. GitHub-26168
  • Removed unnecessary white space between the field labels and asterisks on the Shipping Address section of the checkout workflow. Fix submitted by Daniel Ruf in pull request 26285. GitHub-26275
  • Corrected misalignment of the radio buttons on the Shipping methods section of the checkout workflow. Fix submitted by Hitesh in pull request 25966. GitHub-25962
  • Corrected inconsistent menu spacing in mobile view. Fix submitted by Hitesh in pull request 26238. GitHub-26235
  • Corrected misalignment of the mini cart Edit and Remove icons in mobile view. Fix submitted by Vasilii Burlacu in pull request 27493. GitHub-26652
  • Corrected misalignment of the tax rate zip/post code range and checkbox on the Add New Tax Rate/Zip Code page (Admin > Store > Taxes > Tax Zones and Rates). Fix submitted by Sathish Subramanian in pull request 26932. GitHub-26917
  • The link from the Setup Wizard to the Admin now works as expected. Fix submitted by Oleh Usik in pull request 26100. GitHub-24990
  • Sorting has been disabled on the status column of the Cache Management grid in the Admin. Fix submitted by Sathish Subramanian in pull request 26215. GitHub-26208
  • Corrected misalignment of page elements on the Admin > Stores > Attributes > Ratings > Add new ratings dialog. Fix submitted by Sathish Subramanian in pull request 27014. GitHub-26992
  • Corrected misalignment of the calendar icon on the Add Design Change page. Fix submitted by Eduard Chitoraga in pull request 26063. GitHub-20379
  • Removed unnecessary space in submenu display on the home page hover menu. Fix submitted by Hitesh in pull request 25973. GitHub-25972
  • Corrected misalignment of the price labels on the storefront product details page. Fix submitted by divyajyothi5321 in pull request 26237. GitHub-25936
  • Corrected misalignment of the out-of-stock text in relation to the Add to cart button on the product list page in mobile view. Fix submitted by divyajyothi5321 in pull request 26183. GitHub-26181
  • The integration success message displayed on Admin > System > Extensions > Integrations is now displayed correctly. Fix submitted by divyajyothi5321 in pull request 26011. GitHub-25930

CMS content

  • You can now save and duplicate all CMS pages. Previously, the application threw this exception when you tried to duplicate certain pages: Unique constraint violation found.
  • The application now lets you create CMS blocks with identical names if the blocks are assigned to different store views.
  • Select from Gallery image thumbnails are now cached as expected. Previously, these images were resized on the fly.
  • The application no longer throws an error when you save a CMS page that has been assigned to multiple stores. Previously, when you created or edited a CMS page, the application saved the page but also threw this error: Item (Magento\VersionsCms\Model\Hierarchy\Node) with the same ID "PAGE_ID" already exists.
  • New CMS pages are now added as expected to a website’s store page hierarchy.
  • The CMS page custom layout update logic has been improved. The application now applies specific layout changes from cms_page_view_selectable_home_somechanges.xml. Fix submitted by Sergiy Vasiutynskyi in pull request 27131. GitHub-26758

Configurable products

  • Child products of a configurable product can now be successfully disabled through the API.
  • Cart price rules with a condition set as Category (Parent only) now consistently work as expected.
  • You can now add a configurable product to the cart from the Cross-Sells tab. When you select a product and click Add to Cart from this tab, you are now taken to the product details page, where you can select specific product options. Previously, the application redirected you to a 404 error page.
  • The application no longer links a simple product to a configurable product when the API call to link these products fails.
  • Corrected the rendering of SKUs in the Current Variations list for a configurable product. Fix submitted by KaushikChavda in pull request 26007. GitHub-25591
  • You can now save system.xml configuration information by entering values in Admin > System > Configuration in fields that do not have associated labels. Fix submitted by Andrii Chorniy in pull request 25985. GitHub-23899
  • The performance of \Magento\ConfigurableProduct\Model\Product\Type\Configurable::isSalable has been optimized. Fix submitted by Stanislav Ilnytskyi in pull request 26071. GitHub-26065
  • The logic that is responsible for updating configurable product images has been improved. Previously, simple products associated with a configurable product displayed only the default image associated with the configurable product, and the application sometimes displayed the wrong main image for the product. Fix submitted by Sergiy Vasiutynskyi in pull request 26560. GitHub-26473, GitHub-26856, GitHub-26858
  • The application now displays a product’s special price as expected when you select a discounted option of a configurable product. Previously, class="normal-price" was not changed to class="special-price" when a discounted option was selected. Fix submitted by Ravi Chandra in pull request 26170. GitHub-24972

Cookies

  • The setRedirectCookie and clearRedirectCookie functions now work as expected. Previously, these functions sent cookies to the browser, but all cookie parameters were missing. GitHub-24547
  • Metadata has been added to the setRedirectCookie and clearRedirectCookie functions. Fix submitted by Alexander Lukyanov in pull request 24612. GitHub-24547

Custom customer attributes

  • The application no longer throws an error when you include an empty customer attribute field in the Forms to Use In field while creating a Company account on the storefront. Previously, the application threw this error: PHP Fatal error: Uncaught TypeError: Argument 2 passed to Magento\Eav\Model\Attribute\Data\Text::validateLength() must be of the type string, null given.

Customer

  • Customers who are subscribed to newsletters as a guest are no longer unsubscribed after registering for a new account.
  • The application now uses a new PHPSession for each change of password.
  • You can now successfully create a customer and associate it with a particular website using the Associate to Website dropdown menu on Customers > All Customers > Add new Customer. Previously, when you tried to associate a new customer with the non-default website in a multi-site deployment, the application displayed this error: The store view is not in the associated website.
  • The application now saves the information a customer enters in the default billing and shipping fields during checkout when the transaction is initially declined due to an invalid credit card but later completed successfully. Previously, although the application created the order when the customer entered valid payment information, it did not update the default billing or shipping addresses in the My Account section of the checkout workflow.
  • The application now honors customer group settings when you create a new customer from the Admin in a multi-site deployment.
  • The application now successfully imports customer data using the Customer and Addresses (single file) option when cron is enabled and the Customer Grid indexer is set to Update By Schedule. After cron executes, the imported customer information is available in the Admin as expected. Previously, the applicationimported the customer data, but did not update the customer grid with the newly imported customer records.
  • You can now create a new customer from the storefront when the date of birth is required. Previously, you could not create a new customer when this field was required, even when you entered valid DOB values. GitHub-26700
  • Customer creation from the Admin now honors the default customer group setting as expected.
  • The PHPSessionId is now changed as expected after a customer logs out and then logs back in.
  • The Admin view of a customer cart now displays all the products that were added to the cart from multiple websites in a multi-website deployment. Previously, when a customer added a product to their cart from a non-default website, the product was not displayed in the Admin even when Share customer account is set to Global.
  • The application now displays only the products that the customer has placed in their cart when the cart is viewed from the Admin. Previously, a customer’s shopping cart displayed all the products in the catalog when viewed from the Admin. Fix submitted by Ravinder in pull request 26489. GitHub-26437
  • Validation now works as expected for the Date of birth field when editing a customer from the Admin. Previously, the application did not factor in the user locale, and for some birthdates displayed this error: The Date of Birth should not be greater than today. Fix submitted by Sergiy Vasiutynskyi in pull request 27149. GitHub-27027
  • The email field is no longer required when placing an order from the Admin. Fix submitted by solwininfotech in pull request 24479. GitHub-22251
  • The My Account dashboard now displays email address values correctly in mobile view. Fix submitted by Eden Duong in pull request 25942. GitHub-25935
  • Clicking the Create an Account button on the customer registration form multiple times no longer submits the registration request more than once. Fix submitted by princeCB in pull request 26642. GitHub-26590
  • Customers who are subscribed to newsletters as a guest are no longer unsubscribed after registering for a new account.
  • The application now uses a new PHPSession for each change of password.
  • You can now successfully create a customer and associate it with a particular website using the Associate to Website dropdown menu on Customers > All Customers > Add new Customer. Previously, when you tried to associate a new customer with the non-default website in a multi-site deployment, the application displayed this error: The store view is not in the associated website.
  • The application now saves the information a customer enters in the default billing and shipping fields during checkout when the transaction is initially declined due to an invalid credit card but later completed successfully. Previously, although the application created the order when the customer entered valid payment information, it did not update the default billing or shipping addresses in the My Account section of the checkout workflow.
  • The application now honors customer group settings when you create a new customer from the Admin in a multi-site deployment.
  • The application now successfully imports customer data using the Customer and Addresses (single file) option when cron is enabled and the Customer Grid indexer is set to Update By Schedule. After cron executes, the imported customer information is available in the Admin as expected. Previously, the applicationimported the customer data, but did not update the customer grid with the newly imported customer records.
  • You can now create a new customer from the storefront when the date of birth is required. Previously, you could not create a new customer when this field was required, even when you entered valid DOB values. GitHub-26700
  • Customer creation from the Admin now honors the default customer group setting as expected.
  • The PHPSessionId is now changed as expected after a customer logs out and then logs back in.
  • The Admin view of a customer cart now displays all the products that were added to the cart from multiple websites in a multi-website deployment. Previously, when a customer added a product to their cart from a non-default website, the product was not displayed in the Admin even when Share customer account is set to Global.
  • Validation now works as expected for the Date of birth field when editing a customer from the Admin. Previously, the application did not factor in the user locale, and for some birthdates displayed this error: The Date of Birth should not be greater than today. Fix submitted by Sergiy Vasiutynskyi in pull request 27149. GitHub-27027
  • The email field is no longer required when placing an order from the Admin. Fix submitted by solwininfotech in pull request 24479. GitHub-22251
  • The application now displays only the products that the customer has placed in their cart when the cart is viewed from the Admin. Previously, a customer’s shopping cart displayed all the products in the catalog when viewed from the Admin. Fix submitted by Ravinder in pull request 26489. GitHub-26437
  • The My Account dashboard now displays the displays email address values correctly in mobile view. Fix submitted by Eden Duong in pull request 25942. GitHub-25935
  • Clicking the Create an Account button on the customer registration form multiple times no longer submits the registration request more than once. Fix submitted by princeCB in pull request 26642. GitHub-26590

Directory

  • The Default State dropdown menu is now populated by data that is based on the allowed countries that have been assigned to the selected website when you configure a value for the Default Tax Destination Calculation field. Previously, this dropdown listed the countries that were assigned to the default website.

Downloadable

  • You can now use an import file to update downloadable products in bulk by SKU and description. Previously, validation errors occurred, and import failed.

EAV

  • The application now respects store-specific settings that determine whether the telephone number field of the checkout workflow is required in a multi-site deployment. Previously, in deployments where one store required this field in the checkout workflow and another store did not, customers who did not complete this field while checking out on the store that did not require it encountered this error: Please check the shipping address information. "telephone" is required. Enter and try again.
  • EAV sort order by attribute option_id now works as expected. Fix submitted by Tan Sezer in pull request 24360. GitHub-24357
  • You can now create a new product after adding a new attribute via REST and assigning it to an attribute set from the Admin. Previously, the application threw a 500 error. Fix submitted by Sergiy Vasiutynskyi in pull request 27191. GitHub-26827

Email

  • The authorization emails that are sent to a customer when they request a return now contain the RMA status as expected. Previously, this email displayed an empty string instead of the expected return status.
  • Customers are no longer redirected away from the current website when they report a forgotten password in multi-site deployments where customer accounts are shared globally. Previously, customers were redirected to the website on which the account was created.
  • Order confirmation emails that are sent to customers now include the list of ordered items as expected. Previously, when you created an email template in the Admin by loading and saving the default template, emails generated from this template did not include the list of ordered items. GitHub-26882

Frameworks

  • Dependencies on Zend Framework have been migrated to the Laminas project to reflect the transitioning of Zend Framework to the Linux Foundation’s Laminas Project. Zend Framework has been deprecated. Fix submitted by Ihor Sviziev in pull request 26436. GitHub-26335
  • Special price range settings (from/to dates) now work correctly for administrator accounts using a Dutch locale.
  • php bin/magento cron:run no longer processes items from the change log table multiple times. Previously, when you had more than 100000 new versions in the change log table, actions could be called several times for the same entity id.

  • php bin/magento setup:cron:run command has now been removed. References to this in crontabs should be removed when upgrading.

  • The update/cron.php file has been removed in 2.4.0, if this file exists on your installation, it can be safely removed. Also, remove references to this file in crontabs when upgrading.

  • The Update Attribute action now correctly updates the timestamp of a product’s updated_at column from catalog_product_entity when you update the product from the Admin edit product page.
  • Setting 'persistent' => '1' in env.php no longer throws an error when you run setup:upgrade.
  • The Invalid Form Key. Please refresh the page text string on the login page is now translated as expected.
  • We’ve improved the performance of the Magento\Framework\App\DeploymentConfig\Reader::load function. Previously, when a request was made to Magento, this function was called repetitively, which resulted in config.php and env.php config files being loaded each time the method was called.
  • The application no longer downloads a blank.html page when an administrator clicks on a product while creating an order from the Admin.
  • Non-cacheable blocks added to the default layout in reference instructions for non-existent (undeclared) components on the page no longer affect page caching. Adding non-cacheable blocks to default layout handlers renders all pages non-cacheable. This results from the layout generation process: During layout generation, the application collects all available layout handles for a particular page and merges instructions from them into the page’s final layout structure. The default layout handle is used as a basic handle for every page. As a result, layout updates that are declared for the default handler appear on every page. GitHub-9041
  • The MySQL lock manager is now the primary lock manager. As a result, the minimal required version of MySQL is 5.7.9.
  • queue_consumer.xml now allows numbers in the handler class. Previously, when a handler contained a number in its path, XSD validation failed. Fix submitted by Eden Duong in pull request 25952. GitHub-25731
  • An incorrect @var reference in the doc block of the class member variable $queueIterator in class \Magento\Framework\MessageQueue\Topology\Config has been corrected. Fix submitted by Artem Voloznov in pull request 24976. GitHub-24971
  • JavaScript page load listeners are now triggered to fire when a document is no longer loading rather than waiting until it is marked as complete as waiting until the document is marked as complete can lead to severe delays in rendering JavaScript content. Fix submitted by John Hughes in pull request 23313 and pull request 50. GitHub-22909
  • The application now displays the following informative message when you try to add a product to your wishlist with a quantity of 0 or negative number: Please enter a valid number in this field. Previously, the application displayed this error: We can't update your Wish List right now. Fix submitted by Pawe Tylek in pull request 25641. GitHub-25032
  • The application no longer supports inheritance of DTO classes from the Magento\Framework\Api\AbstractExtensibleObject class. Missing PHP annotation @api has been added to AbstractExtensibleModel, and the missing @deprecated annotation has been added to AbstractExtensibleObject. Fix submitted by Alexander Taranovsky in pull request 22011. GitHub-22010
  • You can now save products as expected after changing a product-related date (for example, news_from_date, news_to_date, special_price_from_date, special_price_to_date) in stores implementing non-English locales. Previously, the application threw an error similar to this: Invalid input datetime format of value '22/5/2019.

General fixes

  • The Customer module no longer has a dependency on the Review module. Previously, you could not disable the Review module due to this dependency.
  • The product edit page now loads successfully when the default attribute set for the page contains a dropdown attribute with the select label.
  • The graphical orders chart accessible from the Orders tab on the Admin now accurately reflects order quantity.
  • A store’s Admin URL no longer redirects to the storefront URL when these two URLs differ.
  • URL rewrite generation for subcategories now works correctly when using the performance toolkit profile with more than one website.
  • You can now delete an empty user model without deleting the Administrators role to which it is assigned.
  • The TinyMCE4 editor now supports all HTML tags.
  • Clicking the Refund Offline button in the create a credit memo workflow now generates a credit memo as expected. Previously, a JavaScript error disabled this button, and the application did not create a credit memo.
  • Merchants can now create a product attribute of type Decimal. Previously, due an earlier bug fix, the application did not display the product attribute type Price. GitHub-26949
  • The application no longer returns a 500 error when you try to open a Category page on the storefront when Layout = Product – Full Width has been set from the Design tab of the Category page.
  • Corrected a bug in AbstractSimpleObjectBuilder.php.
  • MAP (minimum advertised price) now works as expected for group products.
  • The application now redirects you to the home page of the appropriate store view when you change language on CMS pages in a multi-store deployment. Previously, the application displayed a 404 page when you changed language on certain CMS pages.
  • Order queries (SalesOrderIndexGridAsyncInsertCron) have been refactored to reduce the size of the data set returned and the frequency of the queries.
  • You can now successfully create a CMS page and assign it to the website root category in the CMS hierarchy.
  • Guests can now display a product price or add a product to the cart when category permissions are enabled (for example, when the Not logged in customer group has been granted these privileges).
  • Product rules now apply to out-of-stock products as expected. Previously, the application did not display out-of-stock products in the related products list even when the rule was configured to display out-of-stock products.
  • Clicking the Track shipping button for an order from the Admin now results in tracking information being displayed in a pop-up window as expected. Previously, this link took the administrator to the Log in page.
  • The application now displays an informative error message and continues to display the registration form as expected if an error occurs when a customer tries to complete a registration form that contains a multi-select customer attribute. Previously, the application displayed a 500 error.
  • The application now displays the Credit memo button after the partial refund of an order. Previously, the application did not display this button after you created a partial refund, and you could not create a credit memo for the rest of the order.
  • Bulk order updates through REST now modify the order status as expected. Previously, the application threw this error: report.ERROR: Property "AdditionalInformation" does not have accessor method "setAdditionalInformation" in class "Magento\Sales\Api\Data\OrderPaymentInterface".
  • Attribute filters are now displayed as expected in the Shopping Options block of the Category page.
  • Customer billing and shipping addresses are now displayed as expected under the Addresses tab on the Admin Customer Edit page when displayed in Internet Explorer. Fix submitted by Vasilii Burlacu in pull request 27383. GitHub-27370
  • All bookmark views now remain editable when you delete one. Previously, all bookmark views became uneditable after you deleted the first view for accounts with multiple bookmark views. Fix submitted by Bartomiej Szubert in pull request 26263. GitHub-14913
  • Layered navigation no longer breaks HTML5 validation of the swatch module. Previously, HTML validation errors occurred for attributes that were not defined in the W3C markup validation service, but those attributes have been changed to data attributes. Fix submitted by Nirav Patel in pull request 26055. GitHub-22363
  • An unused require.JS alias (critical-css-loader``) has been removed from app/code/Magento/Theme/view/frontend/requirejs-config.js. Fix submitted by Tu Nguyen in pull request 26987. GitHub-26963
  • The application now implements PHP7.x’s throwable interface to enable the catching of all errors that might potentially expose sensitive information such as passwords. Fix submitted by miszyman in pull request 25250. GitHub-23350
  • Pressing the ESC key when entering the name of a new folder on the create a new folder popup window now closes the popup as expected without creating the folder. Fix submitted by Shankar Konar in pull request 25349. GitHub-572
  • An incorrectly nested HTML structure has been corrected. Previously, this structure resulted in a broken layout for the list of related, up-sell, or cross-sell products. Fix submitted by Pieter Hoste in pull request 27926. GitHub-27920
  • Removed duplicated call to addToolbarBlock, which had resulted in two similar conditions in ORDER BY. Fix submitted by Vasilii Burlacu in pull request 27263. GitHub-26708
  • Merchants can now set an expiration date on Admin user accounts. Fix submitted by Laura Folco in pull request 22837. GitHub-22833
  • We’ve added the @api PHP annotation to AbstractExtensibleModel, the @deprecated PHP annotation to AbstractExtensibleObject, and @see to AbstractExtensibleModel. Fix submitted by Alexander Taranovsky in pull request 22011. GitHub-22010

GraphQL

  • The application now returns the GraphQL message The cart isn't active instead of Current user does not have an active cart under certain circumstances when a cart becomes inactive and a new cart ID is created. Fix submitted by Vadim Malesh in pull request 27187. GitHub-26117
  • Removed code that caused an error when using GraphQL to add products to a cart when a previously added product became out-of-stock. Fix submitted by AleksLi in pull request 27015. GitHub-26683
  • Corrected a problem in GraphQL in which the application did not return all the required information while using fragments on products query. Fix submitted by Riccardo Tempesta in pull request 26218. GitHub-26217

  • The GraphQL mutation setShippingMethodsOnCart no longer retrieves the wrong data in the available_shipping_methods attribute. Fix submitted by Vadim Malesh in pull request 27004. GitHub-26742

Grouped products

  • You can now add a simple product that belongs to a group product to the shopping cart when another simple product that belongs to that same group is out-of-stock. Fix submitted by Gihovani Filipp Pereira Dem̩trio in pull request 24955. GitHub-22304
  • The application now sends email to customers about refunded group products as expected. Fix submitted by Alexander Taranovsky in pull request 26246. GitHub-26245
  • You can now add a child product of a grouped product to your cart when one of the grouped product’s other child products is out-of-stock. Previously, when one child product was out-of-stock, you could not add any other child products to the cart.

Images

  • Images are now saved in pub/media/catalog/category as expected when you save category images. Previously, the applicationsaved these images in pub/media/catalog/tmp/category.
  • Watermark images no longer obscure the product image that they overlay. Previously, when the watermark image was larger than the product image it was applied to, the product image was not visible.
  • You can now successfully save an image to a category from the Admin. Previously, after you saved the image, part of the URL was missing, and you couldn’t re-open the image.
  • The application now displays .png images as expected after upload.
  • Using REST to add or update an image now creates an image thumbnail as expected. Fix submitted by Sergiy Vasiutynskyi in pull request 27170. GitHub-26825
  • Custom attributes of images generated by Block\Product\ImageFactory now render correctly. Previously, you could not add your own custom attributes to the attribute markup due to incorrect escaping of the HTML output. Fix submitted by alexander-aleman in pull request 26959. GitHub-25219
  • Images are no longer blurred when a storefront is viewed from an iPhone. Fix submitted by Dmitriy in pull request 24743. GitHub-24735
  • Images on the storefront are now responsive. Previously, image height was distorted. Fix submitted by Sean van Zuidam in pull request 27041. GitHub-27040
  • The default store logo is now visible on the storefront when the Magento_blank theme is used. Fix submitted by Vasilii Burlacu in pull request 27497. GitHub-27496

Import/export

  • The application no longer throws an error during import when imported data includes a swatch_image store-view key has a value of no_selection. Previously, the application threw this error: Imported resource (image) could not be downloaded from external resource due to timeout or access permissions in row(s): 1. GitHub-25026
  • The application now updates images as expected when you use the hide_from_product_page setting when importing products in deployments with multiple store views.
  • Customizable options are now imported as expected when row_id is not equal to a product’s entity_id. Previously, the application did not import customizable options when row_id was not equal to a product’s entity_id, which resulted in certain products not being imported.
  • Images associated with configurable products are now properly uploaded during import and available for viewing as expected from the product edit page.
  • Exported .csv files now reflect filter settings for including in-stock or out-of-stock products. Previously, the applicationexported all products, no matter which stock setting you selected.
  • You can now successfully import or update customers using the Customer and addresses single file option of the import workflow. Previously, when you selected this option, the application did not import the customer data and displayed this error: Invalid data for insert.
  • The Stock Indexer is now triggered as expected after import and updates product status. Previously, the Stock Indexer did not index the changed product inventory data.
  • The application now successfully imports all custom options for a configurable product’s child products when store_view_code is specified. This works whether you choose to import configurable products individually or collectively. Previously, the application did not successfully import all custom options when the import file contained more than one item and store_view_code was specified.
  • The application now provides a message during product import that identifies which products in the imported .csv file have duplicated keys. Merchants can use this information to resolve conflicts. Previously, the application displayed this error: Notice: Undefined index: name in /var/www/html/ee233dev/app/code/Magento/CatalogImportExport/Model/Import/Product.php on line 2524
  • The application now displays a more informative error message, and does not display a download link, when you try to delete a directory from the System > Export list. Previously, when you tried to delete a directory from this list, the application continued to display a download link for files that could not be downloaded, and displayed an uninformative error message.
  • The .csv file that is used during import now contains the correct links for downloadable products and is now correctly formatted to support importing and updating downloadable products.
  • The application now successfully exports a .csv file when you set import behavior for Replace, select a previously exported .csv file, and click Check data. Previously, the application displayed this error: Data validation failed. Please fix the following errors and upload the file again and Following Error(s) has been occurred during importing process.
  • The Stock Indexer is now triggered as expected after import and updates product status. Previously, the Stock Indexer did not index the changed product inventory data.
  • .csv files that are generated during product import now contain group titles for downloadable products as expected. Previously, unnecessary validation of group_title during import prevented the display of group titles for downloadable products.
  • When cron is enabled and you perform a customer import using the (Customer and Addresses (single file)) option, the application populates data to the Admin customer grid as expected. The customer grid displays the customers once manual re-indexing completes for customer_grid indexer. Previously, the application did not update the customer grid with newly imported customer addresses.
  • The application now displays the customer list as expected after automatic re-indexing. Previously, although manually running bin/magento index:reindex worked, the customer grid did not display customer information after automatic re-indexing.
  • The application now deletes temporary files from <Magento_home>/var as expected after product import has completed.
  • The application no longer creates duplicate SKUs in the Admin when products are imported by .csv file.
  • Import no longer fails when the imported configurable attribute includes an equal sign (=) in its value. Fix submitted by dhoang89 in pull request 25194. GitHub-25188
  • All exported grid data (both Magento Open Source and custom data) now have option labels instead of option values for all the columns with type Select or Multiselect. Previously, when you exported this data, the exported spreadsheet contained Columns with ID rather than the values that were displayed in the grid. Fix submitted by Maksym Novik in pull request 26523. GitHub-25963
  • The application now displays bundle products on the storefront as expected after you update a product by importing a .csv file. Fix submitted by Pavel Bystritsky in pull request 25664. GitHub-25540

Index

  • We have improved the performance of indexer_update_all_views. Indexing is now faster, inactive rules are no longer processed, and caches are cleared of entries for only changed products.
  • Product prices on the storefront now accurately reflect the application of a scheduled Catalog Price Rule update. Previously, prices did not reflect the scheduled cart price rule until you manually re-indexed (php bin/magento indexer:reindex catalogrule_rule).
  • You can now successfully re-index the product database after adding an attribute that is unsearchable (that is, the is_searchable, is_filterable, is_visible_in_advanced_search attributes are disabled).
  • The application now displays a message that identifies the indexer and the time the indexing operation took when a re-indexing operation fails. Fix submitted by Lukasz Bajsarowicz in pull request 26207. GitHub-26206
  • Products that are saved in stores where the onthefly indexer and flat tables are enabled now respect website assignments. Previously, if you removed all website assignments from a product and then saved it, all flat tables included the product, despite the specified website assignments. Fix submitted by Abel Truong in pull request 27365. GitHub-16315

Infrastructure

  • The Internet Explorer 11.x browser is no longer supported.
  • The validation logic that is associated with the Date of Birth field of the Customer Registration form no longer triggers a JavaScript error.
  • Added an integration test to cover $storeId for the Category Repository get() method. Fix submitted by Lukasz Bajsarowicz in pull request 27048. GitHub-27044
  • Enabling the Block all cookies setting in Safari no longer results in JavaScript errors, and the application displays the cookies disabled message as expected. Previously, the application displayed multiple SecurityError (DOM Exception 18): The operation is insecure errors in the console. Fix submitted by Ra̼l Verdugo Lorenzo in pull request 25324. GitHub-13865
  • The application no longer throws this error when running integration tests: Error: Call to a member function findFile() on array (/var/www/html/lib/internal/Magento/Framework/Code/Generator/DefinedClasses.php:59). Previously, an issue with AutoloaderRegistry::getAutoloader caused integration tests to fail randomly. Fix submitted by Lukasz Bajsarowicz in pull request 26480. GitHub-26479
  • The date tag in /module-sales/view/frontend/templates/order/order_date.phtml has been corrected to span. Previously, the application logged an error in the exception.log file when you clicked View Order on the storefront My Account > My Orders page. Fix submitted by Andrii Chorniy in pull request 25895. GitHub-13269, GitHub-25738
  • The JavaScript mixin module has been refactored to improve the loading and application of mixins for advanced bundled modules. Previously, the application did not load or apply mixins for advanced bundled modules. Fix submitted by Mateusz Krzeszowiak in pull request 25587. GitHub-25586
  • The grunt clean command now cleans generated code and metadata folders as expected. Fix submitted by Andrii Beziazychnyi in pull request 25765. GitHub-25739
  • getVersion result (ProductMetadata::getVersion) is now cached, which improves performance of the ProductMetadata::getVersion method. Fix submitted by Lukasz Lewandowski in pull request 26001. GitHub-24025
  • A missing setter for additional_information has been added to OrderPaymentInterface, which resolves an inconsistency between its schema declaration and accepted properties. Fix submitted by Antonino Bonumore in pull request 26748. GitHub-26745, GitHub-13222

Layered navigation

  • The application now renders the Yes/No attribute on the Category page when Use in Layered Navigation: Filterable (with results) for storefront properties is enabled.
  • Redundant \Magento\Sales\Model\Order\Email\Sender\ShipmentSender has been deprecated in favor of \Magento\Sales\Model\Order\Shipment\Sender\EmailSender. Fix submitted by Adarsh Manickam in pull request 26714. GitHub-14885
  • Clicking Enter after naming a new folder in the Media Gallery now saves all changes you’ve made. Previously, clicking Enter instead of using the mouse to select OK resulted in all changes being lost. Fix submitted by Sergiy Vasiutynskyi in pull request 27029. GitHub-26847
  • You can now create a subfolder under the Media Gallery that has the same name as the primary folder. Previously, you could not save the subfolder with the same name. Fix submitted by Vadim Malesh in pull request 27976. GitHub-1270

Media Storage

  • var/resource_config.json is no longer regenerated whenever an image is requested by get.php. Previously, this file was rewritten on each call to get.php.

Newsletter

  • Customers can now subscribe as expected to newsletters. Previously, when a customer tried to confirm their subscription, the application displayed this error: This is an invalid subscription confirmation code.
  • The newsletter input field of the storefront footer is now rendered identically by any supported browser. Fix submitted by divyajyothi5321 in pull request 26182. GitHub-26176
  • Storefront messages about newsletter subscriptions are now rendered as expected in HTML. Fix submitted by Oleh Usik in pull request 26455. GitHub-25162

Orders

  • Order summary subtotals no longer display excluded taxes when the website display settings specify that taxes should be excluded. Previously, when multiple websites were configured with different display settings, the setting defined in the server variable was used for the store despite the store-level configurations.

Payment methods

  • The integration of third-party payment methods Authorize.Net, eWay, CyberSource, Braintree, and Worldpay into the core code have been removed. Merchants should migrate to the official extensions that are available on the Commerce Marketplace.
  • You can now successfully complete an order and return to the merchant’s home page when Website Payments Pro Hosted Solution is configured. Previously, when you clicked Return to merchant, the application threw this error: Invalid Form Key. Please refresh the page.
  • Switching billing address no longer causes JavaScript function text to render in the payment section of the storefront checkout workflow. Fix submitted by Chris Pook in pull request 26378. GitHub-26375
  • Credit memos now display the correct amount in the Adjustment Refund field of the Credit Memo overview. Fix submitted by Sergiy Vasiutynskyi in pull request 27343. GitHub-13851
  • You can now remove additional information from the quote_payment column additional_information table after you’ve saved a quote. Previously, you could not remove this information after saving the quote because the unsAdditionalInformation method in \Magento\Payment\Model\Info did not initialize data properly. Fix submitted by Marco Oliveira in pull request 26084. GitHub-26083
  • Payment instructions are now derived from the store view from which an order was made. Previously, payment instructions were used from the default store view because the BeforeOrderPaymentSaveObserver method fetched payment instructions from the default store view. Fix submitted by Karyna Tsymbal in pull request 26399. GitHub-26332
  • The application now collects the payment information that is displayed on both the Admin and in invoice and shipment invoices from the store in which the order was made in deployments with multiple stores. Previously, the applicationderived payment information from the default store. Fix submitted by Bartomiej Szubert in pull request 26765. GitHub-17933

PayPal

  • The application now displays an informative error message each time a customer clicks Pay with PayPal after entering an invalid shipping address in the checkout workflow. Previously, the application displayed an error message only when the customer first clicked the button, not for subsequent clicks.
  • The application no longer changes an order’s status to Processing in the Payment Review section of the checkout workflow when a payment with PayPal fails.
  • You can now successfully complete an order using the Payflow Link payment method. Previously, the Payflow Link payment method always rejected payment because the order status remained in the Pending payment state, even though the order status in the payment method logs was Approved.
  • Orders that are placed using PayPal Payflow Pro are now set to Suspected Fraud status when fraud filters are triggered.
  • You can now use PayPal Express Checkout with any supported credit card. Previously, when you clicked on a credit card button while using PayPal Express Checkout to complete an order, the application hung, and you could not enter any credit card information.
  • Orders placed within PayPal Payflow Pro are now set to Suspected Fraud status when fraud filters are triggered. Previously, payment transaction status on PayPal was not validated before payment approval occurred on the the application side.
  • Payflow Pro now works as expected when Website Restrictions are enabled.
  • The application now successfully processes orders placed with PayPal Express Checkout where the order’s shipping address specifies a country region that the customer has manually entered into the text field rather than selected from the drop-down menu on the Shipping page. Previously, the application displayed this error on the order review page: Error 500: NOTICE: PHP message: PHP Fatal error: Uncaught Error: Call to a member function getId() on null in httpdocs/vendor/magento/module-paypal/Model/Api/Nvp.php:1527. GitHub-26698
  • The PayPal Pro payment method now works as expected in the Chrome 80 browser. This payment method previously invoked a callback endpoint that needed access to the customer’s session — access that the new default Chrome SameSite cookie functionality does not permit. GitHub-26840
  • You can now successfully use PayPal Express to pay for an order when persistent checkout cart has been enabled and the Clear Persistence on Sign Out setting is set to no. Previously, the application redirected you to the Login page.
  • Payments from Paypal Express and Web Payments Pro now move to the Processing state as expected once processing has begun. Previously, Paypal Web Payments Pro payments remained in the Pending payment state even when payment information was in the Processing state. Fix submitted by azambon in pull request 25876. GitHub-25659

Performance

  • Customer data section invalidation logic has been improved. This release introduces a new way of invalidating all customer sections data that avoids a known issue with local storage when custom sections.xml invalidations are active. (Previously, private content (local storage) was not correctly populated when you had a custom etc/frontend/sections.xml with action invalidations.) See Private content.
  • The import of customer accounts has been refactored to improve import speed.
  • Dashboard charts have been migrated to the chart.js library. Fix submitted by Bartomiej Szubert in pull request 26923. GitHub-186
  • The performance of operations that are run on large catalogs that contain many product attributes (on the scale of 3,000 - 23000 options) has been improved by the refactoring of the how attribute option arrays are built. Fix submitted by Behnam Shayani in pull request 25452. GitHub-20966

Pricing

  • The application now saves and displays the correct price for tiered products even after you’ve edited products multiple times. Previously, the application did not save the last edits made to product price. Fix submitted by Ravi Chandra in pull request 26162. GitHub-25195
  • Both fixed and discount save percentage are now correctly applied on an order’s final price. Previously, the application displayed an incorrect tier price (both fixed & discount) save percentage on the product detail page. Fix submitted by Sathish Subramanian in pull request 26584. GitHub-26583
  • The stock alert email sent to customers about the re-stocking of a configurable product now contains the correct product price. Previously, this email contained a product price of 0.
  • Product stock alert unsubscribe now works when a user’s session has expired. Previously, when you clicked on the Click here to stop alerts for this product link, the application displayed a 404 error.
  • Unsubscribe actions for product alerts now work as expected. Previously, when a customer clicked on the Click here to stop alerts for this product link, the application displayed a 404 error.

Product video

  • You can now use REST to update YouTube videos (PUT rest/V1/products/{SKU}). Previously, the application displayed a thumbnail for the video, but the video player did not load when you clicked the Play button. GitHub-23194

Reports

  • Product lists now order configurable products by SKU, which groups configurable products by variations. Previously, the report grouped products by product_id. Fix submitted by Lukasz Bajsarowicz in pull request 25858. GitHub-25856
  • The Admin > Reports > Refresh Statistics table now displays Updated At = Null status as Never in the Updated column instead of undefined. Fix submitted by Eden Duong in pull request 25932. GitHub-25931
  • The Low Stock report no longer includes disabled products. Fix submitted by Mohamed-Asar in pull request 26862. GitHub-26838
  • The application now displays an accurate value for the Year-To-Date Starts field in Admin > Stores > Configuration > General > Reports. Fix submitted by Priya-V-Panchal in pull request 27088. GitHub-27086

Reviews

  • The application now disables the Submit Review button after the user clicks the button once. Previously, the application did not disable this button after the first click and created multiple reviews when the user clicked the Submit Review button multiple times.
  • The Admin > Reports > Reviews > By Products filter list now displays results as expected. Previously, when you tried to filter this list, the application did not display any results.
  • The Pending Reviews menu item is now activated as expected on Admin > Marketing > User Content > Pending Reviews. Fix submitted by Ravinder in pull request 26230. GitHub-26229

Sales

  • Completed orders now appear in both the payment system and Magento Open Source. Previously, orders appeared in the payment system but not in Magento Open Source. GitHub-25862
  • The application now honors a customer’s default shipping address. Previously, the application did not honor the default billing and default shipping addresses according to the settings, and the Same As Billing Address setting was not enabled automatically.
  • The application now correctly calculates refunds for orders that include discounts. Previously, the applicationincorrectly calculated the shipping tax and shipping discount, and the refunded total did not match the total paid.
  • The application now assigns the correct Group ID when a new customer creates an order in multi-site deployments. Previously, the application applied the settings from the default customer group.
  • Administrators with restricted permissions that include view permission for credit memos, invoices, and shipments can now view invoices and shipments from the Orders page as expected. Previously, when a restricted administrator tried to view an order, the application displayed this error: Something went wrong with processing the default view and we have restored the filter to its original state.
  • The application no longer displays an error when a customer adds a quantity of a product to their cart that exceeds half of the existing product stock but does not exceed the total stock. Previously, under these circumstances, the application displayed this error: The requested qty is not available. Github-24365
  • You can now successfully add a product to the cart from the Admin when the stock quantity is 1. Previously, the application didn’t add the product to the cart and displayed this message: The requested qty is not available. Fix submitted by Serhii Petrychenko in pull request 26650. GitHub-25675
  • The application now displays an informative error message when a store administrator tries to re-order a product whose custom option has a name that exceeds the maximum number of characters. Previously, under these conditions, the application displayed the Report page, not a message. Fix submitted by Mudit Shukla in pull request 26348. GitHub-26345
  • The layout of the Sales order address information edit form has been refactored to match Admin form library conventions. Fix submitted by Alexey Rakitin in pull request 25699. GitHub-19805
  • The checkboxes on the Products section of the Catalog > Categories page now work as expected. Fix submitted by Denis Kopylov in pull request 22990. GitHub-22988
  • The getCustomer method now returns the customer object as defined in phpdoc block. Previously, this method returned NULL, and phpdoc block did not highlight that this method could return NULL. Fix submitted by Fanis Strezos in pull request 26423. GitHub-25268
  • Re-orders are now disabled as expected when a merchant disables the Admin > Store > Configuration > Sales > Reorder > Allow Order. Fix submitted by Eden Duong in pull request 26051. GitHub-25130
  • getPrice() method now returns a float or null instead of a string when setting a custom price for an order in the Admin. Fix submitted by Andrii Chorniy in pull request 26313. GitHub-25968
  • The State Code and Title column of Admin > Stores > Settings > Order Status now displays state instead of status as expected. Fix submitted by Oleh Usik in pull request 26569. GitHub-17847
  • PDF invoices now capture the correct purchase date when created in a GB locale. Fix submitted by Eden Duong in pull request 26701. GitHub-26675

Sales Rule

  • quote_item.applied_rule_ids is now updated as expected after a cart price rule is disabled. GitHub-24526
  • The application now displays category trees as expected when you try to create or edit a cart price rule. Previously, selecting a category in the Condition section while creating or editing a rule resulted in JavaScript errors.
  • The application now correctly calculates cart-level fixed discounts using cart price rules when a configurable product is first added to the cart. Fix submitted by Lachlan Turner in pull request 26623. GitHub-26622

Search search-heading

  • Elasticsearch 7.6.x is now the default catalog search engine for Adobe Commerce and Magento Open Source. You cannot install or upgrade to version 2.4.0 without also installing Elasticsearch 7.6.x. Elasticsearch version 2.x code has been removed. Elasticsearch versions 5.x and 6.x have been deprecated and are no longer supported. See Search engine prerequisites.
  • The application now renders the < and > symbols correctly in storefront catalog search strings.
  • Products now show as expected in categories after running cron:run in deployments implementing Elasticsearch.
  • The application no longer requires a full search re-index in order for a new product attribute to be searchable on the storefront.
  • Elasticsearch now works as expected when you sort a product list that contains bundle products by alphabetized product names.
  • Filtering results no longer include out-of-stock options when you filter configurable products in a category.
  • Selecting all products from the products list page using Elasticsearch now displays all products in the search results as expected. Previously, the application displayed no search results.
  • Elasticsearch now correctly displays results from category pages when you change the number of search results viewed per page. Previously, when you changed how many search results should be displayed on the search results page, the application displayed a blank page and this error: "0":"SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near'
  • Price sorting now works correctly for out-of-stock configurable products.
  • The application no longer throws an exception when a customer uses the storefront quick search in multi-website deployments.
  • The application no longer displays a warning when a merchant opens the search term page by clicking on the Search terms option on the footer of Marketing > SEO & Search > Search Terms. Fix submitted by vishal-webkul in pull request 25246. GitHub-25245
  • The application no longer resizes the viewport when you click on the search input box when running Safari in mobile view. Fix submitted by Pawe Tylek in pull request 27603. GitHub-27506
  • The Elasticsearch versions are now identified by X.x notation instead of X.0+ notation in the Admin (Stores > Settings > Configuration > Catalog > Catalog > Catalog Search). Fix submitted by Andreas Mautz in pull request 25838. GitHub-25674

Shipping

  • You can now ship an order to multiple addresses if one of the ordered products is a virtual product. Previously, the applicationsuccessfully placed the order for the physical products, but the virtual product order was empty.
  • The application now applies fixed-amount, whole-cart discounts correctly for orders being shipped to multiple addresses. Previously, this type of discount was applied multiple times when a customer checked out an order using Check Out with Multiple Addresses. GitHub-25834
  • The drop-down list that is available for selecting shipping methods during the process of creating a cart price rule now contains only valid values. Previously, this dropdown list contained empty or extra values.
  • The application now prints shipping labels as a .pdf file as expected when you select Print Shipping Label from the Action drop-down list from an order in the order archive list. Previously, the application displayed a 404 error.
  • Free Shipping Price rules now affect only the relevant products when a shopping cart contains products from categories that are included by the Free Shipping Price rule as well as products from categories not included in the rule. Previously, when a shopping cart included products from both the free shipping categories as well as other categories not included in the price rule, then free shipping was not applied to any products.
  • The application no longer displays a blank page instead of displaying all the shipping carriers in the dropdown/multi-select box. Previously, an error in the toOptionArray function in vendor/magento/module-shipping/Model/Config/Source/Allmethods.php occurred. Fix submitted by Marc Rodriguez in pull request 25315. GitHub-13136

  • The application no longer applies a fixed amount discount multiple times when a customer creates an order that will be shipped to multiple addresses. Fix submitted by Mahesh Singh in pull request 26419. GitHub-25834

  • Plugins for Magento\Ups\Model\Carrier that implement custom di.xml now work properly in developer mode. Previously, the application threw this error: 1 exception(s): Exception #0 (BadMethodCallException): Missing required argument $data of Magento\Ups\Model\Carrier. Fix submitted by Bartomiej Szubert in pull request 26130. GitHub-25390

Sitemap

  • The application now uses the project base URL as expected when you generate a sitemap.
  • Generated site maps now include the URL of the home page. Fix submitted by deepaksnair in pull request 26445. GitHub-25761

Store

  • Customer sessions now persist as expected when a customer logs in to one store, adds products to the shopping cart, and then switches to a new store in a multi-store deployment. Previously, when the customer navigated to the second store, the application logged out the customer and emptied the shopping cart.
  • The application now deletes records that are related to a deleted store view from the sale_sequence_meta and sales_sequence_profile tables as expected. Fix submitted by Bartomiej Szubert in pull request 22296. GitHub-14958
  • Store switcher now works as expected when switching between stores that have different base URLs. Previously, when a customer used the store switcher to switch between stores, the request failed if the target store had a different base URL than the current store. Fix submitted by Tobias Nilsson in pull request 26548. GitHub-23755, GitHub-26384

Swatches

  • Merchants can now successfully add color swatch attributes to products using the Visual Swatch option on Stores > Attributes > Product > New Attribute. Previously, a JavaScript error was triggered when you tried to open the newly created swatch attribute.
  • The Minimum Advertised Price now changes as expected when a customer selects a new swatch option for a configurable product. Fix submitted by Sergiy Vasiutynskyi in pull request 26241. GitHub-26240
  • The application no longer duplicates the Minimum Advertised Price for a configurable product when you select a new swatch option. Fix submitted by Sergiy Vasiutynskyi in pull request 26317. GitHub-26314
  • Corrected issues with the behavior of the drop-down menu in the Manage Swatch (Values of Your Attribute) area of the New Product Attribute page. Fix submitted by Oleh Usik in pull request 26090. GitHub-25910

TargetRule

  • The related product block that is displayed for a product on the storefront now displays the products that have met the criteria defined in the Related Product Rule. Previously, the application did not display any related products.

Tax

  • The application now updates shipping rates and prices as expected when a customer changes the destination country for an order during checkout.
  • Free shipping is now applied as expected based on the applicable cart price rule. Previously, cart price rules did not take into account taxes when calculating whether an order meets criteria for free shipping.

Test

NOTE
MFTF now uses Google Authenticator to execute tests with 2FA enabled. MFTF will not work with 2.4.0 without additional configuration steps to enable Google Authenticator. See Configuring MFTF for Two-Factor Authentication (2FA).
  • Hardcoded URLs in tests and Action roups have been replaced with page references. Fix submitted by Lukasz Bajsarowicz in pull request 117 in private repository partners-magento2ee. GitHub-26331
  • Tests now cover the task of logging Admin Actions related to CMS pages. Fix submitted by Lukasz Bajsarowicz in pull request 172 in private repository partners-magento2ee. GitHub-171
  • Invalid functional test names have been revised to follow best practices. Fix submitted by Lukasz Bajsarowicz in pull request 27118 and pull request 151 in private repository partners-magento2ee. GitHub-27117
  • Magento Open Source cron is now used for re-indexing after creating test data, and where applicable, cache:flush config replaces cache:flush. Fix submitted by Lukasz Bajsarowicz in pull request 26990. GitHub-26989
  • Acceptance tests now follow naming conventions for Magento/Indexer and Magento/Backup modules. Fix submitted by Shankar Konar in pull request 27515. GitHub-27503
  • The AdminReorderWithCatalogPrice test has been refactored and no longer fails during the CI validation process. Fix submitted by Lukasz Bajsarowicz in pull request 135 in private repository partners-magento2ee. GitHub-26607
  • The AdminAddingNewOptionsWithImagesAndPricesToConfigurableProduct and StorefrontApplyPromoCodeDuringCheckout tests have been refactored and no longer fail during CI validation process. Fix submitted by Lukasz Bajsarowicz in pull request 26611 and pull request 26614. GitHub-26612, GitHub-26610
  • The DeleteProduct and DeleteCustomer Action Groups tests have been refactored and no longer fail during the CI validation process. Fix submitted by Lukasz Bajsarowicz in pull request 26407. GitHub-26396
  • The AdminMoveAnchoredCategoryTest.xml tests have been refactored and no longer fail during the CI validation process. Fix submitted by Lukasz Bajsarowicz in pull request 26395. GitHub-26396

Integration tests

  • Consecutive requests in integration tests no longer fail. Previously, tests failed because request objects were shared between dispatches. The resetRequest method now empties the state of request. Fix submitted by Lukasz Bajsarowicz in pull request 27300. GitHub-27299
  • Additional integration tests added to cover for Magento_Customer email features. Fix submitted by Lukasz Bajsarowicz in pull request 27606. GitHub-27607

PHP unit tests

  • PHP unit tests no longer throw this fatal error: Fatal error: Class Mock_CartExtensionInterface_0ba80a0b contains 2 abstract methods and must therefore be declared abstract or implement the remaining methods (Magento\Quote\Api\Data\CartExtensionInterface::getAmazonOrderReferenceId, Magento\Quote\Api\Data\CartExtensionInterface::setAmazonOrderReferenceId) in /var/www/html/vendor/phpunit/phpunit-mock-objects/src/Generator.php(264) : eval()'d code on line 1. Fix submitted by Lukasz Bajsarowicz in pull requests 178 in private repository partners-magento2ee and 27701. GitHub-27638
  • Tests for Offline_Payments are now compatible with PHPUnit 8. Fix submitted by Cristiano Pacheco in pull request 27627. GitHub-27500
  • Unit tests for Framework, AdminAnalytics, AdminNotification, and AMPQ have been updated for PHPUnit 8. Fix submitted by Ihor Sviziev in pull requests 27522, 27521, 27519, 27522. GitHub-27500
  • You can now run the \Magento\Downloadable\Test\Unit\Helper\DownloadTest unit test without being connected to the internet. Fix submitted by aleromano89 in pull request 26264. GitHub-23521
  • Added unit test for app/code/Magento/Fedex/Model/Source/Generic.php. Fix submitted by Sathish Subramanian in pull request 26549.
  • <magentoCron> has been added to multiple tests, which triggers partial reindexing. This changes addresses issues that created false negatives in functional tests that covered Magento_Bundle, CatalogImportExport, CatalogInventory, CatalogRule, Backend, Braintree, and Captcha. Fix submitted by Lukasz Bajsarowicz in pull requests 27322, 27323, 27321. GitHub-27320
  • All incorrect uses of <amOnPage> have been replaced with an appropriate <actionGroup> for Admin log out where applicable in tests. Fix submitted by Lukasz Bajsarowicz in pull request 116 in private repository partners-magento2ee. GitHub-26331
  • Each Action group in a test has been moved to a separate file to follow MFTF best practices, and inconsistent file names have been revised. Tests for the following modules have been affected:

    • module-catalog-permissions
    • module-shared-catalog
    • module-catalog-event
    • module-banner
    • module-admin-gws
    • module-advanced-checkout
    • module-shipping
    • module-ui
    • module-shipping
    • module-checkout-address-search
    • module-sales
    • module-catalog
    • module-catalog-rule-staging
    • module-visual-merchandiser
    • module-customer

    Fix submitted by Lukasz Bajsarowicz in pull requests 25800, 26323, 26321, 26320, 26319, 26322, 25828, 26329 (and pull requests 104, 105, 106, 107, 108, 109, 111, 119, 120, 121 in private repository partners-magento2ee). GitHub-22853

Theme

  • We’ve resolved a bug in JsFooterPlugin.php that affected the display of dynamic blocks. Previously, the application displayed this error when you directly accessed /banner/ajax/load/url: Uncaught TypeError: strpos() expects parameter 1 to be string, null given in.
  • The i18n method provides the ability to add a string to underscore templates. Fix submitted by Sergiy Vasiutynskyi in pull request 26435. GitHub-18012
  • The section-config module has been refactored. This refactoring has reduced errors that were caused by third-party modules making POST requests or requesting customer data directly before the module was initialized by data-mage-init. Fix submitted by Mateusz Krzeszowiak in pull request 25764. GitHub-17125
  • LoadCssAsync HTML format errors have been fixed. Fix submitted by Sathish Subramanian in pull request 26764. GitHub-26760
  • When you create default.xml and catalog_product_view.xml files as part of creating a new theme, the application either creates these pages or logs errors in the log files as expected. Previously, the application logged errors in vendor/magento/framework/View/Page/Config/Renderer.php file. Fix submitted by Vinh Le in pull request 27026. GitHub-27009

Translation and locales

  • Inline translation now works as expected on the storefront when Admin > Stores > Configuration > Advanced > Developer > Translate Inline > Enabled for Storefront is set.
  • Inline translation now works as expected when enabled for a storefront.
  • Product URL keys are now transliterated as expected. Fix submitted by DanieliMi in pull request 26506. GitHub-26499
  • The es_US Spanish (United States) locale is now supported. Fix submitted by Vinh Le in pull request 26857. GitHub-26843
  • Numerical placeholder count and JavaScript code placeholder count are now the same. Previously, the JavaScript code assumed 0% while the numerical placeholder count started with %1. Fix submitted by korostii in pull request 25359. GitHub-25243
  • You can now disable the translation of the page title of the Product details page (page.main.title), which is enabled by default. Fix submitted by Bartomiej Szubert in pull request 26269. GitHub-7065
  • Issues with the rendering of Arabic and Hebrew in invoice PDFs have been resolved. Fix submitted by Ihor Sviziev in pull request 27887. GitHub-25769
  • Language pack inheritance order is now applied in a first-listed, first-used basis as expected and as described in the documentation. Fix submitted by Sergiy Vasiutynskyi in pull request 26420. GitHub-8691
  • The application now displays this error message when you enter a non-Latin character for a folder name in locales where only Latin letters are supported: Please rename the folder using only Latin letters, numbers, underscores and dashes. Fix submitted by Eden Duong in pull request 25904. GitHub-25896
  • The length of the locale column for directory_country_region_name has been increased from 8 to 16 to support locales such as zh_Hans_CN. Fix submitted by Bartomiej Szubert in pull request 26268. GitHub-14001

UI

  • The Back button now works as expected from Admin > Stores > Order Status > Edit Order Status. Fix submitted by Vadim Malesh in pull request 27976. GitHub-1270
  • Preview images no longer change unexpectedly when you use the arrow keys to move the cursor in the File Name field in the Adobe Stock list. Fix submitted by Adarsh Manickam in pull request 25991. GitHub-847
  • The Your Password field on the Current User Identity Verification section of the Admin > System > Integrations page now inherits styles as expected. Fix submitted by Eduard Chitoraga in pull request 25918. GitHub-25917
  • Input that is validated by the JavaScript validator on the storefront will also pass validation on the Admin. Previously, the JavScript validator counted newlines as a single character on the storefront, but on the server side, \Magento\Catalog\Model\Product\Option\Type\maxCharacters counted newlines as two characters. Fix submitted by Grzegorz Bogusz in pull request 26033. GitHub-25974
  • The subTitle tag is no longer erased when you change a modal title using the setTitle() call. Previously, when you tried to create a popup or custom modal with a title and subtitle, then changed title with the setTitle() method, the subTitle was erased. Fix submitted by Andrea Parmeggiani in pull request 26142. GitHub-26141
  • The submenu in the Admin Marketing tab now automatically adjusts to the length of menu items as expected. You can also now scroll horizontally. Fix submitted by Paweł Tylek in pull request 26034. GitHub-18687
  • The table quote column customer_note now uses type text as expected. Previously, it used type varchar(255). Fix submitted by Ravi Chandra in pull request 26160. GitHub-26155
  • Corrected display issues with the table header on the My Account > Address Book Address Entries table. Fix submitted by Abrar Pathan in pull request 27336. GitHub-27335
  • The currency symbol used in Layered Navigation Price Step is now based on default settings as expected. Fix submitted by Bartomiej Szubert in pull request 24815. GitHub-21684
  • The symbol for the Belarusian currency (BYR) has been updated to BYN. Fix submitted by Bartomiej Szubert in pull request 25723. GitHub-24713
  • The Compare Products section of the Catalog page is now displayed as expected in mobile view on displays with resolutions of less than 767px. Fix submitted by Hitesh in pull request 26418. GitHub-26416
  • Scrolling of product pages now works as expected in mobile view. Fix submitted by Mateusz Krzeszowiak in pull request 25385. GitHub-10518, GitHub-21717
  • You can now scroll through gallery thumbnail images on the product page in mobile view as expected. Fix submitted by iGerchak in pull request 25839. GitHub-21014
  • Clicking on Theme Title on Admin > Content > Themes no longer results in duplicate records. Fix submitted by Eden Duong in pull request 25926. GitHub-25925
  • The layout of the Admin Billing Address/Shipping Address page has been refactored to meet Admin form display conventions. Fix submitted by Alexey Rakitin in pull request 25699. GitHub-23481, GitHub-19805
  • The Add to Compare link on the product detail page now renders correctly in mobile view on displays with less than 640px resolution. Fix submitted by Pawe Tylek in pull request 26424 and Tejash Kumbhare in pull request 26365. GitHub-26364
  • The Sort By label no longer overlaps with the Shop By button on the category page in mobile view. Fix submitted by Andrii Kartavtsev in pull request 26381. GitHub-25300
  • You can now update the value of a downloadable product’s sample and link title by enabling the Use default checkbox. Fix submitted by Abel Truong in pull request 27295. GitHub-27169
  • Corrected spacing between the Update button and Qty field on the mini cart. Fix submitted by Hitesh in pull request 26234. GitHub-26227
  • The bottom border color of the Additional Address Entries table on the Address Book page now matches thead and tbody border color. Fix submitted by Tejash Kumbhare in pull request 26649. GitHub-26648
  • Prompt modals no longer carry out a confirm action when a user clicks on the modal overlay. Fix submitted by Serhiy Zhovnir in pull request 27399.

URL

  • The category repository (save method) has been refactored, which had previously prevented you from creating unique paths when changing a category URL key. Fix submitted by Sergiy Vasiutynskyi in pull request 27304. GitHub-14080
  • Validation for the category URL key logic has been improved. Fix submitted by Sergiy Vasiutynskyi in pull request 27412. GitHub-13689

URL rewrites

  • Customers who change language on a CMS page can now successfully navigate to the store view they’ve selected. Previously, the application displayed a 404 error.
  • URL rewrite generation for product URLs for which you’ve enabled category path inclusion now works as expected. Previously, in deployments with multiple store views, the application sometimes generated incorrect URL rewrites by using the default value of the category url path instead of the storeview-specific URL path. Fix submitted by Pieter Hoste in pull request 26784. GitHub-25124, GitHub-11616
  • We’ve added a check to prevent URL redirects if the request path is the same as the target path. Fix submitted by Bartomiej Szubert in pull request 26902. GitHub-20309
  • URL rewrite operations no longer removes a query string from a URL when the URL has a trailing slash. Fix submitted by Alexey Arendarenko in pull request 25603. GitHub-18717

VAT

Web API framework

  • Corrected issues with the POST /rest/default/async/bulk/V1/orders calls.
  • Corrected issues with the POST /rest/default/async/bulk/V1/products calls.
  • The getList method has been refactored to retrieve the is_subscribed extension attribute. Previously, you could not retrieve this attribute when fetching a customer entity through the API. Fix submitted by enriquei4 in pull request 25311. GitHub-13252
  • Updating customer information through /V1/customers/:id no longer resets the group_id unnecessarily. Previously, when you updated a customer through REST, the customer group was changed to 1 if the body did not contain a customer group. Fix submitted by MaxRomanov4669 in pull request 25958. GitHub-14663
  • Nullable getters in service contracts no longer throw reflection errors when used in the web API. Methods that can return null and a valid type now working correctly regardless of order, too. Fix submitted by Marco K̦pcke in pull request 25806. GitHub-25656
  • You can now use POST /V1/guest-carts/:cartId/items to add products to a specific cart. Previously, when you used this call, the application ignored the value of cartId. Fix submitted by Vadim Malesh in pull request 27172. GitHub-14086
  • You can now use the PUT /V1/cmsPage/:id endpoint to save a CMS page title without changing the values of other fields. Fix submitted by Vadim Malesh in pull request 27237. GitHub-24704
  • The pagination of results from REST requests is now accurate. Previously, when you requested results from a specific page (for example, page_size = 1 and a current_page value that was out of scope), the call returned repeated the last page of results rather than an informative message . Fix submitted by Lukasz Bajsarowicz in pull request 26988. GitHub-26986, GitHub-8099
  • The result of GET /V1/orders/items/{id} now includes an extension attribute element that includes gift message data. Fix submitted by Laura Folco in pull request 25946. GitHub-19093

Wishlist

  • A wishlist now works as expected when it is enabled at the store-view level and disabled at the global level. Previously, when these settings were in place, adding a product to a wishlist resulted in a 404 error.
  • We’ve improved the error message that is displayed when a customer tries to share their wishlist with more email addresses than is permitted. Fix submitted by divyajyothi5321 in pull request 26066. GitHub-26064
  • The application now displays the My Wishlist page as expected in displays with resolution greater than 768px and less than 1023px. Fix submitted by Hitesh in pull request 26546. GitHub-26543
  • The email generated when you click Share Wishlist now displays the same product images as the Wishlist page. Fix submitted by Michael Bottens in pull request 27125. GitHub-27124
  • Customers can now add to a wishlist both a simple product that is part of grouped product and the same simple product with a different quantity. Fix submitted by MaxRomanov4669 in pull request 26258. GitHub-11209

WYSIWYG

  • The WYSIWYG image uploader now uses pub/media/wysiwyg as the storage root. Previously, the uploaded used pub/media as its storage root, which made those uploaded images inaccessible after recent changes to image uploader code. Fix submitted by Pieter Hoste in pull request 24878. GitHub-22609
  • TinyMCE4 on the Chrome browser now handles double-byte characters as expected. Previously, TinyMCE4 could not properly handle double-byte characters (such as used in Chinese) on Chrome. Fix submitted by Hirokazu Nishi in pull request 25454. GitHub-24637

Known issues – General

Issue: Anomalies in storefront error messages occur in deployments where PHP 7.4.2 is installed. When 2.4.0 is deployed with PHP 7.4.2, the space symbols in storefront error messages are replaced with plus (+) characters. This bug is native to PHP 7.4.2 and cannot be corrected by Magento Open Source. Workaround: We recommend using other versions of PHP 7.4.x. See Raw message data display on storefront Knowledge Base article.

Issue: Merchants cannot add ordered products to a package from the Admin Create Package page and save the package. See Shipping labels creation Knowledge Base article. The MC-35514-2.4.0-CE-composer.patch hotfix for this issue is now available from Releases.

Issue: The application displays this error message during installation with third-party extensions that have dependencies on APIs for the Store module in CLI commands: The default website isn't defined. Set the website and try again. Workaround: Remove dependencies on third-party extensions from Composer, install Magento, and then install third-party extensions.

Issue: The Add selections to my cart button on the bottom of the shopping cart does not work. Workaround: Use the Add selections to my cart button on the top of the page. See Add selections to my cart button does not work Knowledge Base article.

Issue: Merchants can’t create a new order from the Admin because the Add Products By SKU and Add Products buttons are missing from the order creation page when JavaScript bundling is enabled. Workaround: Disable the JavaScript bundling for your deployment.

Issue: The application a 404 not found error when a customer tries to remove reward points when checking out an order being shipped to multiple addresses.

Issue: Editing a configurable product from a customer’s wishlist results in the following unexpected behavior: An unexpected field appears on the Configure Product page, and the Configure Product page does not disappear after you click OK. The application also displays this message: Please load Wish List item. Workaround: Reload the Configure Product page.

Issue: Customers cannot change the number of orders displayed per page when the Orders list spans multiple pages. Currently, the application displays this message when you navigate to the last page of orders and try to change the number of orders displayed per page: You have placed no orders. See Orders display error Knowledge Base article. Workaround: Re-opening the My Orders page will result in the display of the Orders list.

Issue: Directly clicking on the Export Tax Rates button of the Add New Tax Rule page (Stores > Tax Rules) does not download the tax_rates.csv file as expected. Workaround: Click the edge of the Export Tax Rates button. See Export Tax Rates does not work Knowledge Base article.

Issue: The Refresh buttons on the Last Ordered Items, Products in Comparison List, and Recently Compared Products sections of the Admin Customer Activities page do not work as expected. Currently, the application scrolls the page every time the Refresh button is clicked and does not display the product name. See Refresh on Customer’s Activities does not work Knowledge Base article.

Known issues – VBE

Amazon Pay

  • Issue: Payment methods are missing from the checkout workflow when a customer clicks Return to standard checkout during checkout with Amazon Pay. Workaround: Refresh the checkout page to display the missing methods.

  • Issue: The application displays two identical Amazon Pay methods in the Payment Method drop-down list that is available when creating a new cart price rule.

Braintree

  • Issue: The application displays an error when an administrator tries to access the Braintree Settlement Report page (Admin > Reports ). Currently, the application displays this message: An error has happened during application run. See exception log for details. See Braintree Settlement Report fails to load Knowledge Base article. The BUNDLE-2683_SettlementReport.patch hotfix for this issue is now available from Releases.

  • Issue: Merchants can’t create partial invoices for orders in deployments where Venmo is enabled and the Enable Vault for Card Payments setting is disabled. Currently, the application displays this error: The "vault_capture" command doesn't exist. Verify the command and try again.

  • Issue: The application displays two identical PayPal methods in the Payment Method drop-down list that is available when creating a new cart price rule.

  • Issue: The application an error when opening Sales > Braintree Virtual Terminal. Although the form contains corrupted UI elements, it still accepts payments. Workaround: Save the correct Braintree credentials, which will fix the collapsed input fields. See Braintree Virtual Terminal page is corrupted Knowledge Base article. The BUNDLE-2670_VirtualTerminal.patch hotfix for this issue is now available from Releases.

  • Issue: The application displays an error message in the following countries when a customer selects a local payment method during checkout: Belgium, Netherlands, Italy, Spain, and Poland. Workaround: Ignore the error message and continue with payment.

Klarna

  • Issue: Leaving the Design Theme field blank in Klarna On-Site Messaging (Admin > Stores > Configuration > Klarna settings) results in a blank page. Workaround: Select a design theme and save.

Vertex

  • Issue: the application displays an Address verification button on the shipping section of the checkout workflow even when address validation is disabled. The address validator doesn’t re-check the updated address and continues to display a message that indicates that the address is invalid when a customer enters a correct address after first entering an incorrect address even when address validation is enabled. Workaround: Disable Vertex address validation.

Community contributions

We are grateful to the wider Magento Open Source community and would like to acknowledge their contributions to this release. Check out the following ways you can learn about the community contributions to our current releases:

  • If a community member has provided a fix for this release, we identify the fix in the Fixed Issue section of these notes with the phrase, “Fix provided by community member @member_name”.

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

Partner
Pull Requests
Related GitHub Issues
Atwix
magento/magento2#25774, magento/magento2#25913, magento/magento2#25765, magento/magento2#25918, magento/magento-functional-tests-migration#744, magento/magento-functional-tests-migration#746, magento/magento-functional-tests-migration#711, magento/magento2#26069, magento/magento2#26063, magento/magento2#25697, magento/magento2#26154, magento/magento2#26150, magento/magento2#26148, magento/magento2#26096, magento/magento2#26028, magento/magento2#25864, magento/magento2#26029, magento/magento2#26251, magento/magento2#25985, magento/magento-functional-tests-migration#760, magento/magento-functional-tests-migration#757, magento/magento-functional-tests-migration#701, magento/magento2#26312, magento/magento2#26311, magento/magento2#26305, magento/magento2#26402, magento/magento2#26313, magento/magento2#26464, magento/magento2#26452, magento/partners-magento2ee#129, magento/partners-magento2ee#128, magento/magento2#26558, magento/magento2#26490, magento/magento2#26478, magento/magento2#26455, magento/magento2#26435, magento/magento2#26000, magento/magento2#26525, magento/magento2#26487, magento/magento2#26439, magento/magento2#26429, magento/magento2#26241, magento/magento2#26579, magento/magento2#26574, magento/magento2#26569, magento/magento2#26496, magento/magento2#26476, magento/magento2#26430, magento/magento2#26399, magento/magento2#26420, magento/magento2#26770, magento/magento2#26715, magento/magento2#26246, magento/magento2#26816, magento/magento2#26846, magento/magento2#26844, magento/magento2#26839, magento/magento2#26835, magento/magento2#26769, magento/magento2#26712, magento/magento2#26317, magento/magento2#26904, magento/magento2#26899, magento/magento2#26894, magento/magento2#26878, magento/magento2#26710, magento/magento2#26617, magento/partners-magento2ee#134, magento/magento2#26833, magento/magento2#26755, magento/magento2#26090, magento/magento2#25895, magento/magento2#27021, magento/magento2#26947, magento/magento2#26944, magento/magento2#26912, magento/magento2#26842, magento/magento2#27010, magento/magento2#27114, magento/magento2#27057, magento/magento2#27149, magento/magento2#27131, magento/magento2#27029, magento/partners-magento2ee#141, magento/partners-magento2ee#140, magento/partners-magento2ee#139, magento/magento2#26563, magento/partners-magento2ee#154, magento/magento2#25722, magento/magento2#27261, magento/magento2#27170, magento/magento2#27266, magento/magento2#27165, magento/magento2#26560, magento/magento2#27191, magento/magento2#26015, magento/magento2#27304, magento/magento2#27263, magento/magento2#27390, magento/magento2#27353, magento/magento2#27334, magento/magento2#27307, magento/magento2#22011, magento/magento2#27412, magento/magento2#27383, magento/magento2#27371, magento/magento2#27493, magento/magento2#27492, magento/magento2#26100, magento/magento2#27399, magento/partners-magento2ee#162, magento/magento-functional-tests-migration#724, magento/magento-functional-tests-migration#723, magento/magento-functional-tests-migration#710, magento/magento-functional-tests-migration#707, magento/magento-functional-tests-migration#706, magento/magento2#27526, magento/magento2#27497, magento/magento2#27495, magento/magento2#27563, magento/magento2#27343, magento/magento2#27671, magento/magento-functional-tests-migration#765, magento/magento-functional-tests-migration#764, magento/magento-functional-tests-migration#762, magento/magento-functional-tests-migration#761, magento/magento-functional-tests-migration#759, magento/magento-functional-tests-migration#751, magento/magento2#27676, magento/magento2#27689, magento/magento2#27677, magento/magento2#27843, magento/magento2#27841, magento/magento2#27692, magento/magento2#27846
magento/magento2#25739, magento/magento2#25917, magento/magento2#20379, magento/magento2#761, magento/magento2#23899, magento/magento2#25968, magento/magento2#25162, magento/magento2#18012, magento/magento2#26240, magento/magento2#17847, magento/magento2#26332, magento/magento2#8691, magento/magento2#26245, magento/magento2#26314, magento/partners-magento2ee#100, magento/magento2#25910, magento/magento2#13269, magento/magento2#25738, magento/magento2#27027, magento/magento2#26758, magento/magento2#26847, magento/magento2#25669, magento/magento2#20472, magento/magento2#20906, magento/magento2#21910, magento/magento2#26825, magento/magento2#26473, magento/magento2#26856, magento/magento2#26858, magento/magento2#26827, magento/magento2#14080, magento/magento2#26708, magento/magento2#26224, magento/magento2#22010, magento/magento2#13689, magento/magento2#27370, magento/magento2#26652, magento/magento2#24990, magento/magento2#1002, magento/magento2#27496, magento/magento2#13851
Mediotype
magento/magento2#26225, magento/magento2#26274, magento/magento2#26273, magento/magento2#26259, magento/magento2#26207, magento/partners-magento2ee#120, magento/partners-magento2ee#108, magento/partners-magento2ee#107, magento/partners-magento2ee#106, magento/partners-magento2ee#105, magento/partners-magento2ee#104, magento/magento2#26407, magento/magento2#26395, magento/magento2#26323, magento/magento2#26321, magento/magento2#26320, magento/magento2#26319, magento/partners-magento2ee#109, magento/partners-magento2ee#119, magento/partners-magento2ee#111, magento/magento2#26322, magento/partners-magento2ee#121, magento/partners-magento2ee#117, magento/magento2#26391, magento/partners-magento2ee#124, magento/partners-magento2ee#102, magento/magento2#26614, magento/magento2#26480, magento/magento2#26355, magento/magento2#26611, magento/magento2#26621, magento/partners-magento2ee#116, magento/partners-magento2ee#115, magento/magento2#26608, magento/partners-magento2ee#135, magento/magento2#25858, magento/magento2#26974, magento/magento2#25828, magento/magento2#27048, magento/magento2#26779, magento/magento2#26329, magento/magento2#26778, magento/partners-magento2ee#132, magento/magento2#26990, magento/magento2#27281, magento/magento2#27277, magento/magento2#27274, magento/magento2#27249, magento/magento2#27118, magento/partners-magento2ee#151, magento/magento2#27255, magento/magento2#27273, magento/magento2#27298, magento/magento2#27292, magento/magento2#27214, magento/partners-magento2ee#158, magento/magento2#27276, magento/magento2#27000, magento/magento2#27378, magento/magento2#27381, magento/magento2#27427, magento/magento2#27425, magento/magento2#27322, magento/magento2#27321, magento/magento2#27597, magento/partners-magento2ee#172, magento/magento2#26988, magento/magento2#27552, magento/magento2#27701, magento/partners-magento2ee#178, magento/magento2#27325, magento/magento2#27606, magento/magento2#27300, magento/magento2#27323, magento/magento2#27093, magento/magento2#27964
magento/magento2#26206, magento/magento2#26331, magento/magento2#26396, magento/magento2#26612, magento/magento2#26479, magento/magento2#26610, magento/partners-magento2ee#26607, magento/magento2#25856, magento/magento2#26973, magento/magento2#27044, magento/magento2#26989, magento/partners-magento2ee#27117, magento/magento2#27320, magento/partners-magento2ee#171, magento/magento2#26986, magento/magento2#27607, magento/magento2#27299, magento/magento2#27089
Strix
magento/magento2#25822, magento/magento2#25812, magento/magento2#25803, magento/magento2#25792, magento/magento2#25791, magento/magento2#25954, magento/magento2#26009, magento/magento2#25854, magento/magento2#25846, magento/magento2#25845, magento/magento2#25844, magento/magento2#25842, magento/magento2#25841, magento/magento2#25836, magento/magento2#25831, magento/magento2#25830, magento/magento2#25829, magento/magento2#25825, magento/magento2#25823, magento/magento2#25821, magento/magento2#25820, magento/magento2#25819, magento/magento2#25818, magento/magento2#25817, magento/magento2#25816, magento/magento2#25815, magento/magento2#25813, magento/magento2#25811, magento/magento2#25807, magento/magento2#25804, magento/magento2#25802, magento/magento2#25800, magento/magento2#25799, magento/magento2#25797, magento/magento2#25794, magento/magento2#25793, magento/magento2#25788, magento/magento2#25787, magento/magento2#25784, magento/magento2#25783, magento/magento2#26128, magento/magento2#26131, magento/magento2#26129, magento/magento2#26126, magento/magento2#26125, magento/magento2#25957
magento/magento2#22047
Ziffity
magento/magento2#25808, magento/magento2#26057, magento/magento2#26050, magento/magento2#25920, magento/magento2#26068, magento/magento2#26136, magento/magento2#26215, magento/magento2#26540, magento/magento2#26537, magento/magento2#26549, magento/magento2#26568, magento/magento2#26782, magento/magento2#26764, magento/magento2#26820, magento/magento2#26771, magento/magento2#26768, magento/magento2#26761, magento/magento2#26584, magento/magento2#26932, magento/magento2#26862, magento/magento2#26979, magento/magento2#26928, magento/magento2#27014, magento/magento2#27740, magento/magento2#26886
magento/magento2#26208, magento/magento2#26760, magento/magento2#26583, magento/magento2#26917, magento/magento2#26838, magento/magento2#26800, magento/magento2#26992
Fast White Cat
magento/magento2#25723, magento/magento2#26130, magento/magento2#24815, magento/magento2#26268, magento/magento2#26263, magento/magento2#26354, magento/magento2#26269, magento/magento2#26360, magento/magento2#26684, magento/magento2#26398, magento/magento2#22296, magento/magento2#26982, magento/magento2#27054, magento/magento2#26765, magento/magento2#27084, magento/magento2#27083, magento/magento2#27082, magento/magento2#27080, magento/magento2#26964, magento/magento2#26902, magento/magento2#27145, magento/magento2#27215, magento/magento2#26923, magento/magento2#27319, magento/magento2#27393, magento/magento2#27385, magento/magento2#27384, magento/partners-magento2ee#150, magento/magento2#26075, magento/magento2#27462, magento/magento2#26397, magento/magento2#27463, magento/magento2#27491
magento/magento2#24713, magento/magento2#25390, magento/magento2#21684, magento/magento2#14001, magento/magento2#14913, magento/magento2#7065, magento/magento2#14958, magento/magento2#17933, magento/magento2#20309, magento/magento2#186, magento/magento2#6310
creativestyle
magento/magento2#25541, magento/magento2#25587, magento/magento2#26037, magento/magento2#26034, magento/magento2#26033, magento/magento2#26424, magento/magento2#25385, magento/magento2#25764, magento/magento2#25641, magento/magento2#27360, magento/magento2#26036, magento/magento2#27603, magento/magento2#27589
magento/magento2#22416, magento/magento2#25586, magento/magento2#18687, magento/magento2#25974, magento/magento2#26364, magento/magento2#10518, magento/magento2#21717, magento/magento2#17125, magento/magento2#25032, magento/magento2#27506
Fisheye
magento/magento2#25655, magento/magento2#25624, magento/magento2#23313, magento/partners-magento2ee#50, magento/magento2#25860, magento/magento2#25297
magento/magento2#25654, magento/partners-magento2ee#22909
Vaimo
magento/magento2#25452, magento/magento2#26213, magento/magento2#27015, magento/magento2#27448, magento/magento2#27578
magento/magento2#20966, magento/magento2#26683
Wagento
magento/magento2#25973, magento/magento2#26234, magento/magento2#26290, magento/magento2#26238, magento/magento2#26365, magento/magento2#25966, magento/magento2#26546, magento/magento2#26339, magento/magento2#26342, magento/magento2#26659, magento/magento2#26418, magento/magento2#26649
magento/magento2#25972, magento/magento2#26227, magento/magento2#26289, magento/magento2#26235, magento/magento2#26364, magento/magento2#25962, magento/magento2#26543, magento/magento2#26338, magento/magento2#26054, magento/magento2#26416, magento/magento2#26648
Krish TechnoLabs
magento/magento2#26160, magento/magento2#26170, magento/partners-magento2ee#118, magento/magento2#26162, magento/partners-magento2ee#143, magento/magento2#27336
magento/magento2#26155, magento/magento2#24972, magento/magento2#25195, magento/magento2#27335
i95Dev
magento/magento2#26011, magento/magento2#25759, magento/magento2#26173, magento/magento2#26182, magento/magento2#26066, magento/magento2#26237, magento/magento2#26183, magento/magento2#26169
magento/magento2#25930, magento/magento2#25433, magento/magento2#26164, magento/magento2#26176, magento/magento2#26064, magento/magento2#25936, magento/magento2#26181, magento/magento2#26168
Something Digital
magento/magento2#26359, magento/magento2#26185, magento/partners-magento2ee#60
Comwrap
magento/partners-magento2ee#68, magento/magento2#27257
Zilker Technology
magento/magento2#25428, magento/magento2#26714, magento/magento2#25991, magento/magento2#27138
magento/magento2#14885, magento/magento2#847, magento/magento2#973
Youwe
magento/magento2#24360, magento/magento2#25194, magento/magento2#26748
magento/magento2#24357, magento/magento2#25188, magento/magento2#26745
Reach Digital
magento/magento2#25875
magento/magento2#9466
Cedcommerce
magento/magento2#26628, magento/magento2#26348, magento/magento2#27886
magento/magento2#26345, magento/magento2#27874
Divante
magento/magento-functional-tests-migration#718, magento/magento-functional-tests-migration#720, magento/magento-functional-tests-migration#719, magento/magento-functional-tests-migration#717
Interactiv4
magento/magento2#24843, magento/magento2#25311
magento/magento2#24842, magento/magento2#13252
Monsoon
magento/magento2#26044, magento/partners-magento2ee#136, magento/magento2#26869, magento/magento2#26868, magento/magento2#26821, magento/magento2#26697
MediaCT
magento/partners-magento2ee#145
Aligent Consulting
magento/magento2#26623, magento/magento2#26781
magento/magento2#26622
Maginus
magento/magento2#26413, magento/magento2#27196
integer_net GmbH
magento/magento2#25851, magento/magento2#24485
Veriteworks
magento/magento2#25454
magento/magento2#24637

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
Eden Duong
#25905
N/A
Ajith
#25808
N/A
Marco Köpcke
#25790
24229
Eduard Chitoraga
#25774
N/A
Edward Simpson
#25604
N/A
Mateusz Krzeszowiak
#25541
22416
Eden Duong
#25939
N/A
Eden Duong
#25928
N/A
Eduard Chitoraga
#25913
N/A
Lukasz Bajsarowicz
#25822
N/A
Lukasz Bajsarowicz
#25812
N/A
Lukasz Bajsarowicz
#25803
N/A
Lukasz Bajsarowicz
#25791
N/A
Lukasz Bajsarowicz
#25792
N/A
Andrii Beziazychnyi
#25765
25739
Nathan Morgan
#25655
25654
Eden Duong
#25952
25731
Eden Duong
#25942
25935
Eden Duong
#25932
25931
Eden Duong
#25926
25925
Eduard Chitoraga
#25918
25917
Ihor Sviziev
#25912
25911
Adam Mellen
#25995
N/A
Eden Duong
#25984
N/A
Eden Duong
#25982
N/A
Lukasz Bajsarowicz
#25954
N/A
Eden Duong
#25924
25893
Eden Duong
#25904
25896
Bartłomiej Szubert
#25723
24713
Alexey Rakitin
#25699
19805, 23481
Phil
#25262
N/A
Eden Duong
#26016
N/A
Eden Duong
#25997
N/A
Eden Duong
#25993
N/A
Nazar Klovanych
#25992
N/A
Hitesh
#25973
25972
maslii
#25975
N/A
Dan Wallis
#25624
N/A
Namrata
#25114
N/A
Mateusz Krzeszowiak
#25587
25586
Eduard Chitoraga
#26069
N/A
Eden Duong
#26067
N/A
Eduard Chitoraga
#26063
20379
Sathish Subramanian
#26057
N/A
Sathish Subramanian
#26050
N/A
Giancarlo Peris
#26044
N/A
Eden Duong
#26045
N/A
Eden Duong
#26042
N/A
Eden Duong
#26043
N/A
Krzysztof Daniel
#26037
N/A
Paweł Tylek
#26034
18687
Eden Duong
#26003
N/A
Łukasz Lewandowski
#26001
24025
Sergey Dovbenko
#25940
100
Eduard Chitoraga
#25697
N/A
Rafael Corrêa Gomes
#25523
N/A
Tan Sezer
#24360
24357
Eden Duong
#26060
N/A
Eden Duong
#26059
N/A
Matheus Gontijo
#26058
N/A
divyajyothi5321
#26011
25930
Eden Duong
#26004
N/A
Sathish Subramanian
#25920
N/A
Eden Duong
#26082
N/A
Eden Duong
#26076
N/A
Sathish Subramanian
#26068
N/A
Lukasz Bajsarowicz
#26009
N/A
Ashna-Jahan
#25759
25433
Lukasz Bajsarowicz
#25854
N/A
Lukasz Bajsarowicz
#25846
N/A
Lukasz Bajsarowicz
#25845
N/A
Lukasz Bajsarowicz
#25844
N/A
Lukasz Bajsarowicz
#25842
N/A
Lukasz Bajsarowicz
#25841
N/A
Lukasz Bajsarowicz
#25831
N/A
Lukasz Bajsarowicz
#25836
N/A
Lukasz Bajsarowicz
#25830
N/A
Lukasz Bajsarowicz
#25829
N/A
Lukasz Bajsarowicz
#25825
N/A
Lukasz Bajsarowicz
#25823
N/A
Lukasz Bajsarowicz
#25821
N/A
Lukasz Bajsarowicz
#25819
N/A
Lukasz Bajsarowicz
#25820
N/A
Lukasz Bajsarowicz
#25818
N/A
Lukasz Bajsarowicz
#25817
N/A
Lukasz Bajsarowicz
#25816
N/A
Lukasz Bajsarowicz
#25815
N/A
Lukasz Bajsarowicz
#25813
N/A
Lukasz Bajsarowicz
#25811
N/A
Lukasz Bajsarowicz
#25807
N/A
Lukasz Bajsarowicz
#25804
N/A
Lukasz Bajsarowicz
#25802
N/A
Lukasz Bajsarowicz
#25800
N/A
Lukasz Bajsarowicz
#25799
N/A
Lukasz Bajsarowicz
#25797
N/A
Lukasz Bajsarowicz
#25794
N/A
Lukasz Bajsarowicz
#25793
N/A
Lukasz Bajsarowicz
#25788
N/A
Lukasz Bajsarowicz
#25787
N/A
Lukasz Bajsarowicz
#25784
N/A
Lukasz Bajsarowicz
#25783
N/A
Gihovani Filipp Pereira Demétrio
#26157
N/A
Ravi Chandra
#26160
26155
Eduard Chitoraga
#26154
N/A
Eduard Chitoraga
#26150
#26148
Eden Duong
#26140
N/A
Sathish Subramanian
#26136
N/A
Lukasz Bajsarowicz
#26128
N/A
Eden Duong
#26127
N/A
Eduard Chitoraga
#26096
N/A
Andrii Beziazychnyi
#26028
N/A
Serhiy Zhovnir
#25864
761
Daniel Ruf
#24849
N/A
Lukasz Bajsarowicz
#26131
N/A
Lukasz Bajsarowicz
#26129
N/A
Lukasz Bajsarowicz
#26125
N/A
Grzegorz Bogusz
#26033
25974
Pavel Bystritsky
#25915
N/A
Andreas Mautz
#25838
25674
Marc Rodriguez
#25315
13136
Lukasz Bajsarowicz
#25957
22047
David Lambauer
#24103
N/A
divyajyothi5321
#26173
26164
Ravi Chandra
#26170
24972
azambon
#25876
25659
Adarsh Manickam
#25428
N/A
Andrey Legayev
#25125
N/A
Lukasz Bajsarowicz
#26225
N/A
Alexey Arendarenko
#25603
18717
divyajyothi5321
#26182
26176
Bartłomiej Szubert
#26130
25390
Marco Oliveira
#26084
26083
divyajyothi5321
#26066
26064
MaxRomanov4669
#25958
14663
Anton Kaplya
#25479
N/A
Torben Höhn
#25640
N/A
Edward Simpson
#25478
N/A
Behnam Shayani
#25452
20966
Bartłomiej Szubert
#24815
21684
Eden Duong
#24471
24468
Pavel Bystritsky
#22917
22856
Lukasz Bajsarowicz
#26274
N/A
Lukasz Bajsarowicz
#26273
N/A
Bartłomiej Szubert
#26268
14001
aleromano89
#26264
23521
Lukasz Bajsarowicz
#26259
N/A
divyajyothi5321
#26237
25936
Hitesh
#26234
26227
Sathish Subramanian
#26215
26208
Lukasz Bajsarowicz
#26207
26206
divyajyothi5321
#26183
26181
divyajyothi5321
#26169
26168
Yaroslav Rogoza
#26029
N/A
Laura Folco
#25946
19093
miszyman
#25250
23350
Hitesh
#26290
26289
Marco Oliveira
#26270
22964
Bartłomiej Szubert
#26263
14913
Eduard Chitoraga
#26251
N/A
Riccardo Tempesta
#26218
26217
Pawan Kumar Parmar
#26048
N/A
Andrii Chorniy
#25985
23899
Douglas Radburn
#25337
14971
Denis Kopylov
#22990
22988
Bartłomiej Szubert
#26360
N/A
Patrick McLain
#26359
N/A
Bartłomiej Szubert
#26354
N/A
Alexander Taranovsky
#26312
N/A
Eduard Chitoraga
#26311
N/A
Eduard Chitoraga)
#26305
N/A
Bartłomiej Szubert
#26269
7065
MaxRomanov4669
#26258
11209
Hitesh
#26238
26235
Patrick McLain
#26185
N/A
Eden Duong
#26051
25130
Eden Duong
#25909
25881
Benjamin Rosenberger
#25718
N/A
Benjamin Rosenberger
#25716
N/A
Matti Vapa
#25375
25373
Mychailo
#25333
25278
dhoang89
#25194
25188
Thomas Klein
#25083
N/A
Gihovani Filipp Pereira Demétrio
#24955
22304
John Hughes
#23313
22909
Lukasz Bajsarowicz
#26407
26396
Lukasz Bajsarowicz
#26395
26396
Lukasz Bajsarowicz
#26323
26331
Lukasz Bajsarowicz
#26321
26331
Lukasz Bajsarowicz
#26320
26331
Lukasz Bajsarowicz
#26319
26331
Paweł Tylek
#26424
26364
Alexander Taranovsky
#26402
N/A
Tejash Kumbhare
#26365
26364
Andrii Chorniy
#26313
25968
Timon de Groot
#26495
N/A
Alexander Taranovsky
#26464
N/A
Alexander Taranovsky
#26452
N/A
Lukasz Bajsarowicz
#26322
26331
Lukasz Bajsarowicz
#26391
N/A
Vikalp Saxena
#26628
N/A
Lukasz Bajsarowicz
#26614
26612
Eduard Chitoraga
#26558
N/A
Ajith
#26540
N/A
Ajith
#26537
N/A
Fred Orosko Dias
#26512
N/A
Fred Orosko Dias
#26511
N/A
Fred Orosko Dias
#26509
N/A
Andrii Chorniy
#26490
N/A
Ravinder
#26489
26437
Lukasz Bajsarowicz
#26480
26479
Karyna Tsymbal
#26478
N/A
Oleh Usik
#26455
25162
deepaksnair
#26445
25761
Sergiy Vasiutynskyi
#26435
18012
Tjitse
#26434
N/A
Andrii Kartavtsev
#26381
25300
iGerchak
#26327
N/A
Daniel Ruf
#26285
26275
Stanislav Ilnytskyi
#26071
26065
Fred Orosko Dias
#25994
N/A
iGerchak
#25839
21014
Mateusz Krzeszowiak
#25385
10518, 21717
Lukasz Bajsarowicz
#26355
N/A
Manuel Eduardo Cánepa Cihuelo
#26296
N/A
Alexander Taranovsky
#26000
N/A
Hitesh
#25966
25962
Jeroen
#25875
9466
Mateusz Krzeszowiak
#25764
17125
Vinai Kopp
#24460
N/A
Namrata
#26634
N/A
Lukasz Bajsarowicz
#26611
26610
Sathish Subramanian
#26549
N/A
Karyna Tsymbal
#26525
N/A
Karyna Tsymbal
#26487
N/A
Alexander Taranovsky
#26439
N/A
Alexander Taranovsky
#26429
N/A
Sergiy Vasiutynskyi
#26241
26240
Risha Tiwari
#26641
N/A
Karyna Tsymbal
#26579
N/A
Dmitry Tsymbal
#26574
N/A
Oleh Usik
#26569
17847
Ajith
#26568
N/A
Mayank Zalavadia
#26542
N/A
Yevhen Sentiabov
#26533
21555, 26532
Eduard Chitoraga
#26496
N/A
Alexander Taranovsky
#26476
N/A
Erfan Shamabadi
#26462
N/A
Michele Fantetti
#26451
N/A
Karyna Tsymbal
#26430
N/A
Karyna Tsymbal
#26399
26332
Paavo Pokkinen
#26213
N/A
KaushikChavda
#26007
25591
Dan Wallis
#25860
N/A
Willem Wigman
#25851
N/A
jimuld
#25742
N/A
Raúl Verdugo Lorenzo
#25324
13865
George Babarus
#24648
N/A
Andreas von Studnitz
#24485
N/A
Chris Pook
#26378
26375
Paweł Tylek
#25641
25032
Andrey Nikolaev
#25285
N/A
Sergiy Vasiutynskyi
#26420
8691
Raul E Watson
#26413
N/A
Ravi Chandra
#26162
25195
Lachlan Turner
#26623
26622
Lukasz Bajsarowicz
#26621
N/A
Hitesh
#26546
26543
Fanis Strezos
#26423
25268
Tejash Kumbhare
#26339
26338
Jens Scherbl
#24691
N/A
Ajith
#26782
N/A
Matthew O’Loughlin
#26781
N/A
Karyna Tsymbal
#26770
N/A
Sathish Subramanian
#26764
26760
Adarsh Manickam
#26714
14885
Karyna Tsymbal
#26715
N/A
Shankar Konar
#26502
863
Yurii Tvardyi
#26279
26276
Alexander Taranovsky
#26246
26245
Andrea Parmeggiani
#26142
26141
toxix
#25488
25487
Nikita Sarychev
#25249
N/A
vishal-webkul
#25246
25245
adrian-martinez-interactiv4
#24843
24842
Sathish Subramanian
#26820
N/A
Karyna Tsymbal
#26816
N/A
Ajith
#26771
N/A
Bartłomiej Szubert
#26684
N/A
Pratik Mehta
#26674
N/A
Tejash Kumbhare
#26342
N/A
Adarsh Manickam
#25991
847
Vinh Le
#26857
26843
Alexander Taranovsky
#26846
N/A
Karyna Tsymbal
#26844
N/A
Karyna Tsymbal
#26835
N/A
Karyna Tsymbal
#26839
N/A
Karyna Tsymbal
#26769
N/A
Ajith
#26768
N/A
Karyna Tsymbal
#26712
N/A
Vova Yatsyuk
#26688
N/A
Dasharth Patel
#26659
26054
Bartłomiej Szubert
#26398
N/A
Sergiy Vasiutynskyi
#26317
26240, 26314
Alexander Lukyanov
#24612
24547
Eduard Chitoraga
#26904
N/A
Karyna Tsymbal
#26899
N/A
Stanislav Ilnytskyi
#26897
N/A
Karyna Tsymbal
#26894
N/A
Eduard Chitoraga
#26878
N/A
Vladimir Fishchenko
#26869
N/A
Vladimir Fishchenko
#26868
N/A
Milan Osztromok
#26863
N/A
Stanislav Ilnytskyi
#26790
N/A
Sathish Subramanian
#26761
N/A
Eduard Chitoraga
#26710
N/A
Eden Duong
#26701
26675
Serhii Petrychenko
#26650
25675
Karyna Tsymbal
#26617
N/A
Sathish Subramanian
#26584
26583
Maksym Novik
#26523
25963
Hitesh
#26418
26416
Marco Köpcke
#25806
25656
Benjamin Rosenberger
#25626
N/A
Brice
#25426
N/A
Rafael Corrêa Gomes
#25417
N/A
Rafael Corrêa Gomes
#25321
N/A
Artem Voloznov
#24976
24971
Bartłomiej Szubert
#22296
14958
Alexander Taranovsky
#26833
N/A
Lukasz Bajsarowicz
#26608
26607
Grayson
#26772
N/A
Lukasz Bajsarowicz
#25858
25856
Denis Kopylov
#23570
N/A
Petar Borisovski
#26995
N/A
Bartłomiej Szubert
#26982
N/A
Lukasz Bajsarowicz
#26974
26973
Max Mezhensky
#26947
N/A
Max Mezhensky
#26944
N/A
Sathish Subramanian
#26932
26917
Nandhini Nagaraj
#26928
N/A
Andrii Kasian
#26916
N/A
Max Mezhensky
#26912
N/A
Mohamed-Asar
#26862
26838
Vladimir Fishchenko
#26821
N/A
Oleh Usik
#26755
N/A
Vladimir Fishchenko
#26697
N/A
Fred Orosko Dias
#26586
N/A
Ravinder
#26230
26229
Oleh Usik
#26090
25910
Andrii Chorniy
#25895
13269, 25738
Shankar Konar
#25349
572
Chris Frewin
#25161
N/A
Sathish Subramanian
#26979
26800
Max Mezhensky
#26842
N/A
Alastair Mucklow
#26615
N/A
Lukasz Bajsarowicz
#25828
26331
enriquei4
#25311
13252
Bartłomiej Szubert
#27054
N/A
Lukasz Bajsarowicz
#27048
27044
Sean van Zuidam
#27041
27040
Karyna Tsymbal
#27021
N/A
Max Mezhensky
#27010
N/A
Lukasz Bajsarowicz
#26779
N/A
Bartłomiej Szubert
#26765
17933
Tobias Nilsson
#26548
23755, 26384
Lukasz Bajsarowicz
#26329
26331
korostii
#25359
25243
Pieter Hoste
#24003
23619
Alexander Taranovsky
#27114
N/A
Oleh Usik
#27057
N/A
Timon de Groot
#27033
27032
Dominic Fernando
#26907
N/A
Tu Nguyen
#26619
N/A
Lukasz Bajsarowicz
#26778
N/A
Lukasz Bajsarowicz
#26990
26989
Raul E Watson
#27196
N/A
Sergiy Vasiutynskyi
#27149
27027
Adarsh Manickam
#27138
973
Sergiy Vasiutynskyi
#27131
26758
Bartłomiej Szubert
#27084
N/A
Bartłomiej Szubert
#27083
N/A
Bartłomiej Szubert
#27082
N/A
Bartłomiej Szubert
#27080
N/A
Sergiy Vasiutynskyi
#27029
26847
Vinh Le
#27026
27009
Sathish Subramanian
#27014
26992
Bartłomiej Szubert
#26964
N/A
Ihor Sviziev
#26939
N/A
Bartłomiej Szubert
#26902
20309
Tejash Kumbhare
#26649
26648
princeCB
#26642
26590
Alexander Taranovsky
#26563
N/A
Hirokazu Nishi
#25454
24637
Pieter Hoste
#24878
22609
Dmitriy
#24743
24735
Francis
#23742
N/A
wardcapp
#22442
N/A
Vadim Malesh
#27172
14086
Franciszek Wawrzak
#27179
N/A
Bartłomiej Szubert
#27145
N/A
alexander-aleman
#26959
25219
DanieliMi
#26506
26499
Andrii Beziazychnyi
#25722
25669
Ihor Sviziev
#27284
N/A
Lukasz Bajsarowicz
#27281
N/A
Lukasz Bajsarowicz
#27277
N/A
Lukasz Bajsarowicz
#27274
N/A
Sergiy Vasiutynskyi
#27261
20472, 20906, 21910
Navarr Barnier
#27249
N/A
Pieter Hoste
#26784
4112, 11615, 11616, 25124, 26393
Piotr Markiewicz
#26746
N/A
Mudit Shukla
#26348
26345
Vadim Malesh
#27187
26117
Sergiy Vasiutynskyi
#27170
26825
Eden Duong
#25733
N/A
Lukasz Bajsarowicz
#27118
27117
Dmitry Tsymbal
#27266
N/A
Lukasz Bajsarowicz
#27255
N/A
Vasilii Burlacu
#27165
N/A
AleksLi
#27015
26683
Tu Nguyen
#26987
26963
Sergiy Vasiutynskyi
#26560
26473, 26856, 26858
Dan Wallis
#25297
N/A
solwininfotech
#24479
22251
Lukasz Bajsarowicz
#27273
N/A
Vadim Malesh
#27237
24704
Bartłomiej Szubert
#27215
N/A
Sergiy Vasiutynskyi
#27191
26827
Michael Bottens
#27125
27124
Yaroslav Rogoza
#26015
N/A
Mr. Lewis
#25734
N/A
Alexander Menk
#23191
N/A
Abrar Pathan
#27336
27335
Sergiy Vasiutynskyi
#27304
14080
Lukasz Bajsarowicz
#27298
N/A
Lukasz Bajsarowicz
#27292
N/A
Vasilii Burlacu
#27263
26708
Lukasz Bajsarowicz
#27214
N/A
Michele Fantetti
#27116
N/A
Antonino Bonumore
#26748
26745
Bartłomiej Szubert
#26923
186
Andrii Beziazychnyi
#27390
N/A
Fil Maj
#27375
N/A
Oleh Usik
#27353
N/A
Dmitry Tsymbal
#27334
N/A
Bartłomiej Szubert
#27319
N/A
Andrii Beziazychnyi
#27307
26224
Lukasz Bajsarowicz
#27276
N/A
Lukasz Bajsarowicz
#27000
N/A
Tjitse
#26538
N/A
Pavel Bystritsky
#25664
25540
Alexander Taranovsky
#22011
22010
Lukasz Bajsarowicz
#27378
N/A
Nirav Patel
#26055
22363
Sergiy Vasiutynskyi
#27412
13689
Bartłomiej Szubert
#27393
N/A
Bartłomiej Szubert
#27385
N/A
Bartłomiej Szubert
#27384
N/A
Vasilii Burlacu
#27383
27370
Lukasz Bajsarowicz
#27381
N/A
Mateusz Krzeszowiak
#27360
N/A
Priya-V-Panchal
#27088
27086
Laura Folco
#22837
22833
Bartłomiej Szubert
#26075
6310
Shankar Konar)
#27388
N/A
Graham Wharton
#26999
N/A
Vasilii Burlacu
#27371
N/A
Vadim Malesh
#27509
N/A
Bartłomiej Szubert
#27462
N/A
Lukasz Bajsarowicz
#27427
N/A
Lukasz Bajsarowicz
#27425
N/A
Nazar Klovanych
#27413
N/A
Abel Truong
#27365
16315
Lyzun Oleksandr
#27257
N/A
Daniel Ruf
#26763
26762
Shankar Konar
#26736
N/A
Tu Nguyen
#26618
N/A
Stanislav Ilnytskyi
#26417
N/A
Vasilii Burlacu
#27493
26652
Andrii Beziazychnyi
#27492
N/A
Serhiy Zhovnir
#27399
1002
Bartłomiej Szubert
#26397
N/A
Oleh Usik
#26100
24990
Simon Sprankel
#27545
N/A
Tu Nguyen
#27544
N/A
Oleh Usik
#27526
N/A
Ihor Sviziev
#27521
27500
Vasilii Burlacu
#27497
27496
Vasilii Burlacu
#27495
N/A
Bartłomiej Szubert
#27463
N/A
Abel Truong
#27295
27169
Mark Shust
#26900
N/A
Pieter Hoste
#26801
N/A
Ihor Sviziev
#27519
27500
Lukasz Bajsarowicz
#27322
27320
Lukasz Bajsarowicz
#27321
27320
Nazar Klovanych
#27652
N/A
Cristiano Pacheco
#27627
27500
Lukasz Bajsarowicz
#27597
171
Oleh Usik
#27563
N/A
Bartłomiej Szubert
#27491
N/A
Sergiy Vasiutynskyi
#27343
13851
Lukasz Bajsarowicz
#26988
26986
Tu Nguyen
#26926
N/A
Krzysztof Daniel
#26036
N/A
Oleh Usik
#27671
N/A
Lukasz Bajsarowicz
#27552
N/A
Marcus Pettersen Irgens
#27547
N/A
Oleh Usik
#27676
N/A
Ihor Sviziev
#27522
27500
Eino Keskitalo
#27448
N/A
Lukasz Bajsarowicz
#27701
27638
Oleh Usik
#27689
N/A
Bartosz Górski
#27685
N/A
Oleh Usik
#27677
N/A
Paweł Tylek
#27603
27506
Lukasz Bajsarowicz
#27325
N/A
Oleh Usik
#27843
N/A
Oleh Usik
#27841
N/A
Oleh Usik
#27692
N/A
Lukasz Bajsarowicz
#27606
27607
Matheus Gontijo
#26293
N/A
Oleh Usik
#27846
N/A
Lukasz Bajsarowicz
#27300
27299
Sergii Ivashchenko
#27499
N/A
Sergii Ivashchenko
#27536
N/A
Nazar Klovanych
#27566
N/A
Nazar Klovanych
#27966
N/A
Pieter Hoste
#27926
27920
Pieter Hoste
#27892
N/A
Ihor Sviziev
#27887
25769
Shikha Mishra
#27886
27874
Ajith
#27740
N/A
Oleksandr Kravchuk
#27578
N/A
Lukasz Bajsarowicz
#27323
27320
Lukasz Bajsarowicz
#27093
27089
Alexander Shkurko
#27994
N/A
Vadim Malesh
#27976
1270
Lukasz Bajsarowicz
#27964
N/A
Andrii Kalinich
#27955
27897
Shankar Konar
#27515
27503
Ajith
#26886
N/A
Nazar Klovanych
#28048
N/A
Volodymyr Zaets
#27948
N/A
Volodymyr Zaets
#27662
N/A
Ajith
#26704
N/A
Tu Nguyen
#27572
27058
Dzung Nguyen
#27455
23440
Rohan Hapani
#27359
27358

System requirements

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

Installation and upgrade instructions

You can install Magento Open Source 2.4.0 using Composer.

Migration toolkits

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.

recommendation-more-help
1d4eef6c-fef1-4e61-85eb-b58d7b9ac29f