Magento Commerce 2.3.4 Release Notes

Magento Commerce 2.3.4 offers significant platform upgrades, substantial security changes, and performance improvements.

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.

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](https://helpx.adobe.com/security/products/magento/apsb20-02.html).

Other release information

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

Highlights

Look for the following highlights in this release:

Substantial security enhancements

This release includes 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 Security updates available for Magento (APSB20-02) 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.

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](https://helpx.adobe.com/security/products/magento/apsb20-02.html).

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, CMS, and B2B.

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.

Page Builder

Page Builder enhancements for this release include:

  • Improved product sorting. Merchants can now sort by product position within a category or within a list of product SKUs. Sorting by predefined parameters, such as name or stock status, remains available.

  • Product carousel. Merchants can choose how to showcase products in their content by selecting from predefined options in the Page Builder Products content type: grid or carousel.

  • Content created with Page Builder can now be displayed in storefronts built with PWA Studio using new PWA & Page Builder components. The unstructured content (HTML) that Page Builder generates and saves into a database is converted into structured data that works in React and PWA Studio.

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 GraphQL 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

  • PWA and Page Builder integration lets you use Page Builder to define your layout and render that content in a PWA Studio storefront.

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

B2B

New B2B features and improvements include the following:

  • Ability to export Requisition Lists into CSV format. B2B buyers can export the contents of Requisition Lists for local editing. These exported lists can then be uploaded into B2B Quick Order for creation of new orders, quotes, or lists. See Managing Requisition Lists.

  • Granular ACLs for B2B modules. Merchants can now restrict access to B2B features from the Admin, controlling which employees can work with B2B items and settings. See [Role Resources](https://docs.magento.com/m2/b2b/user_guide/system/permissions-role-resources.html.

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.
  • You can now successfully run bin/magento setup:static-content:deploy in developer mode. Previously, attempting to run bin/magento setup:static-content:deploy resulted in 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.

AdminGWS

  • Administrators with restricted access can now view Content > Pages. Previously, when an administrator tried to access this page, Magento displayed this error: You cannot define a correlation namestore_tablemore than once.

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

B2B

  • You can now access or refresh the Simple Product page for a product created by API. Previously, if you tried to access a product’s page after running bin/magento cache:flush, Magento threw an error.
  • You can now successfully set a valid customer to active status using the Active action that is available from the All Customers list Actions menu. Previously, when you tried to set a valid customer to active, Magento did not change the customer status and left the status field empty, which prevented you from including this customer when creating a company.
  • Magento no longer displays an option to review Terms and Conditions whenever you try to place an order from a quote. Previously, when you tried to check out from a quote when trying to place an order, you had to check the terms box before clicking Place order, and Magento displayed an error.
  • Customer attributes are now displayed as expected on the Add New Company page. Previously, Magento did not display customer attributes on a company’s Admin tab even when you enabled the Values Required and Show on Storefront settings, which prevented you from creating a new company.
  • Users with company administrative privileges can no longer submit reorders for accounts other than their own.
  • The Request a Quote page (accessed by clicking Request a Quote from the shopping cart) now works as expected in deployments running Internet Explorer 11.x.
  • PayPal Express now works as expected as a payment method for quotes. Previously, Magento displayed this error when you tried to complete payment using PayPal Express: We can't initialize Express Checkout.
  • Magento now minimizes requisition lists as expected when multiple wishlists are enabled. Previously, the wishlist remained expanded even when you attempted to close it.
  • Shared catalogs are now listed and identified as expected in the Product in Shared Catalogs tab. Previously, when you saved shared categories for a product, Magento either did not display the categories or did not display them as selected.
  • Currency rates are no longer duplicated on the Admin Order page.
  • Magento now handles decimal values in product quantities as expected when adding a product to a requisition list. Previously, when you entered a decimal value as a product quantity, Magento added the item quantity to the requisition list but omitted the decimal value.
  • The Select All checkbox on the Requisition List page now works as expected. Previously, when you deselected all products in a Requisition List, the Select All checkbox remained enabled.
  • The cron job that deletes inactive quotes now affects only standard carts, not negotiable quotes. Previously, a cron job deleted negotiable quotes, which resulted in data loss.
  • Administrators can now successfully place an order again from the Admin. Previously, if the administrator tried to place the order again from the Admin, the Same as Billing Address checkbox always defaulted to true when the reorder form was rendered. As a result, the billing address overrode the shipping address, and the original shipping address information was lost.
  • Merchants can now restrict access to B2B features from the Admin, controlling which employees can work with B2B items and settings.
  • Administrators with appropriate permissions can now create a new user when customer prefixes are enabled. Previously, Magento threw an error.
  • Magento now uses the language set for the store view in which the order was placed when displaying an order’s payment information in the Admin. Previously, Magento always derived this information from the default store view for orders created in a multi-site deployment.
  • Magento now loads email templates as expected from the Admin Marketing > Email Templates > Add New Template page. Previously, when you tried to add a new template, Magento displayed this error: The template did not load. Please review the log for details.
  • Magento now displays all available products as expected from the Admin Create Order page. Previously, Magento did not display all products whether added by SKU or by using Add Products.
  • The Manufacturer’s Suggested Retail Price field on the Advanced Pricing page has been re-labeled to Minimum Advertised Price.
  • You can now successfully create a company from the storefront account of another company. Previously, Magento displayed an error message.
  • B2B buyers can now export Requisition Lists as a CSV file for local editing. These exported lists can then be uploaded into B2B Quick Order for creation of new orders, quotes, or list.
  • Prices are now shown and calculated correctly when additional products are added to a Quote by an administrative user. Previously, prices were shown as 0.00 for added products.

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.
  • Gift messaging and gift wrapping options are now saved as expected for an order being shipped to multiple addresses. Previously, gift messages and gift wrapping did not appear in the final steps of the checkout workflow.
  • 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 follow 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
  • Magento no longer ignores permissions restrictions for category management that are set in the GWS module. Previously, administrators with restricted permissions could change and create categories for which their permissions were restricted.
  • 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.
  • 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.
  • 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.

Catalog rule

  • Magento now correctly applies Catalog Price rules in deployments where the time zone is set to EEST (Europe/Helsinki) and Locale = Finnish (Finland).

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

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.
  • CMS pages now remain assigned to the hierarchy when you create a schedule update for the CMS page.
  • 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 server. 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 condition Total Number of Orders equals or greater than 0 now affects customer segments as expected. Previously, when a customer segment was created with this condition, only customers with no orders (0) were affected.
  • 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.
  • Magento now correctly applies customer segment cart price rules when products are added to cart from different websites in a multi-website deployment. Previously, discounts were not applied correctly for all products in the cart.
  • Magento no longer logs an error in exception.log when a customer logs in to a store for which the merchant has created a customer segment defined by the Up To Date(period) condition.
  • 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

  • You can now successfully create and implement a plugin for Magento\CustomAttributeManagement\Helper\Data.
  • 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 gwharton 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

Dynamic block (formerly banner)

  • Dynamic block content is now invalidated as expected when the store view is changed in a multistore deployment.
  • Schema upgrades no longer result in unexpected foreign key re-creation and column modifications.
  • Cart Price rules now remain attached as expected to a dynamic block when you add the rule to related promotions and then open the Related Dynamic Blocks tab.
  • Checkboxes that are positioned inside the list of widgets on Admin > Content > Widgets are now fully clickable as expected.
  • Magento no longer displays a dynamic block after its associated cart price rule has expired or been set to inactive.
  • The Visibility Column on the Dynamic Block grid now accurately reflects the scope assigned to the listed dynamic blocks.

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.
  • The new CONSUMERS_WAIT_FOR_MAX_MESSAGES environment variable lets merchants configure how consumers process messages from the message queue. You can set this variable by adding the consumers-wait-for-messages option to bin magento queue:consumers:start. Using this option can help Magento deployments avoid being affected by long delays in message queue processing. See Start message queue consumers.

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

Gift cards

  • Guests can now pay for gift cards with PayPal (Braintree) when Payment Action is set to Authorize and Capture.
  • Fixed a condition that caused an error with grand total calculations when a gift card was applied to a cart.

Gift wrapping

  • Magento now correctly processes orders that include gift wrapping for multiple products when an order is paid for using PayPal Express. Previously, Magento displayed this error: PayPal gateway has rejected request. The totals of the cart item amounts do not match order amounts (#10413: Transaction refused because of an invalid argument. See additional error messages for details).

Google Tag Manager

  • Magento no longer throws a fatal error (500 error) when you try to enable Google Tag Manager. Fix submitted by Raul E Watson. GitHub-20164

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.
  • Partial reindexing operations no longer throw an exception when catalog permissions functionality is disabled and the catalogpermissions_product_cl table has non-reindexed rows. Previously, the vendor/magento/module-catalog-permissions/Model/Indexer/Plugin/IndexerConfigData.php::afterGet() plugin terminated a loaded instance of catalogpermissions_product indexer under these conditions.
  • Query performance and indexer execution (bin/magento indexer:reindex) has been improved.
  • 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 Boolean 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.
  • The dynamic block cache logic has been refactored to improve banner load time. Previously, slow load times resulting in timeouts on both the storefront and Admin.
  • 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

Return Merchandise Authorizations (RMA)

  • Using the DELETE V1/returns/:id call now deletes an RMA as expected.
  • RMAs for the disabled child products of a configurable product are no longer available in the storefront.
  • The Returns tab on a customer’s AccountMy Orders page now behaves as expected. Previously, if a customer clicked on the Refunds tab on her AccountMy Orders page, the Returns tab disappeared.
  • RMAs created with the POST V1/returns/ call now render correctly on the Admin.
  • The amount displayed in the Remaining Amount field of Admin > Stores > Configuration > Sales > Sales > RMA Settings is now accurate. Previously, this amount corresponded to the total of items that were originally bought but not the actual remaining amount.
  • Magento no longer sends duplicate emails to a customer when an RMA return is created.
  • The Print button on the Admin > Return > Packages list now works as expected.
  • You can now create an RMA from the storefront when a product is listed as out-of-stock.

Rewards

  • Merchants can now create a credit memo for an order that was paid for with reward points. Previously, Magento displayed this error: You can't use more store credit than the order amount.
  • Magento now refunds the correct amount of reward points (and rounds up as necessary) when a merchant creates a partial refund of an order that was paid for with reward points.
  • The checkout workflow now includes a Cancel button that permits a customer to cancel the application of reward points before checkout completes.
  • Magento now returns the correct number of reward points when creating partial refunds for an order that was paid for with reward points. Previously, Magento doubled the reward points when creating the second partial credit memo.

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

Staging

  • Merchants can now manage Catalog Rule activity on the Catalog Rule page using the Is Active toggle button.
  • Magento no longer adds a new row to the changelog table whenever an EAV attribute is updated and its value remains unchanged.
  • Preview staging now works when the store code is added to the URL as expected. Previously, the requested timestamp was not added to href links on the page, and Magento could not determine which version to display.
  • Media gallery image positions are no longer overridden by a scheduled change.
  • CMS pages no longer store the wrong date in the custom_theme_from field when locale and country are set to locales other than en_US.
  • You can now schedule updates for Catalog Price rules when applied to a date attribute. Previously, Magento threw an error.
  • Administrators with the appropriate credentials can now schedule updates from a non-default site in a multi-site deployment. Previously, Magento did not create an update and displayed this error:  Something went wrong while saving the Magento\Catalog\Api\Data\ProductInterface.
  • Product updates can now be successfully scheduled when Magento is installed with DB prefixes set.
  • The Low Stock report now accurately displays low stock levels. Previously, this report showed a product level of zero (0) even when product stock exceeded zero.
  • The value of the news_from_date attribute that Magento creates for a product’s scheduled update now equals the current time as expected. Previously, \Magento\Catalog Staging\Observer\UpdateProductDataAttributes::execute used the current staging version start and end times for all products, not only for the products that belong to this staging version.

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.

Target Rule

  • The Product Category does not contain target rule condition now works as expected.

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

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

Testing

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

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 enable the No layout updates setting for categories when the Page Builder module is enabled.
  • 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.
  • Category-specific URL rewrites are now generated as expected when importing and assigning a product to a category.
  • 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.

Visual Merchandiser

  • You can now change the sort order of products across pages for a multi-page category list. Previously, you could change the sort order for categories on one page only.
  • You can now sort products in a category by special prices (either ascending or descending order). Previously, when you tried to sort by special price, Magento displayed an informative error and directed you to the dashboard.

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

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

  • 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
Space 48 magento/partners-magento2ee#14, 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 Commerce 2.3.4 using Composer.

Migration tool kits

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

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