Magento Open Source 2.4.4 release notes

Magento Open Source 2.4.4 introduces support for PHP 8.1. All project libraries and dependencies have been updated for compatibility with PHP 8.1. Core Composer dependencies and third-party libraries have also been upgraded to the latest versions that are compatible with PHP 8.1. This release also provides support for OpenSearch 1.2.

This release includes almost 250 quality fixes and enhancements.

NOTE
Thanks to our partner Atwix for their substantial contributions to making our 2.4.4 framework compatible with PHP 8.1.
NOTE
Adobe Commerce releases can contain backward-incompatible changes (BICs). To review backward-incompatible changes, see BIC reference. Major backward-incompatible issues are described in BIC highlights. Not all releases introduce major BICs.

Apply AC-3022.patch to continue offering DHL as a shipping carrier

DHL has introduced schema version 6.2 and will deprecate schema version 6.0 in the near future. Adobe Commerce 2.4.4 and earlier versions that support the DHL integration support only version 6.0. Merchants deploying these releases should apply AC-3022.patch at their earliest convenience to continue offering DHL as a shipping carrier. See the Apply a patch to continue offering DHL as shipping carrier Knowledge Base article for information about downloading and installing the patch.

Other release information

Although code for these features is bundled with quarterly releases of the Magento Open Source core code, several of these projects are also released independently. Bug fixes for these projects are documented in the separate, project-specific release information that is available in the documentation for each project.

NOTE
All vendor-bundled extensions, with the exception of Braintree, have been removed from Magento Open Source 2.4.4.
NOTE
Composer 2.2 introduced a security feature that requires merchants to identify trusted plugins in their composer.json file before the plugins will be executed. Currently, plugins that are included in the composer.json file but not marked as trusted are automatically installed. However, as of July 2022, Composer will not load plugins unless they have been explicitly allowed. See the Composer plugins issues when upgrading to Adobe Commerce 2.4.4 Knowledge Base article for instructions on how to modify the composer.json file to explicitly allow plugin loading.

Hotfixes included in this release

Magento Open Source 2.4.4 includes resolution of all issues that were addressed by the following hotfixes, which were provided for Adobe Commerce and Magento Open Source 2.4.3, 2.4.3-p1, and 2.3.7-p2:

  • The vulnerability addressed by MDVA-43395_EE_2.4.3-p1_COMPOSER_v1.patch and MDVA-43443_EE_2.4.3-p1_COMPOSER_v1.patch has been resolved in this release.

  • AC-384_Fix_Incompatible_PHP_Method__2.4.3_ce.patch. This patch addresses a fatal PHP error that occurred during upgrade. See the Adobe Commerce upgrade 2.4.3, 2.3.7-p1 PHP Fatal error Hotfix Knowledge Base article.

Magento Open Source 2.4.4 highlights

Look for the following highlights in this release.

Security enhancements

This release includes one security fix and platform security improvements. This security fix has been backported to Magento Open Source 2.4.3-p2 and Magento Open Source 2.3.7-p3.

No confirmed attacks related to these issues have occurred to date. However, certain vulnerabilities can potentially be exploited to access customer information or take over administrator sessions. Most of these issues require that an attacker first obtains access to the Admin. As a result, we remind you to take all necessary steps to protect your Admin, including but not limited to these efforts:

See Adobe Security Bulletin for the latest discussion of these fixed issues.

Additional security enhancements

Security improvements for this release improve compliance with the latest security best practices, including:

  • Email variable usage was deprecated back in 2.3.4 as part of a security risk mitigation in favor of a more strict variable syntax. This legacy behavior has been fully removed in this release as a continuation of that security risk mitigation.

    As a result, email or newsletter templates that worked in previous versions of Magento Open Source may not work correctly after upgrading to Adobe Commerce 2.4.4 or Magento Open Source 2.4.4. Affected templates include admin overrides, themes, child themes, and templates from custom modules or third-party extensions. Your deployment may still be affected even after using the Upgrade compatibility tool to fix deprecated usages. See Migrating custom email templates for information about potential effects and guidelines for migrating affected templates.

  • Integration tokens can no longer be used for API Bearer token authentication. Previously, an integration token could be used as a standalone key for token-based authentication. However, this behavior has been disabled by default due to the security implications of a never-expiring access token. The previous behavior can be enabled through the command line or Admin. See Token-based authentication.

  • Session IDs are no longer stored in the database.

  • OAuth access tokens and password reset tokens are now encrypted when stored in the database.

  • Validation has been strengthened to prevent the upload of non alpha-numeric file extensions.

  • Added reCAPTCHA support to coupon codes.

  • Swagger is now disabled by default when Magento Open Source is in production mode.

  • HTTPS is now enabled by default for the Magento Open Source storefront. The Use Secure URLs on Storefront and Use Secure URLs in Admin settings are enabled by default, and all built-in cookies are now set as secure.

  • The dependency confusion plugin is now required for all Magento Open Source installations. Previously, this plugin was required for Composer-based installations only. It now permits trusted versions. Merchants can bypass the constraints set in this plugin that prohibit certain combinations of Composer installations. The constraints can be bypassed for trusted versions, and Magento Open Source now displays a warning before proceeding with installation.

  • Developers can now configure the limit on the size of arrays accepted by Magento Open Source RESTful endpoints on a per-endpoint basis. See API security.

  • Added mechanisms for limiting the size and number of resources that a user can request through a web API on a system-wide basis, and for overriding the defaults on individual modules. This resolves the issue addressed by MC-43048__set_rate_limits__2.4.3.patch. See API security.

Platform enhancements

Magento Open Source 2.4.4 now supports PHP 8.1. All project libraries and dependencies have been updated for compatibility with PHP 8.1. Additional platform enhancements include:

  • Magento Open Source 2.4.4 provides support for Elasticsearch 7.16 and OpenSearch 1.2. The application Open Source merchants with deployments hosted on-premises can use either solution. However, OpenSearch is now the default search engine for Magento Open Source 2.4.4 deployments hosted in the cloud. All customers with cloud deployments who upgrade to version 2.4.4 must use OpenSearch. See Switching to OpenSearch for Adobe Commerce on Cloud 2.4.4

  • The JQuery library has been upgraded to version 3.6. The jquery-ui library has been upgraded to version 1.13.0. Several other JavaScript libraries have been updated to the latest versions.

  • TinyMCE 5.8.1 is now supported. TinyMCE 4 has been removed from the codebase.

  • The RequireJS library has been upgraded to the latest version (v2.3.6). GitHub-33672

  • PHPUnit has been upgraded to the latest version (9.5.x). Tests and test frameworks have been updated to be compatible with the new version.

  • Most Laminas dependencies have been upgraded to the latest versions that are compatible with PHP 8.1. Three Laminas dependencies were removed from the codebase to reduce the number of dependencies.

jQuery UI upgrade

jQuery UI has been upgraded to the latest version (v1.13.0). The following v1.10.0 jQuery components have been removed:

  • ajaxOptions and cache options for tabs. See Tabs.

  • .zIndex(). jQuery UI v1.12.1 includes jquery/z-index.js, which supports the use of .zIndex(). See UI Core.

  • Data fallbacks for widget names. You must use the full name for the .data() key.

  • Hard coding of classes such as ui-corner-all in widgets.

GraphQL

This release includes these GraphQL enhancements:

  • Performance improvements:

    • The performance of GraphQL cart operations has improved. The collectQuoteTotals() method is now called only once during a GraphQL request, which reduces response time.

    • Storefront performance has been improved by changes to how GraphQL requests are cached. Fastly and Varnish now cache GraphQL requests sent with auth tokens.

  • New storefront-related Admin configuration settings. The storeConfig query now returns the configuration settings for the Zero Subtotal Checkout and Check/Money Order payment methods.

  • Updated core GraphQL library. The webonyx library, which enables core GraphQL to function, has been upgraded to version ^14.9.

  • Fixed translation issues in GraphQL with multi-site and multi-language stores. The GraphQL resolver now returns translated strings based on store scope as expected.

  • GraphQL now provides New Relic with descriptive transaction names, which can be helpful for debugging. GitHub-30915

See the GraphQL Developer Guide for details on these enhancements.

Vendor-Bundled Extensions

With the exception of Braintree, all vendor-bundled extensions have been removed from the Magento Open Source 2.4.4 code base. Merchants should migrate to the official extensions, which are available on the Commerce Marketplace.

Amazon Pay

dotdigital

Klarna

Vertex

YotPo

PayPal Payment enhancements

  • The Venmo payment option is now supported.

  • Pay Later has been added as an option for shoppers based on the shopper’s location, not the merchant’s location.

  • Merchants can now set the shopper country when testing the shopper experience in their country of choice. Previously, tests were limited to testing only for the country in which the merchant is located. This change is valid in sandbox mode only.

  • Messaging on the checkout page now displays accurate messaging on how much and in how many increments shopper will be expected to pay when using Pay Later.

Accessibility updates

This release brings enhanced conformance to standard accessibility guidelines. It includes improved tooltips, accessible naming and tagging of screen elements, and redesigned icons and buttons. Over 80% of these fixes help improve the shopping experience for users Without Vision or Limited Vision.

