Magento Open Source 2.3.4 Release Notes

Magento Open Source 2.3.4 offers significant platform upgrades, substantial security changes, and PSD2-compliant core payment methods.

This release includes over 220 functional fixes to the core product and over 30 security enhancements. It includes resolution of over 275 contributions by our community members. These community contributions range from minor clean-up of core code to significant enhancements to Inventory Management and GraphQL.

Download and run the DB_CLEANUP_SCRIPT.php script

This hotfix addresses an issue with CVE-2019-8118 that was included in Magento 2.3.3 and 2.2.10. While the original fix for that bug stopped the logging of failed login attempts, information collected prior to updating to these current versions may still exist, and previous, unpatched versions of Magento may still have this issue. This hotfix provides a script that clears the login attempts that were previously collected. We recommend that all merchants download and run this script. See Remove failed login attempts from the database for information on how to download and run this database clean-up script.

Apply the PayPal Express Checkout issue with region patch for Magento 2.3.4 to address a critical PayPal Express Checkout issue

This issue affects orders placed with PayPal Express Checkout where the order’s shipping address specifies a country region that has been manually entered into the text field rather than selected from the drop-down menu on the Shipping page. When the customer enters a region in the text field, Magento throws this error: 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. When the customer selects the country region from the drop-down menu when placing an order, the order is completed successfully. See Applying patches for specific instructions on downloading and applying Magento patches. Both Git-based and Composer-based patches are available. A fix for this issue will be included in Magento 2.3.5, which is scheduled for release in April 2020.

Security-only 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, Magento 2.3.4) provides. Patch 2.3.3.1 (Composer package 2.3.3-p1) is a security-only patch that provides fixes for vulnerabilities that have been identified in our previous quarterly release, Magento 2.3.3. All hot fixes that were applied to the 2.3.3 release are included in this security-only patch. (A hot fix provides a fix to a released version of Magento that addresses a specific problem or bug.) For general information about security-only patches, see the Magento DevBlog post Introducing the New Security-only Patch Release. For instructions on downloading and applying security-only patches (including patch 2.3.3-p1), see Install Magento using Composer. Security-only patches include only security bug fixes, not the additional security enhancements that are included in the full patch.

With this quarterly release, we’ve changed how we describe these security issues. Individual issues are no longer described in the Magento Security Center. Instead, these issues are documented in an Adobe Security bulletin. Please see Security updates available for Magento APSB20-02.

Highlights

Look for the following highlights in this release:

Substantial security enhancements

This release includes the following security enhancements:

Over 30 security enhancements that help close cross-site scripting (XSS) and remote code execution (RCE) 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 whitelisting, two-factor authentication, use of a VPN, the use of a unique location rather than /admin, and good password hygiene. See Adobe Security Bulletin for a discussion of these fixed issues. All known exploitable security issues fixed in this release (2.3.4) have been ported to 2.2.11, 1.14.4.4, and 1.9.4.4, as appropriate.

Security enhancements and fixes to core code

Additional security enhancements include:

  • Removal of custom layout updates and the deprecation of layout updates to remove the opportunity for Remote Code Execution (RCE). The Custom Layout Update field on the CMS Page Edit, Category Edit, and Product Edit pages has now been converted to a selector. You can no longer specify an entity-specific layout update with text but instead must create a physical file that contains the layout updates and select it for use. The name of the file containing an update must follow the conventions described here.

  • Redesigned content template features so that only whitelisted variables can be added to templates. This avoids the situation where administrator-defined templates such as email, newsletters, and CMS content can include variables and directives that can directly call PHP functions on objects. See Migrating custom email templates and Email templates.

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

Platform upgrades

The following platform upgrades help enhance website security and PCI compliance.

  • Enhancements to the message queue framework. Magento now supports the latest release of RabbitMQ v3.8, which is the third-party technology that underlies the Magento message queue framework.

  • Improved page caching and session storage. This release has been tested on the latest stable release of Redis v5.0.6.

  • Enhanced support for MariaDB 10.2. Before Magento 2.3.4, when using declarative schema with MariaDB 10.2, Magento threw an error indicating that the schema was not up-to-date after running bin/magento setup:upgrade. With this release, we have normalized the values returned by MariaDB, which allows system integrators to use declarative schema with both MySQL and MariaDB.

  • The core integration of the Authorize.net payment method has been deprecated. Please use the official payment integration that is available on Marketplace.

Note: Magento 2.3.4 has not been tested with PHP 7.1. PHP 7.1 reached EOL (End of Life) on December 1, 2019. We recommend updating your deployment to a supported version of PHP. See Magento 2.3 technology stack requirements for information about supported versions.

Performance boosts

Merchants and customers will see performance improvements as a result of these enhancements:

  • Redundant non-cached requests to the server on catalog pages have been eliminated by refactoring the customer section invalidation mechanism and improving banner cache logic.

  • PHTML files have been refactored to better support parsing by the bundling mechanism. Our new bundling mechanism now identifies all dependencies on JavaScript.

  • Added the ability to disable statistic collecting for Reports module by default. A new configuration setting (System Configuration > General > Reports > General Options) allows merchants to completely or partially disable Magento Reports. (Statistics collection for the Reports module is disabled by default. Magento recommends disabling Reports functionality for performance reasons when this capability is not required.)

Infrastructure improvements

This release contains 250 enhancements to core quality, which improve the quality of the Framework and these modules: catalog, sales, PayPal, Elasticsearch, import, and CMS.

Merchant tool enhancements

Integration with Adobe Stock image galleries. The new bundled Adobe stock integration extension enables merchants to add high quality media assets to their website content without leaving the Magento Admin. Merchants can use the searchable interface in the Magento Media Gallery to explore, preview, license, and deploy stock images in website content. See Adobe Stock Integration and Using Adobe Stock Images.

Inventory Management

Inventory Management enhancements for this release include:

  • Addressed a known performance issue that caused higher than expected loads on the database server in scenarios involving the shopping cart.

  • Updated the Inventory Reservations CLI command to reduce memory usage when finding and compensating for missing reservations on large catalogs.

  • Resolved multiple quality issues, including those related to credit memos, grouped products, source and stock mass actions.

See Inventory Management release notes for a more detailed discussion of recent Inventory bug fixes.

GraphQL

This release includes improved GraphQL coverage for search, layered navigation, cart functionality. The following mutations/queries are available:

  • Guest carts can now be merged with customer carts. The mergeCarts mutation transfers the contents of a guest cart into the cart of a logged-in customer.

  • A customer can start an order on one device and complete it on another. Use the customerCart query to obtain the cart ID for a logged-in customer.

  • Layered navigation can use custom filters. The filter attribute of the products query now requires the ProductAttributeFilterInput object. You can specify a pre-defined filter in this object, or define a custom filter. As a result, layered navigation on your website filters on the attributes you need.

  • You can search categories by ID, name, and/or URL key. The categoryList query replaces the deprecated category query.

  • The ProductInterface supports fixed product taxes (such as WEEE). Use the storeConfig query to determine whether to store supports these taxes.

  • The cart object has been enhanced to include information about promotions and applied discounts at the line and cart levels.

See Release notes for a more detailed discussion of recent GraphQL bug fixes.

PWA Studio

  • Improved the getting-started experience through the use of @magento/create-pwa to scaffold your initial project using Venia as your template

  • Separation of the logic (Talons) and presentation pieces (venia-ui) of certain React hooks in Peregrine. Developers can now swap out either the logic or the presentation side of a component

  • Routing is now handled through the React Router (library of navigational components)

  • Refactored Venia state management to abstract and reduce dependency on Redux

  • Continued migration from REST to GraphQL

  • Performance improvements (service workers, cache, image optimization)

  • Breadcrumbs for improved storefront navigation

For information on these enhancements plus other improvements, see PWA Studio releases

dotdigital

  • Live Chat powered by dotdigital enables merchants to increase conversion rates, and keep customers coming back with real-time engagement. All Magento 2.3.x merchants (both Magento Open Source and Magento Commerce) can receive a free live chat agent without the need for a full dotdigital Engagement Cloud license.

  • Engagement Cloud includes a new Chat widget that makes it easy for shoppers to communicate in real time with customers as they shop in your store. Chat can be accessed from the Engagement Cloud section of the Magento configuration, or directly from your Engagement Cloud account. See Engagement Cloud Chat.

  • Merchants can now sync additional campaigns from Engagement Cloud to Magento.

Google Shopping ads Channel

Google Shopping ads Channel Release Notes describes all changes to this feature for Magento 2.3.x.

Vendor-developed extension enhancements

This release of Magento includes extensions developed by third-party vendors. It includes both quality and UX improvements to these extensions.

Klarna

Klarna Payments has a new Data sharing on load field in the Magento configuration that can be set to share customer data either after the transaction is authorized, or when the Klarna payment method is selected during checkout. See Setting Up Klarna.

Fixed issues

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

Installation, upgrade, deployment

  • Upgrades no longer fail when deployments contain store information predefined in app/etc/config.php. Previously, MySQL locks occurred during the store import phase of upgrade, and Magento threw an error.
  • The setup:db-declaration:generate-patch command now generates a patch file using the revert() method as expected when the --revertable option is set to true. Fix submitted by Alexander Taranovsky in pull request 23848. GitHub-23847
  • You can now run bin/magento maintenance:enable or bin/magento maintenance:disable on a deployment with an empty database. Previously, Magento threw an error when you switched maintenance modes with an empty database. Fix submitted by Ivan Koliadynskyy in pull request 24959. GitHub-23577
  • In rare circumstances, executing composer update disabled all Magento caches. This issue no longer occurs. Fix submitted by adrian-martinez-interactiv4 in pull request 24892. GitHub-17634
  • Vendor names can now contain numbers. Previously, Magento threw an error. Fix submitted by Jason Sylvester in pull request 24324. GitHub-8037
  • Single pipes in composer.json files have been changed to double pipes.
  • Patch dependencies no longer cause a patch to be applied twice. Previously, a patch on which there was a dependency was installed twice and entered twice in the patch_list table. Fix submitted by korostii in pull request 24947. GitHub-24019
  • Static content deployment (bin/magento setup:static-content:deploy) no longer results in random deletion of CSS files or multiple exceptions. Fix submitted by Ihor Sviziev in pull request 22886. GitHub-22880
  • You can successfully install Magento 2.3.4 with MySQL 8. Previously, installation stopped because the patch triggered forced indexation. However, Magento 2.3.4 is not yet fully compatible with MySQL 8, so use at your own risk. Full support for MySQL 8 is scheduled for Magento 2.4.0. Fix submitted by Anton Kaplya in pull request 25357. GitHub-25294
  • You can now use SSL to connect Magento 2.x to an MySQL server. Fix submitted by Malyovanets Nickolas in pull request 25398. GitHub-13561
  • Merchants can use a new system configuration setting to specify the API key for a currency provider. This key is needed when using the Currency Converter API to import currency rates. Previously, a merchant could not import currency rates as expected from Stores > Currency Rates.

Analytics

  • module-analytics/Model/ExportDataHandler.php now generates data in the Docroot/var/ folder as expected. Fix submitted by Adarsh Manickam in pull request 24773. GitHub-24708
  • Clicking on the ESC key no longer closes the Admin Analytics popup dialog that Magento displays when an administrator first logs in.
  • Administrators can now use the TAB key only to navigate between the Allow and Don’t Allow buttons. Previously, an administrator could use the TAB key to navigate out of the dialog.

Backend

  • Magento now sets the correct Admin locale scope when generating email templates. Previously, email sent from the Admin included incorrect static file paths.

Bundle products

  • The price and subtotal shown in the cart and mini cart for bundle products is now based on the quantity of items and tier price as expected. Previously, if you added a second product to the cart, Magento doubled the product price that was displayed in the cart.
  • The shopping cart now displays correct prices for bundle products when you use the Add to Cart Button to add them to cart twice.
  • Bundle products now show the correct price when bundle options include only one multiple select option. Fix submitted by Rani Priya in pull request 23902. GitHub-23886
  • The price attribute of a bundle product is now disabled as expected when dynamic prices are enabled. Previously, when the Allow Alert When Product Comes Back in Stock setting or the Allow Alert When Product Price Changes setting were enabled, prices remained enabled. Fix submitted by Arushi Bansal in pull request 24077. GitHub-23890
  • Magento no longer strips bundled options from a bundle product when you duplicate it. Previously, when you duplicated a bundle product in the Admin, Magento removed the bundled options from the first product and transferred them to the duplicate product. Fix submitted by Pieter Hoste in pull request 24703. GitHub-13126, GitHub-14112

