Magento Commerce 2.3.0 Release Notes

Release notes published November 28, 2018 and last updated on June 3, 2020.

We are pleased to present Magento Commerce 2.3.0 General Availability. This release includes numerous functional fixes and enhancements.

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 patch PRODSECBUG-2198 to address critical SQL injection vulnerability

A critical SQL injection vulnerability has been identified in pre-2.3.1 Magento code. To quickly protect your store from this vulnerability only, install patch PRODSECBUG-2198. However, to protect against this vulnerability and others, you must upgrade to Magento Commerce or Open Source 2.3.1. We strongly suggest that you install these full patches as soon as you can.

See the description of PRODSECBUG-2198 in the Magento Security Center for information on this vulnerability.

Highlights

Magento Commerce 2.3.0 includes a wealth of new features as well as hundreds of enhancements and fixes to the core product. Look for the following highlights in this release:

Merchant tool enhancements

  • Inventory Management (provided by Magento Inventory (was MSI)) is now available with Magento 2.3.0. It lets merchants manage inventory for all product types in a single warehouse and across complex shipping networks. Merchants can manage these locations as sources, tracking on-hand inventory quantities per product. Stocks map these sources and sales channels (websites) to provide an accurate, salable quantity as inventory pools for concurrent checkout and product reservations. Inventory Management also updates order and shipment options, giving you full control over your stock.

    Magento Inventory is a Magento Community Engineering special project open to contributors. To take part and contribute, see the Magento Inventory GitHub repository and wiki to get started. Join us in our Slack channel (or self signup) to discuss the project.

  • CMS enhancements include banner enhancements. You can now create banner content in native Magento WYSIWYG (or Page Builder. See the Page Builder discussion below. (Within the product interface, we now use the term dynamic block instead of banner.) We’ve also updated the WYSIWYG editor to use TinyMCE 4.6. (TinyMCE is now integrated into Magento through an adapter that allows it to be replaced with any other WYSIWYG editor.)

  • PageBuilder is a drag-and-drop visual content editing tool that lets merchants customize the appearance of their storefront without writing any HTML or CSS. Registered participants can install PageBuilder Beta on Magento Commerce 2.3.0 code. See check Magento 2.3 product availability and Magento blog.

Improved developer experience

  • PWA Studio is a set of tools that support the development, deployment and maintenance of progressive web applications. See Magento PWA documentation for information about this toolset as well as information about contributing to this ongoing project.

  • Declarative schema simplifies installation and upgrade procedures for Magento and extensions. Declarative schema reduce the need for many database scripts, eliminating the need to maintain these scripts. And here’s a big advantage: This features enables Magento to roll out database schema changes in patch releases (not currently possible). This feature supports split and shared database structures and database structure validation.

  • GraphQL API is now available with Magento 2.3.0. This API provides an alternative to REST and SOAP web APIs for custom frontend development, including headless storefronts and PWAs. See GraphQL Developer Guide for more information about Magento’s implementation of this data query language. GraphQL is a Magento Community Engineering special project open to contributors. To take part and contribute, see the GraphQL GitHub repository and wiki to get started. Join us in our Slack channel (or self signup) to discuss the project.

  • Asynchronous Web APIs allow any previous Magento REST APIs to be called asynchronously. This community-contributed feature includes separate status APIs that have been created to check the status of each request. Developers can now use the asynchronous APIs in conjunction with queues that have also been migrated to Magento Open Source. 
See Asynchronous web endpoints for more information.

  • Bulk Web APIs allow all existing REST APIs to accept payloads with multiple entities. These community-contributed bulk APIs support more efficient and scalable implementations that eliminate round-trip network overhead. Like asynchronous APIs, bulk web APIs can be used in conjunction with queues that have also been migrated to Magento Open Source. See Bulk endpoints for more information.

  • Updates to Magento’s tech stack (including upgraded PHP support to maintain PCI compliance) include upgrades to Redis, MySQL, Elasticsearch, and compatibility with PHP 7.2.x.

Substantial security enhancements

  • Over 30 security fixes to core Magento code

  • Cache flush ACL provides granular access to cache management settings to prevent accidental changes that could potentially affect system performance. This ACL also lets merchants control which administrative users can clear site caches.

  • 2FA/CAPTCHA protects the Admin panel against stolen passwords and affects stores against bots.

See Magento Security Center for a comprehensive discussion of these issues. All exploitable security issues fixed in this release (2.3.0) have been ported to 2.2.7, 2.1.16, 1.14.4.0, and 1.9.4.0, as appropriate.

Core bundled extension enhancements

Amazon Payments

  • Added branding to the Amazon Pay configuration section in the Admin

  • Improved extension architecture and performance

dotmailer

  • dotmailer now supports the Magento Commerce split database mode.

Klarna Payments

  • Added descriptive text to the Refund API call

  • Added a link to the Klarna merchant portal

  • Added a detailed Klarna message in the Magento Admin where needed

  • Added an initial Magento Functional Test Framework (MFTF) test and support for future tests

  • Extended cleanser filtering

  • Added support for PHP 7.2 and dropped support for PHP 5.6

Magento Shipping

  • The Magento Shipping Click & Collect feature offers merchants the ability to:

    • Provide Click & Collect as a shipping option to customers, enabling them to directly collect shipments from designated source locations or stores

    • Configure source locations available for Click & Collect pick-ups

    • Updates to Shipment Form for UPS (U.S. only)

    • Customers can also select Click & Collect locations during checkout. This feature is supported by workflows and notifications for Click & Collect pick up, packing, and collection.

  • The batch details page now displays collection point addresses, as applicable

  • Activation notices can now be translated.

  • Tracking popups for multi-package shipments are now displayed.

  • The dispatch details page has been enhanced.

Vertex

  • The Magento implementation of Vertex now supports Vertex O Series 7.0.

Other improvements

  • Elasticsearch support for Magento Open Source version. Elasticsearch support was previously provided in Magento Commerce only.

  • Improvements to release packaging plus an increase in test automation, results in a faster, more efficient release process and improved product quality.

  • Change in versioning for B2B product to match the versioning of the core product.

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

Fixed issues

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

Installation, upgrade, deployment

  • All existing installation and data scripts have been converted into declarative schema data patches for easier deployment.
  • The bin/magento setup command now provides a rollback option that prompts the user to optionally retain files for future rollbacks. Fix submitted by Oscar Recio in pull request 11750. GitHub-6460
  • The user.ini files now recommend the correct values for php_value memory_limit. Fix submitted by Mr. Lewis in pull request 11760. GitHub-11322
  • You can now use the bin/magento cron:install and cron:remove commands to install or uninstall cron across multiple Magento installations with the same crontab. Previously, you could not create different crontab entries for multiple Magento installations that were in different folders because they used the same #~ MAGENTO START and #~ MAGENTO END suffixes. Fix submitted by adrian-martinez-interactiv4 in pull request 11360.
  • The default time setting for cron success and failure history is now seven days. Fix submitted by Max Chadwick in pull request 11463.
  • In Magento deployments using multiple languages, the Framework/translation.php constructor that sets a store’s locale now uses the correct locale. Fix submitted by Wiard van Rij in pull request 10913. GitHub-10673
  • The .htaccess template now uses Apache 2.4 syntax. Fix submitted by Jonas Hünig in pull request 11466. GitHub-10810
  • When a callback during commit throws an exception, the calling plugin can now distinguish this exception from an unsuccessful commit, and logs an exception. Previously, Magento threw an asymmetric transaction rollback error. Fix submitted by Wayne Theisinger in pull request 9955. GitHub-6497
  • The links that the Admin panel provides to backup packages now link to the expected packages. Previously, these links permitted you to download only the latest backup package. Fix submitted by will-b in pull request 10593. GitHub-10032
  • All cron schedule times are now saved in UTC and then displayed to the user in the expected time zone. Previously, the cron schedule times in the database were in local date time formats and not UTC, while the other system dates and times were saved as UTC in the database. Fix submitted by Anton Evers in pull request 10432. GitHub-4237
  • You can install and deploy Magento without first creating an administrator account.
  • Improved the cron job management process during the deploy phase to prevent database locks and other critical issues. Now, all cron jobs stop during the deploy phase and restart after deployment completes.
  • Statistics collection for the Reports module is now disabled by default. To enable or partially disable it, see Stores > Settings > Configuration > General > Reports. Note that certain product features, such as Magento Commerce dynamic customer segments (specifically the ones based on viewed products), rely on Reports data collection to function properly.
  • You can now add a new IP address to an existing list by appending the new address with the - add flag rather than replacing a former address with a new one. Fix submitted by serhii-balko in pull request 13783. GitHub-10559
  • Magento now provides an input/output helper object that supports easier access to styling objects in the Symfony console. Fix submitted by Malyovanets Nickolas in pull request 13741.
  • The .htaccess file in the pub/static folder now includes a RewriteBase directive, which supports the installation of Magento under a directory inside the web root. Note: Setting this directive in the .htaccess file in Magento root without setting it in .htaccess under pub/static will result in a missing file. Fix submitted by Malyovanets Nickolas in pull request 13788.
  • The list of IP addresses for maintenance status no longer includes commas, which facilitates directly copy and pasting the addresses as needed. Fix submitted by Malyovanets Nickolas in pull request 13727.
  • PhpFormatter has been refactored to recursively return the array representation using short array syntax [] instead of long array(). If the given variable is not an array, it uses the standard var_export behavior. This change supports Magento coding standards. Fix submitted by Malyovanets Nickolas in pull request 1193. GitHub-758
  • The icons that represent the Extension Manager and Module Manager in the main area and left-hand menu of the Web Setup Wizard have been refactored for consistency with Magento UI guidelines. Fix submitted by Danny Verkade in pull request 12960. GitHub-11236
  • You can now deploy static content on demand while in production mode.
  • Magento now restarts cron jobs as needed after a cron job was terminated during execution.
  • The CrontabManager.php file has been updated as follows: If crontab has already been populated, the bin/magento cron:install command adds #~ MAGENTO START and the rest of code directly to the last row of crontab without any spaces. Fix submitted by Michele Fantetti in pull request 12609.
  • Zend_Json in the setup PackagesAuth has been replaced with the new Serializer\Json. GitHub-9236
  • Static versioning and minification no longer break email font styles. GitHub-8241
  • We’ve fixed an issue with using the command line to install or remove crontab. Previously, installing or removing crontab via the command line appended 2>&1 to entries, even those not related to Magento. GitHub-11586
  • The Back button that was previously accessible during the first step of installation has been disabled. Fix submitted by Mastiuhin Oleksandr in pull request 14460. GitHub-14307
  • Multifields that previously lacked labels in forms now display labels. Fix submitted by rostyslav-hymon in pull request 14383. GitHub-7428
  • The app:config:dump command now has an argument that supports dumping only the specified settings that are required to prepare static content on a build system, not all system settings. This new option (config-types) makes it possible to dump scopes and themes automatically (which are needed for a build system) while managing system settings manually using config:set --lock-config. Fix submitted by Ihor Sviziev in pull request 14807. GitHub-11396
  • You can now switch to default mode from production mode. Previously, if you tried to switch back to default mode, Magento displayed this error, Cannot switch into given mode 'default'. GitHub-4292
  • The Web Setup wizard now loads successfully when session storage is configured to use memcache in env.php. GitHub-9633
  • Triggers now work as expected during database backup. Previously, triggers were missing, which resulted in incorrect indexing. GitHub-9036
  • Magento no longer automatically disables maintenance mode during a scheduled back up. GitHub-9918
  • Database rollback with SSH now works as expected. GitHub-12064
  • A fatal error no longer occurs when you run bin/magento sampledata:deploy before installing Magento. Fix submitted by Quaternion in pull request 13571.

  • Disabling the Amazon Payments feature while using the Web Wizard to install Magento no longer breaks the checkout process.

Web server configuration

  • web/unsecure/base_url config has been added to website and store scope. Fix submitted by JeroenVanLeusden in pull request 13659.
  • The static/ string has been removed from the resource parameter, allowing static.php to generate the specified resource correctly. Fix submitted by Daniel in pull request 13361.
  • Fixed an issue with the shared configuration settings in app/etc/config.php that caused recursion detected errors during deployment.
  • You can now set a default value to fields with config field type image or file. GitHub-10253
  • We’ve removed Zend_Json from Setup/Migration.php. GitHub-10341
  • The licenses listed in composer.json have been updated for accuracy. Fix submitted by Marcel Hauri in pull request 17268. GitHub-17225
  • Magento multi-store installations now use the store view-specific values from the Store Configuration if they differ from the global default configuration settings. Previously, Magento loaded the wrong home page in multi-store deployments. Fix submitted by hitesh-wagento in pull request 16046. GitHub-15205, GitHub-15245
  • Magento no longer displays deprecated currencies in the currency dropdown menu that is displayed during the setup process. Fix submitted by Malyovanets Nickolas in pull request 13782. GitHub-13760
  • You can now successfully create a new store view from the Admin. Previously, Magento displayed this message when you attempted to create a new storeview: Requested store is not found. Fix submitted by Pieter Hoste in pull request 14043. GitHub-12421, GitHub-12405
  • The output of the setup:static-content:deploy command has been changed to a less alarming color. Fix submitted by Pieter Hoste in pull request 13975. GitHub-12404
  • XML sitemap generation can now be scheduled. Fix submitted by rostyslav-hymon in pull request 14908. GitHub-5768
  • Issues with the database backup command have been resolved. GitHub-1287
  • Magento now displays a more informative message you update a module and then switch to a different branch of source control that contains a lower version of that module. GitHub-9981
  • Disabling the State is Required for field from Stores > Settings > Configuration > General > General > State Options now works as expected. GitHub-12894

AdminGS

  • Admin global search preview now works as expected. Previously, this feature worked inconsistently, and search results differed depending on which area was being searched (for example, Products, Categories, or Customers).
  • Restricted administrative users can now successfully create and save product attributes.
  • Restricted administrative users can now create and edit CMS blocks as expected. Previously, Magento displayed this error message when an administrator with restricted privileges tried to create a new CMS block: Warning: array_intersect(): Argument #1 is not an array in /var/www/html/magento2ee/app/code/Magento/AdminGws/Model/Models.php on line 1075.
  • The Magento_Authorization module is now installed after Magento_Authorization to satisfy Magento_Authorization’s dependency upon authorization tables. Fix submitted by Anton Evers in pull request 56 (magento-partners/magento2ee).

Analytics

  • PHPDocs have been added as needed for methods throughout the code base. Fix submitted by Aki Ojalehto in pull request 13337.
  • Users are now subscribed by default to the Advanced Reporting service.

Backend

  • Customers can now successfully download and export PDFs after logging in. Previously, customers were redirected to the Admin when trying to download or export data to a PDF right after logging in. Fix submitted by Sanjay Patel in pull request 15766. GitHub-15510
  • Admin tabs are now ordered as expected. Previously, when you used the addTabAfter method to add two or more tabs to the Admin (for example, to the order view page), the sort order of the tabs was incorrect. Fix submitted by Tiago Sampaio in pull request 16412. GitHub-16174
  • The headers of the User Agent Rules table now align as expected with the content of the table’s rows. Fix submitted by Justin in pull request 16792. GitHub-16703
  • The Enter button on the customer grid now filters the table as expected. Previously, clicking Enter did not filter contents but simply changed the display to the next page of the grid. Fix submitted by Ronak Patel in pull request 17650. GitHub-17789
  • The Report an Issue link on Admin pages now opens in a new tab. Fix submitted by Danilo Argentiero in pull request 14016. GitHub-14010
  • The Magento CMS banner has been renamed to dynamic block to better represent this feature. Banners from Content > Banners have been renamed across the Admin and the code base. Correspondingly, the Magento widget banner rotator type (from Content > Widget > Widget type) has been renamed to dynamic blocks rotator.
  • You can now create dynamic block (formerly banners) content from the WYSIWYG editor. You can create store-specific content for dynamic blocks by switching between scopes using the Magento Scope Selector.

Bundle

  • You can now successfully save updates to bundle products. GitHub-6916
  • Unused count() methods have been removed from template files throughout the code base. Fix submitted by Ihor Sviziev in pull request 13138.
  • You can now successfully delete an option from a bundle product.
  • Imported bundle products are now assigned stock status as expected. Previously, when you imported a new or replacement bundle product, Magento did not generate an entry in cataloginventory_stock_status, and as a result, Magento could not successfully display the product on the storefront. Fix submitted by Adam Paterson in pull request 14016. GitHub-12330
  • Magento no longer includes expired special prices for bundle options when displaying product price ranges. Fix submitted by Sanjay Patel in pull request 15768. GitHub-15457
  • Reports now handle bundle and group products as expected. Previously, when a merchant viewed the Products in cart report, the report gives error if the cart contains a bundle or a grouped product. GitHub-12079

B2B

  • Magento now opens a new window for edit purposes when a merchant selects Edit User in New Tab from the Company Users page. Previously, when a merchant tried to edit Company users from the storefront by selecting Edit User in New Tab, Magento threw a JSON error.
  • Administrators with appropriate permissions can now change the status of a company to Rejected. Previously, Magento did not save the change in status, and threw an error.
  • Guests can now view products as expected when shared catalogs are enabled. Previously, if a merchant added a product when shared catalogs were enabled, guest users could not view the product, even when shared catalogs were later disabled.
  • Category pages now display as expected all products whose SKUs contain either single or double quotation marks. Previously, Magento threw an error when trying to set pricing and structure on a shared catalog when product SKUs contained these characters.
  • You can now successfully search for products when the Shared Catalog setting is enabled.
  • Customers can now use the Add Product By SKU button to add configurable products to a sales order.
  • Access to the Companies resource can now be explicitly set on the Roles Resources page in Admin. Previously, this resource was available only to top-level administrators with all resources selected.
  • Magento now displays informative messages about both successful and failed actions when a company administrator adds or deletes entries in the Company Users section. Previously, Magento displayed this error message: Something went wrong in the response body, and did not display a message.
  • Tier prices for already added products no longer change when a merchant adds additional products to an order from the Admin. Previously, the tier price of products in an order changed when the merchant added more products to the order, applied a custom price to one of the products, or applied a coupon code to the order.
  • Merchants can now create a company for which the region or state is not required. Previously, Magento did not create this company, and displayed this error: Invalid value of "" provided for the region_id field.
  • Magento now displays the orders that are associated with customer accounts on the Orders page. Previously, in the Admin display of customer accounts that have orders associated with them, Magento did not display orders on the Orders tab but instead displayed a blank page.
  • Merchants can now create new user roles that do not have access to Quotes.
  • Merchants can now successfully update product prices and currencies using Stores > Settings > Configuration > General > Currency Setup.

CAPTCHA

  • Customers can now successfully log in when guest checkout is disabled and CAPTCHA is enabled. Previously, Magento threw the Provided form does not exist error when a customer tried to log in under these conditions.
  • CAPTCHA validation now works when the Website Restrictions setting is enabled.

Cart and checkout

  • Magento no longer displays an integrity constraint violation error after when a customer reorders a product with custom options. GitHub-12705
  • You can now save emoji in custom product options. GitHub-12058
  • Magento no longer caches warning messages as often as a customer clicks the Update Shopping Cart button while the shopping cart page loads. Previously, Magento cached a warning message each time a customer clicked this button while the page loaded in Firefox or Chrome, and this action resulted in multiple warning messages appearing on the top of the shopping cart page.
  • Magento now displays the expected state in the Multishipping New Address form when a customer enters information on the Ship to Multiple Addresses page. Fix submitted by enriquei4 in pull request 13367. GitHub-8069
  • update button.phtml has been simplified to optimize translation. Fix submitted by Karla Saaremäe in pull request 12155.
  • You can now enter zip codes that contain no spaces for locations in the Netherlands. Fix submitted by Oscar Recio in pull request 11961. GitHub-11898
  • The text that appears above the billing address field on the checkout page has been edited to remove redundancy. Fix submitted by Vova Yatsyuk in pull request 11399
  • The One Touch Ordering feature allows users to place orders without going through full checkout. Fix submitted by Daniel Korzeniowski.
  • You can now delete the last product in your shopping cart even when the Minimum Order Amount setting (Stores > Settings > Configuration > Sales > Sales) is enabled. Previously, if you tried to delete the last item in your cart under these circumstances, Magento would throw an exception. Fix submitted by Anton Evers in pull request 10601 GitHub-6151
  • The checkout agreements getList method was refactored to include a new listing interface that supports the ability to set search criteria. Fix submitted by Stanislav Idolov in pull request 13221.
  • The shopping cart totals description on the checkout page now displays discount labels as expected. Fix submitted by Ihor Sviziev in pull request 13223.
  • The checkout controller’s JSON usage has been updated to use $this->resultFactory->create(ResultFactory::TYPE_JSON); instead of the object manager.
  • Refreshing the checkout page no longer deletes the shipping address when a guest checks out. Previously, when the persistent shopping cart was enabled, refreshing the check out page affected information entered into form fields for a guest checkout.
  • Cart price rule condition values now handle commas as expected.
  • When a customer is on the payment page and tries to reorder or retrace her steps backward through the checkout process, Magento now displays all the relevant shipping methods. Previously, Magento displayed only one shipping method under these circumstances.
  • You can now successfully change currency for an order before you complete the order. Previously, if you changed currency, when you proceeded to checkout by choosing a Bank Transfer Payment as Payment Method, Magento displayed this message: Your credit card will be charged for. Fix submitted by Roman K. in pull request 993. GitHub-12526
  • Magento no longer combines the Custom Checkout and Shipping steps when Magento loads the checkout page. Fix submitted by Roman K. in pull request 975.
  • Magento now alerts customers when a previously applied gift card has been removed during checkout.
  • Guest orders placed with gift cards can now be canceled as expected.
  • Braintree now permits customers to change the billing address on orders when paying with a saved card. Previously, Braintree used the same address for both billing and shipping.
  • Customers can now change an existing value in the checkout page’s State/Province field to an alphanumeric value. Previously, when a customer tried to edit this field in this way, Magento did not place the order, and displayed a descriptive error message.
  • Magento now successfully processes an order that contains products that will be shipped to multiple shipping addresses. Previously, Magento did not complete the order, but displayed an error message.
  • Magento now saves the address that a customer enters during checkout if the customer selects Save in address book. Previously, Magento saved the address, but left the default billing address field empty.
  • Excess requests on the checkout page have been removed. Previously, customer/section/load was called four times when Magento loaded the cart for the first time. Fix submitted by Andrey Bezyazychnyy in pull request 14782. GitHub-15457
  • The alignment of the Purchased Order Form button on the Review & Payments page has been corrected. Fix submitted by Oscar Recio in pull request 15577. GitHub-15334
  • $.browser has been deprecated and removed from the code base. Fix submitted by Jonathan Kingston in pull request 14270. GitHub-14267
  • The minicart now updates as expected when a customer adds a configurable product to the cart while accessing the storefront on a device running Internet Explorer 11.x. Fix submitted by Mastiuhin Oleksandr in pull request 14192. GitHub-13820
  • Magento no longer unchecks the My billing and shipping address are the same checkbox when a customer uses an offline custom payment method for an order. Previously, when a customer used an offline custom payment method for an order, Magento unchecked this checkbox on payment step if the shipping address was updated. Fix submitted by Jignesh Baldha in pull request 17628. GitHub-14819
  • Magento no longer displays an undefined string on the Order Summary page. Fix submitted by Vishal Gelani in pull request 17697. GitHub-17492
  • Unnecessary blank lines have been removed from app/code/Magento/Catalog/etc/adminhtml/menu.xml. Fix submitted by Namrata in pull request 16180.
  • Placeholders for the password field no longer suggest that a password is optional. Previously, the placeholder for the password field in the checkout page suggested that the password was optional, but after validation, Magento indicated that the password field was mandatory. Fix submitted by hitesh-wagento in pull request 16521. GitHub-16378
  • The minicart now correctly displays product titles that contain special characters. Fix submitted by afirlejczyk in pull request 13802. GitHub-13652
  • A shipment step has been added to OnePageCheckoutOfflinePaymentMethodsTest. Fix submitted by Malyovanets Nickolas in pull request 16164. GitHub-1164
  • Newly registered customers can now successfully complete an order after entering a new address. Previously, Magento displayed this message on the checkout page, An error occurred on the server. Please try to place the order again. GitHub-10583
  • Merchants can now successfully add products to the shopping cart using REST. Previously, the shopping cart displayed a total price of zero (0) for products creating from the Admin using REST. GitHub-2991
  • Customers can now successfully sign in after first clicking the Checkout button. GitHub-10834
  • Magento now successfully processes an order even when the customer quickly double-clicks on the minicart’s Proceed to checkout button. Previously, if a customer double-clicked this button while the page was loading, Magento emptied the shopping cart.
  • Magento now displays a pre-filled edit form for checkout agreements when single-store mode is enabled. Fix submitted by gwharton in pull request 15063. GitHub-7822

Cart Price rules

  • The cart price rule now uses specified conditions correctly when applying discounts on configurable products.
  • Magento no longer throws an error when a customer applies a discount code on the checkout page. GitHub-9763

Catalog

  • The getUrl method in Magento\Catalog\Model\Product\Attribute\Frontend\Image no longer returns an image URL with double slashes. Fix submitted by Malyovanets Nickolas in pull request 13635. GitHub-13497
  • An incorrect return type in the StockRegistryInterface API has been corrected. Fix submitted by Burlacu Vasilii in pull request 17562. GitHub-15085
  • Magento no longer throws an error when you try to create a new URN catalog for a project when a blank one already exists in PHP storm. GitHub-5188
  • You can now save a product after updating multiple select attributes through mass action. GitHub-11329
  • Magento now currently handles apostrophes in attribute option values created from the Admin. GitHub-12127
  • The Save & Duplicate option in the catalog manager now works as expected. GitHub-11532
  • Magento now displays the default validation message for validate-item-quantity as expected. Fix submitted by Mastiuhin Oleksandr in pull request 14508. GitHub-13582
  • The Magento\Catalog\Model\ResourceModel\Category\Collection::joinUrlRewrite method now uses the storeId value set on the actual collection of the store rather than the storeId retrieved from the store manager. Fix submitted by rostyslav-hymon in pull request 14381. GitHub-13704
  • Magento no longer displays unused product attributes with a value of N/A or NO on the storefront.
  • Editing an order with backordered items from the Admin now results in a new order with backordered items correctly marked. Fix submitted by Mastiuhin Oleksandr in pull request 14444. GitHub-10057
  • Magento no longer overrides prices with more than two digits after the decimal (for example, 9.4880) by rounding the last two digits. Fix submitted by Mastiuhin Oleksandr in pull request 14461. GitHub-14249
  • Magento now throws an exception as expected when a user tries to submit a product review without selecting a star rating. Previously, if a user submitted a product review without selecting a star rating, Magento assigned a one-star rating. Fix submitted by Karla Saaremäe in pull request 16808. GitHub-16764
  • Merchants can now successfully change the default label of the country of manufacture attribute for an existing product from the Admin. Fix submitted by rostyslav-hymon in pull request 14714. GitHub-6879
  • You can now sort products by quantity from the category page. Fix submitted by Dmytro Paidych in pull request 14179. GitHub-13556
  • Magento no longer creates pagination automatically when a product has more than 20 tier prices in the Advanced Pricing area. Fix submitted by saravananvelu in pull request 15360. GitHub-15210
  • Magento now alerts you to an error when a merchant tries to save a product without completing required fields.
  • You can now sort products by the store configuration default field even when this value differs from category default sort by setting. GitHub-10772
  • Magento now displays product alerts in the Admin product edit page when a customer is subscribed to a product’s stock or price. GitHub-10007
  • The data-container class name is now based on view mode. Fix submitted by Malyovanets Nickolas in pull request 17751. GitHub-15319
  • Parent theme image height settings (specified in view.xml) no longer override the height settings assigned to individual images. Fix submitted by Malyovanets Nickolas in pull request 17725. GitHub-15319
  • You can now save a title for a product from the Product > Customizable Options page. Fix submitted by Jignesh Baldha in pull request 17607. GitHub-6305
  • You can now add a custom fieldset to the Admin category editor without changing the position of the General section (that is, the section that contains the Enable category, Include in Menu, and Category Name fields). Previously, Magento moved the General section to the last position of the form. Fix submitted by Jignesh Baldha in pull request 17604. GitHub-15041
  • Magento now maintains product image roles as expected after upgrade. Previously, image roles randomly disappeared from product pages after upgrade. Fix submitted by Eduard Chitoraga in pull request 17554. GitHub-10687
  • REST search queries in which the condition_type is set to in or nin now return results for all specified values. Fix submitted by Eduard Chitoraga in pull request 16742. GitHub-14035
  • A type error in the payment void method of the Authorizenet module has been fixed. Fix submitted by JeroenVanLeusden in pull request 16838. GitHub-5067
  • You can now add a product with a price of zero (0) to a wishlist. Fix submitted by Vishal Gelani in pull request 16537. GitHub-16479
  • Magento now maintains the default products sort order of “newest first” when you upgrade your Magento deployment. Previously, after upgrade, the default products order in categories changed from “newest first” to “oldest first”. GitHub-15627
  • An error with the template notation for Magento_CatalogWidget module has been fixed. Fix submitted by Vishal Gelani in pull request 16856. GitHub-16529
  • Magento no longer throws an error when you re-save a product attribute with a new name. Fix submitted by Raul Mateos in pull request 11619. GitHub-6770
  • The grouped product page now shows the lowest price for a simple product. Fix submitted by evgk in pull request 9266. GitHub-9265
  • You can now add a new product with custom attributes that has the same name and attributes as a previously deleted product. Previously, Magento did not let you add this new product because a request_path with the same value already existed in table url_rewrite from the previous product. Fix submitted by Nickolas Malyovanets in pull request 12538. GitHub-12110
  • Magento now saves the assigned background color for images correctly. Previously, if you updated the background color of a product image, the background color was always black. Fix submitted by Raul Mateos in pull request 11888. GitHub-8799
  • You can now assign and save a custom option assigned a price of 0. Fix submitted by Raul Mateos in pull request 11842.GitHub-4808
  • The ProductRepository SKU cache is no longer corrupted when the value assigned to cacheLimit is reached. Fix submitted by Thomas in pull request 11537.
  • The price filter on a product category page now works as expected. Previously, if you applied this filter to a category listing, Magento displayed redundant product listings and unrelated products. Fix submitted by Mayank Zalavadia in pull request 11206. GitHub-11139
  • You can now successfully create a product from API Product Management in deployments where the Update by Schedule indexer mode is set.
  • Configurable products are no longer displayed on a category page when all children are disabled by mass action and the display out-of-stock products setting is off.
  • Magento no longer displays a 404 error when you change category permissions from Product Detail pages when multistore view is enabled.
  • Magento no longer throws an exception when you add a product with a tiered price reduced to $0.00 to your shopping cart.
  • The Hide from Product Page option now works for the child product of a configurable product.
  • Translation functionality has been added to customer attribute labels in the Admin, making it possible to translate a label as appropriate for the locale of an Admin user. Fix submitted by Christian Münch in pull request 13251.
  • Magento now displays the Catalog Products List widget on the storefront. Fix submitted by Rostislav Sabischenko in pull request 12765.
  • Magento now respects the maximum depth setting for category navigation. Fix submitted by Arnoud Beekman in pull request 12640.
  • Category page X-Magento-Tags headers no longer contain product cache identities when category display mode is set to Static block only when Varnish is selected as the cache engine.
  • You can now specify a negative value for a product in the orders Quantity field when editing the order from the Admin.
  • You can now create a product date attribute that contains a day value than exceeds 12 (in the format dd/mm/yyyy). Previously, when you created a product attribute with a default date specifying a day greater than 12, Magento did not save the attribute, but instead displayed this error, Invalid default date.
  • Sort by Price now works as expected on the catalog search page. Fix submitted by Roman K. in pull request 929. GitHub-12468
  • Magento now correctly sets a product_links position attribute even when the attribute value is not set in a GET request. Previously, only the first two of each link type was shown in the backend or in a GET request response, even though Magento correctly added the product links to the database. Fix submitted by Mohammad Haj-Salem in pull request 12650.
  • You can now unset a category image on the store-view level when the image is defined on all store views.
  • Usage of EAV indexer tables in the CatalogWidget module has been removed.
  • Magento now correctly renders print previews of product compare pages. Previously, the print view did not display text from the right side of the product compare page.
  • The validation hint on the product custom option page text field now updates as expected with the number of characters left before hitting the maximum.
  • The PUT /V1/products/:sku/media/:entryId call updates a product’s media gallery as expected.
  • Products no longer disappear from the Admin Product grid after you delete its active schedule update.
  • Single quotation marks in attribute values are no longer auto-converted to HTML when saved.
  • The SEO-friendly URL for category pages now works as expected.
  • We’ve optimized queries on loading product attributes when store scope is used.
  • Products are no longer automatically assigned to websites based on store scope. If a product is assigned to one website only, that relationship is maintained even after the product is saved from the Admin.
  • Product Display Pages (PDPs) now load as expected when a product name contains a double quotation mark. Previously, Magento did not load the image if its name contained double quotation marks.
  • A restricted administrative user who is authorized to access only designated websites can no longer remove products from undesignated websites.
  • Customers viewing a storefront on a mobile device can now see the text displayed when clicking on the “More Information” accordion anchor without having to scroll back up. Previously, the Mobile PDP accordion widget did not work as expected on mobile devices.
  • Magento now maintains designated sort order for products after saving a product in a category. Previously, product sort order reverted to sorting by product ID.
  • You can now filter successfully by date from the Admin on products in multistore environments. Previously, values in the product creation date field (that is, the date set when Set Product as New from Date is selected) were arbitrarily changed, and filtering did not work.
  • Attributes with no assigned values on a product are no longer displayed with a value of N/A in the Compare Products page or block as expected.
  • Prices are now visible as expected on the category page for a configurable product when you re-enable them from the Admin. Previously, when you re-enabled a previously disabled product and assigned it to a different store, Magento did not display its price on the category or product page.
  • Category smart rules now work as expected for partial values when conditions include using a dropdown attribute and “contains”.
  • Magento now correctly sets the default option for the status attribute when a merchant creates a product. Previously, Magento changed a default setting of disabled (No) to Yes during product creation.
  • auto_increment values are now preserved after restarting the MySQL server.
  • You can now successfully save a product with custom options to a different website in multisite deployments. Previously, when you added another site to a product with customizable options, Magento corrupted these options by splitting into multiple options or duplicating an option.
  • A product’s Use Default Value check box for attributes is now unchecked by default when you add a new website to a product’s scope.
  • The subcategory URL path is now updated for a store view according to the URL path of its parent category.
  • Magento now displays drop-down attribute values in the catalog product grid after applying filtering on drop-down/select attributes. Fix submitted by Dmytro Paidych in pull request 14174. GitHub-13006
  • The JavaScript address converter no longer mutates the function’s address.street argument. (The argument remains an array as expected.) Fix submitted by Mastiuhin Oleksandr in pull request 14250.
  • You can now see category changes on the storefront as expected after the changes have been saved. Previously, Magento did not display changes to product categories on the storefront until reindexing occurred even if update on schedule was set and the cache had been cleaned.
  • Product attribute are now displayed as expected in layered navigation with Elasticsearch 5.0+.
  • Product pages now show the product name as the browser title and include meta title tag in the HTML source. (The title and meta title tags can now be used independently.) Fix submitted by Malyovanets Nickolas in pull request 17771. GitHub-15501

Catalog Rule

  • Catalog rules are now applied as expected when products are sorted by price.

Cleanup and simple code refactoring

  • Zoom is no longer abnormally active when a mouse hovers over the category dropdown menu on the product page. GitHub-5129
  • getAttributeText($attributeCode) now returns the correct return type. GitHub-11691
  • All references to Magento Connect has been removed from the Find Partners & Extensions links. GitHub-12632
  • Method name getDispretionPath has been corrected to getDispersionPath in \lib\internal\Magento\Framework\File\Uploader.php. GitHub-12506
  • Unused temporary variable $data has been removed from the app/code/Magento/Catalog/Controller/Adminhtml/Category/Save.php method. Fix submitted by Malyovanets Nickolas in pull request 13733.
  • addres has been corrected to address in app/code/Magento/Customer/etc/events.xml. Fix submitted by Malyovanets Nickolas in pull request 13794.
  • Code formatting in app/code/Magento/Swagger/view/frontend/templates/swagger-ui/index.phtml has been updated. Fix submitted by p-bystritsky in pull request 13616.
  • The edit cart product input validators have been changed from hardcoded to dynamic in app/code/Magento/Checkout/view/frontend/templates/cart/item/configure/updatecart.phtml. Fix submitted by p-bystritsky in pull request 13615.
  • Typos have been corrected throughout the code base. Fix submitted by Aki Ojalehto in pull request 13300.
  • Redundant code has been removed for clarity in app/code/Magento/AdminNotification/Model/Feed.php. Fix submitted by Aki Ojalehto in pull request 13303.
  • Misspellings in method names have been fixed, and deprecated methods removed in several adminhtml files. Fix submitted by Aki Ojalehto in pull request 13304.
  • A typo in the database column comment of app/code/Magento/Catalog/Setup/InstallSchema.php has been fixed. Fix submitted by Aki Ojalehto in pull request 13318.
  • Typos throughout the code base have been corrected. Fix submitted by Aki Ojalehto in pull request 13283.
  • A misspelled method name in \Magento\BundleImportExport\Model\Import\Product\Type\Bundle has been corrected. Fix submitted by Aki Ojalehto in pull request 13187.
  • A misspelled parameter name in \Magento\Weee\Test\Unit\Model\TaxTest::testGetWeeeAmountExclTax has been corrected. Fix submitted by Aki Ojalehto in pull request 13189.
  • Catelog has been corrected to catalog throughout the code base. Fix submitted by Danny Verkade in pull request 13097.
  • Consturctor has been corrected to constructor in the app/code/Magento/Ui/view/base/web/js/lib/core/class.js JavaScript class. Fix submitted by Danny Verkade in pull request 12976.
  • The syntax of expectException() calls has been improved. Fix submitted by Mastiuhin Oleksandr in pull request 14621. GitHub-11059
  • JavaScript in the Tav module has been refactored to meet Magento code standards. Fix submitted by Vishal Gelani in pull request 15560. GitHub-15352
  • Magento no longer unexpectedly empties a customer’s shopping cart during checkout when concurrent requests occur. Fix submitted by adrian-martinez-interactiv4 in pull request 14429. GitHub-4301
  • @codingStandardsIgnoreFile has been removed from the TypeLocatorTest file header. Fix submitted by Danny Verkade in pull request 12977.
  • Redundant spaces have been removed from the “configure your” phrase throughout the code base. Fix submitted by Danny Verkade in pull request 12961.
  • An unused if statement has been removed from app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Save.php. Fix submitted by JeroenVanLeusden in pull request 12888.
  • Magento no longer displays duplicate element IDs for gift messages in the checkout page. Fix submitted by Julien Anquetil in pull request 15705. GitHub-13415
  • Magento now correctly aligns submenus. Fix submitted by hitesh-wagento in pull request 15764. GitHub-7897
  • The app/code/Magento/CurrencySymbol/view/adminhtml/templates/grid.phtml file has been refactored to remove redundant function calls. Fix submitted by Vishal Gelani in pull request 15763. GitHub-15355
  • Client-side email validation now works in Internet Explorer 11.x the same way as it does in Chrome. Previously, a leading or trailing space on the following pages resulted in client-side validation failure in Magento stores deployed on Internet Explorer 11.x. Fix submitted by Piyush Dankhara in pull request 15884. GitHub-6058
  • Magento now correctly aligns page elements on the home page and category page of the Hot Seller section. Fix submitted by Chirag Matholiya in pull request 15896. GitHub-15213
  • Extraneous margins on the product list and product entries have been removed. Fix submitted by Chirag Matholiya in pull request 15975. GitHub-15308
  • inline-block issues with space and font-size in the Name form have been resolved. Fix submitted by Daniel Ruf in pull request 16097. GitHub-16047
  • Unneeded JavaScript was removed from logout.phtml and replaced with a new JavaScript component. Fix submitted by Ihor Sviziev in pull request 16993. GitHub-13692
  • Template syntax errors in app/code/Magento/Theme/Block/Html/Breadcrumbs.php have been corrected. Fix submitted by Vishal Gelani in pull request 16805. GitHub-15345
  • Magento now disables the Shop By button on the search page when a customer sets additional search filters. Fix submitted by Pratik Oza in pull request 17418. GitHub-13445
  • Product image zoom now works as expected in stores running on Safari. Fix submitted by Pratik Oza in pull request 17418. GitHub-13445
  • The $keepRation parameter in the Magento\Cms\Model\Wysiwyg\Images\Storage class has been renamed to $keepRatio. Fix submitted by Eduard Chitoraga in pull request 17596. GitHub-17587
  • A typo in gallery.php has been fixed. Fix submitted by Daniël van der Linden in pull request 17659.
  • The delete operation entity_manager_delete_before transaction event is no longer dispatched twice unnecessarily. Fix submitted by p-bystritsky in pull request 17720. GitHub-17715
  • Unnecessary space has been trimmed from the email address field in the forgot password, check out, log in, and email to a friend forms. Fix submitted by Vishal Gelani in pull request 16640. GitHub-6058
  • The JavaScript code in the spli.phtml template file for the button widget has been refactored. Fix submitted by Vijay Golani in pull request 15731. GitHub-15354
  • The JavaScript code for the UrlRewrite module edit page has been refactored. Fix submitted by Vijay Golani in pull request 15747. GitHub-15356
  • The annotation for the formatDateTime function in the lib/internal/Magento/Framework/Stdlib/DateTime/TimezoneInterface.php file has been corrected. The locale and timezone have been changed to param string|null $locale and @param string|null $timezone. GitHub-15668
  • Magento now displays the Contact Us page on the menu as expected. Previously, Magento displayed unnecessary space between the category page and the main footer. Fix submitted by Sanjay Patel in pull request 15726. GitHub-12601
  • Magento now displays category images consistently. Previously, category images disappeared then reappeared after every save.
  • We’ve fixed the display of calculated tax for a logged-in customer when billing and shipping address differed.

CMS content

  • Page layout issues that resulted from incorrect module sequencing have been corrected. Previously, the Magento_theme module was loaded too late, which resulted in unexpected display issues.
  • Magento no longer unexpectedly locks up CMS pages when a merchant changes a scheduler end date. Previously, when a merchant updated the end date for a CMS page after the current scheduler ended, Magento generated an error, and the merchant could no longer access any CMS page from the Admin.
  • We’ve added EvenPrefix and EventObject for CMS Collections to instantiate the observer for $this->_eventPrefix . '_load_after' and $this->_eventPrefix . '_load_before'. GitHub-9900
  • There is now an API interface for retrieving CMS pages and blocks by identifiers and store ID. GitHub-10414
  • Disabling a product now removes it from the flat index as expected. Fix submitted by Vishal Gelani in pull request 16791. GitHub-14966
  • Breadcrumbs now work as expected when a product name contains quotation marks. Previously, the breadcrumbs on the product details page caused this syntax error to be thrown: SyntaxError: Unexpected token x in JSON. Fix submitted by Jignesh Baldha in pull request 16148. GitHub-15037
  • CMS blocks are now validated to prevent multiple blocks from having the same store view and identifier.
  • You can now configure the native WYSIWYG toolbar to display only applicable controls. See Using the Editor for more information.
  • The Store > Attributes > Product Input type field now supports the use of the WYSIWYG editor as an input method when configuring custom product attributes.

Configurable products

  • The product configuration creator now warns about invalid SKUs. GitHub-11953
  • The currency symbol no longer overlaps with an attribute option’s price during configurable product creation. GitHub-12713
  • Magento now displays the price of a configurable product as expected even when its simple products are out-of-stock. Previously, Magento displayed a price of 0 for any configurable product price when its simple products were out-of-stock. GitHub-12578
  • Magento now displays the correct price for a product when its special-price option has not been selected. Previously, Magento displayed the expired special_price value for a configurable product even when you did not select the product option associated with that price. Fix submitted by Sergey P in pull request 9796. GitHub-6457
  • Configurable product prices now correctly reflect VAT amounts as set by tax rule settings. Previously, Magento displayed a configurable product’s old price without the VAT. Fix submitted by Sergey P in pull request 9796. GitHub-6729
  • LowestPriceOptionsProvider now works as expected. Previously, Magento displayed expired special prices for configurable products, and displayed other problematic behaviors when working with special prices and configurable products. Fix submitted by Sergey P in pull request 9796. GitHub-7362
  • You can now successfully add a new product that contains a custom attribute set with a multiselect attribute from the Admin. Fix submitted by Teun Lassche in pull request 10575. GitHub-10565
  • Configurable products are now sorted by visible prices as expected. Previously, sorting a catalog by price produced sort results that included the prices of out-of-stock products and disabled child products.
  • Magento no longer displays an inappropriate product price when a configurable product has two price options. Previously, Magento displayed the out-of-stock price of a configurable product when both an out-of-stock and in-stock price were configured.
  • Magento now reorders configurable attribute options as expected on the product page. Fix submitted by wardcapp in pull request 12962. GitHub-7441
  • Magento now displays a helpful error when a merchant attempts to upload a file in an unsupported file format.
  • The wishlist now displays the appropriate product image for configurable products with selected options. Previously, Magento displayed the parent image instead of the image of the selected child product. GitHub-8168
  • The OptionsRepository API test now tests for the use of attribute ID instead of attribute code in the request body. Fix submitted by Bettina in pull request 14345. GitHub-5580
  • Prices are now readable when you assign prices that use a custom price symbol to a configurable product. Previously, the custom price symbol obscured the product price. GitHub-12430
  • Magento now saves multiselect attributes for a product in the Admin when it has a related product that uses another attribute set. GitHub-12699
  • Magento no longer lets a customer select a configurable product with an out-of-stock option to add to their cart. Fix submitted by Alexander Shkurko in pull request 13417.
  • You can now add customizable options to a product as expected. GitHub-11792
  • The orders page now displays the correct URL when you navigate back to it after having viewed a specific order page. Previously, the URL of the orders page displayed the previous order ID when you navigated back to it. Fix submitted by Vinay Shah in pull request 13390.GitHub-13295

Cookies

  • Customer data is now fully loaded after restarting the browser during an unexpired user session. Previously, the section_data_ids section of the session cookie was not properly completed. GitHub-14912
  • Cookies can now be modified by extension. Fix submitted by rostyslav-hymon in pull request 14366.

Customers

  • Magento now uses the correct amounts when creating a credit memo for an order that was placed using store credit, a gift card, or reward points.
  • Administrators can see all customers when the Share Customer Accounts value is set to Global.
  • Magento now loads customer private data only once when system state changes. Previously, “Directory Data” and “Cart” were loaded twice after a user logged in to the system, which caused additional server load and traffic.
  • Magento now correctly displays both the default and additional shipping addresses provided during checkout. Previously, Magento displayed attributes with dropdown and multiple select types with incorrect values (option IDs instead of labels) for shipping addresses on checkout.
  • We have replaced Zend_Json with \Magento\Framework\Serialize\JsonConverter::convert in customer data. GitHub-10259
  • In multi-site deployments, a customer requesting a password reset on a non-default store should receive the password reset email from the non-default, not the primary, store. Previously, this password reset email was sent from the default store. Fix submitted by Yaroslav Rogoza in pull request 15095. GitHub-5726
  • Unnecessary leading and trailing spaces have been removed from the customer account login page email field. Fix submitted by Vishal Gelani in pull request 16956. GitHub-6058
  • Table alias prefixes in field mappings for customer group filter and sorting processors that were previously missing have been restored. Previous to this restoration, Magento threw this error when a merchant opened Customers > All Customers: SQL Error: ambiguous column 'customer_group_id' in 'All customers' page in admin when extension attribute table is joined. Fix submitted by hitesh-wagento in pull request 15842. GitHub-15822
  • Customer accounts are now unlocked as expected after a password reset. GitHub-15534
  • The adminhtml customer edit page now displays any customer address validation errors. Fix submitted by Adrian Martinez in pull request 12937.
  • You can now successfully send email to customer email addresses that contain special characters when initiating email but clicking the Resend Confirmation Mail button on the customer account page.
  • Magento no longer displays the Too many password reset requests message when an administrator attempts to change a customer’s password from the Admin and the max wait time between password resets setting has been disabled in the store configuration settings. GitHub-11409
  • We’ve added methods to support setting text values for data pulled from the customer_grid_flat table during CSV export. GitHub-10765
  • The Confirmed email and Account Lock columns of the customer table CSV export are now populated with values as expected. GitHub-10765
  • Customer objects are now properly differentiated from each other after a customer_save_after_data_object event. Previously, the orig_customer_data_object and customer_data_object objects remained identical even after customer information was changed on the storefront. GitHub-7915
  • We’ve improved the error message that Magento displays when an administrator is redirected to a forced password change from the Admin user account page. Fix submitted by dimonovp in pull request 14199. GitHub-13768
  • Customer attributes are now correctly validated on the Admin Order form. Previously, Magento validated attribute length after an order has been submitted, but not on the Admin Order form.
  • A user who has been denied permissions for negotiable quote editing can now create customer addresses.
  • Magento now trims trailing and leading spaces when saving the name of a new contact. Fix submitted by wardcapp in pull request 12964. GitHub-10415
  • We’ve added cast to string for GroupInterface::CUST_GROUP_ALL in the customer group source model. GitHub-10436
  • Magento now always returns the user data for the current logged user. Previously, you could get another customer’s session information from sections controller without a timestamp. Fix submitted by rostyslav-hymon in pull request 14661. GitHub-14049
  • The PayPal module no longer automatically sets the customer dashboard page to Billing Agreements. Fix submitted by Mike Whitby in pull request 14322. GitHub-7816
  • The Customer group menu is now displayed under Customers when you create a user role for a customer group. Fix submitted by Jignesh Baldha in pull request 17574. GitHub-16499
  • The welcome email sent to new customers is now based on the ID of the selected store. Previously, Magento did not check if the selected store from which to send the welcome email was associated with website when creating a customer account in the Admin.  Fix submitted by Jason Evans in pull request 17375. GitHub-10411

Customer attributes

  • You can now clear the Date of Birth field in the customer edit page when accessed from the Admin.
  • Merchants can now create attributes for customer addresses (Stores > Attributes > Customer Address) as expected. Previously, a merchant could create an attribute, but Magento did not save or display it.
  • Magento now adds the address entered during checkout to a new account when a custom address attribute is required when creating a user account after checkout.
  • User-defined customer attributes are now copied to the magento_customercustomattributes_sales_flat_order table after placing an order as expected.
  • Magento no longer validates customer address attribute value length when the minimum/maximum length fields are not displayed on the Admin.

Dashboard

  • Comments for StorageInterface.php have been updated for accuracy. Fix submitted by Malyovanets Nickolas in pull request 13729.
  • You can now search for configuration settings from the Admin.
  • Long input field labels now wrap by word, not letter.
  • The dashboard last order table now shows the correct table for the specified store view in a multisite deployment where storefronts use different currencies. Fix submitted by Ankur Raiyani in pull request 15682. GitHub-15660
  • When you edit an administrative user role, Magento now displays the Customer Groups section under the Customers section as expected. Previously, Magento displayed the Customer Groups section under the Stores > Other settings section.

Directory

  • When sorting by price, Magento now displays the same number of products no matter how it sorts products in the Catalog Product list. Previously, Magento reduced the product count by the number of disabled products when sorting by price. Fix submitted by AlexWorking in pull request 14215. GitHub-13899
  • Currency conversion rate services now work as expected in the Admin.
  • The new Currency Converter API supports retrieving TWD currency rates. Previously, the currency rates services that Magento connected to by default could not retrieve TWD rates. Fix submitted by Hirokazu Nishi in pull request 15542.GitHub-15541
  • Magento now displays the default country selection when you add a new address as part of creating a new customer from the Admin. Fix submitted by rostyslav-hymon in pull request 14204 GitHub-3483

dotmailer

  • dotmailer now displays the first and last purchase categories in the customer sales data fields.

EAV

  • The Product Attribute Repository’s incorrect return values have been replaced with values that now adhere to Magento\Catalog\Api\ProductAttributeRepositoryInterface (extends Magento\Framework\Api\MetadataServiceInterface) as expected. Fix submitted by julianvdrielen in pull request 15723. GitHub-4803
  • When Elasticsearch is configured as the search engine, you can now enable and disable the EAV indexer from the Enable EAV Indexer field (Stores > Settings > Configuration > General > Catalog > Catalog Search).
  • Magento no longer displays empty product attributes of type dropdown or swatch as having a value of no on the storefront.
  • You can now perform a mass update on products that have more than 60 attributes.
  • Magento now displays an error message when it does not save dropdown values as you create them. Previously, Magento did not save the options, and did not alert you in a message.
  • The @see tag now identifies a deprecated property in app/code/Magento/Eav/Model/AttributeManagement.php. Fix submitted by Aki Ojalehto in pull request 13301.
  • When a product is saved, the beforeSave method now encodes the attribute value only if the value is not encoded already. Previously, if you saved a product multiple times, then the JSON-encoded attribute value was also encoded multiple times, which causes problems during subsequent loads.
  • Magento no longer displays an SQL query in the browser when an exception occurs. Fix submitted by rostyslav-hymon in pull request 14223. GitHub-13385
  • You can now filter an EAV collection before loading by specifying that the value of the attribute is null. GitHub-14312, GitHub-14355

Email

  • Nonfunctioning links in the order confirmation email have been corrected. GitHub-12261

Frameworks

  • Declared index names in db_schema.xml are no longer ignored by declarative schema. Previously, index names were autogenerated based on table and column names.
  • The htmlentities function has been replaced with the htmlspecialchars function.
  • Magnifier now works as expected on any supported operating system and browser. Previously, Magnifier did not hover correctly on devices running Windows Chrome or FireFox.
  • Magnifier now turns off as expected when a user moves the cursor off an image.
  • The ExtensionAttributes object is now autogenerated.
  • ObserverInterface has been added to @api. Previously, creating an observer that uses ObserverInterface triggered a patch-level dependency on magento/framework. Fix submitted by Malyovanets Nickolas in pull request 13786.
  • The doc block of the walk method in a collection now correctly reflects that this method will accept an array. Fix submitted by ByteCreation in pull request 13374.
  • getFrontName has been refactored to return getModuleName’s return values. Fix submitted by Aki Ojalehto in pull request 13299.
  • Emogrifier dependency has been updated to ^2.0.0. Fix submitted by Oliver Klee in pull request 13351.
  • The log message created when Magento throws an exception when opening an image now tells you which file triggered the exception. Fix submitted by Patrick McLain in pull request 13144.
  • Zend_Json has been removed from the JSON result controller. GitHub-9236
  • \Magento\TestFramework\Annotation\AppArea no longer breaks when it encounters valid values. Fix submitted by Malyovanets Nickolas in pull request 12992. GitHub-2907
  • Zend_Service has been upgraded from v.1 to v.2, including these specific changes:

    • Removed Magento\Framework\Locale\CurrencyInterfac from the setService method and changed it to \Zend_Currency_CurrencyInterface, which must be the provider to this function.

    • Changed return type to \Zend_Currency_CurrencyInterface, the given instance of the service is returned by the setService function.

    • Removed \Zend_Service from the getService method and changed it to \Zend_Currency_CurrencyInterface.

    • Added @deprecated tags to both methods and added @see annotation to the methods. Referenced the corresponding interface \Magento\Directory\Model\Currency\Import\ImportInterface. Fix submitted by Danny Verkade in pull request 12957. GitHub-9243

  • The ReleaseNotification module has been added to support the display of new release highlights.
  • The Zend_Feed::importArray static call has been replaced with a new interface. This concrete class takes the Zend_Feed object and returns its own result in the form of a wrapper around Zend_Feed_Abstract. Fix submitted by Dusan Lukic in pull request 9347. GitHub-9240
  • Customers can now successfully check out when the AdBlock extension and Google Analytics are enabled.
  • Product records inside the catalog_product_super_link table are no longer updated needlessly when you save a configurable product. Previously, saving a configurable product erased and then reinserted records in the catalog_product_super_link table even when child products were not changed. This practice quickly resulted in an unnecessarily large catalog_product_super_link table, especially in multi-website installations.
  • Magento now caches popular search results for faster response time on popular searches. A system administrator can configure how many top search queries can be cached.
  • We’ve replaced the usage of Zend_Json::encode in the setup marketplace tests. GitHub-9236
  • The Magento\Framework\Json\Helper\Data class has been deprecated and removed from the Magento\AdminNotification module. GitHub-10329
  • An entry for compiled_config cache has been added to the cache.xml file. GitHub-11295
  • The report page now returns a 500 status code (internal server error) instead of a 503 status code when an unexpected error happens, such as an event that generates the report format pages. Fix submitted by AlexWorking in pull request 14190. GitHub-11512
  • You can now use the layout update XML field to include custom CSS in CMS pages. GitHub-4454
  • The $params parameter for the post method of \Magento\Framework\HTTP\ClientInterface has been updated to support string type. Fix submitted by Sergey P in pull request 14481. GitHub-3489
  • We’ve added JSON and XML support to the post method in the \Magento\Framework\HTTP\Client\Socket class. Fix submitted by Sergey P in pull request 14169. GitHub-3489
  • After restart of MySQL, changelog tables now always contain at least one record. Previously, changelog tables were empty, which resulted in a loss of the last auro_increment value for the product ‘version_id’. Fix submitted by Ihor Sviziev in pull request 14636. GitHub-14465
  • Magento now displays two distinct widgets on the homepage as expected when you create two widgets of type Catalog Product List to the CMS homepage at location content.bottom with different titles, but the same condition. Previously, the first widget loaded was displayed twice depending on sort order. Fix submitted by Ihor Sviziev in pull request 14816. GitHub-4389
  • The Change Password warning message no longer appears twice when Magento prompts you to change your password in the Admin. Fix submitted by Riccardo Tempesta in pull request 14897. GitHub-14895
  • Pages are now successfully rendered when the meta title page configuration parameter is set. Fix submitted by Lorenzo Stramaccia in pull request 11368. GitHub-2956
  • CSS code is now automatically updated in the browser. Previously, users had to press CTRL+F5 to see CSS changes. GitHub-11354
  • \Magento\Framework\Encryption\Encryptor::getHash now uses the specified hashing algorithm version. Fix submitted by Mads Nielsen in pull request 13885. GitHub-5463
  • The Multiple Payment Methods Enabled setting now works as expected. Previously, Magento threw this error when this setting was enabled: Found 3 Elements with non-unique Id. GitHub-15348
  • The setAttributeFilter method now specifies a table when calling the addFieldToFilter method to add a field to the filter for the collection Eav/Model/ResourceModel/Entity/Attribute/Option/Collection.php. Fix submitted by rostyslav-hymon in pull request 14676. GitHub-14572
  • Categories are now populated as expected. Previously, catalog_category_product_index did not contain all category product relations that are in catalog_category_product. The highest category IDs per type were missing from the index. Fix submitted by Anton Evers in pull request 12624.
  • vendor/magento/framework/composer.json now declare a dependency on \Zend_Db_Select. Fix submitted by Ihor Sviziev in pull request 12992. GitHub-12967
  • The Magento Admin no longer falls into a redirect loop when an administrator logs in with a role that has no resources assigned. GitHub-10611
  • You can now successfully print out an invoice from the Admin without including order details. Previously, Magento threw a fatal error because the Zend_Pdf_Color_RGB class was not found in the _drawHeader method. GitHub-11581
  • The Stores > Settings > Terms and Conditions table now displays the names of all store views and conditions as expected. Fix submitted by rostyslav-hymon in pull request 14868. GitHub-13944
  • We’ve fixed backward-incompatible changes to transport variable event parameters that had previously resulted in neither the email or the $transport variable being changed as expected. Fix submitted by gwharton in pull request 16600. GitHub-10210
  • The sodium library now handles all new encryption and decryption while supporting encryption and decryption of legacy values with mcrypt. Fix submitted by Patrick McLain in pull request 135.GitHub-128, GitHub-124, GitHub-129

Application framework

  • We’ve removed undefined fields from files in /lib. Fix submitted by adrian-martinez-interactiv4 in pull request 11662.
  • The doc block that describes setValue in FilterBuilder now reflects that this method will accept an array. Fix submitted by ByteCreation in pull request 11855.
  • Magento now uses valid ISO language codes in HTML headers. Fix submitted by Cristian Sanclemente in pull request 11644. GitHub-11540
  • Magento can now generate unsecure URLs if the current URL is secure. GitHub-6175
  • The php bin/magento app:config:dump command no longer adds an extra space to multiline array values every time it runs. Previously, this command inserted extra spaces, which triggered Github to commit these files as changed. Fix submitted by adrian-martinez-interactiv4 in pull request 11452. GitHub-11328
  • The StockItemCriteriaInterface method setProductsFilter now accepts an array of IDs. Previously, this method accepted either a single integer or an array, but returned only one item. Fix submitted by Kirill Morozov in pull request 11503.GitHub-7678
  • The Magento application framework has been updated to address a jQuery security issue.
  • We’ve removed the usage of Zend_Json from the JSON controller. GitHub-10342
  • The \Magento\Framework\Serialize\Serializer\Json class has replaced Zend_Json usage in Framework/Module/PackageInfo.php. GitHub-9236
  • Zend_Json has been removed from the DataObject class. GitHub-9236
  • We’ve added a declarative mechanism to limit the HTTP methods that a controller can process by implementing one or more Http<Method>ActionInterface.
  • Zend_Json has been removed from setup and Webapi and replaced by Serializer\Json in PackagesAuth.
  • Classes that contain a are now rendered as added to the XML. Previously, were replaced with a single -. GitHub-10645

Configuration framework

  • An order’s relation_child_id and relation_child_real_id fields are now accurately set during edit operations. Fix submitted by Roman K. in pull request 11909. GitHub-10195
  • Pages that contain layout files with block_id arguments that contain whitespace now load correctly. Previously, Magento threw an error when loading these pages. Fix submitted by Ihor Sviziev in pull request 11849.GitHub-7640
  • The config array can now read all settings from config. Previously, the config array was hardcoded to read three settings only. Fix submitted by Vova Yatsyuk in pull request 11302.
  • You can now assign a default value to config fields of type image or file. Fix submitted by Anton Evers in pull request 10253.GitHub-10252

Database framework

  • The getSize function now reflects item and page count totals for filtered product collections on the category page.

JavaScript framework

  • Magento now displays video and images as expected when you select a video or click to view a full-screen image for a configurable product. Fix submitted by Chumak Roman in pull request 12556. GitHub-12268
  • We’ve removed duplicate parameters from a Magento UI LESS library mixin. Fix submitted by Bartek Igielski in pull request 11276.
  • The calendar widget (jQuery UI DatePicker) now correctly displays more than one month. GitHub-7379
  • JavaScript files are now located inside the web/js directory.
  • Menus with nested elements now align correctly. GitHub-7897
  • Magento no longer incorrectly overly encodes UTF-8 files when JavaScript bundling is enabled. Previously, this issue resulted in poor character encoding on the storefront. GitHub-10562, GitHub-6733
  • jquery.mobile.custom.js is now compatible with jQuery 3.x. Fix submitted by Kirill Morozov in pull request 13688.
  • The Fotorama gallery now works as expected on Android devices. Fix submitted by Danilo Argentiero in pull request 14123. GitHub-7906
  • The dataprovider constructor has been changed to the RendererInterface, making it compatible with custom translators (which can be injected as an argument for \Magento\Framework\Phrase\Renderer\Composite). Fix submitted by Danny Verkade in pull request 12007. GitHub-2156
  • You can now place an order for a grouped product where the subproducts quantity is less than one. Fix submitted by Ihor Sviziev in pull request 14814. GitHub-14692
  • A JavaScript error in dropdowns.js has been fixed by properly initializing the el variable. You can now set options.autoclose to false. Fix submitted by Dmytro Cheshun in pull request 15607. GitHub-15469

Session framework

  • The sid variable (?sid) no longer appears in the URL even if it is disabled in the Admin. GitHub-9453
  • We’ve removed the 30-second timeout limit for the session locking mechanism when Redis is used for session storage.
  • colinmollenhour/php-redis-session-abstract has been updated to support PHP 7.2. Fix submitted by Patrick McLain in pull request 39.
  • When you add a product to your wish list after logging out, Magento now redirects you to your account Wish list page and adds the product. Previously, you were redirected to your wishlist page, but Magento did not add the product. GitHub-11825
  • The shopping cart no longer empties unexpectedly due to concurrent requests during checkout. Fix submitted by Jignesh Baldha in pull request 17608. GitHub-12362

General fixes

  • Magento now validates custom layout update XML against the schema file when you save the XML. Fix submitted by adrian-martinez-interactiv4 in pull request 11859.
  • You can now successfully close full-screen zoomed product images displayed on an iPhone 4s, 5s, 6, or 6s with the Safari browser. Previously, if you chose full screen zoom for any product image, you could not close the full screen zoom.
  • Deleting a customer from the Admin no longer causes fatal errors upon storefront login or registration.
  • The Modified date field is now updated as expected when you save a page in a deployment running Magento 2.2.1. Fix submitted by Oscar Recio in pull request 12637. GitHub-12625
  • When the Redirect Customer to Account Dashboard after Logging in setting is disabled, Magento now includes the login URL (including the referrer in base64 encoding) from the window.checkout object as expected (for example, https://myshop.com/customer/account/login/referrer/aHR0cHM6Ly9teXNob3AuY29tL2NoZWNrb3V0).
  • Magento now correctly handles file or image type customer attributes. Previously, when you tried to save customer information when one of these customer attributes were set, Magento threw an exception and did not save the file. Fix submitted by Franciszek Wawrzak in pull request 11267. GitHub-11252
  • You can now use uppercase letters in store codes. Fix submitted by Manu Gonzalez Rodriguez in pull request 12010. GitHub-11996
  • You can now add a new attribute class to a page’s XML root by adding an HTML node. Previously, adding an HTML node caused a validation error. Fix submitted by Adrian Martinez in pull request 11862. GitHub-11697
  • The \Magento\Quote\Model\ResourceModel\Quote\Item\Collection now returns items that have only existing relations in the catalog_product_entity table. Previously, Magento loaded quote items with non-existing products.
  • Magento now correctly renders the download link in invoice emails. Fix submitted by Jakob Meissner in pull request 11024.
  • AuthenticationInterface now contains API interceptors that enhance user authentication, making it possible (for example) to implement a different hashing algorithm for non-Magento to Magento migrations. Fix submitted by Navarr Barnier in pull request 11546.
  • The Magento UI mixins have been edited to improve performance. Changes include:

    • removing all fallbacks to variables that don’t exist in the global scope

    • defining all variables that are used inside mixins as parameters

    • adding all missing parameters to the areas of the code where mixins are invoked

    • moving and simplifying mixins used only once. Fix submitted by Bartek Igielski in pull request 11371.

  • The dashboard y-axis range has been enhanced by the addition of an index for y-axis range values. Fix submitted by Oscar Recio in pull request 11752. GitHub-7927
  • Lengths for the following fields in the quote_address database table have been expanded: telephone, fax, region, and city. Fix submitted by Yaroslav Rogoza in pull request 11286. GitHub-10869
  • Magento\Framework\Escaper now contains the escapeDollarSign method, which looks for ${ and replaces $ with $ during save actions involving the page and block controller. Fix submitted by Lorenzo Stramaccia in pull request 11286. GitHub-10501
  • Magento now displays product review summaries only when a product has at least one review. Fix submitted by Jan Schlosser in pull request 10248. GitHub-4530
  • Magento now uses the config field backend model (system.xml) to generate default configuration values on the Admin. Previously, the afterLoad() method was evoked only after loading the configuration value from the database, and not after loading the configuration from config.xml. This caused the default configuration from config.xml to be passed to the form element as string instead of Array, which resulted in empty configuration fields in the Admin. Fix submitted by kweij in pull request 7742. GitHub-4530
  • Magento now selects the CUST_GROUP_ALL customer group in adminhtml after saving an attribute, and all $customerGroups['value'] are now of type string. Fix submitted by Manuel Schmid in pull request 10475. GitHub-10436
  • Session cookies now last until the session closes. Previously, Magento interpreted a form_key cookie lifetime of 0 to determine the duration of the cookie lifetime, and the cookie expired immediately. Fix submitted by Eero Kuusela in pull request 10528. GitHub-10527
  • Google Analytics has improved support of websites that conduct transactions in multiple currencies. Previously, payment providers that required different base currencies were configured as different websites in a multisite deployment, and consequently had to send different base currency in Google Analytics. Fix submitted by DominicWatts in pull request 10508. GitHub-6709, GitHub-7471
  • Google Adwords now has the ability to provide transaction-specific conversion values in a conversion tracking tag. Fix submitted by Dominic Watts in pull request 10558. GitHub-6708
  • The text in the authentication popup has been corrected to Checkout as a new customer. Fix submitted by Parker Smith in pull request 10627. GitHub-9533
  • Customer data is now fully loaded after restarting the browser during an unexpired user session. Previously, the section_data_ids section of the session cookie was not properly completed. GitHub-14912
  • X-Magento-Vary and PHPSESSID now have the same expiration time. Previously, the X-Magento-Vary cookie had an expiration of session, which meant it was not considered expired until the browser was closed. In contrast, the PHPSESSID cookie had a finite expiration time (not session). At times, this resulted in Magento caching the wrong page for the logged-in user.
  • You can now delete rows in the dynamicRows component. Fix submitted by Roman K. in pull request 921. GitHub-8830
  • Creating new configuration attributes no longer causes naming collisions in the JavaScript UI registry. Previously, when you created a new default attribute and then subsequently created a new product, JavaScript errors occurred. Fix submitted by Volodymyr Zaets in pull request 12945. GitHub-12555
  • The \Magento\Test\Php\LiveCodeTest::testCodeStyle method now uses whitelist files. Fix submitted by Adrian Martinez in pull request 11376. GitHub-10559
  • Magento now processes the oldest message queue entries first instead of last.
  • You can successfully save a CMS page with same URL key as another store on a different website but with the same hierarchy.
  • You can now successfully preview a Registry Update email template. Previously, Magento threw a fatal error when you tried to preview this template.
  • Enterprise Rewards no longer permit double refunds. Previously, problems with the refund logic permitted the inadvertent creation of a double refund.
  • Swatch images now resize as expected. Previously, even when a product attribute with Catalog Input Type for Store Owner was set to Visual swatch, the image size did not adjust as expected.
  • Customers with an empty Date of Birth field can now be saved even when the field is not marked (or checked on the JavaScript side) as mandatory. GitHub-12146
  • Store view home pages in multistore deployments no longer display breadcrumbs. Previously, the first store view in a multistore deployment looked fine, but the other store views included unnecessary breadcrumbs on the home page. GitHub-6504
  • You can now enable logs as expected (through the use of Stores > Settings > Configuration > Advanced > Developer > Debug > Log to file) when switching from production mode to developer mode.
  • magnifier.js now works no matter which mode is set. (magnifier.js offers the option of setting mode to ‘inside’ for an in-frame zoom.) GitHub-4977
  • The timestamp fields in oauth_nonce now include indexes to avoid deadlocks while erasing old records. GitHub-10346
  • The search bar now closes as expected when a user enters a search term in the mobile search bar, does not submit the search term, and then taps the search icon to close the search bar. GitHub-11231
  • Magento now throws a descriptive error as expected when using a negative value that contains an invalid minus symbol to update reward points on a customer account.
  • The My Invitations page for a customer account now displays the correct reward points amount.
  • The 404 forbidden error message has been corrected for accuracy to 404 not found in /app/code/Magento/Backend/Controller/Adminhtml/Noroute/Index.php. GitHub-10775
  • The Module Manager module grid list is now displayed correctly (System > Tools > Web Setup Wizard > Module Manager). Fix submitted by Vijay Golani in pull request 15755. GitHub-15192
  • Layered navigation now shows the correct product count. Previously, Magento counted only in-stock product. GitHub-11946
  • DatePicker date format now reflects the user’s locale as expected. GitHub-6858
  • Currency rates are now imported for Allowed Currencies as expected. Previously, selecting Use system value for Base Currency during currency set up resulted in a configuration error. GitHub-8003
  • Problems with the double column layout on the home page have been resolved. GitHub-11796
  • Merchants can now successfully delete the default welcome message. GitHub-9742
  • The Track Order link on the order page in the Admin now works correctly. Previously, the URL that Magento generated for an order did not include the store that the order originated in. GitHub-12206
  • Magento no longer rounds product quantity to the nearest whole number when trying to invoice an order that has products with quantity decimals. GitHub-11941
  • health_check.php has been added into the nginx.conf.sample file. GitHub-11157
  • The Google Analytics block code has been moved to the <head> tag on the Stores > Settings > Configuration > Sales > Google API page. GitHub-8837
  • Magento now displays a more helpful message when you misspell the name of a new module in registration.php. Fix submitted by Malyovanets Nickolas in pull request 13731.
  • The Learn More Link widget option in a Recently Viewed Products widget now respects its setting. Fix submitted by JeroenVanLeusden in pull request 12947.
  • You can now use the WYSIWYG editor to upload images even when the media directory is a symlink. Fix submitted by Mike Whitby in pull request 14353. GitHub-13929
  • Dependency on the mageMenu widget dependency in the breadcrumbs component has been removed. Previously, breadcrumbs on the product page were invisible when the mageMenu widget was not used. Fix submitted by Vova Yatsyuk in pull request 15478.
  • Magento no longer uses strings in evaluation of setTimeout. Fix submitted by Jonathan Kingston in pull request 14173. GitHub-14172
  • Magento no longer displays the Something Went Wrong error whenever an administrator with limited privilege logs into the Admin and tries to navigate to a page. GitHub-11700
  • The magento setup:install command no longer halts with an error at Magento_Catalog. Fix submitted by Lorenzo Stramaccia in pull request 15982. GitHub-1350
  • Magento no longer throw the Data key is missing: code-entity error when you try to create and edit a page. GitHub-11163
  • Customers are now redirected to the Sign In form as expected when they navigate to this form using the Back button on this browser. GitHub-12715
  • The welcome message now displays the new customer’s first and last name after they have confirmed their account by clicking the Confirm Your Account button in the confirmation email. GitHub-12719
  • You can now enable debugging (log to file) in production mode. GitHub-11882
  • Datepicker now uses the store locale as expected. GitHub-6350
  • When you click on a row with inline editing mode enabled while creating an Admin listing, the date column is now converted to the correct value in the date picker. Previously, the date value displayed in the date picker UI always showed the value of the current date instead of the actual column value. GitHub-6831

Gift cards

  • Magento now includes a gift card recipient’s email address in the gift card account history. Previously, Magento did not include the gift card recipient’s name and email address in the gift card account history, even though Magento successfully sent the email.
  • Magento no longer permits users to save a new gift card without first completing the required values. Previously, when creating a gift card, users could save the card without having designated an amount, but the card could not be purchased. Magento also created a report.CRITICAL: Warning error message in the system.log.
  • Magento now maintains relationships among new gift card accounts when a customer purchases several gift cards in the same order.
  • You can now save gift cards when the price has been changed on the Admin to an unacceptable format. Previously, Magento tried to save amounts in unacceptable formats (such as the inclusion of a comma in a four-digit price), which triggered an error.
  • Magento now displays the correct subtotal when a customer adds multiple gift cards of different amounts to his cart.
  • The password strength meter has been refactored to perform an email comparison only if an email field exists in the same form on which the meter exists. Previously, Magento threw a JavaScript error under these conditions. Fix submitted by serhii-balko in pull request 13819. GitHub-13429

Google Analytics

  • The Google Analytics pageview is no longer triggered twice. GitHub-12221

Google Tag Manager

  • The addToCart event triggers on the Google Task Manager console only when an item is added to the cart. Previously, the event was triggered before the cart was updated.
  • Google Tag Manager product category data is now fully reported. Previously, the Google Tag Manager product category (Enhanced Ecommerce) data did not report all information.
  • Magento now correctly displays product titles when displaying Sales information in Google Analytics. Previously, Magento replaced spaces in product names with their HTML values (for example, \u0020). Fix submitted by Julien ANQUETIL in pull request 13907. GitHub-13827, GitHub-13350
  • All relevant attributes are now populated in the Google Tag Manager when a customer adds a product to their shopping cart. Previously, grouped, bundle, and configurable product attributes were missing in the Google Tag Manager.

HTML

  • Magento now displays a newly created Contact Us form on a category page as expected. Previously, you could create a Contact Us form, but Magento did not display it properly. GitHub-12601
  • You can now change only the primary button font-weight without changing regular button font-weight with LESS variables. Fix submitted by Chirag Matholiya in pull request 16036. GitHub-15832
  • HTML minification now works as expected. Fix submitted by Lisovyi Yevhenii in pull request 16332. GitHub-5316
  • The name attribute is no longer empty when you create custom fields during product creation. GitHub-9944

Image

  • You can now set values for MAX_IMAGE_WIDTH and MAX_IMAGE_HEIGHT in Stores > Settings > Configuration > Advanced > System > Images Configuration, which supports the upload of larger images. Fix submitted by Malyovanets Nickolas in pull request 17826. GitHub-13747
  • .png images from the GD2 image library that have transparent backgrounds now retain their transparent backgrounds after upload. Previously, these transparent backgrounds were rendered black when you displayed these images after upload. Fix submitted by Eduard Chitoraga in pull request 17857. GitHub-14248
  • Magento now displays the background of transparent product image watermarks correctly. Fix submitted by Ronak Patel in pull request 16929. GitHub-16929
  • Product image zoom now works as expected in stores running on Safari. Fix submitted by Danny Nimmo in pull request 17426. GitHub-17416
  • The cross-sell product placeholder image on the shopping cart page is now the same size as the product listing page placeholder image. GitHub-12017
  • The WYSIWYG editor now displays image icons as expected. Previously, the WYSIWYG editor showed broken image icons only. GitHub-10417

Import/export

  • When you import information about existing customers, Magento now changes only the specific rows for this customer. If rows for other customer attributes (for example, group_id, store_id, created_at) are absent in the import file, these values are included unchanged.
  • You can now import or export a specific store view that includes custom options and bundle product options. Previously, the import/export feature did not include store view-level edits for custom options.
  • Import now completes successfully when a product’s CSV entry is split over two import “bunches”. Previously, Magento threw this error: Cannot add or update a child row: a foreign key constraint fails, and import failed.
  • You can now hide an image as expected by using the hide_from_product_page attribute during import.
  • Product import now updates the Enable Qty Increments field as expected. GitHub-14351
  • Magento now displays the correct execution time for an import operation on the System > Data Transfer > Import History page.
  • The Admin product import feature can now import zero (0) values into the custom attribute field. GitHub-12083
  • A grammar error in the “What is this” tooltip for the Braintree vault has been corrected.
  • The export process now correctly handles negative values in the exported XML file. GitHub-11729
  • Magento no longer throws an exception when importing a product with a category field that begins with a comma. GitHub-10697
  • CatalogImportExport categoryProcessor now supports escaped delimiters in category names. GitHub-6948
  • The customer import process no longer crashes due to an out-of-memory problem during import of a customer database containing 250,000 or more entries.
  • Support for multiselect attributes for both product and customer entities has been added. Fix submitted by php4umagento in pull request 98.
  • Images imported by URL now have conventional file paths. Fix submitted by Pieter Cappelle in pull request 12872. GitHub-12455
  • Grouped products are now imported correctly. Previously, after import, simple products were no longer associated with their grouped products. Fix submitted by Pieter Cappelle in pull request 12853. GitHub-12793
  • Error reporting for product image import has been improved. Fix submitted by Malyovanets Nickolas in pull request 1201. GitHub-4711
  • CatalogImportExport now supports empty row values. GitHub-7468
  • You can now set selection_can_change_qty during the export or import of a bundle product with properties. Fix submitted by Adam Paterson in pull request 100. GitHub-9342
  • Magento no longer throws an exception after successfully validating a .csv fil for import. Previously, an exception message was mistakenly passed as a exception description argument instead of exception message, which triggered the exception. GitHub-6924
  • The product export process now correctly considers hide_for_product_page setting for images. GitHub-8255
  • Magento no longer displays a success message when it fails to successfully import all products. GitHub-5846
  • Magento no longer displays extraneous records for an order into the exported CSV file. GitHub-12714
  • Product import now fetches the relationship between product SKU and entity_id with improved efficiency when inserting attribute data. GitHub-10920
  • Magento now renames images during a bulk upload of products with images. Fix submitted by Umar Chaudhry in pull request 99. GitHub-11324
  • Report error CSV file now works when you try to import a CSV file with a semicolon delimiter. Fix submitted by Malyovanets Nickolas. GitHub-5015
  • Magento now provides a validation failure during import when multiselect columns contain duplicate values. Fix submitted by carstenpfeifer in pull request 117. GitHub-103

Indexing

  • indexer:status now outputs information about the schedule mview backlog. Fix submitted by Luke Rodgers in pull request 12592.
  • Magento no longer reindexes entities that have not been changed. Previously, Magento reindexed entries that were not changed but which had a MySQL UPDATE. Fix submitted by Anton Evers in pull request 4893.GitHub-2987
  • The customer grid indexer now works as expected. Previously, this indexer did not work when reindexing using the command-line interface during the upgrade. Fix submitted by Leonid Poluyanov in pull request 10838. GitHub-10838
  • Tier pricing for a single product unit now works as expected. If a tier price is set for one product unit, and this price is lower than the product price or special price, then the product price index table is populated with the tier price.

Infrastructure

  • This release provides compatibility with PHP 7.2.x.
  • You can now configure system logs to write to syslog, which supports subsequent re-streaming and minimizes storage needs.
  • You can now set access to only integrations for Admin roles (rather than assign full access). Previously, access for integrations could be assigned only when Role Resources was set to all. GitHub-9684
  • expectException() calls now accept two parameters (instead of one). Fix submitted by Fabian Schmengler in pull request 11099. GitHub-11059
  • Several components included by Composer have been updated to the latest patch versions.
  • Customers can change product status by clicking on the toggle element or by clicking on label text, but not by clicking the area around a toggle element. Previously, if a customer clicked on the area around a toggle element, Magento changed the state of the element. Unintended results could occur if a customer mistakenly clicked on the area around the element and didn’t realize that the status had changed.
  • Changing the @tab-content__border variable in Blank theme now works as expected. GitHub-14999
  • Corrected sticky footer in page-main container height on mobile devices. GitHub-15118
  • Style groups for mobile devices (max-width) are now specified in the correct order. GitHub-14476
  • The Web Setup wizard icon sidebar shortcut on the Admin now links as expected to the wizard. Fix submitted by Arnoud Beekman in pull request 17610. GitHub-13948
  • The condition category chooser now handles multiple nested categories as expected. Previously, if a cart rule contained several nested categories, no categories appeared on the page, the page became unresponsive, and Magento eventually crashed. Fix submitted by Malyovanets Nickolas in pull request 17816. GitHub-15121
  • The magento/module-widget/etc/widget.xsd and magento/module-widget/etc/widget_file.xsd files have been updated to support multiple depends parameters. GitHub-9783
  • Magento now requires that customers select State/Province when shipping orders to India, and the checkout page now provides a drop-down field with appropriate values. Fix submitted by p-bystritsky in pull request 12378. GitHub-12378
  • We fixed the invalid parameter configuration that was provided for the $block argument of Magento\\Ui\\Component\\HtmlContent. Fix submitted by Tomasz Gregorczyk in pull request 12665. GitHub-12452
  • Theapp/code/Magento/Downloadable/Helper/File.php and app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Attributes/Extend.php files no longer contain duplicate key arrays. Fix submitted by Leandro F. L. in pull request 12520.
  • Magento now deselects only the attributes you choose to deselect when you set the Use Default Value setting on a store view to no for certain attributes. Previously, when you deselected the Use Default Value setting on a store view for certain attributes, Magento unselected other attributes as well.
  • Additional blocks for footer links now line up with default footer links as expected. GitHub-6712
  • The Psr logger debug method now works by the default in developer mode. GitHub-11509
  • Proxy/Interceptor generator now works as expected with PHP 7.1 syntax.
  • Module composer versions are no longer mandatory in the GitHub repository.
  • The handling fee configuration for shipping methods is now silently casted to float. Fix submitted by serhii-balko in pull request 13818.
  • The create_function() function has been deprecate and removed. Fix submitted by Yevhen Sentiabov in pull request 32.
  • Magento now sets the trigger_recollect attribute back to 0 after collecting total amounts for the quote. Previously, Magento timed out if a customer tried to reload a quote. Fix submitted by Ihor Sviziev in pull request 14812. GitHub-9580
  • You can now add new columns to the item table in the admin sales_order_view layout. GitHub-10824
  • The Admin shipping report now shows the correct currency code. GitHub-11793
  • Configurable::getUsedProducts returns a simple array as expected after product collections are cached GitHub-11880
  • The input format of customer date of birth has been corrected. GitHub-11332
  • The Add to cart checkboxes in Related Products are no longer visible when $canItemsAddToCart is set to false. GitHub-6891
  • A responsive design issue with the mobile landing page has been resolved. Previously, the Shop By and other page elements were positioned incorrectly. GitHub-10941
  • The getChildren() method now returns a list of IDs that is sorted by the position attribute. GitHub-11310
  • Magento now allows the setting of a custom HTTP response status code in a redirection. GitHub-9028
  • Magento\Search\Helper\getSuggestUrl() is now used as expected in the search template, which supports a custom autosuggest feature. GitHub-6802
  • SymLinksIfOwnerMatch has replaced FollowSymLinks in htaccess templates. GitHub-10811
  • Magento no longer throws an error when using Magento\Quote\Model\ResourceModel\QuoteItem\Collection::getItems() to load a quote item collection. GitHub-8954
  • Merchants can now apply styling by changing LESS variables in the Luma theme as expected. Fix submitted by hitesh-wagento in pull request 15794. GitHub-15608
  • sjparkinson/static-review has been removed throughout the code base.
  • The @deprecated tag has been added to Magento\Store\Model\Store::$_isAdminSecure. GitHub-4720
  • A new static test detects blocks without the name attribute.
  • You can now use the command-line interface to create a new administrator. Previously, Magento did not recognize configured tableprefix, which prevented Magento from creating the new user. GitHub-11176
  • The getToolbarBlock() method has been refactored to permit removal of product_list_toolbar. GitHub-9413
  • When you use a UI component-based form and add a custom regular expression pattern validation to an input field, Magento now properly converts the supplied pattern from a string to a JavaScript RegEx object. GitHub-9919
  • The hasDataChanges function now returns false as expected when no data has been changed. GitHub-12374

Klarna Payments

  • The Purchase button is now disabled as expected if Klarna authorization is declined.

  • The unnecessary span element below the onboarding text has been removed.

Locale

  • The DatePicker date filter on Reports > Products > Ordered now works as expected for administrators working in Australian English locales.
  • The zip code pattern for Japan now permits only the seven-digit codes that the Japanese postal service accepts. Fix submitted by Oscar Recio in pull request 14300 GitHub-14072
  • Magento now correctly validates birth dates in stores running French locales. GitHub-9743

Logging

  • Admin action logs now list changes to product quantity as expected.

Messages

  • The Payment & Shipping Method area of an order now displays an informative message if the payment method previously selected is no longer available. GitHub-12209
  • Magento now displays an error message as expected when a user submits a registration form without first completing the required date of birth field. GitHub-4248
  • The error message that Magento displays when a customer submits a product review without selecting a rating can now be translated. GitHub-10474
  • The message that Magento displays under the following circumstances has been improved:

    • You download a database from a staging environment that has code deployed to it that upgrades the schema version, or

    • You are on the master branch in your local environment, which is behind the database. GitHub-9008

  • The exception message in findAccessorMethodName() of Magento\Framework\Reflection\NameFinder has been improved. GitHub-9764

Newsletter

  • Magento now sends confirmation-of-subscription email to new subscribers only. Fix submitted by Oscar Recio in pull request [11604](https://github.com/magento/magento2/pull/11604. GitHub-5439
  • Guest users can now sign up for newsletters for multiple stores. Previously, when a guest user signed up for a newsletter from multiple stores, Magento sent a subscription confirmation message, but did not successfully subscribe the user.
  • A customer subscription on one store no longer depends on the customer’s subscription on another store.
  • Magento now sends the newsletter subscription success email as expected when a customer successfully subscribes to a newsletter. GitHub-12439
  • Magento now sends a confirmation request email to the customer when she unsubscribes to a newsletter. Fix submitted by Ihor Sviziev in pull request 16995. GitHub-15218
  • Magento now displays the newsletter subscription confirmation message as expected after a customer clicks the confirmation link in the subscription confirmation email. Fix submitted by Rahul Kachhadiya in pull request 15861. GitHub-14747
  • Magento now uses an index to retrieve subscribers from the database instead of the slower Using where query. GitHub-12787
  • Magento no longer sends redundant newsletter subscription confirmation emails to a customer who creates an account after first logging in as a guest user. GitHub-12876
  • The title of the newsletter Subscribe button now wraps correctly.
  • Newsletter subscriptions status is now specific to each store in a multistore deployment. Previously, when a customer uses the same email address for each account on different stores, changes to the newsletter subscription for an account on one store affected the accounts on other stores. GitHub-10014
  • Syncing of newsletter subscribers now works correctly. Previously, the newsletter create-date and change_status_at values did not work as expected. GitHub-4004

Orders

  • Magento no longer copies every address that has save_in_address_book set to 0 to the customer address book. Previously, if you placed an order as a guest and set the save_in_address_book value for an address to 0, Magento still copied that address to the customer address book when it registered a new customer on the checkout success page. Fix submitted by Roman K. in pull request 11903. GitHub-7691
  • Magento now displays new orders at the top of the orders list as expected when sorting order by purchase date. Fix submitted by Ihor Sviziev in pull request 11931.
  • The getTracksCollection() method now returns collection objects. Previously, this method returned either collections or arrays. Fix submitted by Roman K. in pull request 11680. GitHub-8022
  • When you place an order in the Admin, Magento now displays the form needed to enter information for enabled payment methods. Fix submitted by serhii-balko in pull request 11683. GitHub-11380
  • The Shipment API now adds a customer note to a shipment if the shipment was created through the API and appendComment is set to true. Fix submitted by Jeroen Van Leusden in pull request 11519. GitHub-11207
  • Magento now displays the State/Province information on Order View > Information > Address Information. Fix submitted by Raul Mateos in pull request 11234. GitHub-10441
  • Magento now correctly calculates the value of the base_shipping_discount_tax_compensation_amnt field. Fix submitted by Anton Evers in pull request 10435. GitHub-10255
  • The Products Ordered report now shows simple (child) products of configurable products. Fix submitted by Ranjith VK in pull request 9908. GitHub-9196
  • The Products in Cart report no longer tries to retrieve the data of deleted products. Previously, when Magento tried to generate this report, it threw an exception. Fix submitted by angelo983 in pull request 12540.
  • Magento no longer throws a fatal error when you search for a customer from Reports > Reviews > By Customers. Fix submitted by Oscar Recio in pull request 11524. GitHub-10301
  • The cancel order and restore quote methods now accurately calculate the amount of stock to be returned to inventory when an order is canceled. Previously, when you canceled an order, some of these methods did not accurately calculate the amount of restored stock. Fix submitted by Danny Verkade in pull request 12952. GitHub-9969
  • Invoices and orders now show consistent coupon codes and totals. Previously, invoices did not reflect coupon codes as expected. GitHub-10168
  • Coupon codes now work as expected for orders created from the Admin for guest customers. Fix submitted by Vishal Gelani in pull request 16562.
  • Magento now sends order confirmation email as expected for orders made using PayPal. Previously, when a customer paid using a credit card, Magento sent email confirmation, but not when an order was paid for by PayPal. Fix submitted by Dmytro Paidych in pull request 14225. GitHub-13778, GitHub-12792
  • Magento now uses the store values (prefix, suffix, increment ID, and sequence tables) from the correct store view when placing orders from a non-default store in a multistore deployment. GitHub-9055
  • Magento no longer throws error on the Admin order edit page when the order address has extension attributes. GitHub-10438
  • When you place an order as a guest and set the save_in_address_book value to 0, Magento no longer copies that address to the customer address book if you subsequently register as a new customer on the checkout success page.
  • The cancel method no longer saves an order and returns true if an order canceled with OrderService cannot be canceled. GitHub-10803
  • You can now access the create order page from the customer edit page as expected. Previously, Magento threw a fatal error. GitHub-11832
  • New orders are now being saved as expected to the order grid. GitHub-10128
  • Magento now correctly applies the designated frontend controller when store view URLs contain store codes (Stores > Settings > Configuration > General > Web > Url Options > Add Store Code to Urls is set to yes). Fix submitted by Vishal Gelani in pull request 15759. GitHub-15565
  • Magento now checks if an invoice has been previously canceled before canceling it.

Page cache

  • Asynchronous rendering of blocks no longer corrupts layout cache. Previously, when an asynchronous request generated a layout cacheId based on same handle as a CMS page, but without loading the associated CMS page, the CMS page-related layout updates were lost. GitHub-8554, GitHub-9050

Payment methods

  • Merchants can now provide customized error messages when a transaction fails at the payment stage. Previously, Magento displayed this default message when an error occurred: Transaction has been declined. Please try again later.
  • Magento no longer throws a validation error at the payments step of check out when an agreements checkbox is present. GitHub-11885
  • Magento now displays the correct billing address in the order confirmation email when Paypal Express Checkout is enabled. Previously, Magento displayed the shipping address instead of the billing address.
  • Customers can now check out using PayPal when the Request Billing Information feature is not enabled. Previously, Magento threw this error when a customer tried to check out with Braintree through Paypal from the shopping cart, Undefined index: billingAddress in /app/aacdg4mgbgw24/vendor/magento/module-braintree/Model/PayPal/Helper/QuoteUpdater.php on line 138.
  • Magento now provides dedicated payment and shipping debug log files to store information specific to those functional areas.
  • PayPal now works as expected with virtual products such as gift cards. Previously, when you tried to place an order for a virtual product using PayPal, Magento did not display the PayPal popup when you clicked Continue PayPal during checkout.
  • You can now place orders using PayPal when Payment Action = Order. Previously, when Payment Action = Order, Magento displayed this error when you reached the order review page: We can't place the order.
  • The multi-shipping checkout flow now supports the CyberSource payment method. This payment method is supported by Magento Commerce only. However, as part of the process of adding CyberSource support, we’ve made improvements to the Multi-shipping module to simplify integration process for other payment methods. Users of the CyberSource payment method should note that CyberSource uses the Magento Vault module only to store and retrieve tokens. Stored CyberSource tokens won’t be displayed on the checkout page or customer account.
  • Default AVS and CVV codes are now mapped as (null or empty string) instead of U for Signifyd.
  • The Billing Address field now displays the designated billing address as expected for a registered customer when checking out with Paypal Express Checkout. Previously, Magento displayed the shipping address in the Billing Address field in both the order confirmation email and the Admin.
  • Admin users that are not part of the Administrator group can now complete payment for an order using Braintree.
  • Magento PayPal integration now supports the Indian Rupee currency (INR).
  • Magento now validates that the required Purchase Order Number field is set as expected during checkout. Fix submitted by Pratik Oza in pull request 17670. GitHub-6585
  • A type error in the payment void method of the Authorizenet module has been fixed. Fix submitted by Vishal Gelani in pull request 16603. GitHub-16184
  • Magento no longer throws an error when you try to add a new shipping address to an order paid with using Braintree from the Admin.
  • Magento now creates invoices as expected for orders created using Braintree PayPal. Previously, Magento threw an error when a merchant tried to create an invoice for an order from Sales > Orders.
  • Magento no longer disables the Place Order button after an attempt to validate a payment made with PayPal fails. GitHub-12900
  • Magento no longer throws an error when you try to open an order page from the Admin or when setting the transaction ID in a payment module. Previously, Magento threw this error: Notice: Undefined index: value in /app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Select.php on line 72. GitHub-3596
  • Merchants can now create an invoice for an order placed with PayPal.
  • The incorrect @return tag (PHPDocs) in the placeCheckoutOrder method has been corrected. Fix submitted by Aki Ojalehto in pull request 13356.
  • The getPaymentMethodList method no longer sets the value of a group to null in $labelValues if it already contains group-related values. Previously, the Magento\Payment\Model\Config\Source\Allmethods config source model did not display every available payment method. Fix submitted by Matthias Zeis in pull request 15134. GitHub-13460

Performance

  • The price indexer is now scoped and multithreaded, which improves layered navigation, search, and indexing actions for complex sites with multiple websites and many price books.
  • You can change store locale without the exporting and importing configuration data. While Magento is in production mode and the SCD_ON_DEMAND is enabled, the Magento store and admin locale options are available. See Change locales.
  • The catalog rule re-indexing operation has been optimized, and average re-indexing time (which depends on rule conditions) has improved by more than 80%. Previously, a full catalog rule re-index operation on a medium B2C store took more than 20 minutes.

Pricing

  • Magento now uses the current date as expected when setting the start date for a special price. Previously, Magento set the start date for a special price a few years in the future, which prevented the special price for being active.
  • Tiered pricing and quantity increments now work as expected with decimal-based inventories.
  • You can now add a bundle product that includes a simple product with a price of 0 (zero) to your cart. Previously, Magento threw an error. GitHub-8969
  • Magento now displays the correct price on the product page for storefronts running Japanese locales. Fix submitted by Hirokazu Nishi in pull request 15540. GitHub-11711
  • Issues with configurable products with custom options and tier prices have been resolved. Previously, the product page did not display the correct product price, but the shopping cart did. GitHub-5774

Product video

  • Magento now populates the YouTube video URL and Title fields with the same values as are populated on the default store view on multisite deployments. (These fields are global scope attributes and should be the same on all storefronts.) Previously, Magento left these fields blank in multisite deployments.
  • The product video embedding feature is now GDPR-complaint and allows the domain youtube-nocookie.com. Previously, when you tried to embed this URL, Magento threw an error.

Quote

  • You can now implement a product attribute that sets Catalog Input Type for Store Owner equal to Fixed Product Tax in a multi-store environment. Fix submitted by Danny Verkade in pull request 13019 13019.GitHub-12393
  • Magento now successfully saves the value of REMOTE_IP when a customer uses an IPV6 (Internet Protocol version 6) address. Previously, this value was only partially saved in the sales_order and quote tables. Fix submitted by Dmytro Cheshun in pull request 15142. GitHub-10395
  • A type error in CartTotalRepository has been resolved. Previously, CartTotalRepository could not handle extension attributes in quote addresses, and Magento threw a PHP Fatal error: Uncaught TypeError. GitHub-12993, GitHub-12819
  • Magento now displays the correct product price for an order created from the Admin in multisite deployments. Previously, when an order was created from the Admin in a multisite deployment where products were assigned different prices per store view, Magento defaulted to the product price of the primary storeview if the order were edited or updated. Fix submitted by Pratik Oza in pull request 16893. GitHub-14869
  • An integrity constraint violation error no longer occurs after you reorder a product with custom options. Fix submitted by Vinay Shah in pull request 13394. GitHub-12705

Reports

  • You can now successfully export the Ordered Products report to a CSV file. Previously, the export file contained no report data.
  • The scope selector for reports now works as expected. Previously, when a merchant set the scope to All Websites, the generated report showed sales from only a subset of websites.
  • The .csv export of Coupon reports now shows the correct total for selected coupons. Previously, the total line in the .csv file showed the totals for all coupons in the selected time period, rather than just the selected coupons.
  • Wishlist reports are available on the Admin as expected.
  • The Low Stock report now accurately lists all out-of-stock products. Previously, this report was not accurate when the All Websites view was selected. GitHub-10595
  • The Admin’s Most Viewed Products tab now displays all the products in all attribute sets, not simply the default attribute set. GitHub-9768
  • The timezone has been removed from the date when Magento retrieves the current month from a UTC timestamp. Fix submitted by Michael Wylde in pull request 16492. GitHub-15940
  • The Year-to-date dropdown accessed from Stores > Settings > Configuration > General > Reports > Dashboard now displays a numerical list that ranges from 01 to 12 as expected. Fix submitted by Ronak Patel in pull request 17495. GitHub-17289
  • A valid XML layout update handle is now preinstalled in the home page. Fix submitted by adrian-martinez-interactiv4 in pull request 11891.

Review

  • Magento now displays a 404 page not found error when a customer tries to navigate to a product review that is not accessible. Previously, Magento displayed a PHP error code. Fix submitted by Malyovanets Nickolas in pull request 17721. GitHub-13102
  • Magento no longer throws an error when a merchant edits a product from the Admin when reviews are disabled. Fix submitted by Oleksandr Kravchuk. GitHub-6264
  • When a customer creates a product review, the link to the product from the review in the customer’s My Account > My Product Review is now SEO-friendly.
  • The Save and Next and Save and Previous buttons on Marketing > User Content > All Reviews now work as expected.
  • Magento now checks if a product is assigned to a current website before displaying the write a review page. Fix submitted by Mastiuhin Oleksandr in pull request 14528. GitHub-13010

Return Merchandise Authorizations (RMA)

  • GET V1/returns/:id calls return tracks objects as expected.
  • The GET /V1/returns/:id endpoint retrieves tracks arrays as expected.
  • The GET /V1/returns?searchCriteria endpoint retrieves tracks arrays as expected.
  • The RMA status label now shows on the email that Magento sends to customers when the status of an RMA changes.
  • Magento now sends email when the status of a Return Merchandise Authorization (RMA) changes to Return Received, Approved, or Rejected. Previously, no email was sent to the customer who created the order.
  • Return Merchandise Authorization (RMA) calls now return order items and comments as expected.
  • Magento now sends email when the status of a Return Merchandise Authorization (RMA) changes to Return Received, Approved, or Rejected. Previously, no email was sent to the customer who created the order.
  • Magento/Rma/Block/Adminhtml/Rma/Edit/Item/Form/Element/Boolean is a new block element that allows rendering ability for the Boolean RMA attributes on the Admin.
  • The Show/Hide details button now works as expected on the Returns (RMA) page.

Rule

  • Cart Price rules now correctly display nesting levels for categories with nesting levels that exceed three levels.

Sales

  • Magento has added verification for previously set filters in Magento/Ui/Component/Filters, which has eliminated duplication of filters in the collection where conditions.
  • Magento now shows all products as expected in the Recently Ordered list when a customer places an order that contains products from multiple stores. Previously, in installations with two storefronts, if a customer added products from both stores to the same shopping cart, and placed a single order, the recently ordered product list would not show all ordered products.
  • The grand total for a credit memo now matches the invoiced total when a discount is applied to shipping charges.
  • The Items Ordered list now updates as expected when the user clicks OK when changing the options of a configurable product during creation of an order from the Admin. Previously, the update did not occur until the user clicked Update Items and Quantities.
  • Admin orders are no longer restricted by a minimum order amount. Previously, Magento required this minimum for both Admin and storefront users.
  • Orders exported to a CSV file now display dates in a consistent format.
  • Magento now displays text on the New Cart Rules page correctly. Previously, labels listed in the Store View Specific Labels section of this page was sometimes truncated or duplicated. Fix submitted by rostyslav-hymon in pull request 14231. GitHub-12231
  • Magento now removes unneeded PDF files after generation. Previously, Magento saved a copy of every generated invoice PDF in /var. Fix submitted by Tiago Sampaio in pull request 17280. GitHub-3535, GitHub-14517
  • Magento no longer throws an error when a merchant sends an invoice for an order that contains grouped products. Previously, Magento invoiced the order but threw an error, and did not send the email. GitHub-5105
  • Sales PDFs now support unicode fonts (GNU Free Font), which broadens language support in these PDFs. Fix submitted by rossmc in pull request 14710. GitHub-9666, GitHub-12323
  • Magento now creates invoice numbers using the correct store view ID in a multistore environment. Previously, Magento always used the default store ID for all invoices created in a multistory environment. Fix submitted by Vishal Gelani in pull request 15665. GitHub-14063
  • Disabling invoice emails no longer degrades product performance.
  • The invoice grid now shows the correct subtotal for a partial invoice. Previously, it showed the entire order’s subtotal. Fix submitted by AlexWorking in pull request 14209. GitHub-13804
  • Magento now handles decimals properly in order quantities. Fix submitted by barbazul in pull request 14346. GitHub-14328
  • You can now filter orders by customer email. Previously, Magento threw an error when you tried to filter orders by customer email from Sales > Orders.
  • The wrong entity_model for invoice has been corrected in the eav_entity_type table. Fix submitted by Malyovanets Nickolas.
  • An incorrect return type in PHPdoc has been corrected. Previously, this return type resulted in multiple warnings in IDEs. Fix submitted by julianvdrielen in pull request 14304. GitHub-13992
  • Magento now syncs an order’s shipping and billing addresses as expected when a customer edits the billing address. GitHub-10856
  • The transport variable can now be altered in the email_invoice_set_template_vars_before event. Fix submitted by gwharton. GitHub-10210

SalesRule

  • Cart price rules with associated coupons are no longer affected by edits to scheduled updates.
  • You can now use wildcard values in coupon codes.
  • We’ve fixed an error in discount calculations that prevented merchants from creating a rule that set a tex rate and 100% discount. Previously, when a tax rule was applied, and a 100% discount was also applied during check out, the shopping cart displayed a negative grand total. Fix submitted by Stanislav Ilnytskyi in pull request 14468. GitHub-10790

Sample data

  • The sampledata:deploy and remove commands now have no-update options. Fix submitted by Fabian Schmengler in pull request 12663.
  • The Catalog > Products page now contains a keyword search. Fix submitted by Josef Behr in pull request 10089. GitHub-5785
  • Magento no longer throws an asymmetric transaction error when you reindex in Magento deployments running Elasticsearch. Fix submitted by Riccardo Tempesta in pull request 10610. GitHub-9930
  • You can now submit search criteria by clicking enter when initiating a product search from the Admin. Fix submitted by Malyovanets Nickolas in pull request 1197. GitHub-4696
  • Elasticsearch is now the default search engine in Magento. MySQL search has been deprecated.
  • Elasticsearch now works as expected in Chinese locales.
  • Elasticsearch no longer includes out-of-stock product options in search results.
  • Support for Elasticsearch 5.x has been added. See Install and configure Elasticsearch for more information about using Elasticsearch with Magento. Fix submitted by Aurélien Foucret.
  • Magento no longer throws an error when a customer uses quick search to search on a term that does not exist in the search database. Previously, Magento returned this error: TypeError: this._getFirstVisibleElement(...).addClass is not a function. Fix submitted by Dragan Atanasov in pull request 14301. GitHub-14274
  • Magento no longer throws an error when you submit the search form in the header with an empty value. Fix submitted by Dmytro Paidych in pull request 14185. GitHub-13791
  • Elasticsearch now correctly calculates the relevance of quick search results according to selected attribute search weights.
  • Out-of-stock options for configurable products no longer show up in search and layered navigation results.
  • You can now use an asterix when searching on customer names. Previously, if you used an asterix in a search query, Magento displayed this message: Something went wrong with processing the default view and we have restored the filter to its original state. Fix submitted by adrian-martinez-interactiv4 in pull request 15077. GitHub-14855
  • Search synonyms are now available for all search engines deployed in your Magento store. Previously, search synonyms did not appear in the Admin menu when Elasticsearch 5.0+ was deployed.
  • You can now limit the number of results in the search autocomplete. Fix submitted by Max Chadwick in pull request 11572.
  • The mini search field no longer loses focus after JavaScript is initialized. Previously, after mini search component’s JavaScript loaded and initialized, search input lost focus. Fix submitted by Mastiuhin Oleksandr in pull request 14180. GitHub-13988
  • CatalogSearch has been deprecated and replace with Elasticsearch.
  • Sort by Product Name on the category page now works with all available filters. Fix submitted by Ihor Sviziev in pull request 13468.
  • An unnecessary saveHandler in the CatalogSearch indexer declaration has been removed. Fix submitted by Adrian Martinez in pull request 11626.
  • Search synonyms in a group now can declare several words as synonyms. For example, “Elon Musk,tesla” is a valid synonym group, and a search on the phrase “Elon Musk” will also show results for the “tesla” keyword. Previously, you could declare synonyms for each word (for example, “Elon,Musk,Tesla”), but these words didn’t work as a phrase. Synonyms are also now case-insensitive.
  • Searching for a value of an attribute set on the store-view level of a product now returns results. Previously, Magento returned results only if the attribute value was entered on the all store-view levels.
  • Search terms from the same synonym group now return the same results.
  • You can now use the Enter key to submit a search form. Fix submitted by Vishal Gelani in pull request 15696. GitHub-13793
  • Search on MySQL-based entities has been improved. (This improvement does not provide a fulltext search, but simply the best way to search when a SearchCriteria with fulltext condition is provided over a MySQL table.) Fix submitted by Riccardo Tempesta in pull request 15685. GitHub-1221
  • Magento now displays validation messages as needed on advanced searches. Previously, Magento did not display a message even after a customer submitted the advanced search form with no entries. Fix submitted by Torben Höhn in pull request 17210. GitHub-8131

Shipping

  • The free shipping cart price rule now works as expected when UPS shipping method is enabled and Free Shipping is set to “For matching items only”.
  • The Magento UPS module has been updated to support new UPS API endpoints.
  • You can now use GET .V1/shipments to search for shipments that contain a shipping label. Previously, using this call caused Magento to throw an exception. GitHub-6668
  • Magento now successfully creates shipping labels for a return merchandise authorization (RMA) when using FedEx Smart Post as the shipping option. Previously, Magento threw an error under these circumstances.
  • Multishipping checkout now works as expected. Previously, Magento displayed the Shipping address is not set error message when checking out an order with multiple addresses. Fix submitted by Dmytro Cheshun in pull request 16784. GitHub-16555
  • Merchants can now ship the remaining items in an order in which some items require a credit memo.
  • Customers can now view their completed order from the success page for orders that will be shipped to multiple addresses. Previously, when a customer took a link from the order success page to view their just-completed order, Magento displayed this error: There has been an error processing your request.
  • The Shipment grid now displays the status of completed orders correctly. Previously, the Order Status column of the Shipment grid indicated that a completed was being processed.
  • The checkout page now displays address fields when the number of address lines has been left at the default. Previously, when the default value was configured, Magento did not display any ship-to address fields. GitHub-7995
  • Shipping method radio buttons no longer have duplicate element IDs on the cart page, making it possible for customers to select a second shipping method. GitHub-10795

Sitemap

  • Magento now correctly processes global product attributes when generating the sitemap. Fix submitted by Ričards Zālītis in pull request 8999. GitHub-5941
  • The sitemap no longer contains /home in the URL generated for your store domain. GitHub-12446
  • When an error is created during sitemap generation, Magento now sends an informative email to administrators. Previously, Magento threw a fatal error. GitHub-10502
  • The lastmod value in the sitemap.xml file for a category now contains the created_at timestamp. Previously, this timestamp contained invalid dates. GitHub-9151
  • It’s now easier to add additional items to a sitemap. Previously, SitemapPlugin worked inconsistently with large sitemaps. Fix submitted by Piotr Kwiecinski in pull request 10442. GitHub-10045
  • Images in XML sitemap are no longer always linked to the primary store in a multistore deployment. Fix submitted by Pratik Oza in pull request 16813. GitHub-15588
  • Magento now generates correct product URLS when you generate a sitemap of categories and products with Use Categories Path for Product URLs set to no ( Stores > Settings > Configuration > Catalog > Catalog > Search Engine Optimization). Fix submitted by Mastiuhin Oleksandr in pull request 14786. GitHub-4788

Staging

  • Magento now rolls back updated changes to their pre-update state when a merchant deletes an active scheduled update. Previously, some products were removed from their assigned categories (and categories were removed from the Admin) when an active product update was deleted.
  • You can now successfully re-order a configurable product. Previously, a schedule update for one configurable product affected other ordered configurable products.
  • Magento no longer deletes products from the Admin product list after a merchant deletes its active schedule update. This deletion appeared only after the scheduled update time.

Store

  • Returns from REST endpoint /V1/store/storeViews calls now include is_active values for stores. GitHub-10922
  • The getUrlInStore() method no longer returns URLs that contain the store code, which has shortened the extremely long URLs it previously returned. Fix submitted by Pratik Oza in pull request 17261. GitHub-16273
  • You can now use an admin_system_config_changed_section event to subscribe to changes for all sections in Stores > Settings > Configuration. GitHub-5035
  • TinyMCE now loads successfully due to a refactoring of the use of minify_exclude configuration. Fix submitted by Pieter Hoste in pull request 13687. GitHub-11577

Swagger

  • Swagger now correctly renders POST/PUT operations. Previously, in Swagger, the text area that contained the payload structure of some POST and PUT operations was not displayed.
  • Swagger now works as expected when JavaScript minification is enabled. Previously, when JavaScript minification was enabled, the swagger-ui-bundle.js became corrupted, although Swagger worked fine when minification was subsequently disabled, and the files were redeployed. Fix submitted by Pieter Hoste in pull request 17627. GitHub-16927
  • Swagger now handles searchCriteria-related requests as expected. Fix submitted by Vishal Gelani in pull request 15946. GitHub-11477
  • Swagger now works as expected when JavaScript minification and merging are enabled.

Swatches

  • Visual swatches now display swatch color in the Admin as expected. GitHub-11828
  • The dropdown menu that Magento displays when a user clicks on the Add Swatch button on the Manage Swatch tab now displays all possible options. GitHub-11534
  • Color attribute swatches are now visible when sorting is enabled. GitHub-10628
  • You can now use REST to import visual swatch attribute options. Previously, you could not add swatch options using service contracts unless a swatch option already existed for the attribute. Fix submitted by gonzalopelon in pull request 12044. GitHub-9410, GitHub-10707, GitHub-10737, GitHub-11032
  • The load and merge order of view.xml configuration in \Magento\Swatches\Helper\Media now matches \Magento\Catalog\Helper\Image. Fix submitted by Patrick McLain in pull request 13506. GitHub-12647
  • We’ve replaced .size() with .length to be compatible with jQuery 3.. *Fix submitted by Kirill Morozov in pull request 13686.
  • Swatch functionality that has been extended using JavaScript mixins now works as expected in Safari and Microsoft Edge. Fix submitted by rostyslav-hymon in pull request 14247. GitHub-10559
  • You can now save a swatch attribute that has an empty option. Fix submitted by enriquei4 in pull request 13220. GitHub-13117

Tax

  • Tax total amount is now equal to the sum of the tax details amounts. Previously, Magento displayed the wrong order tax amounts when using specific tax configurations. Fix submitted by Pieter Cappelle in pull request 11594. GitHub-10347
  • \Magento\Framework\Data\OptionSourceInterface::getAllOptions() and \Magento\Framework\Data\OptionSourceInterface::toOptionArray() are now compatible with parent classes. Fix submitted by Yevhen Sentiabov in pull request 34.
  • Double tags have been removed from the config.xml of the Magento_Tax module.
  • Magento no longer performs redundant tax calculations for every price on category page, which has improved product performance. Fix submitted by JeroenVanLeusden in pull request 15200. GitHub-14941
  • Magento now uses the correct table rate shipment when creating a merchant creates an order through the Admin. Previously, when a merchant created an order through the Admin and selected the shipping method table rate, Magento took the shipping rate table from the wrong website ID.

Testing

  • Integrations tests no longer throw Cannot instantiate interface Magento\Framework\Interception\ObjectManager\ConfigInterface errors. GitHub-12844
  • Integration tests now reset the integration test database as expected. GitHub-10025
  • A typo in dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/OnePageCheckoutTest.xml has been fixed. GitHub-7591
  • Static tests now check for the deprecated each() function. Fix submitted by Yevhen Sentiabov in pull request 31.
  • The functional.suite.dist.yml has been updated to handle custom backend names. (This value was previously hard-coded.) Fix submitted by scribam in pull request 12848.
  • The validate_image_info_rollback.php test suite has been updated. Fix submitted by Harry Mumford-Turner in pull request 12800.
  • phpunit.xml is now blacklisted during schema validation static tests, particularly Magento/Test/Integrity/Xml/SchemaTest.php.
  • The \Magento\Test\Php\LiveCodeTest::testCodeStyle method now uses whitelist files. Fix submitted by Adrian Martinez in pull request 11376. GitHub-10559
  • Integration test coverage for the new extension point for New Shipment Controller has been added. Fix submitted by Malyovanets Nickolas in pull request 14634. GitHub-788
  • sjparkinson/static-review and other obsolete tools (including dev/tools/Magento/Tools/Layout, dev/tools/Magento/Tools/StaticReview/pre-commit, and dev/tools/Magento/Tools/psr/phpcs_precommit_hook.sh) have been removed from the test code base. Fix submitted by rostyslav-hymon in pull request 14368. GitHub-14138
  • Integration tests for product URL rewrite generation have been added. Fix submitted by rostyslav-hymon in pull request 14252.
  • The ProcessCronQueueObserverTest.php integration test now works correctly. Fix submitted by Eino Keskitalo in pull request 16253. GitHub-16243
  • setCateroryIds([]) has been corrected to setCategoryIds([]) throughout the test suites. Fix submitted by Pratik Oza in pull request 16926. GitHub-15590
  • CreateOrderBackendTest has been refactored to support the Reorder button when Inventory Management is enabled. Fix submitted by Malyovanets Nickolas in pull request 16006. GitHub-680
  • Unit tests have been refactored to no longer check for deleted file app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Eav/AbstractEav.php. GitHub-11230
  • CreateCreditMemoEntityTest has been refactored to support the Inventory Management reservation mechanism. Fix submitted by Malyovanets Nickolas in pull request 16170.
  • CreateOrderBackendPartOneTest has been refactored to support the Inventory Management reservation mechanism. Fix submitted by Malyovanets Nickolas in pull request 16153.

Theme

  • Customers can now successfully close full-screen zoomed product images displayed on an iPhone 4s, 5s, 6, or 6s with the Safari browser. Previously, if a customer chose full-screen zoom for any product image, he could not close the full-screen zoom.
  • The forced setting of cache_lifetime to false has been changed to a default cache_lifetime value of 3600 for Magento\Theme\Block\Html\Footer. GitHub-13595
  • The default storefront welcome message now works as expected when the Translate Inline (Stores > Settings > Configuration > Advanced > Developer >) setting is enabled. Fix submitted by Dmytro Paidych in pull request 14177. GitHub-12711
  • We’ve improved the display of the Payment Methods section of the checkout page on mobile devices. Previously, the layout of page elements was not correctly spaced. Fix submitted by Marcin Kwiatkowski in pull request 13979. GitHub-13315

Translation and locales

  • The <![CDATA[]]> statement in system.xml now works as expected. Fix submitted by Nickolas Malyovanets in pull request 11679. GitHub-7767
  • The JavaScript translation for validation messages now works for customer account pages. Fix submitted by Anton Evers in pull request 10445. GitHub-5820
  • Messages on password strength are now translatable. Fix submitted by Anton Evers in pull request 10445. GitHub-5509
  • The JavaScript translation regex no longer leads to unexpected results and untranslatable strings. Fix submitted by Anton Evers in pull request 10445. GitHub-7403
  • All messages in Customer Account Create are now translatable. Previously, warning messages about password validation appeared in locale language only. Fix submitted by Anton Evers in pull request 10445. GitHub-9967
  • We’ve added client-side caching of js-translation.js.
  • The datepicker date filter on Reports > Products > Ordered now works as expected for administrators working in Australian English locales.
  • Magento now supports Malaysian locales. Fix submitted by Oscar Recio in pull request 14305. GitHub-14089
  • The string for moreButtonText in app/code/Magento/Swatches/view/frontend/web/js/swatch-renderer.js can now be translated. Fix submitted by Karla Saaremäe in pull request 16228. GitHub-16079
  • Magento now displays the correct price on the product page for storefronts running Japanese locales. Fix submitted by Volodymyr Kublytskyi in pull request 16588. GitHub-11717
  • The module responsible for generating the js-translations.json file now contains a routine that translates strings in tags. Fix submitted by Pratik Oza in pull request 16892. GitHub-12081
  • Magento now displays the correct payment method title on the payments page during checkout in multistore deployments where storeviews implement different locales. GitHub-7582
  • The hint provided for the global configuration field on the Admin configuration page has been corrected. GitHub-8958
  • region_id is no longer overridden when a customer edits their billing address from a country that requires a value for state to a country where one is not required. GitHub-10317

UI

  • Magento no longer sends duplicate delete requests as a result of an unstable Internet connection. Previously, unintentional mass deletion of products sometimes occurred as a result of an unstable Internet connection.
  • As you type additional characters into the text field for a product’s custom option, the hint showing the number of characters left before reaching the maximum now decreases as expected.
  • Previously missing translation strings have been added to the UI module. Fix submitted by Jeroen Van Leusden in pull request 11440. GitHub-5956
  • Administrators who lack access to the CatalogRule module can now perform operations as expected in the Admin cart price rule edit page. Fix submitted by Prince Patel in pull request 16664. GitHub-15009, GitHub-12285
  • The UI component configuration XSD file (ui-configuration.xsd) now constrains settings so that abstractSettings, such as <label>, can only be placed and read from the top-level <settings> nodes, while component-specific settings, such as <options>, can only be placed and read from the appropriate <settings> descendent of <formElements>. Fix submitted by Neill Robson in pull request 15161. GitHub-14140
  • Users can now press the Esc button on the delete-from-cart confirmation pop-up window without generating a jQuery UI error. Previously, when a customer added a product to the shopping cart, then pressed the trash icon to delete it, Magento displayed this confirmation pop-up window, but threw an error when the customer pressed the window’s Esc button. GitHub-14593
  • The font-size variable has been updated and standardized. Fix submitted by Prince Patel in pull request 16664. GitHub-7399
  • We’ve added the @navigation-level0-item__hover__color missing variable for mobile and tablet view. Fix submitted by hitesh-wagento in pull request 16796. GitHub-15848
  • Footers now behave as expected when displaying Magento on a mobile device. Fix submitted by Malyovanets Nickolas in pull request 17809. GitHub-15118
  • The unused totalbar block has been removed from the invoice create and credit memo create layouts. Fix submitted by Danny Verkade in pull request 17414. GitHub-16653, GitHub-16655
  • The JavaScript validation rule used to validate AM/PM time settings now works as expected when JavaScript is minified. Fix submitted by Dmytro Cheshun in pull request 17688.GitHub-17648
  • The message list component message type now has a message type of success. Previously, this type was always error when the parameters property was specified. Fix submitted by Dmytro Cheshun in pull request 17703. GitHub-17700
  • Magento now displays the wishlist icon on the shopping cart page on mobile devices. Previously, Magento cut off the wishlist icon on this page when viewed on a mobile device. Fix submitted by hitesh-wagento in pull request 17911. GitHub-17851
  • JavaScript validation rules no longer require validation of fields where completion is not required. Previously, customers could not complete forms unless non-required fields were completed. Fix submitted by Malyovanets Nickolas in pull request 17724.GitHub-16544
  • When a user scrolls a page, the datepicker now retains its position relative to other page elements as expected. Fix submitted by hitesh-wagento in pull request 16776. GitHub-7903
  • The confirmation modal buttons that Magento displays when a customer sends a product to the trash are now translated as expected. Fix submitted by torhoehn in pull request 17359.GitHub-17193
  • The dropdown menu is now positioned as expected under the link on the UI Component listing. Fix submitted by Vishal Gelani in pull request 15746. GitHub-15660
  • Magento no longer displays the current date for a product when the date attribute is empty. GitHub-9869
  • Magento no longer throws a JavaScript error when a user enters a special character (for example, / or &) while adding the stripped-min-length validation to a UI component. GitHub-9920
  • Magento no longer throws an Uncaught Error: Script error for: trackingCode error on storefront pages. GitHub-12828
  • range-word validation for form fields now works as expected. GitHub-6113

URL rewrites

  • Magento now sets the value of Store_Code from the current store when this information is included in a URL. Fix submitted by Oscar Recio in pull request 12545. GitHub-12450
  • Magento now loads urlrewrite router before the Magento base router. Previously, the Magento custom URL rewrite functionality did not work when you added an additional redirection (for example, a custom redirection from /customer/account/create to another page). Fix submitted by Marc Rodriguez in pull request 11471. GitHub-10231
  • Switching store views now works as expected. Previously, under some conditions, users were redirected to a 404 page.GitHub-5416
  • You can now reset a form by clicking Reset in Marketing > SEO & Search > URL Rewrites. GitHub-10459
  • Categories of the Main menu in the different store view are now updated when Varnish is enabled.
  • Magento no longer throws a 404 error when a customer navigates from the Catalog page of the default store to a custom Catalog page on a different store.
  • The Reset button no longer causes a JavaScript error on the URL rewrite creation page. GitHub-10462
  • The Magento URL rewrite functionality now supports the use of special characters in category names. Previously, the category tree did not load if a category name contained a special character. Fix submitted by Vinay Shah in pull request 13402. GitHub-13296

Visual Merchandiser

  • Visual Merchandiser now includes website scope when displaying the correct prices and availability of configurable products.
  • We’ve improved the performance of editing or saving products in large categories (more than 18,000 products per category).

Web API

  • When you use REST to update an existing product, Magento assigns the update only to the websites that they were assigned to before the update. Previously, updating a product using the REST API (PUT /rest/all/V1/products/example_sku) assigned the product update to all websites automatically. Fix submitted by adrian-martinez-interactiv4 in pull request 11443. GitHub-11324
  • When you create a credit memo comment with POST /V1/creditmemo/:id/comments, Magento now sends credit memo update emails as expected. Previously, Magento did not send this email, and no other transaction emails were sent to the customer.
  • Magento no longer creates duplicate shipments for orders created via API. Previously, Magento created duplicate shipments when a merchant created a shipment via the API under certain conditions (mainly with bundled products).
  • Product searches using GET V1/products return extension_attributes for configurable products as expected.
  • You can now include custom attributes when filtering the responses of REST calls.
  • Magento now returns a 404 error and includes a descriptive error message when a  REST search is performed on a non-existent cart.
  • Magento now includes the filter groups and the sort order of the $searchCriteria parameter in the searchCriteria object that is provided for the EAV set repository. GitHub-11022
  • Updating a product with the REST API (PUT /rest/all/V1/products/example_sku) no longer assigns the product to all websites automatically. (Automatic assignment to all websites now occurs only when you create the product in All Store Views scope.) GitHub-11324
  • A generated Admin API token no longer expires immediately. Previously, when you created a token for an administrative user and have set Admin Token Lifetime (hours)) to empty, Magento denied access because the token immediately expired. Fix submitted by Vijay Golani in pull request 15564. GitHub-15564
  • Magento now checks for the uniqueness of attribute option values for attributes created via REST. GitHub-8846
  • salesRefundInvoiceV1 now saves the invoice ID as expected for a credit memo. GitHub-11669

Wishlist

  • Magento now displays an error message if you try to add products to a wishlist without first logging in. Fix submitted by Pieter Cappelle in pull request 12681.
  • Magento now stores product IDs and SKUs to locally stored customer data for wishlists. Fix submitted by James Halsall in pull request 12896.
  • SearchCriteriaBuilder now has a check to determine if sort order should be applied. Previously, SearchCriteriaBuilder built the wrong criteria (ORDER BY part). Fix submitted by Nickolas Malyovanets. GitHub-5738
  • Registered users can now create new wishlists as expected when multiple wishlists are enabled. Previously, Magento displayed an error.
  • Magento no longer changes the grid view to list view on the product list page when a customer adds a product from the wishlist section to the cart, and now displays the appropriate success message.

Known issues

Known issue: After installing a module and running setup:upgrade, you must run cache:clean config.

Known issue: When installing or upgrading Magento and upgrading PHP to 7.2, you must specify an encryption key value of 32 symbols (256 bits) or Magento will throw an error, and any sensitive, unsaved configuration data will be lost. When upgrading Magento and upgrading PHP to 7.2, make sure that your encryption key is exactly 32 symbols. To do this, navigate to System > Other Settings > Manage Encryption Key and either enter a new key or generate a new one. To change the key, make sure that app/etc/env.php is writable.

Known issue: Magento throws the following error when you try to use the API to create two products with the same name without specifying the URL key: URL key for specified store already exists. However, when you try to create these products through the Admin, Magento does not throw an error, but instead appends a number to the converted URL key if two products have the same name.

Known issue: Currently, ElasticSearch is supported only in Single Source mode for the Default Source. It is not supported in Multi Source mode with custom sources.

Known issue: For Inventory Management, Single Source merchants may experience performance degradation with all products assigned to the Default Source and Default Stock. As a workaround for best performance, we recommend creating and assigning all products to one custom source and stock. This will affect bundled products support. To continue with bundled products, continue using Default Source and Stock in Single Source mode. We plan to have a resolution and bundled product multi-sourcing support in a later release. This does not affect Multi Source merchants. For details, see Inventory Management.

Known issue: For B2B merchants, please assign products to the Default Source and Default Stock for complete support. We will provide complete B2B support in a later release.

Known issue: The bin/magento setup:install — convert-old-scripts command, which is used to create declarative schema files, has the following limitations. These limitations will be addressed in a future release:

  • Only tables and columns are currently supported.

  • Renaming of tables is not supported.

Known 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 16278, 17261, 17562, 17604, 15050, 15051, 15095, 11286, 11771, 156, 203, 405, 529, 585, 677, 1311, 1460, 1466, 1170, 15717, 15853, 15572, 15986, 16022, 16117, 2318, 16245, 16348, 16879, 16715, 101, 17205, 16894, 17204, 17372, 17280, 17472, 17519, 17528, 16784, 17562, 127, 17666, 17681, 17683, 122, 17688, 17704, 17712, 17703, 124, 17922, 17941, 18003, 18023, 357, 358, 469, 560, 1121, 99, 105, 248, 15154, 15142, 242, 247, 253, 15185, 15274, 1168, 15395, 15397, 15692, 15867, 15698, 15701, 15703, 15707, 15706, 15903, 15709, 15607, 102, 17499, 17572, 17717, 17747, 244, 14329, 240, 17837, 241, 254, 243, 250, 339, 413, 702, 703, 748, 760, 1120, 1122, 1146, 1157, 15370, 15547, 1218, 1410, 1414, 16508, 1450, 126, 17138, 1514, 17724, 249, 103, 112, 16391, 16745, 16815, 16742, 16947, 17554, 17596, 17603, 17704, 17628, 17826, 17857, 15895, 17350 7379, 16273, 15085, 15041, 5726, 10869, 10868, 342, 632, 1150, 10346, 85, 3535, 14517, 16555, 15085, 17648, 17700, 118, 345, 347, 348, 518, 1116, 96, 31, 232, 10395, 137, 235, 237, 1151, 7897, 15469, 100, 239, 229, 169, 226, 380, 688, 712, 750, 1117, 1118, 1131, 1132, 1211, 1250, 1409,1411, 1409, 1412, 1413, 1415, 1416, 1417, 1418, 1420, 1421, 120, 1504, 1513, 16544, 233, 25, 19, 14035, 10687, 14819, 13747, 14248
Interactiv4 15069, 15073, 15075, 15078, 15081, 15083, 14429, 15071, 15072, 15074, 15077, 15079, 15080, 11174, 11360, 11362, 11434, 11443, 11452, 11587, 11605, 11626, 11662, 11663, 11665, 11666, 11667, 11859, 11862, 11891, 12937, 14453, 15082, 15263, 17768, 17608, 9401, 11805, 11046, 11073, 11524, 11604, 11750, 11752, 11961, 12042, 12545, 12637, 1413, 1474, 1642, 1694, 14300, 14305, 15520, 15574, 15578, 15777, 15576, 15575, 15577, 17117, 17312, 17313, 16757, 17574, 17598, 17694, 17717, 17714, 17721, 17741, 17799, 17812, 17814, 17815, 17820, 17765, 17768, 17829, 17832, 17837, 17858, 17857, 11153, 11234, 11306, 11449, 11619, 11622, 11842, 11888, 11471, 1793, 12010, 11642, 11644, 11636, 11661, 11727, 13220, 13339, 176, 1799, 12044, 16776 4301, 12362, 13427, 15070, 14855, 8554, 9050, 11324, 11328, 11586, 11697, 12362, 9900, 9968, 10301, 5439, 6460, 7927, 11898, 11825, 11908, 12450, 12625, 14072, 14089, 15334, 16499, 13102, 1821, 14248, 10441, 10580, 10485, 10007, 6770, 4808, 8799, 10231, 11996, 10168, 11540, 9869, 11534, 7099, 13117, 8621, 175, 10707, 10737, 11032, 9410, 7903
TechDivision 38, 39, 49, 71, 74, 76, 93, 106, 116, 140, 142, 165, 170, 205, 298, 470, 473, 505, 554, 557, 1022, 1388, 1378, 14468, 16708, 146, 150, 103, 324, 428, 780, 817, 921, 973, 1392, 159, 148, 168 70, 72, 91, 167, 204, 462, 498, 553, 998, 10790, 16302, 151, 52, 316, 396, 397, 457, 822, 851, 1381
MageSpecialist 9019, 11179, 11269, 11315, magento-partners/magento2ee/pull/62, 11368, 1342, 15974, 15982, 1350, magento-partners/magento2ee/pull/15, 1340, 14805, 14806, 14799, 14897, 10610, 312, 318, 997, 1000, 14801, 1289, 15685, 16137, 1290, 1344, 1356, 1371, 1285, 1288, 15766, 15768, 1455, 1443, 16893, 17771, 10655, 14016, 14123, 1347, 15980 10501, 2956, 1339, 133, 1336, 1275, 911, 774, 33, 14895, 9930, 311, 313, 911, 774, 1287, 1221, 1286, 1306, 1341, 1221, 1039, 15510, 15457, 1373, 863, 15501, 10645, 14010, 7906, 717
Wagento 1656, 1677, 2011, 2177, 2176, 2157, 2156, 2122, 2118, 2076, 2075, 2067, 2066, 2056, 2054, 2154, 2155, 2206, 2270, 2268, 2218, 2235, 2266, 2340, 2339, 15577, 2175, 15732, 1928, 2091, 2090, 15745, 15744, 15755, 15738, 15757, 15748, 15731, 15747, 15750, 15752, 15726, 15766, 15768, 15665, 12920, 15798, 2314, 2300, 2323, 2298, 2321, 16038, 15975, 16036, 16042, 16045, 15896, 15833, 2292, 2424, 2410, 2433, 2465, 16994, 17014, 17028, 17117, 17809, 2098, 2097, 2095, 2093, 2172, 2132, 2247, 2273, 2269, 2232, 2173, 2178, 2324, 2322, 2331, 2332, 16321, 16283, 15842, 16103, 15916, 15879, 15794, 15746, 15764, 15709, 16046, 16521, 16741, 16796, 17911, 16708, 16776, 2230, 2228, 2174, 2229, 16225, 17209 15334, 15348, 15564, 15192, 15354, 15356, 15348, 12601, 15510, 15457, 14063, 8810, 15308, 15832, 15213, 15118, 15822, 14999, 15323, 15608, 14153, 7897, 15205, 15245, 16378, 15848, 17851, 16302, 7903, 16082, 14476,
Krish TechnoLabs 16623, 16664, 16668, 16670, 16663, 16698, 16701, 16666, 16875, 16515, 16699, 17149, 17266, 1972, 16484, 2452, 2453, 16815, 16817, 16834, 16814, 16926, 16888, 16892, 16893, 17080, 17106, 17107, 17133, 2475, 2445, 17197, 17215, 16897, 17259, 17198, 17201, 17261, 17329, 17330, 17312, 17313, 17315, 17418, 17420, 17421, 17423, 16813, 17419, 17394, 17448, 17449, 17472, 17475, 17502, 17551, 17346, 17672, 17755, 17799, 17921, 17922, 17938, 17858, 16896, 17477, 17670, 16546, 16630, 16773, 16824, 16874, 16829, 16820, 17017, 17495, 17499, 17874, 17623 7399, 11354, 15341, 15590, 15621, 12081, 14869, 15993, 16273, 13445, 16788, 15588, 17172, 15028, 17316, 16849, 71, 13480, 6585, 16489, 17289, 17789, 16929
Bold 100, 101, 102, 107, 113, 118, 121, 122, 126, 139, 144, 145, 171, 198, 202, 215, 310, 319, 362, 365, 646, 667, 758, 1196, 1270, 1219, 1257, 125 41, 95, 117, 97, 119, 120, 98, 128, 111, 184, 157, 178, 263, 201, 212, 291, 272, 273, 346, 368, 449, 1167, 991, 1210, 1214, 23
comwrap 1, 7, 14540, 14576, 14652, 21, 16947, 16995, 17848, 16896, 6, 11, 12 71, 20
Something Digital 11463, 11572, 15592, magento-partners/magento2ce/pull/39, 12345, magento-partners/magento2ce/pull/38, magento-partners/magento2ee/pull/19, magento-partners/magento2ee/pull/35, magento-partners/magento2ee/pull/48, 14700, 12247, 13144, 13506, 13517, 39, 1418, 1471, 135 12647, 1, 124, 128, 129
Experius magento-partners/magento2ce/pull/20, 11652, 11659, 11735, 11760, magento-partners/magento2ce/pull/7, magento-partners/magento2ce/pull/9, magento-partners/magento2ce/pull/15, magento-partners/magento2ce/pull/49, magento-partners/magento2ce/pull/51, magento-partners/magento2ce/pull/56, magento-partners/magento2ce/pull/57, magento-partners/magento2ce/pull/58, magento-partners/magento2ce/pull/61, 17117, 16791 7591, 11095, 11322, 14966
Kega 4893, 10253, 10432, 10435, 10445, 10598, 10601, 11296, 11609, 12624, magento-partners/magento2ee/pull/56, 1310, magento-partners/magento2ee/pull/69 2987, 10252, 4237, 10255, 7403, 5509, 5820, 9967, 6151, 11295
H&O 14957, 13776, 10208, 10491, 10604, 10996, 11519, 11834, 12888, 12947, 13655, 13659, 13798, 13815, 15168, 15200, 16376, 16638, 16838 11207, 5956, 14941, 5067
Convert 9796, 13789, 13809, 13933, 14169, 14481, 14482, 14352, 14470, 13501 6729, 6457, 7362, 14351
Imagination Media 9852, 1189, 1419, 1586, 17207, 2791  
Vaimo 7711, 13885, magento-partners/magento2ee/pull/28 5463
Ampersand 12592, 1314, 2366, 2391, 2390, 2361, 10616, 15777, 16817  
SNOW.DOG 11276, 11371, 11433, 14399, 14395, 10933, 14557, 16932, 17123, 17444 10739
Basecom 10089, 10181, 17771, 15847, 17020, 17042, 17043, 17044, 17046, 17049, 17054, 17056, 17045, 17052, 17055, 17205, 17208, 17207, 17206, 17209, 17051, 17210, 17204, 17359 5785, 15501, 12221, 4977, 14476, 8131, 17193
ISM eCompany 16387, magento-partners/magento2ee/pull/75, magento-partners/magento2ee/pull/71, magento-partners/magento2ee/pull/73, 17251, 16694, 16778, 17529, 16332  
Mediotype 11546, 1411, 14374, 14755, 16252, 17328, 15329, 1415  
Balance Internet 7446, 1341, 1345  
Space 48 1986, 2005, 1739, 100, 1603, 104, 1403, 16961 9342, 12330, 80
MediaCT 12640, 16607, 16569, 17228, 17408, 17548, 17550, 17571, 17610, 17232, 16571 7543, 13948
Inviqa 16773, 16820, 12896  
Classy Llama magento-partners/magento2ee/pull/25, 13877, 1457, 1850, 1851, 16546, 2204, 1686 16489
Netz98 13251, 10475 13251
JH 14343, 105, 14341, 14356, 94, 14312
Divante 16562, 13802, 13979, 17052 13652, 13315, 4977
DEG 17210, 17375 8131, 10411
Smile 1720, 1734  
We Provide 209, 10430  
Guapa 15975, 16813, 17848, 17462, 17659 15308, 15588, 17579
Aligent Consulting 1883, 16492, 1917 15940
Creatuity magento-partners/magento2ce/pull/23  
Corra 1779, 1582  
Pinpoint 1560, 1633, 1767, 1768  
Veriteworks 15540, 15542 11717, 15541
Redkiwi 10913 10673
Siteworks 17528  
HumanElement 1491 10090
Rocket Web 79  
DCKAP 1712  
i.cube 17495 17289
TwoJay 985  
mediaspa 1892, 1803  
Perficient 15607 15469
CoolBlueWeb 10627 9533
Limesharp 94 80

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 Related GitHub Issues Pull Requests
schmengler #6497 magento/magento2#9955
evgk #9265 magento/magento2#9266
Marko-M #6175 magento/magento2#10244
NMills12 #9196 magento/magento2#9908
ntoombs19 #4530 magento/magento2#10248
ajpevers #10252 magento/magento2#10253
kweij #7741 magento/magento2#7742
AirmanAJK #5941 magento/magento2#8999
heldchen #6457 magento/magento2#9796
kandrejevs #6729 magento/magento2#9796
valenciaisaza #7362 magento/magento2#9796
okorshenko #9236 magento/magento2#10259, magento/magento2#10306, magento/magento2#10320, magento/magento2#10329, magento/magento2#10333, magento/magento2#10339, magento/magento2#10340, magento/magento2#10341, magento/magento2#10342, magento/magento2#13137, magento/magento2#14438
ADDISON74 #5785 magento/magento2#10089
vesan-83 #2987 magento/magento2#4893
avoelkl #10045 magento/magento2#10288, magento/magento2#10442
ajpevers #10255 magento/magento2#10435
thenguyenit #10459 magento/magento2#10462
mash1t #10436 magento/magento2#10475
ekuusela #10527 magento/magento2#10528
XigenDominic #6709 magento/magento2#10508
sam-g-roberts #7471 magento/magento2#10508
bjoern-quast #5820 magento/magento2#10445
rorteg #5509 magento/magento2#10445
thlassche #7403 magento/magento2#10445
angelo983 #9967 magento/magento2#10445
gilbertsohal #10565 magento/magento2#10575
XigenDominic #6708 magento/magento2#10558
GuidoHub #10032 magento/magento2#10593
philipvandebriel #6151 magento/magento2#10601
phoenix128 #9930 magento/magento2#10610
brenjt #9533 magento/magento2#10627
ajpevers #4237 magento/magento2#10432
Zaylril #10645 magento/magento2#10655
yumicom #6733 magento/magento2#10563
ulftietze #10562 magento/magento2#10563
Igloczek #8241 magento/magento2#10638
cdiacon #4720 magento/magento2#10877
cviking26 #9489 magento/magento2#10848
Styopchik #9877 magento/magento2#10930
ekuusela #10803 magento/magento2#10919
joachim-havloujian #10772 magento/magento2#10937
theodorhanu #10824 magento/magento2#10936, magento/magento2#11092
kanduvisla #11000 magento/magento2#11001
gwharton #10595 magento/magento2#10935
StefanErakovic #9900 magento/magento2#11046
kanduvisla #10611 magento/magento2#10921
bka #8554 magento/magento2#11174
vlauria #9050 magento/magento2#11174
nowszy #10738 magento/magento2#11169
redelschaap #9968 magento/magento2#11073
hatimeria-artur-jewula #10922 magento/magento2#10923
gerardojofre #10441 magento/magento2#11234
ajpevers #11295 magento/magento2#11296
schmengler #11044 magento/magento2#11047
chiragp-wagento #10007 magento/magento2#11449
mayankzalavadia #11139 magento/magento2#11206
fxdegroot #10501 magento/magento2#11315
minesh0111 #10231 magento/magento2#11471
wsajosh #10795 magento/magento2#11457
tzyganu #11581 magento/magento2#11582
adrian-martinez-interactiv4 #11586 magento/magento2#11587
Koekoet #7915 magento/magento2#11649
djoseph74 #7591 magento/magento2#11659
gulshan-streammarket #11328 magento/magento2#11452
PiscesThankIT #7767 magento/magento2#11679
mageprince #10301 magento/magento2#11524
JeroenVanLeusden #11207 magento/magento2#11519
DesignDesignInc #10168 magento/magento2#11642
SirElectro #11540 magento/magento2#11644
pradeep38mail #9869 magento/magento2#11636
Andrii-Deineha #11534 magento/magento2#11661
cbend #11380 magento/magento2#11683
thdoan #7099 magento/magento2#11727
pmcmanaman #11322 magento/magento2#11760
manhao-chen #11022 magento/magento2#11418
tomasinchoo #7927 magento/magento2#11752
hostep #10673 magento/magento2#10913
ednacool #5439 magento/magento2#11604
hauso #11729 magento/magento2#11730
zihen #4808 magento/magento2#11842
coleHafner #11409 magento/magento2#11434
magemash #8236 magento/magento2#11805
redelschaap #7640 magento/magento2#11849
joergmaertin #10185 magento/magento2#11931
dankocherga #10195 magento/magento2#11909
koenner01 #6948 magento/magento2#11801
delyriand #8799 magento/magento2#11888
Triloworld #11697 magento/magento2#11862
sschurink #11898 magento/magento2#11961
zack6849 #11996 magento/magento2#12010
poojawebkul #9768 magento/magento2#11725
s3rj1k #10810 magento/magento2#11466
raisaev #8022 magento/magento2#11680
DariuszMaciejewski #7678 magento/magento2#11503
koenner01 #7691 magento/magento2#11903
jernejh #5956 magento/magento2#11834
jreinke #10347 magento/magento2#11594
bulbulagarwal896 #10765 magento/magento2#12375, magento/magento2#10915
herveguetin #9410 magento/magento2#12044
bartlubbersen #10707 magento/magento2#12044
slavkodick #10737 magento/magento2#12044
MidnightDesign #11032 magento/magento2#12044
zts #10058 magento/magento2#12376
klakovskiy #12393 magento/magento2#12397
steros #10869 magento/magento2#11286
azeemism #6460 magento/magento2#11750
friimaind #11095 magento/magento2#11735
alexkuk #6634 magento/magento2#10619
nfourteen #12439 magento/magento2#12478
okorshenko #10414 magento/magento2#10925
carloricci84 #11825 magento/magento2#12042
mikelevy300 #11908 magento/magento2#12042
andrewkett #11324 magento/magento2#11443
asrenzo #12110 magento/magento2#12538
Cinawork #12450 magento/magento2#12545
roma84 #12268 magento/magento2#12556
daniel-ifrim #10123 magento-engcom/magento2ce#997
stevenlavine #11252 magento/magento2#11267
amansrivastava #12378 magento-engcom/magento2ce#1015
ffrodoe #12452 magento/magento2#12665
Tomasz-Silpion #12660 magento/magento2#12665
kanduvisla #6770 magento/magento2#11619
mahmood537 #12625 magento/magento2#12637
quisse #12627 magento/magento2#12631
dmitry-fedyuk #2156 magento/magento2#12007
hgpit #5306 magento/magento2#12872
EliasZ #12455 magento/magento2#12872
dromoded #12533 magento/magento2#12872
fouli86 #10682 magento/magento2#12955
Franzld #11236 magento/magento2#12960
okorshenko #9243 magento/magento2#12957
EliasZ #12555 magento/magento2#12943
LiamFielding #7816 magento/magento2#12852, magento/magento2#14322
ovsokolov #7543 magento/magento2#12640
mzenner1 #12793 magento/magento2#12853
DariuszMaciejewski #7441 magento/magento2#13011
tzyganu #758 magento-engcom/magento2ce#1193, magento/magento2#14675
digitalpianism #4292 magento-engcom/magento2ce#1195
simpleadm #9969 magento/magento2#12949
spyrule #10415 magento/magento2#13012
Vinai #2907 magento-engcom/magento2ce#1194
linden2015 #12967 magento/magento2#12992
sasilinux #11428 magento/magento2#13223
pmoreno1980 #11497 magento/magento2#13223
leoquijano #4711 magento-engcom/magento2ce#1201
BenSpace48 #4696 magento-engcom/magento2ce#1197
srbarba #5105 magento-engcom/magento2ce#1282
Bartlomiejsz #7582 magento-engcom/magento2ce#1282
J8-ET #8958 magento-engcom/magento2ce#1282
bap14 #9920 magento-engcom/magento2ce#1282
nei #10317 magento-engcom/magento2ce#1282
irinikp #10775 magento-engcom/magento2ce#1282
kfaer #11163 magento-engcom/magento2ce#1282
BenSpace48 #11231 magento-engcom/magento2ce#1282
schmengler #6802 magento-engcom/magento2ce#1287
astorm #6661 magento-engcom/magento2ce#1287
s3rj1k #10811 magento-engcom/magento2ce#1287
diwipl #10920 magento-engcom/magento2ce#1287
bnymn #11230 magento-engcom/magento2ce#1287
pushparaj100 #11793 magento-engcom/magento2ce#1287
apedicdev #11880 magento-engcom/magento2ce#1287
mihaifaget #12079 magento-engcom/magento2ce#1287
ajaysinghrana23 #8621 magento/magento2#13339
thdoan #6891 magento-engcom/magento2ce#1284
michaeldyl520 #9763 magento-engcom/magento2ce#1284
PatrickSH #9944 magento-engcom/magento2ce#1284
bap14 #9919 magento-engcom/magento2ce#1284
dersam #10025 magento-engcom/magento2ce#1284
ihor-sviziev #10275 magento-engcom/magento2ce#1284
NoorulBhoelai #10856 magento-engcom/magento2ce#1284
craigcarnell #11157 magento-engcom/magento2ce#1284
fvschie #4004 magento-engcom/magento2ce#1286
rosandrest #7995 magento-engcom/magento2ce#1286
jameshalsall #9028 magento-engcom/magento2ce#1286
rendyep #8954 magento-engcom/magento2ce#1286
hilrob #8846 magento-engcom/magento2ce#1286
mbijnsdorp #10583 magento-engcom/magento2ce#1286
expgabe #11700 magento-engcom/magento2ce#1286
emiprotech #12017 magento-engcom/magento2ce#1286
gnusmus #3596 magento-engcom/magento2ce#1289
mikelevy300 #10014 magento-engcom/magento2ce#1289
minosss #10477 magento-engcom/magento2ce#1289
akashkarev #10628 magento-engcom/magento2ce#1289
koenner01 #11140 magento-engcom/magento2ce#1289
lee586 #11532 magento-engcom/magento2ce#1289
psbhanu #11832 magento-engcom/magento2ce#1289
ralbin #11941 magento-engcom/magento2ce#1289
spyrule #7241 magento-engcom/magento2ce#1297
sunilit42 #11946 magento-engcom/magento2ce#1297
catstantin #12206 magento-engcom/magento2ce#1297
PascalBrouwers #12506 magento-engcom/magento2ce#1297
miguelbalparda #12632 magento-engcom/magento2ce#1297
alena-marchenko #12713 magento-engcom/magento2ce#1297
Silarn #11885 magento-engcom/magento2ce#1299
webscot #12294 magento-engcom/magento2ce#1299
schmengler #12844 magento-engcom/magento2ce#1299
mazur-vlad #12894 magento-engcom/magento2ce#1299
ifekaj #12900 magento-engcom/magento2ce#1299
lee586 #11828 magento-engcom/magento2ce#1302
devondahon #12320 magento-engcom/magento2ce#1302, magento-engcom/magento2ce#1380
azeemism #12877 magento-engcom/magento2ce#1302
milansimek #9783 magento-engcom/magento2ce#1283
rishabhchd19 #10941 magento-engcom/magento2ce#1283
larsroettig #11166 magento-engcom/magento2ce#1283
crtl #11176 magento-engcom/magento2ce#1283
lano-vargas #11275 magento-engcom/magento2ce#1283
EliasKotlyar #11310 magento-engcom/magento2ce#1283
agoeurysky #5015 magento-engcom/magento2ce#1285, magento-engcom/magento2ce#1203
marius-bica #8970 magento-engcom/magento2ce#1285
robgt #9742 magento-engcom/magento2ce#1296
dotsoa #9633 magento-engcom/magento2ce#1296
darkogoles1 #9566 magento-engcom/magento2ce#1285
NagarajuKasa #10291 magento-engcom/magento2ce#1285
hostep #10908 magento-engcom/magento2ce#1285
latypatil #11211 magento-engcom/magento2ce#1285
sigismund #11365 magento-engcom/magento2ce#1285
ajpevers #11669 magento-engcom/magento2ce#1296
OleksiyOleksiyovych #11868 magento-engcom/magento2ce#1285
archonkulis #12058 magento-engcom/magento2ce#1296
JamesonNetworks #5188 magento-engcom/magento2ce#1298
robinhuy #6113 magento-engcom/magento2ce#1298
hostep #9453 magento-engcom/magento2ce#1298
tzyganu #11936 magento-engcom/magento2ce#1298
JanisE #11953 magento-engcom/magento2ce#1298
alena-marchenko #12715 magento-engcom/magento2ce#1298
alena-marchenko #12719 magento-engcom/magento2ce#1298
dbsdsun #9764 magento-engcom/magento2ce#1323
wigman #9684 magento-engcom/magento2ce#1323
Kivike #10474 magento-engcom/magento2ce#1323
tcurilla #11329 magento-engcom/magento2ce#1323
gwilliams01 #12083 magento-engcom/magento2ce#1323
joergmaertin #10128 magento-engcom/magento2ce#1325
lee586 #11740 magento-engcom/magento2ce#1325
ihor-sviziev #12209 magento-engcom/magento2ce#1325
wd7080 #12601 magento-engcom/magento2ce#1325, magento/magento2#15726
degaray #2991 magento-engcom/magento2ce#1351
gizmocn #5129 magento-engcom/magento2ce#1351
githeat #6924 magento-engcom/magento2ce#1351
barbanet #8255 magento-engcom/magento2ce#1351
larylaz #11509 magento-engcom/magento2ce#1351
LucaGallinari #11882 magento-engcom/magento2ce#1351
alexhadley #12221 magento-engcom/magento2ce#1351, magento/magento2#15847
schmengler #12787 magento-engcom/magento2ce#1351
nfourteen #12876 magento-engcom/magento2ce#1351
alena-marchenko #12717 magento/magento2#12765
skmomemo #4248 magento-engcom/magento2ce#1353
jameswithers #5846 magento-engcom/magento2ce#1343
heldchen #6350 magento-engcom/magento2ce#1353
qubaji #6858 magento-engcom/magento2ce#1353
Nerogee #6831 magento-engcom/magento2ce#1353
crtsl #6712 magento-engcom/magento2ce#1353
mpchadwick #9008 magento-engcom/magento2ce#1353
hostep #9151 magento-engcom/magento2ce#1353
vjacquemin-sqli #9743 magento-engcom/magento2ce#1353
chickenland #9981 magento-engcom/magento2ce#1353
MMaKenZi #10834 magento-engcom/magento2ce#1353
tsmith1985 #8003 magento-engcom/magento2ce#1358
Koc #10502 magento-engcom/magento2ce#1358
diazwatson #11691 magento-engcom/magento2ce#1358
bondimedical3 #12261 magento-engcom/magento2ce#1358
denchev #10485 magento/magento2#11306
gwharton #10580 magento/magento2#11306
poojawebkul #12828 magento-engcom/magento2ce#1342
yangsystem #5774 magento-engcom/magento2ce#1359
magecodenet #6916 magento-engcom/magento2ce#1359
vrann #9277 magento-engcom/magento2ce#1359
flancer64 #10133 magento-engcom/magento2ce#1359
mikelevy300 #11792 magento-engcom/magento2ce#1359
Detzler #12374 magento-engcom/magento2ce#1359
quisse #12430 magento-engcom/magento2ce#1359
alena-marchenko #12705 magento-engcom/magento2ce#1359, magento/magento2#13394
katesuykovskaya #5035 magento-engcom/magento2ce#1362
reztierk #9055 magento-engcom/magento2ce#1362
domeglic #9036 magento-engcom/magento2ce#1361
royvanos #9918 magento-engcom/magento2ce#1361
dankocherga #10438 magento-engcom/magento2ce#1362
Alex-James17 #10697 magento-engcom/magento2ce#1361
selusi #11332 magento-engcom/magento2ce#1361
losetemp #11796 magento-engcom/magento2ce#1361
whereowareadmin #12064 magento-engcom/magento2ce#1361
erfanimani #12127 magento-engcom/magento2ce#1361
wd7080 #12446 magento-engcom/magento2ce#1361
bmisyura #12699 magento-engcom/magento2ce#1362
alena-marchenko #12714 magento-engcom/magento2ce#1361
ihor-sviziev #12860 magento/magento2#13468
joost-florijn-kega #11484 magento/magento2#13632
joachim-havloujian #12647 magento/magento2#13506
igortregub #13497 magento/magento2#13635
kirmorozov #13685 magento/magento2#13686, magento/magento2#13688, magento/magento2#14637
jordy2607 #11577 magento/magento2#13687
larsroettig #13595 magento/magento2#13785
duckchip #12791 magento/magento2#13795
zukovasmartynas #13429 magento/magento2#13819
joshfortyfour #9413 magento-engcom/magento2ce#1380
deadlyw1re #10417 magento-engcom/magento2ce#1380
arnoudhgz #13327 magento-engcom/magento2ce#1380
ju5t #11089 magento/magento2#13630
ihor-sviziev #13315 magento/magento2#13979
r-martins #13760 magento/magento2#13782
barryvdh #9342 magento-engcom/import-export-improvements#100
danielpfarmer #13350 magento/magento2#13907
Munszu #13827 magento/magento2#13907
hostep #12404 magento/magento2#13975
hostep #12405 magento/magento2#14043
Eminee #12421 magento/magento2#14043
pawcioma #13769 magento/magento2#14051
Sunil-Nethues #13652 magento/magento2#13802
webshouters #14010 magento/magento2#14016
maderlock #5463 magento/magento2#13885
ramusadwika #13006 magento/magento2#14174
alena-marchenko #12711 magento/magento2#14177
LordHansolo #13556 magento/magento2#14179
krzksz #13988 magento/magento2#14180
andrewhowdencom #11512 magento/magento2#14190
koenner01 #13791 magento/magento2#14185
Pumppa #13820 magento/magento2#14192
janssensjelle #13768 magento/magento2#14199
keyurshah070 #3483 magento/magento2#14204
zhiyicai #4454 magento/magento2#14205
ankurvr #13804 magento/magento2#14209
sl02 #13899 magento/magento2#14215
aeu #12792 magento/magento2#14225
alexkuk #13385 magento/magento2#14223
snoroozi #13778 magento/magento2#14225
schmengler #13631 magento/magento2#14231
joebordo #7906 magento/magento2#14123
mak0605 #13117 magento/magento2#13220
kayintveen #5863 magento/magento2#14252
philipvandebriel #8227 magento/magento2#14252
MarcoGrecoBitbull #8957 magento/magento2#14252
sergei-sss #10073 magento/magento2#14252
vaaralav #13216 magento/magento2#14250
koenner01 #13240 magento/magento2#14252
jonathanKingston #14172 magento/magento2#14173
jonathanKingston #14267 magento/magento2#14270
ThisIsRuddy #13992 magento/magento2#14304
HirokazuNishi #14072 magento/magento2#14300
superdav42 #14089 magento/magento2#14305
jonathanKingston #14274 magento/magento2#14301
brideo #14109 magento/magento2#14366
svines #5580 magento/magento2#14345
navarr #7428 magento/magento2#14383
woshka #14138 magento/magento2#14368
srenon #10559 magento/magento2#14247
historylife #10700 magento/magento2#14416
JanisE #11930 magento/magento2#14416
develpr #10057 magento/magento2#14444
ArjenMiedema #14307 magento/magento2#14460
Grohotun #3489 magento/magento2#14481, magento/magento2#14169
barbazul #14328 magento/magento2#14346
cdiacon #14249 magento/magento2#14461
jayanta88 #13582 magento/magento2#14508
nuethicadam #13010 magento/magento2#14528
mombrea #8837 magento/magento2#14513
erikhansen #13929 magento/magento2#14353
maxbucknell #14312 magento/magento2#14356
maxbucknell #14355 magento/magento2#14356
nyov #788 magento/magento2#14634
swnsma #14465 magento/magento2#14636
intercase #14049 magento/magento2#14661
wujashek #6879 magento/magento2#14714
galanis-a #13296 magento/magento2#13402
JanisE #12146 magento/magento2#14666
schmengler #11059 magento/magento2#14621
jsdupuis #9666 magento/magento2#14710
Avinashsain #12323 magento/magento2#14710
PierreLeMaguer #14572 magento/magento2#14676
erikhansen #13765 magento/magento2#14782
teokolo #4788 magento/magento2#14786
likemusic #14692 magento/magento2#14814
twslade #4389 magento/magento2#14816
bh-ref #9580 magento/magento2#14812
lano-vargas #12712 magento/magento2#14867
raymond62 #13944 magento/magento2#14868
shivkumarsingh7 #14850 magento/magento2#14867
gulshan-streammarket #11396 magento/magento2#14807
cnviradiya #14895 magento/magento2#14897
dexterityzx #5768 magento/magento2#14908
alepane21 #13704 magento/magento2#14381
novakivskiy #12285 magento/magento2#15021, magento/magento2#15022
gwharton #15009 magento/magento2#15022
okorshenko #9240 magento/magento2#9347
daniel-ifrim #4301 magento/magento2#14429
minlare #12362 magento/magento2#14429, magento/magento2#17608
aeu #13427 magento/magento2#14429
RedEnzian #7822 magento/magento2#15063
taylored2 #14855 magento/magento2#15077
ngashokkumar #5726 magento/magento2#15095
keevitaja #10395 magento/magento2#15142
moehrenzahn #13460 magento/magento2#15134
RNanoware #14140 magento/magento2#15161
diybook #10210 magento/magento2#15039, magento/magento2#16600
volnnn #2956 magento/magento2#11368
dryadav #15210 magento/magento2#15360
indefinitedevil #12330 magento-engcom/import-export-improvements#104
NamrataChangani #15352 magento/magento2#15560
paales #14941 magento/magento2#15200
neeta-wagento #15334 magento/magento2#15577
brian-labelle #15469 magento/magento2#15607
vovayatsyuk #14987 magento/magento2#15478
sanjay-wagento #15601 magento/magento2#15667, magento/magento2#15670
ankurvr #15660 magento/magento2#15682
shinesoftware #14063 magento/magento2#15665
koenner01 #13793 magento/magento2#15696
angelo983 #13415 magento/magento2#15705
slackerzz #7897 magento/magento2#15709, magento/magento2#15764
amittiwari024 #15354 magento/magento2#15731
gelanivishal #15356 magento/magento2#15747
saurabh-parekh #15355 magento/magento2#15763
HirokazuNishi #11717 magento/magento2#15540, magento/magento2#16588
milansimek #14153 magento/magento2#15746
jignesh-baldha #15192 magento/magento2#15755
denistrator #15608 magento/magento2#15794
careys7 #11477 magento/magento2#15946
harleen-mann #15457 magento/magento2#15768
anthony-jullien #15510 magento/magento2#15766
DanielRuf #15323 magento/magento2#15879
dnadle #6058 magento/magento2#15884, magento/magento2#16293, magento/magento2#16640, magento/magento2#16956
denistrator #14999 magento/magento2#15916
cnviradiya #15213 magento/magento2#15896
iamaravi #1221 magento/magento2#15685
DanielRuf #15308 magento/magento2#15975
Zaylril #1350 magento/magento2#15982
bubach #680 magento/magento2#16006
DanielRuf #15832 magento/magento2#16036
EliasKotlyar #15565 magento/magento2#15759
tohann #14747 magento/magento2#15861
DanielRuf #16047 magento/magento2#16097
sivajik34 #1190 magento/magento2#16153
zivendesign #1163 magento/magento2#16170
krukas #15564 magento/magento2#15744
Radio #15822 magento/magento2#15842
tizzyguy87 #15255 magento/magento2#16256
simpleadm #14351 magento/magento2#14352
atihomirov #7379 magento/magento2#16278
brian-labelle #15037 magento/magento2#16148
stevieyu #1164 magento/magento2#16164
hostep #5316 magento/magento2#16332
dverkade #15627 magento/magento2#16343
callumstar #15205 magento/magento2#16046
jokeputs #15245 magento/magento2#16046
evktalo #16243 magento/magento2#16253
Dart18 #8222 magento/magento2#16429
radosdesign #8810 magento/magento2#12920
koenner01 #7468 magento/magento2#13472
neeta-wagento #15348 magento/magento2#15732
tiagosampaio #16174 magento/magento2#16412
Stepa4man #15940 magento/magento2#16492
mohitka #16378 magento/magento2#16521
mageho #16079 magento/magento2#16228
Sathishkumar8731 #16479 magento/magento2#16537
apomili #14593 magento/magento2#16623
thdoan #7399 magento/magento2#16664
gnanasekaranl #14056 magento/magento2#16562
pmoreno1980 #11354 magento/magento2#16663
JRhyne #16703 magento/magento2#16792
Sathishkumar8731 #16764 magento/magento2#16808
samtay #5067 magento/magento2#16838
Jakhotiya #16184 magento/magento2#16603
dicgf8 #100 magento/graphql-ce#102
gondo #116 magento/graphql-ce#119
thomvanderboon #6264 magento-partners/magento2ee#71 (magento-partners/magento2ee)
PingusPepan #6504 magento-partners/magento2ee#73 (magento-partners/magento2ee)
careys7 #10346 magento/magento2#16715
kamilszewczyk #14035 magento/magento2#16742
DanielRuf #15848 magento/magento2#16796
kmddevdani #15590 magento/magento2#16926
jhruehl #12081 magento/magento2#16892
seansan #120 magento/graphql-ce#126
Webroju #14869 magento/magento2#16893
NeosKnowledgeBasePluswerk #13692 magento/magento2#16993
gwharton #15118 magento/magento2#16994, magento/magento2#17809
riconeitzel #103 magento-engcom/import-export-improvements#117
theycallmepepper #4977 magento/magento2#17052
gelanivishal #15345 magento/magento2#16805
damiandawber #14476 magento/magento2#17209
sanganinamrata #16529 magento/magento2#16856
DarkLanternMG #8131 magento/magento2#17210
adampmoss #16273 magento/magento2#17261
fooman #17225 magento/magento2#17268
delyriand #17193 magento/magento2#17359
JanisE #13445 magento/magento2#17418
dankocherga #10790 magento/magento2#14468
samtay #4803 magento/magento2#15723
dvershinin #15588 magento/magento2#16813
densen45 #15218 magento/magento2#16995
quienti #3535 magento/magento2#17280
erichagz #14517 magento/magento2#17280
cykirsch #10411 magento/magento2#17375
dverkade #16653 magento/magento2#17414
dverkade #16655 magento/magento2#17414
dannynimmo #17416 magento/magento2#17426
yspeedwicked #15028 magento/magento2#17475
HirokazuNishi #15541 magento/magento2#15542
JoshuaFlood #17289 magento/magento2#17495
p-bystritsky #16555 magento/magento2#16784
boxyman #10687 magento/magento2#17554
jesse-dev #15085 magento/magento2#17562
simonworkhouse #17587 magento/magento2#17596
leoquijano #15041 magento/magento2#17604
doctormess #13948 magento/magento2#17610
emiprotech #16499 magento/magento2#17574
bachlee89 #6305 magento/magento2#17607
marius-bica #12819 magento/magento2#17620
andrewhowdencom #12993 magento/magento2#17620
seansan #129 magento-engcom/php-7.2-support#135
seansan #128 magento-engcom/php-7.2-support#135
colinmollenhour #124 magento-engcom/php-7.2-support#135
Silarn #16927 magento/magento2#17627
adamkingfisher #17579 magento/magento2#17659
markoshust #17648 magento/magento2#17688
quisse #12250 magento/magento2#17725
dmytro-ch #17700 magento/magento2#17703
ruthger92 #13102 magento/magento2#17721
DanielRuf #15319 magento/magento2#17751
zebimax #17715 magento/magento2#17720
rjtulloh #15121 magento/magento2#17816
AlexandreKhayrullin #7557 magento/magento2#17650
vishveskrish #9307 magento/magento2#17750
roseofgold #9923 magento/magento2#17750
rbur0425 #11403 magento/magento2#17750
expgabe #11703 magento/magento2#17750
alena-marchenko #12695 magento/magento2#17750
chicgeek #1821 magento/magento2#17829
lucasjor-summa #17789 magento/magento2#17874
hitesh-wagento #17851 magento/magento2#17911
BenSpace48 #16302 magento/magento2#16708
ktruehl #14966 magento/magento2#16791
VitaliyBoyko #16544 magento/magento2#17724
VincentMarmiesse #13480 magento/magento2#17477
chizhov13 #16929 magento/magento2#17623
eduard13 #14819 magento/magento2#17628
springimport #6585 magento/magento2#17670
Naturegreen #15501 magento/magento2#17771
krzksz #17492 magento/magento2#17697
Detzler #13747 magento/magento2#17826
jb-dg #14248 magento/magento2#17857
nathanmerrill #7903 magento/magento2#16776

System requirements

Our technology stack is built on PHP and MySQL. For details, see Technology stack requirements

For more information, see System Requirements.

Installation and upgrade instructions

You can install Magento Commerce 2.3.0 using Composer.

Migration toolkits

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