Magento Commerce 2.3.1 Release Notes

Release notes published on March 26, 2019 and last edited on June 3, 2020.

We are pleased to present Magento Commerce 2.3.1. This release includes over 200 functional fixes to the core product, over 500 pull requests contributed by the community, and over 30 security enhancements.

This release includes significant contributions from our community members. These contributions range from minor clean-up of core code to the development of substantial features such as Inventory Management and GraphQL. Although code for these features is bundled with quarterly releases of the Magento core code, several of these projects (for example, Page Builder and Progressive Web Applications (PWA) Studio) are also released independently. Bug fixes for these projects are not documented in these core release notes but in separate project-specific sets of notes.

Apply updated hot fix for CVE-2019-8118

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

Apply patch PRODSECBUG-2233 to address critical remote code execution vulnerability (RCE)

An unauthenticated cross-site scripting vulnerability combined with an authenticated Phar deserialization vulnerability has left this version of Magento Commerce open to serious exploit. An attacker can use these vulnerabilities to inject JavaScript into the Magento Admin and subsequently launch malicious code in a store user’s browser. We strongly recommend that all users of the affected versions of Magento download and apply the appropriate patch as soon as possible.

This issue and the available patches are discussed in the Extending the June 25 Security Update to Older Versions of Magento blog post. You can directly access patch code through your Magento account for Magento Commerce. Locate the patch by the name. We provide both Git-based and Composer-based patches.

Apply the Scope parameter for Async/Bulk API patch to address an issue with the Async/Bulk REST API

In certain versions of Magento Open Source and Magento Commerce, the Asynchronous and Bulk REST endpoints support the default store view scope only. After this patch is applied to deployments running those versions of Magento, the current Magento message queue implementation will factor in the store that executes queue operations. See Patch for Magento Framework Message Queue and Store Scopes for a full discussion of this scope-related issue and patch contents. See Applying patches for specific instructions on downloading and applying Magento patches. To apply the patch, navigate to the Magento Security Center, and select the patch associated with the version of Magento you are running.

Apply the PRODSECBUG-2198 patch to address critical SQL injection vulnerability

A critical SQL injection vulnerability has been identified in 2.3.x Magento code. A fix for this issue is included in Magento 2.3.1. If you cannot immediately apply the full patch, you can quickly protect your store from this vulnerability by installing patch PRODSECBUG-2198. However, we strongly encourage all merchants to stay up-to-date on security patches. See the description of PRODSECBUG-2198 in the Magento Security Center for information on this vulnerability.

Follow these steps to download and apply this patch:

  1. Access My Account.
  2. Navigate to the Downloads tab. Select the Magento edition and version you need.
  3. Select Support Patches and Security Patches, then PRODSECBUG-2198.
  4. Download the patch and upload to a specific directory in your Magento installation such as m2-hotfixes (confirm that the directory is not accessible publicly).
  5. From your project root, apply the patch. git apply ./m2-hotfixes/<patch-file-name>.
  6. Refresh the cache from the Admin (System > Cache Management).

PayPal Payflow Pro active carding activity update

The PayPal Payflow Pro integration in Magento is being actively targeted by carding activity. To resolve these carding activity issues, Magento has provided Composer packages that add an option for Google reCAPTCHA and CAPTCHA to the Payflow Pro checkout form. See PayPal Payflow Pro active carding activity for a full discussion of this issue and instructions on downloading these packages. We strongly recommend that all Payflow Pro merchants download and install these packages to help enhance the security of their storefronts.

Apply the Admin Dashboard Image-Charts patch to address deprecation of Google Image Charts

Magento 2.x currently uses Google Image Charts to render static charts in Admin dashboards. Google stopped supporting Google Image Charts on March 14, 2019, and Magento is providing the Admin Dashboard Image-Charts patch to replace Google Image Charts with the Image-Charts free service. Users of Magento 2.x deployments will not be able to view static charts in Magento 2.x instances unless they download and apply this patch.

See Switch from deprecated Google Image Charts to Image-Charts for Magento for information on downloading and applying this patch.

Highlights

Look for the following highlights in this release:

Merchant tool enhancements

Page Builder

Page Builder is a drag-and-drop visual content editing tool that lets merchants customize content page layout and create shopping experiences that blend content and commerce without writing HTML or CSS. Page Builder provides merchants with a powerful set of content types to compose various types of pages and easy drag-and-drop positioning of all content elements for intuitive page editing. Page Builder is available on Magento Commerce only. See Page Builder User Guide and Page Builder Developer Documentation.

Improved order creation workflow in the Admin

The Admin order creation workflow has been refactored to eliminate delays when editing billing and shipping addresses. Processing of these fields now happens only after they are populated.

Ability to upload PDP images without compression and downsizing

Merchants can now upload PDP images larger than 1920 x 1200 without first compressing and downsizing the images. Previously, when a merchant uploaded a high quality product image (larger than 1920 x 1200), Magento resized and compressed the image. Merchants can now set requirements for resizing and compression as well as compression quality and target width and height.

Inventory Management 1.1.0 (Community-developed feature!)

The Magento Inventory (was MSI) community project has added multiple new features to this release of Inventory Management. See Inventory Management Release Notes for information about specific fixes and acknowledgements to community contributors.

  • Support for Elasticsearch and Inventory Management. All site searches now return correct products and quantities when Elasticsearch is used as the search engine. (As of this release, only default option from 2.3+) Searches return results from stock assigned to the website. Advanced features are supported, including filtering search results. Community-developed feature!

  • Distance Priority Source Selection algorithm (SSA) option. Merchants can enable this algorithm to reduce fulfillment costs by shipping orders from the closest inventory locations. This SSA option uses address geocoding through the Google Maps API to calculate the shortest distance for deliveries. See Manage source selection algorithms.

  • Enhancements to mass inventory transfers. Bulk transfer of inventory has been optimized to improve processing speed and to reduce locking during transfers.

Improved developer experience

Progressive Web Apps (PWA) Studio

PWA Studio is a set of developer tools that allow you to develop, deploy, and maintain a PWA storefront on top of Magento 2.x. See Magento PWA Documentation.

GraphQL

Community contributions for this release include major additions to cart actions (create cart, populate cart, set shipping address) and customers (create customer account). See Release Notes for information about specific fixes and acknowledgements to community contributors.

Substantial security enhancements

This release includes over 30 security enhancements that help close cross-site scripting, arbitrary code execution, and sensitive data disclosure vulnerabilities as well as other security issues. 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. See Magento Security Center for a comprehensive discussion of these issues. All exploitable security issues fixed in this release (2.3.1) have been ported to 2.2.8, 2.1.17, 1.14.4.1, and 1.9.4.1, as appropriate.

Performance boosts

Magento now supports customer accounts with more than 3,000 addresses. B2B merchants should note the multiple code enhancements that contribute to this performance boost:

  • Customer address handling has been rewritten with UI components that increase platform performance, which in turn streamlines the management of customers with 3000 and more addresses.

  • The Admin order creation page now handles customer accounts with 3000 addresses without performance issues.

  • Magento now displays the list of additional customer addresses contained in the storefront customer address book as a grid, which has improved performance for customers with many additional addresses associated with their accounts. Address Book describes how to use this enhanced feature.

  • The shipping and billing data that a user enters during checkout now persists if the user interrupts checkout to continue shopping. Previously, checkout data was deleted after a cart update.

Infrastructure improvements

Infrastructure improvements are core enhancements that underlie both merchant and developer features.

  • This release includes a new Authorizenet extension to replace the Authorizenet Direct Post module, which implemented an MD5-based hash that Authorize.Net will no longer support as of June 28, 2019. See Authorize.Net for information on configuring and using this new extension. Information about the deprecation of Authorize.Net Direct Post can be found here. Note that Magento released a patch in late February to address this issue on pre-2.3.1 installations of Magento, which is discussed in Update Authorize.Net Direct Post from MD5 to SHA-512.

  • Accept.js library is now used for Authorize.Net payments.

  • Magento now supports Elasticsearch 6.x. Fix submitted by community member Romain Ruaud in pull request 21458. Thank you, Romain!

  • Update PayPal Express Checkout to checkout.js v4. This introduces a modernized checkout flow, faster checkout performance, and new payment options in a single integration that does not have to be updated as new payment methods become available. It also unlocks new payment options including Venmo and PayPal Credit. See PayPal Express Checkout.

  • Magento now supports Redis 5.0.

  • Magento support for PHP has changed slightly as a result of expanding our Elasticsearch support in this release. Magento 2.3.1 is compatible with PHP 7.2.x and certified on PHP 7.2.11.

  • You can now isolate and extract MySQL Views from regular database tables with no negative effects on database backup and restoration. Support for MySQL Views was introduced in 2.3.0 with unexpected consequences to the default database backups and restore mechanism. This fix restores expected backup and restore functionality while preserving MySQL View support the backward compatibility with legacy inventory. Fix submitted by community member Stepan Furman in pull request 21151. Thank you, Stepan!

  • Magento now uses version 6.0 of the DHL XML Services schema for the DHL shipping method.

  • Checkout information now persists after a cart update**. Information previously entered by a customer during check out (such as shipping address) now persists after the customer updates their shopping cart. Previously, when a customer updated their shopping cart, all information previously entered during check out (such as shipping address) was deleted.

  • Upgrade of Magento Functional Test Framework (MFTF) to 2.3.13.

Bundled extension enhancements

This release of Magento includes extensions developed by third-party vendors.

Amazon Pay

  • Added multi-currency support for EU and U.K. merchants. See Use multi-currency for an introduction to using this new feature with Magento 2.x.

dotdigital Engagement Cloud (formerly dotmailer)

  • dotmailer has been rebranded as dotdigital Engagement Cloud.

  • Support for Marketing preferences has been added to the customer account dashboard area.

  • If enabled, we now display the customer consent text in the customer’s account dashboard area as the general subscription text.

  • The abandoned cart and automation process now benefits from a retry function if contacts are pending in dotdigital Engagement Cloud.

Magento Shipping

New features for Magento 2.3.1 include:

  • Shipment Cancellation. You can now cancel a shipment that has not yet been dispatched by accessing the shipment and clicking Cancel Shipment.

  • Portal Access via Magento. You can now access the Magento Shipping portal directly from Magento using the Magento Shipping credentials that are stored in your Magento instance.

Enhancements to existing features include:

  • Multiple improvements to the Shipment workflow user experience.

  • Batch Processing. Error messaging and field validation has been added to the batch processing workflow. See xxx for a description of other enhancements to batch processing.

  • Collection Points. Available Collection Points have been expanded to cater for both FedEx Hold at Locations and UPS Access Points.

  • Significant user interface changes have been made to the list of locations displayed during checkout. Opening and closing hours are now included when provided by the carrier.

  • Click & Collect. The list of Click & Collect locations in checkout has been brought in line with the new Collection Points list. For a description of the new Collection Points list, see xxx.

  • Carrier Specific Packaging. Carrier-specific packaging has been added for FedEx. These packages will be available for selection during shipping if a FedEx carrier is configured.

  • Qualification Experience. The three Qualification experiences (Ship to Address, Click & Collect, and Collection Points) have been restructured and are now available as outcomes in a single Qualification experience.

  • Security. We’ve closed scenarios that could allow for third-party code execution.

  • Magento Cart Price Rules. Cart price rules can now be applied to Magento Shipping.

  • Dispatch. We’ve added additional workflow capabilities during the dispatch process to cater for future carriers.

Vertex

  • Added support for B2C VAT.

  • Added support for configurable logging.

Fixed issues

We’ve fixed hundreds of issues in the Magento 2.3.1 core code.

Installation, upgrade, deployment

  • The commands to enable and disable debug logging have changed to bin/magento setup:config:set --enable-debug-logging=true | false. The previous commands, bin/magento config:set dev/debug/debug_logging 0 | 1 are no longer supported. See Logging.
  • Magento now sets the id_prefix option on prefix cache keys for the cache frontend during installation. If this option is not set, Magento uses the first 12 bits of the md5 hash of the absolute path to the Magento app/etc directory. But if this value is not exactly the same on all web servers, cache invalidation will not work. Fix submitted by Fabian Schmengler in pull request 18641. GitHub-15828
  • The ./bin/magento config:show command no longer fails with a fatal error after you run ./bin/magento app:config:dump. Fix submitted by Pratik Oza in pull request 18295. GitHub-17582
  • The bin/magento app:config:dump command now disables all input fields as expected.
  • Administrators that have been assigned a backup module role resource can now access the backup controller as expected. Fix submitted by Mahesh Singh in pull request 18816. GitHub-18150
  • The getHostUrl() method has been updated to reference HTTP_HOST rather than SERVER_PORT. Fix submitted by Logan Stellway in pull request 18393. GitHub-18131
  • Magento no longer displays an extraneous blank option in the country drop-down menu.
  • Excessive timeouts no longer result from the discrepancy between storefront and Admin uses of HTTPS. The storefront now uses HTTPS exclusively while the Admin uses HTTP.
  • The config:set --lock-config command now acts as expected on all scopes. Previously, after this command was run, administrators were not able to change the configuration for the default store, but could still change it for other scopes. Fix submitted by Mahesh Singh in pull request 19880. GitHub-19609
  • Magento now skips disabled modules when compiling static content. Fix submitted by Shikha Mishra in pull request 19751. GitHub-19605
  • The bin/magento setup:upgrade --convert-old-scripts=1 command now supports the conversion of indexes and constraints.
  • The Allow Dynamic Media URLs in Products and Categories configuration setting, which was previously accessed from Stores > Configuration > Catalog > Storefront, has been removed. The Use Static URLs for Media Content in WYSIWYG setting (Stores > Configuration > General > Content management > WYSIWYG Options) now applies to any media URLs that are entered through the WYSIWYG editor.

AdminGWS

  • Magento now updates the reports table as expected when a new administrator with restricted privileges logs in and selects Report > Products > Ordered. Previously, Magento did not generate this report, and logged an error in var/log/system.log.

Amazon Pay

  • Fixed a bug where the Magento order ID was not always correctly represented in Amazon Pay order details.

Analytics

  • You can now save configuration settings from the Admin > Stores > Configuration > General > Advanced Reporting without providing an industry value. Previously, Magento did not save configuration settings, and displayed this error: Please select a vertical. Fix submitted by Pratik Oza in pull request 18782. GitHub-15259