Cache

  • Full-page caching now works as expected for non-default store views.

Cart and checkout

  • Magento now applies the conditions that are imposed by multiple cart price rules correctly. Previously, Magento ignored conditions to remove free shipping when other discounts were valid.
  • Magento now correctly applies cart price rules that apply a 100% discount.
  • Guest users can now checkout after persistent shopping cart has been disabled. Previously, Magento displayed this error: No cart with such entityId=0.
  • Magento no longer displays custom dropdown customer address attribute option IDs on the Review & Payment section of the checkout workflow when a guest checks out. Previously, Magento displayed the option ID instead of the option label for the selected attribute option.
  • Billing and Shipping information no longer disappear from the Payment section of the checkout workflow when an AJAX POST request fails.
  • Magento now displays an error when you upload an incorrect product SKU while creating an order in a non-default store in a multi-store deployment. Previously, Magento displayed an error when this scenario occurred in the default store.
  • Magento no longer displays customer address attribute option IDs on the dropdown menu of the Shipping section of the checkout workflow. Previously, Magento displayed the option ID instead of the option label for the selected attribute option.
  • Magento no longer drops or updates the shipping address after a customer update or adds a new billing address zip/postal code when the My billing and shipping address are the same setting is disabled.
  • Magento no longer throws a fatal error when you open the shopping cart in a separate window during multishipping checkout.
  • Cart Price Rules tables in multi-site deployments now show existing cart price rules as expected. Previously, the Cart Price Rules page displayed the Search button, number of records found, and navigation buttons, but did not display the grid of rules.
  • You can now use REST to add a product with customizable options (for example, type checkbox) to the cart. Previously, Magento threw an informative error when you used the POST /V1/guest-carts/{cartId}/items endpoint. Fix submitted by Denis Kopylov in pull request 23871. GitHub-23863
  • Validation logic has been added to the Minimum Qty Allowed in Shopping Cart field on Store > Configurations > Catalog > Inventory. Fix submitted by Eden Duong in pull request 23896. GitHub-23895
  • Magento now displays correct product quantities on the Items Ordered tab of the order page when the price includes a decimal value. Fix submitted by Eden Duong in pull request 23943. GitHub-23940
  • Magento now saves the schedule update settings that are set in Admin > Catalog > Categories > Category > Schedule Design Update as expected when you change store view. Fix submitted by kcnariya in pull request 23983. GitHub-23982
  • You can now enable the uploaded file of file type custom option for a product from the shopping cart. Fix submitted by Rani Priya in pull request 24240. GitHub-24239
  • Validation logic has been added to the Send Payment Failed Email Copy To field of Admin > Store > Configurations > Sales > Checkout > Payment Failed Email. Fix submitted by Eden Duong in pull request 24313. GitHub-24307
  • Magento now refreshes the shopping cart as expected when you remove a product from the cart side block. Previously, when you deleted a product from the shopping cart side block, Magento did not update the shopping cart. Fix submitted by Ravi Chandra in pull request 22478. GitHub-11292
  • Magento now correctly calculates minicart height when child items contain margins. Fix submitted by Shankar Konar in pull request 24451. GitHub-24441
  • Magento now displays an informative error message when a customer updates a shopping cart with a product quantity that is not in stock. Previously, under these conditions, Magento displayed an inaccurate error message. Fix submitted by Gustavo Vicente Dauer in pull request 24380. GitHub-24366
  • You can now update the quantity of a product measured in decimals from the shopping cart when the Qty uses decimal setting is enabled. Previously, Magento did not update the product quantity. Fix submitted by Rani Priya in pull request 24510. GitHub-24509
  • The Shopping Cart label has been changed to Mini Cart in the sidebar. Fix submitted by Sunil in pull request 24411. GitHub-24409
  • The Clear Shopping Cart button now works as expected when running Magento with Internet Explorer. Fix submitted by Eden Duong in pull request 24499. GitHub-24491
  • Magento no longer empties the contents of a customer’s shopping cart when she presses Enter after changing a product’s quantity. Fix submitted by Eden Duong in pull request 24499. GitHub-21499
  • Magento now includes the downloadable links associated with a downloadable product when you add the product to the shopping cart and then edit the cart. Fix submitted by Rani Priya in pull request 24580. GitHub-24579
  • Discount descriptions are now displayed consistently throughout the product interface. Fix submitted by Max Souza in pull request 24595. GitHub-3594
  • Magento now displays the Update and Delete buttons as expected in the minicart in mobile view. Previously, these buttons overlapped. Fix submitted by Adarsh Manickam in pull request 25206. GitHub-25137
  • The storefront and Admin shopping cart summary fields are now displayed consistently and reflect setting preferences. Fix submitted by Eden Duong in pull request 25037. GitHub-25036
  • The QuoteManagement::assignCustomer() method now allows you to merge a guest cart with an active customer cart. As a result, the PUT /V1/guest-carts/:guest-cart-id call works as expected. Fix submitted by Ivan Koliadynskyy in pull request 24862. GitHub-24808
  • Magento no longer displays a disabled product in a cart or on the storefront if it is disabled after a customer has added it to the cart using a coupon code. Previously, under these conditions, Magento threw an error, and the customer could not complete the order.
  • Magento now removes the aria-invalid attribute or sets the attribute value to false after successful validation of the address entered into the checkout email field. GitHub-21573
  • You can now add products from a non-default website to a cart from the Admin in a multi-site deployment. Previously, when you created a cart from the non-default site and tried to create an order in the Admin by adding items to the cart, Magento did not add the items, but emptied the cart.
  • Magento no longer adds attribute values to the cart URL when you add a configurable product to the shopping cart from the product details page. Fix submitted by Geeta Modi in pull request 24254. GitHub-21450
  • Persistent shopping cart now works as expected. Previously, Magento changed the customer group to NOT_LOGGED_IN before collecting quote totals if an order was placed using persistent shopping cart.
  • The shopping cart that contains items no longer displays a subtotal and order total of zero when the Clear Persistence on Sign Out setting is disabled and the Redirect Customer to Account Dashboard after Logging in setting is enabled.
  • Quote item prices are no longer NULL in cart-related events. Fix submitted by Eden Duong in pull request 23839. GitHub-18685
  • Magento now successfully saves the shipping information that a customer enters when persistent cart is enabled and after a customer has logged in after her session has expired but before the interval specified by the Persistence Lifetime value has been exceeded. Previously, Magento did not save the shipping information, and displayed an error. GitHub-23908

Catalog

  • Editing the attribute set of a disabled product no longer enables the product on the storefront.
  • Magento now displays category banner images as expected on the category edit and the storefront category pages.
  • Magento no longer throws a fatal error during compilation of code that contains a preference for the category product indexer. GitHub-22769
  • When an administrator sets the out-of-stock threshold for a product to a negative value and allows backorders below a quantity of 0, customers can backorder a product until the out-of-stock-threshold value matches the product’s stock quantity. Previously, the out-of-stock threshold had no effect, and the given product stayed in stock and could be backordered without limit.
  • Storeview-specific attributes are now included in layered navigation results even when the All Store Views setting is not enabled.
  • Magento now displays the Refresh Cache message as expected when you change the layout of the category page.
  • Catalog search layered navigation results now include product attributes of type price.
  • Magento now highlights only the most recently selected category as expected on storefront pages that contain multiple categories. Previously, all selected category menus remained highlighted.
  • The performance of the Product Categories indexer has been improved. Previously, reindexing product categories could take up to 30 minutes.
  • Corrected an issue that caused category tree values to return null after upgrading from Magento 2.3.1 when multiple store views exist. GitHub-23951
  • Clicking Delete on a Product page twice after selecting one or more products no longer deletes all products. GitHub-15935
  • The catalog product lists are now displayed as expected when products contain custom attribute conditions.
  • Magento now successfully loads pages that implement the catalog product list widget when products contain custom attribute conditions. Previously, Magento threw this error: Error filtering template: Notice: Undefined offset: 0 in .../app/code/Magento/CatalogWidget/Model/Rule/Condition/Product.php on line 221.
  • Merchants can now scroll down the Create New Product page to determine whether the product has been saved if they enter invalid values in the Schedule Design Update fields. Previously, customers could not scroll to see if the product had been saved. Fix submitted by Eden Duong in pull request 24242. GitHub-24241
  • Quote model extension attributes are now properly encoded and present on the checkout page as expected. Previously, these attributes were present as empty objects {}. Fix submitted by skylineop in pull request 24771. GitHub-15959
  • Changing attributes sets now removes the attribute from the layered navigation and search results as expected.
  • The Date field customizable option for products now saves accurate values for stores in different time zones.
  • Custom attributes listed on the Stores > Attributes > Product > Add New Attribute page are now sorted alphabetically as expected. Previously, custom product attributes were sorted by value ID.
  • You can now change the page layout of the catalog_product_view page from a custom theme by changing <theme_dir>/Magento_Catalog/layout/override/base/catalog_product_view.xml. Fix submitted by ochnygosch in pull request 24367. GitHub-24362

CatalogInventory

  • You can now add a child product to the shopping cart if it does not have a default source assigned.

Cleanup and simple code refactoring

  • The Are you sure you want to delete this category? message is now translatable. Fix submitted by Eden Duong in pull request 24039. GitHub-24038
  • The PayPal setting section of the Admin > Stores >Configuration > Sales > Payment Methods page now has an expand/collapse icon. Fix submitted by Eden Duong in pull request 24119. GitHub-24118
  • An incorrect XML namespace URL was removed from the generated sitemaps displayed at Marketing > SEO & Search > Sitemap. Previously, Magento returned a 404 error when you clicked on the sitemap link. Fix submitted by Sunil in pull request 23716. GitHub-23706
  • The minicart now displays a product’s file type custom option. Fix submitted by Rani Priya in pull request 24237. GitHub-24236
  • The spacing of the Select Input box on Admin pages with grids is now consistent with other pages in Magento. Fix submitted by Nagamaiah333 in pull request 24359. GitHub-24152
  • Fixed misalignment of the scope icon and the store view-specific label on the Admin > Store > Settings > Order status > Create New Status page. Fix submitted by Eden Duong in pull request 24449. GitHub-24440
  • The What’s this? link in the Remember me section of the storefront login page now behaves as expected. Fix submitted by Vinicius Rafael Dziuba in pull request 24602. GitHub-24511
  • Corrected misalignment of the checkboxes and associated labels on the Admin > Catalog > Products > Update Attributes page. Fix submitted by Adarsh Manickam in pull request 24761. GitHub-24740
  • Fixed inconsistent and improper capitalization in the Admin > Marketing > Communications > Email Templates > Create a New Template page. Fix submitted by Adarsh Manickam in pull request 24804. GitHub-24803
  • The Magento\CatalogUrlRewrite\Model\Storage\DynamicStorage::getCategoryUrlSuffix() method return value has been changed to type string. Fix submitted by Brent Robert in pull request 24907. GitHub-24903
  • The drop-down icon now remains visible when you click on Load Template while creating an email template from the Admin. Fix submitted by Gaurav Agarwal in pull request 25022. GitHub-24840
  • Fixed alignment of the wishlist icon on the shopping cart in mobile view. Fix submitted by Shubham Sharma in pull request 25200. GitHub-20502
  • Corrected misalignment and standardized design of the Other PayPal Payment Solutions header on the Store Configuration page. Fix submitted by Arvinda Kumar in pull request 25241. GitHub-25240
  • Duplicate labels in the Admin Sales > Transactions Payment Method table have been removed. Fix submitted by Eden Duong in pull request 24041. GitHub-24040
  • Added a missing label on Marketing > Search Synonyms > New Synonym Group. Fix submitted by Eden Duong in pull request 23954. GitHub-23953
  • Corrected the misalignment of the Cache Type checkboxes throughout the Admin. Fix submitted by Mateusz Krzeszowiak in pull request 25443. GitHub-25429
  • Fixed display issue with the placeholder text in the newsletter subscription block in the global footer that occurred in mobile view. Fix submitted by Christos Stergianos in pull request 25184. GitHub-21592
  • The default value for the Products per Page on Grid setting was updated to 12. This setting affects the number of products that are displayed on the storefront for products when the list view is specified. This change will affect new customers and customer who have not previously saved this setting.

