Migrate/Downgrade Magento 2 from Enterprise to Community Edition

Magento 2 Enterprise Edition (EE) is the premium paid version of Magento 2 Community Edition (CE).
If you are a business that aspires to grow and expect huge website traffic volumes, then EE is the best solution for your company.

Moreover, the Enterprise edition is completely backed by the Magento team. And subscribers get full support by phone and email.
License pricing also includes security updates, special features, and exclusive product enhancements.
But all this comes with a heavy price of 25K USD / year or more depending upon the company’s revenue.

P/S: Note that Magento has renamed it’s Magento 2 products

  • Magento Enterprise Edition (EE) now referred to as Magento Commerce
  • Magento Community Edition (CE) now referred to as Magento Open Source

Why downgrade from Enterprise to Community?

The short answer is, It’s really not needed unless you want to.

Nobody likes a downgrade of anything. But sometimes you have to due to some constraints.
The merchant who thinks the license fee is expensive and not leveraging any of the enterprise features sooner or later might think of using community version instead.

In this post, I will summarise how we can migrate/downgrade from Magento Enterprise Edition (EE) to Community Edition (CE) successfully.

How to downgrade/migrate from EE to CE?

For the sake of brevity, migration of custom themes & modules is not considered.

1. Create a new branch from master


git fetch --all
git checkout master
git pull origin master
git checkout -b feature/magento2ce-downgrade

2. Update composer.json

Update the meta-package reference of magento/product-enterprise-edition to magento/project-community-edition.
Also, you can add/remove other required packages manually.
Try to use the exact version instead of using *~< & > operators.

In our case, the composer.json file looked like


{
     "name": "magento/project-community-edition",
     "description": "eCommerce Platform for Growth (Community Edition)",
     "type": "project",
     "version": "2.1.1",
     "license": [
         "OSL-3.0",
         "AFL-3.0"
     ],
     "require": {
         "magento/product-community-edition": "2.1.1",
         "composer/composer": "@alpha",
         // … third party packages goes here
     },
     "require-dev": {
         "phpunit/phpunit": "4.1.0",
         "squizlabs/php_codesniffer": "1.5.3",
         "phpmd/phpmd": "@stable",
         "pdepend/pdepend": "2.2.2",
         "fabpot/php-cs-fixer": "~1.2",
         "lusitanian/oauth": "~0.3 <=0.7.0",
         "sebastian/phpcpd": "2.0.0"
     },
     "config": {
         "use-include-path": true
     },
     "autoload": {
         "psr-4": {
             "Magento\Framework\": "lib/internal/Magento/Framework/",
             "Magento\Setup\": "setup/src/Magento/Setup/",
             "Magento\": "app/code/Magento/"
         },
         "psr-0": {
             "": "app/code/"
         },
         "files": [
             "app/etc/NonComposerComponentRegistration.php"
         ]
     },
     "autoload-dev": {
         "psr-4": {
             "Magento\Sniffs\": "dev/tests/static/framework/Magento/Sniffs/",
             "Magento\Tools\": "dev/tools/Magento/Tools/",
             "Magento\Tools\Sanity\": "dev/build/publication/sanity/Magento/Tools/Sanity/",
             "Magento\TestFramework\Inspection\": "dev/tests/static/framework/Magento/TestFramework/Inspection/",
             "Magento\TestFramework\Utility\": "dev/tests/static/framework/Magento/TestFramework/Utility/"
         }
     },
     "minimum-stability": "alpha",
     "prefer-stable": true,
     "repositories": [
         {
             "type": "composer",
             "url": "https://repo.magento.com/"
         }
     ],
     "extra": {
         "magento-force": "override"
     }
 }

3. Remove EE related license files (Not Required)


cd /path/to/magento2/root/
rm -f./LICENSE_EE.txt

Check & delete if there are any remaining EE modules

find . -name LICENSE_EE.txt     

EDIT – No need to manually delete the EE license files as they will be removed automatically by the composer update operation.

4. Disable EE modules

Disable all the EE modules manually in app/etc/config.php.