Authorization

  • You can now successfully save a role from the Admin. Previously, when you saved a role from the Admin, Magento removed all users from the role (no matter which checkbox was checked), and displayed this message: This user has no tokens.

Backend

  • CustomerRepository::getList() now loads custom attributes that are named company. Fix submitted by Tegan Elizabeth Bold in pull request 19620. GitHub-17759
  • Fixed icon behavior on the product customization page. Fix submitted by Kajal Solanki in pull request 19405. GitHub-19399
  • The Reload Data button on the Admin now works as expected. Fix submitted by Eduard Chitora in pull request 20803. GitHub-20802

Bundle

  • Bundle special prices are now correctly rounded when you load and re-save a bundle product. Previously, when you reloaded a bundle with a special price that required four positions after the decimal (for example, 78,9473), Magento rounded the price to two decimal places. Fix submitted by p-bystritsky in pull request 18987. GitHub-17638
  • The Bundle Product Option Repository Delete method now removes the correct option. Previously, it removed the first option, regardless of the optionId that was specified. Fix submitted by Burlacu Vasilii in pull request 19027. GitHub-18979
  • Magento no longer overwrites user-defined option quantities with default values when a customer edits a bundle product from a shopping cart. Fix submitted by Vishal Gelani in pull request 18520. GitHub-4942
  • You can now successfully change the attribute set for a bundle product. Previously, the edit bundle page hung, and Magento threw this error: Uncaught TypeError: Cannot read property 'length' of undefined. GitHub-5999
  • Magento now maintains the correct base price for a bundle product when you add a bundle product in one currency and then add the same bundle product option in a different currency. Previously, when you added the same bundle product option in a different currency, Magento doubled the base price.
  • Bundle product SKUs are now built based on the order of the options set in the bundle product. Previously, SKUs were built based on the order of the selected product ID numbers in ascending order. GitHub-14262
  • Magento now adds all selected values to the cart when a customer adds a bundle product option using an input type checkbox. Previously, if a bundle product had three values, Magento added only two options to the cart. Fix submitted by Mahesh Singh in pull request 19261 and pull request 19437. GitHub-19205
  • Fixed inconsistently sized title box border on the edit bundle product page when adding an item to a bundle product from the Admin. Fix submitted by Abrar Pathan in pull request 19510. GitHub-19509
  • You can now add a bundle product to a requisition list from the category page. Previously, Magento threw this error: PHP Fatal error: Uncaught Error: Call to a member function getParentProductId() on string in app/code/Magento/RequisitionList/Model/RequisitionListItem/Options/Builder.php:118.

B2B

  • You can now filter customers by status. Previously, Magento threw an SQL ERROR when you clicked on Apply Filters after setting the filter to status.
  • Magento now loads the company profile, roles, and permissions information for a company account when Enable Reward Points Functionality is set to no in the Admin and you flush cache storage.
  • Magento now displays products that merchants have added to the public catalog through Product > Edit page > Shared Catalog. Previously, these items appeared if added through Catalog > Shared Catalog, but not through Product > Edit page > Shared Catalog.
  • Menus now close as expected from the Quick Order page in mobile view.
  • Magento no longer displays a duplicate Add product button when you change currency from the Order currency drop-down menu while creating an order from the Admin.
  • Merchants can now add a product to the default public catalog, and the product can be accessed by the product URL on the storefront. Previously, Magento did not add the product to the shared catalog and instead displayed this error: Requested categories don't exist.
  • Magento now displays custom prices in quotes, the shopping cart, and during checkout. Previously, when you moved a product with a custom price to the shopping cart from the Admin, the custom price was lost, and Magento did not display it in the shopping cart.
  • A logged-in user can now log out, log in as a guest, and then check out when persistent cart is enabled. Previously, under these circumstances, the customer logged in as guest could not check out, and Magento displayed this error, No such entity with cartId = null.
  • Magento now correctly displays pricing for configurable products when permissions are set to prevent adding products to cart from a category.

CAPTCHA

  • CAPTCHA now appears as expected in the Log in pop-up window.

Cart and checkout

  • Magento now displays a product’s special price on the storefront, product listings, and product detail page as expected when the special price is 0.00. Previously, Magento displayed the regular price, but used the special price for sorting and quote calculations. Fix submitted by Mahesh Singh in pull request 18631. GitHub-18268
  • Custom shipping methods in custom carrier code can now include underscores. Fix submitted by Jakub in pull request 18689. GitHub-5021
  • Magento no longer displays the infinite loading indicator when an error occurs during check out. Fix submitted by Ihor Sviziev in pull request 18331. GitHub-18330
  • The Clear shopping cart button now works as expected. Previously, the page reloaded, but the shopping cart was not cleared. Fix submitted by Luuk Schakenraad in pull request 18596. GitHub-18475, GitHub-18589
  • Magento now dispatches a checkout_cart_product_add_before event in addition to a checkout_cart_product_add_after event. Fix submitted by Leandro Rosa in pull request 18080. GitHub-17830
  • Customer address attribute validation during checkout now permits spaces.
  • Clicking multiple times on the mini cart icon no longer logs out the current customer. Previously, when a logged-in customer added a product to the cart and then clicked the shopping cart icon multiple times, Magento displayed an empty shopping cart and logged out the customer.
  • Customers can now configure options for a configurable product after adding it to their shopping cart. Previously, under these circumstances, Magento threw a fatal error.
  • Magento now validates zip codes for new addresses as expected when the My billing and shipping address are the same option is unchecked.
  • Magento now updates the mini cart as expected when an administrator updates the product from the Admin. Previously, if a product that had been added to the shopping cart was subsequently disabled from the Admin, the product was still displayed in the cart.
  • Magento now uses the configured default sort order during checkout to calculate totals. Previously, Magento ignored the configured order and used Sub Total > Shipping > Discount > Tax > Grand Total to calculate order totals.
  • Magento now displays informative error messages when an order paid for with Authorize.Net fails.
  • Magento now displays the correct status for orders with zero subtotals. Previously, new order status appeared as pending when it was processing.
  • Expired gift cards are no longer applied to a customer’s account. Previously, if a gift card applied to a customer account expired, Magento could not complete the checkout process.
  • Magento no longer removes the billing and shipping address information for an order when a customer cancels the order by clicking Cancel and Return when using PayPal Website Payments Pro Hosted Solution. Previously, when a customer placed an order and then clicked the Cancel and Return link, Magento removed the billing/shipping address and displayed an error.
  • You can now update the quantity of grouped products if the quantity field was left empty when initially added to an Admin order by SKU. Previously, under these circumstances, you could not update the quantity.
  • After a session expires, and a customer refreshes the page, Magento displays an empty shopping cart and logs out the customer as expected. Previously, Magento displayed an empty shopping cart but the mini cart still displayed the selected items, and if the customer refreshed the page again, the shopping cart displayed the items.
  • Tooltips that are available from the checkout page on mobile devices are now displayed properly. Previously, customers had to scroll to access the tooltip.
  • \Magento\Checkout\Observer\SalesQuoteSaveAfterObserver now updates the checkout session quote ID as needed. Fix submitted by Dmytro Cheshun in pull request 19425. GitHub-19424
  • Magento now validates the shipping address of a logged-in user using the default shipping address during checkout. Fix submitted by StasKozar in pull request 19038. GitHub-18990
  • Fixed issue displaying numbers that exceed two digits in the Qty: box of the Proceed to Checkout pop up. Fix submitted by Parag Chavare in pull request 20612. GitHub-20611
  • Added a missing space between the title of the workflow step and the saved address on the first page of the checkout process. Fix submitted by Arvinda Kumar in pull request 20306. GitHub-20304
  • Magento no longer throws a console error during a guest checkout when the list of allowed countries is changed from the Admin. Fix submitted by Govind Sharma in pull request 20634. GitHub-20631
  • The title of the shipping method no longer overlaps with Edit on the checkout page. Fix submitted by Yashwant Rokde in pull request 20428. GitHub-20427
  • The Close button on the mini cart no longer overlaps with the shipping section when the checkout page is opened on a mobile device. Fix submitted by Pratik Oza in pull request 20615. GitHub-20614
  • Fixed the alignment of the Apply discount button on the checkout page. Fix submitted by Arvinda Kumar in pull request 20144. GitHub-20137
  • Fixed mini cart layout issues.
  • The mini cart is now updated as expected when a product in the cart is disabled.
  • Fixed problems with the display of the tooltip drop-down pointer on the checkout page in tablet view. Fix submitted by ranee2jcommerce in pull request 20488. GitHub-20487
  • Magento no longer displays a console error when a customer selects one-step checkout. Previously, Magento displayed this JavaScript error: Cannot read property 'code' of undefined. Fix submitted by Ihor Sviziev in pull request 18494. GitHub-18164
  • Administrators with appropriate permissions can now manage customer shopping carts from the Admin. Previously, when an administrator clicked Manage Shopping Cart from Admin > Customers > Customer, Magento threw an error.

Cart Price rules

  • The Cart Price Rule page now displays correct counter values for the grid as well as accurate pagination.
  • Magento no longer permits you to use the up and down arrow keys to enter negative numbers when entering a credit card number on the payment information page during checkout.

Catalog

  • Magento now displays the product page with this message You need to choose options for your item when you click Add to cart for a new product that has an attribute with the Use in product listing property set to Yes. Previously, Magento redirected the user to the cart page, and did not add the product to the cart. Fix submitted by Vishal Gelani in pull request 19322. GitHub-19315
  • Magento now directs the user to a 404 page when accessing http://www.domain.com/catalog/product/compare. Previously, Magento threw this error, Fatal error: Uncaught Error: Cannot call abstract method Magento\Framework\App\ActionInterface::execute(). Fix submitted by p-bystritsky in pull request 18987. GitHub-17638
  • Magento now correctly calculates fixed tier price discount for products with special prices. Fix submitted by Torben Höhn in pull request 19179. GitHub-18652
  • Magento no longer throws an exception when you try to add an image to a product programmatically. Fix submitted by Yevhenii Dumskyi in pull request 18952. GitHub-6803
  • Magento now applies the translations for the selected theme when you enable a custom design theme. Previously, Magento collected the translation files for the active main theme only, which limited the use of different translations within the additional theme. Fix submitted by Cezary Zeglen in pull request 18998. GitHub-17625
  • The bin/magento catalog:images:resize command now processes all specified images. Fix submitted by Vladyslav Podorozhnyi in pull request 18807. GitHub-18387
  • You can now create a new product with a special price. Previously, when you saved the newly created product, Magento threw this error: Special price date from" Failed to parse time string. Fix submitted by Hiren Pandya in pull request 18578. GitHub-18158
  • You can now insert multiple catalog product list widgets into a CMS page. Fix submitted by Burlacu Vasilii in pull request 18714. GitHub-4468
  • You can now use REST to add a new attribute and configure it with settings such as is_filterable. Fix submitted by Mr. Lewis in pull request 18622. GitHub-10205
  • Magento now provides a white-space trimming function for SKUs on the Admin. Fix submitted by Bartosz Kubicki in pull request 18019. GitHub-16572, GitHub-12300
  • Magento no longer changes the attribute type of backend_type from varchar to int when the product associated with the attribute is saved or updated in the Admin. Fix submitted by Vishal Gelani in pull request 18570. GitHub-9219
  • The table rate shipping method no longer fails to return a quote when a customer uses a United States postal code in the form of five-digit zip - four-digit extension (for example, 44444-1234). Fix submitted by Vishal Gelani in pull request 18499. GitHub-17770
  • You can now set a Boolean attribute to is_filterable, which allows these attributes to be included in layered navigation. Fix submitted by Mr. Lewis in pull request 18434. GitHub-3283
  • getStoreId() now consistently returns int. Previously, Magento returned string for products but int for categories, which resulted in a fatal error. Fix submitted by sv3n in pull request 18303*. GitHub-18079
  • \Magento\Catalog\Model\Product::getQty() now consistently returns float/double. Fix submitted by Jay Ghosh in pull request 18149. GitHub-18094
  • Updates to related products now appear as expected in both the storefront product page and the Admin product edit page. Previously, the storefront displayed product updates, but not all related product updates showed up in the Admin. Fix submitted by Pieter Hoste in pull request 18207. GitHub-13720
  • The bin/magento module:uninstall command now works as expected with Composer. Previously, there was a discrepancy between composer.lock and composer.json when this command was used to remove a module. Fix submitted by Pratik Oza in pull request 18205. GitHub-17780
  • getStoreId() now consistently returns int. Fix submitted by sv3n in pull request 18303. GitHub-18079
  • You can now save a product on deployments in single-store mode when the default website has been removed and a new website has been added. Fix submitted by Eduard Chitoraga in pull request 18210. GitHub-13405
  • Attribute values are now updated as expected in the catalog_product_flat_2 table.
  • Dates in the Admin are now formatted correctly for French locales (dd/mm/yyyy).
  • Magento now saves and properly indexes a configurable product variant that contains a longer-than-permitted SKU. Previously, when you tried to save this product, Magento threw an error. GitHub-17436
  • The product page’s Recently Viewed section no longer displays the name of the current product.
  • You can now use REST to update a product’s media gallery.
  • Magento now saves default values for category URL paths in accordance with the Use Default Value and Create a Permanent Redirect settings. Previously, in deployments running multiple stores, if a category’s URL key was changed and saved, Magento did not change the category’s URL key back to the default URL key when saved with the Use Default Value box checked and Create a Permanent Redirect box unchecked.
  • Magnifier now correctly handles zoomed sections of images when the image width/height ratio has a ~2x difference. Previously, these sections were distorted.
  • Magento now retains across categories any value you set for the number of categories displayed per page.
  • You can now save products with at least one tier price.
  • Changes to product images made under the All Stores scope now affect product images at the store-view level.
  • You can now use REST to update category positions.
  • Magento now correctly displays the greater than operator (>) when you configure the catalog products list widget for a CMS block.
  • Categories that are set to anchor Yes and that have disabled subcategories no longer display products from those disabled subcategories. GitHub-9002
  • You can sort a grouped product’s associated products across multiple pages. Previously, when you tried to sort associated products, Magento sorted only the products visible on the current page.
  • Magento now uses the correct column type when creating temporary tables for a flat catalog. Fix submitted by Jason Evans in pull request 18818. GitHub-14571
  • Attribute indexing no longer ignores custom source model options. Fix submitted by Joel Rainwater in pull request 19176. GitHub-417
  • Magento now correctly imports product_type drop-down attributes. Previously, Magento displayed an error message indicating that values for these attributes were incorrect during import. Fix submitted by Govind Sharma in pull request 19408. GitHub-19346
  • Magento now correctly handles attribute options that begin with zero. Previously, these attribute options did not work if an option with the same number but lacking the zero already existed. Fix submitted by SikailoISM in pull request 19451. GitHub-19436
  • You can now successfully delete a newly created attribute set. Previously, Magento displayed a 404 error under these circumstances. Fix submitted by cedcommerce in pull request 19633. GitHub-19607
  • You can now use add extension attributes to add category links to a product. Previously, Magento did not add the product links, but behaved unpredictably. Fix submitted by Giel Berkers in pull request 19080. GitHub-14861
  • When a new customer is created, Magento sets a value of zero for any custom attribute if no other value is explicitly provided. Previously, if no value was explicitly assigned, Magento did not save the custom attribute with any value. Fix submitted by Malyovanets Nickolas in pull request 19341. GitHub-14510
  • CategoryLinkReposity now lists all possible exceptions. Fix submitted by Patrick McLain in pull request 20050. GitHub-20037
  • Merchants can now assign negative values to the custom option for a product with a fixed price from the Admin. Fix submitted by Danny Verkade in pull request 15267. GitHub-7333
  • Newly added fields are now sorted according to the given sortOrder value in the newsletter system configuration file. Previously, you could add a new field, but could not successfully set its position. Fix submitted by Burlacu Vasilii in pull request 19568. GitHub-19418
  • Merchants can now change the position of tabs on a product page. Fix submitted by Burlacu Vasilii in pull request 19007. GitHub-4154
  • An incorrect variable in the phpDoc for DataBuilder.php has been corrected. Fix submitted by Kunj joshi in pull request 19992. GitHub-19974
  • You can now perform a mass update on product attributes after configuring the minimum cart quantity globally. Previously, Magento did not display the form to update all available attributes but threw an E_WARNING: error when you selected Update attributes. Fix submitted by Patrick McLain in pull request 19095. GitHub-17592
  • The product compare page now loads as expected when unconfigured attributes display N/A or No. Fix submitted by Vivek Kumar in pull request 20231. GitHub-20229
  • Magento now correctly sorts configurable products with tier prices or swatches on both the storefront and Admin. Previously, storefront sorting did not match Admin sorting. Fix submitted by vshatylo in pull request 20407. GitHub-12194
  • Magento now correctly duplicates video files when a merchant duplicates a product with an associated video. Previously, the video was duplicated as an image, not a video, and the merchant had to delete the image and re-add the video using Add Video.
  • Magento no longer hangs when you add a product by SKU to a large category (100,000 or more products).
  • We’ve improved the error message that Magento displays when validating a new (but invalid) product attribute. Fix submitted by saravananvelu in pull request 17806. GitHub-17754
  • getProductUrl no longer returns the wrong URL when the current category has no products. Fix submitted by Erik Pellikka in pull request 19232. GitHub-17819
  • The user agent exception now sets the correct templates for product pages. Previously, the footer.phtml and absolute_footer.phtml templates were loaded from the desktop theme instead of the mobile theme regardless of the user agent. Fix submitted by Alex Ghiban in pull request 19124. GitHub-16074
  • Magento now displays currency symbols as expected for products in the Cost column of the Admin catalog list. Fix submitted by Pratik Oza in pull request 20907. GitHub-20906
  • Magento now displays breadcrumbs in proper format. Previously, subcategories did not appear in breadcrumbs. Fix submitted by Brandon Brown in pull request 19781. GitHub-7967

