Top-Level Directory Structure
Root Directory
magento2/
├── app/ # Custom code, themes, configuration
├── bin/ # CLI scripts (bin/magento)
├── dev/ # Development tools and tests
├── lib/ # Magento framework libraries
├── pub/ # Web-accessible document root
├── setup/ # Installation and upgrade scripts
├── var/ # Cache, logs, temporary files
├── generated/ # Auto-generated code (factories, proxies)
├── vendor/ # Composer dependencies (Magento core)
├── composer.json # Composer dependencies
├── composer.lock # Locked dependency versions
├── Gruntfile.js # Frontend build tool
├── package.json # Node.js dependencies
├── magento # CLI entry point
└── index.php # Main entry point
Detailed Directory Breakdown
app/ — Your Custom Code
app/
├── code/ # Custom modules
│ └── Vendor/
│ └── Module/
│ ├── registration.php
│ ├── etc/
│ ├── Model/
│ ├── Block/
│ └── ...
├── design/ # Custom themes
│ └── frontend/
│ └── Vendor/
│ └── theme/
└── etc/ # Global configuration
├── config.php # Module enable/disable
├── env.php # Environment settings (DB, cache)
└── di.xml # Global DI configuration
pub/ — Document Root (Web Access)
pub/
├── index.php # Frontend entry point
├── admin.php # Admin entry point
├── static/ # Deployed static files (CSS, JS, images)
│ ├── frontend/
│ └── adminhtml/
├── media/ # Product images, uploads
├── opt/ # Optimization (CSS/JS minification)
└── .htaccess # Apache rewrite rules
vendor/ — Magento Core (DO NOT MODIFY)
vendor/
├── magento/ # All Magento core modules
│ ├── module-catalog/
│ ├── module-sales/
│ ├── module-checkout/
│ └── ...
├── magento/framework/ # Magento Framework
├── composer/ # Composer internals
└── autoload.php # Composer autoloader
var/ — Temporary Files (Git Ignored)
var/
├── cache/ # Full-page cache, block cache
├── log/ # system.log, exception.log, debug.log
├── session/ # PHP session files
├── report/ # Error reports
├── import/ # Import/export temp files
├── minification/ # Minified JS/CSS
└── di/ # Generated DI configuration
generated/ — Auto-Generated Code
generated/
├── code/ # Generated factories, proxies, interceptors
│ └── Magento/
│ ├── Catalog/
│ │ └── Model/
│ │ ├── ProductFactory.php
│ │ ├── Product\Proxy.php
│ │ └── Product\Interceptor.php
│ └── ...
└── di/ # Compiled DI config
└── global.php
Key Configuration Files
app/etc/ Configuration
env.php — Environment Configuration
<?php
return [
'db' => [
'table_prefix' => '',
'default' => [
'host' => 'localhost',
'dbname' => 'magento',
'username' => 'root',
'password' => '',
'model' => 'mysql4',
'engine' => 'innodb',
],
],
'cache' => [
'frontend' => [
'default' => [
'backend' => 'Magento\Framework\Cache\Backend\Redis',
'backend_options' => [
'server' => '127.0.0.1',
'port' => '6379',
],
],
],
],
'session' => [
'save' => 'redis',
],
'crypt' => [
'key' => 'your-encryption-key-here',
],
];
config.php — Module Configuration
<?php
return [
'modules' => [
'Magento_Catalog' => 1, // Enabled
'Magento_Sales' => 1, // Enabled
'Vendor_CustomModule' => 1, // Your module
'Magento_BundledExtension' => 0, // Disabled
],
];
di.xml Files
<!-- app/etc/di.xml — Global DI config -->
<!-- app/code/Vendor/Module/etc/di.xml — Module DI config -->
<!-- app/code/Vendor/Module/etc/frontend/di.xml — Frontend-only DI -->
<config>
<type name="Vendor\Module\Model\Calculator">
<arguments>
<argument name="precision" xsi:type="number">2</argument>
</arguments>
</type>
</config>
Other Important Files
| File | Purpose |
|---|---|
app/etc/config.php |
Module enable/disable |
app/etc/env.php |
DB, cache, encryption settings |
composer.json |
Dependencies, autoloading |
bin/magento |
CLI entry point |
pub/index.php |
Web entry point |
Finding Files in Magento
Search Strategies
# Find a module
find app/code vendor/magento -name "module.xml" | grep ModuleName
# Find di.xml files
find . -name "di.xml" -not -path "*/vendor/*"
# Find layout XML
find . -name "*.xml" -path "*/layout/*"
# Find templates
find . -name "*.phtml" -path "*/templates/*"
# Find where a class is defined
grep -r "class ProductRepository" vendor/magento/
# Find plugin definitions
grep -r "plugin name" etc/di.xml
Common File Locations
| What | Where |
|---|---|
| Custom module | app/code/Vendor/Module/ |
| Custom theme | app/design/frontend/Vendor/theme/ |
| DI configuration | app/code/Vendor/Module/etc/di.xml |
| Routes | app/code/Vendor/Module/etc/frontend/routes.xml |
| Layout XML | app/code/Vendor/Module/view/frontend/layout/ |
| Templates | app/code/Vendor/Module/view/frontend/templates/ |
| Static assets | app/code/Vendor/Module/view/frontend/web/ |
| Database setup | app/code/Vendor/Module/Setup/ |
| Unit tests | app/code/Vendor/Module/Test/Unit/ |
| Integration tests | dev/tests/integration/ |
Autoloading
Magento uses Composer autoloading (PSR-4):
{
"autoload": {
"psr-4": {
"Vendor\\Module\\": "app/code/Vendor/Module/"
},
"classmap": [
"app/code/Vendor/Module/Setup/"
]
}
}
Classes are loaded automatically based on namespace. No manual require needed.
Quiz
1. Where should you put custom modules?
2. What does the generated/ directory contain?
3. What is the web-accessible document root?
Flashcards
Question
Where are custom modules?
Click to reveal answer
Answer
app/code/Vendor/Module/
Question
What is in vendor/?
Click to reveal answer
Answer
Composer dependencies (Magento core) — DO NOT MODIFY
Question
What is pub/?
Click to reveal answer
Answer
Web-accessible document root (index.php, static files, media)
Question
What is generated/?
Click to reveal answer
Answer
Auto-generated factories, proxies, interceptors, compiled DI
Question
What is var/?
Click to reveal answer
Answer
Cache, logs, sessions, temporary files (git ignored)
Revision Notes
Key Takeaways
- 1. app/code/: Custom modules and themes (your code)
- 2. vendor/: Magento core via Composer (never modify)
- 3. pub/: Web document root (index.php, static, media)
- 4. generated/: Auto-generated factories, proxies, interceptors
- 5. var/: Cache, logs, sessions (git ignored)
- 6. Key configs: app/etc/env.php, app/etc/config.php, di.xml
Interview Tips
- • Draw the directory structure and explain each top-level directory
- • Explain why vendor/ should never be modified directly
- • Know where to find specific files (di.xml, routes, templates)
Cheat Sheet
Top-Level:
app/code/ → Custom modules (YOUR code)
app/design/ → Custom themes
vendor/ → Composer deps (DO NOT MODIFY)
pub/ → Web root (index.php)
var/ → Cache, logs (git ignored)
generated/ → Auto-generated code
bin/magento → CLI tool
Key Files:
app/etc/env.php → DB, cache config
app/etc/config.php → Module enable/disable
etc/di.xml → Dependency injection
etc/module.xml → Module definition