We will share the config.php generator in the future to make the manual process much easier & faster.

The available EE modules at the time of writing were:

  • module-amqp
  • module-banner
  • module-banner-customer-segment
  • module-bundle-staging
  • module-catalog-event
  • module-catalog-import-export-staging
  • module-catalog-inventory-staging
  • module-catalog-permissions
  • module-catalog-rule-staging
  • module-catalog-staging
  • module-catalog-url-rewrite-staging
  • module-checkout-staging
  • module-cms-staging
  • module-configurable-product-staging
  • module-custom-attribute-management
  • module-customer-balance
  • module-customer-custom-attributes
  • module-customer-finance
  • module-customer-segment
  • module-cybersource
  • module-downloadable-staging
  • module-elasticsearch
  • module-enterprise
  • module-eway
  • module-gift-card
  • module-gift-card-account
  • module-gift-card-import-export
  • module-gift-card-staging
  • module-gift-message-staging
  • module-gift-registry
  • module-gift-wrapping
  • module-gift-wrapping-staging
  • module-google-optimizer-staging
  • module-google-tag-manager
  • module-grouped-product-staging
  • module-invitation
  • module-layered-navigation-staging
  • module-logging
  • module-message-queue
  • module-msrp-staging
  • module-multiple-wishlist
  • module-mysql-mq
  • module-payment-staging
  • module-persistent-history
  • module-price-permissions
  • module-product-video-staging
  • module-promotion-permissions
  • module-reminder
  • module-resource-connections
  • module-review-staging
  • module-reward
  • module-rma
  • module-rma-staging
  • module-sales-archive
  • module-sales-rule-staging
  • module-scalable-checkout
  • module-scalable-inventory
  • module-scalable-oms
  • module-scheduled-import-export
  • module-search-staging
  • module-solr
  • module-staging
  • module-support
  • module-target-rule
  • module-versions-cms
  • module-visual-merchandiser
  • module-website-restriction
  • module-weee-staging
  • module-worldpay

5. Update composer


composer update

This process may take some time.
This will remove all the EE packages and install CE packages.
The sample output looks like