CatalogInventory

  • Magento now validates the quantity of items in the shopping cart against the Maximum Qty Allowed in Shopping Cart setting. Fix submitted by Vishal Gelani in pull request 18481. GitHub-18477
  • Magento now correctly applies the Set Items’ Status to be In Stock When Order is Cancelled attribute setting. Previously, after an order was canceled, Magento increased product stock even when Set Items’ Status to be In Stock When Order is Cancelled was set to no. Fix submitted by Shikha Mishra in pull request 20252. GitHub-20121
  • Removed unnecessary slash from app/code/Magento/CatalogInventory/etc/di.xml. This extraneous slash had previously resulted in Magento\Catalog\Api\ProductRenderListInterface returning products regardless of visibility. Fix submitted by Milind Singh in pull request 20410. GitHub-20409
  • Magento no longer displays a negative value on the product list page when a product’s stock falls below the product’s OutOfStock threshold value. Fix submitted by Khodu in pull request 19206. GitHub-9130
  • Magento no longer increments stock for products for which stock managing has been disabled. Previously, Magento increased the product quantity count when an order failed if Manage Stock was disabled. Fix submitted by Oleksii Gorbulin in pull request 19997. GitHub-19482
  • In a multi-website instance, with a category that contains products belonging to different websites, when the product sort order in a category is changed at the store-view level, the products that belong to a different website gets unassigned from the category.

Catalog Rule

  • Magento no longer throws an exception when you try to edit and save a catalog price rule when the Admin language is set to a language other than English. Fix submitted by Martin in pull request 18419. GitHub-12399
  • If you create a catalog price rule based on categories with nesting level 4 or higher, these categories now maintain the status of their checkboxes when you re-open Category Chooser. Previously, when you reopened these categories, no checkboxes were checked.

Catalog URL rewrite

  • Magento now regenerates product URL rewrites as expected after an administrator changes a product URL key from the Admin and subsequently saves the product attribute URL path value. Previously, product URL rewrites could not be generated after this attribute value was changed. Fix submitted by p-bystritsky in pull request 19170. GitHub-18532, GitHub-5929
  • Attempts to rewrite catalog URLs with a POST /V1/products endpoint now work as expected. GitHub-16789
  • Magento no longer ignores the store-level url_key of child categories when rewriting URLs process for global scope. GitHub-13513
  • Magento no longer removes product tier prices when a scheduled update contains an update to the special price.
  • You can now save and duplicate a linked product. Previously, Magento did not duplicate the product, and displayed this error: Invalid data provided for linked products.
  • The store switcher now works in multistore deployments. Previously, the switcher redirected the user to the home page, not to the alternative store view as expected. Fix submitted by Janak Bhimani in pull request 19798. GitHub-19714