CMS content

  • The checkboxes in the Dynamic Block Rotator (used when inserting a widget during the creation of a CMS page) have been corrected, and the widgets are now fully clickable as expected.
  • You can now save CMS blocks with no content. Fix submitted by Eden Duong in pull request 23801. GitHub-23800

Command-line interface (CLI commands)

  • Exception handling messages for CLI commands have been edited to be specific, informative, and relevant to the context in which the error occurs. Fix submitted by Pavel Bystritsky in pull request 24734. GitHub-24678, GitHub-24043
  • bin/magento setup:backup --media now successfully backs up a symbolically linked pub/media directory. Fix submitted by Ivan Koliadynskyy in pull request 24755. GitHub-13218

Configurable products

  • Magento now maintains the sort order of uploaded simple images when they are uploaded through the Create Configurations wizard.
  • A configurable product’s options list now shows out-of-stock products as expected when the Display Out of Stock Products option is enabled.
  • You can now remove special prices from a product without affecting the price of associated products. Previously, after removing the special price from one simple product, Magento stopped displaying the regular price for all associated simple products.
  • The performance of edit and save operations on configurable products has been improved.
  • The Admin configurable product list now displays all simple products with a quantity of 0 as expected. Previously, a simple product disappeared from this list when a product quantity was set to 0.
  • Magento no longer throws an error when you try to add new attribute options to a configurable product. Fix submitted by federeggiani in pull request 24659. GitHub-14240
  • Custom attribute loading now works as expected. Previously, the getUsedProducts() method’s optional $requiredAttributeIds parameter was not used, which prevented the loading of custom attributes. Fix submitted by Laura Folco in pull request 24875. GitHub-24483

Cookies

  • Magento no longer redirects customers to the Cookie CMS page upon login when the Redirect to CMS-page if Cookies are Disabled setting is disabled. Fix submitted by Eden Duong in pull request 25152. GitHub-25148

Cron

  • A new flag has been added to the bin/magento cron:install command that permits you to add only mandatory entries to the crontab file of the server on which Magento is running. The --non-optional flag (or -d for short) adds only one of three possible lines to the crontab file. Without this flag, bin/magento cron:install adds three lines to the crontab of the serve. Only one of those added lines is necessary to run Magento, and many installations are configured such that the two optional lines are not needed. Fix submitted by Alexander Taranovsky in pull request 24187. GitHub-10040, GitHub-24186
  • The bin/magento cron:run command now adds an entry for currency_rates_update in the cron_schedule table as expected. Fix submitted by Bruno Roeder in pull request 24590. GitHub-23846

Customer

  • The Date of Birth field on the customer registration form no longer defaults to 1/1/1970 in deployments that already contain a registered customer with the same email in stores using the en_AU locale.
  • The list of countries accessible from the Add New Address field of the checkout workflow now displays only countries that have been defined in Admin > Stores > Configuration > General.
  • Delegated account creation no longer fails when the customer address contains custom attributes. GitHub-22952
  • Magento now clears the State/Province field on the customer address page when you change the value for country while editing a customer address. Fix submitted by Lucas Calazans in pull request 24597. GitHub-23460
  • Magento now runs validation checks on the values entered into the Date of Birth field in the Admin Add New customer page. Fix submitted by Tiago de Oliveira Castro Teixeira Pinto in pull request 24588. GitHub-22692
  • Spaces are now trimmed as expected from values entered into the customer account Phone field.
  • The Reset Password Confirmation Link email is now scoped appropriately for global customers. Previously, Magento always sent email from the default store, not the store to which the customer was assigned. Fix submitted by Roman Kis in pull request 24783. GitHub-23295

Custom customer attributes

  • Magento now displays an informative error message when a customer tries to place an order without adding an address for the payment method and the My billing and shipping address are the same checkbox is unchecked.

Database media storage

  • The bin/magento catalog:image:resize command now processes images from the database as expected when files do not exist locally. Fix submitted by gwharton in pull request 23913. GitHub-23911
  • Enabling Flush Catalog Images Cache on System > Cache Management now clears all cached image files from both the filesystem and database. Previously, Magnto removed images from the filesystem only. Fix submitted by Wgwharton in pull request 24088. GitHub-23516

Declarative schema

  • The data/schema patch getAliases() method now works as expected. Fix submitted by korostii in pull request 25265. GitHub-23031
  • The WISHLIST_ITEM_OPTION_PRODUCT_ID_CATALOG_PRODUCT_ENTITY_ENTITY_ID foreign key has been removed from declarative schema.

Downloadable products

  • Magento no longer displays a console error when you select all links for a downloadable product on the storefront. Fix submitted by Rani Priya in pull request 24634. GitHub-24633
  • Magento now displays the Unselect all button on the shopping cart page when a customer selects a downloadable product with multiple options. Fix submitted by Adarsh Manickam in pull request 24800. GitHub-24785

EAV

  • The product attribute edit page now loads successfully when you try to edit an attribute value from the Admin. Previously, Magento threw a 500 error.
  • The Attribute Option update API no longer creates multiple options with the same value.
  • The catalog_product_entity_varchar/catalog_product_entity_int tables are now updating with correct values. Previously, when you tried to access the product using REST, Magento displayed deleted custom attribute option values.
  • Magento now correctly saves the values assigned to the sort_order and attribute_group_code attributes by the POST /V1/products/attribute-sets/groups call. Fix submitted by Eden Duong in pull request 23690. GitHub-23634
  • You can now perform mass actions on items in a grid that uses an EAV collection. Previously, grids created with the now-deprecated Magento\Backend\Block\Widget\Grid (as many third-party extensions are) threw an exception when you tried to perform a mass action. Fix submitted by Thomas Klein in pull request 23452. GitHub-23451

Email

  • The Registration and Contact us pages now correctly handle customer names that contain non-ASCII characters. Previously, if the customer name contained non-ASCII characters, the user did not receive the email. Fix submitted by elvinristi in pull request 24906. GitHub-24902
  • The product page Send Email to Friend email form is now sent from the email address configured as sender in the system configuration General Contact field. Previously, Magento displayed an error because the value in this field was handled as a user-defined value, not a static value. Fix submitted by Eden Duong in pull request 23684. GitHub-23646
  • Validation logic has been added to the email fields on Admin > Stores > Configuration > Sales > Sales Emails. Fix submitted by Eden Duong in pull request 24138. GitHub-24137
  • Validation logic has been added to the Send Payment Failed Email Copy To field of Admin > Stores > Configuration > Sales > Checkout. Fix submitted by Eden Duong in pull request 24313. GitHub-24312

Frameworks

  • Customers no longer have problems logging in to a Magento deployment on which bin/magento customer:hash:upgrade has been run and that also runs PHP 7.2.19 and has the sodium extension installed (libsodium 1.0.13 or greater). GitHub-23517
  • The bin/magento setup:db:status command now returns successfully after you’ve run bin/magento setup:upgrade on a deployment running Maria DB version 10.2. Previously, the bin/magento setup:db:status command returned this message: Declarative Schema is not up to date and indicated that we need to run bin/magento setup:upgrade. GitHub-19597
  • Country lists now provide a translation of Taiwan as Taiwan, Province of China.
  • Magento now sends sales-related email to the correct customer when sales_emails cron has an error.
  • The magento/framework/Mail/Template/TransportBuilder.php class has been refactored to make sure that $this->messageData is updated when $email is an array and isset($this->messageData[$addressType]) is set to false.
  • Magento no longer throws an error when you open an image from the product image gallery from the storefront product detail page. Previously, Magento returned this JavaScript error in the console: TypeError: The expression cannot be converted to return the specified type.
  • Order-related save_after_commit callbacks are now called for guest checkouts as expected. Previously, they were not dispatched.
  • The product counter and page lister on Catalog > Products now works correctly after the Add Store Code to Urls setting has been enabled or disabled.

JavaScript framework

  • Unnecessary define checks have been removed from JavaScript modules that are used by requireJS. Fix submitted by Bartłomiej Szubert in pull request 24833. GitHub-22747
  • Excluding minified JavaScript files from the generated JavaScript bundles using the view.xml file inside a theme now works as expected. Previously, you needed to explicitly provide both the non-minified filename and the minified filename. Only the exact filename as it exists on the filesystem is needed now. The other variant is handled automatically. This reduces the size of the generated JavaScript bundle files in default Magento themes and may also improve the JavaScript bundle file size in custom themes. Fix submitted by Pieter Hoste in pull request 24506. GitHub-4506, GitHub-13558, GitHub-14357

General fixes

  • Basic validation steps have been added to fields on the Store > Configuration > Catalog page. Fix submitted by Eden Duong in pull request 23723. GitHub-23721
  • Magento now displays an error message when validation fails when you click Generate on the Manage Coupon Codes page and the applicable sales rule has the Use Auto Generation setting enabled. Fix submitted by Eden Duong in pull request 23781. GitHub-23778
  • Magento now correctly redirects you to the customer account page when you click the Back button on the Manage Addresses page. Fix submitted by Eden Duong in pull request 24079. GitHub-24058
  • The New Block form no longer displays a Store View field when your deployment is in single-store mode. Fix submitted by Eden Duong in pull request 24397. GitHub-24387
  • Images now change as expected when you swipe over the image when using a touch screen. Fix submitted by Eden Duong in pull request 25061. GitHub-25060
  • Magento now displays an informative error message if validation fails when clicking Generate when managing coupon codes from the Admin. Fix submitted by Eden Duong in pull request 23781. GitHub-23778
  • Access Control Permissions (ACLs) have been improved for the following cart-related tasks: export CSV and Excel file of abandoned cart and abandoned products reports. Previously, administrators with no permission to this information could export these reports. Fix submitted by Eden Duong in pull request 23925. GitHub-23924
  • Validation logic has been added to the Sort order field of the New Rating form (Stores > Rating). Fix submitted by Eden Duong in pull request 23985. GitHub-23984
  • You can now successfully filter products by multiple attributes in the Step 2: Attribute Values section of the Admin Create Product Configuration page. Previously, only one of the selected values were retained when you tried to filter. Fix submitted by Eden Duong in pull request 24000. GitHub-23999
  • Problems with less compilation in Magento’s blank theme when using an alternative less compiler than the one that ships with Magento by default have been resolved. Fix submitted by Pieter Hoste in pull request 24001. GitHub-23619
  • Magento now extracts handles from layout updates before merging layouts. Fix submitted by Sergey Solo in pull request 23918. GitHub-5901
  • The Convert to Plain Text? confirmation message that Magento displays when you click Delete on the Admin Edit Email Template page now follows Magento design guidelines. Fix submitted by Eden Duong in pull request 24083. GitHub-24082
  • The outdated URL for the HTTP Strict Transport Security page (accessed from Admin > Store > Configuration > General > Web) has been updated to app/code/Magento/Backend/etc/adminhtml/system.xml. Fix submitted by Eden Duong in pull request 24165. GitHub-24164
  • Validation logic has been added to the Layered Navigation Price Step field of the Admin > Catalog > Categories page. Fix submitted by Eden Duong in pull request 24170. GitHub-24169
  • Validation logic has been added to the Oauth field of the Admin > Store > Configuration > Service page. Fix submitted by Eden Duong in pull request 24173. GitHub-24172
  • Validation logic has been added to the Connection Timeout in Seconds field of the Admin > Store > Configuration > General > Currency Setup page. Fix submitted by Eden Duong in pull request 24205. GitHub-24204
  • Magento now displays a confirmation message when you choose a mass delete operation on subscribers on the Admin > Marketing > Newsletter Subscribers page. Fix submitted by Eden Duong in pull request 24249. GitHub-24248
  • Validation logic has been added to the sort order field on the Admin > Stores > All Stores > Create Store View or Website page. Fix submitted by Eden Duong in pull request 24294. GitHub-24293
  • XML attributes are now encoded to allow special symbols in tag attributes. Fix submitted by Sergey Solo in pull request 24336.
  • Validation logic has been added to options for dynamically created product attributes before Magento adds these attribute values to the product database. Magento now checks whether the optionArray exists in the database before adding it. Previously, Magento created duplicate options for the same store. Fix submitted by Maksym Novik in pull request 21424. GitHub-16852
  • Calls to catalogProductTierPriceManagementV1GetListGet now handle requests as expected. Previously, calls failed when querying a configurable product. Fix submitted by Ashutosh Srivastva in pull request 24502. GitHub-24410
  • The HTML br tag is now an allowed tag. Fix submitted by Denis Solovyov in pull request 24392. GitHub-24329
  • The Admin notification counter now correctly handles double-digit values. Fix submitted by Alexandre Thurow in pull request 24589. GitHub-23473
  • You can now successfully select an image from the image gallery when you configure a theme (Admin > Content > Configuration). Fix submitted by Rani Priya in pull request 24431. GitHub-24430
  • Modal triggers can now be added after module initialization. Fix submitted by Mateusz Krzeszowiak in pull request 25435. GitHub-9671
  • You can now swipe on different images in the fullscreen product gallery on touch devices or when touch emulation is enabled in Chrome. Fix submitted by Mateusz Krzeszowiak in pull request 25233. GitHub-25231
  • The Admin Address Country drop-down list now takes its values from the Allow Countries setting that is configured for the Website Store View where the order was made. Fix submitted by Oleksii Lisovyi in pull request 24345. GitHub-12560
  • Magento no longer serializes user data multiple times when data is loaded by the loadByUsername method. Fix submitted by Jamie Saunders in pull request 23827. GitHub-23824
  • The Available Countries list (Stores > General) has been updated to include the countries identified in the latest version of the Common Locale Data Repository (version 36). Fix submitted by Bartłomiej Szubert in pull request 24927. GitHub-24710
  • Method chaining now works as expected in extensions and customizations that are based on a product collection entity. Fix submitted by Mahesh Singh in pull request 24973. GitHub-24964
  • The use of ObjectManager in the core code has been replaced with factories and constructor dependency injections wherever possible. Fix submitted by Yurii in pull request 24661. GitHub-24646
  • Magento now displays a bad request error message when the confirmation link sent to the new customer email is not valid. Fix submitted by Alexander Taranovsky in pull request 24331. GitHub-24330
  • Catalog event start and end dates are not changed when you edit the event.
  • Running diff -rq ./build-1/ ./build-2/ on two different builds of the same commit now yields the same results in generated/metadata folders. Previously, these results were not reproducible. Fix submitted by Ihor Sviziev in pull request 23325. GitHub-23324

