Adobe Commerce 2.4.2 introduces enhancements to performance and security plus significant platform improvements. Security enhancements include expansion of support for the SameSite
attribute for all cookies. B2B improvements focus on support for online payments for purchase orders. Elasticsearch 7.9.x and Redis 6.x are now supported.
This release includes over 280 new fixes to core code and 35 security enhancements. It includes the resolution of almost 290 GitHub issues by our community members. These community contributions range from minor clean-up of core code to significant enhancements in GraphQL.
All known issues identified in 2.4.1 have been fixed in this release.
Adobe Commerce and Magento Open Source releases may 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.
AC-3022.patch
to continue offering DHL as a shipping carrierDHL 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.
Merchants can now install time-sensitive security fixes without applying the hundreds of functional fixes and enhancements that a full quarterly release provides (for example, 2.4.1-p1). Patch 2.4.0.12 (Composer package 2.4.1-p1) is a security patch that provides fixes for vulnerabilities that have been identified in our previous quarterly release, 2.4.1. All hot fixes that were applied to the 2.4.1 release are included in this security patch. (A hot fix provides a fix to a released version that addresses a specific problem or bug.)
For general information about security patches, see Introducing the New Security Patch Release. For instructions on downloading and applying security patches (including patch 2.4.1-p1), see Quick start on-premises installation. Security patches include security bug fixes only, not the additional security enhancements that are included in the full patch.
Although code for these features is bundled with quarterly releases , several of these projects (for example, B2B, Page Builder, and Progressive Web Applications (PWA) Studio) are also released independently. Bug fixes for these projects are documented in the separate, project-specific release information that is available in the documentation for each project.
Look for the following highlights in this release.
This release includes over 35 security fixes and platform security improvements. All security fixes have been backported to 2.4.1-p1 and 2.3.6-p1.
No confirmed attacks related to these issues have occurred to date. However, certain vulnerabilities can potentially be exploited to access customer information or take over administrator sessions. Most of these issues require that an attacker first obtains access to the Admin. As a result, we remind you to take all necessary steps to protect your Admin, including but not limited to these efforts: IP allowlisting, two-factor authentication, use of a VPN, the use of a unique location rather than /admin
, and good password hygiene. See Adobe Security Bulletin for a discussion of these fixed issues.
Security improvements for this release include:
All core cookies now support the SameSite
attribute.
The application now displays messages that identify potentially malicious content in product and category description fields when the user tries to save values in these fields.
File system operations across Components have been standardized and hardened to prevent malicious uploads.
Core Content Security Policy (CSP) violations have been fixed.
Starting with the 2.3.2 release, we will assign and publish indexed Common Vulnerabilities and Exposures (CVE) numbers with each security bug reported to us by external parties. This allows users to more easily identify unaddressed vulnerabilities in their deployment. You can learn more about CVE identifiers at CVE.
This release contains enhancements to core quality, which improve the quality of the Framework and these functional areas: Customer Account, Catalog, CMS, OMS, Import/Export, Promotions and Targeting, Cart and Checkout, B2B, and Staging and Preview.
Elasticsearch 7.9.x is now supported. Although we recommend running Elasticsearch 7.9.x, version 2.4.x remains compatible with Elasticsearch 7.4.x.
2.4.2 has been tested with Varnish 6.4. Version 2.4.x remains compatible with Varnish 6.x.
Redis 6.x is now supported. Version 2.4.x remains compatible with Redis 5.x.
2.4.2 is now compatible with Composer 2.x. We recommend that merchants migrate to Composer 2.x. Although you can install this release using Composer 1.x, Composer 1.x will soon reach end-of-life. For an overview of Composer 2.x features, see Composer 2.0 is now available!
The ability to configure an installation to use a split database has been deprecated in this release. Merchants who currently use split database should start planning to revert to or migrate to a single database or use an alternative approach. See the Deprecation of split database functionality in Adobe Commerce DevBlog post for an overview of this issue. See Revert from a split database to a single database for migration instructions.
This release includes code enhancements that boost API performance and Admin response time for deployments with large catalogs. Multiple scalability enhancements enable 2.4.2 to natively support complex catalogs up to 20x larger than in previous releases.
This release adds GraphQL coverage for the following features:
Added support for multiple wishlists. You can use GraphQL to create, delete, and rename wishlists as well as move or copy items between them.
Added support for returned merchandise authorizations (RMA). Shoppers can request a return. If the merchant accepts the request, the shopper can perform tasks such as adding a comment and add tracking information.
Added support for the following B2B features:
Added support for unions in GraphQL. GitHub-29425
Added support for comparison lists. Shoppers can create and delete comparison lists, and add and remove items to the comparison lists. In addition, shoppers that create a compare list as a guest can log in as a customer and retain their comparison lists.
Added the generateCustomerTokenAsAdmin
mutation and updated the Customer
object to support remote purchasing assistance.
Added localization support across stores to support tasks such as changing languages, carts, and currencies.
The GraphQL schema has been enhanced to optimize product data retrieval for configurable products with many variants.
Integer type object IDs have been deprecated in favor of uid
attributes of type ID.
Added the staging
attribute to the ProductInterface
and CategoryInterface
to determine if a product is staged and to view its associated campaign information.
See the GraphQL Developer Guide for details on these enhancements.
2.4.2 introduces B2B v1.3.1. This release includes support for online payments for purchase orders as well as multiple bug fixes.
Purchase orders can now be completed using online payment methods. B2B buyers are prompted to select their preferred payment method for each purchase order during the initial checkout. After the purchase order has been approved, buyers are prompted to enter payment details to convert the purchase order to a final order.
To support a complete workflow for accepting online payments, this feature also:
Overrides existing payment method templates during initial checkout to maintain PCI compliance.
Maintains compatibility with third-party, custom, and community-developed payment methods.
Notifies buyers by email when they need to add payment details to an approved purchase order.
Enables customization of emails from the Admin, which allows merchants to use templates that are consistent with their branding.
Introduces an Approved – Pending Payment
state for purchase orders to clearly show when action is required.
Prevents discount codes from being added or removed at the final payment step, which ensures that the order total amount remains unchanged for approved purchase orders.
Allows buyers to change the payment method during the final payment step to maintain flexibility and increase conversion.
This release also includes multiple bug fixes. See B2B Release Notes.
This release of PWA Studio includes:
Internationalization and localization. Venia now provides support for multiple languages and currencies.
Improved extensibility framework to support code changes through extensions.
Initial components for My Account related features such as Wishlist, Saved Payments, Address Book, and Order History.
Various performance optimizations and bug fixes.
For information about enhancements and bug fixes, see PWA Studio releases. See compatibility for a list of PWA Studio versions and their compatible versions.
This release includes enhancements to Page Builder content migration and Page Builder CSS customization:
Developers can now style content type output differently per viewport without using the !important
directive.
Content migrated to Page Builder is no longer padded with default inline styling.
Page Builder no longer requires all content types to be placed within a row. The Page Builder stage is now initially blank and supports adding the following content types directly to the stage: Rows, Columns, Tabs, HTML Code, Blocks, Dynamic Blocks.
Predefined margins and paddings are no longer required for content types.
The new mobile viewport switcher and viewport scope for form field values lets users and developers perform these actions:
View content on different view ports when authoring.
Optimize minimum height field parameter on different content types for each viewport. (Only one parameter (min height) is supported out of the box. Custom development required to enable mobile optimization for other content parameters.)
Add field scope to custom fields and field sets (developers).
Interactive In-Product Guidance provides merchants with usage tips and information from within the Admin on new feature announcements, walk-through guides, on-boarding information, and tool tips. Administrators must opt-in from the Admin to receive in-product guidance if this feature is not enabled. See Usage Data Collection and Admin Usage.
This release includes Adobe Stock Integration v2.1.1.
New Role Resources for Media Gallery. This release provides merchants the ability to limit administrator access to only the Media gallery and to control who can perform these actions:
Insert media assets into content
Upload assets
Edit assets details
Delete assets from the Media Gallery
Manage folder structure.
Web-optimized images in content. Merchants can now use web-optimized image rendition in content instead of high resolution images. The original image remains unmodified in the Media Gallery, and the image rendition is dynamically generated when the image is inserted in the content.
Amazon Simple Storage Service (AWS S3) support has been enhanced to include support for:
Object storage and future extensibility
Storing media files on AWS S3
Support for AWS S3 has been added to all modules including B2B, PageBuilder, and Adobe Stock Integration.
MFTF 3.2.1 is now available. This release introduces error tolerance in both tests and test suite generation. Additional enhancements and bug fixes are described in the Functional Testing Framework Changelog.
The MCOM Connector is fully compatible with 2.4.2. Bug fixes and enhancements to the connector are described in Release notes for Connector. This release includes improvements to the OMS command-line interface, which now provides verbose information that partners and support teams can use to troubleshoot retry
, queue_prune
, order_sync
, message process
, and catalog export
processes.
See the following articles for updates on features and changes for this release:
Amazon Pay. Amazon Pay has been deprecated in this release and will be removed in Magento 2.5.0. Version 2.4.3 and higher will contain only updates for compatibility and fixes for major bugs.
We have fixed hundreds of issues in the 2.4.2 core code.
AUTO_INCREMENT
values reverted to initial values for all tables where row_id
was added during upgrade.bin/magento/setup:db:generate-patch
. GitHub-27523block_html
, full_page
, and layout
caches are now disabled as expected after bin/magento/setup:upgrade
execution. GitHub-28186bootstrap.php
has been updated. GitHub-30004bin/magento/setup:upgrade
after installing sample data. Previously, when you tried to execute bin/magento/setup:upgrade
, the application displayed this error: unable to apply data patch magento\catalogrulesampledata\setup\patch\data\installcatalogrulesampledata for module magento_catalogrulesampledata
. The application also displayed this error in the system log: main.ERROR: Sample Data error: Unable to unserialize value. Error: Syntax error
. GitHub-30685bin/magento config:sensitive:set catalog/product_video/youtube_api_key
: There are no sensitive configurations to fill
.maxMessages
values that are defined in queue_consumer.xml
. Previously, the applicationused only the deployment configuration values. GitHub-29522bin/magento setup:config:import
. Previously, URL rewrites were not generated in production environments. GitHub-30025bin/magento setup:install
to connect to existing database: Overwrite the existing configuration for db-ssl-verify?[Y/n]
. GitHub-29612gws_websites
regardless of the size of the website ID. Previously, website IDs were truncated, and the list of selected websites was not stored in the database. User roles were not correctly saved, and the application displayed this error when a merchant tried to change and save a role: The "X" store ID is incorrect. Verify the store ID and try again
.Magento_Catalog::edit_product_design
(Edit Product Design) can now create a new product by saving an existing product with a new name in the selected store view. Previously, the application displayed this error: Not allowed to edit the product's design attributes
. GitHub-28106 backend-frontname
using the ssh
container after installing Adobe Commerce. GitHub-26762exif_image.png
or exif-image.jpeg
metadata. GitHub-1449url-filter
applier. GitHub-1813, GitHub-1789, GitHub-1780Magento\Cms\Controller\Adminhtml\Wysiwyg\Images\OnInsert::execute()
) and added to the Model\Wysiwyg\Images\PrepareImage::execute()
model. GitHub-1504media-content:sync
command (\Magento\MediaContentSynchronization\Console\Command\Synchronize::execute
). GitHub-1784analytics_collect_data
job now runs successfully when using either the default or non-default port to connect to MySQL in env.php
. Previously, analytics_collect_data
threw an error when you used the non-default port.analytics_collect_data
are now properly escaped. Previously, these files were not generated with the correct escaping, which prevented the generation of Inventory reports.Shoppers can now use Apple Pay to successfully place an order for virtual products. Previously, the application threw this error: There are no shipping methods available for you right now. Please try again or use an alternative payment method
.
The default PayPal Express Checkout payment method now works as expected with the Braintree Credit Card payment method. Previously, the application did not display the PayPal button when the Braintree Credit Card payment method was enabled.
/V1/order/{orderId}/ship
to ship an order that contains a bundle product now marks the order as complete as expected. Previously, the application displayed this error message: You can't create a shipment without products
. GitHub-9762{"message":"Error occurred during \"custom_attributes\" processing. A custom attribute is specified with a missing attribute code. Verify the code and try again."}
GitHub-27505You have no items in your shopping cart
message in the mini cart as expected when a shopper removes the only item in their cart. Previously, cart data was not updated for checkout/cart/removeFailed
when a shopper removed the single item, and the application displayed this message: 1 product requires your attention
.There has been an error processing your request
. GitHub-30197addToCart
configuration settings for the current customer group. As a result, when an administrator tried to add a product to the cart, the application threw an error./rest/V1/guest-carts/cart_id/totals-information
endpoint on the cart have been removed, which has improved cart performance. Previously, when a shopper added a product to the cart and then subsequently viewed the cart, the application called the collectAddressTotals
method multiple times.AdminMediaGalleryInsertLargeImageFileSizeTest
.quote
table for guests are now assigned a value of 1 in the customer_is_guest field
. Previously, for each new guest who added a product into cart, the record was assigned a 0 in thequote.customer_is_guest
field.<form id="purchaseorder-form"...></form>
, which makes implicit form submission possible without altering any JavaScript. GitHub-27925config.xml
nodes exist for payment methods that are not currently installed. Previously, the application threw an exception during checkout. GitHub-29555Subtotal (Incl. Tax)
option has been added as a cart price rule condition.catalogsearch_fulltext
partial indexer.{"0":"The product's required option(s) weren't entered. Make sure the options are entered and try again
.min_price
and max_price
to 0 in the catalog_product_index_price
table, which affected price sort order on the storefront.Product Type
. Previously, because the product_type
attribute was reserved in the code, the application displayed this message when you tried to update a Product Type
attribute: An attribute with the same code (product_type) already exists.
Invalid Form Key. Please refresh the page
.Enabled
or Disabled
were displayed in the grid while filtering only enabled or disabled products.Please specify date required option(s)
.data-src
attribute has the same value as src
attribute, as expected. Previously, URL special symbols were escaped.rest/all/V1/products
. Previously, the applicationrecreated the images but deleted them when a merchant sent media gallery data via POST rest/all/V1/products
if the images were deleted in pub/media
but there were still records in media still contained records for these images. As a result, the merchant saw only placeholders in the Admin because the images were created and deleted during the update process.rest/all/V1/products
was executed./V1/categories/{categoryId}/products
call now returns a list of all products that belong to the parent category as expected. Previously, if a product belonged to more than one subcategory of the parent category, the application threw this type of error: Internal Error. Details are available in the application log file. Report ID: webapi-5f8579e37db54
. GitHub-30461/V1/products/attributes/:attributeCode/options
REST endpoint now supports updating an existing attribute option.store_id
when available to save attribute values for an existing product. Previously, the product repository class overrode the product store ID and always assigned the default store ID. GitHub-29933сron
ran the catalogrule_apply_all
task once daily, which re-indexed all catalog rules and dependent indexers, and cleared the cache for all products and categories.app/code/Magento/Contact/view/frontend/templates/form.phtml
. GitHub-29779bin/magento/setup:config:set
subcommand. GitHub-28802framework/Registry.php
file. GitHub-29661app/code/Magento/Catalog/Helper/Product/View.php
. GitHub-30601app/code/Magento/Ui/view/base/web/js/form/element/ui-select.js
. GitHub-29987rl
has been corrected to url
in \Magento\Framework\Filter\Template\Tokenizer\Parameter
. GitHub-29185 <br>
tag has been removed from the Check Data message area of the System > Import page.ChangeQuoteControl
has been refactored. GitHub-29673AccessChangeQuoteControl
and its unit tests have been refactored. GitHub-29672app/code/Magento/Captcha/CustomerData/Captcha.php
. GitHub-29712viewModel
reference example for the \Magento\Framework\View\Element\Template
class. GitHub-30450hierarchy/edit.phtml
template.app/code/Magento/CatalogImportExport/Model/Export/Product.php
. GitHub-30833PublisherInterface
message has been corrected. GitHub-30190getStatusByState
method. GitHub-30173app/code/Magento/Quote/Model/Cart/Totals/ItemConverter.php
. GitHub-30125@param string $attribute
to @param AbstractAttribute|string[]|string $attribute
in EntityAbstract.php
. GitHub-30191@package
and @subpackage
) have been removed from docblocks throughout the code base. GitHub-30061AdvancedPricing
class have been removed. GitHub-29531getValue()
method no longer triggers a fatal error when updating carts.Call to a member function setAppliedTaxes() on null
. GitHub-26526, GitHub-29603AdvancedPricing
class have been removed. GitHub-29531cron
has run and the application has updated products as scheduled.schedule_id
and status
has been added to the cron_schedule
table. GitHub-29601file
on the Account Information page after creation. Previously, when you tried to save a new attribute of this type, the application displayed these errors: The "newAttribute" attribute value is empty. Set the attribute and try again
and Validation is failed
.Input Type
is set to Text
and Input Validation
is set to Numeric Only
.Magento\Customer\Controller\Account\CreatePost
has been overridden. Previously, the application did not permit this type of customization of the user registration process, and under these conditions, a user’s email confirmation status was considered complete, the new user was automatically logged in, and no error message was shown.[2020-12-09 11:31:54] report.CRITICAL: The website with id 2 that was requested wasn't found. Verify the website and try again. \{"exception":"[object] (Magento\\Framework\\Exception\\NoSuchEntityException(code: 0): The website with id 2 that was requested wasn't found. Verify the website and try again. at /var/www/html/magento24ee/vendor/magento/module-store/Model/WebsiteRepository.php:110)"}
Error handling has been improved when retrieving lists of programs from dotdigital Engagement Cloud.
The value that is synced in the store name column during guest sync is now the store view name as expected. Previously, the website name was included in this column.
Added an array check before looping over order status automations after an order is saved.
Resolved issues with Composer upgrades that were the result of the dotdigital module’s dependency on magento/module-authorization
.
\Magento\Eav\Model\Entity\Attribute\Backend\ArrayBackend
now use default values if no value is provided in the payload when a product is created by API call.\Magento\Config\Model\Config\Source\Email\Template::toOptionArray
no longer throws an error when setPath()
is not called before toOptionArray()
. GitHub-29315main.ERROR: Cron Job sales_send_order_invoice_emails has an error: Call to a member function getData() on null. Statistics: {"sum":0,"count":1,"realmem":0,"emalloc":0,"realmem_start":73400320,"emalloc_start":37177640} [] []main.CRITICAL: Error when running a cron job {"exception":"[object] (RuntimeException(code: 0): Error when running a cron job at /var/www/html/vendor/magento/module-cron/Observer/ProcessCronQueueObserver.php:327, Error(code: 0): Call to a member function getData() on null at /var/www/html/vendor/magento/module-catalog/Helper/Image.php:502)"} []
. GitHub-26878sales_email/order_comment/enabled
is disabled and sales_email/order_comment/copy_method
is set to bcc
. GitHub-29915afterSearch
function did not OR filters as expected. GitHub-24576ar_SA - Saudi Arabia
).session
table as expected.php.ini
. Previously, SessionManager
did not set the memcache as save_handler
, but instead used the file’s session_handler
. the application threw this error: main.CRITICAL: Warning: SessionHandler::read(): open(127.0.0.1:11211/sess_0imeeaqmnvemdg4e3h57tat0ik, O_RDWR) failed: No such file or directory (2) in../vendor/magento/framework/Session/SaveHandler/Native.php on line 22 {"exception":"[object] (Exception(code: 0): Warning: SessionHandler::read(): open(127.0.0.1:11211/sess_0imeeaqmnvemdg4e3h57tat0ik, O_RDWR) failed: No such file or directory (2) in ../vendor/magento/framework/Session/SaveHandler/Native.php on line 22 at ../vendor/magento/framework/App/ErrorHandler.php:61)"}
. GitHub-24717The following improvements have been made to the LoginAsCustomer
modules:
Replaced the around
plug-in with after
Removed redundant code
Replaced (bool)->getValue()
with isSetFlag
. GitHub-29689
customer/section/load
to throw a 400 error. GitHub-28154var/report
. GitHub-29606\Magento\VersionsCmsUrlRewrite\Model\StoreSwitcher::switch()
method now redirects shoppers to the home page only when $urlPath
is not found for the second store view.static::
has been replaced with self::
throughout the codebase for accessing private constants. GitHub-30781The coupon code has been accepted
message after a coupon has been removed. GitHub-30255input[type=datetime]
has been replaced with a less specific input type selector. GitHub-30064\Magento\Catalog\Model\ImageUploader
class has been refactored to use the new moveFileFromTmp
method. GitHub-29598product_type
and type_id
codes to be more descriptive. GitHub-28479}}
in the widget content field. GitHub-12087Something went wrong
. GitHub-8538Magento\Framework\MessageQueue\ConfigInterface
can now be instantiated when optional module Magento_MessageQueue
is disabled. Previously, the application threw this error: PHP Fatal error: Uncaught Error: Cannot instantiate interface Magento\Framework\MessageQueue\ConfigInterface in /var/www/magento2/magento2/lib/internal/Magento/Framework/ObjectManager/Factory/AbstractFactory.php:121
. GitHub-26080aclResource
attribute has been added to the Admin header AdminNotification
toolbar block. Previously, the Admin notification toolbar entry was visible even when the Admin user does not have role resource permissions to see it. GitHub-29067framework/database/select
where
functions now handle type
correctly. GitHub-29590array_merge
in loops has been improved throughout the codebase, which has improved performance in several places, including in the static content deployment process. GitHub-30183static::
calls to them. Previously, the application threw this error: Undefined class constant
.editorconfig
to support indenting JSON and YAML files two spaces. GitHub-30066, GitHub-30063FlushCacheByTags
class has been updated to use after-plug-ins instead of around-plug-ins. GitHub-29558MessageValidator
no longer fails on hash arrays that do not include a 0
element. GitHub-30563checkout_index_index.xml
file has been enhanced by the removal of sortOrder
from messages
, authentication
, progressBar
, estimation
, and sidebar checkout
components. GitHub-30550calc
is now escaped, which results in correct calc
values in the CSS output file. Previously, the application returned an incorrect calc
value. GitHub-30542url_key
, url_path
, and store_id
to default store values when saving category URL rewrites for the global scope. Previously, it saved url_key
, url_path
, and store_id
with the values of the last processed store ID. GitHub-29585\Magento\Widget\Controller\Adminhtml\Widget\Instance\Validate
now recognizes a phrase result value as an error message and outputs it to the user during widget validation. GitHub-27397Magento\Catalog\Model\Category\DataProvider::getFieldsMap()
has been replaced with a list of attributes that are generated from cache. GitHub-13440req.http.host/client.ip
has been removed and hashing is handled by the Varnish built-in VCL. GitHub-29988Magento_Ui
file uploader. GitHub-29557acl.xml
inconsistency that occurred when Magento_LoginAsCustomerAssistance
was enabled but Magento_LoginAsCustomerAdminUi
or Magento_LoginAsCustomerLog
were disabled has been corrected. Previously, when administrator with these credentials tried to log in to the Admin, the application displayed a blank page and threw this error when : Exception #0 (LogicException): Could not create an acl object: Invalid Document Element 'resource': The attribute 'title' is required but missing. Line: 13
. GitHub-30680Undefined class constant
error when an Interceptor
is generated during plug-in creation. GitHub-28981, GitHub-29879magento_operation
and queue_message_status
tables were not updated correctly, and system messages were incorrect. GitHub-29718AppState->emulateAreaCode()
. GitHub-39656BlockByIdentifier
class supports retrieving a layout block based on CMS block identifier. As a result, when a CMS block is removed from cache, the application also clears the layout block cache. GitHub-28309type
arguments in the queue_topology.xml
, the argument value was cast to string. GitHub-29615cron
jobs called \Magento\GiftCard\Observer\GenerateGiftCardAccountsInvoice::execute()
, and this method did not check whether gift card codes had already been generated during invoice creation.Could not save product "4" with position 0 to category 3
.root
in errors pages and maintenance mode. Previously, if the root
or magento/pub
were symlinked into a different directory, the error processor (Magento\Framework\Error\Processor
) did not generate a correct view file URL. GitHub-30296order_data
array to EmailSender
classes. This brings these classes into alignment with Magento’s recommendation to use scalar variables instead of objects within the email templates. GitHub-29604productClick
function now works as expected. Previously, productClick
was not triggered on products on listing pages, and Google Tag Manager could not capture that event.removeFromCart
event was incorrectly rewritten when the product option was changed, and the quantity remained the same.urlResolver
query now handles query parameters correctly.urlResolver
query no longer returns NULL when a custom CMS node and page are specified as input. GitHub-30474category
query no longer returns child categories of a parent category that has been disabled. GitHub-30468category
query now returns the correct path of a category image when URL rewrites are disabled.resetPassword
mutation now returns a more informative message when an error occurs. GitHub-30179products
query are invalidated as expected when product positions change. GitHub-30467products
query now returns the expected results when the category_id
filter is specified with the in
keyword. GitHub-30349categories
and categoryList
queries now consider category availability based on category permissions configuration and parent category ID. GitHub-29880, GitHub-30624updateProductsInWishList
mutation now properly validates wishlist items. GitHub-30467Deprecated several attributes in the ProductInterface
and CategoryInterface
to prevent their use on the storefront. GitHub-30625
Prices are now hidden from products query results when the category permissions are set to hide them. GitHub-29926
addProductsToWishList
mutation to add a bundle product with a user-defined quantity to a wishlist.products
query now returns tier price values as expected. GitHub-29168getMappedNums
from a loop in lib/internal/Magento/Framework/GraphQl/Query/EnumLookup.php
. GitHub-30031products
query no longer returns an error when the queried product has a disabled related product. GitHub-28892cart
query now returns prices that have been converted into the correct currency (the default display currency). Previously, the query returned the item price value in base currency, and the currency code was returned as default display currency.products
query based on the shopper’s customer group.customizable_option
attribute to multiple data types that implement the CartItemInterface
.storeConfig
query to return store, store group, and website information.SelectedCustomizableOption.type
attribute. In addition, the customizable_options
attribute within various implementations of the CartItemInterface
are now non-null.products
query no longer returns items in which category permissions have been enabled.products
query returns the correct currency for store views that have multiple currencies.products
query filters now return translated values, when applicable for non default store views.ConfigurableProductOptionsSelection
data type, which contains metadata corresponding to the selectable configurable options for a product. Use this object in a products
query to minimize the number of media gallery items that are displayed as the shopper selects configurable product options.product_links
was an empty array.fileinfo
extension has been removed from the CMS module. Previously, the application threw an error when you tried to upload an image using the image uploader, which is launched when you click the Insert Image button when adding content. GitHub-24332, GitHub-16531, GitHub-29852exif_image.png
or exif-image.jpeg
metadata. GitHub-1449catalog_event_status_checker
cron job deleted uploaded images.image_with_border.phtml
. Redundant max-width
and height
settings have been removed from .product-image-photo
. (These values are already set globally on the image through the reset styles.) GitHub-30186region_id
is no longer assigned a NULL
value when you import customer addresses using a CSV file (entity type = "customer address"
and import behavior = "add/update"
) from which certain field values have been deleted.qty
set to 0 but is_in_stock set
to 1 in the CSV file, the product is not listed on the category page, and the product details page identifies it as out-of-stock. Previously, products with these values were visible on the storefront after import.dropdown
and textarea
values for additional attributes. Previously, these attribute values were not updated during import.bin/magento queue:consumers:start exportProcessor --single-thread --max-messages=10000
.vendor/magento/framework/File/Uploader.php
has been removed. Previously, directory and file name length could not exceed 255 characters. The application imported products with images whose file name exceeded this limit, but did not import the image file. GitHub-29377We have resolved issues with the manual indexer that had resulted in either empty category pages or reduced product count on category pages. Issues with incomplete category pages or product count occurred when:
the catalogsearch_fulltext
and catalog_product_price
partial indexers were executed on a large catalog until these indexers completed execution.
the partial indexer was executed on either catalog_category_product
or catalog_product_category
indices, and at the same time a full re-index was executed on one of those indices. These two indexing processes could conflict, which resulted in products missing from category pages.
bin/magento indexer:reindex inventory
was executed on a large catalog. Products were missing from category pages until the catalogsearch_fulltext
partial indexer completed execution.
Magento_Bulk
MySQL table, which has improved the performance of bulk operations.bin/magento indexer:reindex
). Previously, table comments after re-indexing contained the same values that comments contained after a fresh installation.SELECT entity_id IN
statement has been improved in deployments implementing MariaDB v.10.3.18, which has improved the performance of catalog category indexing. GitHub-25199app/etc/env.php
to change the message broker from MYSQL to AMQP.\Magento\Authorization\Model\Rules::update
method has been deprecated. GitHub-29128convertConfigTimeToUtc
method threw an exception. GitHub-29525DataObject
has been replaced with the product model in \Magento\MediaGalleryCatalogUi\Ui\Component\Listing\Columns\Thumbnail::prepareDataSource
.GitHub-1711RequireJS
resolver no longer fails to detect blocked resources. Previously, the resolver did not correctly detect whether all resources on a page were loaded or handled appropriately, and the page kept loading. GitHub-28116Magento\Eav\Model\Entity\Attribute::ATTRIBUTE_CODE_MAX_LENGTH
rather than a hard-coded value. GitHub-29017\Magento\Framework\Mview\View\Subscription
to allow columns to be ignored for a specific view or table combination. GitHub-30243form_key
values. Previously, a product could be added to the cart with a cached form_key
value that triggered an exception. When Add to Cart was clicked before the JavaScript had fully initialized, then the form_key
value that was sent in the form data did not match the users session, and the product was not added to the cart. GitHub-13746Set-Cookie
comparison was case-sensitive, which could cause problems with some HTTP servers. GitHub-29524api-functional
and test case XML files. GitHub-30552\Magento\Catalog\Model\ResourceModel\Product\Option\Value\Collection
. GitHub-29621array_merge
have been refactored to use the format recommended in the coding standard. GitHub-30005head.additional
block of type \Magento\Framework\View\Element\Text\ListText
has been added to the adminhtml
default
layout (by magento2/module-base
). GitHub-29165\Magento\Framework\Filesystem\Io\File::read()
method is now compatible with \Magento\Framework\Filesystem\Io\IoInterface::read()
. GitHub-27866Magento_Logging
module now correctly registered new values as well as the values that preceded them. Previously, the values in the column Value Before Change displayed values of N/A regardless of whether this was the first change or the next, or when the default value was returned. GitHub-26943MediaGalleryMetadata
now skips the segment reader if an exception occurs and instead parses and displays image metadata as expected. Previously, the image metadata was empty due to an exception from the exif_read_data
segment reader. GitHub-1782text
. GitHub-1778Mediagallery
uploader plug-in. Previously, validation failed, and the application did not import products when Enable Old Media Gallery was disabled. GitHub-30649Magento_Cms::media_gallery
ACL subresources have been added and enforced for the new Media Gallery to support configured permissions for the following discrete operations:
We couldn't find any records
. GitHub-1763 , GitHub-1758 mediaCheck
triggered the exit media query function on page load. GitHub-29933CheckStaticBlocksTest
. GitHub-30561AdminUpdateCategoryAndMakeInactiveTest
and VerifyChildCategoriesShouldNotIncludeInMenuTest
have been refactored to comply with MFTF best practices. GitHub-30058AdminOpenCMSBlocksGridActionGroup
. GitHub-30896AdminOpentCmsBlockActionGroup
with AdminOpenCmsBlockActionGroup. GitHub-29839GoToAttributeGridPageActionGroup
. GitHub-30103Analytics
module. GitHub-29500CheckCheckoutSuccessPageAsRegisterCustomerTest
and CheckCheckoutSuccessPageAsGuestTest
to cancel created orders after tests run. GitHub-28324AdminNavigateToPageGridActionGroup
due to redundancy. GitHub-29838StorefrontProductListWidgetWithSharedCatalogTest
that caused the test to be skipped has been resolved. GitHub-322ActionGroup
to navigate to the checkout page. GitHub-29843AdminOpenCreateNewCMSPageActionGroup
to navigate to create new CMS page. GitHub-29824Company
, CompanyCredit
, CompanyPayment
, CompanyShipping
, and ConfigurableSharedCatalog
modules. GitHub-30164AssertStorefrontCustomerLogoutSuccessPageActionGroup
. GitHub-29841
AdminOpenConfigurationStoresPageActionGroup
. GitHub-29848
ReloadPageActionGroup
. GitHub-30683
StorefrontClickRefundTabCustomerOrderViewActionGroup
. GitHub-30032
AdminOpenAdminThreeDSecurePageActionGroup
. GitHub-29845
AdminCustomerClickFirstRowEditLinkActionGroup
. GitHub-29501
StorefrontClickAddToCartButtonActionGroup
. GitHub-29823
AdminDeleteTaxRateActionGroup
. GitHub-29940
AdminOpenWebConfigurationPageActionGroup
. GitHub-29846
AdminOpenGeneralConfigurationPageActionGroup
. GitHub-29847
AdminOrderClickSubmitOrderActionGroup
. GitHub-29649
AdminOpenCatalogProductPageActionGroup
. GitHub-29941
AdminClickInvoiceButtonIntoOrderActionGroup
. GitHub-25399
AdminGridBulkActionGroup
. GitHub-28324
AdminGridColumnShowActionGroup
. GitHub-28324
AdminOpenIndexManagementPageActionGroup
. GitHub-29825
AdminOpenCatalogSearchTermIndexPageActionGroup
. GitHub-29844
AdminClickAddProductToggleAndSelectProductTypeActionGroup
. GitHub-30917
StorefrontCheckoutClickSaveAddressButtonActionGroup
. GitHub-30916
AdminOpenCurrencyRatesPageActionGroup
. GitHub-30783
AdminClickGetShippingMethodsAndRatesActionGroup
. GitHub-30782
AdminSelectFixedShippingMethodActionGroup
. GitHub-30782
StorefrontClickProceedToCheckoutActionGroup
. GitHub-30926
StorefrontOpenMyAccountPageActionGroup
. GitHub-29842
Purchase Order number is a required field
message above the coupon code field before the shopper enters any information in deployments where Purchase Order has been configured as the only available payment option.report.CRITICAL: String to be escaped was not valid UTF-8 or could not be converted
.Failed address validation: %1" error
. GitHub-25399We couldn't find any records
.web-api
call. Previously, two requests were triggered, which doubled the charge for the product.module-catalog-import-export/Model/Import/Product/Option.php
have been addressed. The time required to export or import more than 100,000 records has been reduced. See the Import/Export takes longer than expected with large numbers of product options Knowledge Base article.Magento_Csp/Model/BlockCache
has been refactored to reduce both memory consumption and the generation of needlessly large cached strings. Previously, pages that included dynamically whitelisted scripts and styles often experienced from performance issues. GitHub-29964Magento_Bulk
MySQL table, which has improved the performance of bulk operations.app/code/Magento/Catalog/Model/CategoryLink.php
. GitHub-29453Magento\Framework\DB\Adapter\Pdo\Mysql->isTableExists
has been refactored to improve performance. Redundant calls to SHOW TABLE STATUS
to check for the existence of a table have been reduced. GitHub-29662getPageLayoutsConfig
is now saved in cache, which has improved config builder performance. GitHub-29546PHPSESSID
had expired, and customerSession
was re-created from the persistent information.No such entity with cartid = 0
.Uncaught TypeError: Event.observe is not a function
. GitHub-30388You removed the reward points from this order
.order_created_at
column of the sales_shipment_grid
is now updated as expected after each update.Could not add the product with SKU "simp1" to the shopping cart: Please specify date required option(s).
total_qty
now matches the value of total_qty_ordered
in sales invoices.group_id
. By default, it used the default group_id
.Suspected Fraud
status to Processing
after a merchant creates a partial shipment using the REST API.Limit of total fields [xxx] in index [m24dev_product_1_v10] has been exceeded
.search_query
table instead of Elasticsearch for autocomplete search suggestions. GitHub-25534price_*
was changed from float
to double
in the Elasticsearch index to improve precision and correct a floating-point error.string
value is used to filter products by attribute with an integer
or decimal
backend type. Previously, the application displayed this error in exception.log
: number format exception
.Elasticsearch no longer throws an exception when a search term contains a /
. GitHub-25886, GitHub-25110
Search is now disabled as expected for a selected customer group from the products query when the Disallow Catalog Search By configuration setting in the general Category Permissions is enabled. GitHub-29927
Sorry, no quotes are available for this order at this time
. GitHub-29902/rest/V1/shipment
endpoint now update orders properly. Previously, the application created a shipment, but shipment status remained in the processing state.Delivered On
only when a package has been delivered. GitHub-30032/V1/guest-carts/:cartId/totals-information
. GitHub-25147cron
now include correct image URLs. Previously, the generated cached image path was incorrect in multi-store deployments./rest/V1/products/special-price-information
special price endpoint now saves the price and returns the schedule as expected.cron
run.Something went wrong while saving the Magento\Catalog\Api\Data\CategoryInterface
.rest/V1/products/special-price
API can now be used to schedule product special prices for multiple stores. Previously, the application threw an error when a merchant scheduled a price update for multiple stores for same from
and to
time when a roll back is available at the new schedule’s start time.url_keys
, if a category key did not change but the category parents’ key did, then the original code would used the category’s default store view when creating URLs. GitHub-28633is one of
condition that is used for the Products to Display feature contains multiple conditions. Previously, when this condition contained multiple values, it was not parsed.bin/magento dev:tests:run
now launches the following tests as expected: all, unit, integration, integration-all, static, static-all, integrity, legacy, and default.AdminMediaGalleryInsertLargeImageFileSizeTest
has been refactored.\Magento\TestFramework\TestCase\WebapiAbstract
now contains a function that supports comparing large nested arrays of expected and actual outcomes in tests. Irrelevant keys in the outcome can now be ignored. GitHub-29498AdminMediaGalleryCatalogUiEditCategoryGridPageTest
no longer fails randomly. GitHub-1764dev/tests/integration/testsuite/Magento/Customer/Controller/AccountTest
has been improved. (assert
is now based on XPath
selector instead of assertStringContainsString
.) GitHub-29700AdminAnalytics
module. GitHub-29500testRequestCacheTagsForCategoryListOnMultipleIds
test. GitHub-29372ApiFunctional TestFramewor
k. GitHub-26425—no-tablespaces
has been added to all occurrences of mysqldump
, which permits integration tests to run without the PROCESS
privilege (required since MySQL 5.7.31 / 8.0.21 to run mysqldump
by default). GitHub-30566--no-parent
flag was added to the bin/magento setup:static-content:deploy
command that prevents the parent(s) of a theme from being compiled. This new flag you can significantly improve the performance of the static content deployment process by avoiding unnecessary compilation. Note that this new flag does not work when using the compact
strategy. GitHub-30184Magento_ConfigurableProduct
module in the Admin theme has been removed. GitHub-29857ar_SA - Saudi Arabia
).Provided Zip/Postal Code seems to be invalid. Example: 1234. If you believe it is the right one you can ignore this notice.
zip_codes.xml
has been updated to enforce eight-digits for Brazilian zip codes. GitHub-29984@button__border-radius
variable is now defined in the lib/web/css/source/lib/variables/_buttons.less
library. border-radius
has a default value of 3px
. Previously, border-radius
was hard-coded. GitHub-28674lib/web/css/source/lib/variables/_typography.less
. GitHub-29778this.disabled(true)
is set. GitHub-29098@font-family-name__base
variable is no longer used when loading the Open Sans font. GitHub-29515aria-atomic="true"
has been added to the error container tag. GitHub-29560adminhtml
widgets when using a chooser widget type. GitHub-13316, GitHub-7252, GitHub-6868Vault
module now recognizes payment method codes from the request for the payment information management service. Previously, when a shopper placed an order using a saved Braintree credit card, the application threw this error even when a valid payment method was used: The requested Payment Method is not available
.Address suggestions are now removed as expected when an address is modified.
A race condition that prevented some customers from saving their address in their account panel has been resolved.
Vertex address validation no longer adds the Address Edit page to the full-page cache in certain conditions.
Vertex-calculated tax is now considered when free shipping is configured for an amount inclusive of tax.
V1/invoice/:invoiceId/refund
to refund an invoice that has a zero quantity of products and zero shipping charges (for example, {"items": [{"qty": 0, "orderItemId": 6, "extensionAttributes": {}}], "appendComment": false, "notify": true, "isOnline": true, "arguments": {"adjustment_negative": 0.0, "adjustment_positive": 0.99, "shipping_amount": 0}}.
) Previously, the application threw this error: You can't create a creditmemo without products
. GitHub-23069V1/categories
to create or update a category. Previously, the application did not save the value if the default_sort_by
value was set as an array. When the default_sort_by
value was set as a string, the application threw this error: Error occurred during \"custom_attributes\" processing. Attribute \"default_sort_by\" has invalid value. The \"string\" value's type is invalid. The \"string[]\" type was expected. Verify and try again.
V1/invoices/:id/capture
to capture payment information now works as expected. Previously, the applicationauthorized the order but captured it only on the payment gateway’s site.V1/order/:orderId/ship
to create a partial shipment, the endpoint returns the correct number of shipped products.V1/order/:orderID/invoice
now accurately reflect partial payment by store credit. Previously, when an order was partially paid for with store credit, the invoice was created without taking the store credit into account.rest/all/V1/categories
and GET rest/all/V1/categories?rootCategoryId=2
calls now return populated name
and product_count
fields as expected for all categories in the tree. Previously, the category field values were empty. The table name resolver plug-in returned an incorrect table name for fetching the count of products by category.V1/categories/:id
endpoint now stores the data needed to create 301 redirects for category URL keys when the save_rewrites_history
custom attribute is provided. GitHub-29174, GitHub-30240An error has occurred. See error log for details
.ActionInterface
for \Magento\Wishlist\Controller\Shared\Allcart
. GitHub-29537Issue: The [magento_root]/index.php
file has been removed, and The application now runs from /pub
by default for Apache configurations. Stores that are served from subfolders will not work as expected and may display 404 errors. Workaround: Use symlinks to emulate the installation into subfolders. The following example uses two stores (https://shop01.com/shop/
and https://shop02.com/shop/
) to illustrate how to use a symlink to emulate an installation in subfolders.
Create a subdirectory for https://shop01.com/shop/
:
mkdir magento_root/pub/shop01
cd magento_root/pub/shop01
Create symlinks for the store’s parent directories in the newly created directory:
ln -s ../media media
ln -s ../static static
ln -s ../../../pub pub
ln -s ../.htaccess .htaccess
ln -s ../health_check.php health_check.php
Create an index.php
file inside the new directory (magento_root/pub/shop01/index.php
) and add this content:
<?php
require realpath(__DIR__) . '/../../../app/bootstrap.php';
switch ($_SERVER['HTTP_HOST']) {
case 'shop01.com':
case 'www.shop01.com':
$params = $_SERVER;
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE] = 'shop01';
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_TYPE] = 'website';
$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $params);
$app = $bootstrap->createApplication(\Magento\Framework\App\Http::class);
$bootstrap->run($app);
break;
default:
$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER);
/** @var \Magento\Framework\App\Http $app */
$app = $bootstrap->createApplication(\Magento\Framework\App\Http::class);
$bootstrap->run($app);
break;
}
<VirtualHost *:80>
DocumentRoot "magento_root/pub/shop1"
ServerName shop01.com
</VirtualHost>
Issue: Merchants must activate the Fastly Force TLS functionality from the Admin to enable the global HTTP to HTTPS redirect for all store pages. See the Redirect HTTP to HTTPS for all pages on Cloud (Force TLS) Knowledge Base article.
Issue: You cannot use the addConfigurableProductToCart
GraphQL mutation to add a configurable product to a cart in a non-default store view in a multi-store deployment that runs Inventory. (Luma storefronts are not affected.) the application displays this error: Could not add item to cart. Please check required options and try again
. Workaround: Use the addProductsToCart
mutation instead. GitHub-31660
Issue: The application does not submit payment information as expected when a shopper first enters a correct code into the CAPTCHA field on the Payment page but displays this error: There has been an error processing your request
. This occurs only when the shopper tries to place the order either without entering the CAPTCHA code or by entering it incorrectly. Workaround: Refresh the page.
Issue: The application creates an order in Braintree as expected when a shopper clicks Pay with Venmo, but does not create the order in the Admin. Workaround: None. See the 2.4.2 known issue: Braintree Venmo payment does not work Knowledge Base article.
Issue: B2B buyers can use online payment methods to bypass the usual purchase order flow. This scenario can occur if the buyer can reduce their entire checkout total to a 0 — for example, by a promo code or gift card — and subsequently remove the code or gift card. Even under those conditions, the application still places the order for the correct amount based on the prices of the items in their assigned catalog. Workaround: Disable gift cards and coupon codes when online payment methods are enabled for purchase order approval.
Issue: Buyers are redirected to the shopping cart when trying to place an order from a purchase order using PayPal Express Checkout when In-Context Mode is disabled.
Issue: The application sometimes displays a 404 error when a buyer creates a purchase order and then navigates to the checkout page. This error occurs when a buyer has previously created a different purchase order with an online payment method before navigating to the checkout page without completing the previous purchase. The buyer can still place the purchase order. Workaround: None.
Issue: Discounts for a specific payment method persist during checkout for a purchase order even when the buyer changes their payment method during final checkout. As a result, customers may receive a discount that they are not entitled to. This occurs because a cart rule for the original payment method is still applied despite the change in payment method. Workaround: None. See the 2.4.2 B2B known issue: discount remains for online Purchase Orders after payment method is changed Knowledge Base article.
Issue: The deleteRequisitionListOutput
query returns details about the deleted requisition list instead of the remaining requisition lists.
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.
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).
The following table identifies contributions from our community members. This table lists the external pull requests, the GitHub issue number associated with it (if available), and the community member who contributed the pull request.
Contributing community member | Pull Requests | Related GitHub Issues |
---|---|---|
Nazar Klovanych | #29576 | 1449 |
Shankar Konar | #29511 | 29496 |
Hazel Joie Caquicla | #29494 | |
Hazel Joie Caquicla | #29491 | |
Kos Rafał | #29483 | 29525 |
Hazel Joie Caquicla | #29461 | |
Jekabs | #29458 | 29498 |
Nazar Klovanych | #29452 | |
jmonteros422 | #29435 | 1711 |
Shankar Konar | #29433 | 1738 |
Nazar Klovanych | #29429 | 1755, 1694 |
Bartłomiej Szubert | #29413 | 24060 |
Angelo Romano | #29410 | 29416 |
Honeymay Louiese Ignacio | #29400 | 1703 |
Franciszek Wawrzak | #27478 | 29606 |
Lukasz Bajsarowicz | #29670 | 29672 |
Lukasz Bajsarowicz | #29669 | 29673 |
Nazar Klovanych | #29636 | 1764 |
Oleh Usik | #29630 | 29649 |
Lukasz Bajsarowicz | #29564 | 29679 |
Ihor Sviziev | #29518 | 29653 |
Oleh Usik | #29459 | |
Oleksandr Kravchuk | #29339 | |
Will Wright | #29316 | 29315 |
Vadim Malesh | #29693 | 29700 |
Vadim Malesh | #29682 | |
Andrii Beziazychnyi | #29703 | 29712 |
Shankar Konar | #29510 | 28422 |
Vadim Malesh | #29474 | 29267 |
Oleh Usik | #29460 | 29501 |
Dmitry Tsymbal | #29042 | 29145 |
Savvas Radevic | #28816 | 28802 |
Sascha | #28548 | 28674 |
Yan Nasonov | #28512 | 29661 |
Rudolf Vince | #27494 | 29537 |
Nazar Klovanych | #29684 | 1769 |
Nazar Klovanych | #29633 | 1763 |
Hazel Joie Caquicla | #29639 | |
jmonteros422 | #29632 | 1760 |
Oleh Usik | #29482 | 29500 |
Sathish Subramanian | #29353 | 29194 |
Russell Albin | #29269 | 25595 |
Bartłomiej Szubert | #28163 | 13401 |
Mateusz Krzeszowiak | #27696 | 29553 |
Vitaliy Prokopov | #27691 | 26903 |
korostii | #26081 | 26080 |
Nazar Klovanych | #29711 | 1774 |
Hazel Joie Caquicla | #29411 | |
Wout Kramer | #29210 | 29515 |
Eduard Chitoraga | #29148 | |
Oleh Usik | #28821 | 28558, 28520 |
Nazar Klovanych | #29783 | 1780 |
jmonteros422 | #29774 | 1783 |
Hazel Joie Caquicla | #29772 | |
Sergii Ivashchenko | #29761 | |
jmonteros422 | #29753 | 1784 |
Nazar Klovanych | #29743 | 1782 |
Nazar Klovanych | #29742 | 1778 |
Hazel Joie Caquicla | #29705 | |
jmonteros422 | #29677 | 1504 |
Ihor Sviziev | #29799 | |
Oleh Usik | #29634 | 29648 |
Alexandr Skrashuk | #29348 | 28921 |
Vitaliy Prokopov | #28413 | 28388 |
Lukasz Bajsarowicz | #27609 | |
korostii | #27579 | 27523 |
Cristian Partica | #29426 | 29425 |
Michał Derlatka | #28915 | 26425 |
Oleh Usik | #29832 | 29843 |
Oleh Usik | #29830 | 29845 |
Oleh Usik | #29829 | 29846 |
Oleh Usik | #29828 | 29847 |
Oleh Usik | #29821 | 29824 |
Oleh Usik | #29820 | 29823 |
Denys Babenko | #28343 | 29067 |
Bal | #27269 | 26288 |
Andrii Kasian | #27129 | 25199 |
Hazel Joie Caquicla | #29875 | |
Hazel Joie Caquicla | #29869 | |
Oleh Usik | #29836 | 29841 |
Oleh Usik | #29831 | 29844 |
Oleh Usik | #29822 | 29825 |
Tu Nguyen | #29044 | 29526 |
Vinoth | #28349 | |
bradleybrecher | #27386 | 29560 |
Sergii Ivashchenko | #29921 | |
Hazel Joie Caquicla | #29896 | |
Shankar Konar | #29724 | 29704 |
Oleh Usik | #28653 | 29531 |
Tu Nguyen | #29913 | 29914 |
Nazar Klovanych | #29861 | 1789 |
Tu Nguyen | #29856 | 29857 |
Tu Nguyen | #29771 | 29779 |
Eden Duong | #29278 | 29277 |
Eden Duong | #29276 | 29336 |
Mohamed-Asar | #27896 | 29098 |
Honeymay Louiese Ignacio | #29947 | |
toxix | #29925 | 28981, 29879 |
Viktor Kopin | #29906 | |
Olga Zakharchuk | #29863 | 29958 |
Nikolaj Malevanec | #29006 | 12087 |
Abdul Rahman Abouzaid | #28687 | 8538 |
KrielkipNL | #27832 | 11998, 27500 |
Gaurav Agarwal | #27602 | 27350 |
Alexander Taranovsky | #27391 | 29601 |
Stanislav Ilnytskyi | #26877 | 26876 |
Sergii Ivashchenko | #29889 | |
Nazar Klovanych | #29715 | 1487 |
Honeymay Louiese Ignacio | #29543 | 1724 |
Oleh Usik | #29833 | 29839 |
Porraphit Chuasuk | #28896 | 28892 |
Vitaliy Prokopov | #27857 | 26976 |
Eduard Chitoraga | #29904 | |
Hazel Joie Caquicla | #30006 | |
Ihor Sviziev | #29993 | 30004 |
Viktor Kopin | #29959 | 1813 |
Hazel Joie Caquicla | #29909 | |
Lukasz Bajsarowicz | #29688 | 29689 |
Shankar Konar | #29415 | 29354 |
Hazel Joie Caquicla | #29967 | |
Oleh Usik | #29929 | 29940 |
Hazel Joie Caquicla | #29895 | |
ashokadewit | #27446 | 29603 |
Pascal Brouwers | #26527 | 26526 |
Sergii Ivashchenko | #30076 | |
Hazel Joie Caquicla | #30044 | |
Viktor Kopin | #29979 | 1806 |
Janusz Janczy | #29934 | 29933 |
Marvin Hinz | #29542 | 29185 |
Pieter Zandbergen | #29274 | 29524 |
Joe Hobbs | #25510 | 25147 |
Benoît Xylo | #25405 | 25399 |
Viktor Kopin | #30074 | |
Hazel Joie Caquicla | #30042 | |
Oleh Usik | #29962 | 29982 |
Oleh Usik | #29931 | 29941 |
Oleh Usik | #29835 | 29842 |
Oleh Usik | #29834 | 29838 |
Evgeny Levinsky | #27698 | 28324 |
Vadim Malesh | #26470 | 7720 |
Oleh Usik | #30081 | 30103 |
Leandro F. L. | #30014 | 30013 |
Taras Gamanov | #29968 | 24348, 24400 |
Shankar Konar | #29671 | 16531, 24332, 29852 |
Ejaz Alam | #29486 | 29487, 29502 |
Oleh Usik | #30030 | 30032 |
Eugene Shakhsuvarov | #28117 | 28116 |
Serhii Dzhepa | #30095 | |
Hazel Joie Caquicla | #30057 | |
Hazel Joie Caquicla | #30034 | |
Marcos Trama | #29972 | 29984 |
Lyzun Oleksandr | #29814 | 29718 |
Tu Nguyen | #29794 | 29075 |
Greg Harvell | #29081 | 28154, 28428 |
Daniel Beitler | #29080 | 29659 |
Svyatoslav | #28818 | 29546 |
Fabian Schmengler | #28164 | 29585 |
Tymoteusz Motylewski | #27980 | 29590 |
Alex Gusev | #30077 | 26762, 29612 |
Abdul Rahman Abouzaid | #28663 | 28479 |
Abdul Rahman Abouzaid | #28491 | 28186 |
jiten-patel | #27953 | 12225 |
Ihor Sviziev | #30153 | 30183 |
Shankar Konar | #30069 | 30164 |
Leandro F. L. | #30011 | 29377 |
Oleh Usik | #29827 | 29848 |
Davide Riccardo Caliendo | #29015 | 29017 |
Zach Nanninga | #28379 | 27397 |
Bünyamin | #27869 | 27866 |
Eden Duong | #27585 | 29599 |
David Haecker | #30096 | 322 |
Yaroslav Garmash | #30075 | 312 |
John Carlo Octabio | #30028 | |
Frédéric MARTINEZ | #30182 | 30191 |
Ihor Sviziev | #30170 | 30146 |
Rafael Kassner | #30160 | |
Sean van Zuidam | #30139 | 30186 |
Bartosz Górski | #30120 | 30133 |
Milind Singh | #30109 | 30125 |
Kate Kyzyma | #30049 | 30058 |
Damián Culotta | #29722 | 29729 |
Anton Evers | #28995 | 29522 |
Kate Kyzyma | #30217 | |
Nikita Sarychev | #30172 | 30173 |
Tu Nguyen | #30108 | |
Alexander Menk | #29205 | 29174, 30240 |
Barny Shergold | #28676 | 28633 |
Jonas Hünig | #28516 | 29662 |
Tu Nguyen | #28177 | 30237 |
Alexander Taranovsky | #27939 | 30031 |
David Manners | #27581 | 29598 |
Navarr Barnier | #27077 | 29558 |
kolaente | #30180 | 30190 |
Peep van Puijenbroek | #29466 | 29652 |
Frédéric MARTINEZ | #28588 | |
Petkovski Marjan | #29751 | 29372 |
Oleh Usik | #30222 | |
Timon de Groot | #28809 | 22375 |
Nirav Patel | #28385 | 30345 |
Dan Wallis | #27940 | 29555 |
Sean van Zuidam | #30065 | 30064 |
Tu Nguyen | #30008 | 30036 |
Tu Nguyen | #29726 | 29719 |
Gabriel Somoza | #28389 | 29165 |
Dan Wallis | #28216 | 13440 |
Rafael Corrêa Gomes | #25412 | 25411 |
Siim | #29885 | 29890 |
Bartosz Kubicki | #27092 | 29557 |
Sudheer Singamsetti | #30230 | 30179 |
Namrata | #30358 | 30450 |
Tu Nguyen | #30333 | 30448 |
Wojtek Naruniec | #30318 | 25110, 25886, 28286 |
Sean van Zuidam | #30062 | 30063, 30066 |
Tu Nguyen | #29773 | 29778 |
Pieter Cappelle | #26713 | 14398, 21885 |
Bartłomiej Szubert | #30320 | 11175 |
Bas van Poppel | #30167 | 30169 |
Ihor Sviziev | #30023 | 30025 |
Ihor Sviziev | #30002 | 30005 |
Eden Duong | #27574 | 29597 |
Rafael Kassner | #27454 | 29604 |
Nirav Patel | #30458 | 30452 |
Tu Nguyen | #30454 | 30496 |
solwininfotech | #30405 | 26133 |
Bartłomiej Szubert | #30355 | 30296 |
Serhii Dzhepa | #30554 | |
Alin Alexandru | #30340 | 30508 |
Oleh Usik | #29868 | 30061 |
guillaume quintard | #28928 | 29988 |
Per | #28172 | 27925 |
Bartłomiej Szubert | #28157 | 22503, 24091 |
Nikolay Sumrak | #27672 | 29552 |
Jonas Hünig | #30502 | 30566 |
Yaroslav Bogutsky | #30493 | 30510 |
Tu Nguyen | #30453 | 30542 |
Sunil Patel | #30402 | 30388 |
Oleh Usik | #30079 | |
Jeroen | #29911 | 29915 |
Pieter Hoste | #29196 | 29297, 29478 |
Johan Lindahl | #28917 | 29656 |
Bartosz Kubicki | #26967 | 29615 |
Ejaz Alam | #30579 | 30545 |
Pieter Hoste | #30570 | 6868, 7252, 13316 |
Namrata | #30538 | 30550 |
Pratik Oza | #30530 | 30552 |
Andrii Kasian | #30521 | 30563 |
naitsirch | #30322 | 30314 |
Kate Kyzyma | #30317 | 30561 |
Stanislav Ilnytskyi | #30198 | 30601 |
Cyildirim | #28352 | 28124 |
Andrii Beziazychnyi | #30633 | 30469 |
Eduard Chitoraga | #30619 | 30468 |
Sudheer Singamsetti | #30375 | 30349 |
Sagar Dahiwala | #30368 | 325 |
Nikolaj Malevanec | #30763 | 30747 |
Dmitry Tsymbal | #30359 | 30372 |
Oleh Usik | #30223 | 30683 |
Lukasz Bajsarowicz | #28147 | 28309 |
Matei Purcaru | #27972 | 27954 |
Vova Yatsyuk | #27674 | 29551 |
Bartosz Kubicki | #26966 | 30216 |
Simon Sprankel | #26401 | 29621 |
Gabriel da Gama | #30895 | 30896 |
Samuel Caçador | #30793 | 30833 |
Vova Yatsyuk | #30774 | 30781, 197 |
Diego Sanabria | #30681 | 30680 |
Evgen Mozok | #30632 | 24730 |
Sanjay Patel | #30411 | 30408 |
Shikha Mishra | #30400 | 30361, 30362 |
Shikha Mishra | #30391 | 30255 |
Bartłomiej Szubert | #30114 | 30073 |
Michael Bottens | #30010 | 30009 |
Tu Nguyen | #29986 | 29987 |
Saphal Jha | #29923 | 29920 |
Andrii Kasian | #27379 | 29600 |
Yaroslav Rogoza | #30630 | 30624 |
Oleh Usik | #29675 | 29168 |
Andrii Kalinich | #30749 | 23069 |
Viktor Kopin | #30727 | 30645 |
Thomas Klein | #30825 | 30859 |
Oleh Usik | #30777 | 30783 |
Oleh Usik | #30528 | 30916 |
Oleh Usik | #30525 | 30917 |
Ihor Svizievv | #30090 | 30184 |
Andrii Kalinich | #30866 | 24717 |
Viktor Kopin | #30928 | 30685 |
Nitish Singh | #30421 | |
Oleh Usik | #30779 | 30782 |
Nazar Klovanych | #30662 | 30649 |
Oleh Usik | #30529 | 30926 |
Marush Denchev | #30614 | 30104 |
Lachlan | #29692 | 30243 |
Viktor Kopin | #30947 | 29128 |
Andrii Kalinich | #30807 | 26432 |
Viktor Kopin | #30961 | 13746 |
Nikolaj Malevanec | #30963 | 30295 |
Andrii Beziazychnyi | #30694 | 30625 |
Alexander Turiak | #30636 | 30467 |
Our technology stack is built on PHP and MySQL. For more information, see System Requirements.
You can install Adobe Commerce 2.4.2 using Composer.
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.