Cleanup and simple code refactoring

  • Fixed alignment of the details label on the order page in mobile view. Fix submitted by Arvinda Kumar in pull request 20301. GitHub-20299
  • Fixed rendering of the Add your text link on the Product page. Fix submitted by Nainesh Waghale in pull request 20224. GitHub-20221
  • Fixed misalignment of the import successful message icon in the Admin. Fix submitted by Kajal Solanki in pull request 19334. GitHub-19328
  • Corrected the alignment of Contact us area that is accessed from the storefront page footers. Fix submitted by suryakant-krish in pull request 19803. GitHub-19800
  • Fixed inconsistent spacing on the manage coupon codes page on the Admin. Fix submitted by Kajal Solanki in pull request 19659. GitHub-19657
  • Fixed misalignment of the tax rate checkbox on the Add New Tax Rate page. Fix submitted by suryakant-krish in pull request 19413. GitHub-19379
  • Fixed misalignment of the attribute set name heading border on the Attribute sets pop-up window. Fix submitted by suryakant-krish in pull request 19414. GitHub-19371
  • Fixed misalignment of elements on the shipping information page that Magento displays when you click Check Out with Multiple Addresses from the shopping cart. Fix submitted by [Arvinda Kumar in pull request 20564. GitHub-20563
  • Fixed misalignment of the Choose file button on the Select File to Import page. Fix submitted by suryakant in pull request 19580. GitHub-19579
  • Fixed formatting of the add link table that can be accessed from the Downloadable Information tab. Fix submitted by Kajal Solanki in pull request 18856. GitHub-18854
  • Fixed misalignment of the title of the order page that is accessed when you check a recent order in the sidebar of listing or account pages. Fix submitted by Parag Chavare in pull request 20501. GitHub-20500
  • Fixed misalignment of tab content on product pages in mobile view. Fix submitted by Parag Chavare in pull request 20469. GitHub-20468
  • Corrected misspelled argument name allowDrug to allowDrag in vendor/magento/module-catalog/view/adminhtml/templates/catalog/product/attribute/set/main.phtml. Fix submitted by Govind Sharma in pull request 19918. GitHub-19917
  • Fixed the misalignment of the customizable options label on Admin > Catalog > Product > Customizable Options. Fix submitted by Kajal Solanki in pull request 19493. GitHub-19492
  • Fixed problem with overlapping UI elements on the cart page when accessed from the mini cart. Fix submitted by Vishal Gelani in pull request 19839. GitHub-19836
  • Fixed alignment issue with the drop-down menu on the mini cart. Fix submitted by Kajal Solanki in pull request 19508. GitHub-19507
  • Fixed alignment issue with radio buttons on the shopping cart page. Fix submitted by Hitesh in pull request 20022. GitHub-20021
  • Fixed alignment of the bundle product radio button on the product page when you click Customize and Add to cart. Fix submitted by Parag Chavare in pull request 20519. GitHub-20518
  • Fixed alignment of the bundle product information on the configure product page for a bundle product when creating a new order. Fix submitted by Abrar Pathan in pull request 19502. GitHub-19501
  • The calender icon issue is now correctly aligned on the Advanced Pricing page of the Admin. Fix submitted by Kajal Solanki in pull request 18638. GitHub-18581
  • Fixed alignment issue of time fields in Admin > Configuration > General > Advanced Reporting in tablet landscape view. Fix submitted by Ajay Ajabale in pull request 20581. GitHub-20580
  • Fixed misalignment of the confirmation pop-up window that Magento displays in mobile view when you delete a product from your shopping cart. Fix submitted by Priti in pull request 20196. GitHub-20176
  • The addExpressionFieldToSelect method no longer modifies columns and instead inserts expressions into the _fieldsToSelect private variable (similar to how addFieldToSelect does). Fix submitted by Torben Höhn in pull request 19180. GitHub-17635
  • A typo in app/code/Magento/Deploy/Console/DeployStaticOptions.php has been corrected. Fix submitted by Pratik Oza in pull request 18733. GitHub-2686
  • Fixed alignment of options on the Admin edit widget page. Fix submitted by Govind Sharma in pull request 20114. GitHub-20113
  • Corrected rendering of the apply discount code field in the Tab portrait view of the shopping cart. Fix submitted by Ajay Ajabale in pull request 20281. GitHub-20278
  • Fixed issue where the horizontal scroll bar did not appear as expected on the compare products page in mobile view. Fix submitted by Arvinda Kumar in pull request 20368. GitHub-20367
  • Added missing bottom border to the list of customizable options on the product page when accessed from the Admin. Fix submitted by Eduard Chitoraga in pull request 20498. GitHub-20497
  • Corrected the position of the header for the design configuration table (Content > Design > Configuration). Fix submitted by Shikha Mishra in pull request 20072. GitHub-20024
  • When you try to save a widget that contains an unexpected character, Magento now displays an informative error message and does not save the widget. Previously, Magento saved the widget. Fix submitted by Burlacu Vasilii in pull request 19390. GitHub-4136
  • The catalog category merchandiser product list is no longer missing the move cursor in tile view. Fix submitted by Abrar Pathan in pull request 19817. GitHub-19816
  • Corrected alignment of the Detailed Rating field on the Edit Review page. Fix submitted by Yashwant Rokde in pull request 20132. GitHub-20120
  • Corrected alignment of the store switcher in Tab view. Fix submitted by Arvinda Kumar in pull request 20160. GitHub-20158
  • Corrected the number of products listed per row for desktop (4), tablet (3), and mobile (2) views. Fix submitted by Amol Chaudhari in pull request 20168. GitHub-20140
  • Hamburger menus no longer appear on pages that do not require menus. Fix submitted by Amol Chaudhari in pull request 20214. GitHub-20210
  • Fixed issue where drop-down toggle arrow did not close as expected on product page. Fix submitted by Nirav Patel in pull request 20241. GitHub-20240
  • The Send email confirmation popup Close button no longer overlaps with content. Fix submitted by Arvinda Kumar in pull request 19986. GitHub-19985
  • Corrected formatting issue on Catalog > Category > Product > Assign products page. Fix submitted by David Verholen in pull request 20094. GitHub-19052
  • Store switcher now works correctly on mobile devices. Fix submitted by Arvinda kKumar in pull request 20260. GitHub-20259
  • The order view invoice template is now displayed properly in tablet view. Fix submitted by ranee2jcommerce in pull request 20374. GitHub-20373
  • Fixed misalignment of the widget options on the edit widget page. Fix submitted by Govind Sharma in pull request 20114. GitHub-20113
  • Magento now identifies the shipping method in the Shipping section of the order review page for orders that are paid with using PayPal Express. Fix submitted by Nirav Kadiya in pull request 19788. GitHub-14712
  • Fixed checkbox alignment on the account information page. Fix submitted by suryakant-krish in pull request 19646. GitHub-19645
  • Fixed misalignment of search icons on the onAttribute page. Fix submitted by Abrar Pathan in pull request 19643. GitHub-19642
  • Fixed an alignment issue with the select and text boxes on the Advance Pricing page. Fix submitted by Kajal Solanki in pull request 19473. GitHub-19472
  • Corrected alignment issue with elements on the default email templates. Fix submitted by suryakant-krish in pull request 19574. GitHub-19573
  • Corrected typo in SalesRule/Model/ResourceModel/Coupon/Usage.php. Fix submitted by Milind Singh in pull request 19726. GitHub-19721
  • Fixed alignment of reload CAPTCHA icon on the Admin login page. Fix submitted by Govind Sharma in pull request 20914. GitHub-20911
  • Fixed alignment of the error message that Magento displays on the add or edit bundle product customizable options tab. Fix submitted by Kunj Joshi in pull request 20930. GitHub-20908
  • Fixed misalignment of the Orders and Returns section that is accessed from the footer of the orders page. Fix submitted by Amol Chaudhari in pull request 20817. GitHub-20816
  • The default design of the Edit and Remove items buttons on the wishlist page now match. Fix submitted by Abrar Pathan in pull request 20791. GitHub-20790
  • Fixed issues with the shadows that are associated with input box and radio buttons on storefront forms. Fix submitted by Abrar Pathan in pull request 20861. GitHub-20859
  • Fixed misalignment of the product option fields in the order summary of the checkout page. Fix submitted by Pratik Oza in pull request 20138. GitHub-20134
  • Fixed misalignment of fields on the configure product page that is accessed from the wishlist. Fix submitted by Priti in pull request 20558. GitHub-20760
  • Removed excessive white space from the top of CMS pages when displayed in mobile view. Fix submitted by ranee2jcommerce in pull request 20756. GitHub-20755
  • Fixed misalignment of the advanced search page’s price field in mobile view. Fix submitted by Govind Sharma in pull request 20159. GitHub-20157
  • Fixed misalignment of the View and Edit Cart link in the mini cart. Fix submitted by Rajneesh Gupta in pull request 20383. GitHub-20382
  • Fixed misalignment of values in the currency rate column in the Order & Account Information area of the New Memo page. Fix submitted by Dipti in pull request 20610. GitHub-20609
  • Added missing PHPDoc comments for methods throughout the code base. Fix submitted by Leandro F. L. in pull request 19826.
  • Fixed misalignment of the My Account page’s Recently Ordered check box in tab portrait view. Fix submitted by Ajay Ajabale in pull request 20155. GitHub-20143
  • Fixed misalignment of Schedule Update From field on the Admin category page when displayed in a browser set to 768 x 1147 resolution. Fix submitted by Amol Chaudhari in pull request 20403. GitHub-20402
  • The Widget Options left navigation block on the Add New widget Page now displays correctly in tablet view. Fix submitted by Dipti in pull request 20493. GitHub-20492
  • Fixed misalignment of logo on Admin home page. Fix submitted by suryakant-krish in pull request 19792. GitHub-19791
  • Fixed misalignment of reviews under My Recent Reviews area of the My account dashboard. Fix submitted by Priti in pull request 20801. GitHub-20800
  • Corrected the behavior of the Option’s New Option Type drop-down menu for customizable options. Fix submitted by dharmendra-wagento in pull request 20990. GitHub-20989
  • Fixed irregularities with updating order status. Fix submitted by Shikha Mishra in pull request 20349. GitHub-19258
  • The ui-component validation error event now bubbles upwards when an abstract element is nested in a field set. Fix submitted by Ravi Chandra in pull request 19812. GitHub-17926

CMS content

  • You can now delete from the media gallery browser any files and folders that are symlinked in pub/media. Previously, Magento left the image in the media gallery but displayed no feedback in the product interface.
  • Improved the display of images that are uploaded when you click the Insert Image button on a CMS page. Fix submitted by Eduard Chitoraga in pull request 20787. GitHub-20786

Configurable products

  • The DateTime class can now parse strings for all supported languages, not just English. Previously, converting from string to PHP DateTime object failed for locales other than en_US. Fix submitted by Thiago in pull request 18462. GitHub-18082
  • Selected images on the product page of a configurable product are now positioned correctly. GitHub-18410
  • You can now successfully save products with SKU lengths that are less than or equal to 64 digits. Previously, Magento threw a fatal error when you tried to re-save a child product after reducing the length of its 64-digit-long SKU. Fix submitted by Thiago in pull request 18462. GitHub-18082
  • The Cart Sales Rule now excludes already discounted products from further discounting through a coupon code. Fix submitted by Malyovanets Nickolas in pull request 19343. GitHub-14020
  • Translations for tier_price.phtml now work as expected. Previously, these translations were not included in js-translation.json and were not visible on the storefront. Fix submitted by Oleksii Gorbulin in pull request 19094. GitHub-19085
  • Sorting by a price for configurable products on category pages now works correctly when the Display Out of Stock Products setting is enabled.

cron

  • A new cron.log file dedicated to logging cron-related information has been added to Magento. This new log file reduces output previously sent to the system.log file, making it easier to find non-cron-related information in the system.log file. Fix submitted by Pieter Hoste in pull request 18209. GitHub-17190

Customers

  • We’ve added an additional check for the password hash for customers that have been created from the Admin without a password. Previously, customers created this way could not log in. Fix submitted by Yevhenii Dumskyi in pull request 19066. GitHub-19060
  • Magento now displays the same order total in the customer information orders grid and orders grid when an order is placed in a currency other than the base currency. Previously, Magento displayed the wrong order total in the Admin’s customer information orders tab. Fix submitted by Anuj Gupta in pull request 18650. GitHub-18618
  • Magento no longer displays the forgot password form while a customer is logged in but instead directs the customer to the customer dashboard. Fix submitted by Oleksii Gorbulin in pull request 19026. GitHub-18256
  • The reset password link in the password reset mail sent to customers when they click Reset password on the login page now permits customers to reset their password as expected. Fix submitted by p-bystritsky in pull request 19026. GitHub-18256
  • Magento now maintains alphabetical order for customer groups when you filter customers by group in the Admin. Previously, groups were sorted by ID. Fix submitted by Dmytro Cheshun in pull request 18117. GitHub-18101
  • Merchants can now edit a customer account if the customer’s password has expired. Fix submitted by Dmytro Cheshun in pull request 18308. GitHub-18162
  • Magento now displays the value of a custom customer address attribute in the column for that attribute when you create a custom customer address attribute and set it to be displayed in the Columns list. Previously, Magento added the customer code column to the Customer table, but left these columns blank.
  • You can now change payment methods after selecting store credit when creating an order from the Admin.
  • Customers can now be matched in customer segments based on the number of orders in a multi-site deployment.
  • We’ve improved the performance of the customer segment rule, which has improved site performance.
  • Magento no longer unchecks the default billing and shipping address checkboxes when you create or update a customer address using the API.
  • Magento now displays the list of additional customer addresses that are contained in the storefront customer address book as a grid, which has improved performance for customers with many additional addresses associated with their accounts.
  • When a customer uses a gift card to make a purchase, Magento now applies only the applicable amount to the invoice. Previously, the total amount of the gift card was applied to a customer’s store credit for a partial invoice.
  • Magento now assigns new accounts in multisite deployments to the customer group that is associated with the default website scope. Previously, a new customer created from the Admin had their customer group set to the default customer group on the default website scope.
  • Customers who have an address associated with a country that has not been set to allowed can now successfully reset their password. Fix submitted by Dmytro Cheshun in pull request 18179. GitHub-18170
  • Removed an unneeded space from the title of the My Account page in mobile view. Fix submitted by Amol Chaudhari in pull request 20725. GitHub-20723
  • Removed an empty block on the My Account page sidebar. Fix submitted by Pratik Oza in pull request 20630. GitHub-19139
  • The Magento\Customer\Model\Customer::getDataModel method has been optimized, which has reduced the time required to load customer accounts with many addresses.
  • State/Province field values are no longer required when creating an order from the Admin. Previously, Magento indicated that State/Province field values were required even though configuration settings indicated that these values were not required.
  • Magento now respects the number of lines permitted in a street address as set in Store > Configuration > Customer > Customer Configuration > Name and Address Options. Previously, Magento displayed the last saved values instead of the default value. Fix submitted by Ievgenii Gryshkun in pull request 20565. GitHub-13675
  • Images can now by default be successfully imported from HTTP and redirected to HTTPS. Previously, the image could not be uploaded. Fix submitted by Rahul Mahto in pull request 18900. GitHub-18839

Customer attributes

  • Magento now loads the customer attribute page as expected, and users can edit attributes, when attributes are set to default values. Previously, Magento did not completely load this page when attributes values were set to default.
  • Custom customer address attributes can now be updated when you edit an order’s billing address in the Admin.
  • You can now create a customer without a phone number when Show Telephone is set to optional. Previously, Magento displayed an informative error message and did not let you create the customer.
  • Magento now saves custom customer attributes as expected when EAV caching is disabled. Previously, directly saving customer information resulted in data loss. Fix submitted by Vishal Gelani in pull request 18571. GitHub-12479

Dashboard

  • You can now upload PDP images larger than 1920 x 1200 without compressing and downsizing the images first. Previously, when a merchant uploaded a high quality product image (larger than 1920 X 1200), Magento resized and compressed the image. Merchants can now set requirements for resizing and compression as well as compression quality and target width and height.
  • _sleep and __wakeup have been removed, and a new PHP.MD rule has been added to discourage PHP serialization.
  • Magento now validates new addresses when created from the address book telephone field on the My Account dashboard page. Fix submitted by Dipti in pull request 20262. GitHub-20261

Developer

  • Email messages sent from the command line (where the email loads into another block) can now be sent successfully. Fix submitted by p-bystritsky in pull request 18988. GitHub-10440

Directory

  • The Swagger definition for eav-data-attribute-option-interface has been corrected. Previously, when you created a REST call to an endpoint that returns an object of eav-data-attribute-option-interface and is_default is set to true, is_default returns an object instead of the expected Boolean. Fix submitted by Hiren Patel in pull request 20913. GitHub-18525
  • crontab now updates all currency rates daily as expected. Previously, crontab updated only a subset of the enabled currencies. Fix submitted by Denis Papec in pull request 18981. GitHub-18580

Downloadable

  • You can now delete downloadable product links without first deleting sample links.

EAV

  • You can now use the OptionManagement.delete method to programmatically delete a product attribute that converts to false. Previously, Magento threw an exception. Fix submitted by Patrick McLain in pull request 18720. GitHub-13083
  • You can now use an attribute set on the product create page after moving the attributes from one attribute group to another.
  • The customer EAV decimal attribute now accepts a value of 0. Fix submitted by Shikha Mishra in pull request 20130. GitHub-20030
  • The Magento storefront now correctly displays products with a custom attribute of type Media Image. Fix submitted by David Verholen in pull request 20096. GitHub-19054
  • Magento no longer changes the source_model when you create an attribute option through the API. Previously, the source_model of an EAV attribute was set to Magento\Eav\Model\Entity\Attribute\Source\Table when updating an EAV attribute’s options through the API. This eliminated the ability to update this attribute’s options through the Admin. Fix submitted by Pieter Hoste in pull request 18244. GitHub-13156
  • Magento no longer throws an SQL Join error when you use a custom EAV entity with the standard eav_entity entity table. Previously, this usage resulted in an integrity constraint violation. Fix submitted by Roman Strelenko in pull request 18437. GitHub-18131

Email

  • The return path e-mail variable system/smtp/return_path_email now works as expected.
  • Email subject headers now support UTF-8 encoding. Fix submitted by Alexey Varlamov in pull request 19978. GitHub-19977

Frameworks

  • Magento no longer logs an error when you include properly escaped special characters in store view names. Previously, Magento logged errors in the exception.log.
  • Magento now attempts to reconnect when a MySQL timeout occurs. Previously, Magento displayed an informative PHP-related message and did not attempt to reconnect.
  • You can now set all products that currently have Set Product as New set to yes set to no. This change affects bulk updates, CSV imports, and scheduled updates.
  • Attributes in flat tables are now updated after the product is saved when the catalog product flat index is turned on and the indexer is set to Save on Update.
  • dev/tools/grunt/configs/themes.js has been removed from the .gitignore file and added to the GitHub repository. Previously, localthemes.js was included in .gitignore and replaced during a Magento update. Fix submitted by Torben Höhn in pull request 19350. GitHub-18949
  • Magento now autoloads vendor root folders and can now run with custom Composer vendor directories. Previously, Magento’s autoloader registration failed to generate the correct path when using the COMPOSER_VENDOR_DIR setting to specify a vendor path outside of the Magento installation root. Fix submitted by Rus0 in pull request 18849. GitHub-17753
  • Newly added links on the customer dashboard are now shown as current when the link path has been constructed from both default and new elements. Previously, the link was added, but not shown in the current state as expected. Fix submitted by Eduard Chitoraga in pull request 19134. GitHub-19099
  • The fileUploader form element in the ui_component form now works as expected. Previously, during file upload, the countable interface was not implemented, and Magento threw this error: Error Message : Warning: count(): Parameter must be an array or an object that implements Countable. Fix submitted by gmachure in pull request 19249. GitHub-19247
  • Interception cache compilation has been improved, and custom profiler records are now executed in less than a second. Previously, profiled methods consumed about 70% of the first page load after cache:flush from either the command-line interface or the Admin. Fix submitted by Patrick McLain in pull request 18648. GitHub-17680
  • Magento\Framework\Webapi\Rest\Response\Renderer class’s _formatValue method has been refactored to handle ampersands correctly. Previously, an ampersand in any customer text field when using the web API doubled the encoding. GitHub-18361
  • Deprecated interface \Magento\Framework\Option\ArrayInterface has been replaced with \Magento\Framework\Data\OptionSourceInterface in lib/internal/Magento/Framework/Option/ArrayPool.php. Fix submitted by Milind Singh in pull request 20248. GitHub-20064
  • Corrected invalid return type in docblock in Magento\Framework\HTTP\PhpEnvironment\Request::getHeader(). Previously, the docblock of the Magento\Framework\HTTP\PhpEnvironment\Request::getHeader() method stated that it would return a bool or an instance of Zend\Http\Header\HeaderInterface(). However, this method returned either a bool or a string. Fix submitted by Milind Singh in pull request 21035. GitHub-21034
  • Magento now throws LogicException($message, 0, $e) instead of LogicException($message) as needed when running validation for communication configuration (communication.xml). Previously, the validator in Magento\Framework\Communication\Config\Validator did not propagate exceptions, which obscured the cause of the error. Fix submitted by Artsiom Bruneuski in pull request 18416. GitHub-14555
  • JavaScript translation issues on the modal buttons that Magento displays when removing items from the product compare page have been resolved. Fix submitted by Max Fickers in pull request 20109. GitHub-19705
  • We’ve added support for use statements in web API interfaces and the use of non-FQN class names in doctypes. Previously, you could not import class names in interfaces that were used for the web API. Fix submitted by Riccardo Tempesta in pull request 17424. GitHub-1537
  • Magento/Framework/HTTP/Adapter/Curl.php now supports setting an HTTP version. Fix submitted by SikailoISM in pull request 19845. GitHub-19442
  • Magento can now read responses from third-party servers that use HTTP/2 if your server also uses HTTP/2. Previously, this inability to read requests from third-party servers that use HTTP/2 prevented access to Magento Marketplace. Fix submitted by Vova Yatsyuk in pull request 19143. GitHub-19127
  • The AMQP helper has been updated to use host, username, and password configuration from the instance under test. This allows tests to run when the AMQP service is not using default credentials or available on localhost. Previously, the host value in this helper was hardcoded. Fix submitted by Patrick McLain in pull request 18978. GitHub-18953

Cache framework

  • Problems with cache-cleaning for product pages for simple products that are associated with configurable products have been resolved. and as a result, product pages now accurately display out-of-stock status. Previously, when an associated product went out-of-stock, Magento did not update the product page of the configurable product unless you cleaned the cache. GitHub-8009
  • The images cache can now be flushed from the Admin (Admin > System > Cache Management and click Flush Catalog Images Cache). Previously, you could not delete the directory, and Magento displayed an error on the cache management page.
  • Magento now removes disabled products as expected from the flat product table when Catalog Flat Product is enabled.

Configuration framework

  • You can now enable shared catalogs using the config:set command. Previously, this command enabled the shared catalog but did not create the necessary permissions to access it.

Data framework

  • Class \Magento\Framework\Data\Form\Element\Fieldset now calls the getBeforeElementHtml method. Fix submitted by Burlacu Vasilii in pull request 18798. GitHub-2618

Event framework

  • events.xml can now have child nodes. Fix submitted by Lisovyi Yevhenii in pull request 19146. GitHub-15931

JavaScript framework

  • Wishlist names can now contain apostrophes. Previously, a wishlist whose name contained an apostrophe could not be edited or deleted.

Message framework

  • Module names can now contain numbers. Previously, magento/framework-message-queue/etc/queue_base.xml contained a pattern that did not allow numbers to be used in instanceType, which resulted in the invalidation of custom message consumers in this file.

General fixes

  • The navigation arrows in fotorama now stay visible after you close the zoomed fotorama. Fix submitted by Luuk Schakenraad in pull request 18590. GitHub-18585
  • You can now customize the view of tab and accordion components by using mixins to redefine the default variables in the scope of a custom theme. Fix submitted by Dmytro Cheshun in pull request 18730. GitHub-18729
  • Content in confirmation pop-up windows on the Admin no longer overlap the Close button. Fix submitted by Dmytro Cheshun in pull request 19264. GitHub-19263
  • You can now update database credentials from the command line in non-interactive mode using bin/magento setup:config:set. Fix submitted by aheadWorks Capital SIA in pull request 18970. GitHub-18965
  • The error message displayed on the Add Product Attribute page has been improved. Fix submitted by Aman Agarwal in pull request 17800. GitHub-17754
  • The datepicker icon is now correctly aligned in the Admin. Fix submitted by Yaroslav Rogoza in pull request 18627. GitHub-18605
  • The magnifier now disappears as expected when a user moves their cursor off an image. Fix submitted by gwharton in pull request 18702. GitHub-15035
  • Product pages that are included in a related products rule that uses a Price (percentage) condition now load correctly. Previously, loaded pages were blank.
  • Magento now displays the appropriate thumbnail image for configurable products in requisition lists. Previously, Magento displayed the default placeholder thumbnail image for all configurable products.
  • The Select All and Select Visible buttons on the notification page now work as expected. Previously, these buttons behaved the same. Fix submitted by Shikha Mishra in pull request 19302. GitHub-19285
  • The note that describes the Use in Layered Navigation: Filterable (no results) property now better describes the property. Fix submitted by Vladyslav Podorozhnyi in pull request 19037. GitHub-14007
  • Magento no longer throws SQL errors when table prefixes are used. Fix submitted by Peter O’Callaghan in pull request 18412. GitHub-18357

Gift cards

  • Magento now consistently validates gift card prices according to the constraints of the relevant store locale.
  • Magento now displays the correct creation date for a gift card when the Lifetime field is populated.
  • Fixed the rendering of the check notifications counters icon on the Admin. Fix submitted by Abrar Pathan in pull request 19053. GitHub-18887
  • old_path: new_path path mappings have been added for JavaScript files that have been relocated to requirejs-config.js. Fix submitted by rbayet in pull request 19583. GitHub-19291, GitHub-16302
  • Calling getCurrentUrl on a store no longer adds the ___store parameter when store code in URL is set to yes and the current store is not the same store requested in the URL. Fix submitted by Nazar in pull request 19135. GitHub-18941, GitHub-16302
  • The Click for price button on the home page now works as expected. Fix submitted by Ravi Chandra in pull request 19663. GitHub-15922

Gift message

  • Magento no longer displays unselected gift options when a customer selects Check Out with Multiple Addresses for an order. Previously, Magento displayed unselected gift options for the order.
  • Fixed misalignment of the Edit and Remove buttons on the gift option popup that Magento displays when a customer adds a product to the shopping cart. Fix submitted by Ajay Ajabale in pull request 20605. GitHub-20604

Gift registry

  • Magento now shows the correct price for configurable products in a shared gift registry. Previously, Magento displayed the original price instead of the special price for configurable products.

Gift wrapping

  • You can now add gift wrapping to the shopping cart to an already added product without having to add an additional product.

Google Analytics

  • referenceContainer has been changed to referenceBlock in the Google Analytics module. Fix submitted by Petar Sambolek in pull request 18290. GitHub-16497

Google Tag Manager

  • The Google Tag Manager AddToCart event now fires reliably on the product page when Stores > Configuration > Sales > Checkout > Redirect to Shopping Cart is set to yes.

Import/export

  • Magento now displays an informative error after you run check data, and also blocks import and product creation, when SKU strings are too long. Previously, the check data process permitted you to proceed with the import, but the import failed due to a system error. Fix submitted by Ravi Chandra in pull request 18639. GitHub-17865
  • Magento now successfully imports products that have a fixed price custom option with a price of zero. Previously, the importer failed when trying to update products with a price of zero. Fix submitted by Antun Matanović in pull request 18284. GitHub-17616
  • The memory required to export the media gallery has been significantly reduced. GitHub-17320
  • We’ve resolved the following issues with imported images:

    • images of all sizes reverted to the default placeholder size after import.

    • images that were removed through the Admin before import returned after import. Magento now displays an informative error message if images are not imported as expected.

  • Special characters in the CSV import file no longer trigger a general system exception. Previously, special characters (for example, ƒ, ª, and ) halted the check data phase of import.
  • URL Key columns that contain accented characters are now converted properly after the import of a CSV file. Previously, if you manually assigned a URL key to a product in the Admin that contained an accent character or punctuation, Magento converted it to the regular character or removed it.
  • Magento now correctly updates existing product URLs during import. Previously, Magento update existing URLs with the new URLs, but displayed a 404 error if you tried to access the product from the new URL.
  • Magento now retains product order within a category after import.
  • You can now properly set data for drop-down attributes during product import in deployments with multiple storeviews.
  • If you enter a value of zero for a customer group price discount by percentage when setting advanced pricing for a product, Magento now prompts you to enter a valid value. Previously, Magento threw an error.
  • The import process now supports add_update along with the default behavior append. GitHub-6193
  • The upsert category process during product import now generates freshly created category URL rewrites globally and not just for the default scope. Previously, Magento created URL rewrites for the default website scope only. Fix submitted by utietze in pull request 18271. GitHub-18234
  • Magento now indicates correct stock status (in stock/out-of-stock) after importing products that have an indicated quantity but a status of out-of-stock from a CSV file. Previously, Magento imported the product quantity correctly, but not the stock status. Fix submitted by p-bystritsky in pull request 20180. GitHub-15950
  • We’ve resolved multiple issues that users previously encountered when importing configurable products with images and virtual products. Previously, image import failed under certain circumstances, and Magento displayed these messages: Imported resource (image) could not be downloaded from external resource due to timeout or access permissions in row(s) and Products are imported but configurable product has no image in Magento. Fix submitted by Rajneesh Gupta in pull request 20127. GitHub-20098
  • \Magento\ImportExport\Block\Adminhtml\Export\Filter::_getSelectHtmlWithValue() method no longer overwrites the $value argument. Previously, the same name was used for different $value variables. Fix submitted by Rajneesh Gupta in pull request 20625. GitHub-20624
  • Magento now exports configurable products based on swatches with the correct Admin and Default Store View labels. Previously, the configurable_variations column for these configurable products contained the wrong values after import.

Infrastructure

  • Magento now supports Elasticsearch 6.x. Fix submitted by Romain Ruaud in pull request 21458.
  • Magento now supports Redis 5.0.
  • Expected backup and restoration functionality has been restored and MySQL View support is supported while preserving backward compatibility with pre-existing modules. Fix submitted by community member Stepan Furman in pull request 21151.
  • transparent.js has relocated, and orders can now be created from the Admin using PayflowPro and Authorize.Net. Previously, orders created from the Admin using PayflowPro failed, and Magento displayed an informative message indicating that an account number was invalid. Fix submitted by Patrick McLain in pull request 19764. GitHub-19763
  • json_encode errors are now caught and logged in the console.log. Previously, the JSON serializer threw an error, which blocked all frontend behavior. Fix submitted by Tommy Quissens in pull request 16154. GitHub-14937
  • app/bootstrap.php has been updated to correctly define supported PHP versions. Fix submitted by Fabrizio Balliano in pull request 19455. GitHub-19453
  • An incorrect parameter in getCreatedAtFormatted($format) has been corrected. Fix submitted by Jaimin Sutariya in pull request 19537. GitHub-17442
  • A syntax error in magento2/lib/internal/Magento/Framework/Cache/Backend/Database.php has been corrected. Fix submitted by Nirav Kadiya in pull request 19634. GitHub-13309
  • Magento no longer throws an error when you send an email from the command line. Previously, Magento threw an exception because $debugHintsPath was missing. Fix submitted by p-bystritsky in pull request 18991. GitHub-10440

  • Message queue topic names generated as a result of asynchronous and bulk REST calls are now based on service contract names. Currently, topic names reflect the PHP class and method names that should be invoked to handle processing. For example, a topic that was named using the older conventions (async.V1.customers.POST) might be named async.magento.customer.api.accountmanagementinterface.createaccount.post. This new naming is more semantic and allows the reuse for other Magento services.

Integration

  • Magento no longer throws an exception when you navigate to the OAuth page (Backend > Stores > Configuration > Services > OAuth). Fix submitted by Mahesh Singh in pull request 18750. GitHub-18655
  • The Last Logged In value displayed on the Admin’s customer account page is now updated as expected when a customer is authenticated through REST. Fix submitted by Prakash in pull request 18973. GitHub-17488
  • Integrations are no longer reset after running the bin/magento setup:upgrade command. Fix submitted by Pratik Oza in pull request 18273. GitHub-12095

Klarna

  • Added support for Magento 2.2.0 through 2.2.1.

  • Changed types for the specific order line items.

  • Corrected issues in the installation and upgrade scripts.

  • Added a try-catch block around checking customer default addresses.

  • Added check to confirm that website T&Cs have been agreed to before authorizing payment.

  • Fixed error with virtual products.

Layered navigation

  • You can now filter products based on color.

Magento Shipping

  • Updating an order destination prior to creating a shipment now results in the shipment being sent to the new destination.

  • Shipments that contain the same item across multiple packages will now correctly update the shipped amount.

MSRP

  • MAP (minimum advertised price) prices for the simple products that belong to a configurable product are now supported. MAP prices for these products are now successfully handled and displayed on the configurable product page and the category page display of the configurable product.

Newsletter

  • Magento now sets the correct store_id for each store when a customer subscribes to a newsletter from more than one store. Fix submitted by Eduard Chitoraga in pull request 19195. GitHub-19172
  • Customers are no longer unsubscribed to a newsletter as a result of a password reset email request when Newsletter Need to Confirm is set to yes on the Admin. Fix submitted by Janak Bhimani in pull request 18795. GitHub-17954
  • Magento now permits only one newsletter subscription per email address. Previously, when a website had multiple store views, a customer could subscribe multiple times to a newsletter with one email address.
  • Magento now displays an informative message when you click the unsubscribe link in the newsletter email.
  • You can now add a custom field to a newsletter in the position of your choice by editing the newsletter configuration file (app/code/Magento/Newsletter/etc/adminhtml/system.xml). Previously, you could add a new field but could not select where it would appear in the newsletter. Fix submitted by Burlacu Vasilii in pull request 19419. GitHub-19418
  • A logged-in user who already has an account can now use the footer to sign up for a newsletter subscription. Previously, this user received an error message, and Magento did not subscribed her to the newsletter. Fix submitted by Ravi Chandra in pull request 19164. GitHub-8952
  • If a customer tries to subscribe to a newsletter with an email that already has a subscription associated with it, Magento now warns the customer rather than throws an exception. Fix submitted by Dharmesh Vaja in pull request 19416. GitHub-19404
  • You can now search for or reset the filter on newsletter problem reports from the Admin. Previously, Magento did not display filter reports when adminstrators used FireFox. Fix submitted by Govind Sharma in pull request 20829. GitHub-20828

Orders

  • The address form in the Admin order creation workflow has been refactored to improve performance.
  • Administrators now need sales email privileges to send order comment emails to customers.

Page cache

  • Pages opened by URL redirect now display prices in the currency set for the appropriate store. Previously, the opened page contained prices in the default currency (USD) rather than the selected currency for the store.

Payment methods

  • Magento now populates the estimated billing address field on the checkout page with the default billing address as expected when the cart contains virtual products only. Previously, when a signed-in customer with different default shipping and billing addresses had a cart containing only virtual products, the cart estimation field was populated with the default shipping address information instead of the default billing address information. Fix submitted by Lucas Calazans in pull request 18095. GitHub-17744
  • Invoice PDFs now include a populated FTP (Fixed Product Tax) amount field for orders when using Weee tax and FPT is enabled. Previously, this information was displayed in order and invoice views, bot not captured in the PDF. Fix submitted by Mahesh Singh in pull request 19061. GitHub-18617
  • When an order placed with PayPal fails during checkout, Magento no longer processes payment for the order. Previously, orders that failed during checkout when being processed through PayPal were processed.
  • A pop-up window no longer blocks completion of checkout using Braintree PayPal on a mobile device.
  • When a customer selects PayPal as a payment method but then applies a gift card, Magento now reverts to zero subtotal checkout. Previously, the order failed at the review step if a gift card were applied.
  • Orders created with eWay as a payment method now contain the same credit card information, which is included in the Authorize.Net response. Previously, the order did not contain any information regarding the credit card.
  • Magento now displays successful orders paid for with eWay. Previously, Magento did not display completed errors even after the transaction was accepted by eWay.
  • The getList() method now returns the vault data total count as expected. Fix submitted by Andrea Parmeggiani in pull request 19707. GitHub-19706
  • You can now use REST to create an order without payment. Previously, when using REST to submit an order without a payment, Magento threw an error. Fix submitted by Vishal Gelani in pull request 18521. GitHub-15652
  • Payment methods are now grouped properly in the core source model. \Magento\Payment\Model\Config\Source\Allmethods class in the Magento core can be used as a source model for backend configuration fields. It displays available payment methods grouped by payment provider. We’ve added groups for previously missing payment options (PayPal, Authorize.Net, and Braintree methods). Fix submitted by Wojtek Naruniec in pull request 19665. GitHub-19664
  • Fixed misalignment of the save-for-later checkbox on the Admin create order credit card details page. Fix submitted by Kajal Solanki in pull request 20233. GitHub-20232
  • The Authorize.Net payment method has been migrated to the accept.js API on both the storefront and Admin.
  • PayPal Express Checkout has been updated to checkout.js v4. This API replaces the deprecated API Express Checkout - NVP/SOAP. This update provides Magento with a single integration but with multiple payment options that merchants can choose when activating the integration​. See PayPal Express Checkout
  • You can now place an order using Cybersource payment from the Admin.
  • Administrators can now set additional Cybersource profile credentials (Profile ID, Access key, Secret Key) from the Admin and place an order from the Admin when different credentials are used on website level. Previously, Cybersource denied payments when a merchant deployed their Admin on a different domain than the store.
  • Tax is now calculated as expected for virtual products when PayPal is used as a payment method.

Performance

  • New customer address handling improves the processing of many addresses on the Admin customer details page. This functionality was rewritten with UI components to increase platform performance, which in turn facilitates the management of customers with 3000 and more addresses. This refactoring includes these changes:

    • All actions on the Customer Addresses tab are now performed asynchronously with AJAX. This tab now contains the default billing address and default shipping address UI component blocks, customer addresses listing or grid, and customer address form in a modal window.

    • \Magento\Customer\Model\Customer\DataProvider has been replaced by \Magento\Customer\Model\Customer\DataProviderWithDefaultAddresses to support the asynchronous management of customer addresses.

Product video

  • You can now pause product videos on YouTube on storefronts running on Internet Explorer 11.x.

Quote

  • You can now update a shopping cart that contains a reserved order number (for example, 000000651). Fix submitted by Burlacu Vasilii in pull request 19130. GitHub-19101
  • You can now use REST to set billing information for a customer (customerId) with an existing address. Previously, Magento threw an exception during address validation. Fix submitted by Patrick McLain in pull request 18704. GitHub-17485
  • You can now request a quote on a storefront running on iOS 11.3.1.
  • We fixed an issue with inaccurate floating point calculations during checkout. Fix submitted by Jay Ghosh in pull request 18185. GitHub-18027
  • Magento now saves the correct quote_item_id values for products during checkout for an order being shipped to multiple addresses. Fix submitted by Mahesh Singh in pull request 19192. GitHub-18349

Reports

  • Administrators with their role scope set to custom can now view the abandoned carts report.
  • Magento no longer displays a negative number in the dashboard to represent a canceled order. Fix submitted by Nirav Patel in pull request 19372. GitHub-18754
  • Magento now refreshes reports statistics as expected when you select the Refresh Lifetime Statistics option from the Actions menu of the Reports > Refresh Statistics page. Previously, you were redirected to a 404 page when you selected this menu option. Fix submitted by Eduard Chitoraga in pull request 20820. GitHub-20819
  • Magento now displays correct prices for products at checkout when a customer uses a credit card and Authorize.Net is enabled. Previously, order items had the original price of $0.0. Fix submitted by Patrick McLain in pull request 18768. GitHub-16050

Reviews

  • Administrators can now access product ratings in deployments with multiple websites running different locales. Fix submitted by Saphal Jha in pull request 18888. GitHub-18192
  • The Save and Next and Save and Previous buttons in Marketing > Reviews now work as expected.
  • You can now add a product review from the Admin. Previously, when you clicked New Review, Magento displayed this error: Error message showing : A technical problem with the server created an error. Try again to continue what you were doing. If the problem persists, try again later. Fix submitted by Suneet K. in pull request 20146. GitHub-20122
  • Pending Reviews are now correctly labeled under System > User Roles > Add New Role > Role Resources, and Magento now displays a new Pending reviews menu under Marketing > User Content. Previously, Magento displayed the Reviews menu twice. Fix submitted by Piyush Dankhara in pull request 20936. GitHub-20924

Rewards

  • Customers are now subscribed as expected to email notifications about reward points.
  • Magento now allocates rewards points for converting an invitation to a customer when Require Emails Confirmation is set to yes.
  • The order status label on the customer order status page can now be translated. Fix submitted by p-bystritsk in pull request 19182. GitHub-14849
  • /V1/orders/{id} now retrieves information about used reward points.

Return Merchandise Authorizations (RMA)

  • Magento now displays the correct amount in the Remaining Quantity field after Magento has processed a return.
  • Return attributes that have the Values Required attribute set to no no longer break the storefront display of those attributes.
  • Administrators can now process returns when a request includes a required image attribute. Previously, the Return Items tab displayed a validation error even though the image had been uploaded, and if you clicked on Details, Magento displayed this message: Please select a file.
  • You can now return bundle products from the Admin. Previously, when you clicked Submit Returns, Magento displayed an informative error message, and did not create an RMA.

Sales

  • You can now remove a custom price from a product during order creation from the Admin.
  • The message that Magento displays when a merchant tries to create a credit memo for an order with no shipping charges has been made more informative. Fix submitted by Burlacu Vasilii in pull request 18844. GitHub-6731
  • You can now print order information from the customer dashboard. Previously, when you tried to print order information from the customer dashboard, Magento displayed this error: Fatal error: Call to a member function getRealOrderId() on null in /vendor/magento/module-sales/Block/Order/PrintShipment.php. Fix submitted by Pratik Oza in pull request 18272. GitHub-10530
  • Magento no longer marks email as not sent when the email copy fails due to exception. Previously, Magento marked this email as not sent, and subsequently continued to resend the email. Fix submitted by Petar Sambolek in pull request 18288. GitHub-17152
  • The Add to Cart button in the Recently Ordered block now works as expected. Fix submitted by Oleksandr Miroshnichenko in pull request 19039. GitHub-13157
  • Magento now displays bundle products’ child products on the My Account > My Orders > View Order page. Fix submitted by Torben Höhn in pull request 19318. GitHub-16434
  • You can now issue a partial refund to store credit for an order made with an online payment method.
  • You can now create a credit memo for an order that contains taxes and discounts. Previously, when you tried to create this credit memo, Magento displayed an informative error.
  • You can now create a credit memo for an order with no payment required. Previously, when an order was placed with no payment required, the Credit Memo button was not displayed on the order.
  • Orders for bundle products created from the Admin now display correct product prices.
  • Company logos are now displayed correctly in printed PDF versions of invoices and shipment statements.
  • The Sales table now displays company information in billing and shipping addresses.
  • Magento no longer adds giftwrap tax to a credit memo twice.
  • Magento now displays product price and shipping costs in the default currency that was configured for that specific website for orders created from the Admin. Previously, when you have multi-site configuration with different default currencies for each website, the product and shipping prices shown while creating an admin order are incorrect.
  • Magento now displays a success message when you create an order through the Admin and the create shipment and Email copy of invoice checkboxes are checked. Fix submitted by Surabhi Srivastava in pull request 20142. GitHub-19942
  • Files uploaded for custom options can now be downloaded even when the product option is no longer available. Previously, these files could not be downloaded. Fix submitted by Mahesh Singh in pull request 20354. GitHub-20277
  • Fixed an incorrect class name on orders and returns page on the Admin. Fix submitted by Shikha Mishra in pull request 19784. GitHub-19780
  • Fixed misalignment of the Update Qty button on the sales order invoice. Fix submitted by Kajal Solanki in pull request 19799. GitHub-19796
  • Credit memos now accurately calculate refunds when default shipping charges are changed to zero. Fix submitted by Wojtek Naruniec in pull request 19900. GitHub-19899
  • The transportBuilderByStore class has been removed. Previously, this class was the cause of undesired repeat emails. Fix submitted by gwharton in pull request 18471. GitHub-7739
  • The last_trans_id column of the sales_order_payment table has been updated to handle the full order reference values for Amazon and Klarna extensions. Fix submitted by Ian Cassidy in pull request 18620. GitHub-18615
  • You can now programmatically cancel an invoice when the invoice state is set to STATE_PAID. Fix submitted by Max O in pull request 19462. GitHub-18509
  • The performance of the Admin order creation page when handling many addresses has been improved.
  • Magento now displays bundle options on the Items Ordered tab of the My Account order page. Fix submitted by Vishal Gelani in pull request 19254. GitHub-16434
  • The email that customers receive after completing an order now contains tracking information for their order only. Previously, Magento included tracking information for other orders, too. Fix submitted by Nazar in pull request 19981. GitHub-19887

SalesArchive

  • Archived orders no longer reappear in the Order Management table after cron runs.

SalesRule

  • The sales rule indexer now runs without error. Previously, the sales rule indexer returned an error during reindexing because of the Magento_AdvancedSalesRule module.
  • The payment method option is now displayed under the shopping cart rules condition tab. Previously, when you navigated to Marketing > Promotions > Cart Price Rules and opened the Conditions tab on a rule, Magento did not display payment method options. Fix submitted by p-bystritsky in pull request 20042. GitHub-12549
  • The default sort order field now works as expected on the Catalog Search results page.
  • Searching for a synonym that contains a hyphen and number now returns the same results as any other search term in the group.
  • Layered navigation for Elasticsearch now includes all product sizes. If the Filterable (with results) option is set for a product attribute, then:

    • Layered navigation includes only those filters for which matching products can be found.

    • Any attribute value that already applies to all products shown in the list should still appear as an available filter.

    • Attribute values with a count of zero (0) product matches are omitted from the list of available filters.

See Filterable attributes for more information.

  • Full text search for Elasticsearch no longer includes the date attribute.
  • Layered navigation results no longer include price ranges that contain no products.
  • Magento now returns a customized layout handle when there are no results for a search. This customized layout handle supports the addition of custom blocks, which permits you to change the layout of the No results page. Fix submitted by Yevhenii Dumskyi in pull request 18069. GitHub-18038
  • Elasticsearch now correctly returns only products whose SKUs contain dashes when your search criteria specifies SKUs that contain dashes. Previously, search results contained unmatched products as well as products whose SKUs contained dashes. Fix submitted by Nazar in pull request 20727. GitHub-20716, GitHub-20689, GitHub-9988

Shipping

  • Magento now displays the appropriate error message when free shipping is not available for an order during check out. Fix submitted by vaibhavahalpara in pull request 18507. GitHub-17977
  • Shipments created through REST now return tracking information as expected. Previously, Magento created shipment notifications without a tracking number when a shipment was created using REST.
  • Table rates now work as expected when using the AE code (Armed Forces Europe) when calculating weight vs destination table rates.
  • Magento now uses shipping table rates from the correct store in multistore deployments.
  • Magento no longer throws an exception when a customer tries to place an order whose components will be shipped to different addresses. Fix submitted by Govind Sharma in pull request 19941. GitHub-19940
  • Fixed misalignment of elements on the shipping information page that Magento displays when you click Check Out with Multiple Addresses from the shopping cart. Fix submitted by Arvinda Kumar in pull request 20564. GitHub-20563
  • Magento now uses version 6.0 of the DHL XML Services schema for the DHL shipping method.

Sitemap

  • Sitemaps now display correct base URLs for multi-store deployments. Fix submitted by Toan Nguyen in pull request 18228. GitHub-17999

Staging

  • An administrator with a custom (limited) role can now edit and schedule updates to CMS content pages.
  • Shopping cart price is now updated as expected in staging preview mode.
  • Restricted users with access to specified sections can now save a scheduled update. Previously, Magento threw a forbidden error.
  • Updates containing zero objects are now removed as expected from the dashboard. Previously, Magento did not remove updates with zero objects.
  • You can now successfully create a CMS static block and schedule it for a staging update. Previously, after the update, Magento displayed an empty container on top of the page instead of the CMS content block.
  • Magento no longer throws an error when you use REST to update a product’s special price if the product previously had a scheduled update to its special price or had a special price set from the Admin.

Store

  • The switcher-option’s link Magento/Store/view/frontend/templates/switch/languages.phtml template has been modified to support navigating back to previous pages. Previously, you could not navigate back to the previous store view when you clicked the Back button when viewing the store on Firefox. Fix submitted by Mobecls in pull request 19037. GitHub-14007
  • You can now define the root_category_id in the project config.php. Fix submitted by Lars Roettig in pull request 18958. GitHub-18956

Swatches

  • Store views now show the correct swatch values. Fix submitted by Malyovanets Nickolas in pull request 18988. GitHub-17890
  • Product images now display the color option you chose when you applied a color filter in layered navigation. Previously, wrong colors were randomly displayed.
  • You can now change the size of a swatch image as expected. GitHub-6382
  • All thumbnail images reload as expected after you click on a configurable option when a configurable product detail page has more than fourteen thumbnail images. Previously, not all thumbnail images reloaded.
  • You can now change an attribute type from swatch to dropdown without using data. Previously, changing an attribute type from swatch to dropdown deleted swatch options for all attributes. Fix submitted by Pieter Hoste in pull request 20421. GitHub-20396
  • Fixed styles on the Add Swatch page.

TargetRule

  • Magento no longer throws an exception when Target Rules are set to a rotation mode other than SHUFFLE. (You can set rotation modes in Admin > System > Configuration > Catalog > Catalog > Rule-Based Product Relations.)
  • Magento no longer throws a fatal error when price is used in a Target Rule for actions.

Tax

  • The Not yet calculated string for the tax field in the checkout page’s summary section can now be translated. Fix submitted by p-bystritsky in pull request 19174. GitHub-18939, GitHub-7849
  • Credit memos now include only the taxes on the product itself as expected. Previously, the credit memo included the shipping tax as well even when shipping costs were not refunded.
  • Tax is no longer added when a customer group is changed to Valid VAT ID - Intra-Union, which has no tax rules assigned to it.
  • Tax reports now correctly calculate taxes for orders that are placed in a zip code that has two or more tax rates assigned.
  • Magento no longer uses the default tax information set in Stores > Configuration > Sales > Tax customer, quote, and order data. Fix submitted by Nirav Kadiya in pull request 19387. GitHub-16684

Testing

  • Integration tests now respect module status as defined in config-global.php. This permits you to enable only the modules you typically keep enabled while still saving system resources. Fix submitted by Pratik Oza in pull request 18201. GitHub-15196
  • Unit test annotations now assert exception messages correctly. GitHub-6731

Theme

  • You can now upload favicons and logo when editing headers for a store view. Previously, Magento threw an error. Fix submitted by Wiard van Rijin pull request 18851. GitHub-18688
  • The text attribute implemented on the product page within the mobile theme now fluidly displays the entire text value. Previously, long values were truncated.
  • The user agent rule now sets correct templates for product pages. Previously, the footer.phtml and absolute_footer.phtml templates were loaded from the desktop theme instead of the mobile theme, regardless of the user agent.
  • We’ve improved the display of the navigation menu on mobile deployments. Previously, Magento displayed only a portion of any submenu accessed from a top menu.
  • Wishlist and compare links now appear for related products in portrait mode in mobile view.
  • Text now remains in the header area when you resize a page in deployments that are running in Internet Explorer.
  • Clicking on the store logo on the home page now reloads the page. Fix submitted by gwharton in pull request 19198. GitHub-19142
  • Fixed misalignment of the Add to cart button on the bundle product page in portrait orientation in mobile view. Fix submitted by Ajay Ajabale in pull request 20195. GitHub-20193
  • Fixed alignment issue with sort results on list product page. Fix submitted by suryakant-krish in pull request 19640. GitHub-19639
  • The alt attribute on the logo image is now properly escaped. Fix submitted by Erik Pellikka in pull request 19270. GitHub-19269

Translation and locales

  • Child themes now inherit translations from their parent theme as expected (en_US.csv translation dictionary). Fix submitted by Vladyslav Podorozhnyi in pull request 19018 and 19144. GitHub-17833
  • Swedish (Finland) locales are now supported. Fix submitted by p-bystritsky in pull request 19203. GitHub-13095
  • The message that Magento displays when you successfully add a product to your cart or shopping list is now available in the i18n translation file. Fix submitted by Ayaz Mittaqi in pull request 18938. GitHub-18931

UI

  • Removed use of the escapeJS method in app/code/Magento/SendFriend/view/frontend/templates/send.phtml. Fix submitted by Abrar Pathan in pull request 19053. GitHub-18887
  • Fixed the misalignment of drop-down menus on the Advanced Pricing page. Fix submitted by Ashutosh Srivastva in pull request 18790. GitHub-18775
  • Magento no longer includes not-yet-visible new orders on the Orders page when you select all orders for a mass action (such as update or cancelation). Previously, when you selected all orders on the Orders page for a mass action, any new order simultaneously being placed on the storefront was included in the mass action. Fix submitted by Yevhenii Dumskyi in pull request 19204. GitHub-18983
  • You can now set default values for the WYSIWYG edit field for editing form UI components. Fix submitted by Oleksandr Miroshnichenko in pull request 19048. GitHub-10048
  • The global search icon on the Admin is now correctly aligned. Fix submitted by Kajal Solanki in pull request 18940. GitHub-18913
  • Merchants can now change the currency symbol back to its default value from the Admin in single-store mode. Previously, when a merchant tried to change this symbol back to its default value, Magento displayed a success message, but did not change the currency symbol back to the default value. Fix submitted by Pratik Oza in pull request 18204. GitHub-17567
  • Magento now correctly renders apostrophes as entered in text fields.
  • Admin tables now work as expected when single-store mode is set to on. Previously, column positioning in these tables was not preserved when the page was refreshed. Fix submitted by gwharton in pull request 18405. GitHub-12070
  • WYSIWYG editor functionality is now available in all rows of the dynamic rows UI component. Previously, this functionality was available in the first row only.
  • Fixed incorrect display of the pager on the My Orders page. Previously, the pager obscured page links, which prevented customers from navigating to other pages. Fix submitted by Kajal Solanki in pull request 19298. GitHub-19286
  • Usage of unsupported includes has been removed. Previously, when you chose a user to edit on the customers grid, Magento installations running on Internet Explorer 11.x did not load the expected page, but instead displayed this message: object does not support method includes. Fix submitted by Oleksandr Miroshnichenko in pull request 19010. GitHub-18562

URL rewrites

  • The storefront now properly displays the order of categories when you move categories in the Admin.
  • Product URLs are now based on the configuration information from the Admin, not the order of records in the database. Previously, the order of records in the database affected the generated URL, and some products showed category paths for product URLS when Use Categories Path for Product URLs was set to no.
  • The import process now retains permanent redirects for outdated product URLs as expected. Previously, the import process removed these redirects, and when you tried to open the changed product by the old URL key, Magento displayed a 404 page. Fix submitted by Ankur in pull request 20344. GitHub-20282

VAT

  • Greek VAT numbers can now be validated. Fix submitted by Pieter Hoste in pull request 20548. GitHub-6960

Visual Merchandiser

  • Visual Merchandiser now correctly sorts configurable product prices in Tile view.

Web API

  • The response for GET V1/orders/:orderId now contains bundle_option and product_option information as expected.
  • All extension attributes listed in the documentation for salesOrderRepositoryV1 API are now available.
  • Access restrictions on the order API are now enforced as expected. Previously, adminstrators with restricted privileges had complete access to orders. Fix submitted by Milind Singh in pull request 20170. GitHub-20169

Wishlist

  • Magento no longer retains entries for deleted products in the database wishlist_item_option table.
  • You can now add a configurable product with no options to a gift registry from a wishlist.
  • You can now remove a comment from a wishlist product as expected. Previously, Magento did not remove the comment, even after you clicked Update Wish List. Fix submitted by Khodu in pull request 20247. GitHub-20245
  • Corrected misalignment of the Edit and remove item links on the wish list page when displayed on a screen with a resolution of 640 x 767. Fix submitted by Nainesh Waghale in pull request 20400. GitHub-20399
  • Pagination controls on the wishlist page have been restored. Fix submitted by Ratnesh Kumar in pull request 19305. GitHub-19292

Known issues

Issue: Cart Price rules that were created with undefined end dates (that is, with the To field left empty) are not displayed as expected on the Staging dashboard after after upgrading from Magento Open Source to Magento Commerce 2.3.1.

Issue: The Web Setup Wizard is not available from the Admin under these conditions:

  • base URLs are set to HTTP.

  • Use Secure URLs in Admin is set to on.

  • HTTPS is disabled.

Workaround: You must enable HSTS from Stores > General > Web > BaseUrls (Secure).

Issue: For Inventory Management, asynchronous migration of data between sources will encounter issues due to changes in Asynchronous APIs with topic names reflecting PHP class and method names. Workaround: We recommend using synchronous operations, setting Run asynchronously to “No”. To configure, see Configure Global Options in the Magento User Guide.

Issue: The CGI URL gateway in the UPS module has been updated from HTTP to HTTPS. Consequently, the UPS shipping method does not populate correctly. Workaround: Confirm that the Gateway URL uses the HTTPS protocol in the UPS Shipping Method Configuration.

Updating an existing setting: If UPS Type is set to United Parcel Service in the UPS Shipping Method Configuration, you must manually change the protocol of the Gateway URL from HTTP to HTTPS. Example: https://www.ups.com/using/services/rave/qcostcgi.cgi

To configure UPS for the first time:

  • Navigate to Stores  > Settings  > Configuration  >  Sales  > Shipping Methods. Then, expand the UPS section.

  • At the UPS Type field, clear the Use system value checkbox. Then, change UPS Type to United Parcel Service XML. The Gateway URL populates correctly when this value is selected.

  • Tap Save Config.

Issue: The Async/Bulk Web APIs support only the default store view. A hot fix for this issue will be available in the near future. This issue has been resolved with the Scope parameter for Async/Bulk API patch, which is now available. See Patch for Magento Framework Message Queue and Store Scopes for a full discussion of this scope-related issue and patch contents.

Issue: You cannot use the Magento Extension Manager to install extensions purchased from the Magento Marketplace. Workaround: Install extensions from the command line as described in General CLI installation. See Extension Manager shows no extensions in Magento Commerce 2.3.x.

Community contributions

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

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

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

Partner contributions

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

Partner Pull Request Related GitHub Issue
Atwix 19390, 19007, 318, 19941, 19413, 20233, 20236, 19414, 19532, 20241, 20400, 301, 20515, 20196, 20344, 20421, 20498, 20531, 20561, 20564, 20488, 20653, 266, 20787, 20803, 273, 20801, 20820, 20990, 21029, 21033, 21035, 21036, 21048, 346, 20515, 321, 331, 20787, 21028 4136, 4154, 317, 19940, 19379, 20232, 19371, 20240, 20399, 20513, 20176, 20282, 20396, 20497, 20563, 20487, 8, 66, 20786, 20802, 42, 20800, 20819, 21034, 250, 20513, 296, 256
Krish TechnoLabs 20607, 20318, 20615, 20630, 20138, 20907, 21047, 20336, 2000, 86 (magento-partners/magento2ee), 20247, 19798, 19799, 20233, 20207, 20094, 19334, 19644, 20236, 19812, 20582, 20749, 19643, 19817, 19502, 20861, 20791, 20241, 19372, 19646, 19792, 19803, 19413, 19414 20614, 19139, 20134, 20906, 20245, 19714, 19796, 20232, 19052, 19328, 17926, 19642, 19816, 19501, 20859, 20790, 20240, 18754, 19645, 19791, 19800, 19379, 19371
Two Jay 20501, 20519, 20612, 20469, 20297, 20196, 20218, 20558, 20801, 20224, 20400, 20168, 20214, 20725, 20403, 20817, 20956, 20132, 20428, 20262, 20493, 20610, 20195, 20281, 20605, 20581, 20155, 20374, 20488, 20756 20500, 20518, 20611, 20468, 20176, 20760, 20800, 20221, 20399, 20140, 20210, 20723, 20402, 20816, 20120, 20427, 20609, 20193, 20278, 20604, 20580, 20143, 20373, 20487, 20755
ISM eCompany 328, 329, 20967, 21029, 20247, 19822, 20142, 19343, 19929, 19930, 19997, 20407, 20565, 20302, 20338, 19845, 21031, 21033 20245, 19942, 14020, 19482, 12194, 13675, 19442
Interactiv4 20039, 20114, 20341, 21031 20113
Comwrap 29, 20046, 20050, 20042, 36, 20058, 20127, 20132, 19986, 164, 23, 21, 31, 20059, 343, 41, 23 20037, 12549, 20098, 20120, 19985, 17, 37
Something Digital 21030, 20050, 312, 19095, 308, 313, 18978 270, 17592, 232, 353, 18953
TechDivision 18407, 1985, 1868, 1872, 254, 41 1965, 1730, 248, 37
Wagento 20990, 20022, 20913 20989, 20021, 18525
Vaimo 21 17
Basecom 18407, 20962, 20109 19705
MageSpecialist 1866, 19182, 17424 1991, 14849, 1537, 1524
Brandung 20072, 20096, 20130, 20094, 19798 20024, 19054, 20030, 19052, 19714
Mediotype 19900, 19665 19899, 19664
Weidenhammer 20558, 194 20760, 57
Veriteworks 47, 46, 52  
Webjump 19715, 20096, 20094, 21084 19054, 19052
H&O 20057  
MediaCT 19313  
Experius 19715, 20531  

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
mage2pratik #18020  
TBlindaruk #18035  
yaroslav-zenin #18043  
rogyar #18047  
mage2pratik #18049  
dmytro-ch #18072  
mage2pratik #18102  
dmytro-ch #18117 18101
sidolov #18136  
mage2pratik #18142  
evktalo #16351  
tiagosampaio #17685  
hryvinskyi #18122  
mage2pratik #18141  
mage2pratik #18187  
AurelienLavorel #18198  
mage2pratik #18202  
mage2pratik #18203  
mage2pratik #18205 5797, 17780
hostep #18207 13720, 14050
eduard13 #18211  
hryvinskyi #18064  
jayankaghosh #18149 18094
schmengler #18173  
mage2pratik #18201 15196
hostep #18212  
hostep #18209 17190
nntoan #18228 17999
mage2pratik #18231  
hostep #18244 13156
mage2pratik #18272 9830, 10530
mage2pratik #18273 12095
sambolek #18290 16497
sambolek #18288 17152
mage2pratik #18295 17582
VincentMarmiesse #18292  
sreichel #18303 18079
dmytro-ch #18312  
dmytro-ch #18308 18162
haroldclaus #18322  
ihor-sviziev #18331 18330
jignesh-baldha #18334  
rogyar #18344  
arnoudhgz #17803  
mage2pratik #18204 17567
VincentMarmiesse #18221  
oleksii-lisovyi #18257  
ulftietze #18271 18234
miguelbalparda #18343  
mage2pratik #18394  
mage2pratik #18404  
gwharton #18405 12070
ArtsiomBruneuski #18416 14555
lewisvoncken #18434 3283
hugovk #18439  
gelanivishal #18481 18477
samgranger #18487  
eduard13 #18490  
gelanivishal #18498  
gelanivishal #18499 17770
gelanivishal #18500 17493
peterjaap #18505  
peterjaap #18506  
hryvinskyi #18065  
higi90 #18160  
eduard13 #18210 13405
ihor-sviziev #18370  
tufahu #18365  
loganstellway #18393 12969
strell #18437 18131
zack6849 #18476  
ihor-sviziev #18494 18164
vaibhavahalpara #18507 17977
BezV8 #18522  
peterjaap #18529  
dmytro-ch #18538  
peterjaap #18540  
mage2pratik #18545  
aman3103 #17800 17754
dmytro-ch #18546  
gelanivishal #18570 9219
gelanivishal #18571 12479
zack6849 #18573  
dmytro-ch #18600  
luukschakenraad #18596 18475, 18589
mage2pratik #18608  
speedy008 #18638 18581
navarr #17296  
navarr #17300  
leandro-rosa #18080 17830
amatanovic #18284 17616
stkams #18333  
alexeya-ven #18488  
deninchoo #18614  
rogyar #18627 18605
gelanivishal #18667  
sreichel #18671  
vasilii-b #18694  
gwharton #18702 15035
vasilii-b #18707  
vasilii-b #18708  
eduard13 #18710  
StrikerRUS #18723  
mage2pratik #18733 2686
bartoszkubicki #18019 12300, 16572
LucasCalazans #18095 17744
VincentMarmiesse #18388  
pocallaghan #18412 18357
udovicic #18611  
lewisvoncken #18622 10205
maheshWebkul721 #18631 18268
ravi-chandra3197 #18639 17865
TomashKhamlai #18679  
idziakjakub #18689 5021
pmclain #18704 17485
pmclain #18720 13083
vasilii-b #18714 4468
gy741 #18725  
dmytro-ch #18730 18729
gy741 #18756  
p-maguire #18751  
gelanivishal #18764  
TomashKhamlai #18771 18357
mage2pratik #18782 15259
mage2pratik #18788  
ashutoshwebkul #18790 18775
gy741 #18792  
janakbhimani #18795 17954
Mardl #18419 12399
luukschakenraad #18590 18585
tdgroot #18700  
VitaliyBoyko #18774  
vasilii-b #18798 2618
okorshenko #18846 18840
Rus0 #18844 6731
wiardvanrij #18851 18688
speedy008 #18856 18854
rahulwebkul #18889 18779
dmytro-ch #18897  
arnoudhgz #17805  
gelanivishal #18520 4942
hiren0241 #18578 18158
maheshWebkul721 #18750 18655
samuel27m #18772  
vpodorozh #18807 18387
wiardvanrij #18850  
hugovk #18894  
speedy008 #18940 18913
sreichel #18946  
aheadWorks #18970 18965
bnymn #18083 5037
thiagolima-bm #18462 18082
anujwebkul #18650 18618
DanielRuf #18680  
sawebvisum #18810  
ayazwebkul #18938 18931
tdgroot #18968  
nmalevanec #18988 17890
p-bystritsky #18991 10440
omiroshnichenko #19010 18562
p-bystritsky #19026 18256
agorbulin #19029 18901
swnsma #19040 18323, 19003, 19034
omiroshnichenko #19048 10048
arnoudhgz #19050  
progreg #19066 19060
davidalger #18294  
ayazwebkul #18637  
mmenozzi #18727  
rahulwebkul #18900 18839
nmalevanec #18986  
cezary-zeglen #18998 17625
vpodorozh #19018 17833
vpodorozh #19037 14007
dimasalamatov #19087  
Mobecls #15961 14294
t-richards #18814  
maheshWebkul721 #18816 18150
maheshWebkul721 #19061 18617
gelanivishal #18565  
dmytro-ch #18906  
eduard13 #19103  
vasilii-b #19130 19101
vovayatsyuk #19143 19127
vpodorozh #19144 17833
eduard13 #19175  
orlangur #19185  
sivaschenko #19194  
progreg #18952 6803
larsroettig #18958 18956
prakashpatel07 #18973 17488
vasilii-b #19027 18979
p-bystritsky #19170 5929, 18532
p-bystritsky #19174 7849, 18939
torhoehn #19179 18652
godvsdeity #18773  
Karlasa #18957  
p-bystritsky #18987 17638
adeptofvoltron #19009  
agorbulin #19155 19082
p-bystritsky #19171  
p-bystritsky #19203 13095
progreg #19204 18983
gelanivishal #19254 16434
dmytro-ch #19264 19263
schmengler #18641 15828
danielgheoltan #18609  
henryktews #18703  
saphaljha #18888 18192
agorbulin #19024  
omiroshnichenko #19039 13157
abrarpathan19 #19053 18887
torhoehn #19180 17635
eduard13 #19183  
eduard13 #19195 19172
ajardin #19213  
VincentMarmiesse #19277  
dmytro-ch #19299  
DanielRuf #19326  
lisovyievhenii #19146 15931
speedy008 #19298 19286
torhoehn #19318 16434
gelanivishal #19322 19315
DanielRuf #19332  
torhoehn #19350 18949
Rus0 #18849 17753
TomasVotruba #19325  
tiagosampaio #19366  
vasilii-b #19419 19418
fballiano #19455 19453
bartoszkubicki #18206  
jasonevans1 #18818 14571
rain2o #19176 417
khodu #19206 9130
maheshWebkul721 #19261 19205
GovindaSharma #19408 19346
Dharmeshvaja91 #19416 19404
nickshatilo #18380 18361
iancassidyweb #18620 18615
pmclain #18648 17680
maciejslawik #19310  
DanielRuf #19331  
DanielRuf #19329  
speedy008 #19405 19399
Karlasa #19412  
DanielRuf #19421  
dmytro-ch #19425 19424
DanielRuf #19428  
maheshWebkul721 #19437 19205
omaxmo #19462 18509
speedy008 #19473 19472
viral-wagento #19288  
rodrigoobiassi #19295  
SikailoISM #19451 19436
abrarpathan19 #19510 19509
craigcarnell #19541  
torhoehn #19554  
suryakant-krish #19574 19573
suryakant-krish #19580 19579
gil– #19599  
sivaschenko #19601  
gelanivishal #18521 15652
pmclain #18768 16050
JeroenVanLeusden #18832  
ravi-chandra3197 #19164 8952
gmachure #19249 19247
jignesh-baldha #19569  
rbayet #19583 16302, 19291
thomas-blackbird #19617  
speedy008 #19659 19657
hryvinskyi #18124  
StasKozar #19038 18990
gwharton #19198 19142
speedy008 #19493 19492
cedcommerce #19633 19607
suryakant-krish #19640 19639
DanielRuf #19673  
ravi-chandra3197 #19684  
lorikrell #19696  
saravananvelu #17806 17754
progreg #18069 18038
kanduvisla #19080 14861
eduard13 #19134 19099
Nazar65 #19135 18941
dverkade #19222  
shikhamis11 #19302 19285
suneet64 #19514  
jaimin-ktpl #19537 17442
ssp58bleuciel #19634 13309
DanielRuf #19672  
iskolesnyk #19702  
poveu #19711  
milindsingh #19726 19721
eduard13 #19736  
developerarun #19762  
milindsingh #19769  
gelanivishal #19839 19836
dmytro-ch #18179 18170
torhoehn #18895  
BlackIkeEagle #19104  
agorbulin #19094 19085
drew7721 #19124 7503, 7710, 8333, 14932, 16074
nmalevanec #19341 14510
ssp58bleuciel #19387 16684
godvsdeity #19402  
ravi-chandra3197 #19663 15922
textarea #19707 19706
craigcarnell #19709  
shikhamis11 #19751 19605
pmclain #19764 19763
akshayadixit #19770  
jitendra-cedcoss #19768  
shikhamis11 #19784 19780
ssp58bleuciel #19788 14712
swnsma #19824  
ihor-sviziev #19868  
ErikPel #19232 17819
speedy008 #19508 19507
LuciferStrome #19766  
Surabhi-Cedcoss #19888  
speedy008 #19904  
GovindaSharma #19918 19917
Brengineer #19467  
Militree #19620 17759
suryakant-krish #19646 19645
lewisvoncken #19715  
gulshanchitranshcedcoss #19752  
suryakant-krish #19792 19791
speedy008 #19799 19796
wojtekn #19900 19899
bradleyfrye #19914  
agorbulin #19929  
cedarvinda #19926  
agorbulin #19930  
GovindaSharma #19941 19940
4lexvav #19978 19977
Nazar65 #19981 19887
ajeetsinghcedcoss #20005  
hitesh-wagento #20022 20021
tiagosampaio #20046  
pmclain #20050 20037
torhoehn #18407  
gwharton #18471 7739, 11740, 14236, 14945, 14952, 16165, 16203, 16355, 16509, 17781, 18470
ravi-chandra3197 #19644  
abrarpathan19 #19643 19642
wojtekn #19665 19664
suryakant-krish #19803 19800
p-bystritsky #20042 12549
dverkade #15267 7333
quisse #16154 14937
jhruehl #17387  
nmalevanec #19343 14020
suryakant-krish #19413 19379
Yamaha32088 #19781 7967
maheshWebkul721 #19880 19609
irajneeshgupta #19954  
shikhamis11 #20072 20024
jasperzeinstra #19313  
vasilii-b #19390 4136
abrarpathan19 #19817 19816
kunj1988 #19992 19974
ddevesh #20039  
Eayshwary #20058  
davidverholen #20096 19054
irajneeshgupta #20127 20098
yashwant2jcommerce #20132 20120
cedarvinda #20160 20158
amol2jcommerce #20168 20140
speedy008 #20233 20232
ravi-chandra3197 #20236  
vasilii-b #19007 4154
webkul-ratnesh #19305 19292
suryakant-krish #19414 19371
suneet64 #19532  
ravi-chandra3197 #19812 17926
vinogcs #19870  
shikhamis11 #20130 20030
speedy008 #20207  
nainesh2jcommerce #20224 20221
amol2jcommerce #20214 20210
niravkrish #20241 20240
df2k2 #20258  
troendheim #20283  
priti2jcommerce #20297  
SikailoISM #20302  
cedarvinda #20306 20304
brendanfalkowski #20416  
cedarvinda #19986 19985
amritms #20018  
JeroenVanLeusden #20057  
davidverholen #20094 19052
milindsingh #20170 20169
ajay2jcommerce #20195 20193
duckchip #20222  
khodu #20247 20245
milindsingh #20248 20064
shikhamis11 #20252 20121
cedarvinda #20260 20259
cedarvinda #20301 20299
mage2pratik #20318  
ronak2ram #20336  
SikailoISM #20338  
ranee2jcommerce #20374 20373
nainesh2jcommerce #20400 20399
milindsingh #20425  
pmclain #19095 17592
niravkrish #19372 18754
ajardin #19585  
swnsma #19822  
agorbulin #19997 19482
vivekkumarcedcoss #20231 20229
shikhamis11 #20349 19258
vshatylo #20407 12194
kassner #20408  
jayankaghosh #18185 18027
ccasciotti #19136  
maheshWebkul721 #19192 18349
maheshWebkul721 #19321  
p-bystritsky #20180 15950
DenisSaltanahmedov #20515 20513
abrarpathan19 #19502 19501
lfluvisotto #19826  
GovindaSharma #20114 20113
Surabhi-Cedcoss #20142 19942
suneet64 #20146 20122
priti2jcommerce #20196 20176
dipti2jcommerce #20262 20261
ajay2jcommerce #20281 20278
maheshWebkul721 #20354 20277
SikailoISM #20341  
ankur-cedcoss #20344 20282
cedarvinda #20368 20367
milindsingh #20410 20409
hostep #20421 20396
eduard13 #20498 20497
parag2jcommerce #20501 20500
parag2jcommerce #20519 20518
lewisvoncken #20531  
magicsunday #20561  
cedarvinda #20564 20563
ravi-chandra3197 #20582  
parag2jcommerce #20612 20611
speedy008 #19334 19328
adityayadav-cedcoss #20059  
cedarvinda #20144 20137
priti2jcommerce #20218  
mage2pratik #20615 20614
ajay2jcommerce #20605 20604
irajneeshgupta #20625 20624
mage2pratik #20630 19139
cedmudit #20754  
p-bystritsky #19182 14849
yashwant2jcommerce #20428 20427
parag2jcommerce #20469 20468
ranee2jcommerce #20488 20487
ajay2jcommerce #20581 20580
lfluvisotto #20628  
shochdoerfer #20653  
GovindaSharma #20634 20631
amol2jcommerce #20725 20723
satyaprakashpatel #20759  
phoenix128 #17424 1537
pmclain #18978 18953
janakbhimani #19798 19714
mfickers #20109 19705
GovindaSharma #20159 20157
irajneeshgupta #20383 20382
kassner #20436  
XxXgeoXxX #20565 13675
elevinskii #20769  
Stoux #20770  
krishna221993 #20775  
eduard13 #20787 20786
eduard13 #20803 20802
abrarpathan19 #20861 20859
philwinkle #21030  
ErikPel #19270 19269
SikailoISM #19845 19442
mage2pratik #20138 20134
amol2jcommerce #20403 20402
dipti2jcommerce #20493 20492
dipti2jcommerce #20610 20609
mageprince #20607  
Nazar65 #20727 9988, 20689, 20716
ravi-chandra3197 #20749  
ranee2jcommerce #20756 20755
pankaj-cedcoss #20762  
abrarpathan19 #20791 20790
denispapec #18981 18580
ajay2jcommerce #20155 20143
hostep #20548 6960
priti2jcommerce #20558 20760
mageho #20808  
priti2jcommerce #20801 20800
amol2jcommerce #20817 20816
eduard13 #20820 20819
GovindaSharma #20829 20828
cedarvinda #20874  
mage2pratik #20907 20906
hiren-wagento #20913 18525
GovindaSharma #20914 20911
kunj1988 #20930 20908
dankhrapiyush #20936 20924
amol2jcommerce #20956  
cedarvinda #20962  
dominicfernando #20967  
dharmendra-wagento #20990 20989
williankeller #20995  
dominicfernando #21029  
eduard13 #21028  
maddumarala #21031  
milindsingh #21035 21034
maddumarala #21033  
ccasciotti #21036  
eduard13 #21048  
mage2pratik #21047  
XxXgeoXxX #21054  
williankeller #21084  

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.1 using Composer.

Migration toolkits

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

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