Page Builder

Merchants can now add alternative text (alt_text) to images (Image, Banner, Slide) to enhance content accessibility. GitHub-746

Fixed issues

We are fixing hundreds of issues in the Magento Open Source 2.4.4 core code. A subset of those fixed issues is described below.

Installation, upgrade, deployment

  • Magento Open Source now logs static content deployment errors in build log files as expected.
  • Data patches can no longer ignore a table’s unique constraints and insert duplicate values into a MySQL database table. Previously, patches could insert duplicate values, which corrupted the database.
  • Merchants can now successfully upgrade from an Magento Open Source 2.4.2 deployment with Klarna to Magento Open Source 2.4.3. GitHub-33760
  • Sitemap generator configuration can now be successfully changed from the command line. Previously, the applicationOpen Source displayed this error when you tried to change sitemap configuration outside the Admin: Import failed: Notice: Trying to access array offset on value of type null in app/code/Magento/Cron/Model/Config/Backend/Sitemap.php on line 78. GitHub-31428
  • The bin/magento app:config:import command now executes without error when you update time values in config.php. Previously, changing product alert configuration by manual editing (that is, not using the Admin) resulted in an error.

Accessibility

  • Accessibility errors with navigation on the cart and checkout pages have been resolved. GitHub-34483
  • Screen readers can now read all relevant form elements on product pages.
  • Contrast has been improved for image delete and move icon buttons throughout the storefront to improve readability for low vision users.
  • The magnifying glass icon that is used to execute searches throughout the product interface has been assigned an accessible name and textual alternative.
  • The rich text editor toolbar can now be accessed using the Tab key.
  • The This item has weight select input on the Catalog > Product details page now has visible labels and an accessible name.
  • The accessible name of the control now includes the text of its visible label for the number of items per page dropdown.
  • The table controls on the Catalog > Product details page now have visible labels and an accessible name when the table is collapsed.
  • Edit links in the Products table now have unique, meaningful link text.
  • The triggers that expands tooltips now provide textual names.
  • Buttons throughout the storefront now have unique, descriptive accessible names. Previously, split buttons with a text button and an adjacent down arrow icon button had the same accessible name.
  • Contrast has been improved for image delete and move icon buttons throughout the storefront to improve readability for low vision users.
  • Textual alternatives have been added to the pencil icon that appears when a merchant edits input for the Search Engine Optimization accordion.
  • The magnifying glass icon that is used to execute searches throughout the product interface has been assigned an accessible name and textual alternative.
  • The product page New View text input field now has an accessible name.
  • The This item has weight select input on the Catalog > Product details page now has visible labels and an accessible name.

Backend

  • Administrators can now log in to the Admin in a deployment for which a custom Admin path is configured and secret key is enabled. Previously, the applicationOpen Source displayed this error: Invalid security or form key. Please refresh the page.
  • Magento Open Source no longer redirects to the All Store View scope when the multi-store hierarchy changes. Previously, after the hierarchy was saved, shoppers were redirected to an incorrect store URL and the All Store Views scope was selected in a multi-store deployment.

Bundle products

  • Shoppers can now add a bundle product with Fixed Product Tax and two options to their shopping cart. Previously, the applicationOpen Source did not add the product and displayed this error: We can't add this item to your shopping cart right now.
  • Form validation in the form of the data-validate and min attributes has been added to the cart quantity field to prevent negative values for bundle products.
  • The products query now filters bundle products correctly when child products are disabled on the store-view level. Previously, the query returned child products that were disabled at the store-view level.
  • cron now clears the product category cache as expected during indexer_update_all_views execution. Previously, the applicationOpen Source displayed an incorrect product count on the category page after the mass update of many products in the category.
  • Magento Open Source now updates the category product cache as expected when a bundle product reappears in stock.
  • Currency conversion now occurs as expected in email confirmations for bundle product purchases in multi-store deployments that use different currencies. GitHub-33426
  • Advanced pricing special price discounts are now correctly displayed for bundle products with a % prefix in the product grid. Previously, a % discount was incorrectly displayed with $ prefix instead of % in the product grid.
  • Bundle product status in the Admin now updates automatically when a related product changes its status.
  • The GraphQL resolver for bundle products now checks whether child bundle products have been disabled. Previously, this check did not occur and queries such categoryList returned child products that were not salable.
  • cart query responses now return accurate discounts for bundle products with dynamic prices. Previously, query responses included discounts applied to each bundle product individually.

Cache

  • The cache cleaning algorithm that runs during re-indexing has been optimized. Bundle products are now displayed as expected when a category is cached during re-indexing. Previously, bundle products were not displayed for hours after product categories were cached during re-indexing.
  • Page cache no longer grows rapidly under typical use. GitHub-9458
  • Placing an order no longer results in the removal of all cache tags that are related to the ordered products from the Varnish cache. GitHub-30128
  • Full-site page cache is no longer wiped out when you update a product from top categories or run an index to update product attributes or stock status. Previously, Varnish cache added top menu category IDs to all page cache tags. GitHub-33465

Cart and checkout

  • The Minimum Advertised Price What’s this? link on the cart page is now clickable and opens the information popup as expected. Previously, clicking this link had no effect.
  • Shoppers can now place orders without errors after a session timeout in deployments where persistent shopping cart is enabled. Previously, the applicationOpen Source displayed a payment error after a session timeout.
  • Assigning a high sort order value to a customer address attribute no longer causes performance degradation on the checkout page.
  • Magento Open Source now reverts the shopping cart product quantity to the previous value if the updated quantity is invalid.
  • Clicking the Add to Cart button in the Recently Viewed section now redirects as expected to the product details page. Previously, shoppers were redirected to the product listing page.
  • Guest shoppers can now successfully check out with a customer address that contains several types of custom customer address attributes. Previously, values for custom attributes were not properly formatted when displayed during checkout. GitHub-30290
  • Magento Open Source now correctly applies the free shipping threshold to orders when table rates are enabled. GitHub-21832
  • You can now use POST /V1/guest-carts/:cartId/items to add simple products with different options to a cart. Previously, this call changed the quantity of the first simple product you added instead of adding a second simple product with the specified options. GitHub-32302
  • The Order Summary section of the checkout page now displays the correct currency and amount when a deployment is configured for Poland country and PLN currency. Previously, the shopping cart and checkout page displayed the amount PLN 0.
  • Magento Open Source no longer throws an error when a shopper clicks Update Cart after changing a product quantity in the mini cart. Previously, the applicationOpen Source displayed this error: The quote item isn't found. Verify the item and try again.
  • GraphQL products queries for configurable products in a specific store now return the price ranges of products on the specified store only. Previously, requests returned price ranges for simple products on non-specified stores.
  • Magento Open Source no longer throws this error when a shopper adds a billing address that is missing a street field: Uncaught TypeError: Unable to process binding "text: function(){return currentBillingAddress().street.join(', ') }". GitHub-33826
  • Magento Open Source no longer throws a console error during checkout in stores from which the mini cart has been removed. GitHub-34513
  • Checkout no longer fails at the payment stage when the billing address is missing street field values or the street field value is not an array. Previously, checkout failed with this error: Uncaught TypeError: Unable to process binding "text: function(){return currentBillingAddress().street.join(', ') }". GitHub-33826
  • Magento Open Source now correctly calculates discounts when two cart rules are applied to an order that meet these conditions: one cart rule is applied with a coupon code and a Fixed price on whole cart condition and the second cart price rule has no coupon and a Percent of product price discount condition. Previously, the relevant algorithm could not properly split the discount proportionally among cart products when a previous cart rule had already applied a discount on some products.
  • Sales total is now calculated correctly in the coupon report grid. Previously, the sales total did not include the shipping amount.
  • Whole-cart discounts are now calculated correctly when the shopper switches between shipping methods.
  • The dropdown list for the State field on the Admin create order page is now populated by the predefined values for the selected country. Previously, this field was an input text field instead of a dropdown menu.
  • Magento Open Source no longer throws an error after you use the addConfigurableProductsToCart mutation to add a configurable product to a cart directly after changing the store view.
  • Magento Open Source no longer throws an error when you use the addConfigurableProductsToCart mutation to add a disabled child of a configurable product to the cart. Previously, the applicationOpen Source threw an integrity constraint violation error.
  • The coupon usage value no longer changes if the order that the coupon has been applied to fails. Previously, single-use autogenerated coupons were marked as invalid after the coupon was applied in the cart but the order was not placed.
  • Validation has been added to the checkout workflow to compare the customer’s street address against default value. If the validation process identifies changes, it sets customer_address_id to null to treat it as a new customer address. Previously, If the customer saved the address without validation at checkout and the same customer tried to place an order using the same address after validation was applied to checkout field , the application Open Source did not accept the edited address and threw an exception.