Loading composer repositories with package information
 Updating dependencies (including require-dev)
 Package operations: 1 install, 52 updates, 85 removals
 Removing magento/product-enterprise-edition (2.1.1)
 Removing Magento/ProductEnterpriseEdition
 Removing magento/magento2-ee-base (2.1.1)
 Removing Magento/Magento2EeBase
 Removing magento/module-amqp (100.1.0)
 Removing Magento/Amqp
 Removing php-amqplib/php-amqplib (v2.5.2)
 Removing Php-amqplib/PhpAmqplib
 Removing magento/module-worldpay (100.1.0)
 Removing Magento/Worldpay
 Removing magento/module-catalog-url-rewrite-staging (100.1.0)
 Removing Magento/CatalogUrlRewriteStaging
 Removing magento/module-bundle-staging (100.1.0)
 Removing Magento/BundleStaging
 Removing magento/module-checkout-staging (100.1.0)
 Removing Magento/CheckoutStaging
 Removing magento/module-cms-staging (100.1.1)
 Removing Magento/CmsStaging
 Removing magento/module-configurable-product-staging (100.1.0)
 Removing Magento/ConfigurableProductStaging
 Removing magento/module-downloadable-staging (100.1.0)
 Removing Magento/DownloadableStaging
 Removing magento/module-grouped-product-staging (100.1.0)
 Removing Magento/GroupedProductStaging
 Removing magento/module-payment-staging (100.1.0)
 Removing Magento/PaymentStaging
 Removing magento/module-support (100.1.0)
 Removing Magento/Support
 Removing magento/module-solr (100.1.0)
 Removing Magento/Solr
 Removing solarium/solarium (3.3.0)
 Removing Solarium/Solarium
 Removing magento/module-message-queue (100.1.0)
 Removing Magento/MessageQueue
 Removing magento/module-mysql-mq (100.1.0)
 Removing Magento/MysqlMq
 Removing magento/module-eway (100.1.0)
 Removing Magento/Eway
 Removing magento/module-google-tag-manager (100.1.0)
 Removing Magento/GoogleTagManager
 Removing magento/module-admin-gws (100.1.0)
 Removing Magento/AdminGws
 Removing magento/module-banner-customer-segment (100.1.0)
 Removing Magento/BannerCustomerSegment
 Removing magento/module-catalog-import-export-staging (100.1.0)
 Removing Magento/CatalogImportExportStaging
 Removing magento/module-customer-finance (100.1.0)
 Removing Magento/CustomerFinance
 Removing magento/module-enterprise (100.1.0)
 Removing Magento/Enterprise
 Removing magento/module-catalog-event (100.1.0)
 Removing Magento/CatalogEvent
 Removing magento/module-catalog-permissions (100.1.0)
 Removing Magento/CatalogPermissions
 Removing magento/module-gift-card-staging (100.1.0)
 Removing Magento/GiftCardStaging
 Removing magento/module-gift-card-account (100.1.0)
 Removing Magento/GiftCardAccount
 Removing magento/module-customer-balance (100.1.0)
 Removing Magento/CustomerBalance
 Removing magento/module-gift-card-import-export (100.1.0)
 Removing Magento/GiftCardImportExport
 Removing magento/module-gift-registry (100.1.0)
 Removing Magento/GiftRegistry
 Removing magento/module-gift-wrapping (100.1.0)
 Removing Magento/GiftWrapping
 Removing magento/module-logging (100.1.0)
 Removing Magento/Logging
 Removing magento/module-multiple-wishlist (100.1.0)
 Removing Magento/MultipleWishlist
 Removing magento/module-advanced-checkout (100.1.1)
 Removing Magento/AdvancedCheckout
 Removing magento/module-cybersource (100.1.0)
 Removing Magento/Cybersource
 Removing magento/module-persistent-history (100.1.0)
 Removing Magento/PersistentHistory
 Removing magento/module-price-permissions (100.1.0)
 Removing Magento/PricePermissions
 Removing magento/module-gift-card (101.0.1)
 Removing Magento/GiftCard
 Removing magento/module-promotion-permissions (100.1.0)
 Removing Magento/PromotionPermissions
 Removing magento/module-banner (100.1.0)
 Removing Magento/Banner
 Removing magento/module-reminder (100.1.0)
 Removing Magento/Reminder
 Removing magento/module-reward (100.1.0)
 Removing Magento/Reward
 Removing magento/module-invitation (100.1.0)
 Removing Magento/Invitation
 Removing magento/module-rma (100.1.0)
 Removing Magento/Rma
 Removing magento/module-customer-custom-attributes (100.1.0)
 Removing Magento/CustomerCustomAttributes
 Removing magento/module-custom-attribute-management (100.1.0)
 Removing Magento/CustomAttributeManagement
 Removing magento/module-sales-archive (100.1.0)
 Removing Magento/SalesArchive
 Removing magento/module-advanced-catalog (100.1.0)
 Removing Magento/AdvancedCatalog
 Removing magento/module-advanced-sales-rule (100.1.0)
 Removing Magento/AdvancedSalesRule
 Removing magento/module-scalable-checkout (100.1.0)
 Removing Magento/ScalableCheckout
 Removing magento/module-scalable-inventory (100.1.0)
 Removing Magento/ScalableInventory
 Removing magento/module-scalable-oms (100.1.0)
 Removing Magento/ScalableOms
 Removing magento/module-scheduled-import-export (100.1.0)
 Removing Magento/ScheduledImportExport
 Removing magento/module-target-rule (100.1.1)
 Removing Magento/TargetRule
 Removing magento/module-customer-segment (100.1.0)
 Removing Magento/CustomerSegment
 Removing magento/module-advanced-rule (100.1.0)
 Removing Magento/AdvancedRule
 Removing magento/module-versions-cms (100.1.0)
 Removing Magento/VersionsCms
 Removing magento/module-visual-merchandiser (100.1.0)
 Removing Magento/VisualMerchandiser
 Removing magento/module-website-restriction (100.1.0)
 Removing Magento/WebsiteRestriction
 Removing magento/module-resource-connections (100.1.0)
 Removing Magento/ResourceConnections
 Removing magento/module-elasticsearch (100.1.0)
 Removing Magento/Elasticsearch
 Removing magento/module-advanced-search (100.1.0)
 Removing Magento/AdvancedSearch
 Removing elasticsearch/elasticsearch (v2.3.0)
 Removing Elasticsearch/Elasticsearch
 Removing guzzlehttp/ringphp (1.1.0)
 Removing Guzzlehttp/Ringphp
 Removing guzzlehttp/streams (3.0.0)
 Removing Guzzlehttp/Streams
 Removing react/promise (v2.5.0)
 Removing React/Promise
 Removing magento/module-catalog-rule-staging (100.1.1)
 Removing Magento/CatalogRuleStaging
 Removing magento/module-sales-rule-staging (100.1.1)
 Removing Magento/SalesRuleStaging
 Removing magento/module-search-staging (100.1.0)
 Removing Magento/SearchStaging
 Removing magento/module-layered-navigation-staging (100.1.0)
 Removing Magento/LayeredNavigationStaging
 Removing magento/module-catalog-inventory-staging (100.1.0)
 Removing Magento/CatalogInventoryStaging
 Removing magento/module-gift-message-staging (100.1.0)
 Removing Magento/GiftMessageStaging
 Removing magento/module-gift-wrapping-staging (100.1.0)
 Removing Magento/GiftWrappingStaging
 Removing magento/module-google-optimizer-staging (100.1.0)
 Removing Magento/GoogleOptimizerStaging
 Removing magento/module-msrp-staging (100.1.0)
 Removing Magento/MsrpStaging
 Removing magento/module-review-staging (100.1.0)
 Removing Magento/ReviewStaging
 Removing magento/module-rma-staging (100.1.0)
 Removing magento/module-weee-staging (100.1.0)
 Removing Magento/RmaStaging
 Removing Magento/WeeeStaging
 Removing magento/module-product-video-staging (100.1.0)
 Removing Magento/ProductVideoStaging
 Removing magento/module-catalog-staging (100.1.1)
 Removing Magento/CatalogStaging
 Removing magento/module-staging (100.1.1)
 Removing Magento/Staging
 Removing magento/framework-message-queue (100.1.0)
 Removing Magento/FrameworkMessageQueue
 Removing magento/framework-foreign-key (100.1.0)
 Removing Magento/FrameworkForeignKey
 Updating magento/magento-composer-installer (0.1.12 => 0.1.13): Loading from cache
 Updating oyejorge/less.php (v1.7.0.10 => v1.7.0.14): Loading from cache
 Updating phpseclib/phpseclib (2.0.4 => 2.0.17): Downloading (100%)         
 Updating zendframework/zend-stdlib (2.4.11 => 2.4.13): Loading from cache
 Updating zendframework/zend-eventmanager (2.4.11 => 2.4.13): Loading from cache
 Updating zendframework/zend-code (2.4.11 => 2.4.13): Loading from cache
 Updating zendframework/zend-di (2.4.11 => 2.4.13): Loading from cache
 Updating zendframework/zend-modulemanager (2.4.11 => 2.4.13): Loading from cache
 Updating zendframework/zend-loader (2.4.11 => 2.4.13): Loading from cache
 Updating zendframework/zend-view (2.4.11 => 2.4.13): Loading from cache
 Updating zendframework/zend-validator (2.4.11 => 2.4.13): Loading from cache
 Updating zendframework/zend-escaper (2.4.11 => 2.4.13): Loading from cache
 Updating zendframework/zend-uri (2.4.11 => 2.4.13): Loading from cache
 Updating zendframework/zend-server (2.4.11 => 2.4.13): Loading from cache
 Updating zendframework/zend-soap (2.4.11 => 2.4.13): Loading from cache
 Updating zendframework/zend-console (2.4.11 => 2.4.13): Loading from cache
 Updating zendframework/zend-servicemanager (2.4.11 => 2.4.13): Loading from cache
 Updating zendframework/zend-text (2.4.11 => 2.4.13): Loading from cache
 Updating zendframework/zend-i18n (2.4.11 => 2.4.13): Loading from cache
 Updating zendframework/zend-config (2.4.11 => 2.4.13): Loading from cache
 Updating zendframework/zend-math (2.4.11 => 2.4.13): Loading from cache
 Updating zendframework/zend-json (2.4.11 => 2.4.13): Loading from cache
 Updating zendframework/zend-serializer (2.4.11 => 2.4.13): Loading from cache
 Updating zendframework/zend-log (2.4.11 => 2.4.13): Loading from cache
 Updating zendframework/zend-crypt (2.4.11 => 2.4.13): Loading from cache
 Updating zendframework/zend-http (2.4.11 => 2.4.13): Loading from cache
 Updating zendframework/zend-filter (2.4.11 => 2.4.13): Loading from cache
 Updating zendframework/zend-inputfilter (2.4.11 => 2.4.13): Loading from cache
 Updating zendframework/zend-form (2.4.11 => 2.4.13): Loading from cache
 Updating zendframework/zend-mvc (2.4.11 => 2.4.13): Loading from cache
 Updating mongodb/mongodb (1.1.1 => 1.4.2): Downloading (100%)         
 Updating psr/log (1.0.2 => 1.1.0): Loading from cache
 Updating phpunit/php-timer (1.0.8 => 1.0.9): Loading from cache
 Installing symfony/polyfill-ctype (v1.11.0): Loading from cache
 Updating symfony/yaml (v2.8.17 => v2.8.50): Loading from cache
 Updating symfony/filesystem (v2.8.17 => v2.8.50): Loading from cache
 Updating symfony/config (v2.8.17 => v2.8.50): Loading from cache
 Updating symfony/dependency-injection (v2.8.17 => v2.8.50): Loading from cache
 Updating algolia/algoliasearch-client-php (1.18.0 => 1.28.0): Downloading (100%)         
 Updating sebastian/diff (1.4.1 => 1.4.3): Loading from cache
 Updating symfony/stopwatch (v3.2.3 => v3.4.28): Loading from cache
 Updating symfony/process (v2.8.17 => v2.8.50): Loading from cache
 Updating symfony/finder (v3.2.3 => v3.4.28): Downloading (100%)         
 Updating symfony/event-dispatcher (v2.8.17 => v2.8.50): Loading from cache
 Updating fabpot/php-cs-fixer (v1.13.1 => v1.13.3): Loading from cache
 Updating composer/semver (1.4.2 => 1.5.0): Loading from cache
 Updating composer/spdx-licenses (1.1.5 => 1.5.1): Loading from cache
 Updating seld/cli-prompt (1.0.2 => 1.0.3): Loading from cache
 Updating seld/jsonlint (1.5.0 => 1.7.1): Loading from cache
 Updating sebastian/recursion-context (1.0.2 => 1.0.5): Loading from cache
 Updating phpunit/php-token-stream (1.4.9 => 1.4.12): Loading from cache
 Updating theseer/fdomdocument (1.6.1 => 1.6.6): Loading from cache
 Updating sebastian/finder-facade (1.2.1 => 1.2.2): Loading from cache
 Package sjparkinson/static-review is abandoned, you should avoid using it. Use phpro/grumphp instead.
 Package phpunit/phpunit-mock-objects is abandoned, you should avoid using it. No replacement was suggested.
 Package fabpot/php-cs-fixer is abandoned, you should avoid using it. Use friendsofphp/php-cs-fixer instead.
 Writing lock file
 Generating autoload files 