Image

  • The size of images displayed in RSS feeds is now determined by the view.xml file. Fix submitted by Sunil in pull request 23533. GitHub-23516
  • The content attribute for msapplication-TileImage now resolves to a localised theme path.  Fix submitted by Burlacu Vasilii in pull request 21798. GitHub-5023
  • When you move a category, the list of categories prepared for re-indexing now includes all affected subcategories when Flat Catalog is enabled. Previously, the order of categories on the storefront remained incorrect until the flat category was re-indexed. Fix submitted by Sergey Solo in pull request 23820. GitHub-3993
  • Watermarks cannot be configured for swatch images.

Import/export

  • Magento now creates an advanced price export file as expected when exporting more than 5000 products. Previously, Magento threw an error and did not create the file. Fix submitted by Mahesh Singh in pull request 24831. GitHub-24722
  • The Scheduled Import Settings page no longer displays fields that have been disabled in configuration settings. Fix submitted by Eden Duong in pull request 25102. GitHub-25101
  • Removed redundant quotation marks from the CSV field title of the exported order CSV file. Fix submitted by Alexander Lukyanov in pull request 24969. GitHub-23465
  • The Export page now displays exported files in a grid. Previously, Magento did not list files but instead displayed a message indicating that the CDATA section was too large to display when more than 20,000 records were exported. Fix submitted by Eduard Chitoraga in pull request 24954. GitHub-24311
  • Exported CSV are now sorted based on time when you run bin/magento cron:run. Previously, exported CSV results were displayed randomly, and you could not filter or sort exported items.
  • You can now import empty values (__EMPTY__VALUE__) from a CSV file at the store-view level.
  • Magento now handles URL rewrites correctly when you import data for an existing product.
  • You can now exclude attributes from a CSV file when setting up an export (System > Data Transfer (Export)). Previously, the checkboxes on this page did not work.
  • Magento now correctly processes product prices during export when the All Store Views scope is set. Previously, the logic for updating the price in custom options in non-default websites was missing when the Catalog > Price setting is set to Website.
  • Magento now respects website scope settings when you export product data in a CSV file.
  • Magento now adds newly imported images after previously imported ones. Previously, Magento added these most recently imported images randomly.
  • You can now successfully import customer data that has not been modified when generating the CSV file with the Add/Update Complex Data behavior option.
  • Corrected spacing issue in the Magento_Config file. Fix submitted by Alexander Taranovsky in pull request 24420. GitHub-5246
  • Magento now correctly imports product quantity from a CSV file. Previously, the quantity field for a product could be 0, but the status field would indicate in stock. Fix submitted by kristiancharb in pull request 24053. GitHub-23042
  • Magento now displays an error message as expected when you select Import Tax Rates without selecting a file for import on (Admin > Import & Export Tax Rates). Fix submitted by Eden Duong in pull request 24643. GitHub-24642
  • You can now successfully import an image from an external URL.

Index

  • The POST /V1/products/tier-prices call now considers account indexer mode as expected.
  • Magento no longer throws a fatal error when you create a preference for the category product indexer before running bin/magento setup:di:compile. Fix submitted by Diego Cabrejas in pull request 23300. GitHub-22769
  • During re-indexing, Magento now deletes only products that have been identified as out-of-stock when filtered by $entityIds. Fix submitted by Bruce in pull request 24415. GitHub-24414

Infrastructure

  • File permissions for non-executable files in GitHub have been changed from 755 to 664 where appropriate. Fix submitted by Pieter Hoste in pull request 24005. GitHub-1453
  • An incorrect Bool return type for the setIsActive() method in Salesrule Module RuleInterface.php has been corrected to RuleInterface. Fix submitted by Bartłomiej Szubert in pull request 24814. GitHub-13278
  • Magento no longer adds a form_key field to POST forms that have external action URLs. (External action URLS are URLS that do not belonging to shop’s base URL.) Fix submitted by Mateusz Krzeszowiak in pull request 25336. GitHub-23382
  • The dictionary was removed from the zxcvbn.js library, and the following performance improvements have resulted: 1) The size of the zxcvbn library has been reduced from 395 KB to 11.3 KB on customer registration, customer edit, and customer forgot password pages; 2) The time required for asynchronously loading this library has been reduced by 90%.
  • The scopeData() method now returns a DateTime value that is scoped to the specified store locale. Previously, this method was not fully implemented. Fix submitted by Eden Duong in pull request 23693. GitHub-23359
  • The getAttributeRawValue method now returns a store-specific value even when there is no default value. Previously, no store value was returned when a default value was not present. Fix submitted by semajeg in pull request 23369. GitHub-16382
  • The performance of the ProductMetadata::getVersion method has been improved as a result of adding the caching of the product version. This method is called by many third-party extensions to determine the version of Magento. Fix submitted by David Verholen in pull request 24030. GitHub-24025
  • You can now add products with custom options of all types to the shopping cart. Fix submitted by Alexandr Skrashuk in pull request 25055. GitHub-24726
  • Decimal numbers have been added to the Sample File in Import CSV section. Previously, using the Download Sample File option on the product’s import CSV page created a sample CSV file with a weight of 1, which was of limited use. Fix submitted by Cristian Sanclemente in pull request 25317. GitHub-23920
  • A deprecated method in \Magento\MysqlMq\Model\Driver\Exchange has been replaced. Previously, this method caused an exception. Fix submitted by Tjitse in pull request 25289. GitHub-21904
  • You can now add handlers directly to the di.xml. Previously, you needed to extend the helper class and register the handlers. Fix submitted by Thomas Klein in pull request 24405. GitHub-12371
  • You can now add a handler directly to the di.xml of a product template instead of adding a handler by extending the helper class and registering the handlers. Fix submitted by Tomash Khamlai in pull request 25466. GitHub-25468
  • Magento no longer returns an empty string when calling $this->_escaper->escapeXssInUrl(“0”);, but instead returns the expected 0 value. Fix submitted by Will Palmer in pull request 23988. GitHub-23987

Inventory

  • You can now save an edited product when max_sale_qty is set to the Magento default value. GitHub-23319

Layered navigation

  • Layered navigation is no longer visible when you set display mode to Static Block only on a particular category. Fix submitted by Mahesh Singh in pull request 24497. GitHub-24031

Media storage

  • Magento now retrieves images from the proper cache in multi-store deployments.

Newsletter

  • Magento now displays empty Customer First Name and Customer Last Name fields on the Admin > Marketing > Newsletter Subscribers page. Previously, these fields contained the unexpected string . Fix submitted by Eden Duong in pull request 25058. GitHub-25057
  • Corrected alignment of the Newsletter label and associated checkbox on the Admin customer edit page. Fix submitted by Arvinda Kumar in pull request 25208. GitHub-25207
  • The Subscribe button is now visible on the Subscribe form as expected. Previously, an sr-only element hid this button. Fix submitted by KrielkipNL in pull request 24028. GitHub-24027
  • The Subscribe to Newsletter checkbox now works as expected when Stores > Configuration > Customer > Customer Configuration > Account Sharing is set to Global.
  • Customers are no longer sent unsubscribe to newsletter emails when they register for a new account and the Sign Up for Newsletter setting is set to on. Fix submitted by Eden Duong in pull request 23737. GitHub-23729
  • The newsletter template preview now displays images as expected. Previously, any images included in the template were not correctly displayed, and you need to scroll to view the entire image.

Orders

  • The Order list now displays order information in the currency in which the order was placed, not the current base currency of the store. Fix submitted by Eden Duong in pull request 23817. GitHub-23805
  • You can now open a storefront from Sales > Orders > Customer View. Previously, the Admin froze, and the page never reloaded. Fix submitted by Adarsh Manickam in pull request 24845. GitHub-24779
  • The checkbox on the Admin > Create New Order > Add Products page now works as expected in Internet Explorer 11.x. This checkbox now behaves the same across all supported browsers. Fix submitted by Adarsh Manickam in pull request 24913. GitHub-12855
  • Magento now displays the customer middle name in the customer details on orders and in the new order email sent to customers. Fix submitted by Sergiy Vasiutynskyi in pull request 24746. GitHub-23627
  • Magento now updates the сustomer_email value in the quote and sales_order tables as expected when a customer changes their email address. Fix submitted by Artem Voloznov in pull request 24049. GitHub-24012
  • Customers can now cancel an order that they created using a coupon while logged in as a guest. Previously, when they tried to cancel the order, Magento threw an error. Fix submitted by Pavel Bystritsky in pull request 20577. GitHub-19230
  • Magento now displays a warning message when you click the Apply Coupon Code button without filling in the coupon code when creating an order. Fix submitted by Eden Duong in pull request 24016. GitHub-24015
  • Magento now sends New Order email as expected when the Send Order Email Copy To field contains a comma followed by a blank space. Fix submitted by Eden Duong in pull request 25085. GitHub-25072
  • An incorrect critical log entry (No such entity with customerId = xxx) in the exception.log file has been corrected. Previously, Magento logged this entry, which was a false positive that was created when a logged-in customer did not have an active quote. Fix submitted by Pieter Hoste in pull request 25307. GitHub-24009

