Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,059 of 9,059 pages
About the help in other languages
All help pages

The project directory layout

A map of a DXP project's folders - src, config, templates, assets, public, var, vendor - what goes where, what Flex writes, what you commit and what you never commit.

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/help/dxp-developers/the-project-directory-layout.md

On this page

The project directory layout

This page is for developers who open a DXP project for the first time. It maps the folders from the skeleton guide's section 2 ("Key Directories") and says what you change, what Flex manages, and what stays out of Git.

Contents

  1. The map
  2. Where your work goes
  3. What Flex writes
  4. What you commit
  5. Finding where a setting comes from

The map

project-root/
  src/                    your PHP code, namespace App\ (controllers, services, commands)
    Kernel.php            the application kernel
  config/
    packages/             bundle configuration (ibexa.yaml, security.yaml, ...)
    routes/               route definitions
    services.yaml         your service definitions
    jwt/                  the JWT keypair (generated, never committed)
  templates/
    themes/               Twig templates by theme
  assets/
    js/  scss/  styles/   site JavaScript and stylesheet sources
  public/                 the web root
    index.php             the only PHP entry point
    assets/               built site assets (Webpack Encore output)
    bundles/              bundle public files (symlinked by assets:install)
    var/                  stored files and image variations
  translations/           your translation files
  var/
    cache/  log/          Symfony cache and logs
    data_<env>.db         the SQLite database, if you use SQLite
  vendor/                 Composer packages

Where your work goes

You writePut it in
A controller, a service, an event subscriber, a console commandsrc/ (autoloaded as App\)
Configuration of a bundleconfig/packages/<bundle>.yaml
Your routesconfig/routes/
Twig templates of your themetemplates/themes/<theme>/ (Twig and the design engine)
Stylesheets and JavaScriptassets/, built by Encore (Building assets)
A database change of your own entitiesa Doctrine migration (Doctrine migrations)

Never edit files under vendor/. To change a package, extend or decorate its services in src/, or contribute the change to the package (Contributing to the forks).

What Flex writes

When a package with a recipe is installed, Symfony Flex adds its configuration under config/, its routes under config/routes/, its environment defaults to .env, and records the recipe in symfony.lock. The DXP skeleton reads recipes from ibexa/recipes, se7enxweb/sevenx-recipes and the Flex defaults (Reading the metapackage). Commit what Flex writes; it is your project's configuration from then on.

composer recipes                       # which recipes are installed, and which have updates
composer recipes:update <package>      # apply a newer recipe version (review the diff)

What you commit

CommitNever commit
src/, config/ (without config/jwt/*.pem), templates/, assets/, translations/.env.local and other files with secrets
composer.json, composer.lock, symfony.lockvendor/, node_modules/
package.json, yarn.lock, webpack.config.jsvar/, public/var/, built public/assets/ (unless you deploy them by Git on purpose)
.env (defaults only)the JWT keys, database dumps

Finding where a setting comes from

php bin/console debug:config ibexa                     # the resolved configuration of the content packages
php bin/console exponential:debug:config-resolver <parameter> --siteaccess=site
php bin/console debug:router | grep adminui            # which routes exist
php bin/console debug:container <service id>           # where a service is defined

Become an Exponential Partner

Partners share their information, provide funding, contribute back and develop the products with us, and that is how Exponential grows. A partner website and dashboard are planned for mid-2027: please become a partner today to speed up our growth rate and land new features faster.

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x