6. DB Cleansing

Delete entries for EE modules from setup_module table, for example


DELETE FROM setup_module WHERE module IN (
	'Magento_Amqp', 'Magento_BundleStaging', 'Magento_CatalogEvent', 'Magento_CatalogImportExportStaging', 'Magento_CatalogInventoryStaging', 'Magento_CatalogPermissions', 'Magento_CatalogRuleStaging', 'Magento_CatalogStaging', 'Magento_CatalogUrlRewriteStaging', 'Magento_CheckoutStaging', 'Magento_CmsStaging', 'Magento_ConfigurableProductStaging', 'Magento_CustomerBalance', 'Magento_CustomerFinance', 'Magento_Cybersource', 'Magento_DownloadableStaging', 'Magento_Elasticsearch', 'Magento_Enterprise', 'Magento_Eway', 'Magento_GiftCardAccount', 'Magento_GiftCardImportExport', 'Magento_GiftCardStaging', 'Magento_GiftMessageStaging', 'Magento_GiftRegistry', 'Magento_GiftWrapping', 'Magento_GiftWrappingStaging', 'Magento_GoogleOptimizerStaging', 'Magento_GroupedProductStaging', 'Magento_Invitation', 'Magento_LayeredNavigationStaging', 'Magento_MessageQueue', 'Magento_MsrpStaging', 'Magento_MultipleWishlist', 'Magento_MysqlMq', 'Magento_PaymentStaging', 'Magento_PersistentHistory', 'Magento_PricePermissions', 'Magento_ProductVideoStaging', 'Magento_PromotionPermissions', 'Magento_Reminder', 'Magento_ResourceConnections', 'Magento_ReviewStaging', 'Magento_Reward', 'Magento_RmaStaging', 'Magento_SalesArchive', 'Magento_SalesRuleStaging', 'Magento_ScalableCheckout', 'Magento_ScalableInventory', 'Magento_ScalableOms', 'Magento_ScheduledImportExport', 'Magento_SearchStaging', 'Magento_Solr', 'Magento_Staging', 'Magento_Support', 'Magento_VersionsCms', 'Magento_WebsiteRestriction', 'Magento_WeeeStaging', 'Magento_Worldpay'
);