Payment methods

  • You can now use Paypal Payflow Pro to complete an order in deployments running Internet Explorer 11.x.
  • Magento now successfully processes orders that are shipped to multiple addresses when Braintree with PayPal is used as the payment method. Previously, Magento successfully completed only one order, and Magento declined to process the other orders.
  • Guests can now successfully pay for an order using PayPal Express Checkout. Previously, Magento did not process the order and displayed this message: To check out, please sign in with your email address.
  • You can now successfully complete an order using Braintree with PayPal when Shipping Flat Rate is activated. Previously, Magento displayed an informative error.
  • Magento no longer displays the PayPal Credit option on the checkout workflow on the storefront when this option is disabled in the Admin.
  • Magento now properly concatenates first and last names in PayPal Express address fields.
  • The Saved Credit Card Feature with Vault feature nows displays accurate card information in the order information page as expected for orders paid for with Payflow Pro.
  • The Qty to Refund field on the credit memo of an order paid for with Authorize.net is now editable.
  • Magento no longer throws a fatal error when you enter an invalid shipping address when placing an order with Braintree with Paypal.
  • Magento no longer displays duplicate Place Order buttons on the Review Order page for orders made with PayPal Express.
  • You can now successfully add new products to the cart when placing a re-order from the Admin when the original order used a coupon and the Braintree payment method.
  • Magento no longer displays the PayPal Express Checkout button on product pages or the shopping cart when the Display on Product Details Page and Display on Shopping Cart (Advanced Settings) settings are disabled.
  • Magento no longer displays the PayPal Credit button when the Checkout with PayPal button is displayed on the shopping cart. Fix submitted by Oleksii Lisovyi in pull request 24121. GitHub-22525,GitHub-22528
  • Validation logic has been added to the Send Payment Failed Email Copy To field of Admin > Store > Configurations > Sales > Checkout. Fix submitted by Eden Duong in pull request 24313. GitHub-24302, GitHub-24304
  • The Stored Payment Methods section of the customer dashboard no longer depends on Braintree being enabled. Removing this dependency permits custom payment methods to also use this section. Fix submitted by prabhatrawat-webkul in pull request 24501. GitHub-23205
  • Magento no longer throws JavaScript errors when a customer tries to pay for an order using PayPal when the shipping address fields are incomplete. Fix submitted by Anton in pull request 24622. GitHub-24618
  • Removed the redundant XML code in the <payflow_advanced> node of the PayPal config.xml configuration file. Previously, this redundancy caused errors. Fix submitted by yupik in pull request 24694. GitHub-23880
  • The Enable this Solution setting is now set back to no for PayPal Express as expected when a customer clicks on Cancel on the “There is already another PayPal solution enabled. Enable this solution instead?” popup during PayPal Express checkout.
  • The Braintree ClientToken is now disabled when the Braintree payment method is disabled for the current store view. Fix submitted by Andrey Legayev in pull request 25223. GitHub-25343

Performance

  • The Cache User Defined Attributes system configuration option was added to Admin > System Config > Advanced > Developer section > Caching Setting. This option supports the caching of user-defined EAV attributes while they are being retrieved. Caching system EAV attributes during retrieval improves the performance of many tasks by decreasing the number of insert and select requests to the database. With this release, all system EAV attributes are cached by default. However, developers can also cache user-defined attributes by setting Cache User Defined Attributes to yes. System EAV attributes that should be cached while being retrieved are defined in di.xml in the attributesForPreload argument of Magento\Eav\Model\Config.
  • Statistics collection for the Reports module is now disabled by default. A new configuration setting (System Configuration > General > Reports > General Options) allows merchants to completely or partially disable Magento Reports. (Statistics collection for the Reports module is disabled by default. Magento recommends disabling Reports functionality for performance reasons when this capability is not required.)
  • The performance of sales order update operations has improved.
  • Redundant non-cached requests to the server on catalog pages have been eliminated by refactoring the customer section invalidation mechanism and improving banner cache logic.
  • PHTML files have been refactored to better support parsing by the bundling mechanism. Our new bundling mechanism now identifies all dependencies on JavaScript.

Reports

  • Sorting has been disabled on the New Account column of the New Accounts report. Fix submitted by Eden Duong in pull request 25034. GitHub-25033
  • A missing newline has been added to the end of var/report report output, which has improved the automatic parsing of log files. Fix submitted by Mathew Beane in pull request 24559. GitHub-24588
  • Magento no longer throws a console error when you click Select All on the Newsletter Problems Report page. Fix submitted by Eden Duong in pull request 24104. GitHub-24102

Reviews

  • The Reset button now works as expected on Admin > Marketing > All Reviews > New Review page. Fix submitted by Shankar Konar in pull request 24318. GitHub-23990
  • Select All on the coupon list of the Manage Coupon Codes page now works as expected.
  • Magento no longer displays the Add New Review button on the Admin > Marketing > All Reviews > New Review page if no product is present. Fix submitted by Eden Duong in pull request 24399. GitHub-24310
  • The product detail page now scrolls as expected when you click on the Review or Add Your Review link. Previously, the page did not scroll, and Magento displayed a JavaScript error. Fix submitted by Gaurav Agarwal in pull request 25051. GitHub-25039

Sales

  • Validation has been added to Minimum Order Amount field on the Stores > Settings > Configuration > Sales page. Fix submitted by kcnariya in pull request 23898. GitHub-23897
  • Invoice email is now sent automatically as expected when the Payment Action setting for a payment method set to Authorize and capture.
  • The order view section of the checkout workflow now shows the correct shipping price for an order to be shipped to multiple addresses.
  • Tax rates and amounts now change as expected when the billing address for an order is changed from the Admin.
  • Magento now sends email to customers when an invoice is created. Previously, even when the relevant configuration setting was enabled, Magento did not automatically send this email. GitHub-13466
  • Coupon codes for free shipping are displayed like other coupon codes. Previously, coupon codes for free shipping were not displayed on the order summary of the checkout workflow.
  • You can no longer add disabled variations of a configurable product to a shopping cart from the Admin.
  • The Quote Lifetime (days) setting, which specifies the number of days that a quoted price remains valid, now works as expected.

Sales Rule

  • You can now change action settings for a scheduled update of a Cart rule. Previously, Magento did not save an action condition if you added it to the cart rule’s scheduled update.
  • Magento no longer displays an error when a customer clicks Subscribe to Order Status on an order page, and now subscribes the customer to the XML feed as expected.
  • The counter values on the Marketing > Cart Price Rules grid now match the number of rules listed in the grid as expected.
  • Magento now applies coupon codes correctly when an order subtotal dips below the threshold specified in the applicable cart price rule. Previously, Magento applied the coupon correctly momentarily, then removed the coupon code during the tax and shipping sections of the checkout workflow.
  • The pagination of multipage search results now works are expected. Previously, if you navigated away from the first page of search results, Magento displayed this error: We can't find products matching the selection.
  • MySQL performance for search queries has been optimized, and merchants running sites with many search queries will notice improvements in query speed.
  • Quick search now successfully handles search phrases that contain fewer characters than the configured value. Previously, quick search ignored the search phrase and returned all products when search string length was lower than configured.
  • Magento no longer requires a full search reindex in order for a new product attribute to be searchable on the storefront.
  • The storefront now displays a newly added product in its assigned category after you run bin/magento cron:run && bin/magento cron:run.
  • Searching on categories from the New Product page now works as expected when you enter a search string that does not match an existing category. Previously, Magento displayed incorrect results instead of indicating zero search results. Fix submitted by Eden Duong in pull request 23698. GitHub-23697
  • Elasticsearch now successfully finds products on the storefront using the values of dropdown attributes.
  • Elasticsearch now correctly handles search queries that include words that contain diacritics as well as spellings of those words that are entered without the correct diacritics.
  • You can now search the Sales > Orders list by email address.
  • Running bin/magento indexer:reindex catalogsearch_fulltext no longer results in the deletion of an index-related database table.
  • Elasticsearch results now display all products as expected when the Configuration > Catalog > Storefront > Allow All Products Per Page is set to yes. Previously, Magento displayed this error: We can't find products matching the selection.
  • Category pages now work as expected when Price Navigation Step Calculation is set to Automatic (equalize product counts).
  • Magento no longer throws an exception when you initiate an advanced search using product name and SKU.
  • Elasticsearch now successfully handles search queries that contain a question mark followed by a semicolon (?;).
  • Validation logic has been added to the Number of results and Number of Uses fields of Admin > Marketing > Search Terms. Fix submitted by Eden Duong in pull request 24101. GitHub-24100
  • Magento no longer logs a warning when a catalog search query contains multiple custom option values. Fix submitted by Eden Duong in pull request 23687. GitHub-23557
  • The undefined variable in the getStoreValuesForForm method has been defined. Fix submitted by Ronak Parmar in pull request 23059. GitHub-23055
  • Elasticsearch 6.x now works only with Elasticsearch 6.x clients on the storefront. Fix submitted by Pavel Bystritsky in pull request 24974. GitHub-24781
  • Elasticsearch clients can now use SSL without enabling HTTP Auth. Fix submitted by Ihor Sviziev in pull request 24636. GitHub-22297
  • Elasticsearch no longer creates a double index when Magento throws an exception when it saves an index as a cron job fails. Fix submitted by Vladislav Slesarenko in pull request 24552. GitHub-24550

Shipping

  • The code for offline shipping methods has been optimized to remove redundant carrier codes. Fix submitted by Alexander Taranovsky in pull request 23144. GitHub-23143
  • VAT ID is now included on the Shipping page of the checkout workflow as expected. Fix submitted by Eden Duong in pull request 24403. GitHub-24402
  • The Back button on the Check Out with Multiple Addresses page now returns you to the correct page. Previously, clicking the Back button from this page returned a 404 error. Fix submitted by Max Souza in pull request 24827. GitHub-24701
  • UPS Mail Innovations tracking now works as expected. Previously, Magento displayed this error: Tracking information is currently not available. Please contact us for more information or email us at support@example.com.
  • Cart Price rules now work as expected for orders that are shipped to multiple addresses.
  • Shipping notification emails sent to customers now contain a link to order tracking.
  • Shipping calculations now load correctly from the shopping cart.
  • You can now successfully re-order a configurable product when shipping the order to multiple addresses. Previously, Magento duplicated this product during re-order.
  • Magento now displays the correct cost for shipping in the shopping cart when you return to the cart from the checkout page for an order being shipped to multiple addresses.
  • You can now create a shipping label as expected. Previously, Magento displayed this error: Cannot do shipment for the order","Invalid security or form key. Please refresh the page.
  • Magento now loads shipping methods as expected in the checkout workflow when running in Internet Explorer 11.x. Previously, when you tried to load shipping methods in the checkout workflow, Magento did not load these methods and displayed this error: SCRIPT438: Object doesn't support property or method entries. GitHub-22119
  • Magento no longer displays Shipping Method: undefined - Fixed on the final page of the checkout workflow when a shipping method with an undefined or empty method name is selected. Fix submitted by wbeltranc in pull request 24265. GitHub-19853
  • New order pages for orders that contain only virtual products no longer display a Shipping and Handling total. Fix submitted by Eden Duong in pull request 24213. GitHub-24212
  • Validation logic has been added to the Sort Order field of Admin > Store > Configuration > Sales > Shipping methods. Fix submitted by Eden Duong in pull request 24296. GitHub-24295
  • The POST /V1/shipment/track call now throws an error. GitHub-7760

Sitemap

  • Magento no longer displays multiple success notifications when you click on the Save button on Marketing > Sitemap. Fix submitted by Bartłomiej Szubert in pull request 24482. GitHub-21610
  • The path that you specify when creating a sitemap is no longer transferred to the beginning of the URL that is included in any sitemap-related error message. Fix submitted by Hailong in pull request 24675. GitHub-24623
  • We’ve corrected several problems with image URLs in sitemap generation. Previously, sitemap image URLs had the wrong cache path, and image size was incorrect. Fix submitted by Krzysztof Daniel in pull request 24605. GitHub-4511, GitHub-4511, GitHub-24484
  • We’ve corrected several problems with image URLs in sitemap generation. Previously, sitemap image URLs had the wrong cache path, and image size was incorrect. Fix submitted by Krzysztof Daniel in pull request 24605. GitHub-4511, GitHub-4511, GitHub-24484

Store

  • Redirect URLs are no longer truncated after three slashes.
  • Magento installation no longer fails with pre-defined stores in app/etc/config.php due to MySQL locks.
  • CMS pages no longer redirect to the home page of the original store when you change store view in a multi-store deployment.

