Vendor directory

In Magento 2 Best place to keep code, app/code or vendor Directory

Posted by

Magento offers two primary locations for custom modules the vendor directory and the app/code directory. Each option has its advantages and disadvantages, and choosing the right location depends on various factors, including development workflow, team collaboration, and deployment preferences. In this article, we will explore the advantages and disadvantages of both app/code and vendor directories for housing custom modules in Magento 2. Understanding these considerations will help developers make informed decisions when organizing their customizations within the Magento ecosystem.

app/code Directory

The app/code directory is the standard location for custom modules in Magento 2. When you create your custom module in this directory, it is easier to manage, organize, and maintain your codebase. This approach follows Magento’s recommended directory structure and makes it simpler to deploy, version-control, and share your custom modules.

Advantages of Using app/code Directory

Clear and Organized

Placing custom modules in app/code keeps them separate from Magento’s core code and third-party extensions, leading to a cleaner and more organized codebase.

Version Control

Storing custom modules in app/code allows you to include them in your version control system, enabling better collaboration among team members and easier rollback to previous versions if needed.

Easier Maintenance

Custom modules in app/code are less likely to be affected by Magento updates and can be updated more easily when needed.

Disadvantages of app/code Directory

Manual Deployment

When you place custom modules in app/code, you need to manually deploy the modules to your production environment. This process can be time-consuming, especially in a multi-server environment. You will need a magento | adobe commerce developer

Potential Conflicts

If multiple developers are working on the same custom module, manual deployment can lead to conflicts and inconsistencies if changes are not synchronized properly.

vendor Directory

The vendor directory is primarily reserved for third-party extensions and Magento components installed via Composer. When you install a module through Composer, it is placed in the vendor directory along with its dependencies. Custom modules placed directly in the vendor directory can get overwritten during Composer updates, leading to loss of modifications and complicating maintenance.

Advantages of vendor in Magento 2

Easy Installation

Placing custom modules in the vendor directory allows you to install them via Composer with a simple command. This streamlines the installation process and ensures that the module is managed as a dependency.

Dependency Management

Custom modules in the vendor directory can be bundled with their dependencies, allowing for better dependency management and compatibility.

Automated Updates

When you update your Magento installation or run composer update, Composer automatically manages the updates for modules in the vendor directory, simplifying the maintenance process.

Disadvantages of vendor directory

Overwrite Risk

Storing custom modules in the vendor directory poses a risk of being overwritten during Composer updates, especially if the module does not have a unique namespace or identifier.

Codebase Clutter

The vendor directory can become cluttered with various third-party extensions and modules, making it challenging to locate and manage your customizations effectively.


When developing custom modules in Magento 2, one of the key decisions is where to place them in the directory structure. To maintain a well-organized and maintainable Magento 2 codebase, it is recommended to keep your custom modules in the app/code directory. This approach ensures clear separation from the core code and third-party extensions, making it easier to manage your customizations and providing a more controlled environment for your development efforts.

Leave a Reply

Your email address will not be published. Required fields are marked *