You can also delete EE module related attributes, fields & tables if you want to.
But it should work just fine even leaving them as it is.

7. Clear cache


# Prior Magento 2.3
# rm -rf var/cache/ var/page_cache/ var/view_preprocessed/ var/generation/
# Magento 2.3+
rm -rf var/cache/ var/page_cache/ var/view_preprocessed/ generated/

8. Verify the Magento Edition

Make sure the Magento Edition is now purely community edition with the following methods:

  • Browse {magento-2-base-rl}/magento_version URL to check the version. It should result as Magento/2.x (Community)
  • Check if composer.json file points to magento/project-community-edition repo.
  • Check if there’s no EE license file(LICENSE_EE.txt). You can use the command find . -name LICENSE_EE.txt
  • Check if there’s no any EE di.xml in path app/etc/enterprise/di.xml
  • Check if there’a no EE related modules (see the list above)

If codebase verifies the community edition, then go ahead for testing.

9. Browse the website & check thoroughly

Check the website thoroughly in developer mode (with error reporting turned on).
If everything is working fine as expected, viola you have successfully downgraded the Magento edition to the community.

10. Live Deployment

If everything works as expected, then you can create a release tag and deploy in LIVE.


# get latest code for master
git fetch --all
git checkout master
git pull origin master

# rebase the branch with master
git checkout feature/magento2ce-downgrade
git pull origin feature/magento2ce-downgrade
git rebase master
git push origin feature/magento2ce-downgrade --force

# create release tag
git tag -a v1.0.1 -m 'Downgrade to CE'
git push origin v1.0.1 --follow-tags

In summary:

Magento 2 Enterprise Edition, is a better option for larger merchants who have a budget and don’t want to deal with customizations and enhancements. We highly recommend Magento 2 Enterprise Edition to customers who are the right fit for it.

Though we strongly recommend using the Enterprise Edition to experience the advanced e-commerce platform and scale your business, we feel the expensive license fee is a big concern for some of the merchants.

Need professional help in downgrading/migrating from EE to CE?

Get in touch with our Magento Certified experts who’ll be happy to answer all your questions.

Click here to contact us for Magento migration