Cart price rules

  • Coupon generation is now blocked until the related cart price rule is saved with the auto option enabled. If you try to save this rule without enabling the auto option, the application Open Source displays this message: Rule is not saved with auto generate option enabled. Please save the rule and try again.
  • Added test for confirming the correct application of a cart price rule discount.
  • Cart price rules that use an SKU condition with If an item is FOUND/NOT FOUND in the cart with All/Any of these conditions true now work as expected with configurable products.
  • Cart price rules are now applied correctly for fixed-price bundle products. Previously, cart price rules did not apply to these products when at least one child product had same attribute set specified in the rule condition.
  • A product with the price of 0 can now be successfully added to the cart when Magento Open Source is configured with the Fixed amount discount for whole cart cart price rule. Previously, the applicationOpen Source displayed this error: report.ERROR: Warning: Division by zero in /home/mer33515/public_html/ee24develop/app/code/Magento/SalesRule/Helper/CartFixedDiscount.php on line 85.
  • Corrected a condition where the cart query returned an inaccurate discount amount when shopping cart rules with fixed amount discounts were activated.

Catalog

  • Magento Open Source no longer throws an exception when performing a mass attribute update action on the product grid when a product has a datetime attribute.
  • GraphQL queries now return results for child products of a configurable product according to the visibility filter settings of the child product(s).
  • Magento Open Source no longer modifies related product prices when the configurable product attributes are changed. Previously, the Minimum Advertised Price (MAP) for a configurable product overwrote the price of related products on the store front.
  • Magento Open Source no longer throws an exception when performing a mass attribute update action on the product grid when a product has a datetime attribute.
  • Dropdown/multi-select attribute values for the Admin product grid and filters are now derived as expected from Admin settings. Previously, attribute values were derived from the default store settings.
  • GraphQL category queries return information about changes to staged categories as expected.
  • Product lists are now accurately rendered in the Admin in deployments with products assigned to both a parent category and its subcategories but in different positions within each category. Previously, product list rendering failed with this error: Item (Magento\Catalog\Model\Product\Interceptor) with the same ID "<ID>" already exists. [GitHub-33145](https://github.com/magento/magento2/issues/33145
  • Multi-select attributes with many options (over 150) can now be assigned to new products. Previously, attribute options were saved in the catalog_product_entity_varchar table, and not all options were present when you reopened the product in the Admin. GitHub-33486
  • Added validation for the case when a router cannot instantiate an action class collected from a URL. The application Open Source now displays the standard error message. Previously, the applicationOpen Source displayed this error: PHP Error: Cannot instantiate abstract class Magento\Catalog\Controller\Product\Compare.
  • Assignment of many products (approximately 10,000) to a category no longer causes the browser to crash.
  • Image attributes are now saved in the database consistently whether saving from the Admin or importing. Previously, image ALT text values were saved inconsistently. If the image existed and the label was set to null, the label value was not reset in the database.
  • The Catalog Widget SQL query has been optimized. Previously, large MySQL queries slowed down page load and resulted in MySQL outages.
  • Price filters now work correctly with out-of-stock configurable products. Previously, out-of-stock configurable products were not shown in their correct price range.
  • Updating a child product no longer removes the catalog rule discount inherited from its parent configurable product during the partial indexing process. Previously, when we assigned a configurable product to a category but not its associated simple products, and then used that category to create a catalog rule, the application Open Source removed the catalog rule assigned to the simple product during the partial indexing process.
  • The grid view list of grouped and configurable products now contains only simple and virtual products when adding product options. Previously, the application included simple products with options.

Catalog rule

  • Daily updates of catalog rules no longer result in performance degradation. Previously, partial catalog product price indexing did not remove old prices or dates.
  • Magento Open Source no longer removes catalog price rules on configurable products during partial re-indexing. Previously, only sub-products were re-indexed when configurable products were re-indexed.
  • Catalog price rules with the category is not category_id condition now apply to products that do not belong to any category.

Configurable products

  • The configurable product option label name is now based on the selected store view during Admin order creation. Previously, the applicationOpen Source used the label name from the default store view.
  • Product lists now correctly include child products of an out-of-stock product when the global flag for displaying out-of-stock products is enabled. Previously, the product list did not include the child product if one one of several child product options were out-of-stock when this flag was enabled.
  • You can now use the addConfigurableProductsToCart mutation to add a configurable product to the cart on a non-default store view. Previously, you could not add a configurable product to a cart when website ID and store ID differed. GitHub-30948
  • GraphQL products queries no longer return data about the disabled child products of configurable products.
  • Creating new configurations for a configurable product no longer overrides changes in existing configurations. Previously, the status of existing variations were overridden with the default status enabled after new variations were generated.
  • Magento Open Source no longer throws an internal error when you try to add a disabled child of a configurable product to the cart.

Customer

  • Magento Open Source now considers website scope for Admin locales during order creation. Previously, order details such as customer address attributes worked properly on one website only in a multi-site deployment. GitHub-23254

Email

  • Email field validation errors on the checkout login popup now match email validation errors on the customer login page when a customer tries to log in using an invalid email account.
  • Magento Open Source no longer includes an error message in the shipment details email when a shipment comment is added from Admin and the Notify Customer checkbox is activated. Previously, shipping confirmation emails included this message: We're sorry, an error has occurred while generating this content.
  • Region and country ID values are now properly converted in email templates. Previously, when you clicked on Preview link from the Admin email template, country and the region name were not displayed correctly.
  • Sales update emails sent from the Admin for non-default store views now contain correct order status labels. Previously, these emails always displayed status from the default store. GitHub-29263
  • Magento Open Source now includes Content-Disposition: inline headers in email as expected. GitHub-29258
  • Order and shipment notification emails now work as expected in deployments using Microsoft Outlook and MS Exchange Server. Previously, the email body was empty but contained an ATT*-labeled attachment. GitHub-25076
  • Order emails now contain data localized using the shopper’s locale as expected. Previously, order emails used the Admin locale.
  • Clicking on the preview of any email template now opens the template preview in a separate window as expected. Previously, the applicationOpen Source opened the template preview simultaneously from the Email Templates grid and in a popup window.
  • Asynchronous order emails that are sent from a non-default website now include logo URLs from the appropriate website. Previously, these emails always included logos from the default or primary website. (A default key with a storeCode value has been assigned to the second array argument that is passed to the UrlInterface getUrl function. This value distinguish URLs in respect to different stores/websites and generates a correct baseUrl for the email content that is sent to customer.)

Frameworks

  • Non-strict comparisons between numbers and non-numeric strings now work by casting the number to string and comparing the strings. Comparisons between numbers and numeric strings continue to work as before. This means that 0 == "not-a-number" is now considered false. GitHub-33780
  • The helper Magento\Payment\Helper\Data no longer creates new layouts in constructors. Previously, when this helper was used in custom commands without specifying an area code, Magento Open Source threw an error. GitHub-33908
  • Updated the allure-framework/allure-php-api Composer dependency.
  • Magento Open Source now returns a 500 response code when an exception occurs in the bootstrap file. Previously, the applicationOpen Source returned a 200 OK status code. GitHub-22196
  • The currency symbol is now loaded as expected on storefront product details pages. Previously, this symbol sometimes disappeared after JavaScript page reloads.
  • Updating symfony/console no longer causes a failure when running bin/magento setup:di:compile. GitHub-33595
  • New required options have been added to the .htaccess and nginx.conf files that are distributed with Magento Open Source for PHP 8.x support. Outdated options have also been removed. GitHub-34358
  • Merchants can now upload a video for multiple products. The file generation process now appends an extension to the file name only if the uploaded file name includes an extension. Previously, when a merchant tried to upload then save the same video for two different products, the application Open Source threw this error: Notice: Undefined index: extension in /app/7ha7zds7wvqys_stg/vendor/magento/framework/File/Uploader.php on line 699. This occurred because Magento Open Source tried to append a file extension to the name irrespective of whether the uploaded file name had an extension.
  • Corrected issues with sprintf(__()) and sprintf(Magento\Framework\Phrase()) construction for compatibility with PHP 8.x throughout the codebase. Previously, the applicationOpen Source threw this type of error: Expected parameter of type 'string', 'Magento\Framework\Phrase' provided. GitHub-34085
  • Improved validation of the advanced search query parameters. GitHub-33589
  • Executing bin/magento support:backup:code now creates a backup as expected. Previously, the applicationOpen Source created a backup but threw an error.
  • Successfully executed cron processes are now assigned a status of success. Previously, the same cron process could be run twice because successful cron processes were assigned a pending status.
  • The Magento_Logging module now supports IPv6.

General fixes

  • Magento Open Source now copies all product fields according to their defined scopes when duplicating a product. Previously, the name and description fields were reset to global scope.
  • Magento Open Source no longer applies delta rounding to a discount when the product price is 0. Previously, the applicationOpen Source calculated a negative discount amount.
  • Products with a Set as New attribute that is assigned an empty start date and an expired end date can now be successfully saved. Previously, the applicationOpen Source threw this error when you saved a product with these settings: Make sure the To Date is later than or the same as the From Date.
  • Administrators can now retry operations that have been running over the maximum processing time. The default maximum is 12 hours.
  • Broken pipe errors no longer occur during bulk action processing due to unacknowledged messages for the consumer. A prefetch count property now limits these messages for the consumer and avoids errors. Previously, running bin/magento queue:consumers:start async.operations.all generated this error: Broken pipe or closed connection.
  • Shoppers are now redirected back to the login page as expected after a second failed login attempt. Previously, shoppers were redirected to a 404 page after a second unsuccessful login attempt. GitHub-32885
  • Password reset token validity has been extended to avoid the occurrence of a race condition during submission of the password change page. GitHub-29647
  • Permissions that are assigned to new integrations are now respected. GitHub-33347
  • Corrected regression issue that affected messages left in the exception logs for the Contact Us form. GitHub-34483
  • Resolved multiple issues with JavaScript loading of customer data. GitHub-30498
  • Using QuoteIdToMaskedQuoteId in an extension no longer significantly increases response time. GitHub-33676
  • The class BundleDiscountPrice in magento2/app/code/Magento/Bundle/Pricing/Price/ConfiguredPrice.php is now declared as expected. Previously, the applicationOpen Source threw this error: Class Magento\Bundle\Pricing\Price\BundleDiscountPrice not found. GitHub-33334
  • Escaped CSV field values written by the AWS S3 adapter now match the data written by other file system adapters.
  • Logging out from one device no longer automatically logs out the shopper from other devices.

GraphQL

  • The generateCustomerToken and revokeCustomerToken mutations now provide the correct cache ID for the user state. Previously, these mutations used an invalid x-magento-cache-id, which degraded performance.
  • The setBillingAddressToCart mutation now correctly uses the same_as_shipping parameter to set the billing address to match the shipping address as expected. Previously, the applicationOpen Source displayed this error: The shipping method is missing. Select the shipping method and try again. GitHub-30924
  • GraphQL cart operations now calculate cart grand totals only when the query requests it. Previously, cart operations always calculated the grand total, which is a resource-intensive operation.
  • The addProductsToCart mutation now adds to the cart only products that are assigned to the store that is defined in the header.
  • products queries using layered navigation filters now return correct child category lists. GitHub-33387
  • Queries and mutations that return the ConfigurableCartItem object contain information about configured variants as expected.
  • The products query now returns configuration product option values and variant attribute values. Previously, these values were empty in query responses.
  • The products query now filters bundle products correctly when child products are disabled on the store-view level. Previously, the query returned child products that were disabled at the store-view level.
  • The setShippingAddressesOnCart mutation now supports setting shipping addresses on a shopping cart with an empty telephone number value when the Show Telephone Admin configuration setting is set to optional. Previously, the applicationOpen Source threw this error: Field CartAddressInput.telephone of required type String! was not provided.
  • Corrected an issue where the addSimpleProductsToCart mutation allowed you to add simple products to a cart that are not assigned to the target website.
  • MySQL queries have been optimized for GraphQL products queries that use search parameters to refine search results.
  • The addConfigurableProductToCart mutation no longer supports adding a product to a cart if the product is not included in the requested scope.
  • The products query now returns only configurable variants that are assigned to the requested storeview. Previously, all variants of the requested configurable product were returned.
  • addSimpleProductsToCart requests can now run successfully in parallel. Previously, multiple requests for the same SKU created duplicate line items for the same cart ID rather than increasing the product quantity as expected.
  • The addProductsToCompareList mutation can now be used to compare variants of configurable products.
  • When the price of a tier product is updated from the backend, the new price is updated correctly on the customer’s cart. Previously, although the subtotal in the cart summary section was updated correctly, the row subtotal was not updated.
  • The addProductsToCart mutation now adds all selected options to the cart when used to add bundle products with multiple selection options. Previously, the mutation added only the last selection. GitHub-33123
  • GraphQL queries now return billing address as expected when the value of an optional telephone field is set to an empty string. Previously, queries returned a null address value. GitHub-30218
  • The products query response now lists products according to the specified sort order when multiple products have the same relevance or price value.
  • Concurrent addSimpleProductsToCart and addProductsToCart requests no longer result in duplicated quote items.
  • products query layered navigation filters now return correct child categories lists. Only direct subcategories are now included when the includeDirectChildrenOnly flag is provided in the request. Previously, all categories were included in response in the aggregation section when a product was assigned to several categories.
  • Added search suggestion functionality for GraphQL search queries.
  • The OrderAddress.telephone field is now optional in the customer query or other queries and mutations that return or modify customer order addresses.
  • Prices are now correctly updated for customers in a specified group in both the storefront and Admin when a group ID is changed via API. Previously, these prices were not updated correctly when a group ID was changed via API.

Image

  • Watermark images with transparent backgrounds no longer have a white background on the transparent product image that it overlays. Previously, when both the watermark image and product image had a transparent background, the watermark was displayed with a white background.
  • Logos for invoices and shipping receipts are now uploaded and displayed as expected when AWS S3 is enabled.
  • The media tag associated with an image added to a CMS page in a deployment where the Admin is set to a different domain than the store URL now contains store URLs as expected. Previously, media tags contained static Admin URLs instead of the expected store URLs. GitHub-32930
  • Magento Open Source no longer throws an error when you flush the images cache while simultaneously loading images on the storefront.

Import/export

  • bin/magento remote-storage:sync no longer fails when filenames are similar but differ by only one or two characters. Previously, the first image was stored correctly, but the second, similarly named image triggered a sync failure and this error: Notice: Undefined index: media/catalog/product/5/_ in /src/vendor/magento/module-remote-storage/Driver/Adapter/Cache/Generic.php on line 197. GitHub-34337
  • Magento Open Source now converts the timestamp in the export filename to the user’s timezone after a scheduled export. Previously, these values were not converted, and Magento Open Source displayed the UTC timestamp.
  • Magento Open Source no longer creates duplicate images in remote storage when the same CSV file is imported more than once.
  • Import no longer fails with this message: Import failed: Area code not set: Area code must be set before starting a session. GitHub-16171
  • You can now import successfully after running bin/magento app:config:dump and manually editing config.php. GitHub-31428
  • Non-default multiple value separators can now be used in custom multi-select attributes. Previously, validation failed during import. GitHub-23156
  • Product position in categories is now assigned correctly during import from CSV.

Index

  • Magento Open Source now displays products as expected on the storefront after re-indexing. Previously, when the first 500 products being re-indexed were in stock, and the next 500 products were out of stock, the storefront did not display any additional products.
  • Resolved consistency issues in merged indexer.xml files. The allowed values in classType are now the same in unmerged and merged indexer.xml files. GitHub-29609
  • A synchronization mechanism has been implemented in category indexers to prevent full and partial indexers from running in parallel. Previously, when these indexers ran in parallel, products could be temporarily omitted from storefront category pages or category pages could be temporarily empty of products.

Infrastructure

  • The unsupported str_contains method has been replaced with a supported function. This was a known issue for Magento Open Source 2.4.3. GitHub-33680
  • Refactored the codebase to correct usage of the keyword match, which is a reserved keyword in PHP 8.x. GitHub-33626

  • HTML tags are now nested and closed properly to meet standards in JQuery 3.5.x for non-void elements including custom elements.

  • Fixed abs() and round() functions for compatibility with PHP7.x and PHP8.x. GitHub-34322
  • Updating symfony/console no longer causes failure when running bin/magento setup:di:compile. GitHub-33595
  • Corrected the restriction for the colinmollenhour/cache-backend-redis Composer dependency. GitHub-34177
  • The codebase has been refactored to remove calls to deprecated methods of phpunit/phpunit. GitHub-33916
  • Magento Open Source now displays an informative error when an administrator with a read-only pubs/media tries to access the product details page for a product that includes images. Previously, the applicationOpen Source threw a PHP error. GitHub-32819
  • All member-level @api annotations have been moved to their class throughout the codebase.
  • gift-card Cms widget data has been moved from Magento/WidgetSampleData (Magento Open Source) to Magento/GiftCardSampleData (Adobe Commerce). This has resolved problems installing (Magento Open Source) with sample data on PHP8.1.
  • Marked interfaces throughout the Adobe Stock Integration codebase with @api as needed. GitHub-32875
  • Integers and floats in result sets are now returned using native PHP types instead of strings when using emulated prepared statements. GitHub-34625
  • Auto-creation of arrays from false values have been disabled to ensure compatibility with PHP 8.1.
  • The helper Magento\Payment\Helper\Data no longer creates new layouts in constructors. Previously, when this helper was used in custom commands without specifying an area code, the application Open Source threw an error. GitHub-33908
  • You can now pass a data argument to a block instance constructor by di.xml.
  • Improved the JWK check in the JwsManager class to handle situations when the algorithm is set directly in the header. Previously, this check ignored this valid scenario. GitHub-32636

JavaScript dependency updates

Library removals and deprecations

  • The following libraries have been removed because all browsers that Magento Open Source 2.4.x supports have built-in support for this functionality:

    • es6-collections.js
    • MutationObserver.js
    • Modernizr
    • FormData.js
  • Removed the unused jquery.hoverIntent JavaScript library. GitHub-33732

  • lib/internal/Magento/Framework/Filter/Money.php has been deprecated. It contains the money_format() function, which was removed in PHP 8.x. GitHub-33870

  • Removed the deprecated, unsupported grunt-autoprefixer package. GitHub-34037

Library upgrades

  • The following libraries have been upgraded to more recent versions:

    • script.aculo.us
    • Chart.js
    • moment.js
    • moment-timezone-with-data.js
    • matchMedia.js
    • underscore.js
    • PrototypeJS
    • RequireJS
    • LessCSS

Invoice

  • Casting to int has been removed for auto-incremented invoice IDs when prefixed with a string. As a result, invoices now display a 0 for numbers that are prefixed with a string. GitHub-34451

Logging

  • Magento Open Source no longer creates log entries for failed API calls executing bulk actions in System > Bulk Actions. Previously, permanent entries for failed API calls were added to the bulk action log.

Adobe Commerce coding standard

  • Updated phpunit/ phpunit to the latest version for the magento-coding-standard repository. GitHub-33622
  • Updated the webonyx/graphql-php dependency to version ^14.9 in the Adobe Commerce coding standard repository. GitHub-32863
  • Added new sniff Magento2.PHP.ArrayAutovivification to the Adobe Commerce coding standard to identify the auto-creation of arrays from a false value. GitHub-34509
  • Added new sniff Magento2.Functions.DeprecatedFunction to the Adobe Commerce coding standard. GitHub-34547
  • Added deprecated functions to sniff Magento2.Functions.DiscouragedFunction in the Adobe Commerce coding standard. GitHub-34548
  • The Magento2.Annotation.MethodAnnotationStructure sniff no longer fails with a false positive. GitHub-34679
  • The bin/magento media-gallery:sync command no longer fails in deployments where AWS S3 is enabled.
  • Newly added Media Gallery Content submenu titles are now displayed when menu items exceed 11 and the Enable Old Media Gallery configuration setting is enabled. GitHub-33889
  • Loading time for the Media Gallery tab when editing a product with many images has improved. GitHub-33434

MFTF

  • CURLOPT_POSTFIELDS no longer accepts objects as arrays. To interpret an object as an array, perform an explicit (array) cast. This practice also applies to other options that accept arrays. GitHub-33781

  • curl_init() now returns a CurlHandle object rather than a resource. The curl_close() function no longer has an effect. Instead, the CurlHandle instance is automatically destroyed if it is no longer referenced. GitHub-33781

  • Fixed errors in MFTF tests for downloadable products. GitHub-34270
  • Removed CliCacheFlushActionGroup from CatalogSearch, GroupedProduct, Newsletter, Paypal, Quote, and Review modules. GitHub-33531
  • Non-strict comparisons between numbers and non-numeric strings now work by casting the number to string and comparing the strings. Comparisons between numbers and numeric strings continue to work as before. This means that 0 == “not-a-number” is now considered false. GitHub-33780
  • parse_url() now distinguishes between absent and empty queries and fragments. GitHub-33782
  • Updated the codebase to avoid a fatal error when using the ReflectionType::isBuiltin() method. GitHub-34194

New action groups

AdminCheckOrderStatusInGridActionGroup GitHub-33747

StorefrontSelectFirstShippingMethodActionGroup GitHub-33773

AdminClickUpdateChangesOnCreateOrderPageActionGroup GitHub-33689

Action groups

Repetitive actions have been replaced with action groups in these tests:

AdminAddInStockProductToTheCartTest GitHub-34512

AdminAddBundleItemsTest GitHub-34312

AdminConfigurableProductAddConfigurationTest GitHub-34511

AdminConfigurableProductBulkUpdateTest GitHub-34435

AdminConfigurableProductDisableAnOptionTest GitHub-34511

AdminConfigurableProductOutOfStockAndDeleteCombinationTest GitHub-34316

AdminConfigurableProductOutOfStockTestDeleteChildrenTest GitHub-34316

AdminConfigurableProductRemoveAnOptionTest GitHub-34511

AdminConfigurableProductRemoveConfigurationTest GitHub-34511

AdminCreateAndEditSimpleProductSettingsTest GitHub-34435

AdminCreateAndEditVirtualProductSettingsTest GitHub-34435

AdminCreateInactiveFlatCategoryTest GitHub-34490

AdminCreateInactiveInMenuFlatCategoryTest GitHub-34510

AdminCreateDuplicateCategoryTest GitHub-34414

AdminCreateDuplicateProductTest GitHub-34414

AdminDeleteSimpleProductTest GitHub-33783

AdminEditRelatedBundleProductTest GitHub-34313

AdminMassDeleteBundleProductsTest GitHub-34313

AdminNavigateMultipleUpSellProductsTest GitHub-34314

AdminSimpleProductSetEditContentTest GitHub-34435

AdminSimpleProductTypeSwitchingToConfigurableProductTest GitHub-33788

AdminConfigurableProductTypeSwitchingToVirtualProductTest GitHub-33788

AdminCreateConfigurableProductWithDisabledChildrenProductsTest GitHub-33775

AdminUpdateFlatCategoryAndAddProductsTest GitHub-34490

AdminUpdateTopCategoryUrlWithNoRedirectTest GitHub-33774

AdminUpdateTopCategoryUrlWithRedirectTest GitHub-33774

CatalogProductListWidgetOperatorsTest GitHub-34579

CreateProductAttributeEntityWithReservedKeysTestGitHub-34422

EnableDisableBundleProductStatusTest GitHub-34313

StorefrontCheckRefundGrandTotalActionGroup GitHub-34315

StorefrontInactiveCatalogRuleTest GitHub-33556

StorefrontConfigurableProductCantAddToCartTest GitHub-33786

StorefrontConfigurableProductOptionsTest GitHub-33785

StorefrontConfigurableProductCanAddToCartTest GitHub-33784

StorefrontConfigurableProductGridViewTest GitHub-34311

StorefrontConfigurableProductListViewTest GitHub-34311

StorefrontProductNameWithHTMLEntitiesTest GitHub-33806

StorefrontProductNameWithDoubleQuoteTest GitHub-32991

New tests

AdminCreateOrderWithCheckedAppendCommentCheckboxTest GitHub-32381

CheckoutWithEnabledCaptchaTest GitHub-32991

StorefrontAddProductWithBackordersAllowedOnProductLevelToCartTest GitHub-33635

StorefrontGiftMessageForOrderOnCheckoutCartPageTest GitHub-32821

StorefrontCaptchaCheckoutWithEnabledCaptchaTest GitHub-32821

StorefrontCheckoutWithEnabledMinimumOrderAmountOptionTest GitHub-33460

Refactored tests

CaptchaWithDisabledGuestCheckoutTest GitHub-30828

Newsletters

  • Users with appropriate permissions can now manage customer newsletter subscriptions as expected. Previously, only administrators with full permissions could manage customer newsletter subscriptions on the Admin customer account page.

Order

  • Shoppers can now successfully re-order an existing order that contains a product with the combination of custom options of type file and type dropdown from both the storefront and Admin. Previously, the applicationOpen Source threw an error and did not process the re-order.
  • The Admin order detail page now loads as expected. Previously, the applicationOpen Source threw the following error when loading the order detail page for orders with certain taxes: Call to a member function getId() on array.
  • Administrators with restricted permissions that include order and shipping privileges can now view the order page as expected. Previously, the applicationOpen Source threw an error when an administrator with these permissions tried to view an order. GitHub-14633
  • Shoppers can now place an order that includes a child configurable product when a maximum quantity allowed limit is set.

Payment methods

  • Shoppers can now use Braintree to place an order using a billing address without a set region in deployments with 3DS enabled. Previously, checkout froze when the shopper clicked Place order, and the purchase could not be completed. GitHub-34204
  • The Venmo payment option is now supported.
  • PayPal can now track by BN code.
  • bin/magento setup:upgrade now runs as expected when upgrading from Magento Open Source 2.4.2-p1. Previously, the applicationOpen Source threw this error: Unable to apply data patch Magento\Paypal\Setup\Patch\Data\UpdateBmltoPayLater for module Magento_Paypal. GitHub-33678
  • The correct store ID is now used to retrieve saved credit cards during Admin order placement. Stored credit cards are now displayed during order placement according to the website scope configuration setting. Previously, when an administrator tried to create an order for a customer from the Admin and selected the Stored Credit Cards method, no options were available for stored cards.
  • Anomalies with PayPal Credit display of gift card amounts have been resolved. Previously, when PayPal Credit was enabled and multiple gift card amounts were configured, if a shopper changed the amount for the value of a gift card, the storefront did not update the amount for installment payments. This was a known issue in Magento Open Source 2.4.3.

PayPal

  • Magento Open Source no longer displays an error during checkout with the PayPal Express payment method. Previously, although the checkout process completed, the application Open Source displayed this error: Something went wrong.
  • PayPal Express now works as expected from the shopping cart. Previously, when you clicked the PayPal button to start express checkout from the cart, the application Open Source threw this error: To check out, please sign in with your email address. GitHub-33445
  • PayPal Payflow Pro now performs delayed capture with correct parent transaction IDs in deployments where the PayPal Payflow Pro gateway with Payment Action is set to Authorization. A Sale transaction is sent to Payflow with a parent transaction ID of the vault token created at checkout as expected. Previously, a Delayed Capture transaction was created and sent to PayPal Payflow. GitHub-33445
  • Shoppers are now redirected to the success page as expected after payment with PayPal Payments Advanced payment completes. Previously, shoppers were not redirected to this page even though the payment was successfully processed and no errors were logged.

Performance

  • Module list load execution time has improved.
  • The performance of the Popular Search Term cache has improved. Previously, the larger the search_query table, the longer a search query took to complete. GitHub-27559
  • Magento Open Source by default resizes images synchronously during product save. Merchants can now resize images as a background asynchronous process by minor edits to a di.xml file.
  • The performance of the Category Products indexer has been improved in multi-store deployments. GitHub-33984
  • The new in-memory cache for glob() system calls improves performance by reducing the number of glob() calls. GitHub-34025
  • Performance of the asynchronous order grid re-indexing process has been improved.
  • Memory consumption during the product export has been optimized.

Pricing

  • Price sorting now works as expected when product prices are close to or equal to zero and shared catalogs are enabled. Previously, zero tier prices were ignored during price re-indexing.

ProductAlert

  • The new product_alert consumer improves the sending of customer alerts by creating queue messages, running the consumer, and improving execution time. Previously, the applicationOpen Source threw an out-of-memory exception when sending more than 100,000 product alerts. The application Open Source also took more than 20 hours to send all alerts.
  • Magento Open Source no longer throws an error if the price filter on the Category page does not contain a second value. Previously, the applicationOpen Source threw an exception in the log file.

Product video

  • Magento Open Source now enables the Save button and autocompletes fields when you enter an incomplete URL while adding a video (Admin Catalog > Products > Add Video). Previously, the Save button was disabled, and fields were not populated.

Reviews

  • The product list view now displays the correct starred rating for products. GitHub-30196
  • Reviews are now visible as expected when a shopper clicks Review on the storefront product page.
  • The product star rating is now consistent across the Grid and List views on the storefront product list page. Previously, the same product could have different ratings in Grid and List view modes.

Sales

  • The performance of sales grid updates in asynchronous mode for tables with large data sets after upgrade to MariaDB 10.2.34 has been improved.
  • Magento Open Source now removes HTML tags as expected from the storefront Account > My Orders > View order page. Previously, the applicationOpen Source displayed HTML tags in the storefront customer order comment section.
  • Automated test coverage to verify the existence of an index for sales_shipment_grid.order_id has been added.
  • POST V1/orders calls now update extension attributes without error. Previously, an SQL syntax error occurred.

Search search-heading

  • Layered Navigation options for price range now work as expected with custom price attributes. The application Open Source uses the configuration of the price navigation step when filtering custom price attributes. Previously, the applicationOpen Source used the manual step configuration.
  • The storefront now shows all sub-categories of the current category in layered navigation regardless of number of categories available in the catalog.
  • Elasticsearch catalog searches are now diacritic-insensitive. Previously, searches for terms without an accent resulted in different results than searches on the same term with an accent.
  • Search weight is now correctly set on SKU attributes that contain special characters.
  • category_name has been added to the system-reserved product attribute codes. The application Open Source now shows an error if a user tries to create a product attribute with the attribute code category_name. Previously, products were not listed in the expected category, and an Elasticsearch error was logged.
  • Popular search terms now updated after each GraphQL search query.
  • Magento Open Source now adds correct price fields to the Elasticsearch price index mapping. Previously, incorrect price fields were added to the index with store ID instead of website ID.

Shipping

  • Shipment email now includes the tracking number for the current shipment only. Previously, when an order included several shipments, each shipment’s email included the tracking numbers from all shipments related to the order.
  • Magento Open Source now updates the mini cart successfully when a shopper deletes a product from their cart while in multi-shipping mode, then switches to a single shipping address. Previously, product prices were not updated as expected.
  • Import of table rates now works as expected when using the S3 storage adapter. Previously, the applicationOpen Source displayed this error: File "https://[bucket].s3.eu-central-1.amazonaws.com/[prefix]/tmp/phpLjGmHf" not found. GitHub-33072
  • You can now disable shipment update emails as expected from Stores > Configuration > Sales > Sales Emails. GitHub-33165
  • Magento Open Source now displays free shipping cost (0) on Admin and storefront invoice page totals. Previously, when shipping was zero for an order, the application Open Source did not display the shipping amount in totals on the invoice page shipping total.
  • Rate requests to online shipping carriers have been reduced from several requests to one. Package insurance and handling price per item/package are now calculated correctly. Previously, the applicationOpen Source displayed incorrect shipping rates for FedEx shipping methods.
  • Magento Open Source now displays UPS rates when creating shipping labels for shipping from Puerto Rico. Previously, the applicationOpen Source did not display these UPS rates.
  • The shipping street address is now cleared completely as expected after removal from the input box. Previously, the text box retained one or more characters after you deleted the address.

Store

  • The Login as Customer feature now works as expected in deployments that contain multiple stores on different URLs. Previously, the applicationOpen Source did not load the correct store, even when accessing the correct store domain.

Tax

  • Magento Open Source now correctly calculates the mini cart subtotal when a customer deletes an item after selecting shipping to multiple addresses.
  • Magento Open Source now shows the same tax rate on all checkout pages when the shopping cart contains only virtual products.
  • Tier prices for configurable products now display accurate included and excluded tax values on the storefront. Previously, the same values were displayed for both included and excluded taxes. GitHub-33673

Test

  • WebAPI tests are now compatible with PHP 8.1. GitHub-34653
  • Merchants can now test the shopper experience of the country in which the shopper is located, rather than the merchant’s location.

  • Functional tests have been stabilized for PHP 8.x compatibility. GitHub-34327, GitHub-34188

  • Fixed errors that resulted in false positive static tests. GitHub-34056
  • Test coverage has been updated for call_user_func_array. GitHub-34301
  • The Magento\GraphQl\CatalogGraphQl\ProductSearchTest test no longer throws this error when run with AWS Elasticsearch: Magento\GraphQl\CatalogGraphQl\ProductSearchTest::testSearchSuggestions Failed asserting that an array is not empty. /var/www/html/dev/tests/api-functional/testsuite/Magento/GraphQl/CatalogGraphQl/ProductSearchTest.php:94 /var/www/html/dev/tests/api-functional/framework/Magento/TestFramework/TestCase/GraphQlAbstract.php:257.
  • Fixed numerous non-critical unit test warnings by renaming all mock variables to include the Mock suffix and removing references to a deprecated Object Manager class. GitHub-33695

  • The Magento\Framework\MessageQueue\TopologyTest test is now compatible with the AWS MQ for RabbitMQ service. Previously, this test failed with this message: Invalid exchange configuration: magento-topic-based-exchange1 Failed asserting that two arrays are equal.

Unit tests

The following unit tests have been refactored to use PHPUnit instead of AspectMock:

AllureHelperTest GitHub-33294

ObjectHandlerUtil GitHub-33584

MockModuleResolverBuilder GitHub-33583

MagentoTestCase GitHub-33582

ModuleResolverTest GitHub-33308

ParallelGroupSorterTest GitHub-33306

SuiteGeneratorTest GitHub-33299

OperationDataArrayResolverTest GitHub-33296

Theme

  • Notification messages are now displayed correctly when Magento Open Source has a subpath configured in its base URL.
  • Added an aria-label element to the storefront page template to indicate the page to which the shopper will navigate to when clicking a link. Previously, the same link text was used for links to different pages. GitHub-33075
  • Magento Open Source no longer displays an error message when loading the homepage of a store with pre-existing custom theme. Previously, the applicationOpen Source displayed this message: The store will not work correctly in the case when cookies are disabled.

Translations and locales

  • The UserExpiration validator no longer fails with de_DE and uk_UA locales. Previously, the applicationOpen Source threw an error when an administrator tried to set an expiration date when creating a new user from the Admin with locales set to de_DE or uk_UA. GitHub-32497
  • Swiss region names are now consistently presented in English in the create or edit address forms. GitHub-32602
  • Updated zip_codes.xml patterns for Guernsey to support GY10 postcodes for the Island of Sark. GitHub-33144
  • Added Belarus regions to the directory_country_region table. GitHub-33924
  • Display anomalies with storefronts running the Filipino (Philippines) locales have been resolved. GitHub-33996
  • You can now successfully enter a customer date of birth when creating a new account in stores set to a Portuguese(Portugal) locale. Previously, Magento Open Source threw an error when you tried to create an account. GitHub-34130
  • The product detail page is now successfully displayed with the Arabic (Saudi Arabia) locale. Previously, this locale broke the product detail page.

UI

  • Corrected errors with MFTF tests that use maps.googleapis.com.
  • Magento Open Source now trims the non-breaking space characters from the Contact Us form email input field. Previously, the form was submitted without removing the non-breaking space characters from the email input (if given), which caused errors in the log files. The Reply-To field was also missing from the generated contact email message to the store administrator.
  • Magento Open Source now displays related products, up-sell products, and cross-sell products according to their positions in the Admin.
  • .action-close buttons now work as expected when Multiselect is used in a modal. Previously, the action-close button did not work because it inherited the CSS of the .action-close button of the modal. GitHub-27240
  • The Offers rich snippet is now present on the main price field in Product view. Previously, this snippet was missing from this field in related products block in Product view, which resulted in Google search results displaying incorrect prices. GitHub-34063
  • Problems with modal height on devices running iOS have been resolved. GitHub-34467
  • Actions dropdown menus are now positioned correctly throughout the storefront. GitHub-31379
  • Accessibility errors with navigation on the cart and checkout pages have been resolved. GitHub-34483
  • Screen readers can now read all relevant form elements on product pages.
  • Storefront catalog product widget sort order (Catalog > Category > Products) now matches the order configured in the Admin. GitHub-27126
  • The region selector now works as expected on the Create an Account page. GitHub-30099
  • The Admin customer grid now displays all customer data, including newly added date custom attributes, as expected. Previously, the applicationOpen Source threw an error and did not display the Admin customer grid correctly when the date attribute set was set as a column.
  • Input labels on the Catalog > Product details page have been changed to accurately reflect the purpose of the input. Fields for which user input is not required no longer display labels with an asterisk.
  • The rich text editor toolbar can now be accessed using the Tab key.
  • The accessible name of the control now includes the text of its visible label for the number of items per page dropdown.
  • The table controls on the Catalog > Product details page now have visible labels and an accessible name when the table is collapsed.
  • Buttons throughout the storefront now have unique, descriptive accessible names. Previously, split buttons with a text button and an adjacent down arrow icon button had the same accessible name.
  • Added a Today view option to the Admin Orders and Amounts dashboard charts to provide a summary of sales and orders throughout the day. GitHub-34008
  • The active (click) state of the multi-select Close button now works consistently. GitHub-34338
  • Magento Open Source no longer displays this message after upgrade when Cookie Restriction Mode is disabled: The store will not work correctly in the case when cookies are disabled. GitHub-33811
  • Full-screen product images are now correctly displayed on themes with vertical thumbnail navigation direction on mobile devices. Previously, product images were incorrectly scaled or invisible on themes with vertical thumbnail navigation direction on mobile devices in full-screen mode.
  • Error messages in the product details page no longer disappear quickly when the Synchronize widget products with backend storage configuration setting is enabled.
  • Validation for negative values has been added to the Quantity To Return field on the Create New Return form.
  • Magento Open Source no longer displays duplicate addresses when a shopper clicks Change Address on the Review and Payments page in a deployment in which the Address Search configuration setting is enabled.
  • The Add Products button is now enabled as expected for administrators with restricted permissions while while working in store-view scope on the Admin Category page.
  • View breakpoints are now consistent across Magento Open Source.
  • Magento Open Source now correctly displays custom customer date attributes with custom locales on the Admin customer page.
  • Images added using Page Builder are no longer duplicated on the storefront when displayed with a browser window width of 768px. Previously, with this browser window width, the application Open Source duplicated images on the storefront by displaying both the mobile and desktop version of images.

URL rewrites

  • URL rewrites are no longer re-generated for all store views during the creation of a new store view when executing bin/magento setup:upgrade. GitHub-32954

Web API framework

  • Web API requests for self-authorized customer resources no longer throw authorization errors when persistent shopping cart is enabled.
  • You can now create objects using the child classes of \Magento\Framework\Api\AbstractSimpleObjectBuilder on PHP 7.3. Previously, preg_match threw this warning message when Magento Open Source was hosted on Redhat with PHP 7.3: Warning: preg_match(): Compilation failed: unrecognized character follows....
  • The totals retrieved by the PUT /V1/guest-carts/:cartId/collect-totals request are now updated by the correct shippingMethod. GitHub-18508
  • Adding a new deserializer to the REST API no longer removes other deserializers. Previously, the REST API accepted a new content type, but CORE defined content types for APIs no longer worked and returned a 400 error. GitHub-26433
  • You can now remove an override for a parameter that is defined in a webapi.xmlfile. GitHub-33843
  • Magento Open Source now generates a customertoken by GraphQL or REST API requests as expected after multiple consecutive failed login attempts. Previously, the applicationOpen Source did not check whether the value of lock_expires_at in oauth_token_request_log was greater than the current date and time, and always returned the number of failed attempts, which prevented the customer from ever logging in. GitHub-34067
  • Adding a masked quote ID to QuoteRepository::getList no longer causes an infinite loop. Previously, using the payment processor that relied on the REST API to update orders triggered this behavior. GitHub-33675
  • The /rest/all/V1/categories/<above_created_category_id> PUT call now respects the values specified by available_sort_by. Previously, the Available Product Listing Sort By drop down was selected with all possible options on the Category page, and the Use All checkbox was selected. GitHub-32596
  • The performance of REST API requests to create customer tokens has been improved.
  • Corrected an error that occurred when Add Store Code to Urls is set to Yes and a REST call did not include a store code. Although the payload was valid, the call returned the following error: Fatal error: Allowed memory size of ********** bytes exhausted (tried to allocate **** bytes) in vendor/magento/module-store/Model/StoreRepository.php on line 75.
  • Partial invoices for the same order can now be created simultaneously using the REST API.

Wish list

  • Magento Open Source no longer renders a wish list in the category sidebar when the Show In Sidebar wish list option is disabled. Previously, the applicationOpen Source ignored this option.

WYSIWYG

  • PageBuilder now correctly renders custom widgets with the WYSIWYG editor.

Known Issues

Issue: Merchants may notice package version downgrade notices during upgrade from Adobe Commerce 2.4.4 to Adobe Commerce 2.4.4-p1. These messages can be ignored. The discrepancy in package versions results from anomalies during package generation. No product functionality has been affected. See the Packages downgraded after upgrading from 2.4.4 to 2.4.4-p1 Knowledge Base article for a discussion of affected scenarios and workarounds.

Issue: Shoppers cannot add a product to their cart when no options are selected in Admin Store > Configuration > General > Country Options > Allow Countries. The application Open Source instead displays this following console error: Failed to load resource: the server responded with a status of 400 (Bad Request).

Issue: The description of Dotdigital on Find Partners and Extensions > Magento Marketplace is outdated. Here is an updated description:

Dotdigital is a customer engagement platform that helps digital marketers and developers deliver communications across the customer journey. We harness the power of customer data, powering engagement, conversion, and loyalty for brands as they grow and scale. Customers love our easy-to-use platform that connects first party data across the systems, surfacing powerful insights and automating predictive cross-channel messages.

Dotdigital’s 350+ employees serve mid-market and enterprise companies around the world and across industries. We aspire to inspire responsible marketing and are committed to sustainability, privacy, and security. Dotdigital is proud to be the world’s first carbon-neutral marketing automation platform, certified for ISO 14001, ISO 27701, and ISO 27001.

See Dotdigital — Marketing Automation for purchase and download information.

Community contributions

We are grateful to the wider Magento Open Source community and would like to acknowledge their contributions to this release.

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

Partner contributions

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

Partner
Pull Requests
Related GitHub Issues
Atwix
magento/magento2#33787 magento/magento2#33662 magento/magento2#33661 magento/magento2#33431 magento/magento2#33232 magento/magento2#33218 magento/magento2#33214 magento/magento2#32226 magento/magento2#32139 magento/magento2#32133 magento/magento2#32117 magento/magento2#32112
magento/magento2#33689 magento/magento2#33635 magento/magento2#33556 magento/magento2#33806 magento/magento2#32381 magento/magento2#33786 magento/magento2#33785 magento/magento2#33784 magento/magento2#33775
Atwix
magento/magento2#34839 magento/magento2#34827 magento/magento2#34821 magento/magento2#34820 magento/magento2#34819 magento/magento2#34793 magento/magento2#34788 magento/magento2#34781 magento/magento2#34774 magento/magento2#34769 magento/magento2#34737 magento/magento2#34617 magento/magento2#34522 magento/magento2#34492 magento/magento2#34491 magento/magento2#34470 magento/magento2#34419 magento/magento2#34418 magento/magento2#34410 magento/magento2#34400 magento/magento2#34346 magento/magento2#34302 magento/magento2#34298 magento/magento2#34257 magento/magento2#34256 magento/magento2#34207 magento/magento2#34152 magento/magento2#34149 magento/magento2#34128 magento/magento2#34114 magento/magento2#34113 magento/magento2#34110 magento/magento2#34099 magento/magento2#34076 magento/magento2#34075 magento/magento2#34051 magento/magento2#34022 magento/magento2#33999 magento/magento2#33787 magento/magento2#33727 magento/magento2#33683 magento/magento2#33682 magento/magento2#33662 magento/magento2#33661 magento/magento2#33571 magento/magento2#33549 magento/magento2#33547 magento/magento2#33530 magento/magento2#33454 magento/magento2#33431 magento/magento2#33232 magento/magento2#33218 magento/magento2#33214 magento/magento2#33149 magento/magento2#33124 magento/magento2#33106 magento/magento2#32999 magento/magento2#32997 magento/magento2#32986 magento/magento2#32877 magento/magento2#32792 magento/magento2#32771 magento/magento2#32282 magento/magento2#32226 magento/magento2#32139 magento/magento2#32133 magento/magento2#32117 magento/magento2#32112 magento/magento2#31963 magento/magento2#31894 magento/magento2#31877 magento/magento2#31785 magento/magento2#31774 magento/magento2#31100 magento/magento2#30803 magento/magento2#30562 magento/magento2#30526
magento/magento2#34579 magento/magento2#34490 magento/magento2#34422 magento/magento2#34510 magento/magento2#34414 magento/magento2#34511 magento/magento2#34435 magento/magento2#34512 magento/magento2#34317 magento/magento2#32948 magento/magento2#26254 magento/magento2#34316 magento/magento2#34314 magento/magento2#34313 magento/magento2#34312 magento/magento2#34311 magento/magento2#34315 magento/magento2#33747 magento/magento2#33589 magento/magento2#33689 magento/magento2#33531 magento/magento2#33635 magento/magento2#33556 magento/magento2#33806 magento/magento2#32615 magento/devdocs#9248 magento/magento2#32991 magento/magento2#32821 magento/magento2#33788 magento/magento2#32381 magento/magento2#33786 magento/magento2#33785 magento/magento2#33784 magento/magento2#33775 magento/magento2#33783 magento/magento2#30828 magento/magento2#33774 magento/magento2#33773
Blue Acorn iCi
magento/magento2#34484
Krish TechnoLabs
magento/magento2#34442 magento/magento2#34423 magento/magento2#34171 magento/magento2#34157
Fisheye
magento/magento2#34185 magento/magento2#32720 magento/magento2#25279
magento/magento2#34513 magento/magento2#34356 magento/magento2#29647 magento/magento2#30241
Aligent Consulting
magento/magento2#33844
Fast White Cat
magento/magento2#33658
magento/magento2#33839
TechDivision
magento/magento2#33369
magento/magento2#34451
MediaCT
magento/magento2#33227
magento/magento2#33984
Basecom
magento/magento2#32891
magento/magento2#32885
MRM Commerce
magento/magento2#32637
magento/magento2#32636
Ampersand
magento/magento2#31879
maritos/magento2-performance-fixes#4
Brandung
magento/magento2#31654
magento/magento2#30948
EY
magento/magento2#30995
magento/magento2#31019 magento/magento2#32625 magento/magento2#33696
Monsoon
magento/magento2#30001
magento/magento-semver#50
Netz98
magento/magento2#27212
magento/magento2#29609
Fisheye
magento/magento2#25279
magento/magento2#29647 magento/magento2#30241

Individual contributor contributions

The following table identifies contributions from our community members. This table lists the community member who contributed the pull request, the external pull request number, and the GitHub issue number associated with it (if available).

Contributing community member
Pull Requests
Related GitHub Issues
hostep
magento/magento2#34873
magento/magento-beta#47
hostep
magento/magento2#34555
bitExpert/phpstan-magento#152
kate-kyzyma
magento/magento2#34491
magento/magento2#34579
kate-kyzyma
magento/magento2#34470
magento/magento2#34490
kate-kyzyma
magento/magento2#34419
magento/magento2#34422
kate-kyzyma
magento/magento2#34418
magento/magento2#34510
kate-kyzyma
magento/magento2#34410
magento/magento2#34414
kate-kyzyma
magento/magento2#34400
magento/magento2#34511
hostep
magento/magento2#34361
magento/magento2#32252
kate-kyzyma
magento/magento2#34302
magento/magento2#34435
kate-kyzyma
magento/magento2#34298
magento/magento2#34512
mrtuvn
magento/magento2#34290
magento/magento2#34467
kate-kyzyma
magento/magento2#34256
magento/magento2#34317
vovsky
magento/magento2#34207
magento/magento2#32948 magento/magento2#26254
fredden
magento/magento2#34185
magento/magento2#34513
AZiniukhin
magento/magento2#34148
magento/magento2#34130
kate-kyzyma
magento/magento2#34113
magento/magento2#34316
kate-kyzyma
magento/magento2#34110
magento/magento2#34314
kate-kyzyma
magento/magento2#34099
magento/magento2#34313
kate-kyzyma
magento/magento2#34075
magento/magento2#34312
kate-kyzyma
magento/magento2#34051
magento/magento2#34311
AnnaAPak
magento/magento2#34022
magento/magento2#34315
sagar2009kumar
magento/magento2#34001
magento/magento2#34067
Bashev
magento/magento2#34000
magento/magento2#33996
thlassche
magento/magento2#33998
magento/magento2#34024 magento/magento2#34025
LyraGhost
magento/magento2#33948
magento/magento2#34338
DmitryFurs
magento/magento2#33922
magento/magento2#33924
ihor-sviziev
magento/magento2#33903
magento/magento2#33928 magento/magento2#23324
reense
magento/magento2#33886
magento/magento2#33680 magento/magento2#33755 magento/magento2#33945
NetStorm84
magento/magento2#33874
magento/magento2#34008 magento/merchdocs#1686
vovayatsyuk
magento/magento2#33851
magento/magento2#34483
AnnaAPak
magento/magento2#33727
magento/magento2#33747
marvinhinz
magento/magento2#33726
magento/magento2#33760 magento/magento2#33908
SilinMykola
magento/magento2#33682
magento/magento2#33589
AnnaAPak
magento/magento2#33662
magento/magento2#33689
Bartlomiejsz
magento/magento2#33658
magento/magento2#33839
sergiy-v
magento/magento2#33530
magento/magento2#33531
qsolutions-pl
magento/magento2#33487
magento/magento2#33486
Jitheesh
magento/magento2#33468
fastly/fastly-magento2#466 magento/magento2#28102 magento/magento2#6401
monteshot
magento/magento2#33449
magento/magento2#33334
AnnaAPak
magento/magento2#33431
magento/magento2#33635
ihor-sviziev
magento/magento2#33419
magento/magento2#34166
sippsolutions
magento/magento2#33369
magento/magento2#34451
ihor-sviziev
magento/magento2#33324
klaviyo/magento2-klaviyo#133 magento/magento2#33675 magento/magento2#33676
jasperzeinstra
magento/magento2#33227
magento/magento2#33984
kate-kyzyma
magento/magento2#33218
magento/magento2#33556
kate-kyzyma
magento/magento2#33214
magento/magento2#33806
KeyShang
magento/magento2#33202
magento/magento2#33101
manavluhar
magento/magento2#33172
magento/magento2#33698
manavluhar
magento/magento2#33130
magento/magento2#33143
DrJohnM
magento/magento2#33128
magento/magento2#33144
khrystynastolbova
magento/magento2#33106
magento/magento2#32615 magento/devdocs#9248
LyraGhost
magento/magento2#33098
magento/magento2#34338
engcom-Kilo
magento/magento2#33095
magento/magento2#32930
bradleybrecher
magento/magento2#33067
magento/magento2#33075
engcom-Foxtrot
magento/magento2#33001
magento/magento2#32596
DmitryTsymbal
magento/magento2#32986
magento/magento2#32991
mfickers
magento/magento2#32891
magento/magento2#32885
blmage
magento/magento2#32818
magento/magento2#33434
MJTheOne
magento/magento2#32814
magento/magento2#32819
ihor-sviziev
magento/magento2#32808
magento/magento2#32954
Usik2203
magento/magento2#32792
magento/magento2#32821
fredden
magento/magento2#32720
magento/magento2#34356
bgorski
magento/magento2#32637
magento/magento2#32636
hostep
magento/magento2#32286
magento/magento2#32289 magento/magento2#28326
kate-kyzyma
magento/magento2#32282
magento/magento2#33788
AnnaAPak
magento/magento2#32226
magento/magento2#32381
kate-kyzyma
magento/magento2#32139
magento/magento2#33786
kate-kyzyma
magento/magento2#32112
magento/magento2#33775
kate-kyzyma
magento/magento2#31963
magento/magento2#33783
convenient
magento/magento2#31879
maritos/magento2-performance-fixes#4
nige-one
magento/magento2#31654
magento/magento2#30948
kirmorozov
magento/magento2#31613
magento/magento2#33809
mrtuvn
magento/magento2#31413
magento/magento2#31379
dani97
magento/magento2#30995
magento/magento2#31019 magento/magento2#32625 magento/magento2#33696
AnnaAPak
magento/magento2#30803
magento/magento2#30828
kate-kyzyma
magento/magento2#30562
magento/magento2#33774
Usik2203
magento/magento2#30526
magento/magento2#33773
hws47a
magento/magento2#30001
magento/magento-semver#50
philippsander
magento/magento2#27212
magento/magento2#29609

System requirements

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

Installation and upgrade instructions

You can install Magento Open Source 2.4.4 using Composer.

Migration tool kits

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

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

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