Swagger

  • Swagger schemas no longer fail when the GET endpoint has parameters that contain extension attributes. Fix submitted by Oleksandr Kravchuk in pull request 24627 and 24117. GitHub-24626, GitHub-24116

Swatches

  • Magento now displays selected swatch options for a configurable product when you edit that product from the shopping cart. Fix submitted by Rani Priya in pull request 24308. GitHub-24306
  • You can now add options values to text swatch and visual swatch attributes using POST V1/products/attributes/<attribute_code>/options.
  • Magento now loads product images as expected when you switch between product variations (for example, size or color).
  • Magento now displays the correct “as low as” price on the storefront for a configurable product with multiple attributes that include a color attribute. Previously, Magento did not display the lowest price.

Tax

  • Validation for maximum length has been added to Zip/Post Code field of the New Tax Rate page. Fix submitted by Eden Duong in pull request 23968. GitHub-23967
  • Corrected inconsistent style on the messages displayed when you click the Validate VAT Number button on Stores > Configuration > General. Fix submitted by Eden Duong in pull request 23739. GitHub-23738
  • Magento now correctly calculates VAT for products when you add them to the cart. Fix submitted by Bruno Roeder in pull request 24737. GitHub-23116
  • You can now successfully save a fixed product tax (FPT) to a product that is assigned to a specific website.
  • Inconsistent sorting of fixed product tax (FPT and tax totals has been resolved on the Admin order, create invoice, invoice, create credit memo, and credit memo pages. Fix submitted by Mahesh Singh in pull request 24663. GitHub-24225

Testing

  • Integration tests have been added for ProductAlert Stock notifications. Fix submitted by Yurii in pull request 24291. GitHub-23279

Translation and locales

  • Serbian Latin language support has been added to this release, and merchants can now distinguish between Latin and Cyrillic Serbian locales. Locales are now identified as Serbian (Cyrillic, Serbia) and Serbian (Latin, Serbia). Fix submitted by Bartłomiej Szubert in pull request 22293. GitHub-12256, GitHub-13263
  • The Arabic Date Selector now shows the date in the correct format. Previously, when the site was set to Arabic (Saudi Arabia), the storefront date selector always displayed a date of GGGG.
  • The country names on the checkout, shipping, and billing address forms are now translatable. Fix submitted by Bartłomiej Szubert in pull request 24179. GitHub-22956

UI

  • Media gallery thumbnails are no longer stretched when images have a horizontal ratio. Previously, these images were pixelated on the product page. Fix submitted by Nick de Kleijn in pull request 23884. GitHub-23877
  • The tax amount in sales order emails is now displayed before the row that displays the order’s grand total. Fix submitted by Nazar Klovanych in pull request 23406. GitHub-21768
  • The Billing ZIP Code field on the Orders and Returns page now works as expected. Previously, it was not consistently visible. Fix submitted by Eden Duong in pull request 23747. GitHub-23746
  • A missing header label has been added to the Admin > System > Integrations table. Fix submitted by Eden Duong in pull request 24097. GitHub-24096
  • The New Key field is now marked as a required field with an asterisk when changing an encryption key on the Admin > System > Manage Encryption Key page. Fix submitted by Eden Duong in pull request 24099. GitHub-24098
  • Corrected misspelling of “tier” (as in “tier price”) throughout the code base. Fix submitted by Sunil in pull request 24160. GitHub-23567
  • Standardized the confirmation popup invoked from the Admin Add New Tax Rules page. Fix submitted by Eduard Chitoraga in pull request 24538. GitHub-24537
  • The Suggested Terms drop-down text in Admin > Marketing > SEO & Search > Search Terms are now in camel case. Fix submitted by Eden Duong in pull request 24741. GitHub-24739
  • Email previews are now fully responsive. Fix submitted by Brent Robert in pull request 24881. GitHub-23754
  • You can now confirm changes to the structure of the category tree by either clicking the confirmation dialog OK button or using the Enter key on your keyboard. Previously, if you used the Enter key to confirm your changes, the UI reflected your change, but your changes were lost when you refreshed the page. Fix submitted by MaxRomanov4669 in pull request 24817. GitHub-24452
  • Client validation has been added to shipment tracking numbers. Fix submitted by Eduard Chitoraga in pull request 24818. GitHub-24745
  • Magento now displays checkout steps in the custom order that is set in uiComponents SortOrder. Fix submitted by Anuj Gupta in pull request 25015. GitHub-24652
  • Removed a redundant asterisk on the Configure Product page. Fix submitted by Adarsh Manickam in pull request 25149. GitHub-25135
  • Removed the box shadow that appeared when you clicked on a disabled swatch for a product on the storefront. Fix submitted by Adarsh Manickam in pull request 25145. GitHub-25144
  • Magento now displays a pointer icon for the cursor when the cursor hovers over the Collapse All/Expand All button on Catalog > Category > Content Select from Gallery option. Fix submitted by Eden Duong in pull request 25109. GitHub-25108
  • The Get Video Information button on the Product > Images and Videos > Add Video page now responds as expected. Fix submitted by Eduard Chitoraga in pull request 25090. GitHub-25088
  • The storefront now reflects height settings for conditions that are added to Terms and Conditions (Store > Terms and Conditions > Add New Condition). Previously, you could set a value for height when creating a condition, but the storefront did not apply this setting. Fix submitted by Rahul Mahto in pull request 25168. GitHub-25167
  • The Edit Attribute Set Name label was corrected to Attribute Set Information on Admin > Store > Attribute Set > New Attribute Set. Fix submitted by Eden Duong in pull request 24148. GitHub-24147
  • Corrected issue with highlighting on the storefront sales order page. Fix submitted by Rani Priya in pull request 24396. GitHub-24395
  • Corrected multiple misspellings throughout the Admin and corrected a comment in the Admin that was not translatable. Fix submitted by Bruno Roeder in pull request 24832. GitHub-22169, GitHub-24721
  • You can now use @submenu-desktop__padding to override the padding in the .lib-main-navigation-desktop mixin by using @submenu-desktop__padding. Fix submitted by Mahesh Singh in pull request 25176. GitHub-23170
  • The performance of the accordion widget has been improved. Previously, when you clicked to open a closed element, the currently open element closed instantaneously without a transition. Fix submitted by Gabriel da Gama in pull request 24994. GitHub-24807
  • Corrected misalignment of page elements on the minicart checkout page when the cart contains a configurable product. Fix submitted by Arvinda Kumar in pull request 25368. GitHub-25366
  • The tooltip associated with the Product Additional Options field for the order on the customer dashboard is now fully visible. Fix submitted by Torben Höhn in pull request 25393. GitHub-25392
  • The Credit Memo page now has an Update Totals button as expected.
  • You can now filter orders by date in stores running the en_GB locale.
  • Checkboxes that occur within widgets are now fully clickable in the Admin.
  • Redundant attributes that were present in the CMS widget body have been removed.
  • UI components configuration has been corrected to eliminate potential for overlapping text labels.
  • The weight attribute label is now displayed for attributes in attribute sets.
  • Corrected issues with the Admin > Marketing > User Contents > Reviews Created date display. Fix submitted by Syed Imtiyaz Hasan in pull request 23699. GitHub-23575
  • The current tab is now marked as active as expected in the customer account sidebar. Fix submitted by Eden Duong in pull request 24078. GitHub-24068
  • bin/magento app:config:import and bin/magento setup:upgrade no longer fail due to a TEXT field limitation from flag_data in the flag table. The flag_data field has been increased to MEDIUMTEXT (accepting 16MB). Fix submitted by Andreas Schrammel in pull request 13580. GitHub-11657
  • The Unselect all text string is no longer appended to the HTML element of the Compare icon on the product details page when you click this icon. Fix submitted by Shankar Konar in pull request 23774. GitHub-23705
  • Clicking on the Visibility header on Admin > Marketing > All Reviews or Pending Review now disables the sort ability as expected. Fix submitted by Eden Duong in pull request 24106. GitHub-24105
  • The Action column is now the last column of the Admin > Content > Configuration grid. Fix submitted by Eden Duong in pull request 24140. GitHub-24139
  • Validation logic has been added to the required fields on Admin > Content > Widget > Add Widget. Fix submitted by Eden Duong in pull requests 24155 and 24163. GitHub-24154
  • You can now perform bulk delete operations on widgets in Admin > Content > Widgets. Fix submitted by Burlacu Vasilii in pull request 20765. GitHub-20764
  • The Admin navigation sidebar menu now has toggle functionality for opening and closing menu items. Fix submitted by Sudheer Kumar Gajjala in pull request 24211. GitHub-24210
  • The TinyMCE editor now saves content with inline style tags as expected. Fix submitted by gwharton in pull request 24114. GitHub-22867
  • Merchants can now use virtual configurable variants to assign a weight to a virtual product. Fix submitted by Arushi Bansal in pull request 24013. GitHub-23977

URL rewrites

  • We have reverted the following fix, which was included in 2.3.3, because it changed expected system behavior: “Magento no longer removes the query string from URLs when the query string is preceded by a slash. Previously, when a customer opened a URL that contained a trailing slash and query string (for example, http://magento.host.com/sample-url-key/?cupcakes), Magento redirected the user to a URL that omitted the slash (http://magento.host.com/sample-url-key)”.
  • Magento now populates the url_rewrite table with the new product URL rewrite when you create a new product when single-store mode is enabled. Previously, Magento did not generate a user-friendly URL upon the creation of products when single-store mode was enabled.
  • URL rewrites are no longer lost if an exception is thrown or a deadlock occurs during URL regeneration. Previously, when exceptions or deadlocks occurred, URLs were not regenerated, and Magento displayed 404 pages. Fix submitted by Stanislav Ilnytskyi in pull request 23430. GitHub-23429
  • CMS pages now redirect correctly after you change the store view.
  • A category schedule update no longer unchecks the Use default value setting on the URL key for the store view.
  • The performance of MySQL queries on url_rewrite operations has been improved. Previously, Magento ran a full scan of the table, and the query was very slow.
  • CatalogURLRewrite no longer generates an extra product URL during product creation.
  • Magento now correctly stores the attribute url_path for non-default stores. Fix submitted by Dmytro Androshchuk in pull request 25143. GitHub-25120
  • The following reserved keywords cannot be used as URL keys: admin, soap, rest, graphql, and any custom Admin path.

Web API framework

  • When you use a call such as POST V1/carts/mine/items to add a product to a cart but do not include the quote_id parameter, Magento now returns a 400 Bad Request error as expected. Previously, Magento generated a 404 Not Found error.
  • Added the Stores > Settings > Configuration > General > Currency Setup > Currency Converter API > API Key field to enable currency rate retrievals from http://free.currencyconverterapi.com. Fix submitted by Eden Duong in pull request 24008. GitHub-24007
  • You can now set expiration times for REST API Auth tokens in minutes and seconds. Previously, expiration times were defined in hours only. Fix submitted by Ivan Koliadynskyy in pull request 24769. GitHub-24716
  • The GET V1/attributeMetadata/customerAddress/attribute/prefix and GET V1/attributeMetadata/customerAddress/attribute/suffix calls now return options as expected. Fix submitted by Eden Duong in pull request 24519. GitHub-24518

Wishlist

  • Wishlists now display values for product custom file types. Fix submitted by Rani Priya in pull request 24320. GitHub-24319
  • Verification logic has been added to the wishlist so that it reflects accurate stock status of listed products. Fix submitted by Rus0 in pull request 24300. GitHub-21519
  • Magento no longer displays a JavaScript error when you try to remove an item from a wishlist. Previously, Magento removed the Item from the wishlist but displayed a JavaScript error in the console.
  • Wishlist SKU counts now reflect the actual products listed. Previously, the SKU count was incorrect after a product was disabled.
  • Products that are deleted from a wishlist from the Admin are now deleted from the storefront wishlist, too.
  • The Admin wishlist display now lists the correct configurable products for all wishlists no matter which stores the wishlists were assigned to. Previously, wishlists viewed from the Admin displayed only products that belonged to the default website.

WYSIWYG

  • The Admin WYSIWYG editor no longer hangs when an image upload dialog opens. Previously, Magento displayed the spinner cursor until you refreshed the page. Fix submitted by Pavel Bystritsky in pull request 24333. GitHub-23966
  • You can now open the Media Gallery without error. Previously, when you tried to open the Media gallery, Magento displayed the spinner icon on Media Gallery popup.
  • You can now upload a video from the WYSIWYG editor.
  • The WYSIWYG editor now saves quotation marks correctly. Previously, quotation marks were converted to &quot;.

Known issues

  • Issue: This release introduces an enhancement to the invalidation logic for customer data sections that is not compatible with pre-2.3.4 deployments. You can no longer invalidate custom customer sections in etc/frontend/sections.xml files by declaring an action node without specifying any related sections. See Magento 2.3 backward incompatible changes for a discussion of this change.

  • Issue: Magento throws an error when a customer places an order with PayPal Express Checkout and the order’s shipping address specifies a country region that has been manually entered into the text field rather than selected from the drop-down menu on the Shipping page. Workaround: Apply the PayPal Express Checkout issue with region patch for Magento 2.3.4 (Git-based or Composer-based). A fix for this issue will be included in Magento 2.3.5, which is scheduled for release in April 2020.

Community contributions

We are grateful to the wider Magento 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 Magento Community Engineering team Magento Contributors maintains a list of top contributing individuals and partners by month, quarter, and year. From that Contributors page, you can follow links to their merged PRs on GitHub.

Partner contributions

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

Partner Pull Requests Related GitHub Issues  
Atwix magento/magento2#23868, magento/magento2#23859, magento/graphql-ce#412, magento/data-migration-tool#712, magento/magento2#23144, magento/graphql-ce#489, magento/magento2#23848, magento/magento2#21798, magento/magento2#20765, magento/magento2#24187, magento/magento2#24285, magento/magento2#24434, magento/magento2#24437, magento/magento2#24447, magento/graphql-ce#863, magento/graphql-ce#867, magento/graphql-ce#869, magento/graphql-ce#898, magento/magento2#24489, magento/magento2#24420, magento/magento2#24331, magento/graphql-ce#884, magento/magento2#24516, magento/magento2#24538, magento/magento2#24340, magento/graphql-ce#901, magento/magento-functional-tests-migration#689, magento/graphql-ce#942, magento/graphql-ce#900, magento/graphql-ce#866, magento/graphql-ce#845, magento/graphql-ce#959, magento/magento2#24645, magento/magento2#24754, magento/graphql-ce#968, magento/graphql-ce#941, magento/magento2#24829, magento/graphql-ce#997, magento/graphql-ce#995, magento/graphql-ce#973, magento/magento2#24818, magento/magento2#24746, magento/magento2#25094, magento/graphql-ce#1007, magento/graphql-ce#897, magento/magento2#24954, magento/magento2#24197, magento/magento2#25090, magento/graphql-ce#1012, magento/graphql-ce#996, magento/graphql-ce#962, magento/magento2#25251, magento/magento2#25248, magento/graphql-ce#1028, magento/graphql-ce#943, magento/graphql-ce#899, magento/magento-functional-tests-migration#721, magento/magento-functional-tests-migration#716, magento/magento-functional-tests-migration#715, magento/magento-functional-tests-migration#740, magento/magento-functional-tests-migration#731, magento/magento-functional-tests-migration#702, magento/magento2#25382 magento/magento2#23143, magento/graphql-ce#271, magento/magento2#23847, magento/magento2#5023, magento/magento2#20764, magento/magento2#10040, magento/magento2#24186, magento/magento2#24436, magento/graphql-ce#814, magento/graphql-ce#810, magento/magento2#5246, magento/magento2#24330, magento/graphql-ce#864, magento/magento2#24537, magento/graphql-ce#891, magento/graphql-ce#812, magento/graphql-ce#813, magento/graphql-ce#912, magento/graphql-ce#975, magento/graphql-ce#972, magento/magento2#24745, magento/magento2#23627, magento/magento2#24311, magento/magento2#25088, magento/graphql-ce#977, magento/graphql-ce#1009, magento/graphql-ce#890  
Zilker Technology magento/magento2#24559, magento/magento2#24661, magento/magento2#24674, magento/magento2#24761, magento/magento2#24804, magento/magento2#24773, magento/magento2#24845, magento/magento2#24835, magento/magento2#24913, magento/magento2#24800, magento/magento2#25149, magento/magento2#25145, magento/magento2#24714, magento/magento2#25206, magento/magento2#24918, magento/magento2#25283, magento/magento2#25281, magento/magento2#25264 magento/magento2#24558, magento/magento2#24646, magento/magento2#24740, magento/magento2#24803, magento/magento2#24708, magento/magento2#24779, magento/magento2#12855, magento/magento2#24785, magento/magento2#25135, magento/magento2#25144, magento/magento2#25137  
TechDivision magento/inventory#2571, magento/inventory#2575, magento/inventory#2576, magento/inventory#2603, magento/inventory#2572, magento/inventory#2578    
Something Digital magento/graphql-ce#664, magento/graphql-ce#797, magento/graphql-ce#392, magento/graphql-ce#842, magento/graphql-ce#843, magento/graphql-ce#855, magento/graphql-ce#844, magento/graphql-ce#915, magento/graphql-ce#916, magento/magento2#24476, magento/graphql-ce#953, magento/graphql-ce#952, magento/graphql-ce#853, magento/graphql-ce#950, magento/graphql-ce#396 magento/graphql-ce#773, magento/graphql-ce#815, magento/graphql-ce#827, magento/graphql-ce#854, magento/graphql-ce#777, magento/graphql-ce#774, magento/graphql-ce#723, magento/graphql-ce#881, magento/graphql-ce#926, magento/graphql-ce#143  
ISM eCompany magento/graphql-ce#800, magento/graphql-ce#801, magento/magento2#23762, magento/magento2#24117, magento/magento2#24627, magento/graphql-ce#949, magento/magento2#24291, magento/graphql-ce#967, magento/graphql-ce#919, magento/inventory#2643, magento/graphql-ce#971, magento/graphql-ce#957 magento/graphql-ce#167, magento/magento2#24116, magento/magento2#24626, magento/graphql-ce#948, magento/magento2#23279  
Krish TechnoLabs magento/magento2#23882, magento/magento2#24341, magento/magento2#22478, magento/magento2#24478, magento/magento2#24369, magento/magento2#24358, magento/magento2#24549, magento/magento2#24577, magento/magento2#24089, magento/magento2#24728, magento/magento2#24753, magento/magento2#24790, magento/magento2#24988 magento/magento2#11292  
<img alt=”Space 48”src=”https://avatars3.githubusercontent.com/t/2617774?s=400&v=4”> magento/magento2#24129, magento/magento2#24145, magento/magento2#24146, magento/magento2#24177, magento/magento2#24178, magento/magento2#24176, magento/magento2#24280, magento/magento2#24278, magento/magento2#24326, magento/magento2#24327, magento/magento2#24328, magento/magento2#24276, magento/magento2#24279, magento/magento2#24614, magento/magento2#24613, magento/magento2#24277, magento/magento2#24679, magento/magento2#24680    
Interactiv4 magento/magento2#24556, magento/magento2#24892, magento/magento2#25317 magento/magento2#17634, magento/magento2#23920  
MageSpecialist magento/security-package#2    
creativestyle magento/magento2#24605, magento/magento2#25233, magento/magento2#25336, magento/magento2#25443, magento/magento2#25435 magento/magento2#4511, magento/magento2#5321, magento/magento2#24484, magento/magento2#25231, magento/magento2#23382, magento/magento2#25429, magento/magento2#9671  
Trezo magento/magento2#24827, magento/magento2#24832, magento/magento2#24737 magento/magento2#24701, magento/magento2#22169, magento/magento2#24721, magento/magento2#23116  
Webjump magento/inventory#2529, magento/magento2#24380, magento/magento2#24597, magento/magento2#25318 magento/magento2#24366, magento/magento2#23460  
Wolf Sellers magento/magento2#24265, magento/graphql-ce#872, magento/graphql-ce#851, magento/magento2#24300 magento/magento2#19853, magento/graphql-ce#824, magento/graphql-ce#816, magento/magento2#21519  
i95Dev magento/magento2#24013, magento/magento2#24211, magento/magento2#24359, magento/magento2#24077 magento/magento2#23977, magento/magento2#24210, magento/magento2#24152, magento/magento2#23890  
Basecom magento/magento2#24270, magento/magento2#25393 magento/magento2#25392  
Elogic magento/magento2#24049, magento/magento2#24392, magento/magento2#24720 magento/magento2#24012, magento/magento2#24349, magento/magento2#24718  
AYKO magento/magento2#20431, magento/magento2#24415 magento/magento2#20377, magento/magento2#24414  
H&O magento/magento2#23884, magento/magento2#24044, magento/magento2#23819, magento/magento2#24975 magento/magento2#23877, magento/magento2#24043  
Ranosys Technologies magento/magento2#23699, magento/magento2#23253, magento/magento2#24254 magento/magento2#23575, magento/magento2#21450  
Vaimo magento/graphql-ce#955, magento/magento2#24906 magento/magento2#24902  
Youwe magento/magento2#23021 magento/magento2#22928  
Strix magento/magento2#23894, magento/magento2#23200    
Balance Internet magento/magento2#24771 magento/magento2#15959  
Convert magento/magento2#24866    
PHPro      

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
Jacob Brown 23428  
Eden Duong 23723 23721
Mr Khoa 23772  
Eden Duong 23817 23805
Alexander Taranovsky 23868  
Denis Kopylov 23871 23863
Ravi Chandra 23882  
Eden Duong 23896 23895
Eden Duong 23939  
Hailong 21831  
Nick de Kleijn 23884 23877
Eden Duong 23968 23967
Will Palmer 23988 23987
Pieter Hoste 24005 1453
Eden Duong 24039 24038
Eden Duong 24041 24040
Alexander Shkurko 23792  
Vitaliy 23859  
kcnariya 23898 23897
Rani Priya 23902 23886
gwharton 23913 23911
Eden Duong 23943 23940
kcnariya 23983 23982
Alexander Menk 18624  
Nadim Qureshi 20431 20377
Stijn Bernards 23725  
Eden Duong 23801 23800
Eden Duong 23926  
Aapo Kiiso 23283  
Nazar Klovanych 23406 21768
Eden Duong 23781 23778
Arushi Bansal 24013 23977
Eden Duong 24079 24058
Syed Imtiyaz Hasan 23699 23575
Eden Duong 23747 23746
Eden Duong 23925 23924
Eden Duong 23985 23984
KrielkipNL 24028 24027
Thomas Klein 23576  
Eden Duong 23839 18685
Eden Duong 23954 23953
Anshu Mishra 24081  
Alexander Taranovsky 23144 23143
Sunil 23533 23516
Eden Duong 23684 23646
Eden Duong 23739 23738
Dmitry Shevtsov 24036  
Dmitry Shevtsov 24076  
gwharton 24088 23936
Cristian Pini 24086  
Eden Duong 24097 24096
Eden Duong 24099 24098
Eden Duong 24101 24100
kcnariya 23856 23852
Denis Kopylov 23862  
Eden Duong 24000 23999
Pascal Brouwers 24044 24043
Raul E Watson 24129  
Eden Duong 24138 24137
Eden Duong 23687 23557
Eden Duong 23698 23697
Eden Duong 24078 24068
Eden Duong 24119 24118
Andreas Schrammel 13580 11657
Stanislav Ilnytskyi 23430 23429
Sunil 23716 23706
Oleksandr Kravchuk 23762  
Eden Duong 24008 24007
maslii 24142  
Raul E Watson 24145  
Raul E Watson 24146  
Teun Lassche 20877  
Eden Duong 23690 23634
Shankar Konar 23774 23705
Artem Voloznov 24049 24012
Eden Duong 24106 24105
Eden Duong 24140 24139
Jose Luis Narváez 21064  
Eden Duong 23737 23729
Rick Kuilman 23867  
Lukasz Bajsarowicz 23894  
Pieter Hoste 24001 23619
Renon Stewart 24054 22338
gwharton 24114 22867
Ronak Parmar 23059 23055
Bartłomiej Szubert 24109  
Malyovanets Nickolas 24111  
Oleksandr Kravchuk 24117 24116
Alexander Taranovsky 23848 23847
Eden Duong 23693 23359
Sergey Solo 23918 5901
Eden Duong 24083 24082
Oleksii Lisovyi 24121 22525, 22528
Eden Duong 24155 24154
Ihor Sviziev 24150  
Eden Duong 24165 24164
Eden Duong 24167  
Eden Duong 24171  
Eden Duong 24170 24169
Eden Duong 24173 24172
Raul E Watson 24177  
Raul E Watson 24178  
Bartłomiej Szubert 24179 22956
Sunil 24158  
Burlacu Vasilii 21798 5023
Geeta Modi 23253  
Rafael Kassner 23372  
Sergey Solo 23820 3993
websnap 24072  
p-bystritsky 20577 19230
Stanislav Idolov 23621  
Eden Duong 24016 24015
Eden Duong 24163 24162
Eden Duong 24174  
Raul E Watson 24176  
Eden Duong 24182  
Andrii Lugovyi 24195  
Eden Duong 24205 24204
Dmitry Shevtsov 24226  
Diego Cabrejas 23300 22769
Nicolas Medina 24244  
Raul E Watson 24280  
Vincent Marmiesse 22003  
Ihor Sviziev 23325 23324
Eden Duong 24017  
Eden Duong 24104 24102
Luke Rodgers 18678  
semajeg 23369 16382
Eden Duong 24242 24241
Eden Duong 24249 24248
KrielkipNL 24252 24251
Tomash Khamlai 24253  
wbeltranc 24265 19853
Raul E Watson 24278  
Raul E Watson 24326  
Raul E Watson 24328  
Raul E Watson 24327  
Ravi Chandra 24341  
Burlacu Vasilii 20765 20764
Hailong 22810  
Sankalp Shekhar 23085  
Thomas Klein 23818  
Alexander Taranovsky 24187 10040, 24186
Scott Buchanan 24193  
Eden Duong 24213 24212
Rani Priya 24237 24236
Eden Duong 24294 24293
Rani Priya 24240 24239
Sudheer Kumar Gajjala 24211 24210
Eden Duong 24272  
Raul E Watson 24276  
Eden Duong 24296 24295
kickDominic 23764  
Eden Duong 24283  
Alexander Taranovsky 24285  
Eden Duong 24313 24302, 24304, 24307, 24312
Alexander Taranovsky 24331 24330
Ravi Chandra 24369  
Ravi Chandra 22478 11292
Shankar Konar 23600 19921
Eden Duong 24148 24147
Geeta Modi 24254 21450
Eden Duong 24286  
ochnygosch 24367 24362
Rani Priya 24396 24395
Tjitse 24406  
Alexander Taranovsky 24420 5246
latenight 22123 22490
Hailong 22182 22183
Tan Sezer 23021 22928
kristiancharb 24053 23042
Bartłomiej Szubert 24255 7200
Jason Sylvester 24324 8037, 24323
Eden Duong 24403 24402
Eden Duong 24425 24419
Navarr Barnier 22996  
Jeroen Van Leusden 23819  
Sankalp Shekhar 24093  
Eden Duong 24282  
Sergey Solo 24336 2228
Ravi Chandra 24358  
Eden Duong 24397 24387
Eduard Chitoraga 24434  
Eduard Chitoraga 24437 24436
Alexander Taranovsky 24447  
Sunil 24160 23567
Rani Priya 24308 24306
Shankar Konar 24318 23990
Nagamaiah K 24359 24152
Eden Duong 24399 24310
Eden Duong 24449 24440
Shankar Konar 24451 24441
Alexander Taranovsky 24489 5246
Maksym Novik 21424 16852
Arushi Bansal 24077 23890
Eden Duong 24274  
Gustavo Vicente Dauer 24380 24366
Oskar Olaussen 24457  
iGerchak 24467  
Leland Clemmons 24476  
Ravi Chandra 24478  
Aapo Kiiso 24461  
Pieter Hoste 24477  
Bartłomiej Szubert 24482 21610
prabhatrawat-webkul 24501 23205
Ashutosh Srivastva 24502 24410
Rani Priya 24510 24509
Eden Duong 24514  
Ihor Sviziev 22886 22880
Rani Priya 24320 24319
Denis Solovyov 24392 24349
Sunil 24411 24409
Mahesh Singh 24497 24031
Eduard Chitoraga 24516  
Eduard Chitoraga 24538 24537
Eden Duong 24499 21499, 24491
Eden Duong 24519 24518
Raul E Watson 24279  
William Johnston 24534  
Ravi Chandra 24549  
Mathew Beane 24559 24558
Pieter Hoste 24506 4506, 13558, 14357
Alexander Taranovsky 24340  
p-bystritsky 24333 23966
Eden Duong 24183  
Raul E Watson 24613  
Raul E Watson 24614  
Alexandre Thurow 24589 23473
Ravi Chandra 24577  
Raul E Watson 24277  
Eden Duong 24643 24642
Oleksandr Kravchuk 24627 24626
Anton 24622 24618
Krzysztof Daniel 24605 4511, 5321, 24484
Rani Priya 24580 24579
Hailong 24530  
Rus0 24300 21519
Torben Höhn 24270  
Ravi Chandra 24089  
Raul E Watson 24679  
Hailong 24675 24623
Patrick Schnell 24638  
Vinicius Rafael Dziuba 24602 24511
Max Souza 24595 3594
Bruno Roeder 24590 23846
Rani Priya 24431 24430
Yurii 24291 23279
Adarsh Manickam 24661 24646
Malyovanets Nickolas 24655  
Bartłomiej Szubert 24665  
Rani Priya 24634 24633
Vinai Kopp 24153  
David Verholen 24030 24025
vahir2016 23767  
Pieter Hoste 24703 13126, 14112
Yupik 24694 23880
Adarsh Manickam 24674  
Alexander Taranovsky 24645  
utietze 24542  
Jamie Saunders 23827 23824
Eden Duong 24741 24739
p-bystritsky 24734 24043, 24678
Ravi Chandra 24728  
Roman Kis 24783 23295
Adarsh Manickam 24761 24740
Alexander Taranovsky 24754  
Ivan Koliadynskyy 24755 13218
Ravi Chandra 24753  
Vinai Kopp 22228  
p-bystritsky 20181 15775
Lukasz Bajsarowicz 23200  
Adarsh Manickam 24804 24803
Ravi Chandra 24790  
Adarsh Manickam 24773 24708
Artem Voloznov 24720 24718
Raul E Watson 24680  
KaushikChavda 24682 24581
LucasCalazans 24597 23460
Bruce 24415 24414
Bartłomiej Szubert 22293 12256, 13263
YevheniiKR 24891  
Daniel Ruf 24890  
Gabriel Caruso 24885  
Gabriel Caruso 24872  
Archit 24864  
p-bystritsky 24858  
Alex 24853  
Daniel Ruf 24851  
Daniel Ruf 24848  
Adarsh Manickam 24845 24779
Adarsh Manickam] 24835  
Eduard Chitoraga 24829  
Mahesh Singh 24831 24722
Andrey Legayev 24828  
Max Souza 24827 24701
Valerii Naida 24792  
Ivan Koliadynskyy 24769 24716
federeggiani 24659 14240
Thomas Klein 23452 23451
Bartłomiej Szubert 24927 24710
Adarsh Manickam 24913 12855
Brent Robert 24907 24903
elvinristi 24906 24902
Daniel Ruf 24884  
Brent Robert 24881 23754
Daniel Ruf 24888  
Daniel Ruf 24883  
Daniel Ruf 24867  
Daniel Ruf 24852  
Daniel Ruf 24850  
Bruno Roeder 24832 22169, 24721
MaxRomanov4669 24817 24452
Volodymyr Zaets 25049  
Serhii Dzhepa 24966  
Mahesh Singh 24973 24964
Tomash Khamlai 24943  
Andrey Legayev 24904  
Andrey Legayev 24900  
Fooman Kristof 24855  
Bartłomiej Szubert 24833 22747
Eduard Chitoraga 24818 24745
Adarsh Manickam 24800 24785
Sergiy Vasiutynskyi 24746 23627
Bruno Roeder 24737 23116
George Babarus 24692  
Tiago de Oliveira Castro Teixeira Pinto 24588 22692
Eduard Chitoraga 25094  
Eden Duong 25102 25101
Eden Duong 25085 25072
Gaurav Agarwal 25022 24840
p-bystritsky 24974 24781
Gabriel Caruso 24870  
Thomas Klein 24405 12371
Namrata 25064  
Eden Duong 25034 25033
Leandro F. L. 25024  
Gaurav Agarwal 24981  
Ivan Koliadynskyy 24959 23577
Andrey Legayev 24898  
Andrey Legayev 24899  
Oleksii Lisovyi 24345 12560
Anuj Gupta 25015 24652
Vinai Kopp 24983  
Ronak Patel 24988  
Jeroen Van Leusden 24975  
Alexander Lukyanov 24969 23465
Eduard Chitoraga 24954 24311
Andrey Legayev 24901  
Roman 24866  
Mykola Orlenko 24810  
Andrey Legayev 24686  
Andrey Legayev 24677  
adrian-martinez-interactiv4 24556  
Alexander Taranovsky 24197  
Shubham-Webkul 25200 20502
Mahesh Singh 25176 23170
Daniel Ruf 25169  
Daniel Ruf 25170  
Andrey Legayev 25164  
Pieter Hoste 25160  
Adarsh Manickam 25149 25135
Adarsh Manickam 25145 25144
Tomash Khamlai 25134  
Eden Duong 25132  
Eden Duong 25109 25108
bradleyfrye 25100  
Eduard Chitoraga 25090 25088
Eden Duong 25058 25057
Gaurav Agarwal 25051 25039
Andrey Legayev 24905  
Timon de Groot 24896 22346
adrian-martinez-interactiv4 24892 17634
Gabriel Caruso 24871  
Bartłomiej Szubert 24814 13278
Adarsh Manickam 24714 24646
korostii 25265 23031
Eduard Chitoraga 25251  
Arvinda Kumar 25241 25240
Mateusz Krzeszowiak 25233 25231
Arvinda Kumar 25208 25207
Adarsh Manickam 25206 25137
Rahul Mahto 25168 25167
Alexandr Skrashuk 25055 24726
Eden Duong 25037 25036
Adarsh Manickam 24918  
Laura Folco 24875 24483
Ivan Koliadynskyy 24862 24808
Eden Duong 25331  
Eden Duong 25329  
Cristian Sanclemente 25317 23920
Eden Duong 25305  
Eden Duong 25298  
Eden Duong 25290  
Eden Duong 25286  
Adarsh Manickam 25283  
Mahesh Singh 25273  
Alexander Taranovsky 25248  
Christos Stergianos 25184 21592
Ihor Sviziev 24636 22297
Eden Duong 25340  
Eden Duong 25327  
Pieter Hoste 25316  
Eden Duong 25257  
Andrey Legayev 25223 25343
Dmytro Androshchuk 25143 25120
Eden Duong 25061 25060
Eden Duong 25361  
Mateusz Krzeszowiak 25336 23382
Rodrigo Mourão 25318  
Pieter Hoste 25296  
Adarsh Manickam 25281  
Adarsh Manickam 25264  
Eden Duong 25152 25148
korostii 24947 24019
Malyovanets Nickolas 25398 13561
Tomash Khamlai 25466 25468
Mateusz Krzeszowiak 25443 25429
Mateusz Krzeszowiak 25435 9671
Eden Duong 25422  
Torben Höhn 25393 25392
Eduard Chitoraga 25382  
Arvinda Kumar 25368 25366
Anton Kaplya 25357 25294
Pieter Hoste 25307 23411, 24009
Tjitse 25289 21904
Vova Yatsyuk 25204  
Gabriel da Gama 24994 24807
skylineop 24771 15959
Mahesh Singh 24663 24225
Vladislav Slesarenko 24552 24550
Sergii Ivashchenko 25459  
Sergii Ivashchenko 25464  

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.3.4 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 Magento Data Migration repository.

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